manager: do not block adding exceptions on cancelled bookings (#19872)

This commit is contained in:
Frédéric Péters 2017-11-03 09:25:13 +01:00
parent 12950a6012
commit 0ab8ee91d2
2 changed files with 22 additions and 1 deletions

View File

@ -524,7 +524,9 @@ class TimePeriodException(models.Model):
raise ValidationError(_('One or several bookings exists within this time slot.'))
def has_booking_within_time_slot(self):
for event in Event.objects.filter(agenda=self.desk.agenda, booking__isnull=False):
for event in Event.objects.filter(agenda=self.desk.agenda,
booking__isnull=False,
booking__cancellation_datetime__isnull=True):
if self.start_datetime <= event.start_datetime < self.end_datetime:
return True
return False

View File

@ -786,7 +786,26 @@ def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admi
resp.form['end_datetime'] = '2017-05-26 17:30'
resp = resp.form.submit()
assert 'One or several bookings exists within this time slot.' in resp.content
assert TimePeriodException.objects.count() == 0
def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists(app, admin_user):
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='Desk A')
MeetingType(agenda=agenda, label='Blah').save()
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
event = Event.objects.create(agenda=agenda, places=1,
start_datetime=datetime.datetime(2017, 5, 22, 10, 30))
Booking.objects.create(event=event,
cancellation_datetime=datetime.datetime(2017, 5, 20, 10, 30))
login(app)
resp = app.get('/manage/agendas/%d/' % agenda.pk)
resp = resp.click('Add a time period exception')
resp.form['start_datetime'] = '2017-05-22 08:00'
resp.form['end_datetime'] = '2017-05-26 17:30'
resp = resp.form.submit()
assert 'One or several bookings exists within this time slot.' not in resp.content
assert TimePeriodException.objects.count() == 1
def test_meetings_agenda_add_invalid_time_period_exception(app, admin_user):
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')