Les postes d'offres

Prev Next

Maintenant que Linda comprend la mise en place des en-tête et pied de page ainsi que la structure principale, elle s'intéresse aux postes d'offres. Vijay, le développeur Salesforce est à ses côtés pour mieux comprendre le code.

Postes d’offres

Cette partie du code couvre le tableau principal de l’offre, divisé en trois parties :

  • Les en-têtes

  • Les postes d’offres

  • Les sous-totaux et totaux

Commençons par les en-têtes.

Les en-têtes du tableau principal

Par défaut, les colonnes suivantes sont prévues dans le modèle :

  • Désignation

  • Prix Unitaire HT

  • Quantité

  • Taux de remise (affiché seulement si applicable)

  • TVA (%)

  • Montant HT

Remarque : nous utilisons systématiquement l'étiquette disponible dans l'application pour l'affichage de ces informations. Si vous utilisez ces étiquettes, la traduction en anglais est déjà gérée. Si vous voulez changer ces en-têtes, nous recommandons d'utiliser les étiquettes personnalisées.

<!-- Lignes en-tête produits -->
<tr>
<th class="alignleft">
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Designation__c.Label}
</th>
<th class="aligncenter">
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Prix_Unitaire_HT__c.Label}
</th>
<th class="aligncenter">
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Quantite__c.Label}
</th>
<th class="aligncenter" style="display:{!IF(sofactoapp__Offre__c.sofactoapp__Afficher_la_remise__c, '', 'none')}">
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Taux_de_Remise__c.Label}
</th>
<th class="aligncenter"> 
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Taux_de_TVA_list__c.Label}
</th>
<th class="aligncenter">
{!$ObjectType.sofactoapp__Poste_Offre__c.Fields.sofactoapp__Montant_HT__c.Label}
</th>
</tr>

Il y a seulement une colonne sous condition, notamment le taux de remise qui est seulement affiché si la case Afficher la remise est cochée sur l’offre.

La relation des objets

Comme la relation Ligne de facture et Facture, l’objet Poste d’offre est en relation N<>1 avec l’objet Offre.

VIjay explique à Linda qu'il est impossible de récupérer des champs d’objets “enfants” en passant par nos chemins habituels. (Voici un article à ce sujet : Modèles PDF - Comment personnaliser le modèle Visualforce)

Notre page ne saura pas de quel enregistrement elle doit prendre les champs.

Pour pouvoir quand même afficher les informations de la ligne de facture, nous allons utiliser la balise apex : repeat. Cela nous permet de parcourir toutes les lignes de factures pour insérer les informations sur le PDF.

Nous avons un autre souci : L’ordre des lignes peut être important pour notre cas de métier. C’est pourquoi nous allons enchaîner des apex : repeat.

Le premier apex:repeat fait appel à une extension précisée en haut de la page (extensions="sofactoapp.OffreProcessingControllerExtension") qui appelle un code. Ce code génère une “map” - un tableau logique - listant tous les postes d’offre dans l'ordre choisi sur l'enregistrement de l’offre.

<apex:repeat value="{!orderedOfferLineItems}" var="orderedLigne" id="orderedLignes">

Le deuxième apex:repeat parcourt ce tableau logique afin d'assurer son affichage sur le modèle PDF.

<apex:repeat value="{!sofactoapp__Offre__c.sofactoapp__Postes_d_offre__r}" var="ligne" id="lignes">

La condition mise en place dans la balise apex:OutputPanel vérifie que cette boucle s'arrête dès que la fin du tableau logique est atteinte.

<apex:outputPanel layout="none" rendered="{!ligne.Id == orderedLigne}">

Voilà pourquoi cette section est entourée par deux balises :

  • apex:repeat et

  • apex:OutputPanel.

<apex:repeat value="{!orderedOfferLineItems}" var="orderedLigne" id="orderedLignes">
<apex:repeat value="{!sofactoapp__Offre__c.sofactoapp__Postes_d_offre__r}" var="ligne" id="lignes">
<apex:outputPanel layout="none" rendered="{!ligne.Id == orderedLigne}">
<td>...</td>
<td>...</td>
<td>...</td>
...
</apex:outputPanel>
</apex:repeat>
</apex:repeat>

Cette structure encadrant les <td> contient le code pour afficher les informations du corps du tableau.

Les lignes sont ensuite reprises de l'objet Poste d’offre.

Désignation

Cette cellule affiche par défaut les champs :

  • Désignation (Poste d’offre).

  • Description (Produit) - Si la case Afficher détails produits sur la facture est cochée.

  • Description détaillée (Produit) - Si la case Afficher produits détaillée sur la facture est cochée.

Prix unitaire

  • Si la case Afficher remise est cochée, le champ prix unitaire HT est affiché.

  • Si la case Afficher remise n'est pas cochée, le champ prix unitaire HT après remise est affiché.

Quantité

  • La quantité indiquée sur le poste d’offre est reprise.

Taux de TVA

  • Le taux indiqué sur le poste d’offre est repris.

Montant total HT

  • Le montant total HT représenté sur le poste d’offre est repris.