46
46
class sale_order_line(osv.osv):
47
47
_inherit = 'sale.order.line'
49
def onchange_delay(self, cr, uid, ids, delay, context=None):
50
context = context or {}
52
res['value']['default_delivery_date'] = self._get_single_default_delivery_date(cr, uid, ids and ids[0], delay=delay, context=context)
55
def _get_single_days_until_delivery(self, cr, uid, id, requested_delivery_date, context=None):
56
today = datetime.datetime(year=datetime.datetime.today().year, month=datetime.datetime.today().month, day=datetime.datetime.today().day)
57
if requested_delivery_date and not id:
58
timedelta_until_delivery = datetime.datetime.strptime(requested_delivery_date, '%Y-%m-%d') - today
59
return timedelta_until_delivery and timedelta_until_delivery.days
61
line = self.browse(cr, uid, id, context=context)
62
if not requested_delivery_date:
63
requested_delivery_date = line.requested_delivery_date
64
date_confirm = line.order_id.date_confirm and datetime.datetime.strptime(line.order_id.date_confirm, '%Y-%m-%d')
65
timedelta_until_delivery = datetime.datetime.strptime(requested_delivery_date, '%Y-%m-%d') - ( date_confirm or today )
66
return timedelta_until_delivery and timedelta_until_delivery.days
49
70
def _fnct_days_until_delivery(self, cr, uid, ids, field_name, arg, context=None):
71
context = context or {}
51
73
for line in self.browse(cr, uid, ids, context=context):
53
date_confirm = line.order_id.date_confirm and datetime.datetime.strptime(line.order_id.date_confirm, '%Y-%m-%d')
54
timedelta_until_delivery = line.requested_delivery_date and datetime.datetime.strptime(line.requested_delivery_date, '%Y-%m-%d') - ( date_confirm or datetime.datetime.now() )
55
days_until_delivery = timedelta_until_delivery and timedelta_until_delivery.days + 1 # Add one because of rounding
56
res[line.id] = days_until_delivery
74
res[line.id] = self._get_single_days_until_delivery(cr, uid, line.id, line.requested_delivery_date, context=context)
77
def _get_single_default_delivery_date(self, cr, uid, id, delay, context=None):
78
today = datetime.datetime(year=datetime.datetime.today().year, month=datetime.datetime.today().month, day=datetime.datetime.today().day)
80
default_delivery_datetime = datetime.timedelta(days=delay) + today
81
return default_delivery_datetime.strftime('%Y-%m-%d')
83
line = self.browse(cr, uid, id, context=context)
86
date_confirm = line.order_id.date_confirm and datetime.datetime.strptime(line.order_id.date_confirm, '%Y-%m-%d')
87
default_delivery_datetime = datetime.timedelta(days=delay) + ( date_confirm or today )
88
return default_delivery_datetime.strftime('%Y-%m-%d')
61
92
def _fnct_default_delivery_date(self, cr, uid, ids, field_name, arg, context=None):
93
context = context or {}
63
95
for line in self.browse(cr, uid, ids, context=context):
65
date_confirm = line.order_id.date_confirm and datetime.datetime.strptime(line.order_id.date_confirm, '%Y-%m-%d')
66
default_delivery_datetime = datetime.timedelta(days=line.delay) + ( date_confirm or datetime.datetime.now() )
67
res[line.id] = default_delivery_datetime.strftime('%Y-%m-%d')
96
if line.state == 'confirmed':
97
res[line.id] = line.default_delivery_date_when_confirmed
99
res[line.id] = self._get_single_default_delivery_date(cr, uid, line.id, delay=line.delay, context=context)
72
102
def onchange_requested_delivery_date(self, cr, uid, ids, requested_delivery_date, default_delivery_date, context=None):
105
if not isinstance(ids, list):
77
new_days_until_delivery = False
78
if requested_delivery_date:
79
line = self.browse(cr, uid, ids, context=context)[0]
80
original_date = line.requested_delivery_date and datetime.datetime.strptime(line.requested_delivery_date, '%Y-%m-%d') or datetime.datetime.today()
81
days_change = ( datetime.datetime.strptime(requested_delivery_date, '%Y-%m-%d') - original_date ).days
82
new_days_until_delivery = (line.days_until_delivery or 0) + days_change
83
if requested_delivery_date < default_delivery_date:
84
res['warning'] = {'title':'Requested days until delivery is less than delivery lead time', 'message':'Please ensure this delivery date is manageable before continuing.'}
85
res['value'] = {'days_until_delivery': new_days_until_delivery }
109
res['value']['days_until_delivery'] = self._get_single_days_until_delivery(cr, uid, ids and ids[0], requested_delivery_date=requested_delivery_date, context=None)
110
if requested_delivery_date < default_delivery_date:
111
res['warning'] = {'title':'Requested days until delivery is less than delivery lead time', 'message':'Please ensure this delivery date is manageable before continuing.'}
89
114
def button_confirm(self, cr, uid, ids, context=None):
92
res = super(sale_order_line, self).button_confirm(cr, uid, ids, context=context)
93
117
for line in self.browse(cr, uid, ids, context=context):
118
self.write(cr, uid, ids, {'default_delivery_date_when_confirmed': line.default_delivery_date})
94
119
if line.days_until_delivery:
95
120
self.write(cr, uid, ids, {'delay': line.days_until_delivery})
121
res = super(sale_order_line, self).button_confirm(cr, uid, ids, context=context)
99
125
'days_until_delivery': fields.function(_fnct_days_until_delivery, string='Days Until Delivery', type='float', help="Number of days remaining until requested delivery date.", readonly=True),
100
126
'requested_delivery_date': fields.date('Requested Delivery Date', select=True, help="Date on which customer has requested delivery."),
127
'default_delivery_date_when_confirmed': fields.date('Default Delivery Date When Confirmed'),
101
128
'default_delivery_date': fields.function(_fnct_default_delivery_date, string='Default Delivery Date', type='date', help="Date on which delivery is projected, assuming customer has not requested a specific date."),