27.03.26
This commit is contained in:
@@ -45,6 +45,8 @@ Guide rapide pour les agents qui codent dans ce repository.
|
|||||||
- Si un document facture depend fortement d'une vente/achat, ajouter au besoin un petit pont Python pour exposer des `report_*` stables au template.
|
- Si un document facture depend fortement d'une vente/achat, ajouter au besoin un petit pont Python pour exposer des `report_*` stables au template.
|
||||||
- Si plusieurs actions de report pointent vers `report_name = 'account.invoice'`, verifier aussi le cache `invoice_report_cache` dans `modules/account_invoice/invoice.py`: un mauvais cache peut faire croire que plusieurs actions utilisent le meme `.fodt`.
|
- Si plusieurs actions de report pointent vers `report_name = 'account.invoice'`, verifier aussi le cache `invoice_report_cache` dans `modules/account_invoice/invoice.py`: un mauvais cache peut faire croire que plusieurs actions utilisent le meme `.fodt`.
|
||||||
- Avant de conclure qu'un template ou une action est faux, verifier si le report alternatif doit bypasser le cache standard.
|
- Avant de conclure qu'un template ou une action est faux, verifier si le report alternatif doit bypasser le cache standard.
|
||||||
|
- Dans `purchase_trade`, pour remonter d'une facture vers shipment, pro forma, freight ou autres donnees logistiques, privilegier le lot physique comme pont entre `purchase.line`, `sale.line` et shipment.
|
||||||
|
- Pour `FREIGHT VALUE`, ne pas lire un champ direct sur la facture: retrouver le fee de shipment (`shipment_in`) dont le produit est `Maritime freight`, puis utiliser `fee.get_amount()`.
|
||||||
|
|
||||||
## 5) Workflow de modification (obligatoire)
|
## 5) Workflow de modification (obligatoire)
|
||||||
|
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ class Dashboard(ModelSQL, ModelView):
|
|||||||
' <div class="demos-title" style="font-size:1.2em; font-weight:bold; margin-bottom:10px;">🎬 Available Demo</div>'
|
' <div class="demos-title" style="font-size:1.2em; font-weight:bold; margin-bottom:10px;">🎬 Available Demo</div>'
|
||||||
]
|
]
|
||||||
|
|
||||||
demos = Demos.search([('active', '=', True)])
|
demos = Demos.search([('active', '=', True)],order=[('id', 'DESC')])
|
||||||
for n in demos:
|
for n in demos:
|
||||||
icon = n.icon or "📰"
|
icon = n.icon or "📰"
|
||||||
category = n.category or "General"
|
category = n.category or "General"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Business Rules - Purchase Trade
|
# Business Rules - Purchase Trade
|
||||||
|
|
||||||
Statut: `draft`
|
Statut: `draft`
|
||||||
Version: `v0.1`
|
Version: `v0.2`
|
||||||
Derniere mise a jour: `2026-03-25`
|
Derniere mise a jour: `2026-03-27`
|
||||||
Owner metier: `a completer`
|
Owner metier: `a completer`
|
||||||
Owner technique: `a completer`
|
Owner technique: `a completer`
|
||||||
|
|
||||||
@@ -56,6 +56,50 @@ Owner technique: `a completer`
|
|||||||
- Source:
|
- Source:
|
||||||
- `Decision metier documentee dans les commentaires de purchase_trade.purchase.Line.write`
|
- `Decision metier documentee dans les commentaires de purchase_trade.purchase.Line.write`
|
||||||
|
|
||||||
|
### BR-PT-002 - Le lot physique est le pont metier entre purchase, sale et shipment
|
||||||
|
|
||||||
|
- Intent: disposer d'un chemin unique et stable pour retrouver les informations logistiques et de facturation reliees a un contrat d'achat ou de vente.
|
||||||
|
- Description:
|
||||||
|
- Le lot physique (`lot_type = physic`) porte simultanement le lien vers:
|
||||||
|
- la `purchase.line` via `lot.line`
|
||||||
|
- la `sale.line` via `lot.sale_line`
|
||||||
|
- le shipment via `lot.lot_shipment_in` / `lot.lot_shipment_internal` / `lot.lot_shipment_out`
|
||||||
|
- Pour toute logique qui doit naviguer entre achat, vente, shipment et facture, il faut privilegier ce lot physique comme source de verite.
|
||||||
|
- Resultat attendu:
|
||||||
|
- depuis une facture d'achat:
|
||||||
|
- remonter a la `purchase.line`
|
||||||
|
- puis au lot physique de la ligne
|
||||||
|
- puis au shipment et aux donnees logistiques associees
|
||||||
|
- depuis une facture de vente:
|
||||||
|
- remonter a la `sale.line`
|
||||||
|
- puis au lot physique matchant qui porte aussi la `purchase.line`
|
||||||
|
- puis au shipment et aux donnees logistiques associees
|
||||||
|
- Cas d'usage typiques:
|
||||||
|
- recuperer `bl_date`, `bl_number`, `controller`, `from_location`, `to_location`
|
||||||
|
- retrouver une facture provisoire liee au lot
|
||||||
|
- retrouver des fees rattaches au shipment
|
||||||
|
- Priorite:
|
||||||
|
- `structurante`
|
||||||
|
|
||||||
|
### BR-PT-003 - Le freight amount des templates facture vient du fee de shipment
|
||||||
|
|
||||||
|
- Intent: afficher dans les documents facture la vraie valeur de fret maritime rattachee au shipment du lot physique.
|
||||||
|
- Description:
|
||||||
|
- Le `FREIGHT VALUE` d'une facture ne doit pas etre pris sur la facture elle-meme.
|
||||||
|
- Il doit etre calcule a partir du `fee.fee` rattache au shipment (`shipment_in`) du lot physique relie a la facture.
|
||||||
|
- Regle de navigation:
|
||||||
|
- retrouver le lot physique pertinent depuis la facture
|
||||||
|
- retrouver son shipment
|
||||||
|
- chercher le `fee.fee` avec:
|
||||||
|
- `shipment_in = shipment.id`
|
||||||
|
- `product.name = 'Maritime freight'`
|
||||||
|
- utiliser `fee.get_amount()` comme montant de fret
|
||||||
|
- Portee:
|
||||||
|
- s'applique aussi bien aux factures d'achat qu'aux factures de vente
|
||||||
|
- cote vente, la remontee doit passer par le lot physique qui fait le lien entre `purchase.line` et `sale.line`
|
||||||
|
- Priorite:
|
||||||
|
- `importante`
|
||||||
|
|
||||||
## 4) Exemples concrets
|
## 4) Exemples concrets
|
||||||
|
|
||||||
### Exemple E1 - Augmentation simple
|
### Exemple E1 - Augmentation simple
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Template Rules - Purchase Trade
|
# Template Rules - Purchase Trade
|
||||||
|
|
||||||
Statut: `draft`
|
Statut: `draft`
|
||||||
Version: `v0.1`
|
Version: `v0.2`
|
||||||
Derniere mise a jour: `2026-03-26`
|
Derniere mise a jour: `2026-03-27`
|
||||||
|
|
||||||
## 1) Scope
|
## 1) Scope
|
||||||
|
|
||||||
@@ -93,6 +93,33 @@ Derniere mise a jour: `2026-03-26`
|
|||||||
- pour un report alternatif, ne pas reutiliser le cache du report standard `account_invoice/invoice.fodt`
|
- pour un report alternatif, ne pas reutiliser le cache du report standard `account_invoice/invoice.fodt`
|
||||||
- si besoin, bypasser la lecture/ecriture du cache pour les templates alternatifs
|
- si besoin, bypasser la lecture/ecriture du cache pour les templates alternatifs
|
||||||
|
|
||||||
|
### TR-007 - Pour une facture trade, privilegier le lot physique comme chemin de navigation
|
||||||
|
|
||||||
|
- Pour remonter d'une facture vers des donnees logistiques ou metier, ne pas dupliquer de chemins differents selon achat/vente.
|
||||||
|
- Regle pratique:
|
||||||
|
- partir de la ligne metier (`purchase.line` ou `sale.line`)
|
||||||
|
- retrouver le lot physique associe
|
||||||
|
- utiliser ce lot comme pont vers le shipment et les autres objets lies
|
||||||
|
- Ce chemin doit etre privilegie pour exposer des proprietes `report_*` comme:
|
||||||
|
- `report_bl_date`
|
||||||
|
- `report_loading_port`
|
||||||
|
- `report_discharge_port`
|
||||||
|
- `report_controller_name`
|
||||||
|
- `report_si_number`
|
||||||
|
- `report_proforma_invoice_number`
|
||||||
|
- `report_proforma_invoice_date`
|
||||||
|
|
||||||
|
### TR-008 - Le freight amount d'un template facture vient du fee de shipment
|
||||||
|
|
||||||
|
- Ne pas lire le fret directement sur `account.invoice`.
|
||||||
|
- Pour les templates `invoice_ict*`, le `FREIGHT VALUE` doit etre expose par une propriete Python du type `invoice.report_freight_amount`.
|
||||||
|
- La logique attendue est:
|
||||||
|
- retrouver le lot physique pertinent
|
||||||
|
- retrouver son shipment
|
||||||
|
- chercher le `fee.fee` du shipment avec `product.name = 'Maritime freight'`
|
||||||
|
- utiliser `fee.get_amount()`
|
||||||
|
- Si le fee a sa propre devise, preferer aussi exposer le symbole de devise depuis le fee plutot que depuis la facture.
|
||||||
|
|
||||||
## 4) Workflow recommande pour corriger un template en erreur
|
## 4) Workflow recommande pour corriger un template en erreur
|
||||||
|
|
||||||
1. Identifier le placeholder exact qui provoque l'erreur Relatorio.
|
1. Identifier le placeholder exact qui provoque l'erreur Relatorio.
|
||||||
@@ -110,8 +137,9 @@ Derniere mise a jour: `2026-03-26`
|
|||||||
- Fichier: `modules/account_invoice/invoice_ict.fodt`
|
- Fichier: `modules/account_invoice/invoice_ict.fodt`
|
||||||
- Strategie retenue:
|
- Strategie retenue:
|
||||||
- aligner la syntaxe sur `modules/account_invoice/invoice.fodt`
|
- aligner la syntaxe sur `modules/account_invoice/invoice.fodt`
|
||||||
- reutiliser au maximum les proprietes de `sale.sale`
|
- reutiliser au maximum les proprietes metier deja exposees
|
||||||
- exposer dans `modules/purchase_trade/invoice.py` des proprietes de pont `account.invoice -> sale`
|
- exposer dans `modules/purchase_trade/invoice.py` des proprietes de pont `account.invoice -> sale/purchase`
|
||||||
|
- pour les donnees shipment et freight, passer par le lot physique comme pont achat/vente
|
||||||
|
|
||||||
### Sale ICT
|
### Sale ICT
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user