Projet

Général

Profil

0001-agendas-rename-flag-on-exception-sourced-from-settin.patch

Valentin Deniaud, 27 octobre 2020 11:39

Télécharger (7,98 ko)

Voir les différences:

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
chrono/agendas/migrations/0068_remove_timeperiodexception_external.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-10-27 09:32
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('agendas', '0067_auto_20201021_1746'),
12
    ]
13

  
14
    operations = [
15
        migrations.RemoveField(model_name='timeperiodexception', name='external',),
16
    ]
chrono/agendas/models.py
1479 1479
                    label=label,
1480 1480
                    start_datetime=start_datetime,
1481 1481
                    end_datetime=end_datetime,
1482
                    external=True,
1483 1482
                )
1484 1483
            self.enabled = True
1485 1484
            self.save()
......
1553 1552
    end_datetime = models.DateTimeField(_('Exception end time'))
1554 1553
    update_datetime = models.DateTimeField(auto_now=True)
1555 1554
    recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0)
1556
    external = models.BooleanField(_('Exception comes from external source'), default=False)
1555

  
1556
    @property
1557
    def from_settings(self):
1558
        return self.source and self.source.settings_slug
1557 1559

  
1558 1560
    class Meta:
1559 1561
        ordering = ['start_datetime']
......
1583 1585
                )
1584 1586

  
1585 1587
        if self.label:
1586
            label = _(self.label) if self.external else self.label
1588
            label = _(self.label) if self.from_settings else self.label
1587 1589
            exc_repr = u'%s (%s)' % (label, exc_repr)
1588 1590

  
1589 1591
        return exc_repr
chrono/manager/templates/chrono/manager_meetings_agenda_settings.html
73 73
                {% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
74 74
                <li><a><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon settings" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Manage exception sources' %}">{% trans 'manage exceptions' %}</a></li>
75 75
                {% for exception in desk.get_exceptions_within_two_weeks %}
76
                     <li><a rel="popup" {% if not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
76
                     <li><a rel="popup" {% if not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
77 77
                    {{ exception }}
78
                    {% if not exception.external %}
78
                    {% if not exception.from_settings%}
79 79
                    <a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>
80 80
                    {% endif %}
81 81
                {% endfor %}
chrono/manager/templates/chrono/manager_time_period_exception_list.html
20 20
    <ul class="objects-list single-links">
21 21
    {% for exception in object_list %}
22 22
     <li>
23
         <a {% if user_can_manage and not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
24
         {% if user_can_manage and not exception.external %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}{% if not page_obj %}?from_popup{% endif %}">{% trans "remove" %}</a>{% endif %}
23
         <a {% if user_can_manage and not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
24
         {% if user_can_manage and not exception.from_settings%}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}{% if not page_obj %}?from_popup{% endif %}">{% trans "remove" %}</a>{% endif %}
25 25
    </li>
26 26
    {% endfor %}
27 27
   </ul>
chrono/manager/views.py
1937 1937
    paginate_by = 20
1938 1938

  
1939 1939
    def get_queryset(self):
1940
        return self.model.objects.filter(desk=self.desk, end_datetime__gte=now())
1940
        return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()).select_related('source')
1941 1941

  
1942 1942
    def get_context_data(self, **kwargs):
1943 1943
        context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
......
1976 1976
        return success_url
1977 1977

  
1978 1978
    def get_queryset(self):
1979
        return super().get_queryset().filter(external=False)
1979
        return super().get_queryset().filter(source__settings_slug__isnull=True)
1980 1980

  
1981 1981

  
1982 1982
time_period_exception_delete = TimePeriodExceptionDeleteView.as_view()
tests/test_manager.py
2257 2257
    assert resp.request.url.endswith('/manage/time-period-exceptions/%d/exception-list' % desk.pk)
2258 2258

  
2259 2259

  
2260
@override_settings(
2261
    EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
2262
)
2260 2263
def test_exception_list(app, admin_user):
2261 2264
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
2262 2265
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
......
2299 2302
    assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text
2300 2303
    assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text
2301 2304

  
2305
    with CaptureQueriesContext(connection) as ctx:
2306
        app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk)
2307
        assert len(ctx.captured_queries) == 6
2308

  
2309
    desk.import_timeperiod_exceptions_from_settings(enable=True)
2310
    with CaptureQueriesContext(connection) as ctx:
2311
        app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk)
2312
        assert len(ctx.captured_queries) == 6
2313

  
2302 2314

  
2303 2315
def test_agenda_import_time_period_exception_from_ics(app, admin_user):
2304 2316
    agenda = Agenda.objects.create(label='Example', kind='meetings')
2305
-