Créer un modèle de document ODT

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
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.
 * 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.

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:

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:

Voici un exemple de ce que vous pourriez avoir dans votre traitement de texte:

Substitution conditionnelle
A partir de Dolibarr v3.3, vous pouvez utiliser des remplacements conditionnels, ce qui en termes simples signifie que vous pouvez décider d'imprimer quelque chose si une variable est vraie, ou imprimer autre chose si elle est fausse (ou rien du tout) - et cela marche non seulement avec du texte, mais aussi toute structure plus complexe comme les tableaux et les images.

Exemple: [!-- IF {my_var} --] Print this text if {my_var} is true (can be any value but null/0/empty string) [!-- ELSE {my_var} --] Or print this if it's false (null/0/empty string) [!-- ENDIF {my_var} --]

Note: le tag ELSE est biensûr optionnel, vous pouvez sans problème juste utiliser un IF/ENDIF si vous préférez.

ATTENTION: le format de cette balise spéciale est très précis et pointilleux, faire attention à mettre un seul espace entre:
 * IF/ELSE/ENDIF
 * {my var}
 * --]
 * --]

Autres tags personnalisés
Si vous voulez ajouter un champ de substitution non prédéfini, il y a une solution: htdocs/monmodule/core/substitutions/functions_mymodule.lib.php
 * Ajouter un fichier nommé
 * Dans ce fichier, écrivez juste une fonction du genre:

La fonction sera appelée avant la génération du document afin de compléter le tableau des substitutions 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é.

Pour que vote votre fonction de substitution soit bien appelée, il vous faut:
 * Vérifier que votre fichier de substitution est bien stocké dans le répertoire htdocs/mymodule/core/substitutions
 * Créer un module (Voir la page Développement module) avec son fichier descripteur de module.
 * Vérifier que le fichier descripteur de module contient une entrée pour déclarer qu'il y a un fichier de substitution à appeler. Cette doit être
 * Activer le module (un module doit être activé et désactivé pour prendre en compte les changement dans son fichier descripteur)

Autres tags personnalisées pour les lignes
Cette fonctionnalité est disponible depuis Dolibarr v3.3 (version de développement futur).

De manière similaire au chapitre précédent, vous devez définir une fonction de la même façon mais avec quelques différences:


 * Créez ou modifiez le même fichier que précédemment (voir le chapitre précédent).
 * Voici les différences: dans le fichier, écrire une autre fonction avec presque le même nom mais avec '_lines' en suffixe, et également ajouter une nouvelle variable $lines:

Contrairement à la fonction précédente qui n'est jamais appelée qu'une seule fois, cette fonction sera appelée à chaque fois qu'une ligne de produit sera traitée, en vous donnant chaque fois un objet $line différent que vous pouvez traiter. Cela vous permet de faire des substitutions de tags différentes pour chaque produit.

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