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)