fixup! manager: allow separate arrival/departure check for partial bookings (#80047)
gitea/chrono/pipeline/head This commit looks good
Details
gitea/chrono/pipeline/head This commit looks good
Details
This commit is contained in:
parent
28a0f3fa7d
commit
beccebf0b4
|
@ -119,7 +119,7 @@
|
|||
<a
|
||||
class="registrant--bar check {{ check.css_class }}"
|
||||
title="{% trans "Checked period" %}"
|
||||
style="left: {{ check.css_left }}%; width: {{ check.css_width }}%;"
|
||||
style="left: {{ check.css_left }}%;{% if check.css_width %} width: {{ check.css_width }}%;{% endif %}"
|
||||
{% if allow_check %}
|
||||
rel="popup"
|
||||
href="{% url 'chrono-manager-partial-booking-update-check' pk=agenda.pk check_pk=check.pk %}"
|
||||
|
|
|
@ -1670,8 +1670,8 @@ class AgendaDayView(EventChecksMixin, AgendaDateView, DayArchiveView):
|
|||
|
||||
if not check.start_time:
|
||||
check.css_class += ' end-only'
|
||||
check.css_left = booking.css_left
|
||||
check.css_width = get_time_ratio(check.end_time, booking.start_time)
|
||||
check.css_left = 0
|
||||
check.css_width = get_time_ratio(check.end_time, start_time)
|
||||
elif not check.end_time:
|
||||
check.css_class += ' start-only'
|
||||
check.css_left = get_time_ratio(check.start_time, start_time)
|
||||
|
|
|
@ -555,44 +555,75 @@ def test_manager_partial_bookings_multiple_checks(app, admin_user):
|
|||
assert resp.pyquery('.registrant--bar.check')[0].findall('time')[1].text == '12:00'
|
||||
|
||||
|
||||
def test_manager_partial_bookings_incomplete_check(app, admin_user):
|
||||
@pytest.mark.parametrize('subscription_only', (True, False))
|
||||
def test_manager_partial_bookings_incomplete_check(subscription_only, app, admin_user):
|
||||
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,
|
||||
)
|
||||
if subscription_only:
|
||||
Subscription.objects.create(
|
||||
agenda=agenda,
|
||||
user_external_id='xxx',
|
||||
user_first_name='Jane',
|
||||
user_last_name='Doe',
|
||||
date_start=event.start_datetime,
|
||||
date_end=event.start_datetime + datetime.timedelta(days=2),
|
||||
)
|
||||
else:
|
||||
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)
|
||||
today = start_datetime.date()
|
||||
resp = app.get('/manage/agendas/%s/day/%d/%d/%d/' % (agenda.pk, today.year, today.month, today.day))
|
||||
resp = resp.click('Booked period')
|
||||
|
||||
resp = resp.form.submit()
|
||||
assert 'Both arrival and departure cannot not be empty.' in resp.text
|
||||
if subscription_only:
|
||||
resp = resp.click('Jane Doe')
|
||||
else:
|
||||
resp = resp.click('Booked period')
|
||||
|
||||
resp.form['start_time'] = '11:01'
|
||||
resp.form['presence'] = 'True'
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
booking.refresh_from_db()
|
||||
booking = Booking.objects.get()
|
||||
assert booking.user_check.start_time == datetime.time(11, 1)
|
||||
assert booking.user_check.end_time is None
|
||||
assert booking.user_check.computed_start_time == datetime.time(11, 0)
|
||||
assert booking.user_check.computed_end_time is None
|
||||
|
||||
assert len(resp.pyquery('.registrant--bar')) == 2
|
||||
assert len(resp.pyquery('.registrant--bar.booking')) == 1
|
||||
assert len(resp.pyquery('.registrant--bar.check.present')) == 1
|
||||
assert resp.pyquery('.registrant--bar.check.present')[0].attrib['style'] == 'left: 30.9%;'
|
||||
assert resp.pyquery('.registrant--bar.check time').text() == '11:01'
|
||||
|
||||
resp = resp.click('Checked period')
|
||||
resp.form['start_time'] = ''
|
||||
resp.form['end_time'] = '13:15'
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_check.start_time is None
|
||||
assert booking.user_check.end_time == datetime.time(13, 15)
|
||||
assert booking.user_check.computed_start_time is None
|
||||
assert booking.user_check.computed_end_time == datetime.time(14, 0)
|
||||
|
||||
assert len(resp.pyquery('.registrant--bar.check.present')) == 1
|
||||
assert resp.pyquery('.registrant--bar.check.present')[0].attrib['style'] == 'left: 0%; width: 48.08%;'
|
||||
assert resp.pyquery('.registrant--bar.check time').text() == '13:15'
|
||||
|
||||
resp = resp.click('Checked period')
|
||||
resp.form['start_time'] = ''
|
||||
resp.form['end_time'] = ''
|
||||
resp = resp.form.submit()
|
||||
assert 'Both arrival and departure cannot not be empty.' in resp.text
|
||||
|
||||
|
||||
@mock.patch('chrono.manager.forms.get_agenda_check_types')
|
||||
def test_manager_partial_bookings_check_subscription(check_types, app, admin_user):
|
||||
|
|
Loading…
Reference in New Issue