From 07ddb212e3dae6510385319f77d4a9bfb8af3a59 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Thu, 14 May 2026 21:37:49 +0200 Subject: [PATCH] Check tolerance --- .../docs/business/lots-and-quantities.en.md | 6 +++++- .../docs/business/lots-and-quantities.md | 6 +++++- .../business/lots-and-quantities.en.md | 3 ++- .../docs_source/business/lots-and-quantities.md | 3 ++- modules/purchase_trade/lot.py | 15 +++++++++++++-- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/modules/purchase_trade/docs/business/lots-and-quantities.en.md b/modules/purchase_trade/docs/business/lots-and-quantities.en.md index 909c4f1..b363a3a 100644 --- a/modules/purchase_trade/docs/business/lots-and-quantities.en.md +++ b/modules/purchase_trade/docs/business/lots-and-quantities.en.md @@ -288,8 +288,12 @@ them with Python guards and SQL diagnostics. The check is performed during Add physical lots. +Matched forecast +If lot_qt carries both lot_p and lot_s, the check applies to both purchase and sale sides. + + Line excess -Confirmable warning in English when the projected physical quantity exceeds the current line tolerance. +Confirmable warning in English when the projected physical quantity exceeds the current line tolerance. The message names the blocking side: purchase, sale, or both if both checks are triggered successively. Global envelope diff --git a/modules/purchase_trade/docs/business/lots-and-quantities.md b/modules/purchase_trade/docs/business/lots-and-quantities.md index 0af9dad..fbb4f85 100644 --- a/modules/purchase_trade/docs/business/lots-and-quantities.md +++ b/modules/purchase_trade/docs/business/lots-and-quantities.md @@ -287,8 +287,12 @@ puis les sécuriser par des checks Python et des diagnostics SQL. Le contrôle se fait au moment de Add physical lots. +Forecast matché +Si lot_qt porte lot_p et lot_s, le contrôle porte sur les deux côtés achat et vente. + + Dépassement ligne -Warning confirmable en anglais si la quantité physique projetée dépasse la tolérance courante de la ligne. +Warning confirmable en anglais si la quantité physique projetée dépasse la tolérance courante de la ligne. Le message indique le côté bloquant : purchase, sale, ou les deux si les deux checks déclenchent successivement. Enveloppe globale diff --git a/modules/purchase_trade/docs_source/business/lots-and-quantities.en.md b/modules/purchase_trade/docs_source/business/lots-and-quantities.en.md index 5088a9d..b0110d3 100644 --- a/modules/purchase_trade/docs_source/business/lots-and-quantities.en.md +++ b/modules/purchase_trade/docs_source/business/lots-and-quantities.en.md @@ -114,7 +114,8 @@ quantity_theorical | Inheritance | Lines inherit the header tolerance by default. | | Transport | No independent tolerance per transport. | | Physical lot addition | The check is performed during `Add physical lots`. | -| Line excess | Confirmable warning in English when the projected physical quantity exceeds the current line tolerance. | +| Matched forecast | If `lot_qt` carries both `lot_p` and `lot_s`, the check applies to both purchase and sale sides. | +| Line excess | Confirmable warning in English when the projected physical quantity exceeds the current line tolerance. The message names the blocking side: `purchase`, `sale`, or both if both checks are triggered successively. | | Global envelope | A line excess is accepted after confirmation and consumes the contract-level envelope. | | Remaining tolerance | Contract lines are recalculated with `inherit_tol = False`. | | Over-execution | A line exceeding the header tolerance keeps a `+` tolerance at least equal to its actual excess. | diff --git a/modules/purchase_trade/docs_source/business/lots-and-quantities.md b/modules/purchase_trade/docs_source/business/lots-and-quantities.md index 4ba5d14..e54c573 100644 --- a/modules/purchase_trade/docs_source/business/lots-and-quantities.md +++ b/modules/purchase_trade/docs_source/business/lots-and-quantities.md @@ -113,7 +113,8 @@ quantity_theorical | Héritage | Les lignes héritent de la tolérance header par défaut. | | Transport | Pas de tolérance indépendante par transport. | | Ajout physique | Le contrôle se fait au moment de `Add physical lots`. | -| Dépassement ligne | Warning confirmable en anglais si la quantité physique projetée dépasse la tolérance courante de la ligne. | +| Forecast matché | Si `lot_qt` porte `lot_p` et `lot_s`, le contrôle porte sur les deux côtés achat et vente. | +| Dépassement ligne | Warning confirmable en anglais si la quantité physique projetée dépasse la tolérance courante de la ligne. Le message indique le côté bloquant : `purchase`, `sale`, ou les deux si les deux checks déclenchent successivement. | | Enveloppe globale | Le dépassement ponctuel d'une ligne est accepté après confirmation et consomme l'enveloppe globale du contrat. | | Tolérance restante | Les lignes du contrat sont recalculées avec `inherit_tol = False`. | | Surconsommation | Une ligne qui dépasse la tolérance header garde une tolérance `+` au moins égale à son dépassement réel. | diff --git a/modules/purchase_trade/lot.py b/modules/purchase_trade/lot.py index fd9c1be..1e956fa 100755 --- a/modules/purchase_trade/lot.py +++ b/modules/purchase_trade/lot.py @@ -1420,14 +1420,25 @@ class LotQt( if Warning.check(warning_name): over_percent = ( (projected - theoretical) / theoretical * Decimal(100)) + side = 'purchase' + contract = getattr(line, 'purchase', None) + if getattr(line, 'sale', None): + side = 'sale' + contract = line.sale + contract_number = getattr(contract, 'number', None) or getattr( + contract, 'id', None) raise LotToleranceWarning( warning_name, "The physical lot quantity exceeds the current tolerance " - "for this line (projected quantity: %s, maximum with " - "current tolerance: %s, projected tolerance: %s%%). " + "on the %s side (contract: %s, line: %s, projected " + "quantity: %s, maximum with current tolerance: %s, " + "projected tolerance: %s%%). " "Do you want to continue and consume the contract " "tolerance envelope?" % ( + side, + contract_number, + getattr(line, 'id', None), round(projected, 5), round(max_quantity, 5), round(over_percent, 2),