Formatage facturation horaire pour certains articles

Bonjour,

Lorsque la quantitĂ© pour un article est exprimĂ©e en « heures Â», la facturation par dĂ©faut pour « une heure et demi Â» se prĂ©sente ainsi dans les documents Ă  imprimer :

C’est parfois troublant pour le client, car la confusion avec l’interprĂ©tation « 1 heure et 50 minutes Â» est possible, voir naturelle.

J’aurais aimĂ© quelque chose du style 1"30, ou 1h30. A minima, j’aimerais contrĂŽler les nombre de digits aprĂšs la virgule pour cette colonne (2 par dĂ©faut), afin de la rendre non-ambigue. Par exemple : 1.500 Heure(s).

J’ai eu beau chercher un peu partout comment faire, je ne trouver pas de rĂ©ponse, Il me semble qu’il faut redĂ©finir un format d’impression pour la table des articles (ou la facture) en jinja2 ? Dans ce cas, comment rĂ©cupĂ©rer le code pour le format de facture par dĂ©faut pour ne pas tout refaire ?

Toute aide sera la bienvenue, merci.

Bonnes fĂȘtes de fin d’annĂ©e.

Richard.

Bonjour @richardg,

Peut-ĂȘtre qu’en mettant l’unitĂ© de mesure Ă  droite de la quantitĂ©, la lecture sera plus claire ?
Il y a une option pour cela dans les paramùtres d’impression: image

Une seconde option pourrait ĂȘtre d’ajouter un champ personnalisĂ© “DurĂ©e” dans la table enfant “Article de la facture de vente”. Ca permettrait d’imprimer une valeur en heures et minutes Ă  la place de la quantitĂ© facturĂ©e:
image

Exemple:

Il faudrait faire un script python pour que le champ dépende de la quantité facturée.

Sinon, il est effectivement possible de faire un format d’impression sur mesure en Jinja. Voici le dossier avec les fichiers contenant le code standard:

Je vous souhaite de trĂšs bonnes fĂȘtes !

Bonjour Charles-Henry,

Merci beaucoup pour ces pistes, qui m’ont permis d’avancer.

Au final, j’ai fait ce petit changement dans le code du fichier /frappe/frappe/utils/formatters.py :



elif df.get(« fieldtype Â») == « Currency Â»:
default_currency = frappe.db.get_default(« currency Â»)
currency = currency or get_field_currency(df, doc) or default_currency
return fmt_money(value, precision=get_field_precision(df, doc), currency=currency)

elif (df.get(« fieldname Â») == « qty Â» or df.get(« fieldname Â») == « total_qty Â») and (doc.get(« uom Â») == « Heure Â»):
return format_duration(value * 3600)

elif df.get("fieldtype") == "Float":
	precision = get_field_precision(df, doc)
	currency = currency or get_field_currency(df, doc)




J’imagine bien que ce n’est pas la mĂ©thode la plus propre, mais il me semble que ca fonctionne sans casser d’autres parties du logiciel
 ?

J’ai aussi un peu adaptĂ© le jinja pour masquer l’unitĂ© si c’est une quantitĂ© horaire.

Merci encore et bonne fin d’annĂ©e.

Richard.