diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 410e83661df..3d9ab8b3d3f 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -851,10 +851,11 @@ class calendar_event(osv.Model): if values.get('start_datetime') or values.get('start_date') or values.get('start') \ or values.get('stop_datetime') or values.get('stop_date') or values.get('stop'): allday = values.get("allday", None) + event = self.browse(cr, uid, id, context=context) if allday is None: if id: - allday = self.read(cr, uid, [id], ['allday'], context=context)[0].get('allday') + allday = event.allday else: allday = False _logger.warning("Calendar - All day is not specified, arbitrarily set to False") @@ -871,10 +872,16 @@ class calendar_event(osv.Model): values[fld] = values['%s_%s' % (fld, key)] diff = False - if allday and values.get('stop_date') and values.get('start_date'): - diff = datetime.strptime(values['stop_date'].split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) - datetime.strptime(values['start_date'].split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) - elif values.get('stop_datetime') and values.get('start_datetime'): - diff = datetime.strptime(values['stop_datetime'].split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) - datetime.strptime(values['start_datetime'].split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) + if allday and (values.get('stop_date') or values.get('start_date')): + stop_date = values.get('stop_date') or event.stop_date + start_date = values.get('start_date') or event.start_date + if stop_date and start_date: + diff = datetime.strptime(stop_date.split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) - datetime.strptime(start_date.split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) + elif values.get('stop_datetime') or values.get('start_datetime'): + stop_datetime = values.get('stop_datetime') or event.stop_datetime + start_datetime = values.get('start_datetime') or event.start_datetime + if stop_datetime and start_datetime: + diff = datetime.strptime(stop_datetime.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) - datetime.strptime(start_datetime.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) if diff: duration = float(diff.days) * 24 + (float(diff.seconds) / 3600) values['duration'] = round(duration, 2)