0004-manager-add-direct-links-from-event-view-to-event-op.patch
chrono/manager/templates/chrono/manager_confirm_event_delete.html | ||
---|---|---|
1 |
{% extends "chrono/manager_home.html" %} |
|
2 |
{% load i18n %} |
|
3 | ||
4 |
{% block appbar %} |
|
5 |
<h2>{{ view.model.get_verbose_name }}</h2> |
|
6 |
{% endblock %} |
|
7 | ||
8 |
{% block content %} |
|
9 |
<form method="post"> |
|
10 |
{% csrf_token %} |
|
11 |
<input type="hidden" name="next" value="{% firstof request.POST.next request.GET.next %}"> |
|
12 |
<p> |
|
13 |
{% if cannot_delete %} |
|
14 |
{% blocktrans %}This cannot be removed as there are bookings.{% endblocktrans %} |
|
15 |
{% else %} |
|
16 |
{% blocktrans %}Are you sure you want to delete this event?{% endblocktrans %} |
|
17 |
{% endif %} |
|
18 |
</p> |
|
19 |
<div class="buttons"> |
|
20 |
<button class="delete-button" {% if cannot_delete %}disabled="disabled"{% endif %}>{% trans 'Delete' %}</button> |
|
21 |
<a class="cancel" href="{{ view.get_success_url }}">{% trans 'Cancel' %}</a> |
|
22 |
</div> |
|
23 |
</form> |
|
24 |
{% endblock %} |
chrono/manager/templates/chrono/manager_event_detail.html | ||
---|---|---|
15 | 15 |
{% if object.label %}<h2>{{ object.label }} — {{object.start_datetime|date:"DATETIME_FORMAT"}}</h2> |
16 | 16 |
{% else %}<h2>{{ object.start_datetime|date:"DATETIME_FORMAT"}}</h2> |
17 | 17 |
{% endif %} |
18 |
<span class="actions"> |
|
19 |
{% if user_can_manage %} |
|
20 |
<a href="{% url 'chrono-manager-event-edit' pk=agenda.id event_pk=object.id %}">{% trans "Options" %}</a> |
|
21 |
{% endif %} |
|
22 |
</span> |
|
18 | 23 |
{% endblock %} |
19 | 24 | |
20 | 25 |
{% block content %} |
chrono/manager/templates/chrono/manager_event_form.html | ||
---|---|---|
17 | 17 |
{% if object.id %} |
18 | 18 |
<h2>{% trans "Edit Event" %}</h2> |
19 | 19 |
<span class="actions"> |
20 |
<a rel="popup" href="{% url 'chrono-manager-event-delete' pk=object.agenda.id event_pk=object.id %}">{% trans 'Delete' %}</a> |
|
20 |
<a rel="popup" href="{% url 'chrono-manager-event-delete' pk=object.agenda.id event_pk=object.id %}?next={{view.request.GET.next}}">{% trans 'Delete' %}</a>
|
|
21 | 21 |
</span> |
22 | 22 |
{% else %} |
23 | 23 |
<h2>{% trans "New Event" %}</h2> |
... | ... | |
28 | 28 | |
29 | 29 |
<form method="post" enctype="multipart/form-data"> |
30 | 30 |
{% csrf_token %} |
31 |
<input type="hidden" name="next" value="{% firstof request.POST.next request.GET.next %}"> |
|
31 | 32 |
{{ form.as_p }} |
32 | 33 |
<div class="buttons"> |
33 | 34 |
<button class="submit-button">{% trans "Save" %}</button> |
34 |
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
|
|
35 |
<a class="cancel" href="{{ view.get_success_url }}">{% trans 'Cancel' %}</a>
|
|
35 | 36 |
</div> |
36 | 37 |
</form> |
37 | 38 |
{% endblock %} |
chrono/manager/templates/chrono/manager_events_agenda_settings.html | ||
---|---|---|
22 | 22 |
{% elif event.waiting_list_places %} |
23 | 23 |
data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}" |
24 | 24 |
{% endif %} |
25 |
><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=agenda.id event_pk=event.id %}{% else %}#{% endif %}"> |
|
25 |
><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=agenda.id event_pk=event.id %}?next=settings{% else %}#{% endif %}">
|
|
26 | 26 |
{% if event.label %}{{event.label}} / {% endif %} |
27 | 27 |
{{ event.start_datetime }} |
28 | 28 |
{% if event.full %}/ <span class="full">{% trans "full" %}</span>{% endif %} |
... | ... | |
41 | 41 |
({% trans "out of bookable period" %}) |
42 | 42 |
{% endif %} |
43 | 43 |
</a> |
44 |
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=agenda.id event_pk=event.id %}">{% trans "remove" %}</a>{% endif %} |
|
44 |
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=agenda.id event_pk=event.id %}?next=settings">{% trans "remove" %}</a>{% endif %}
|
|
45 | 45 |
<span class="occupation-bar"></span> |
46 | 46 |
</li> |
47 | 47 |
{% endfor %} |
chrono/manager/views.py | ||
---|---|---|
690 | 690 | |
691 | 691 |
def get_context_data(self, **kwargs): |
692 | 692 |
context = super(EventDetailView, self).get_context_data(**kwargs) |
693 |
context['user_can_manage'] = self.agenda.can_be_managed(self.request.user) |
|
693 | 694 |
event = self.get_object() |
694 | 695 |
context['booked'] = event.booking_set.filter( |
695 | 696 |
cancellation_datetime__isnull=True, in_waiting_list=False |
... | ... | |
709 | 710 |
form_class = EventForm |
710 | 711 |
pk_url_kwarg = 'event_pk' |
711 | 712 | |
713 |
def get_success_url(self): |
|
714 |
if self.request.GET.get('next') == 'settings' or self.request.POST.get('next') == 'settings': |
|
715 |
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id}) |
|
716 |
return reverse('chrono-manager-event-view', kwargs={'pk': self.agenda.id, 'event_pk': self.object.id}) |
|
717 | ||
712 | 718 | |
713 | 719 |
event_edit = EventEditView.as_view() |
714 | 720 | |
715 | 721 | |
716 | 722 |
class EventDeleteView(ManagedAgendaMixin, DeleteView): |
717 |
template_name = 'chrono/manager_confirm_delete.html' |
|
723 |
template_name = 'chrono/manager_confirm_event_delete.html'
|
|
718 | 724 |
model = Event |
719 | 725 |
pk_url_kwarg = 'event_pk' |
720 | 726 | |
... | ... | |
733 | 739 |
raise PermissionDenied() |
734 | 740 |
return super(EventDeleteView, self).delete(request, *args, **kwargs) |
735 | 741 | |
742 |
def get_success_url(self): |
|
743 |
if self.request.GET.get('next') == 'settings' or self.request.POST.get('next') == 'settings': |
|
744 |
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id}) |
|
745 |
day = self.object.start_datetime |
|
746 |
return reverse( |
|
747 |
'chrono-manager-agenda-month-view', |
|
748 |
kwargs={'pk': self.agenda.id, 'year': day.year, 'month': day.month}, |
|
749 |
) |
|
750 | ||
736 | 751 | |
737 | 752 |
event_delete = EventDeleteView.as_view() |
738 | 753 |
tests/test_manager.py | ||
---|---|---|
519 | 519 |
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200) |
520 | 520 |
resp = resp.click(href='/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
521 | 521 |
resp = resp.click('Delete') |
522 |
assert 'Are you sure you want to delete this?' in resp.text |
|
522 |
assert 'Are you sure you want to delete this event?' in resp.text
|
|
523 | 523 | |
524 | 524 |
booking = Booking(event=event) |
525 | 525 |
booking.save() |
... | ... | |
533 | 533 |
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200) |
534 | 534 |
resp = resp.click(href='/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id)) |
535 | 535 |
resp = resp.click('Delete') |
536 |
assert 'Are you sure you want to delete this?' in resp.text |
|
536 |
assert 'Are you sure you want to delete this event?' in resp.text
|
|
537 | 537 | |
538 | 538 |
# suddenly the booking is no longer cancelled, but the admin clicks on the |
539 | 539 |
# delete button. |
... | ... | |
1883 | 1883 |
assert 'overbooked' in resp.text |
1884 | 1884 | |
1885 | 1885 | |
1886 |
def test_agenda_view_edit_event(app, manager_user): |
|
1887 |
test_agenda_view_event(app, manager_user) |
|
1888 |
agenda = Agenda.objects.first() |
|
1889 |
resp = app.get('/manage/agendas/%s/2019/12/' % agenda.id, status=200) |
|
1890 |
resp = resp.click('xyz') |
|
1891 |
assert 'Options' not in resp.text |
|
1892 | ||
1893 |
agenda.edit_role = manager_user.groups.all()[0] |
|
1894 |
agenda.save() |
|
1895 |
event_url = resp.request.url |
|
1896 |
resp = app.get(event_url) |
|
1897 |
assert 'Options' in resp.text |
|
1898 |
resp = resp.click('Options') |
|
1899 |
resp.form['start_datetime'] = agenda.event_set.first().start_datetime.strftime('%Y-%m-%d %H:%M') |
|
1900 |
resp = resp.form.submit(status=302).follow() |
|
1901 |
assert event_url == resp.request.url |
|
1902 | ||
1903 | ||
1886 | 1904 |
def test_import_agenda_as_manager(app, manager_user): |
1887 | 1905 |
# open /manage/ access to manager_user, and check agenda import is not |
1888 | 1906 |
# allowed. |
1889 |
- |