From 8b9787d4c0e1dd89cf7ce6d6446db16da2ab1732 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Thu, 9 Apr 2026 20:23:09 +0200 Subject: [PATCH] bug th qt --- modules/purchase_trade/purchase.py | 12 +++++++---- modules/purchase_trade/sale.py | 12 +++++++---- modules/purchase_trade/tests/test_module.py | 24 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index 216b643..facf062 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -139,10 +139,14 @@ class Component(metaclass=PoolMeta): if self.line: return self.line.unit - def get_quota_purchase(self, name): - if self.line: - if self.line.quantity: - return round(self.line.quantity_theorical / (self.nbdays if self.nbdays > 0 else 1),5) + def get_quota_purchase(self, name): + if self.line: + quantity = getattr(self.line, 'quantity_theorical', None) + if quantity is None: + quantity = getattr(self.line, 'quantity', None) + if quantity is not None: + nbdays = self.nbdays if self.nbdays and self.nbdays > 0 else 1 + return round(Decimal(quantity) / nbdays, 5) class Pricing(metaclass=PoolMeta): "Pricing" diff --git a/modules/purchase_trade/sale.py b/modules/purchase_trade/sale.py index 04c0ed1..4cf77d4 100755 --- a/modules/purchase_trade/sale.py +++ b/modules/purchase_trade/sale.py @@ -103,10 +103,14 @@ class Component(metaclass=PoolMeta): if self.sale_line: return self.sale_line.unit - def get_quota_sale(self, name): - if self.sale_line: - if self.sale_line.quantity: - return round(self.sale_line.quantity_theorical / (self.nbdays if self.nbdays > 0 else 1),4) + def get_quota_sale(self, name): + if self.sale_line: + quantity = getattr(self.sale_line, 'quantity_theorical', None) + if quantity is None: + quantity = getattr(self.sale_line, 'quantity', None) + if quantity is not None: + nbdays = self.nbdays if self.nbdays and self.nbdays > 0 else 1 + return round(Decimal(quantity) / nbdays, 4) class Pricing(metaclass=PoolMeta): "Pricing" diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index 0c891e3..d97d85b 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -184,6 +184,30 @@ class PurchaseTradeTestCase(ModuleTestCase): self.assertEqual( PurchaseLine.default_pricing_rule(), 'Default pricing rule') + def test_component_quota_uses_quantity_fallback_when_theoretical_is_missing(self): + 'component quota does not crash when theoretical quantity is still empty' + SaleComponent = Pool().get('pricing.component') + PurchaseComponent = Pool().get('pricing.component') + + sale_component = SaleComponent() + sale_component.nbdays = None + sale_component.sale_line = Mock( + quantity=Decimal('12'), + quantity_theorical=None, + ) + + purchase_component = PurchaseComponent() + purchase_component.nbdays = None + purchase_component.line = Mock( + quantity=Decimal('15'), + quantity_theorical=None, + ) + + self.assertEqual(sale_component.get_quota_sale('quota_sale'), Decimal('12.0000')) + self.assertEqual( + purchase_component.get_quota_purchase('quota'), + Decimal('15.00000')) + def test_sale_and_purchase_trader_operator_domains_use_explicit_categories(self): 'sale and purchase trader/operator fields are filtered by TRADER/OPERATOR categories' Sale = Pool().get('sale.sale')