Utiliser des conditions de valeur dans les modèles ODT de Dolibarr

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 traductionTest
Code de l’attributtest
TypeNumérique entier
Taille1
Position100
Fichier de langue
Champ calculé$object->statut == 3 ? 1 : null
Visibilité0
Afficher sur PDF0
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 :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.