5.0 KiB
5.0 KiB
Template Business Rules - Session Memo
Date: 2026-04-08
Scope: templates Relatorio + ponts report_* Python.
1) Regles metier confirmees
insurance.fodt:- "This is to certify that we have insured for account of" doit afficher la compagnie courante (
shipment.company.party), pas le client. - "Amount insured" suit la regle 110% de la valeur incoming.
- Base incoming: montant des incoming moves lies au shipment, derive des lots et de la source achat (
purchase.line.unit_price * current_quantity_converted).
- "This is to certify that we have insured for account of" doit afficher la compagnie courante (
sale bill:- La 2eme date attendue est une maturity date (echeance), pas le libelle de condition de paiement.
- Le montant en toutes lettres doit correspondre au montant du bill (montant facture/total), pas au prix unitaire d'une ligne.
2) Pratiques templates Relatorio
- Preferer des proprietes Python
report_*stables sur le modele plutot que des expressions Genshi complexes. - Pour
stock.shipment.in, privilegierrecords[0].report_*dans le template. - Si un placeholder s'affiche en brut dans le PDF:
- verifier que c'est un vrai
text:placeholderODF et pas du texte simple. - verifier le scope de variable (
records[0]vs variable locale non definie).
- verifier que c'est un vrai
- Dans les placeholders XML:
- utiliser
"et'dans les expressions XML. - eviter les echappements de type
\'.
- utiliser
3) Decisions de conception appliquees
insurance.fodt:- ajout d'un champ shipment
surveyor(party.party) via onglet "Surveyor". - ajout d'une propriete
report_insurance_contact_surveyorpour la zone "Contact the following surveyor".
- ajout d'un champ shipment
payment_order.fodt:- migration des tags
<...>legacy vers la syntaxe template habituelle du projet. - ajout de la section de config template, et exposition depuis
account.invoicecomme pour CN/DN/Invoice/Prepayment.
- migration des tags
packing_list.fodt:- date en haut droite basee sur la date du jour.
- unites Net/Gross alignees sur l'unite de
purchase.line.
bill.fodt:- suppression du report
sale_final.fodtdu menu sale. - ajout de ponts Python cote sale pour:
- montant bill numerique,
- montant bill en lettres,
- maturity date issue de
invoice.lines_to_pay.maturity_date(avec fallback metier).
- suppression du report
4) Check-list rapide avant validation d'un template
- Les placeholders sont-ils tous resolus (aucun
<records[...]...>brut)? - Le scope est-il correct (
records[0]/sale/invoice) partout, y compris header/footer? - La source metier est-elle correcte (compagnie vs client, total vs unit_price, maturity date vs payment term)?
- Les formats sont-ils conformes (date, devise, montant en lettres)?
- Le template est-il bien expose dans la config + menu d'impression de la forme cible?
5) Session 2026-04-09 - Rappels metier purchase_trade / account_invoice
- Factures trade:
NETetGROSSviennent delot.qt.histdu lot retenu, pas deinvoice.line.quantity.- priorite lots:
physicd'abord, sinon lotvirtualunique. - l'unite affichee vient de
lot.lot_unit_line. - les infos shipment doivent dependre des lots reels des lignes facture.
- le label
S/Idoit affichershipment.reference. invoice_ict_final.fodt: siNB BALES = 0, afficherUnchanged.- les quantites de
invoice_ictetinvoice_ict_finalsont uniformisees a2decimales. - la conversion vers
LBSdoit passer parproduct.uom.compute_qty, pas un facteur fixe. - si plusieurs lignes reutilisent le meme lot, les lignes detaillees utilisent la quantite facturee convertie, mais le
GROSSglobal doit continuer a refleter le vrai delta historique du lot.
- CN / DN:
- cote
sale/out: montant negatif =>Credit Note, montant positif =>Debit Note. - cote
purchase/in: logique inverse conservee.
- cote
- Report sale:
- meme priorite lots que facture.
- les quantites en lettres suivent l'unite reelle (
MT,KILOGRAM,LBS). - le total convertit les lignes vers une unite commune.
- l'unite commune est celle du lot virtuel seulement s'il y a un seul lot virtuel sur tout le report.
- Lots:
lot.report.r_del_periodaffichesale.line.del_periodpourlot_ssanslot_p, sinonpurchase.line.del_period.- dans
Do weighing,lot_qtdoit etre editable et ecraser directementlot.lot_qt.
- Factures client / fournisseur:
Validatecree aussi leaccount.movepour les factures client.Postne doit plus forcer une fresh session / demande de mot de passe sur ce flux.
- Pricing:
pricing.pricingpeut etre saisi manuellement meme sans composant.fixed_qt,fixed_qt_price,unfixed_qt,unfixed_qt_pricesont editables.eod_pricereste non editable et suit le prix moyen pondere.- le mode auto suit la meme formule.
lastest gere par groupe metier (line + component), avec un seullast=Truepar groupe.- la ligne
last=Trueest celle depricing_datela plus grande;idne sert qu'en tie-break.
- Divers:
traderfiltre surTRADER.operatorfiltre surOPERATOR.- les quotas/pricings doivent fallback sur
quantitysiquantity_theoricalest vide.