Projet

Général

Profil

0001-manager-move-roles-and-booking-delays-to-own-form-46.patch

Valentin Deniaud, 20 octobre 2020 18:00

Télécharger (11,8 ko)

Voir les différences:

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 | 16 ++++-----
 .../chrono/manager_agenda_reminder_form.html  | 22 -------------
 .../chrono/manager_agenda_settings.html       |  2 ++
 chrono/manager/urls.py                        |  6 ++++
 chrono/manager/views.py                       | 31 ++++++++++++++---
 tests/test_manager.py                         | 33 +++++++++++++++++--
 8 files changed, 116 insertions(+), 45 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
chrono/manager/forms.py
66 66
    )
67 67

  
68 68

  
69
class AgendaEditForm(AgendaAddForm):
69
class AgendaEditForm(forms.ModelForm):
70 70
    class Meta:
71 71
        model = Agenda
72 72
        fields = [
73 73
            'label',
74 74
            'slug',
75 75
            'category',
76
            'edit_role',
77
            'view_role',
78
            'minimal_booking_delay',
79
            'maximal_booking_delay',
80 76
            'anonymize_delay',
81 77
            'default_view',
82 78
            'booking_form_url',
......
84 80

  
85 81
    def __init__(self, *args, **kwargs):
86 82
        super(AgendaEditForm, self).__init__(*args, **kwargs)
87
        if kwargs['instance'].kind != 'virtual':
88
            self.fields['minimal_booking_delay'].required = True
89
            self.fields['maximal_booking_delay'].required = True
90 83
        if kwargs['instance'].kind != 'events':
91 84
            del self.fields['default_view']
92 85
            del self.fields['booking_form_url']
93 86

  
94 87

  
88
class AgendaBookingDelaysForm(AgendaAddForm):
89
    class Meta:
90
        model = Agenda
91
        fields = [
92
            'minimal_booking_delay',
93
            'maximal_booking_delay',
94
        ]
95

  
96
    def __init__(self, *args, **kwargs):
97
        super(AgendaBookingDelaysForm, self).__init__(*args, **kwargs)
98
        if kwargs['instance'].kind != 'virtual':
99
            self.fields['minimal_booking_delay'].required = True
100
            self.fields['maximal_booking_delay'].required = True
101

  
102

  
103
class AgendaRolesForm(AgendaAddForm):
104
    class Meta:
105
        model = Agenda
106
        fields = [
107
            'edit_role',
108
            'view_role',
109
        ]
110

  
111

  
95 112
class UnavailabilityCalendarAddForm(forms.ModelForm):
96 113
    class Meta:
97 114
        model = UnavailabilityCalendar
chrono/manager/templates/chrono/manager_agenda_add_form.html
1
{% extends "chrono/manager_home.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans "New Agenda" %}</h2>
6
{% endblock %}
7

  
8
{% block content %}
9

  
10
<form method="post" enctype="multipart/form-data">
11
  {% csrf_token %}
12
  {{ form.as_p }}
13
  <div class="buttons">
14
    <button class="submit-button">{% trans "Save" %}</button>
15
    <a class="cancel" href="{% url 'chrono-manager-homepage' %}">{% trans 'Cancel' %}</a>
16
  </div>
17
</form>
18
{% endblock %}
chrono/manager/templates/chrono/manager_agenda_form.html
1
{% extends "chrono/manager_home.html" %}
1
{% extends "chrono/manager_agenda_view.html" %}
2 2
{% load i18n %}
3 3

  
4
{% block breadcrumb %}
5
{{ block.super }}
6
<a href="">{{ title }}</a>
7
{% endblock %}
8

  
4 9
{% block appbar %}
5
{% if object.id %}
6
<h2>{% trans "Edit Agenda" %}</h2>
7
{% else %}
8
<h2>{% trans "New Agenda" %}</h2>
9
{% endif %}
10
<h2>{{ title }}</h2>
10 11
{% endblock %}
11 12

  
12 13
{% block content %}
13

  
14 14
<form method="post" enctype="multipart/form-data">
15 15
  {% csrf_token %}
16 16
  {{ form.as_p }}
17 17
  <div class="buttons">
18 18
    <button class="submit-button">{% trans "Save" %}</button>
19
    <a class="cancel" href="{% url 'chrono-manager-homepage' %}">{% trans 'Cancel' %}</a>
19
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
20 20
  </div>
21 21
</form>
22 22
{% endblock %}
chrono/manager/templates/chrono/manager_agenda_reminder_form.html
1
{% extends "chrono/manager_agenda_view.html" %}
2
{% load i18n %}
3

  
4
{% block breadcrumb %}
5
{{ block.super }}
6
<a href="">{% trans "Reminder settings" %}</a>
7
{% endblock %}
8

  
9
{% block appbar %}
10
<h2>{% trans "Reminder settings" %}</h2>
11
{% endblock %}
12

  
13
{% block content %}
14
<form method="post" enctype="multipart/form-data">
15
  {% csrf_token %}
16
  {{ form.as_p }}
17
  <div class="buttons">
18
    <button class="submit-button">{% trans "Save" %}</button>
19
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
20
  </div>
21
</form>
22
{% endblock %}
chrono/manager/templates/chrono/manager_agenda_settings.html
69 69
  <li>{% trans "Edit Role:" %} {% if agenda.edit_role %}{{ agenda.edit_role }}{% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
70 70
  <li>{% trans "View Role:" %} {% if agenda.view_role %}{{ agenda.view_role }}{% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
71 71
</ul>
72
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-roles' pk=object.id %}">{% trans 'Configure' %}</a>
72 73
</div>
73 74
</div>
74 75
{% endblock %}
......
85 86
      {% if agenda.maximal_booking_delay is not None %}{{ agenda.maximal_booking_delay }} {% trans "days" %}
86 87
      {% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
87 88
</ul>
89
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-booking-delays' pk=object.id %}">{% trans 'Configure' %}</a>
88 90
</div>
89 91
</div>
90 92
{% endblock %}
chrono/manager/urls.py
99 99
    ),
100 100
    url(r'^agendas/(?P<pk>\d+)/settings$', views.agenda_settings, name='chrono-manager-agenda-settings'),
101 101
    url(r'^agendas/(?P<pk>\d+)/edit$', views.agenda_edit, name='chrono-manager-agenda-edit'),
102
    url(
103
        r'^agendas/(?P<pk>\d+)/booking-delays$',
104
        views.agenda_booking_delays,
105
        name='chrono-manager-agenda-booking-delays',
106
    ),
107
    url(r'^agendas/(?P<pk>\d+)/roles$', views.agenda_roles, name='chrono-manager-agenda-roles'),
102 108
    url(r'^agendas/(?P<pk>\d+)/delete$', views.agenda_delete, name='chrono-manager-agenda-delete'),
103 109
    url(r'^agendas/(?P<pk>\d+)/export$', views.agenda_export, name='chrono-manager-agenda-export'),
104 110
    url(r'^agendas/(?P<pk>\d+)/add-event$', views.agenda_add_event, name='chrono-manager-agenda-add-event'),
chrono/manager/views.py
72 72
from .forms import (
73 73
    AgendaAddForm,
74 74
    AgendaEditForm,
75
    AgendaBookingDelaysForm,
76
    AgendaRolesForm,
75 77
    NewEventForm,
76 78
    EventForm,
77 79
    NewMeetingTypeForm,
......
568 570

  
569 571

  
570 572
class AgendaAddView(CreateView):
571
    template_name = 'chrono/manager_agenda_form.html'
573
    template_name = 'chrono/manager_agenda_add_form.html'
572 574
    model = Agenda
573 575
    form_class = AgendaAddForm
574 576

  
......
679 681

  
680 682
class AgendaEditView(ManagedAgendaMixin, UpdateView):
681 683
    template_name = 'chrono/manager_agenda_form.html'
684
    title = _('Edit Agenda')
682 685
    model = Agenda
683 686
    form_class = AgendaEditForm
684 687

  
685
    def get_success_url(self):
686
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id})
688
    def get_context_data(self, **kwargs):
689
        context = super().get_context_data(**kwargs)
690
        context['title'] = self.title
691
        return context
687 692

  
688 693

  
689 694
agenda_edit = AgendaEditView.as_view()
690 695

  
691 696

  
697
class AgendaBookingDelaysView(AgendaEditView):
698
    form_class = AgendaBookingDelaysForm
699
    title = _('Configure booking delays')
700

  
701

  
702
agenda_booking_delays = AgendaBookingDelaysView.as_view()
703

  
704

  
705
class AgendaRolesView(AgendaEditView):
706
    form_class = AgendaRolesForm
707
    title = _('Configure roles')
708

  
709

  
710
agenda_roles = AgendaRolesView.as_view()
711

  
712

  
692 713
class AgendaDeleteView(DeleteView):
693 714
    template_name = 'chrono/manager_confirm_delete.html'
694 715
    model = Agenda
......
1475 1496
agenda_notifications_settings = AgendaNotificationsSettingsView.as_view()
1476 1497

  
1477 1498

  
1478
class AgendaReminderSettingsView(ManagedAgendaMixin, UpdateView):
1479
    template_name = 'chrono/manager_agenda_reminder_form.html'
1499
class AgendaReminderSettingsView(AgendaEditView):
1500
    title = _('Reminder Settings')
1480 1501
    model = AgendaReminderSettings
1481 1502
    form_class = AgendaReminderForm
1482 1503

  
tests/test_manager.py
915 915
    agenda = Agenda.objects.create(label=u'Foo bar')
916 916
    assert agenda.minimal_booking_delay == 1
917 917
    app = login(app)
918
    url = '/manage/agendas/%s/edit' % agenda.pk
918
    url = '/manage/agendas/%s/booking-delay' % agenda.pk
919 919
    resp = app.get(url)
920 920
    resp.form['minimal_booking_delay'] = None
921 921
    resp = resp.form.submit()
......
927 927
    agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2)
928 928
    assert agenda.maximal_booking_delay == 2
929 929
    app = login(app)
930
    url = '/manage/agendas/%s/edit' % agenda.pk
930
    url = '/manage/agendas/%s/booking-delays' % agenda.pk
931 931
    resp = app.get(url)
932 932
    resp.form['maximal_booking_delay'] = None
933 933
    resp = resp.form.submit()
......
4866 4866
    unavailability_calendar.edit_role = group
4867 4867
    unavailability_calendar.save()
4868 4868
    app.get(url)
4869

  
4870

  
4871
def test_manager_agenda_roles(app, admin_user, manager_user):
4872
    agenda = Agenda.objects.create(label='Events', kind='events')
4873

  
4874
    login(app)
4875
    resp = app.get('/manage/agendas/%s/settings' % agenda.id)
4876
    resp = resp.click('Configure', href='roles')
4877

  
4878
    role = manager_user.groups.all()[0]
4879
    resp.form['edit_role'] = manager_user.groups.all()[0].pk
4880
    resp = resp.form.submit().follow()
4881

  
4882
    assert 'Edit Role: Managers' in resp.text
4883

  
4884

  
4885
def test_manager_agenda_booking_delays(app, admin_user):
4886
    agenda = Agenda.objects.create(label='Events', kind='events')
4887

  
4888
    login(app)
4889
    resp = app.get('/manage/agendas/%s/settings' % agenda.id)
4890
    resp = resp.click('Configure', href='delays')
4891

  
4892
    resp.form['maximal_booking_delay'] = 42
4893
    resp = resp.form.submit().follow()
4894

  
4895
    assert '42 days' in resp.text
4896
    agenda.refresh_from_db()
4897
    assert agenda.maximal_booking_delay == 42
4869
-