diff --git a/addons/calendar/models/calendar_event.py b/addons/calendar/models/calendar_event.py index 326f10c46da..b8efd071b61 100644 --- a/addons/calendar/models/calendar_event.py +++ b/addons/calendar/models/calendar_event.py @@ -994,7 +994,7 @@ class Meeting(models.Model): if not start_update: # Apply the same shift for start start = base_time_values['start'] + (stop_update - self.stop) - start_date = base_time_values['start_date'] + (stop_update.date() - self.stop.date()) + start_date = base_time_values['start'].date() + (stop_update.date() - self.stop.date()) update_dict.update({'start': start, 'start_date': start_date}) stop = base_time_values['stop'] + (stop_update - self.stop) stop_date = base_time_values['stop'].date() + (stop_update.date() - self.stop.date()) diff --git a/addons/calendar/tests/test_event_recurrence.py b/addons/calendar/tests/test_event_recurrence.py index d477e1b8359..8833ff661ea 100644 --- a/addons/calendar/tests/test_event_recurrence.py +++ b/addons/calendar/tests/test_event_recurrence.py @@ -403,6 +403,19 @@ class TestUpdateRecurrentEvents(TestRecurrentEvents): (datetime(2019, 11, 9, 1, 0), datetime(2019, 11, 12, 18, 0)), ]) + def test_shift_stop_all(self): + # testing the case where we only want to update the stop time + event = self.events[0] + event.write({ + 'recurrence_update': 'all_events', + 'stop': event.stop + relativedelta(hours=1), + }) + self.assertEventDates(event.recurrence_id.calendar_event_ids, [ + (datetime(2019, 10, 22, 2, 0), datetime(2019, 10, 24, 19, 0)), + (datetime(2019, 10, 29, 2, 0), datetime(2019, 10, 31, 19, 0)), + (datetime(2019, 11, 5, 2, 0), datetime(2019, 11, 7, 19, 0)), + ]) + def test_change_week_day_rrule(self): recurrence = self.events.recurrence_id recurrence.rrule = 'FREQ=WEEKLY;COUNT=3;BYDAY=WE' # from TU to WE