summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Bouvy <dbo@odoo.com>2020-02-13 08:47:45 +0000
committerDamien Bouvy <dbo@odoo.com>2020-02-13 09:51:09 +0000
commitbe5b7ddb3e4e9864d20547b225ec1117436eddd9 (patch)
treeca69a745f3e11fe7538cde28c080910e72ed24f5
parent0cc8610923d8c8f7b758889b1f896f649bd5ff10 (diff)
[IMP] sale: better invoice_status computation
Works correctly on virtual records during onchanges, notably. Since the data was obtained from a read_group using the ids of self, virtual records never could find any of their data. closes odoo/odoo#45264 Signed-off-by: Damien Bouvy (dbo) <dbo@odoo.com>
-rw-r--r--addons/sale/models/sale.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index febc16cd23e..8d7f7a4d1bb 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -75,9 +75,15 @@ class SaleOrder(models.Model):
"""
# Ignore the status of the deposit product
deposit_product_id = self.env['sale.advance.payment.inv']._default_product_id()
- line_invoice_status_all = [(d['order_id'][0], d['invoice_status']) for d in self.env['sale.order.line'].read_group([('order_id', 'in', self.ids), ('product_id', '!=', deposit_product_id.id)], ['order_id', 'invoice_status'], ['order_id', 'invoice_status'], lazy=False)]
+ line_data = self.env['sale.order.line'].read_group(
+ domain=[('order_id', 'in', self.ids), ('product_id', '!=', deposit_product_id.id)],
+ fields=['order_id', 'invoice_status'],
+ groupby=['order_id', 'invoice_status'],
+ lazy=False)
+ line_invoice_status_all = [(d['order_id'][0], d['invoice_status']) for d in line_data]
for order in self:
- line_invoice_status = [d[1] for d in line_invoice_status_all if d[0] == order.id]
+ order_id = order.id or order._origin and order._origin.id
+ line_invoice_status = [d[1] for d in line_invoice_status_all if d[0] == order_id]
if order.state not in ('sale', 'done'):
order.invoice_status = 'no'
elif any(invoice_status == 'to invoice' for invoice_status in line_invoice_status):