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:
1 parent
1ff3269993
commit
c5facf6ba0
2 files changed
+16
-13
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user