Suite à la mise en place et l'application de la révision indicielle, D'Angelo veut montrer à ses collègues de l'équipe ADV, Pedro et Clara, la dernière étape : l'affichage des indices sur les factures PDF.
Affichage de l'indice sur le modèle PDF
Depuis une facture générée à partir de leur abonnement, D'Angelo prévisualise le PDF de la facture :
Pedro demande ce que le commentaire sur le prix révisé signifie. D'Angelo se lance dans l'explication.
Explication des informations affichées sur le modèle PDF
Le commentaire explique le calcul des indices : P0 = Le prix de base.
P1 = Le prix revalorisé.
S0 = Le coefficient d'indice de référence.
S1 = Le coefficient d'indice appliqué.
Vérifions le calcul pour la première ligne de facture Nettoyage de sol : P0 = 89 000,00 €
S0 = 1,00
S1 = 1,06
P1 = 89 000,00 € x 1,06 = 94 340,00 €
Clara trouve que l'affichage n'est pas très clair, car les décimales ne sont pas affichées sur le PDF.
D'Angelo regarde dans le code Visualforce du modèle PDF pour en trouver la raison.
Modification du code de la page Visualforce
Si vous souhaitez modifier l'affichage de la révision indicielle dans le PDF de facture, voici comment faire.
Accéder à la page Visualforce
D'abord, nous allons accéder à la page Visualforce.
Si vous n'avez pas accès aux pages Visualforce, il vous faut d'abord lire ces articles Salesforce :
Procédure
1. Allez sur Configuration.
2. Tapez Pages dans la recherche.
3. Allez dans Pages Visualforce.
4. Ouvrez votre modèle PDF.
Remarque : Si vous ne connaissez pas le nom du modèle :
(1) Allez sur une facture et prévisualisez le PDF en cliquant sur Créer PDF
(2) Si vous glissez la souris sur la barre noire en dessous des boutons, le nom du modèle s'affichera.
Très bien, nous avons ouvert la page Visualforce de votre facture.
Jetons maintenant un oeil sur la partie qui nous intéresse, celle des indices.
Explication du code
Pour bien comprendre le code, parcourons-le ligne par ligne.
La partie qui nous intéresse commence avec ce commentaire :
<!-- Indices/ Indexes -->
La structure est la suivante :
Toute la section qui concerne les indices se trouve dans un <table> (tableau), dans lequel se trouve un <tr> (table row/ligne du tableau), dans lequel se trouve seulement un <td> (table detail/ cellule du tableau).
Conditions d'affichage :
À l'intérieur du <td> nous utilisons un <apex:outputPanel> pour mettre une condition sur l'affichage des indices sur la facture.
La condition est !NOT(ISBLANK(sofactoapp__Factures_Client__c.sofactoapp__IndiceId__c))
Si le champ Indice (ID) est vide sur la facture, les indices ne s'afficheront pas sur le PDF de la facture.
Affichage sur le PDF:
Ensuite vous voyez la ligne en dur :
Prix révisé selon la formule P1 = P0 x (S1 / S0)
Remarque :
(1) Ceci n'est pas une bonne pratique, car il faudrait utiliser une étiquette personnalisée afin de faciliter la modification de cette information, sans devoir toucher à la page Visualforce à chaque modification et pour apporter facilement une traduction.
(2) Si vous voulez en profiter pour rendre votre code plus propre, voici l'article qui explique comment afficher une étiquette personnalisée dans une page Visualforce : Modèles PDF - Comment personnaliser le modèle Visualforce.
(3) Néanmoins, nous avons opté pour l'ajout en dur dans le code, car cela vous permet de sauvegarder le code, sans avoir à créer des étiquettes personnalisées au préalable.
La ligne suivante affiche l'explication pour S0 :
S0 = indice
{!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Indice__r.Name}
S0 = indice (également ajouté en dur).
Nom que vous avez donné à l'indice lié à l'abonnement.
<apex:param value="
{!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Date_indice_reference__c}" />
La date d'indice de référence de l'abonnement
<apex:outputText value="
{!FLOOR(sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Coefficient_indice_reference__c)}" />
Le coefficient de l'indice de référence de l'abonnement
La ligne suivante affiche l'explication pour S1 :
<apex:outputText value="S1 = indice
{!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Indice__r.Name}
S1 = indice (également ajouté en dur)
Nom que vous avez donné à l'indice lié à l'abonnement
<apex:param value="{!sofactoapp__Factures_Client__c.sofactoapp__Date_indice__c}" />
La date d'indice de la facture
<apex:outputText value="
{!FLOOR(sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Coefficient_indice_reference__c)}" />
Le coefficient de l'indice de la facture
<apex:outputText value="
{!FLOOR(sofactoapp__Factures_Client__c.sofactoapp__Coefficient_indice_date__c)}" />
Coefficient indice à date de la facture
Si, suite à cette explication, vous voulez embellir cette partie de votre facture, voici les articles qui vous y aideront :
Et voici le code entier, si vous voulez l'ajouter dans votre page Visualforce.
Code complet à copier
<!-- Indices/ Indexes -->
<table>
<tr>
<td class="borderOff">
<apex:outputPanel layout="none" rendered="{!NOT(ISBLANK(sofactoapp__Factures_Client__c.sofactoapp__IndiceId__c))}">
<br />
<br />Prix révisé selon la formule P1 = P0 x (S1 / S0)
<br />
<apex:outputText value="S0 = indice {!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Indice__r.Name} {0,date,dd'/'MM'/'yyyy}">
<apex:param value="{!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Date_indice_reference__c}" />
</apex:outputText>
=
<apex:outputText value="{!FLOOR(sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Coefficient_indice_reference__c)}" />
<br />
<apex:outputText value="S1 = indice {!sofactoapp__Factures_Client__c.sofactoapp__Abonnement__r.sofactoapp__Indice__r.Name} {0,date,dd'/'MM'/'yyyy}">
<apex:param value="{!sofactoapp__Factures_Client__c.sofactoapp__Date_indice__c}" />
</apex:outputText>
=
<apex:outputText value="{!FLOOR(sofactoapp__Factures_Client__c.sofactoapp__Coefficient_indice_date__c)}" />
<br />
</apex:outputPanel>
</td>
</tr>
</table>
Correction de l'affichage des coefficients
Ha, D'Angelo à trouvé le vice caché pour les décimales ! Sur les coefficients, la fonction FLOOR est appliquée. Donc, les coefficients s'affichent sans décimales.
Il regarde quand même dans l'article Salesforce : Fonction floor pour mieux comprendre.
Ensuite, il se connecte à sa sandbox copie partielle actualisée pour tester l'affichage s'il enlève la fonction FLOOR pour les deux coefficients sur la page Visualforce, mais le résultat est que les coefficients sont affichés avec 4 décimales.
Il relit l'article Modèle PDF - Comment embellir le modèle PDF de la facture ou de l'offre.
Puis, il utilise ce code :
<apex:outputText value="{0, number, ###.00}">
<apex:param value="{!sofactoapp__Factures_Client__c.sofactoapp__Coefficient_indice_date__c}"/>
</apex:outputText>
pour les deux coefficients, et voici l'affichage sur le PDF :
Clara et Pedro sont vraiment contents du résultat. Ils précisent seulement à leur collègues de ne pas saisir le mot Indice dans le nom des indices, afin d'éviter la redondance du mot sur les factures PDF.