Link invoice lines and stock moves for different quantity sign if invoice method is not shipment

Closes #13821
(grafted from 09524e5cc8c4edd63a556b5c5dc723af9edb4cfa)

--HG--
branch : 6.0
This commit is contained in:
Cédric Krier committed 2025-01-16 17:38:14 +01:00
1 parent 1ff3269993
commit c5facf6ba0
2 files changed
+16 -13

No files matched your search

+8 -6
View File
@@ -1590,8 +1590,8 @@ class Line(sequence_ordered(), ModelSQL, ModelView):
gettext('purchase'
'.msg_purchase_missing_account_expense',
purchase=self.purchase.rec_name))
if samesign(self.quantity, invoice_line.quantity):
invoice_line.stock_moves = self._get_invoice_line_moves()
invoice_line.stock_moves = self._get_invoice_line_moves(
invoice_line.quantity)
return [invoice_line]
def _get_invoice_not_line(self):
@@ -1645,12 +1645,13 @@ class Line(sequence_ordered(), ModelSQL, ModelView):
quantity += invoice_line.quantity
return quantity
def _get_invoice_line_moves(self):
def _get_invoice_line_moves(self, quantity):
'Return the stock moves that should be invoiced'
moves = []
if self.purchase.invoice_method == 'order':
moves.extend(self.moves)
elif self.purchase.invoice_method == 'shipment':
elif (self.purchase.invoice_method == 'shipment'
and samesign(self.quantity, quantity)):
for move in self.moves:
if move.state == 'done':
if move.invoiced_quantity < move.quantity:
@@ -1725,8 +1726,9 @@ class Line(sequence_ordered(), ModelSQL, ModelView):
lines = self.invoice_lines
else:
lines = filter(lambda l: not l.stock_moves, self.invoice_lines)
return list(filter(
lambda l: samesign(self.quantity, l.quantity), lines))
lines = filter(
lambda l: samesign(self.quantity, l.quantity), lines)
return list(lines)
def set_actual_quantity(self):
pool = Pool()
+8 -7
View File
@@ -1538,8 +1538,8 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
raise AccountError(
gettext('sale.msg_sale_missing_account_revenue',
sale=self.sale.rec_name))
if samesign(self.quantity, invoice_line.quantity):
invoice_line.stock_moves = self._get_invoice_line_moves()
invoice_line.stock_moves = self._get_invoice_line_moves(
invoice_line.quantity)
return [invoice_line]
def _get_invoice_not_line(self):
@@ -1593,13 +1593,14 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
quantity += invoice_line.quantity
return quantity
def _get_invoice_line_moves(self):
def _get_invoice_line_moves(self, quantity):
'Return the stock moves that should be invoiced'
moves = []
if self.sale.invoice_method == 'order':
if self.sale.shipment_method != 'order':
moves.extend(self.moves)
elif self.sale.invoice_method == 'shipment':
elif (self.sale.invoice_method == 'shipment'
and samesign(self.quantity, quantity)):
for move in self.moves:
if move.state == 'done':
if move.invoiced_quantity < move.quantity:
@@ -1691,11 +1692,11 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
elif self.sale.shipment_method == 'invoice':
for invoice_line in self.invoice_lines:
if (invoice_line.invoice
and invoice_line.invoice.state == 'paid'):
and invoice_line.invoice.state == 'paid'
and samesign(self.quantity, invoice_line.quantity)):
if invoice_line.moved_quantity < invoice_line.quantity:
invoice_lines.append(invoice_line)
return list(filter(
lambda l: samesign(self.quantity, l.quantity), invoice_lines))
return invoice_lines
def set_actual_quantity(self):
pool = Pool()