From e1c9efb2d256fdfe648224d27217d3b925cf8799 Mon Sep 17 00:00:00 2001 From: Nicolas Seinlet Date: Tue, 30 Oct 2018 13:35:41 +0000 Subject: [PATCH] [FIX] sale: ensure a non null date Sometimes, a sale.order in the SALE state doesn't have a confirmed date, which can cause a traceback. To avoid this, when confirmation_date is null, use the write_date, which is never NULL when sale.order is in sale state. In migration, we will try to populate the confirmation date with the mail.message subtype. As ultimate fallback, we will take the write_date. closes odoo/odoo#28296 --- addons/sale/models/sale.py | 2 +- addons/sale_stock/models/sale_order.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 1f11b98b9b7..ca1b2cecdb1 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -228,7 +228,7 @@ class SaleOrder(models.Model): """ for order in self: dates_list = [] - confirm_date = fields.Datetime.from_string(order.confirmation_date if order.state == 'sale' else fields.Datetime.now()) + confirm_date = fields.Datetime.from_string((order.confirmation_date or order.write_date) if order.state == 'sale' else fields.Datetime.now()) for line in order.order_line.filtered(lambda x: x.state != 'cancel' and not x._is_delivery()): dt = confirm_date + timedelta(days=line.customer_lead or 0.0) dates_list.append(dt) diff --git a/addons/sale_stock/models/sale_order.py b/addons/sale_stock/models/sale_order.py index cef8abf9137..9d84752dd24 100644 --- a/addons/sale_stock/models/sale_order.py +++ b/addons/sale_stock/models/sale_order.py @@ -48,7 +48,7 @@ class SaleOrder(models.Model): super(SaleOrder, self)._compute_expected_date() for order in self: dates_list = [] - confirm_date = fields.Datetime.from_string(order.confirmation_date if order.state == 'sale' else fields.Datetime.now()) + confirm_date = fields.Datetime.from_string((order.confirmation_date or order.write_date) if order.state == 'sale' else fields.Datetime.now()) for line in order.order_line.filtered(lambda x: x.state != 'cancel' and not x._is_delivery()): dt = confirm_date + timedelta(days=line.customer_lead or 0.0) dates_list.append(dt)