From e4cdc61474775f0ca13f171cff8f31e0764273f6 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 28 Apr 2021 15:37:53 +0200 Subject: [PATCH] agendas: do not set recurrence end date on event recurrences (#53505) --- .../migrations/0079_auto_20210428_1533.py | 22 +++++++++++++++++++ chrono/manager/forms.py | 2 +- tests/manager/test_event.py | 6 +++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 chrono/agendas/migrations/0079_auto_20210428_1533.py diff --git a/chrono/agendas/migrations/0079_auto_20210428_1533.py b/chrono/agendas/migrations/0079_auto_20210428_1533.py new file mode 100644 index 0000000..0402391 --- /dev/null +++ b/chrono/agendas/migrations/0079_auto_20210428_1533.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.19 on 2021-04-28 13:33 + +from django.db import migrations + + +def remove_recurrence_end_date(apps, schema_editor): + Event = apps.get_model('agendas', 'Event') + + Event.objects.filter(primary_event__isnull=False, recurrence_end_date__isnull=False).update( + recurrence_end_date=None + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('agendas', '0078_absence_reasons'), + ] + + operations = [ + migrations.RunPython(remove_recurrence_end_date, migrations.RunPython.noop), + ] diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index 7f24afd..e3e5b4a 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -211,7 +211,7 @@ class EventForm(forms.ModelForm): update_fields = { field: value for field, value in self.cleaned_data.items() - if field not in self.protected_fields + if field != 'recurrence_end_date' and field not in self.protected_fields } self.instance.recurrences.update(**update_fields) diff --git a/tests/manager/test_event.py b/tests/manager/test_event.py index 9427b65..50ec3fc 100644 --- a/tests/manager/test_event.py +++ b/tests/manager/test_event.py @@ -248,6 +248,10 @@ def test_edit_recurring_event(settings, app, admin_user, freezer): event_recurrence.refresh_from_db() assert event_recurrence.places == 20 + # but some fields should not be updated + assert event_recurrence.slug != event.slug + assert not event_recurrence.repeat + # changing recurrence attribute removes event recurrences resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) resp.form['repeat'] = '' @@ -319,6 +323,8 @@ def test_edit_recurring_event_with_end_date(settings, app, admin_user, freezer): resp = resp.form.submit() assert Event.objects.filter(primary_event=event).count() == 5 assert Event.objects.filter(primary_event=event, start_datetime=recurrence.start_datetime).count() == 1 + # ensure recurrence_end_date has not been propagated + assert not Event.objects.filter(primary_event=event, recurrence_end_date__isnull=False).exists() # editing recurrence_end_date is permitted as long as bookings are not impacted event_recurrence = Event.objects.get(primary_event=event, start_datetime__day=15) -- 2.20.1