[FIX] sale_order_dates: fixes + deduplication of _get_planned_date()/_order_line_move_date() methods on sale.order
bzr revid: odo@openerp.com-20140306225009-f0jk43x5qpovurxi
This commit is contained in:
parent
499e0e323d
commit
1b66087ed8
|
@ -54,7 +54,7 @@ msgstr ""
|
||||||
|
|
||||||
#. module: sale_order_dates
|
#. module: sale_order_dates
|
||||||
#: help:sale.order,commitment_date:0
|
#: help:sale.order,commitment_date:0
|
||||||
msgid "Date by which the products is sure to be delivered. This is a date that you can promise to the customer, based on the Product Lead Times."
|
msgid "Date by which the products are sure to be delivered. This is a date that you can promise to the customer, based on the Product Lead Times."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: sale_order_dates
|
#. module: sale_order_dates
|
||||||
|
|
|
@ -30,29 +30,26 @@ class sale_order_dates(osv.osv):
|
||||||
_inherit = 'sale.order'
|
_inherit = 'sale.order'
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
"""Don't copy the requested date along with the Sale Order"""
|
"""Don't copy the requested date along with the Sales Order"""
|
||||||
if default is None:
|
default = dict(default or {}, requested_date=False)
|
||||||
default = {}
|
|
||||||
else:
|
|
||||||
default = default.copy()
|
|
||||||
default['requested_date'] = False
|
|
||||||
return super(sale_order_dates, self).copy(cr, uid, id, default=default,
|
return super(sale_order_dates, self).copy(cr, uid, id, default=default,
|
||||||
context=context)
|
context=context)
|
||||||
|
|
||||||
def _order_line_move_date(self, cr, uid, line, context=None):
|
def _get_date_planned(self, cr, uid, order, line, start_date, context=None):
|
||||||
"""Compute the expected date from the requested date, not the order date"""
|
"""Compute the expected date from the requested date, not the order date"""
|
||||||
order=line.order_id
|
|
||||||
if order and order.requested_date:
|
if order and order.requested_date:
|
||||||
date_planned = datetime.strptime(order.requested_date,
|
planned_str = self.date_to_datetime(cr, uid,
|
||||||
DEFAULT_SERVER_DATE_FORMAT)
|
order.requested_date, context)
|
||||||
|
date_planned = datetime.strptime(planned_str,
|
||||||
|
DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
date_planned -= timedelta(days=order.company_id.security_lead)
|
date_planned -= timedelta(days=order.company_id.security_lead)
|
||||||
return date_planned.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
return date_planned.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
else:
|
return super(sale_order_dates, self)._get_date_planned(
|
||||||
return super(sale_order_dates, self)._order_line_move_date(cr, uid, line)
|
cr, uid, order, line, start_date, context=context)
|
||||||
|
|
||||||
def _get_effective_date(self, cr, uid, ids, name, arg, context=None):
|
def _get_effective_date(self, cr, uid, ids, name, arg, context=None):
|
||||||
"""Read the shipping date from the related packings"""
|
"""Read the shipping date from the related packings"""
|
||||||
# XXX would be better if it returned the date the picking was processed
|
# TODO: would be better if it returned the date the picking was processed?
|
||||||
res = {}
|
res = {}
|
||||||
dates_list = []
|
dates_list = []
|
||||||
for order in self.browse(cr, uid, ids, context=context):
|
for order in self.browse(cr, uid, ids, context=context):
|
||||||
|
@ -70,11 +67,13 @@ class sale_order_dates(osv.osv):
|
||||||
res = {}
|
res = {}
|
||||||
dates_list = []
|
dates_list = []
|
||||||
for order in self.browse(cr, uid, ids, context=context):
|
for order in self.browse(cr, uid, ids, context=context):
|
||||||
|
order_datetime_str = self.date_to_datetime(cr, uid, order.date_order,
|
||||||
|
context)
|
||||||
|
order_datetime = datetime.strptime(order_datetime_str,
|
||||||
|
DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
dates_list = []
|
dates_list = []
|
||||||
for line in order.order_line:
|
for line in order.order_line:
|
||||||
dt = (datetime.strptime(order.date_order,
|
dt = order_datetime + timedelta(days=line.delay or 0.0)
|
||||||
DEFAULT_SERVER_DATE_FORMAT)
|
|
||||||
+ timedelta(days=line.delay or 0.0) )
|
|
||||||
dt_s = dt.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
dt_s = dt.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||||
dates_list.append(dt_s)
|
dates_list.append(dt_s)
|
||||||
if dates_list:
|
if dates_list:
|
||||||
|
@ -93,13 +92,12 @@ class sale_order_dates(osv.osv):
|
||||||
"unable to honor the customer's request.")
|
"unable to honor the customer's request.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else:
|
return {}
|
||||||
return {}
|
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'commitment_date': fields.function(_get_commitment_date, store=True,
|
'commitment_date': fields.function(_get_commitment_date, store=True,
|
||||||
type='date', string='Commitment Date',
|
type='date', string='Commitment Date',
|
||||||
help="Date by which the products is sure to be delivered. This is "
|
help="Date by which the products are sure to be delivered. This is "
|
||||||
"a date that you can promise to the customer, based on the "
|
"a date that you can promise to the customer, based on the "
|
||||||
"Product Lead Times."),
|
"Product Lead Times."),
|
||||||
'requested_date': fields.date('Requested Date',
|
'requested_date': fields.date('Requested Date',
|
||||||
|
|
|
@ -18,9 +18,7 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="view_order_tree_date" model="ir.ui.view">
|
<record id="view_order_tree_date" model="ir.ui.view">
|
||||||
<field name="name">sale.order.tree.inherit5</field>
|
|
||||||
<field name="model">sale.order</field>
|
<field name="model">sale.order</field>
|
||||||
<field name="type">tree</field>
|
|
||||||
<field name="inherit_id" ref="sale.view_order_tree"/>
|
<field name="inherit_id" ref="sale.view_order_tree"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="date_order" position="after">
|
<field name="date_order" position="after">
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
I update a demo Sale Order with Requested Date on 2010-12-17
|
I update a demo Sale Order with Requested Date on 2010-12-17
|
||||||
-
|
-
|
||||||
!python {model: sale.order}: |
|
!python {model: sale.order}: |
|
||||||
so = self.write(cr, uid, ref("sale.order"), {'requested_date': '2010-07-12'})
|
self.write(cr, uid, ref("sale.sale_order_6"), {'requested_date': '2010-07-12'})
|
||||||
-
|
-
|
||||||
I confirm the Sale Order.
|
I confirm the Sale Order.
|
||||||
-
|
-
|
||||||
!workflow {
|
!workflow {
|
||||||
model: sale.order, action: order_confirm,
|
model: sale.order, action: order_confirm,
|
||||||
ref: sale.order
|
ref: sale.sale_order_6
|
||||||
}
|
}
|
||||||
-
|
-
|
||||||
I verify that the Procurements and Stock Moves have been generated with the
|
I verify that the Procurements and Stock Moves have been generated with the
|
||||||
|
@ -17,12 +17,13 @@
|
||||||
-
|
-
|
||||||
!python {model: sale.order}: |
|
!python {model: sale.order}: |
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
|
|
||||||
so = self.browse(cr, uid, ref("sale.order"))
|
so = self.browse(cr, uid, ref("sale.sale_order_6"))
|
||||||
security_delay = timedelta(days=so.shop_id.company_id.security_lead)
|
security_delay = timedelta(days=so.company_id.security_lead)
|
||||||
requested_date = datetime.strptime(so.requested_date,
|
requested_date = datetime.strptime(
|
||||||
DEFAULT_SERVER_DATE_FORMAT)
|
self.date_to_datetime(cr, uid, so.requested_date),
|
||||||
|
DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
right_date = (requested_date - security_delay).strftime(
|
right_date = (requested_date - security_delay).strftime(
|
||||||
DEFAULT_SERVER_DATETIME_FORMAT)
|
DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
for line in so.order_line:
|
for line in so.order_line:
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare
|
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare
|
||||||
from dateutil.relativedelta import relativedelta
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
import pytz
|
import pytz
|
||||||
|
@ -257,7 +256,7 @@ class sale_order(osv.osv):
|
||||||
if tz_name:
|
if tz_name:
|
||||||
utc = pytz.timezone('UTC')
|
utc = pytz.timezone('UTC')
|
||||||
context_tz = pytz.timezone(tz_name)
|
context_tz = pytz.timezone(tz_name)
|
||||||
user_datetime = user_date + relativedelta(hours=12.0)
|
user_datetime = user_date + timedelta(hours=12.0)
|
||||||
local_timestamp = context_tz.localize(user_datetime, is_dst=False)
|
local_timestamp = context_tz.localize(user_datetime, is_dst=False)
|
||||||
user_datetime = local_timestamp.astimezone(utc)
|
user_datetime = local_timestamp.astimezone(utc)
|
||||||
return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
|
@ -313,15 +312,6 @@ class sale_order(osv.osv):
|
||||||
'company_id': order.company_id.id,
|
'company_id': order.company_id.id,
|
||||||
'note': line.name,
|
'note': line.name,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _order_line_move_date(self, cr, uid, line, context=None):
|
|
||||||
"""Compute the Stock Move date for the Sale Order Line"""
|
|
||||||
date_planned = datetime.strptime(line.order_id.date_order,
|
|
||||||
DEFAULT_SERVER_DATE_FORMAT)
|
|
||||||
date_planned += timedelta(days=line.delay or 0.0)
|
|
||||||
date_planned -= timedelta(days=line.order_id.company_id.security_lead)
|
|
||||||
return date_planned.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
|
||||||
|
|
||||||
|
|
||||||
def _prepare_order_line_move(self, cr, uid, order, line, picking_id, date_planned, context=None):
|
def _prepare_order_line_move(self, cr, uid, order, line, picking_id, date_planned, context=None):
|
||||||
location_id = order.warehouse_id.lot_stock_id.id
|
location_id = order.warehouse_id.lot_stock_id.id
|
||||||
|
@ -388,8 +378,9 @@ class sale_order(osv.osv):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _get_date_planned(self, cr, uid, order, line, start_date, context=None):
|
def _get_date_planned(self, cr, uid, order, line, start_date, context=None):
|
||||||
|
"""Compute the Stock Move date for the Sale Order Line"""
|
||||||
start_date = self.date_to_datetime(cr, uid, start_date, context)
|
start_date = self.date_to_datetime(cr, uid, start_date, context)
|
||||||
date_planned = datetime.strptime(start_date, DEFAULT_SERVER_DATETIME_FORMAT) + relativedelta(days=line.delay or 0.0)
|
date_planned = datetime.strptime(start_date, DEFAULT_SERVER_DATETIME_FORMAT) + timedelta(days=line.delay or 0.0)
|
||||||
date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
date_planned = (date_planned - timedelta(days=order.company_id.security_lead)).strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
return date_planned
|
return date_planned
|
||||||
|
|
||||||
|
@ -421,7 +412,7 @@ class sale_order(osv.osv):
|
||||||
if line.state == 'done':
|
if line.state == 'done':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
date_planned = self._order_line_move_date(cr, uid, line, context=context)
|
date_planned = self._get_date_planned(cr, uid, order, line, order.date_order, context=context)
|
||||||
|
|
||||||
if line.product_id:
|
if line.product_id:
|
||||||
if line.product_id.type in ('product', 'consu'):
|
if line.product_id.type in ('product', 'consu'):
|
||||||
|
|
Loading…
Reference in New Issue