manager: do not delete used check types (#63847)

This commit is contained in:
Lauréline Guérin 2022-04-15 15:10:55 +02:00
parent 4b842886b0
commit 75044ae4f2
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 50 additions and 0 deletions

View File

@ -715,6 +715,19 @@ class CheckTypeGroupDeleteView(DeleteView):
raise PermissionDenied()
return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['cannot_delete'] = Booking.objects.filter(user_check_type__group=self.get_object()).exists()
context['cannot_delete_msg'] = _(
'Can not delete this check type group: a check type of this group is set on some existing bookings.'
)
return context
def delete(self, request, *args, **kwargs):
if Booking.objects.filter(user_check_type__group=self.get_object()).exists():
raise Http404
return super().delete(request, *args, **kwargs)
def get_success_url(self):
return reverse('chrono-manager-check-type-list')
@ -803,6 +816,19 @@ class CheckTypeDeleteView(DeleteView):
def get_queryset(self):
return CheckType.objects.filter(group=self.group_pk)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['cannot_delete'] = Booking.objects.filter(user_check_type=self.get_object()).exists()
context['cannot_delete_msg'] = _(
'Can not delete this check type: it is set on some existing bookings.'
)
return context
def delete(self, request, *args, **kwargs):
if Booking.objects.filter(user_check_type=self.get_object()).exists():
raise Http404
return super().delete(request, *args, **kwargs)
def get_success_url(self):
return reverse('chrono-manager-check-type-list')

View File

@ -71,6 +71,9 @@ def test_edit_group_as_manager(app, manager_user, agenda_with_restrictions):
def test_delete_group(app, admin_user):
group = CheckTypeGroup.objects.create(label='Foo bar')
CheckType.objects.create(label='Foo reason', group=group)
agenda = Agenda.objects.create(label='Foo bar')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
Booking.objects.create(event=event)
app = login(app)
resp = app.get('/manage/check-types/')
@ -80,6 +83,17 @@ def test_delete_group(app, admin_user):
assert CheckTypeGroup.objects.exists() is False
assert CheckType.objects.exists() is False
# check_type is used
group = CheckTypeGroup.objects.create(label='Foo bar')
check_type = CheckType.objects.create(label='Foo reason', group=group)
Booking.objects.update(user_check_type=check_type)
resp = app.get('/manage/check-type/group/%s/delete/' % group.pk)
assert (
'Can not delete this check type group: a check type of this group is set on some existing bookings.'
in resp
)
resp.form.submit(status=404)
def test_delete_group_as_manager(app, manager_user, agenda_with_restrictions):
group = CheckTypeGroup.objects.create(label='Foo bar')
@ -230,6 +244,9 @@ def test_edit_check_type_pricing(settings, app, admin_user):
def test_delete_check_type(app, admin_user):
group = CheckTypeGroup.objects.create(label='Foo bar')
check_type = CheckType.objects.create(label='Foo reason', group=group)
agenda = Agenda.objects.create(label='Foo bar')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
Booking.objects.create(event=event)
app = login(app)
resp = app.get('/manage/check-types/')
@ -239,6 +256,13 @@ def test_delete_check_type(app, admin_user):
assert CheckTypeGroup.objects.exists() is True
assert CheckType.objects.exists() is False
# check_type is used
check_type = CheckType.objects.create(label='Foo reason', group=group)
Booking.objects.update(user_check_type=check_type)
resp = app.get('/manage/check-type/group/%s/%s/delete/' % (group.pk, check_type.pk))
assert 'Can not delete this check type: it is set on some existing bookings.' in resp
resp.form.submit(status=404)
group2 = CheckTypeGroup.objects.create(label='Foo bar baz')
app.get('/manage/check-type/group/%s/%s/delete/' % (group2.pk, check_type.pk), status=404)