Créer un modèle de document ODT

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search

Cette page décrit comment construire un modèle de document ODT pour utiliser la génération de document ODT.

Pour savoir comment générer un modèle de document PDF, voir la page Créer un modèle de document PDF. Créer un modèle PDF requiert des connaissances en programmation PHP mais pas la création de modèles ODT.

Prérequis

  • Dolibarr: 3.1+
  • OpenOffice: 3.2+, LibreOffice, ...

Créer votre document

  • Créer un document OpenOffice ou LibreOffice en partant de rien ou en prenant un example fournis. Si vous partez d'un exemple, vous les trouverez installés dans les sous-répertoires du répertoire documents/doctemplates
  • Editer le document en utilisant toutes les fonctions de votre suite bureautique.

Incluer dans votre documents les tags des informations que vous voulez voir. Les tags seront remplacés automatiquement au moment de la génération du document par Dolibarr. La liste des tags disponibles est décrite dans le chapitre suivant.

Warning.png Attention, les tags sont entourés de {} ou [] pour les tableaux (voir plus loin) et doivent être tapés d'une traite sous la suite Office (sans retour arrière ou effacement, ni par copié-collé). Dans le cas contraire, la suite Office ajoutera des informations invisibles qui empêche le remplacement.

Tags

Voici la liste des tags qui seront remplacés par les informations appropriées:

Company/foundation information

mycompany_logo = {mycompany_logo}
mycompany_name = {mycompany_name}
mycompany_address = {mycompany_address}
mycompany_zip = {mycompany_zip}
mycompany_town = {mycompany_town}
mycompany_country = {mycompany_country}
mycompany_phone = {mycompany_phone}
mycompany_fax = {mycompany_fax}
mycompany_email = {mycompany_email}
mycompany_web = {mycompany_web}
mycompany_barcode = {mycompany_barcode}
mycompany_capital= {mycompany_capital}
mycompany_juridicalstatus= {mycompany_juridicalstatus}
mycompany_idprof1 = {mycompany_idprof1}
mycompany_idprof2 = {mycompany_idprof2}
mycompany_idprof3 = {mycompany_idprof3}
mycompany_idprof4 = {mycompany_idprof4}
mycompany_vatnumber = {mycompany_vatnumber}
mycompany_note = {mycompany_note}
...

Customers, prospects or suppliers information

company_name = {company_name}
company_address = {company_address}
company_zip = {company_zip}
company_town = {company_town}
company_country = {company_country}
company_phone = {company_phone}
company_fax = {company_fax}
company_email = {company_email}
company_web = {company_web}
company_barcode = {company_barcode}
company_customercode = {company_customercode}
company_suppliercode = {company_suppliercode}
company_capital = {company_capital}
company_juridicalstatus = {company_juridicalstatus}
company_idprof1 = {company_idprof1}
company_idprof2 = {company_idprof2}
company_idprof3 = {company_idprof3}
company_idprof4 = {company_idprof4}
company_vatnumber = {company_vatnumber}
company_note = {company_note}

User information

myuser_lastname = {myuser_lastname}
myuser_firstname = {myuser_firstname}
myuser_login = {myuser_login}
myuser_email = {myuser_email}
...

Informations sur l'objet (facture, proposition commercial, commande, ...)

object_id = {object_id}
object_ref = {object_ref}
object_ref_customer = {object_ref_customer}
object_ref_supplier = {object_ref_supplier}
object_date = {object_date}
object_date_creation = {object_date_creation}
object_date_validation = {object_date_validation}
object_total_ht = {object_total_ht}
object_total_vat = {object_total_vat}
object_total_ttc = {object_total_ttc}
object_vatrate = {object_vatrate}
object_note_private = {object_note_private}
object_note = {object_note}
...

Lignes des objets

Voici comment utiliser les tableaux de lignes des objets (lignes de factures, commandes, etc...). Vous devez créer un tableau dans le document et utiliser une balise "begin" et "end" pour définir la ligne du tableau. Cette ligne sera répétée autant de fois que requis au moment de la génération.

[!-- BEGIN row.lines --]
...
[!-- END row.lines --]

Ensuite, ajouter les tags de votre choix dans les lignes parmi ceux-ci:

{line_fulldesc}
{line_product_ref}
{line_product_ref_fourn}
{line_product_label}
{line_product_type}
{line_desc}
{line_vatrate}
{line_localtax1_rate} (V10)
{line_localtax2_rate} (V10)
{line_up}
{line_up_locale}
{line_qty}
{line_discount_percent}
{line_price_ht}
{line_price_ht_locale}
{line_price_vat}
{line_price_vat_locale}
{line_price_ttc}
{line_price_ttc_locale}
{line_date_start}
{line_date_start_locale}
{line_date_start_rfc}
{line_date_end}
{line_date_end_locale}
{line_date_end_rfc}
{line_unit} : Needs PRODUCT_USE_UNITS to 1
{line_unit_short} : Needs PRODUCT_USE_UNITS to 1

Multicurrency :
{line_multicurrency_code}
{line_multicurrency_subprice}
{line_multicurrency_total_ht}
{line_multicurrency_total_tva}
{line_multicurrency_total_ttc}
{line_multicurrency_subprice_locale}
{line_multicurrency_total_ht_locale}
{line_multicurrency_total_tva_locale}
{line_multicurrency_total_ttc_locale}

Specific to Shipments :
{line_qty_shipped}
{line_qty_asked}
{line_weight}
{line_length}
{line_surface}
{line_volume}

Extra fields:
{line_options_xxx} : Value of extra field (where xxx is code of extra field)
{line_product_options_xxx} : If the line is a product, Value of the Product extra filed (where xxx is code of Product extra field)

Voici un exemple de ce que vous pourriez avoir dans votre traitement de texte: Line for document generation.png

Autres tags personnalisés

Si vous voulez ajouter un champ de substitution non prédéfinie, il y a une solution:

  • Ajouter une fichier dans htdocs/includes/modules/substitutions/functions_mymodule.lib.php
  • Dans ce fichier , écrivez juste une fonction du genre:
/** 		Function called to complete substitution array (before generating on ODT, or a personalized email)
 * 		functions xxx_completesubstitutionarray are called by make_substitutions() if file
 * 		is inside directory htdocs/includes/modules/substitutions
 * 
 *		@param	array		$substitutionarray	Array with substitution key=>val
 *		@param	Translate	$langs			Output langs
 *		@param	Object		$object			Object to use to get values
 * 		@return	void					The entry parameter $substitutionarray is modified
 */
function mymodule_completesubstitutionarray(&$substitutionarray,$langs,$object)
{
   global $conf,$db;

   $myvalue='Put here calculated value to insert';
   $substitutionarray['myowntag']=$myvalue;
}

La fonction sera appelée avant la génération du document afin de compléter le tableau des subtitutions afin que le tag myowntag soit remplacé par la valeur définie dans $myvalue. Vous pouvez ajouter autant de tag que désiré, et mettre le code que vous voulez pour définir les valeurs (recherche en base, en fichier, calcul, partir des variables reçues ou globales...).

Attention: Le premier paramètre dans la déclaration de la fonction doit commencer par & car il est modifié par le code et doit être retourné modifié. De plus, la fonction ne sera appelé que si le module mymodule est activé.

Enregistrer votre document

Pour voir apparaitre votre modèle de document dans la liste des modèles disponibles, placer le dans le sous-répertoire adéquat qui se trouve dans le répertoire documents/doctemplates