diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index f5e3a406b40..b5e95d28efc 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -863,12 +863,18 @@ class ProcurementOrder(models.Model): schedule_date = (procurement_date_planned - relativedelta(days=self.company_id.po_lead)) return schedule_date - def _get_purchase_order_date(self, schedule_date): + def _get_purchase_order_date(self, partner, schedule_date): """Return the datetime value to use as Order Date (``date_order``) for the Purchase Order created to satisfy the given procurement. """ self.ensure_one() - seller_delay = int(self.product_id._select_seller(quantity=self.product_qty, uom_id=self.product_uom).delay) - return schedule_date - relativedelta(days=seller_delay) + + seller = self.product_id._select_seller( + partner_id=partner, + quantity=self.product_qty, + date=fields.Date.to_string(schedule_date), + uom_id=self.product_uom) + + return schedule_date - relativedelta(days=int(seller.delay)) @api.multi def _prepare_purchase_order_line(self, po, supplier): @@ -917,7 +923,7 @@ class ProcurementOrder(models.Model): def _prepare_purchase_order(self, partner): self.ensure_one() schedule_date = self._get_purchase_schedule_date() - purchase_date = self._get_purchase_order_date(schedule_date) + purchase_date = self._get_purchase_order_date(partner, schedule_date) fpos = self.env['account.fiscal.position'].with_context(company_id=self.company_id.id).get_fiscal_position(partner.id) gpo = self.rule_id.group_propagation_option diff --git a/addons/stock/models/stock_warehouse.py b/addons/stock/models/stock_warehouse.py index e7cfb8ccf4a..0025c742d91 100644 --- a/addons/stock/models/stock_warehouse.py +++ b/addons/stock/models/stock_warehouse.py @@ -799,11 +799,14 @@ class Orderpoint(models.Model): res[orderpoint_id] -= move_qty return res - def _get_date_planned(self, start_date): + def _get_date_planned(self, product_qty, start_date): days = self.lead_days or 0.0 if self.lead_type == 'supplier': # These days will be substracted when creating the PO - days += self.product_id._select_seller().delay or 0.0 + days += self.product_id._select_seller( + quantity=product_qty, + date=fields.Date.to_string(start_date), + uom_id=self.product_uom).delay or 0.0 date_planned = start_date + relativedelta.relativedelta(days=days) return date_planned.strftime(DEFAULT_SERVER_DATE_FORMAT) @@ -811,7 +814,7 @@ class Orderpoint(models.Model): def _prepare_procurement_values(self, product_qty, date=False, group=False): return { 'name': self.name, - 'date_planned': date or self._get_date_planned(datetime.today()), + 'date_planned': date or self._get_date_planned(product_qty, datetime.today()), 'product_id': self.product_id.id, 'product_qty': product_qty, 'company_id': self.company_id.id, diff --git a/addons/stock_calendar/models/procurement.py b/addons/stock_calendar/models/procurement.py index 9fb0cc1dd01..b8cb26d64b2 100644 --- a/addons/stock_calendar/models/procurement.py +++ b/addons/stock_calendar/models/procurement.py @@ -28,10 +28,10 @@ class ProcurementOrder(models.Model): 'next_delivery_date': delivery_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'next_purchase_date': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) - def _get_purchase_order_date(self, schedule_date): + def _get_purchase_order_date(self, partner, schedule_date): if self.next_purchase_date: return fields.Datetime.from_string(self.next_purchase_date) - return super(ProcurementOrder, self)._get_purchase_order_date(schedule_date) + return super(ProcurementOrder, self)._get_purchase_order_date(partner, schedule_date) def _get_purchase_schedule_date(self): if self.next_delivery_date: