From 06220c72e2ef26574ba01b90a559530ede619917 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Mon, 26 Oct 2020 16:55:59 +0100 Subject: [PATCH 1/3] agendas: rename flag on exception sourced from settings (#47966) --- .../0068_remove_timeperiodexception_external.py | 16 ++++++++++++++++ chrono/agendas/models.py | 8 +++++--- .../chrono/manager_meetings_agenda_settings.html | 4 ++-- .../manager_time_period_exception_list.html | 4 ++-- chrono/manager/views.py | 4 ++-- tests/test_manager.py | 12 ++++++++++++ 6 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 chrono/agendas/migrations/0068_remove_timeperiodexception_external.py diff --git a/chrono/agendas/migrations/0068_remove_timeperiodexception_external.py b/chrono/agendas/migrations/0068_remove_timeperiodexception_external.py new file mode 100644 index 0000000..344bf1f --- /dev/null +++ b/chrono/agendas/migrations/0068_remove_timeperiodexception_external.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-10-27 09:32 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('agendas', '0067_auto_20201021_1746'), + ] + + operations = [ + migrations.RemoveField(model_name='timeperiodexception', name='external',), + ] diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index ee9b9d0..a6394aa 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -1479,7 +1479,6 @@ class TimePeriodExceptionSource(models.Model): label=label, start_datetime=start_datetime, end_datetime=end_datetime, - external=True, ) self.enabled = True self.save() @@ -1553,7 +1552,10 @@ 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) + + @property + def from_settings(self): + return self.source and self.source.settings_slug class Meta: ordering = ['start_datetime'] @@ -1583,7 +1585,7 @@ class TimePeriodException(models.Model): ) if self.label: - label = _(self.label) if self.external else self.label + label = _(self.label) if self.from_settings else self.label exc_repr = u'%s (%s)' % (label, exc_repr) return exc_repr diff --git a/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html b/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html index d61fab3..25cf8a7 100644 --- a/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html +++ b/chrono/manager/templates/chrono/manager_meetings_agenda_settings.html @@ -73,9 +73,9 @@ {% 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 %} + {% if not exception.from_settings%} {% trans "remove" %} {% endif %} {% endfor %} 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 c10ffb7..d6fca2e 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/chrono/manager/views.py b/chrono/manager/views.py index 84c0050..e587081 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -1937,7 +1937,7 @@ class TimePeriodExceptionListView(ManagedDeskMixin, ListView): paginate_by = 20 def get_queryset(self): - return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()) + return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()).select_related('source') def get_context_data(self, **kwargs): context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs) @@ -1976,7 +1976,7 @@ class TimePeriodExceptionDeleteView(ManagedTimePeriodExceptionMixin, DeleteView) return success_url def get_queryset(self): - return super().get_queryset().filter(external=False) + return super().get_queryset().filter(source__settings_slug__isnull=True) time_period_exception_delete = TimePeriodExceptionDeleteView.as_view() diff --git a/tests/test_manager.py b/tests/test_manager.py index 390e223..9a5b929 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -2257,6 +2257,9 @@ def test_meetings_agenda_delete_time_period_exception(app, admin_user): assert resp.request.url.endswith('/manage/time-period-exceptions/%d/exception-list' % desk.pk) +@override_settings( + EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},} +) def test_exception_list(app, admin_user): agenda = Agenda.objects.create(label='Foo bar', kind='meetings') desk = Desk.objects.create(agenda=agenda, label='Desk A') @@ -2299,6 +2302,15 @@ def test_exception_list(app, admin_user): assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text + with CaptureQueriesContext(connection) as ctx: + app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk) + assert len(ctx.captured_queries) == 6 + + desk.import_timeperiod_exceptions_from_settings(enable=True) + with CaptureQueriesContext(connection) as ctx: + app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk) + assert len(ctx.captured_queries) == 6 + def test_agenda_import_time_period_exception_from_ics(app, admin_user): agenda = Agenda.objects.create(label='Example', kind='meetings') -- 2.20.1