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:
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:
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:
GitLab.com
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.