manager: respect enable_check_for_future_events in partial bookings (#79642)
gitea/chrono/pipeline/head This commit looks good Details

This commit is contained in:
Valentin Deniaud 2023-07-12 11:34:53 +02:00
parent 0146309c4f
commit 0cc06d2047
3 changed files with 48 additions and 1 deletions

View File

@ -32,7 +32,7 @@
<section class="partial-booking--registrant">
{% spaceless %}
<h3 class="registrant--name">
{% if booking.kind == "booking" %}
{% if booking.kind == "booking" and allow_check %}
<a
rel="popup"
href="{% url 'chrono-manager-partial-booking-check' pk=agenda.pk booking_pk=booking.pk %}"

View File

@ -1608,6 +1608,10 @@ class AgendaDayView(EventChecksMixin, AgendaDateView, DayArchiveView):
except Event.DoesNotExist:
return
context['allow_check'] = bool(
self.agenda.enable_check_for_future_events
or localtime(event.start_datetime).date() <= localtime().date()
)
self.add_filters_context(context, event)
min_time = localtime(event.start_datetime).time()
@ -4363,6 +4367,13 @@ class PartialBookingCheckView(ViewableAgendaMixin, UpdateView):
pk_url_kwarg = 'booking_pk'
form_class = PartialBookingCheckForm
def get_queryset(self, **kwargs):
qs = super().get_queryset()
return qs.filter(
Q(event__start_datetime__date__lte=localtime().date())
| Q(event__agenda__enable_check_for_future_events=True),
)
def get_success_url(self):
date = self.object.event.start_datetime
return reverse(

View File

@ -222,6 +222,42 @@ def test_manager_partial_bookings_check(check_types, app, admin_user):
assert resp.pyquery('.registrant--bar span').text() == ''
def test_manager_partial_bookings_check_future_events(app, admin_user, freezer):
agenda = Agenda.objects.create(label='Foo bar', kind='events', partial_bookings=True)
start_datetime = make_aware(datetime.datetime(2023, 5, 2, 8, 0))
event = Event.objects.create(
label='Event', start_datetime=start_datetime, end_time=datetime.time(18, 00), places=10, agenda=agenda
)
booking = Booking.objects.create(
user_external_id='xxx',
user_first_name='Jane',
user_last_name='Doe',
start_time=datetime.time(11, 00),
end_time=datetime.time(13, 30),
event=event,
)
app = login(app)
day = start_datetime.date()
resp = app.get('/manage/agendas/%s/day/%d/%d/%d/' % (agenda.pk, day.year, day.month, day.day))
assert len(resp.pyquery('.registrant--name a')) == 1
app.get('/manage/agendas/%s/bookings/%s/check' % (agenda.pk, booking.pk), status=200)
freezer.move_to(start_datetime - datetime.timedelta(days=1))
resp = app.get('/manage/agendas/%s/day/%d/%d/%d/' % (agenda.pk, day.year, day.month, day.day))
assert len(resp.pyquery('.registrant--name a')) == 0
app.get('/manage/agendas/%s/bookings/%s/check' % (agenda.pk, booking.pk), status=404)
agenda.enable_check_for_future_events = True
agenda.save()
resp = app.get('/manage/agendas/%s/day/%d/%d/%d/' % (agenda.pk, day.year, day.month, day.day))
assert len(resp.pyquery('.registrant--name a')) == 1
app.get('/manage/agendas/%s/bookings/%s/check' % (agenda.pk, booking.pk), status=200)
@mock.patch('chrono.manager.forms.get_agenda_check_types')
def test_manager_partial_bookings_check_filters(check_types, app, admin_user):
check_types.return_value = [