diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 674e09b0daa..e2d254d56fe 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import datetime +from datetime import datetime, time from dateutil.relativedelta import relativedelta from itertools import groupby +from pytz import timezone, UTC from werkzeug.urls import url_encode from odoo import api, fields, models, SUPERUSER_ID, _ @@ -922,9 +923,10 @@ class PurchaseOrderLine(models.Model): """ date_order = po.date_order if po else self.order_id.date_order if date_order: - return date_order + relativedelta(days=seller.delay if seller else 0) + date_planned = date_order + relativedelta(days=seller.delay if seller else 0) else: - return datetime.today() + relativedelta(days=seller.delay if seller else 0) + date_planned = datetime.today() + relativedelta(days=seller.delay if seller else 0) + return timezone(self.order_id.user_id.tz or 'UTC').localize(datetime.combine(date_planned.date(), time.max)).astimezone(UTC).replace(tzinfo=None, microsecond=0, second=0) @api.depends('product_id', 'date_order') def _compute_analytic_id_and_tag_ids(self): @@ -945,7 +947,7 @@ class PurchaseOrderLine(models.Model): return # Reset date, price and quantity since _onchange_quantity will provide default values - self.date_planned = self.order_id.date_planned or datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT) + self.date_planned = self.order_id.date_planned or timezone(self.order_id.user_id.tz or 'UTC').localize(datetime.combine(datetime.today(), time.max)).astimezone(UTC).replace(tzinfo=None, microsecond=0, second=0) self.price_unit = self.product_qty = 0.0 self._product_id_change() diff --git a/addons/purchase_stock/tests/test_purchase_lead_time.py b/addons/purchase_stock/tests/test_purchase_lead_time.py index f01aad815e3..e42e2104733 100644 --- a/addons/purchase_stock/tests/test_purchase_lead_time.py +++ b/addons/purchase_stock/tests/test_purchase_lead_time.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import datetime, timedelta +from datetime import datetime, timedelta, time from unittest.mock import patch from odoo import fields @@ -33,7 +33,7 @@ class TestPurchaseLeadTime(PurchaseTestCommon): self.assertEqual(purchase.date_order, order_date, 'Order date should be equal to: Date of the procurement order - Purchase Lead Time - Delivery Lead Time.') # Check scheduled date of purchase order - schedule_date = order_date + timedelta(days=self.product_1.seller_ids.delay) + schedule_date = datetime.combine(order_date + timedelta(days=self.product_1.seller_ids.delay), time.max).replace(microsecond=0, second=0) self.assertEqual(purchase.order_line.date_planned, schedule_date, 'Schedule date should be equal to: Order date of Purchase order + Delivery Lead Time.') # check the picking created or not @@ -70,11 +70,11 @@ class TestPurchaseLeadTime(PurchaseTestCommon): self.assertEqual(purchase2.date_order, order_date, 'Order date should be equal to: Date of the procurement order - Delivery Lead Time.') # Check scheduled date of purchase order line for product_1 - schedule_date_1 = order_date + timedelta(days=self.product_1.seller_ids.delay) + schedule_date_1 = datetime.combine(order_date + timedelta(days=self.product_1.seller_ids.delay), time.max).replace(microsecond=0, second=0) self.assertEqual(order_line_pro_1.date_planned, schedule_date_1, 'Schedule date of purchase order line for product_1 should be equal to: Order date of purchase order + Delivery Lead Time of product_1.') # Check scheduled date of purchase order line for product_2 - schedule_date_2 = order_date + timedelta(days=self.product_2.seller_ids.delay) + schedule_date_2 = datetime.combine(order_date + timedelta(days=self.product_2.seller_ids.delay), time.max).replace(microsecond=0, second=0) self.assertEqual(order_line_pro_2.date_planned, schedule_date_2, 'Schedule date of purchase order line for product_2 should be equal to: Order date of purchase order + Delivery Lead Time of product_2.') # Check scheduled date of purchase order