Projet

Général

Profil

0003-agendas-add-external-flag-on-exception-18904.patch

Valentin Deniaud, 02 avril 2020 16:15

Télécharger (7,36 ko)

Voir les différences:

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
chrono/agendas/migrations/0042_timeperiodexception_external.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-04-02 13:24
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('agendas', '0041_auto_20200330_1803'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='timeperiodexception',
17
            name='external',
18
            field=models.BooleanField(default=False, verbose_name='Exception comes from external source'),
19
        ),
20
    ]
chrono/agendas/models.py
974 974
                    label=_(label),
975 975
                    start_datetime=start_datetime,
976 976
                    end_datetime=end_datetime,
977
                    external=True,
977 978
                )
978 979
            self.enabled = True
979 980
            self.save()
......
992 993
    end_datetime = models.DateTimeField(_('Exception end time'))
993 994
    update_datetime = models.DateTimeField(auto_now=True)
994 995
    recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0)
996
    external = models.BooleanField(_('Exception comes from external source'), default=False)
995 997

  
996 998
    class Meta:
997 999
        ordering = ['start_datetime']
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" href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}">
76
                        <li><a rel="popup" {% if not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
77 77
                        {{ exception }}
78
                        {% if not exception.external %}
78 79
                        <a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>
80
                        {% endif %}
79 81
                    {% endfor %}
80 82
                    {% if not desk.are_all_exceptions_displayed %}
81 83
                    <li><a class="timeperiod-exception-all desk-{{ desk.pk }}" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-extract-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
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 %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
24
         {% if user_can_manage %}<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.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 %}
25 25
    </li>
26 26
    {% endfor %}
27 27
   </ul>
tests/test_manager.py
7 7
import re
8 8

  
9 9
from django.contrib.auth.models import User, Group
10
from django.urls import reverse
10 11
from django.utils.encoding import force_text
11 12
from django.utils.timezone import make_aware, now, localtime
12 13
from django.test import override_settings
......
1718 1719
    assert app.get('/manage/time-period-exceptions-source/%s/toggle' % source.pk, status=404)
1719 1720

  
1720 1721

  
1722
@override_settings(
1723
    EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
1724
)
1725
def test_meetings_agenda_time_period_exception_source_external(app, admin_user, freezer):
1726
    freezer.move_to('2020-01-01')
1727
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
1728
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1729
    MeetingType(agenda=agenda, label='Blah').save()
1730
    TimePeriod.objects.create(
1731
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1732
    )
1733
    new_year = desk.timeperiodexception_set.filter(label='New year').first()
1734
    remove_url = reverse('chrono-manager-time-period-exception-delete', kwargs={'pk': new_year.pk})
1735
    edit_url = reverse('chrono-manager-time-period-exception-edit', kwargs={'pk': new_year.pk})
1736

  
1737
    login(app)
1738
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1739
    resp = resp.click('Settings')
1740
    assert 'New year' in resp.text
1741
    assert not remove_url in resp.text and not edit_url in resp.text
1742

  
1743
    resp = resp.click('see all')
1744
    assert 'New year' in resp.text
1745
    assert not remove_url in resp.text and not edit_url in resp.text
1746

  
1747

  
1721 1748
def test_agenda_day_view(app, admin_user, manager_user, api_user):
1722 1749
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
1723 1750
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
1724
-