[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:
scosist
2017-02-07 10:52:56 +01:00
committed by Martin Trigaux
parent 269dbc9872
commit 07cf30064d
3 changed files with 18 additions and 9 deletions
+10 -4
View File
@@ -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
+6 -3
View File
@@ -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,
+2 -2
View File
@@ -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: