manager: add detail view for events (#20279)
This commit is contained in:
parent
7ada884db3
commit
07e8f284ed
|
@ -0,0 +1,59 @@
|
|||
{% extends "chrono/manager_home.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page-title-extra-label %}
|
||||
- {% firstof agenda.label object.label %}
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumb %}
|
||||
{{ block.super }}
|
||||
<a href="{% url 'chrono-manager-agenda-month-view' pk=agenda.id year=object.start_datetime.year month=object.start_datetime.month %}">{{agenda.label}}</a>
|
||||
<a href="{% url 'chrono-manager-event-view' pk=agenda.id event_pk=object.id %}">{{object}}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block appbar %}
|
||||
{% if object.label %}<h2>{{ object.label }} — {{object.start_datetime|date:"DATETIME_FORMAT"}}</h2>
|
||||
{% else %}<h2>{{ object.start_datetime|date:"DATETIME_FORMAT"}}</h2>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if object.description %}
|
||||
<div class="section">
|
||||
<div><p>{{ object.description }}</p></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="section">
|
||||
<h3>{% trans "Bookings" %} ({{booked|length}}/{{object.places}})</h3>
|
||||
<div>
|
||||
|
||||
{% if event.booked_places > event.places %}
|
||||
<div class="errornotice"><p>{% trans "This event is overbooked." %}</p></div>
|
||||
{% endif %}
|
||||
|
||||
<ul class="objects-list single-links">
|
||||
{% for booking in booked %}
|
||||
<li><a {% if booking.backoffice_url %}href="{{ booking.backoffice_url }}"{% endif %}>{% if booking.user_name %}{{ booking.user_name }}{% else %}{% trans "Unknown" %}{% endif %},
|
||||
{{ booking.creation_datetime|date:"DATETIME_FORMAT" }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if object.waiting_list_places %}
|
||||
<div class="section">
|
||||
<h3>{% trans "Waiting List" %} ({{waiting|length}}/{{object.waiting_list_places}})</h3>
|
||||
<div>
|
||||
<ul class="objects-list single-links">
|
||||
{% for booking in waiting %}
|
||||
<li><a {% if booking.backoffice_url %}href="{{ booking.backoffice_url }}"{% endif %}>{% if booking.user_name %}{{ booking.user_name }}{% else %}{% trans "Unknown" %}{% endif %},
|
||||
{{ booking.creation_datetime|date:"DATETIME_FORMAT" }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -16,7 +16,7 @@
|
|||
{% elif event.waiting_list_places %}
|
||||
data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}"
|
||||
{% endif %}
|
||||
><a>
|
||||
><a href="{% url 'chrono-manager-event-view' pk=agenda.id event_pk=event.id %}">
|
||||
{% if event.label %}{{event.label}} / {% endif %}
|
||||
{{ event.start_datetime }}
|
||||
{% if event.full %}/ <span class="full">{% trans "full" %}</span>{% endif %}
|
||||
|
|
|
@ -43,6 +43,11 @@ urlpatterns = [
|
|||
views.agenda_import_events,
|
||||
name='chrono-manager-agenda-import-events',
|
||||
),
|
||||
url(
|
||||
r'^agendas/(?P<pk>\d+)/events/(?P<event_pk>\d+)/$',
|
||||
views.event_view,
|
||||
name='chrono-manager-event-view',
|
||||
),
|
||||
url(
|
||||
r'^agendas/(?P<pk>\d+)/events/(?P<event_pk>\d+)/edit$',
|
||||
views.event_edit,
|
||||
|
|
|
@ -693,6 +693,26 @@ class AgendaImportEventsView(ManagedAgendaMixin, FormView):
|
|||
agenda_import_events = AgendaImportEventsView.as_view()
|
||||
|
||||
|
||||
class EventDetailView(ViewableAgendaMixin, DetailView):
|
||||
template_name = 'chrono/manager_event_detail.html'
|
||||
model = Event
|
||||
pk_url_kwarg = 'event_pk'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(EventDetailView, self).get_context_data(**kwargs)
|
||||
event = self.get_object()
|
||||
context['booked'] = event.booking_set.filter(
|
||||
cancellation_datetime__isnull=True, in_waiting_list=False
|
||||
)
|
||||
context['waiting'] = event.booking_set.filter(
|
||||
cancellation_datetime__isnull=True, in_waiting_list=True
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
event_view = EventDetailView.as_view()
|
||||
|
||||
|
||||
class EventEditView(ManagedAgendaMixin, UpdateView):
|
||||
template_name = 'chrono/manager_event_form.html'
|
||||
model = Event
|
||||
|
|
|
@ -1903,6 +1903,36 @@ def test_agenda_month_view_dst_change(app, admin_user, manager_user, api_user):
|
|||
assert resp.text.count('height:33.0%;top:100.0%;') == 2
|
||||
|
||||
|
||||
def test_agenda_view_event(app, manager_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.view_role = manager_user.groups.all()[0]
|
||||
agenda.save()
|
||||
event = Event(
|
||||
label='xyz',
|
||||
start_datetime=make_aware(datetime.datetime(2019, 12, 22, 17, 0)),
|
||||
places=10,
|
||||
agenda=agenda,
|
||||
)
|
||||
event.save()
|
||||
for i in range(8):
|
||||
Booking(event=event).save()
|
||||
app = login(app, username='manager', password='manager')
|
||||
resp = app.get('/manage/agendas/%s/2019/12/' % agenda.id, status=200)
|
||||
resp = resp.click('xyz')
|
||||
assert 'Bookings (8/10)' in resp.text
|
||||
assert 'Waiting' not in resp.text
|
||||
assert 'overbooked' not in resp.text
|
||||
event.waiting_list_places = 5
|
||||
event.save()
|
||||
resp = app.get(resp.request.url)
|
||||
assert 'Waiting List (0/5)' in resp.text
|
||||
|
||||
event.places = 5
|
||||
event.save()
|
||||
resp = app.get(resp.request.url)
|
||||
assert 'overbooked' in resp.text
|
||||
|
||||
|
||||
def test_import_agenda_as_manager(app, manager_user):
|
||||
# open /manage/ access to manager_user, and check agenda import is not
|
||||
# allowed.
|
||||
|
|
Loading…
Reference in New Issue