agendas: do not set recurrence end date on event recurrences (#53505)

This commit is contained in:
Valentin Deniaud 2021-04-28 15:37:53 +02:00
parent 000ea8dc07
commit e4cdc61474
3 changed files with 29 additions and 1 deletions

View File

@ -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),
]

View File

@ -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)

View File

@ -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)