Projet

Général

Profil

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

Valentin Deniaud, 31 août 2020 18:08

Télécharger (7,38 ko)

Voir les différences:

Subject: [PATCH 3/4] agendas: add external flag on exception (#18904)

 .../0058_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/0058_timeperiodexception_external.py
chrono/agendas/migrations/0058_timeperiodexception_external.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-08-31 14:36
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', '0057_auto_20200831_1634'),
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
1413 1413
                    label=_(label),
1414 1414
                    start_datetime=start_datetime,
1415 1415
                    end_datetime=end_datetime,
1416
                    external=True,
1416 1417
                )
1417 1418
            self.enabled = True
1418 1419
            self.save()
......
1431 1432
    end_datetime = models.DateTimeField(_('Exception end time'))
1432 1433
    update_datetime = models.DateTimeField(auto_now=True)
1433 1434
    recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0)
1435
    external = models.BooleanField(_('Exception comes from external source'), default=False)
1434 1436

  
1435 1437
    class Meta:
1436 1438
        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 upload" 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
13 13
from django.db import connection
14 14
from django.test import override_settings
15 15
from django.test.utils import CaptureQueriesContext
16
from django.urls import reverse
16 17
from django.utils.encoding import force_text
17 18
from django.utils.timezone import make_aware, now, localtime
18 19

  
......
2505 2506
    assert app.get('/manage/time-period-exceptions-source/%s/toggle' % source.pk, status=404)
2506 2507

  
2507 2508

  
2509
@override_settings(
2510
    EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
2511
)
2512
def test_meetings_agenda_time_period_exception_source_external(app, admin_user, freezer):
2513
    freezer.move_to('2020-01-01')
2514
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
2515
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
2516
    MeetingType(agenda=agenda, label='Blah').save()
2517
    TimePeriod.objects.create(
2518
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
2519
    )
2520
    new_year = desk.timeperiodexception_set.filter(label='New year').first()
2521
    remove_url = reverse('chrono-manager-time-period-exception-delete', kwargs={'pk': new_year.pk})
2522
    edit_url = reverse('chrono-manager-time-period-exception-edit', kwargs={'pk': new_year.pk})
2523

  
2524
    login(app)
2525
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
2526
    resp = resp.click('Settings')
2527
    assert 'New year' in resp.text
2528
    assert not remove_url in resp.text and not edit_url in resp.text
2529

  
2530
    resp = resp.click('see all')
2531
    assert 'New year' in resp.text
2532
    assert not remove_url in resp.text and not edit_url in resp.text
2533

  
2534

  
2508 2535
def test_agenda_day_view(app, admin_user, manager_user, api_user):
2509 2536
    agenda = Agenda.objects.create(label='New Example', kind='meetings')
2510 2537
    desk = Desk.objects.create(agenda=agenda, label='New Desk')
2511
-