diff --git a/addons/sale_order_dates/i18n/sale_order_dates.pot b/addons/sale_order_dates/i18n/sale_order_dates.pot index 92b536c973e..b34c1143ec0 100644 --- a/addons/sale_order_dates/i18n/sale_order_dates.pot +++ b/addons/sale_order_dates/i18n/sale_order_dates.pot @@ -54,7 +54,7 @@ msgstr "" #. module: sale_order_dates #: 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 "" #. module: sale_order_dates diff --git a/addons/sale_order_dates/sale_order_dates.py b/addons/sale_order_dates/sale_order_dates.py index 11433911c45..f3ff971be9f 100644 --- a/addons/sale_order_dates/sale_order_dates.py +++ b/addons/sale_order_dates/sale_order_dates.py @@ -30,29 +30,26 @@ class sale_order_dates(osv.osv): _inherit = 'sale.order' def copy(self, cr, uid, id, default=None, context=None): - """Don't copy the requested date along with the Sale Order""" - if default is None: - default = {} - else: - default = default.copy() - default['requested_date'] = False + """Don't copy the requested date along with the Sales Order""" + default = dict(default or {}, requested_date=False) return super(sale_order_dates, self).copy(cr, uid, id, default=default, - context=context) - - def _order_line_move_date(self, cr, uid, line, context=None): + context=context) + + 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""" - order=line.order_id if order and order.requested_date: - date_planned = datetime.strptime(order.requested_date, - DEFAULT_SERVER_DATE_FORMAT) + planned_str = self.date_to_datetime(cr, uid, + order.requested_date, context) + date_planned = datetime.strptime(planned_str, + DEFAULT_SERVER_DATETIME_FORMAT) date_planned -= timedelta(days=order.company_id.security_lead) return date_planned.strftime(DEFAULT_SERVER_DATETIME_FORMAT) - else: - return super(sale_order_dates, self)._order_line_move_date(cr, uid, line) + return super(sale_order_dates, self)._get_date_planned( + cr, uid, order, line, start_date, context=context) def _get_effective_date(self, cr, uid, ids, name, arg, context=None): """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 = {} dates_list = [] for order in self.browse(cr, uid, ids, context=context): @@ -70,11 +67,13 @@ class sale_order_dates(osv.osv): res = {} dates_list = [] 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 = [] for line in order.order_line: - dt = (datetime.strptime(order.date_order, - DEFAULT_SERVER_DATE_FORMAT) - + timedelta(days=line.delay or 0.0) ) + dt = order_datetime + timedelta(days=line.delay or 0.0) dt_s = dt.strftime(DEFAULT_SERVER_DATE_FORMAT) dates_list.append(dt_s) if dates_list: @@ -93,13 +92,12 @@ class sale_order_dates(osv.osv): "unable to honor the customer's request.") } } - else: - return {} + return {} _columns = { 'commitment_date': fields.function(_get_commitment_date, store=True, 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 " "Product Lead Times."), 'requested_date': fields.date('Requested Date', diff --git a/addons/sale_order_dates/sale_order_dates_view.xml b/addons/sale_order_dates/sale_order_dates_view.xml index 0de42895f5b..cc216ddd9b9 100644 --- a/addons/sale_order_dates/sale_order_dates_view.xml +++ b/addons/sale_order_dates/sale_order_dates_view.xml @@ -18,9 +18,7 @@ - sale.order.tree.inherit5 sale.order - tree diff --git a/addons/sale_order_dates/test/requested_date.yml b/addons/sale_order_dates/test/requested_date.yml index cdeec445409..d05191a4d99 100644 --- a/addons/sale_order_dates/test/requested_date.yml +++ b/addons/sale_order_dates/test/requested_date.yml @@ -3,13 +3,13 @@ I update a demo Sale Order with Requested Date on 2010-12-17 - !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. -- +- !workflow { 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 @@ -17,12 +17,13 @@ - !python {model: sale.order}: | from datetime import datetime, timedelta - from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT - - so = self.browse(cr, uid, ref("sale.order")) - security_delay = timedelta(days=so.shop_id.company_id.security_lead) - requested_date = datetime.strptime(so.requested_date, - DEFAULT_SERVER_DATE_FORMAT) + from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT + + so = self.browse(cr, uid, ref("sale.sale_order_6")) + security_delay = timedelta(days=so.company_id.security_lead) + requested_date = datetime.strptime( + self.date_to_datetime(cr, uid, so.requested_date), + DEFAULT_SERVER_DATETIME_FORMAT) right_date = (requested_date - security_delay).strftime( DEFAULT_SERVER_DATETIME_FORMAT) for line in so.order_line: diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index a675debd738..f90aecac184 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -21,7 +21,6 @@ ############################################################################## from datetime import datetime, timedelta 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.tools.translate import _ import pytz @@ -257,7 +256,7 @@ class sale_order(osv.osv): if tz_name: utc = pytz.timezone('UTC') 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) user_datetime = local_timestamp.astimezone(utc) return user_datetime.strftime(DEFAULT_SERVER_DATETIME_FORMAT) @@ -313,15 +312,6 @@ class sale_order(osv.osv): 'company_id': order.company_id.id, '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): location_id = order.warehouse_id.lot_stock_id.id @@ -388,8 +378,9 @@ class sale_order(osv.osv): return True 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) - 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) return date_planned @@ -421,7 +412,7 @@ class sale_order(osv.osv): if line.state == 'done': 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.type in ('product', 'consu'):