diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index 25377659563..8ec5dcb195c 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -890,18 +890,18 @@ class Meeting(models.Model): def _inverse_dates(self): for meeting in self: if meeting.allday: - tz = pytz.timezone(self.env.user.tz) if self.env.user.tz else pytz.utc + # Convention break: + # stop and start are NOT in UTC in allday event + # in this case, they actually represent a date + # i.e. Christmas is on 25/12 for everyone + # even if people don't celebrate it simultaneously enddate = fields.Datetime.from_string(meeting.stop_date) - enddate = tz.localize(enddate) enddate = enddate.replace(hour=18) - enddate = enddate.astimezone(pytz.utc) meeting.stop = fields.Datetime.to_string(enddate) startdate = fields.Datetime.from_string(meeting.start_date) - startdate = tz.localize(startdate) # Add "+hh:mm" timezone - startdate = startdate.replace(hour=8) # Set 8 AM in localtime - startdate = startdate.astimezone(pytz.utc) # Convert to UTC + startdate = startdate.replace(hour=8) # Set 8 AM meeting.start = fields.Datetime.to_string(startdate) else: meeting.write({'start': meeting.start_datetime, diff --git a/addons/calendar/tests/test_calendar.py b/addons/calendar/tests/test_calendar.py index 12547c8f695..e04866f1f68 100644 --- a/addons/calendar/tests/test_calendar.py +++ b/addons/calendar/tests/test_calendar.py @@ -275,3 +275,20 @@ class TestCalendar(TransactionCase): self.assertEqual(test_event.res_model, test_record._name) self.assertEqual(test_event.res_id, test_record.id) self.assertEqual(len(test_record.activity_ids), 1) + + def test_event_allday(self): + self.env.user.tz = 'Pacific/Honolulu' + + event = self.CalendarEvent.create({ + 'name': 'All Day', + 'start': "2018-10-16 00:00:00", + 'start_date': "2018-10-16", + 'start_datetime': False, + 'stop': "2018-10-18 00:00:00", + 'stop_date': "2018-10-18", + 'stop_datetime': False, + 'allday': True, + }) + + self.assertEqual(event.start, '2018-10-16 08:00:00') + self.assertEqual(event.stop, '2018-10-18 18:00:00')