From 8e16259ab282cadf3ed38ffb2fca903c97dea3cf Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Wed, 20 May 2026 11:15:39 +0200 Subject: [PATCH] Deal nb --- modules/purchase_trade/invoice.py | 14 ++++++++++++++ modules/purchase_trade/tests/test_module.py | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/modules/purchase_trade/invoice.py b/modules/purchase_trade/invoice.py index a2b4159..068f7f0 100644 --- a/modules/purchase_trade/invoice.py +++ b/modules/purchase_trade/invoice.py @@ -481,6 +481,16 @@ class Invoice(metaclass=PoolMeta): def _get_report_trade(self): return self._get_report_sale() or self._get_report_purchase() + def _get_report_deal_sale(self): + sale = self._get_report_sale() + if sale: + return sale + for lot in self._get_report_invoice_lots() or []: + line = getattr(lot, 'sale_line', None) + sale = getattr(line, 'sale', None) if line else None + if sale: + return sale + def _get_report_purchase_line(self): purchase = self._get_report_purchase() if purchase and purchase.lines: @@ -761,6 +771,10 @@ class Invoice(metaclass=PoolMeta): @property def report_contract_number(self): + sale = self._get_report_deal_sale() + deal = getattr(sale, 'report_deal', None) if sale else None + if deal: + return deal.replace(' ', '/') trade = self._get_report_trade() if trade and trade.full_number: return trade.full_number diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index 2b13d22..6587ecb 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -2710,6 +2710,16 @@ class PurchaseTradeTestCase(ModuleTestCase): self.assertEqual(invoice.report_product_name, 'COTTON UPLAND') self.assertEqual(invoice.report_product_description, 'RAW WHITE COTTON') + def test_invoice_melya_reference_uses_sale_deal_number(self): + 'invoice_melya Reference uses the sale deal number' + Invoice = Pool().get('account.invoice') + + invoice = Invoice() + sale = Mock(report_deal='P-12 S-34') + invoice._get_report_deal_sale = Mock(return_value=sale) + + self.assertEqual(invoice.report_contract_number, 'P-12/S-34') + def test_contract_factory_uses_one_line_per_selected_source(self): 'matched multi-lot contract creation keeps one generated line per source lot' contract_detail = Mock(quantity=Decimal('2000'))