0001-manager-forbid-making-booked-event-recurrent-57609.patch
chrono/manager/forms.py | ||
---|---|---|
169 | 169 |
('recurring', _('Recurring')), |
170 | 170 |
), |
171 | 171 |
initial='unique', |
172 |
help_text=_('This field will not be editable once event has bookings.'), |
|
172 | 173 |
) |
173 | 174 |
recurrence_days = forms.TypedMultipleChoiceField( |
174 | 175 |
choices=Event.WEEKDAY_CHOICES, |
... | ... | |
242 | 243 |
def __init__(self, *args, **kwargs): |
243 | 244 |
super().__init__(*args, **kwargs) |
244 | 245 |
self.fields['frequency'].initial = 'recurring' if self.instance.recurrence_days else 'unique' |
246 |
if not self.instance.recurrence_days and self.instance.booking_set.exists(): |
|
247 |
self.fields['frequency'].disabled = True |
|
248 |
self.fields['frequency'].help_text = '' |
|
249 |
self.fields['frequency'].widget.attrs['title'] = _( |
|
250 |
'This field cannot be modified because event has bookings.' |
|
251 |
) |
|
245 | 252 |
if self.instance.recurrence_days and self.instance.has_recurrences_booked(): |
246 | 253 |
for field in self.protected_fields: |
247 | 254 |
self.fields[field].disabled = True |
tests/manager/test_event.py | ||
---|---|---|
369 | 369 |
assert 'Bookings exist after this date' in resp.text |
370 | 370 | |
371 | 371 | |
372 |
def test_edit_booked_event_disable_frequency_choice(settings, app, admin_user, freezer): |
|
373 |
freezer.move_to('2021-01-12 12:10') |
|
374 |
agenda = Agenda.objects.create(label='Foo bar', kind='events') |
|
375 |
event = Event.objects.create(start_datetime=now(), places=10, agenda=agenda) |
|
376 | ||
377 |
app = login(app) |
|
378 |
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
|
379 |
assert 'disabled' not in resp.form['frequency'].attrs |
|
380 |
assert 'This field will not be editable once event has bookings.' in resp.text |
|
381 | ||
382 |
Booking.objects.create(event=event) |
|
383 |
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
|
384 |
assert 'disabled' in resp.form['frequency'].attrs |
|
385 |
assert 'cannot be modified' in resp.form['frequency'].attrs['title'] |
|
386 |
assert 'This field will not be editable once event has bookings.' not in resp.text |
|
387 | ||
388 | ||
372 | 389 |
def test_booked_places(app, admin_user): |
373 | 390 |
agenda = Agenda(label='Foo bar') |
374 | 391 |
agenda.save() |
375 |
- |