Projet

Général

Profil

0006-manager-add-button-to-switch-desk-management-mode-48.patch

Lauréline Guérin, 05 février 2021 10:19

Télécharger (7,81 ko)

Voir les différences:

Subject: [PATCH 06/11] manager: add button to switch desk management mode
 (#48924)

 .../chrono/manager_agenda_settings.html       |  1 +
 .../manager_meetings_agenda_settings.html     |  8 +++
 chrono/manager/urls.py                        |  5 ++
 chrono/manager/views.py                       | 29 +++++++++
 tests/test_manager.py                         | 59 ++++++++++++++++++-
 5 files changed, 101 insertions(+), 1 deletion(-)
chrono/manager/templates/chrono/manager_agenda_settings.html
28 28
    {% if user.is_staff %}
29 29
      <li><a rel="popup" href="{% url 'chrono-manager-agenda-delete' pk=object.id %}">{% trans 'Delete' %}</a></li>
30 30
    {% endif %}
31
    {% block agenda-extra-menu-actions %}{% endblock %}
31 32
  </ul>
32 33
</span>
33 34
{% endblock %}
chrono/manager/templates/chrono/manager_meetings_agenda_settings.html
18 18
  <a rel="popup" href="{% url 'chrono-manager-agenda-add-desk' pk=object.id %}">{% trans 'New Desk' %}</a>
19 19
{% endblock %}
20 20

  
21
{% block agenda-extra-menu-actions %}
22
  {% if object.desk_simple_management %}
23
  <li><a href="{% url 'chrono-manager-agenda-desk-management-toggle-view' pk=object.pk %}">{% trans 'Switch to invididual desk management' %}</a></li>
24
  {% elif agenda_is_available_for_simple_management %}
25
  <li><a href="{% url 'chrono-manager-agenda-desk-management-toggle-view' pk=object.pk %}">{% trans 'Switch to global desk management' %}</a></li>
26
  {% endif %}
27
{% endblock %}
28

  
21 29
{% block agenda-settings %}
22 30

  
23 31
<div class="section">
chrono/manager/urls.py
115 115
    url(r'^agendas/(?P<pk>\d+)/export$', views.agenda_export, name='chrono-manager-agenda-export'),
116 116
    url(r'^agendas/(?P<pk>\d+)/add-event$', views.agenda_add_event, name='chrono-manager-agenda-add-event'),
117 117
    url(r'^agendas/(?P<pk>\d+)/duplicate$', views.agenda_duplicate, name='chrono-manager-agenda-duplicate'),
118
    url(
119
        r'^agendas/(?P<pk>\d+)/desk-management-toggle$',
120
        views.agenda_desk_management_toggle_view,
121
        name='chrono-manager-agenda-desk-management-toggle-view',
122
    ),
118 123
    url(
119 124
        r'^agendas/(?P<pk>\d+)/import-events$',
120 125
        views.agenda_import_events,
chrono/manager/views.py
1374 1374
        if self.agenda.kind == 'meetings':
1375 1375
            context['has_resources'] = Resource.objects.exists()
1376 1376
            context['has_unavailability_calendars'] = UnavailabilityCalendar.objects.exists()
1377
            context['agenda_is_available_for_simple_management'] = (
1378
                self.object.is_available_for_simple_management()
1379
                if not self.object.desk_simple_management
1380
                else False
1381
            )
1377 1382
        return context
1378 1383

  
1379 1384
    def get_events(self):
......
1530 1535
agenda_export_events = AgendaExportEventsView.as_view()
1531 1536

  
1532 1537

  
1538
class AgendaDeskManagementToggleView(ManagedAgendaMixin, View):
1539
    agenda = None
1540

  
1541
    def set_agenda(self, **kwargs):
1542
        self.agenda = get_object_or_404(Agenda, pk=kwargs.get('pk'), kind='meetings')
1543

  
1544
    def get(self, request, *args, **kwargs):
1545
        message = None
1546
        if self.agenda.desk_simple_management:
1547
            self.agenda.desk_simple_management = False
1548
            self.agenda.save()
1549
            message = _('Desk individual management enabled.')
1550
        elif self.agenda.is_available_for_simple_management():
1551
            self.agenda.desk_simple_management = True
1552
            self.agenda.save()
1553
            message = _('Desk global management enabled.')
1554
        if message:
1555
            messages.info(self.request, message)
1556
        return HttpResponseRedirect(reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.pk}))
1557

  
1558

  
1559
agenda_desk_management_toggle_view = AgendaDeskManagementToggleView.as_view()
1560

  
1561

  
1533 1562
class AgendaNotificationsSettingsView(ManagedAgendaMixin, UpdateView):
1534 1563
    template_name = 'chrono/manager_agenda_notifications_form.html'
1535 1564
    model = AgendaNotificationsSettings
tests/test_manager.py
1075 1075
    app = login(app)
1076 1076
    with CaptureQueriesContext(connection) as ctx:
1077 1077
        app.get('/manage/agendas/%s/settings' % agenda.pk)
1078
        assert len(ctx.captured_queries) == 12
1078
        assert len(ctx.captured_queries) == 19
1079

  
1080

  
1081
@mock.patch('chrono.agendas.models.Agenda.is_available_for_simple_management')
1082
def test_agenda_options_desk_simple_management(available_mock, app, admin_user):
1083
    agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
1084
    app = login(app)
1085

  
1086
    available_mock.return_value = True
1087
    assert agenda.desk_simple_management is False
1088
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
1089
    assert '/manage/agendas/%s/desk-management-toggle' % agenda.pk in resp.text
1090
    agenda.desk_simple_management = True
1091
    agenda.save()
1092
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
1093
    assert '/manage/agendas/%s/desk-management-toggle' % agenda.pk in resp.text
1094

  
1095
    available_mock.return_value = False
1096
    agenda.desk_simple_management = False
1097
    agenda.save()
1098
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
1099
    assert '/manage/agendas/%s/desk-management-toggle' % agenda.pk not in resp.text
1100
    agenda.desk_simple_management = True
1101
    agenda.save()
1102
    # always possible to disable this flag
1103
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
1104
    assert '/manage/agendas/%s/desk-management-toggle' % agenda.pk in resp.text
1105

  
1106
    available_mock.return_value = True
1107
    for old_value in [True, False]:
1108
        agenda.desk_simple_management = old_value
1109
        agenda.save()
1110
        resp = app.get('/manage/agendas/%s/desk-management-toggle' % agenda.pk)
1111
        assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.pk)
1112
        agenda.refresh_from_db()
1113
        # was changed
1114
        assert agenda.desk_simple_management is not old_value
1115

  
1116
    available_mock.return_value = False
1117
    for old_value in [True, False]:
1118
        agenda.desk_simple_management = old_value
1119
        agenda.save()
1120
        resp = app.get('/manage/agendas/%s/desk-management-toggle' % agenda.pk)
1121
        assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.pk)
1122
        agenda.refresh_from_db()
1123
        # not possible to enable flag
1124
        assert agenda.desk_simple_management is False
1125

  
1126
    # unknown pk
1127
    app.get('/manage/agendas/0/desk-management-toggle', status=404)
1128

  
1129
    # check kind
1130
    agenda.kind = 'events'
1131
    agenda.save()
1132
    app.get('/manage/agendas/%s/desk-management-toggle' % agenda.pk, status=404)
1133
    agenda.kind = 'virtual'
1134
    agenda.save()
1135
    app.get('/manage/agendas/%s/desk-management-toggle' % agenda.pk, status=404)
1079 1136

  
1080 1137

  
1081 1138
def test_agenda_resources(app, admin_user):
1082
-