From 0e80a43b0e94e617d5935c823829146c4771a087 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Mon, 27 Jun 2022 14:21:08 +0200 Subject: [PATCH] manager: allow deletion of custody agenda by superuser (#66324) --- .../manager_shared_custody_agenda_settings.html | 8 ++++++++ chrono/manager/urls.py | 5 +++++ chrono/manager/views.py | 17 +++++++++++++++++ tests/manager/test_shared_custody_agenda.py | 17 +++++++++++++++++ 4 files changed, 47 insertions(+) diff --git a/chrono/manager/templates/chrono/manager_shared_custody_agenda_settings.html b/chrono/manager/templates/chrono/manager_shared_custody_agenda_settings.html index 7c035d80..10521c1a 100644 --- a/chrono/manager/templates/chrono/manager_shared_custody_agenda_settings.html +++ b/chrono/manager/templates/chrono/manager_shared_custody_agenda_settings.html @@ -9,11 +9,19 @@ {% block appbar %}

{% trans "Settings" %}

+ {% if user.is_staff %} + + {% endif %} {% trans 'Add custody period' %} {% if has_holidays %} {% trans 'Add custody rule during holidays' %} {% endif %} {% trans 'Add custody rule' %} + {% if user.is_staff %} + + {% endif %} {% endblock %} diff --git a/chrono/manager/urls.py b/chrono/manager/urls.py index 49634127..15e960bc 100644 --- a/chrono/manager/urls.py +++ b/chrono/manager/urls.py @@ -420,6 +420,11 @@ urlpatterns = [ views.shared_custody_agenda_settings, name='chrono-manager-shared-custody-agenda-settings', ), + url( + r'^shared-custody/(?P\d+)/delete$', + views.shared_custody_agenda_delete, + name='chrono-manager-shared-custody-agenda-delete', + ), url( r'^shared-custody/(?P\d+)/add-rule$', views.shared_custody_agenda_add_rule, diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 8f76b37d..0c7d9951 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -3790,6 +3790,23 @@ class SharedCustodyAgendaSettings(SharedCustodyAgendaMixin, DetailView): shared_custody_agenda_settings = SharedCustodyAgendaSettings.as_view() +class SharedCustodyAgendaDeleteView(SharedCustodyAgendaMixin, DeleteView): + template_name = 'chrono/manager_confirm_delete.html' + model = SharedCustodyAgenda + pk_url_kwarg = 'pk' + + def dispatch(self, request, *args, **kwargs): + if not request.user.is_staff: + raise PermissionDenied() + return super().dispatch(request, *args, **kwargs) + + def get_success_url(self): + return reverse('chrono-manager-homepage') + + +shared_custody_agenda_delete = SharedCustodyAgendaDeleteView.as_view() + + class SharedCustodyAgendaAddRuleView(SharedCustodyAgendaMixin, CreateView): title = _('Add custody rule') template_name = 'chrono/manager_agenda_form.html' diff --git a/tests/manager/test_shared_custody_agenda.py b/tests/manager/test_shared_custody_agenda.py index 9f14c231..576798b8 100644 --- a/tests/manager/test_shared_custody_agenda.py +++ b/tests/manager/test_shared_custody_agenda.py @@ -327,3 +327,20 @@ def test_shared_custody_settings_management_role(app, admin_user, manager_user): app = login(app, username='manager', password='manager') resp = app.get('/manage/shared-custody/%s/settings/' % agenda.pk) assert 'Custody agenda of John Doe and Jane Doe' in resp.text + + +def test_shared_custody_agenda_delete(app, admin_user, manager_user): + father = Person.objects.create(user_external_id='father_id', first_name='John', last_name='Doe') + mother = Person.objects.create(user_external_id='mother_id', first_name='Jane', last_name='Doe') + agenda = SharedCustodyAgenda.objects.create(first_guardian=father, second_guardian=mother) + SharedCustodySettings.objects.create(management_role=manager_user.groups.all()[0]) + + app = login(app, username='manager', password='manager') + resp = app.get('/manage/shared-custody/%s/settings/' % agenda.pk) + assert 'Delete' not in resp.text + + app = login(app) + resp = app.get('/manage/shared-custody/%s/settings/' % agenda.pk) + resp = resp.click('Delete') + resp = resp.form.submit().follow() + assert not SharedCustodyAgenda.objects.exists() -- 2.30.2