[IMP] purchase,stock: armonize _select_seller calls
If the data is available in the current context it should be passed to _select_seller. The calls to _select_seller throughout the lifetime of a purchase should be consistent (as possible) or the result of _select_seller could be inconsistent when dealing with multiple sellers (product_supplierinfo). Modify a few signature of private methods to pass available information. Closes #11414
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user