diff --git a/chrono/manager/templates/chrono/manager_confirm_event_delete.html b/chrono/manager/templates/chrono/manager_confirm_event_delete.html
new file mode 100644
index 00000000..4e3af096
--- /dev/null
+++ b/chrono/manager/templates/chrono/manager_confirm_event_delete.html
@@ -0,0 +1,24 @@
+{% extends "chrono/manager_home.html" %}
+{% load i18n %}
+
+{% block appbar %}
+
{{ view.model.get_verbose_name }}
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_event_detail.html b/chrono/manager/templates/chrono/manager_event_detail.html
index 88048e74..f533e8a3 100644
--- a/chrono/manager/templates/chrono/manager_event_detail.html
+++ b/chrono/manager/templates/chrono/manager_event_detail.html
@@ -15,6 +15,11 @@
{% if object.label %}{{ object.label }} — {{object.start_datetime|date:"DATETIME_FORMAT"}}
{% else %}{{ object.start_datetime|date:"DATETIME_FORMAT"}}
{% endif %}
+
+{% if user_can_manage %}
+{% trans "Options" %}
+{% endif %}
+
{% endblock %}
{% block content %}
diff --git a/chrono/manager/templates/chrono/manager_event_form.html b/chrono/manager/templates/chrono/manager_event_form.html
index c0052767..1d749459 100644
--- a/chrono/manager/templates/chrono/manager_event_form.html
+++ b/chrono/manager/templates/chrono/manager_event_form.html
@@ -17,7 +17,7 @@
{% if object.id %}
{% trans "Edit Event" %}
-{% trans 'Delete' %}
+{% trans 'Delete' %}
{% else %}
{% trans "New Event" %}
@@ -28,10 +28,11 @@
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_events_agenda_settings.html b/chrono/manager/templates/chrono/manager_events_agenda_settings.html
index 7848d77f..0896c1dd 100644
--- a/chrono/manager/templates/chrono/manager_events_agenda_settings.html
+++ b/chrono/manager/templates/chrono/manager_events_agenda_settings.html
@@ -22,7 +22,7 @@
{% elif event.waiting_list_places %}
data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}"
{% endif %}
- >
+ >
{% if event.label %}{{event.label}} / {% endif %}
{{ event.start_datetime }}
{% if event.full %}/ {% trans "full" %}{% endif %}
@@ -41,7 +41,7 @@
({% trans "out of bookable period" %})
{% endif %}
- {% if user_can_manage %}{% trans "remove" %}{% endif %}
+ {% if user_can_manage %}{% trans "remove" %}{% endif %}
{% endfor %}
diff --git a/chrono/manager/views.py b/chrono/manager/views.py
index 30503fa9..42d47ab8 100644
--- a/chrono/manager/views.py
+++ b/chrono/manager/views.py
@@ -700,6 +700,7 @@ class EventDetailView(ViewableAgendaMixin, DetailView):
def get_context_data(self, **kwargs):
context = super(EventDetailView, self).get_context_data(**kwargs)
+ context['user_can_manage'] = self.agenda.can_be_managed(self.request.user)
event = self.get_object()
context['booked'] = event.booking_set.filter(
cancellation_datetime__isnull=True, in_waiting_list=False
@@ -719,12 +720,17 @@ class EventEditView(ManagedAgendaMixin, UpdateView):
form_class = EventForm
pk_url_kwarg = 'event_pk'
+ def get_success_url(self):
+ if self.request.GET.get('next') == 'settings' or self.request.POST.get('next') == 'settings':
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id})
+ return reverse('chrono-manager-event-view', kwargs={'pk': self.agenda.id, 'event_pk': self.object.id})
+
event_edit = EventEditView.as_view()
class EventDeleteView(ManagedAgendaMixin, DeleteView):
- template_name = 'chrono/manager_confirm_delete.html'
+ template_name = 'chrono/manager_confirm_event_delete.html'
model = Event
pk_url_kwarg = 'event_pk'
@@ -743,6 +749,15 @@ class EventDeleteView(ManagedAgendaMixin, DeleteView):
raise PermissionDenied()
return super(EventDeleteView, self).delete(request, *args, **kwargs)
+ def get_success_url(self):
+ if self.request.GET.get('next') == 'settings' or self.request.POST.get('next') == 'settings':
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id})
+ day = self.object.start_datetime
+ return reverse(
+ 'chrono-manager-agenda-month-view',
+ kwargs={'pk': self.agenda.id, 'year': day.year, 'month': day.month},
+ )
+
event_delete = EventDeleteView.as_view()
diff --git a/tests/test_manager.py b/tests/test_manager.py
index da1083bc..04e135b6 100644
--- a/tests/test_manager.py
+++ b/tests/test_manager.py
@@ -519,7 +519,7 @@ def test_delete_busy_event(app, admin_user):
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href='/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
resp = resp.click('Delete')
- assert 'Are you sure you want to delete this?' in resp.text
+ assert 'Are you sure you want to delete this event?' in resp.text
booking = Booking(event=event)
booking.save()
@@ -533,7 +533,7 @@ def test_delete_busy_event(app, admin_user):
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href='/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
resp = resp.click('Delete')
- assert 'Are you sure you want to delete this?' in resp.text
+ assert 'Are you sure you want to delete this event?' in resp.text
# suddenly the booking is no longer cancelled, but the admin clicks on the
# delete button.
@@ -1933,6 +1933,24 @@ def test_agenda_view_event(app, manager_user):
assert 'overbooked' in resp.text
+def test_agenda_view_edit_event(app, manager_user):
+ test_agenda_view_event(app, manager_user)
+ agenda = Agenda.objects.first()
+ resp = app.get('/manage/agendas/%s/2019/12/' % agenda.id, status=200)
+ resp = resp.click('xyz')
+ assert 'Options' not in resp.text
+
+ agenda.edit_role = manager_user.groups.all()[0]
+ agenda.save()
+ event_url = resp.request.url
+ resp = app.get(event_url)
+ assert 'Options' in resp.text
+ resp = resp.click('Options')
+ resp.form['start_datetime'] = agenda.event_set.first().start_datetime.strftime('%Y-%m-%d %H:%M')
+ resp = resp.form.submit(status=302).follow()
+ assert event_url == resp.request.url
+
+
def test_import_agenda_as_manager(app, manager_user):
# open /manage/ access to manager_user, and check agenda import is not
# allowed.