diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 366c3b92677ea61157035b99ac25515af816f8ad..5d87f0dde1dfc8390ecbad213bbbf0927d8c771d 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -1223,7 +1223,7 @@ class PurchaseOrderLine(models.Model): seller = product_id.with_company(company_id)._select_seller( partner_id=partner, quantity=uom_po_qty, - date=po.date_order and po.date_order.date(), + date=max(po.date_order and po.date_order.date(), fields.Date.today()), uom_id=product_id.uom_po_id) taxes = product_id.supplier_taxes_id diff --git a/addons/purchase_stock/models/stock_rule.py b/addons/purchase_stock/models/stock_rule.py index fbd44edb5638bac01bab2eb5a83e6e0b915e4f5a..2296b55d48c6ceeb80b980f50b2393717bf02153 100644 --- a/addons/purchase_stock/models/stock_rule.py +++ b/addons/purchase_stock/models/stock_rule.py @@ -60,7 +60,7 @@ class StockRule(models.Model): supplier = procurement.product_id.with_company(procurement.company_id.id)._select_seller( partner_id=procurement.values.get("supplierinfo_name"), quantity=procurement.product_qty, - date=schedule_date.date(), + date=max(schedule_date.date(), fields.Date.today()), uom_id=procurement.product_uom) # Fall back on a supplier for which no price may be defined. Not ideal, but better than @@ -259,17 +259,16 @@ class StockRule(models.Model): res['orderpoint_id'] = orderpoint_id.id return res - def _get_po_date(self, company_id, values): - purchase_date = min([fields.Datetime.from_string(value['date_planned']) - relativedelta(days=int(value['supplier'].delay)) for value in values]) - return purchase_date - relativedelta(days=company_id.po_lead) - def _prepare_purchase_order(self, company_id, origins, values): """ Create a purchase order for procuremets that share the same domain returned by _make_po_get_domain. params values: values of procurements params origins: procuremets origins to write on the PO """ - purchase_date = max(self._get_po_date(company_id, values), fields.Datetime.now()) + purchase_date = min([fields.Datetime.from_string(value['date_planned']) - relativedelta(days=int(value['supplier'].delay)) for value in values]) + + purchase_date = (purchase_date - relativedelta(days=company_id.po_lead)) + # Since the procurements are grouped if they share the same domain for # PO but the PO does not exist. In this case it will create the PO from diff --git a/addons/purchase_stock/tests/test_purchase_lead_time.py b/addons/purchase_stock/tests/test_purchase_lead_time.py index f56ed6b3e3b0a5d6732a106249e7aa6384cd9852..31adee1f20a4dabc9de4b0dfd97801c9342f73e6 100644 --- a/addons/purchase_stock/tests/test_purchase_lead_time.py +++ b/addons/purchase_stock/tests/test_purchase_lead_time.py @@ -361,5 +361,5 @@ class TestPurchaseLeadTime(PurchaseTestCommon): purchase_order = self.env['purchase.order'].search([('partner_id', '=', self.partner_1.id)]) today = fields.Datetime.start_of(fields.Datetime.now(), 'day') - self.assertEqual(fields.Datetime.start_of(purchase_order.date_order, 'day'), today) + self.assertEqual(purchase_order.date_order, today) self.assertEqual(fields.Datetime.start_of(purchase_order.date_planned, 'day'), today + timedelta(days=7)) diff --git a/addons/sale_purchase_stock/tests/test_lead_time.py b/addons/sale_purchase_stock/tests/test_lead_time.py index 162dfc721afb593b2e0c175acb6954626970d4c4..c29bf843fee5b499005454b9bb94fd44bf2dc2ba 100644 --- a/addons/sale_purchase_stock/tests/test_lead_time.py +++ b/addons/sale_purchase_stock/tests/test_lead_time.py @@ -29,18 +29,19 @@ class TestLeadTime(TestCommonSalePurchaseNoChart): def test_supplier_lead_time(self): """ Basic stock configuration and a supplier with a minimum qty and a lead time """ + self.env.user.company_id.po_lead = 7 seller = self.env['product.supplierinfo'].create({ 'name': self.vendor.id, 'min_qty': 1, - 'price': 1, - 'delay': 7, + 'price': 10, + 'date_start': fields.Date.today() - timedelta(days=1), }) product = self.env['product.product'].create({ 'name': 'corpse starch', 'type': 'product', 'seller_ids': [(6, 0, seller.ids)], - 'route_ids': [(6, 0, (self.mto_route + self.buy_route).ids)] + 'route_ids': [(6, 0, (self.mto_route + self.buy_route).ids)], }) so = self.env['sale.order'].with_user(self.user_salesperson).create({ @@ -59,9 +60,4 @@ class TestLeadTime(TestCommonSalePurchaseNoChart): so.action_confirm() po = self.env['purchase.order'].search([('partner_id', '=', self.vendor.id)]) - - start_of_day = lambda x: fields.Datetime.start_of(x, 'day') - today = start_of_day(fields.Datetime.now()) - - self.assertEqual(start_of_day(po.date_order), today) - self.assertEqual(start_of_day(po.date_planned), today + timedelta(days=7)) + self.assertEqual(po.order_line.price_unit, seller.price)