0003-manager-forbid-moving-event-end-recurrence-date-befo.patch
chrono/agendas/models.py | ||
---|---|---|
1340 | 1340 |
return None |
1341 | 1341 |
return rrule |
1342 | 1342 | |
1343 |
def has_recurrences_booked(self): |
|
1343 |
def has_recurrences_booked(self, after=None):
|
|
1344 | 1344 |
return Booking.objects.filter( |
1345 |
event__primary_event=self, event__start_datetime__gt=now(), cancellation_datetime__isnull=True |
|
1345 |
event__primary_event=self, |
|
1346 |
event__start_datetime__gt=after or now(), |
|
1347 |
cancellation_datetime__isnull=True, |
|
1346 | 1348 |
).exists() |
1347 | 1349 | |
1348 | 1350 |
def create_all_recurrences(self, excluded_datetimes=None): |
chrono/manager/forms.py | ||
---|---|---|
212 | 212 |
'This field cannot be modified because some recurrences have bookings attached to them.' |
213 | 213 |
) |
214 | 214 | |
215 |
def clean(self): |
|
216 |
super().clean() |
|
217 |
if 'recurrence_end_date' in self.changed_data and self.instance.has_recurrences_booked( |
|
218 |
after=self.cleaned_data['recurrence_end_date'] |
|
219 |
): |
|
220 |
raise ValidationError(_('Bookings exist after this date.')) |
|
221 | ||
215 | 222 |
def save(self, *args, **kwargs): |
216 | 223 |
with transaction.atomic(): |
217 | 224 |
if any(field for field in self.changed_data if field in self.protected_fields): |
tests/test_manager.py | ||
---|---|---|
1547 | 1547 |
# old recurrences were deleted |
1548 | 1548 |
assert not Event.objects.filter(primary_event=event, start_datetime=now()).exists() |
1549 | 1549 | |
1550 |
# editing recurrence_end_date is permitted as long as bookings are not impacted |
|
1551 |
event_recurrence = Event.objects.get(primary_event=event, start_datetime__day=15) |
|
1552 |
Booking.objects.create(event=event_recurrence) |
|
1550 | 1553 |
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
1551 | 1554 |
resp.form['recurrence_end_date'] = (localtime() + datetime.timedelta(days=6)).strftime('%Y-%m-%d') |
1552 | 1555 |
resp = resp.form.submit() |
... | ... | |
1557 | 1560 |
resp = resp.form.submit() |
1558 | 1561 |
assert Event.objects.filter(primary_event=event).count() == 4 |
1559 | 1562 | |
1563 |
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
|
1564 |
resp.form['recurrence_end_date'] = (localtime() + datetime.timedelta(days=2)).strftime('%Y-%m-%d') |
|
1565 |
resp = resp.form.submit() |
|
1566 |
assert Event.objects.filter(primary_event=event).count() == 4 |
|
1567 |
assert 'Bookings exist after this date' in resp.text |
|
1568 | ||
1560 | 1569 | |
1561 | 1570 |
def test_booked_places(app, admin_user): |
1562 | 1571 |
agenda = Agenda(label=u'Foo bar') |
1563 |
- |