This commit is contained in:
2026-04-02 13:00:19 +02:00
parent 0d5cf7dffc
commit a99efcfc5b
2 changed files with 60 additions and 31 deletions

View File

@@ -2779,12 +2779,16 @@ class LotInvoice(Wizard):
Purchase = Pool().get('purchase.purchase') Purchase = Pool().get('purchase.purchase')
Sale = Pool().get('sale.sale') Sale = Pool().get('sale.sale')
lots = [] lots = []
purchases = []
sales = []
action = self.inv.action action = self.inv.action
for r in self.records: for r in self.records:
purchase = r.r_line.purchase purchase = r.r_line.purchase if r.r_line else None
sale = None sale = r.r_sale_line.sale if r.r_sale_line else None
if r.r_sale_line: if purchase and purchase not in purchases:
sale = r.r_sale_line.sale purchases.append(purchase)
if sale and sale not in sales:
sales.append(sale)
lot = Lot(r.r_lot_p) lot = Lot(r.r_lot_p)
# if lot.move == None: # if lot.move == None:
# Warning = Pool().get('res.user.warning') # Warning = Pool().get('res.user.warning')
@@ -2799,12 +2803,22 @@ class LotInvoice(Wizard):
invoice_line = None invoice_line = None
if self.inv.type == 'purchase': if self.inv.type == 'purchase':
Purchase._process_invoice([purchase],lots,action,self.inv.pp_pur) Purchase._process_invoice(purchases, lots, action, self.inv.pp_pur)
invoice_line = r.r_lot_p.invoice_line if r.r_lot_p.invoice_line else r.r_lot_p.invoice_line_prov for lot in lots:
lot = Lot(lot.id)
invoice_line = lot.invoice_line or lot.invoice_line_prov
if invoice_line:
break
else: else:
if sale: if sales:
Sale._process_invoice([sale],lots,action,self.inv.pp_sale) Sale._process_invoice(sales, lots, action, self.inv.pp_sale)
invoice_line = r.r_lot_p.invoice_line if r.r_lot_p.sale_invoice_line else r.r_lot_p.sale_invoice_line_prov for lot in lots:
lot = Lot(lot.id)
invoice_line = lot.sale_invoice_line or lot.sale_invoice_line_prov
if invoice_line:
break
if not invoice_line:
raise UserError("No invoice line was generated from the selected lots.")
self.message.invoice = invoice_line.invoice self.message.invoice = invoice_line.invoice
return 'message' return 'message'

View File

@@ -333,5 +333,20 @@ class PurchaseTradeTestCase(ModuleTestCase):
self.assertEqual(invoice.report_net, Decimal('800')) self.assertEqual(invoice.report_net, Decimal('800'))
def test_lot_invoice_sale_uses_sale_invoice_line_reference(self):
'sale invoicing must resolve the generated invoice from sale invoice links'
sale_invoice = Mock()
sale_invoice_line = Mock(invoice=sale_invoice)
lot = Mock(
sale_invoice_line=sale_invoice_line,
sale_invoice_line_prov=None,
invoice_line=None,
invoice_line_prov=None,
)
invoice_line = lot.sale_invoice_line or lot.sale_invoice_line_prov
self.assertIs(invoice_line.invoice, sale_invoice)
del ModuleTestCase del ModuleTestCase