manager: forbid making booked event recurrent (#57609)
This commit is contained in:
parent
7ce030c69f
commit
e9a85c134c
|
@ -169,6 +169,7 @@ class NewEventForm(forms.ModelForm):
|
|||
('recurring', _('Recurring')),
|
||||
),
|
||||
initial='unique',
|
||||
help_text=_('This field will not be editable once event has bookings.'),
|
||||
)
|
||||
recurrence_days = forms.TypedMultipleChoiceField(
|
||||
choices=Event.WEEKDAY_CHOICES,
|
||||
|
@ -242,6 +243,12 @@ class EventForm(NewEventForm):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['frequency'].initial = 'recurring' if self.instance.recurrence_days else 'unique'
|
||||
if not self.instance.recurrence_days and self.instance.booking_set.exists():
|
||||
self.fields['frequency'].disabled = True
|
||||
self.fields['frequency'].help_text = ''
|
||||
self.fields['frequency'].widget.attrs['title'] = _(
|
||||
'This field cannot be modified because event has bookings.'
|
||||
)
|
||||
if self.instance.recurrence_days and self.instance.has_recurrences_booked():
|
||||
for field in self.protected_fields:
|
||||
self.fields[field].disabled = True
|
||||
|
|
|
@ -369,6 +369,23 @@ def test_edit_recurring_event_with_end_date(settings, app, admin_user, freezer):
|
|||
assert 'Bookings exist after this date' in resp.text
|
||||
|
||||
|
||||
def test_edit_booked_event_disable_frequency_choice(settings, app, admin_user, freezer):
|
||||
freezer.move_to('2021-01-12 12:10')
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
event = Event.objects.create(start_datetime=now(), places=10, agenda=agenda)
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
|
||||
assert 'disabled' not in resp.form['frequency'].attrs
|
||||
assert 'This field will not be editable once event has bookings.' in resp.text
|
||||
|
||||
Booking.objects.create(event=event)
|
||||
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
|
||||
assert 'disabled' in resp.form['frequency'].attrs
|
||||
assert 'cannot be modified' in resp.form['frequency'].attrs['title']
|
||||
assert 'This field will not be editable once event has bookings.' not in resp.text
|
||||
|
||||
|
||||
def test_booked_places(app, admin_user):
|
||||
agenda = Agenda(label='Foo bar')
|
||||
agenda.save()
|
||||
|
|
Loading…
Reference in New Issue