Au sein de l’ERP libre Dolibarr, il est possible de créer soit même un ODT servant de modèle à la création des documents PDF pour, par exemple, les bons de commandes et les factures.
Il est même possible de mettre des conditions d’affichage d’une portion de texte avec la syntaxe suivante :
[!-- 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} --]
La limite ? Il n’est pas possible de tester précisément la valeur my_var
.
Heureusement, il existe une bidouille qui permet tout de même d’y arriver.
Pour chaque objet Dolibarr, il est possible de créer des attributs supplémentaires (ou extrafields). Ces attributs peuvent être de toute sorte de type (texte, nombre, booléen, etc.), et être défini par l’utilisatrice ou l’utilisateur Mais il est également possible de leur donner une valeur calculée.
Et c’est ce mécanisme de valeur calculée qui nous intéresse. Nous allons créer un attribut supplémentaire qui va renvoyer 1
lorsque l’on veut afficher du contenu dans le modèle et prendre la valeur null
lorsque l’on ne le veut pas.
Prenons un exemple. Je veux qu’une portion de mon modèle de bon de commande ne s’affiche que si ma commande est en état commandée.
Au sein des paramètres du module Commandes, je me rends dans l’onglet Attributs supplémentaires (commandes).
Je clique sur le bouton NOUVEL ATTRIBUT.
Je remplis le formulaire avec la valeurs suivantes :
Libellé ou clé de traduction | Test |
Code de l’attribut | test |
Type | Numérique entier |
Taille | 1 |
Position | 100 |
Fichier de langue | |
Champ calculé | $object->statut == 3 ? 1 : null |
Visibilité | 0 |
Afficher sur PDF | 0 |
Sommable | □ |
Texte d’aide à afficher dans l’info-bulle |
Je clique sur le bouton Enregistrer.
Et voilà. Il ne me reste plus qu’à modifier mon fichier ODT pour lui ajouter le code suivant :
[!-- IF {object_options_test} --]
Le texte que je veux afficher quand la commande est commandée.
[!-- ENDIF {object_options_test} --]
C’est un peu tordu mais ça fonctionne très bien ! 😁
Sources :