En-tête et pied de page du modèle

Prev Next

Maintenant que Linda sait comment mettre en place un modèle d'offre personnalisé, elle veut comprendre son modèle d'offre. Elle commence à lire la page Visualforce qu'elle vient de récupérer dans GitHub. A un moment donné, elle demande à Vijay leur développeur Salesforce, de lui expliquer le code.

visualforceimage.png

En-tête de la page - StandardController

<apex:page standardController="sofactoapp__Offre__c" extensions="sofactoapp.OffreProcessingControllerExtension"
   renderAs="pdf"
   showHeader="false"
   sidebar="false"
   language="{!sofactoapp__Offre__c.sofactoapp__Langue__c}">

Important : c’est une bonne idée de copier du code entre un modèle de facture et un modèle d’offre, car il y a quelques parties comme les adresses qui sont les mêmes (ou presque).

  1. Pensez à changer le controller :

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Compte__r.BillingStreet}" />

<apex:outputText value="{!sofactoapp__Factures_Client__c.sofactoapp__Compte__r.BillingStreet}" />

  1. Les champs de relation n’ont pas forcément le même nom :

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.Name}"/>

<apex:outputText value="{!sofactoapp__Factures_Client__c.sofactoapp__emetteur_facture__r.Name}"/>

Les deux champs récupèrent le nom de la Raison Sociale.

En-tête de la page - Langue

L'en-tête de la page de l’offre contient également par défaut le snippet (bout de code) qui permet de traduire le modèle :

language="{!sofactoapp__Offre__c.sofactoapp__Langue__c}"

Linda peut voir que la langue est choisie à partir de l’offre.
Elle peut sélectionner la langue à partir :

  1. De la Raison Sociale :

{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Langue__c}

  1. Des Données Comptables :

{!sofactoapp__Offre__c.sofactoapp__Donnee_Comptable__r.sofactoapp__Langue__c}

Rappel : D’une manière générale, seules les parties pour lesquelles il y a des traductions prévues dans Salesforce seront traduites. 

Ceci englobe :

  • Les étiquettes des champs des objets Frisbii (FR / EN)

  • Les étiquettes personnalisées mises en place par vos soins, si vous avez mis en place une traduction.

Ce qui n'est pas pris en compte :

  • Texte mis en “dur” dans la page Visualforce

  • Les étiquettes personnalisées non traduites

  • Les données renseignées dans Frisbii / Salesforce par l'utilisateur

Pied de page

Le pied de page est divisé en quatre colonnes :

Offre 2 - Pied de page.png

Les informations sont à renseigner sur votre Raison Sociale.

Les coordonnées de votre entreprise

Dans la première colonne vous trouverez :

  • Le nom de la Raison Sociale

  • La rue 

  • Le code postale

  • La ville

  • Le pays

Voici comment cela se présente dans le code :

<!--Coordonnées de votre entreprise/ Your company's adress-->
<td style="width:30%"> 
<apex:outputPanel> 
<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.Name}" style="text-transform:uppercase;color:#696969;font-size:10px" /> <br /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Rue__c}" /> <br /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Code_postal__c}" /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Ville__c}" /> <br /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Pays__c}" /> 
</apex:outputPanel> 
</td> 

Contact de votre entreprise

La deuxième colonne reprend les informations de contact de la Raison Sociale :

  • Le numéro téléphone

  • La télécopie

  • L'adresse email

  • Le site web

Et comment cela est présenté dans le code :

<!--Contact de votre entreprise/ Your companies contact infos--> 

<td class="borderOn" style="border-left:0.2px solid black;border-right:0.2px solid black;border-top:hidden;border-bottom:hidden;width:30%"> 
<apex:outputPanel> 
<apex:outputText value="T : {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__T_l_phone__c}" rendered="{!NOT(ISBLANK(sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__T_l_phone__c))}" /> <br /> 

<apex:outputText value="F : {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__T_l_copie__c}" rendered="{!NOT(ISBLANK(sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__T_l_copie__c))}" /> <br /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Email__c}" /> <br /> 

<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__website__c}" /> 
</apex:outputPanel> 
</td> 

Mentions légales

Et voici les informations que vous retrouverez dans la troisième colonne :

  • Forme juridique

  • Capital sociale

  • Ville RCS

  • SIREN

  • Code APE

  • TVA intracommunautaire

  Le code correspond à celui-ci :  

<!--Mentions légales/ Legal notice--> 

<td class="borderOn" style="border-left:hidden;border-right:0.2px solid black;border-top:hidden;border-bottom:hidden;width:30%"> 
<apex:outputPanel> 
<apex:outputText value="{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Forme_juridique__c} 
{!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Capital_social__c} {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__Ville_RCS__c}" /> 
<br /> 

<apex:outputText value="{!$ObjectType.sofactoapp__Raison_Sociale__c.Fields.sofactoapp__SIREN__c.Label} : {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__SIREN__c}" /> 

<br /> 

<apex:outputText value="{!$ObjectType.sofactoapp__Raison_Sociale__c.Fields.sofactoapp__APE__c.Label} : {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__APE__c}" /> 

<br /> 

<apex:outputText value="{!$ObjectType.sofactoapp__Raison_Sociale__c.Fields.sofactoapp__TVA_intra__c.Label} : {!sofactoapp__Offre__c.sofactoapp__Raison_Sociale__r.sofactoapp__TVA_intra__c}" /> 
</apex:outputPanel> 
</td> 

Numéro de page

Regardons la quatrième colonne plus en détail dans laquelle nous affichons la page :

<td style="width:10%" class="alignright">
<apex:outputText value="{!$Label.Sofacto_Page}"/>&nbsp; 
<span class="pagenumber" />/ <span class="pagecount" />   
</td>

Nous pouvons faire appel aux classes pagenumber et pagecount, car les deux sont définies dans le stylesheet :

<!-- Styles -->
<apex:stylesheet value="{!URLFOR($Resource.QUOTATION_STYLE')}" />

Voici comment ce code CSS est précisé dans le stylesheet :

.pagenumber:before {
content: counter(page);
}

.pagecount:before {
content: counter(pages);
}

Linda est étonnée car la page Visualforce commence par le pied de page. "C'est le monde à l'envers" pense t-elle. Vijay lui explique que l'affichage est géré par la styleClass="footer_center  small".

Même si le code de cette partie est en haut de la page Visualforce, les informations précisées dans la balise apex:outputPanel font en sorte que le pied de page apparaisse bien en bas de la page de l'offre.  

<apex:outputPanel id="panelHeaderFooter" styleClass="footer_center  small" layout="block">