0004-manager-add-opened-events-view-for-event-agenda-4445.patch
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 |
- |