From 26ccf212d8289c7d67ade76a76aaf26dc27c285e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Maes?= Date: Mon, 8 Aug 2016 10:39:27 +0200 Subject: [PATCH] [FIX] calendar: force computation of for calendar.event --- addons/calendar/models/calendar.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index 4c90821dbd8..7665521ab37 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -639,6 +639,14 @@ class Meeting(models.Model): display_time = _("%s at %s To\n %s at %s (%s)") % (date_str, time_str, date_deadline.strftime(format_date), date_deadline.strftime(format_time), timezone) return display_time + def _get_duration(self, start, stop): + """ Get the duration value between the 2 given dates. """ + diff = fields.Datetime.from_string(stop) - fields.Datetime.from_string(start) + if diff: + duration = float(diff.days) * 24 + (float(diff.seconds) / 3600) + return round(duration, 2) + return 0.0 + name = fields.Char('Meeting Subject', required=True, states={'done': [('readonly', True)]}) state = fields.Selection([('draft', 'Unconfirmed'), ('open', 'Confirmed')], string='Status', readonly=True, track_visibility='onchange', default='draft') @@ -748,17 +756,14 @@ class Meeting(models.Model): meeting.stop_date = meeting.stop meeting.stop_datetime = False - meeting.duration = 0 + meeting.duration = 0.0 else: meeting.start_date = False meeting.start_datetime = meeting.start meeting.stop_date = False meeting.stop_datetime = meeting.stop - diff = fields.Datetime.from_string(meeting.stop) - fields.Datetime.from_string(meeting.start) - if diff: - duration = float(diff.days) * 24 + (float(diff.seconds) / 3600) - meeting.duration = round(duration, 2) + meeting.duration = self._get_duration(meeting.start, meeting.stop) @api.multi def _inverse_dates(self): @@ -1320,6 +1325,9 @@ class Meeting(models.Model): @api.multi def write(self, values): + # compute duration, only if start and stop are modified + if not 'duration' in values and 'start' in values and 'stop' in values: + values['duration'] = self._get_duration(values['start'], values['stop']) # process events one by one for meeting in self: # special write of complex IDS @@ -1384,6 +1392,10 @@ class Meeting(models.Model): if not 'user_id' in values: # Else bug with quick_create when we are filter on an other user values['user_id'] = self.env.user.id + # compute duration, if not given + if not 'duration' in values: + values['duration'] = self._get_duration(values['start'], values['stop']) + meeting = super(Meeting, self).create(values) final_date = meeting._get_recurrency_end_date()