0006-manager-add-button-to-switch-desk-management-mode-48.patch
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 |
- |