From 1d3ea50772fb5636ddfdd76d548514f96b3edd61 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Thu, 2 Apr 2020 16:09:28 +0200 Subject: [PATCH 3/3] agendas: add external flag on exception (#18904) --- .../0042_timeperiodexception_external.py | 20 ++++++++++++++ chrono/agendas/models.py | 2 ++ .../manager_meetings_agenda_settings.html | 4 ++- .../manager_time_period_exception_list.html | 4 +-- tests/test_manager.py | 27 +++++++++++++++++++ 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 chrono/agendas/migrations/0042_timeperiodexception_external.py diff --git a/chrono/agendas/migrations/0042_timeperiodexception_external.py b/chrono/agendas/migrations/0042_timeperiodexception_external.py new file mode 100644 index 0000000..0b0ff4f --- /dev/null +++ b/chrono/agendas/migrations/0042_timeperiodexception_external.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-04-02 13:24 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('agendas', '0041_auto_20200330_1803'), + ] + + operations = [ + migrations.AddField( + model_name='timeperiodexception', + name='external', + field=models.BooleanField(default=False, verbose_name='Exception comes from external source'), + ), + ] diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index ed4ae02..9dae334 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -974,6 +974,7 @@ class TimePeriodExceptionSource(models.Model): label=_(label), start_datetime=start_datetime, end_datetime=end_datetime, + external=True, ) self.enabled = True self.save() @@ -992,6 +993,7 @@ class TimePeriodException(models.Model): end_datetime = models.DateTimeField(_('Exception end time')) update_datetime = models.DateTimeField(auto_now=True) recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0) + external = models.BooleanField(_('Exception comes from external source'), default=False) class Meta: ordering = ['start_datetime'] diff --git a/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html b/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html index 9e965f4..adeb459 100644 --- a/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html +++ b/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html @@ -73,9 +73,11 @@ {% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
  • {% trans 'Exceptions' %}{% trans 'manage exceptions' %}
  • {% for exception in desk.get_exceptions_within_two_weeks %} -
  • +
  • {{ exception }} + {% if not exception.external %} {% trans "remove" %} + {% endif %} {% endfor %} {% if not desk.are_all_exceptions_displayed %}
  • ({% trans 'see all exceptions' %})
  • diff --git a/chrono/manager/templates/chrono/manager_time_period_exception_list.html b/chrono/manager/templates/chrono/manager_time_period_exception_list.html index b267d90..c10ffb7 100644 --- a/chrono/manager/templates/chrono/manager_time_period_exception_list.html +++ b/chrono/manager/templates/chrono/manager_time_period_exception_list.html @@ -20,8 +20,8 @@ diff --git a/tests/test_manager.py b/tests/test_manager.py index 22a5aa1..18188a9 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -7,6 +7,7 @@ import os import re from django.contrib.auth.models import User, Group +from django.urls import reverse from django.utils.encoding import force_text from django.utils.timezone import make_aware, now, localtime from django.test import override_settings @@ -1718,6 +1719,32 @@ def test_meetings_agenda_time_period_exception_source_try_disable_ics(app, admin assert app.get('/manage/time-period-exceptions-source/%s/toggle' % source.pk, status=404) +@override_settings( + EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},} +) +def test_meetings_agenda_time_period_exception_source_external(app, admin_user, freezer): + freezer.move_to('2020-01-01') + agenda = Agenda.objects.create(label='Foo bar', kind='meetings') + desk = Desk.objects.create(agenda=agenda, label='Desk A') + MeetingType(agenda=agenda, label='Blah').save() + TimePeriod.objects.create( + weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0) + ) + new_year = desk.timeperiodexception_set.filter(label='New year').first() + remove_url = reverse('chrono-manager-time-period-exception-delete', kwargs={'pk': new_year.pk}) + edit_url = reverse('chrono-manager-time-period-exception-edit', kwargs={'pk': new_year.pk}) + + login(app) + resp = app.get('/manage/agendas/%d/' % agenda.pk).follow() + resp = resp.click('Settings') + assert 'New year' in resp.text + assert not remove_url in resp.text and not edit_url in resp.text + + resp = resp.click('see all') + assert 'New year' in resp.text + assert not remove_url in resp.text and not edit_url in resp.text + + def test_agenda_day_view(app, admin_user, manager_user, api_user): agenda = Agenda.objects.create(label='New Example', kind='meetings') desk = Desk.objects.create(agenda=agenda, label='New Desk') -- 2.20.1