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 %} +
+ {% csrf_token %} + +

+ {% if cannot_delete %} + {% blocktrans %}This cannot be removed as there are bookings.{% endblocktrans %} + {% else %} + {% blocktrans %}Are you sure you want to delete this event?{% endblocktrans %} + {% endif %} +

+
+ + {% trans 'Cancel' %} +
+
+{% 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 @@
{% csrf_token %} + {{ form.as_p }}
- {% trans 'Cancel' %} + {% trans 'Cancel' %}
{% 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.