Projet

Général

Profil

0004-manager-add-opened-events-view-for-event-agenda-4445.patch

Lauréline Guérin, 09 juillet 2020 14:51

Télécharger (6,46 ko)

Voir les différences:

Subject: [PATCH 4/5] manager: add opened events view for event agenda (#44457)

 .../chrono/manager_agenda_opened_events.html  | 35 ++++++++++
 chrono/manager/urls.py                        |  5 ++
 chrono/manager/views.py                       | 20 ++++++
 tests/test_manager.py                         | 64 +++++++++++++++++++
 4 files changed, 124 insertions(+)
 create mode 100644 chrono/manager/templates/chrono/manager_agenda_opened_events.html
chrono/manager/templates/chrono/manager_agenda_opened_events.html
1
{% extends "chrono/manager_agenda_view.html" %}
2
{% load i18n %}
3

  
4
{% block breadcrumb %}
5
{{ block.super }}
6
<a href="{% url 'chrono-manager-agenda-opened-events-view' pk=agenda.pk %}">{% trans "Opened events" %}</a>
7
{% endblock %}
8

  
9
{% block extra-actions %}
10
<a href="{% url 'chrono-manager-agenda-month-redirect-view' pk=agenda.pk %}">{% trans 'Month view' %}</a>
11
{% endblock %}
12

  
13
{% block content %}
14
<div class="section">
15
<h3>{% trans "Opened events" %}</h3>
16
<div>
17
{% if opened_events %}
18
  {% for event in opened_events %}
19
    {% ifchanged event.start_datetime.month event.start_datetime.year %}
20
      <h4>{{ event.start_datetime|date:'YEAR_MONTH_FORMAT'|capfirst }}</h4>
21
      <ul class="objects-list single-links">
22
    {% endifchanged %}
23
    {% include 'chrono/manager_agenda_event_fragment.html' %}
24
    {% if forloop.last %}</ul>{% endif %}
25
  {% endfor %}
26
{% else %}
27
<div class="big-msg-info">
28
  {% blocktrans %}
29
  This month doesn't have any opened event configured.
30
  {% endblocktrans %}
31
</div>
32
{% endif %}
33
</div>
34
</div>
35
{% endblock %}
chrono/manager/urls.py
53 53
        views.agenda_day_view,
54 54
        name='chrono-manager-agenda-day-view',
55 55
    ),
56
    url(
57
        r'^agendas/(?P<pk>\d+)/events/opened/$',
58
        views.agenda_opened_events_view,
59
        name='chrono-manager-agenda-opened-events-view',
60
    ),
56 61
    url(r'^agendas/(?P<pk>\d+)/settings$', views.agenda_settings, name='chrono-manager-agenda-settings'),
57 62
    url(r'^agendas/(?P<pk>\d+)/edit$', views.agenda_edit, name='chrono-manager-agenda-edit'),
58 63
    url(r'^agendas/(?P<pk>\d+)/delete$', views.agenda_delete, name='chrono-manager-agenda-delete'),
chrono/manager/views.py
1019 1019
agenda_monthly_view = AgendaMonthView.as_view()
1020 1020

  
1021 1021

  
1022
class AgendaOpenedEventsView(ManagedAgendaMixin, DetailView):
1023
    model = Agenda
1024
    template_name = 'chrono/manager_agenda_opened_events.html'
1025

  
1026
    def set_agenda(self, **kwargs):
1027
        self.agenda = get_object_or_404(Agenda, pk=kwargs.get('pk'), kind='events')
1028

  
1029
    def get_object(self, **kwargs):
1030
        return self.agenda
1031

  
1032
    def get_context_data(self, **kwargs):
1033
        context = super().get_context_data(**kwargs)
1034
        context['user_can_manage'] = self.agenda.can_be_managed(self.request.user)
1035
        context['opened_events'] = Event.annotate_queryset(self.agenda.get_opened_events())
1036
        return context
1037

  
1038

  
1039
agenda_opened_events_view = AgendaOpenedEventsView.as_view()
1040

  
1041

  
1022 1042
class ManagedAgendaSubobjectMixin(object):
1023 1043
    agenda = None
1024 1044

  
tests/test_manager.py
2487 2487
    assert "This month doesn't have any event configured." in resp.text
2488 2488

  
2489 2489

  
2490
def test_agenda_opened_events_view(app, admin_user):
2491
    agenda = Agenda.objects.create(
2492
        label='Events', kind='events', minimal_booking_delay=2, maximal_booking_delay=5
2493
    )
2494
    today = datetime.date.today()
2495

  
2496
    login(app)
2497
    resp = app.get('/manage/agendas/%s/%s/%s/' % (agenda.pk, today.year, today.month))
2498
    assert 'Opened events view' in resp.text
2499

  
2500
    resp = app.get('/manage/agendas/%s/events/opened/' % agenda.pk)
2501
    assert 'Month view' in resp.text
2502
    assert "This month doesn't have any opened event configured." in resp.text
2503

  
2504
    # create some events
2505
    # past event
2506
    Event.objects.create(
2507
        agenda=agenda, label='event A', start_datetime=now() - datetime.timedelta(days=1), places=42
2508
    )
2509
    # too late
2510
    Event.objects.create(
2511
        agenda=agenda, label='event B', start_datetime=now() + datetime.timedelta(days=1), places=42
2512
    )
2513
    # too soon
2514
    Event.objects.create(
2515
        agenda=agenda, label='event C', start_datetime=now() + datetime.timedelta(days=6), places=42
2516
    )
2517
    # in range
2518
    Event.objects.create(
2519
        agenda=agenda, label='event D', start_datetime=now() + datetime.timedelta(days=3), places=42
2520
    )
2521
    # publication date in future
2522
    Event.objects.create(
2523
        agenda=agenda,
2524
        label='event E',
2525
        start_datetime=now() + datetime.timedelta(days=3),
2526
        publication_date=today + datetime.timedelta(days=1),
2527
        places=42,
2528
    )
2529
    # publication date in past
2530
    Event.objects.create(
2531
        agenda=agenda,
2532
        label='event F',
2533
        start_datetime=now() + datetime.timedelta(days=3),
2534
        publication_date=today - datetime.timedelta(days=1),
2535
        places=42,
2536
    )
2537
    resp = app.get('/manage/agendas/%s/events/opened/' % agenda.pk)
2538
    assert 'event A' not in resp.text
2539
    assert 'event B' not in resp.text
2540
    assert 'event C' not in resp.text
2541
    assert 'event D' in resp.text
2542
    assert 'event E' not in resp.text
2543
    assert 'event F' in resp.text
2544

  
2545
    # wrong kind
2546
    agenda.kind = 'meetings'
2547
    agenda.save()
2548
    resp = app.get('/manage/agendas/%s/events/opened/' % agenda.pk, status=404)
2549
    agenda.kind = 'virtual'
2550
    agenda.save()
2551
    resp = app.get('/manage/agendas/%s/events/opened/' % agenda.pk, status=404)
2552

  
2553

  
2490 2554
def test_agenda_month_view(app, admin_user, manager_user, api_user):
2491 2555
    agenda = Agenda.objects.create(label='Passeports', kind='meetings')
2492 2556
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
2493
-