manager: partial bookings, events redirect to day view (#80982)
gitea/chrono/pipeline/head This commit looks good Details

This commit is contained in:
Lauréline Guérin 2023-09-07 15:16:23 +02:00
parent c8d71aa997
commit 93081c6e46
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 32 additions and 1 deletions

View File

@ -2697,6 +2697,8 @@ class EventDetailView(ViewableAgendaMixin, DetailView):
def dispatch(self, request, *args, **kwargs):
if self.get_object().recurrence_days:
raise Http404('this view makes no sense for recurring events')
if self.get_object().agenda.partial_bookings:
raise Http404('this view makes no sense for partial bookings')
return super().dispatch(request, *args, **kwargs)
def get_template_names(self):
@ -2725,8 +2727,19 @@ event_view = EventDetailView.as_view()
class EventDetailRedirectView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
agenda = get_object_or_404(Agenda, slug=kwargs['slug'])
agenda = get_object_or_404(Agenda, slug=kwargs['slug'], kind='events')
event = get_object_or_404(Event, slug=kwargs['event_slug'], agenda=agenda)
if agenda.partial_bookings:
day = localtime(event.start_datetime)
return reverse(
'chrono-manager-agenda-day-view',
kwargs={
'pk': agenda.pk,
'year': day.year,
'month': day.strftime('%m'),
'day': day.strftime('%d'),
},
)
return reverse('chrono-manager-event-view', kwargs={'pk': agenda.pk, 'event_pk': event.pk})
@ -2744,6 +2757,7 @@ class EventEditView(ManagedAgendaMixin, UpdateView):
self.request.GET.get('next') == 'settings'
or self.request.POST.get('next') == 'settings'
or self.object.recurrence_days
or self.object.agenda.partial_bookings
):
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})
@ -2796,6 +2810,7 @@ class EventChecksView(ViewableAgendaMixin, EventChecksMixin, DetailView):
Agenda,
pk=kwargs.get('pk'),
kind='events',
partial_bookings=False,
)
def get_queryset(self):

View File

@ -1263,11 +1263,19 @@ def test_event_detail_redirect(app, admin_user):
waiting_list_places=2,
agenda=agenda,
)
day = localtime(event.start_datetime)
login(app)
resp = app.get('/manage/agendas/%s/events/%s/' % (agenda.slug, event.slug), status=302)
assert resp.location.endswith('/manage/agendas/%s/events/%s/' % (agenda.pk, event.pk))
agenda.partial_bookings = True
agenda.save()
resp = app.get('/manage/agendas/%s/events/%s/' % (agenda.slug, event.slug), status=302)
assert resp.location.endswith(
'/manage/agendas/%s/day/%d/%02d/%02d/' % (agenda.pk, day.year, day.month, day.day)
)
def test_event_cancellation(app, admin_user):
agenda = Agenda.objects.create(label='Events', kind='events')
@ -1734,6 +1742,14 @@ def test_event_check(app, admin_user):
assert '/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk) not in resp
app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), status=404)
# partial bookings
event.cancellation_datetime = None
event.save()
agenda.partial_bookings = True
agenda.save()
app.get('/manage/agendas/%s/events/%s/' % (agenda.pk, event.pk), status=404)
app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), status=404)
def test_event_checked(app, admin_user):
agenda = Agenda.objects.create(label='Events', kind='events', booking_check_filters='foo,bar')