From 0fa1df3c60c533bae945c8d9e5983235161e29d0 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 20 Oct 2020 17:29:51 +0200 Subject: [PATCH] manager: move roles and booking delays to own form (#46774) --- chrono/manager/forms.py | 33 ++++++++++++++----- .../chrono/manager_agenda_add_form.html | 18 ++++++++++ .../templates/chrono/manager_agenda_form.html | 21 ++++-------- .../chrono/manager_agenda_reminder_form.html | 22 ------------- .../chrono/manager_agenda_settings.html | 13 +++++--- .../manager_events_agenda_settings.html | 5 +-- chrono/manager/urls.py | 6 ++++ chrono/manager/views.py | 31 ++++++++++++++--- tests/test_manager.py | 33 +++++++++++++++++-- 9 files changed, 124 insertions(+), 58 deletions(-) create mode 100644 chrono/manager/templates/chrono/manager_agenda_add_form.html delete mode 100644 chrono/manager/templates/chrono/manager_agenda_reminder_form.html diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index 00548e3..b837a81 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -66,17 +66,13 @@ class AgendaAddForm(forms.ModelForm): ) -class AgendaEditForm(AgendaAddForm): +class AgendaEditForm(forms.ModelForm): class Meta: model = Agenda fields = [ 'label', 'slug', 'category', - 'edit_role', - 'view_role', - 'minimal_booking_delay', - 'maximal_booking_delay', 'anonymize_delay', 'default_view', 'booking_form_url', @@ -84,14 +80,35 @@ class AgendaEditForm(AgendaAddForm): def __init__(self, *args, **kwargs): super(AgendaEditForm, self).__init__(*args, **kwargs) - if kwargs['instance'].kind != 'virtual': - self.fields['minimal_booking_delay'].required = True - self.fields['maximal_booking_delay'].required = True if kwargs['instance'].kind != 'events': del self.fields['default_view'] del self.fields['booking_form_url'] +class AgendaBookingDelaysForm(forms.ModelForm): + class Meta: + model = Agenda + fields = [ + 'minimal_booking_delay', + 'maximal_booking_delay', + ] + + def __init__(self, *args, **kwargs): + super(AgendaBookingDelaysForm, self).__init__(*args, **kwargs) + if kwargs['instance'].kind != 'virtual': + self.fields['minimal_booking_delay'].required = True + self.fields['maximal_booking_delay'].required = True + + +class AgendaRolesForm(AgendaAddForm): + class Meta: + model = Agenda + fields = [ + 'edit_role', + 'view_role', + ] + + class UnavailabilityCalendarAddForm(forms.ModelForm): class Meta: model = UnavailabilityCalendar diff --git a/chrono/manager/templates/chrono/manager_agenda_add_form.html b/chrono/manager/templates/chrono/manager_agenda_add_form.html new file mode 100644 index 0000000..7a40949 --- /dev/null +++ b/chrono/manager/templates/chrono/manager_agenda_add_form.html @@ -0,0 +1,18 @@ +{% extends "chrono/manager_home.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans "New Agenda" %}

+{% endblock %} + +{% block content %} + +
+ {% csrf_token %} + {{ form.as_p }} +
+ + {% trans 'Cancel' %} +
+
+{% endblock %} diff --git a/chrono/manager/templates/chrono/manager_agenda_form.html b/chrono/manager/templates/chrono/manager_agenda_form.html index 522fa8a..ea042f1 100644 --- a/chrono/manager/templates/chrono/manager_agenda_form.html +++ b/chrono/manager/templates/chrono/manager_agenda_form.html @@ -1,33 +1,24 @@ -{% extends "chrono/manager_home.html" %} +{% extends "chrono/manager_agenda_view.html" %} {% load i18n %} {% block breadcrumb %} {{ block.super }} -{% if object.pk %} - {{ object }} - {% trans 'Settings' %} - {% trans 'Edit Agenda' %} -{% else %} - {% trans 'New Agenda' %} -{% endif %} +{{ object }} +{% trans 'Settings' %} +{{ title }} {% endblock %} {% block appbar %} -{% if object.id %} -

{% trans "Edit Agenda" %}

-{% else %} -

{% trans "New Agenda" %}

-{% endif %} +

{{ title }}

{% endblock %} {% block content %} -
{% csrf_token %} {{ form.as_p }}
{% endblock %} diff --git a/chrono/manager/templates/chrono/manager_agenda_reminder_form.html b/chrono/manager/templates/chrono/manager_agenda_reminder_form.html deleted file mode 100644 index 4501fb2..0000000 --- a/chrono/manager/templates/chrono/manager_agenda_reminder_form.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "chrono/manager_agenda_view.html" %} -{% load i18n %} - -{% block breadcrumb %} -{{ block.super }} -{% trans "Reminder settings" %} -{% endblock %} - -{% block appbar %} -

{% trans "Reminder settings" %}

-{% endblock %} - -{% block content %} -
- {% csrf_token %} - {{ form.as_p }} -
- - {% trans 'Cancel' %} -
-
-{% endblock %} diff --git a/chrono/manager/templates/chrono/manager_agenda_settings.html b/chrono/manager/templates/chrono/manager_agenda_settings.html index b396515..c86ac70 100644 --- a/chrono/manager/templates/chrono/manager_agenda_settings.html +++ b/chrono/manager/templates/chrono/manager_agenda_settings.html @@ -39,7 +39,9 @@ {% block agenda-reminder %}
-

{% trans "Booking reminders" %}

+

{% trans "Booking reminders" %} +{% trans "Configure" %} +

{% if not agenda.reminder_settings or not agenda.reminder_settings.days %} @@ -56,14 +58,15 @@ {% trans "Preview SMS" %} {% endif %}

-{% trans "Configure" %}
{% endblock %} {% block agenda-permissions %}
-

{% trans "Permissions" %}

+

{% trans "Permissions" %} +{% trans 'Configure' %} +

  • {% trans "Edit Role:" %} {% if agenda.edit_role %}{{ agenda.edit_role }}{% else %}{% trans "undefined" %}{% endif %}
  • @@ -75,7 +78,9 @@ {% block agenda-booking-delays %}
    -

    {% trans "Booking Delays" %}

    +

    {% trans "Booking Delays" %} +{% trans 'Configure' %} +

    • {% trans "Minimal booking delay:" %} diff --git a/chrono/manager/templates/chrono/manager_events_agenda_settings.html b/chrono/manager/templates/chrono/manager_events_agenda_settings.html index e5371c3..b509b46 100644 --- a/chrono/manager/templates/chrono/manager_events_agenda_settings.html +++ b/chrono/manager/templates/chrono/manager_events_agenda_settings.html @@ -31,7 +31,9 @@
    -

    {% trans "Notifications" %}

    +

    {% trans "Notifications" %} +{% trans 'Configure' %} +

      {% for notification_type in object.notifications_settings.get_notification_types %} @@ -44,7 +46,6 @@ {% trans "Notifications are disabled for this agenda." %} {% endfor %}
    -{% trans 'Configure' %}
    diff --git a/chrono/manager/urls.py b/chrono/manager/urls.py index 8e9078f..80eb888 100644 --- a/chrono/manager/urls.py +++ b/chrono/manager/urls.py @@ -105,6 +105,12 @@ urlpatterns = [ ), url(r'^agendas/(?P\d+)/settings$', views.agenda_settings, name='chrono-manager-agenda-settings'), url(r'^agendas/(?P\d+)/edit$', views.agenda_edit, name='chrono-manager-agenda-edit'), + url( + r'^agendas/(?P\d+)/booking-delays$', + views.agenda_booking_delays, + name='chrono-manager-agenda-booking-delays', + ), + url(r'^agendas/(?P\d+)/roles$', views.agenda_roles, name='chrono-manager-agenda-roles'), url(r'^agendas/(?P\d+)/delete$', views.agenda_delete, name='chrono-manager-agenda-delete'), url(r'^agendas/(?P\d+)/export$', views.agenda_export, name='chrono-manager-agenda-export'), url(r'^agendas/(?P\d+)/add-event$', views.agenda_add_event, name='chrono-manager-agenda-add-event'), diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 259c1eb..9350e0c 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -72,6 +72,8 @@ from chrono.agendas.models import ( from .forms import ( AgendaAddForm, AgendaEditForm, + AgendaBookingDelaysForm, + AgendaRolesForm, NewEventForm, EventForm, NewMeetingTypeForm, @@ -591,7 +593,7 @@ category_delete = CategoryDeleteView.as_view() class AgendaAddView(CreateView): - template_name = 'chrono/manager_agenda_form.html' + template_name = 'chrono/manager_agenda_add_form.html' model = Agenda form_class = AgendaAddForm @@ -724,16 +726,35 @@ class ManagedAgendaMixin(ViewableAgendaMixin): class AgendaEditView(ManagedAgendaMixin, UpdateView): template_name = 'chrono/manager_agenda_form.html' + title = _('Edit Agenda') model = Agenda form_class = AgendaEditForm - def get_success_url(self): - return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id}) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['title'] = self.title + return context agenda_edit = AgendaEditView.as_view() +class AgendaBookingDelaysView(AgendaEditView): + form_class = AgendaBookingDelaysForm + title = _('Configure booking delays') + + +agenda_booking_delays = AgendaBookingDelaysView.as_view() + + +class AgendaRolesView(AgendaEditView): + form_class = AgendaRolesForm + title = _('Configure roles') + + +agenda_roles = AgendaRolesView.as_view() + + class AgendaDeleteView(DeleteView): template_name = 'chrono/manager_confirm_delete.html' model = Agenda @@ -1522,8 +1543,8 @@ class AgendaNotificationsSettingsView(ManagedAgendaMixin, UpdateView): agenda_notifications_settings = AgendaNotificationsSettingsView.as_view() -class AgendaReminderSettingsView(ManagedAgendaMixin, UpdateView): - template_name = 'chrono/manager_agenda_reminder_form.html' +class AgendaReminderSettingsView(AgendaEditView): + title = _('Reminder Settings') model = AgendaReminderSettings form_class = AgendaReminderForm diff --git a/tests/test_manager.py b/tests/test_manager.py index cd99fd6..fc140cc 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -948,7 +948,7 @@ def test_options_agenda_cant_unset_delays(app, admin_user): agenda = Agenda.objects.create(label=u'Foo bar') assert agenda.minimal_booking_delay == 1 app = login(app) - url = '/manage/agendas/%s/edit' % agenda.pk + url = '/manage/agendas/%s/booking-delays' % agenda.pk resp = app.get(url) resp.form['minimal_booking_delay'] = None resp = resp.form.submit() @@ -960,7 +960,7 @@ def test_options_virtuale_agenda_can_unset_delays(app, admin_user): agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2) assert agenda.maximal_booking_delay == 2 app = login(app) - url = '/manage/agendas/%s/edit' % agenda.pk + url = '/manage/agendas/%s/booking-delays' % agenda.pk resp = app.get(url) resp.form['maximal_booking_delay'] = None resp = resp.form.submit() @@ -5214,3 +5214,32 @@ def test_export_site(app, admin_user): site_json = json.loads(resp.text) assert 'agendas' not in site_json assert 'unavailability_calendars' in site_json + + +def test_manager_agenda_roles(app, admin_user, manager_user): + agenda = Agenda.objects.create(label='Events', kind='events') + + login(app) + resp = app.get('/manage/agendas/%s/settings' % agenda.id) + resp = resp.click('Configure', href='roles') + + role = manager_user.groups.all()[0] + resp.form['edit_role'] = manager_user.groups.all()[0].pk + resp = resp.form.submit().follow() + + assert 'Edit Role: Managers' in resp.text + + +def test_manager_agenda_booking_delays(app, admin_user): + agenda = Agenda.objects.create(label='Events', kind='events') + + login(app) + resp = app.get('/manage/agendas/%s/settings' % agenda.id) + resp = resp.click('Configure', href='delays') + + resp.form['maximal_booking_delay'] = 42 + resp = resp.form.submit().follow() + + assert '42 days' in resp.text + agenda.refresh_from_db() + assert agenda.maximal_booking_delay == 42 -- 2.20.1