manager: hide empty check type field for partial bookings (#80048)
gitea/chrono/pipeline/head This commit looks good
Details
gitea/chrono/pipeline/head This commit looks good
Details
This commit is contained in:
parent
a70045ea5b
commit
c1dd25d2c7
|
@ -604,23 +604,32 @@ class PartialBookingCheckForm(forms.ModelForm):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.check_types = get_agenda_check_types(self.instance.event.agenda)
|
||||
self.fields['presence_check_type'].choices = [(None, '---------')] + [
|
||||
(ct.slug, ct.label) for ct in self.check_types if ct.kind == 'presence'
|
||||
]
|
||||
self.fields['presence_check_type'].initial = self.instance.user_check_type_slug
|
||||
self.fields['absence_check_type'].choices = [(None, '---------')] + [
|
||||
(ct.slug, ct.label) for ct in self.check_types if ct.kind == 'absence'
|
||||
]
|
||||
self.fields['absence_check_type'].initial = self.instance.user_check_type_slug
|
||||
absence_check_types = [(ct.slug, ct.label) for ct in self.check_types if ct.kind == 'absence']
|
||||
presence_check_types = [(ct.slug, ct.label) for ct in self.check_types if ct.kind == 'presence']
|
||||
|
||||
if presence_check_types:
|
||||
self.fields['presence_check_type'].choices = [(None, '---------')] + presence_check_types
|
||||
self.fields['presence_check_type'].initial = self.instance.user_check_type_slug
|
||||
else:
|
||||
del self.fields['presence_check_type']
|
||||
|
||||
if absence_check_types:
|
||||
self.fields['absence_check_type'].choices = [(None, '---------')] + absence_check_types
|
||||
self.fields['absence_check_type'].initial = self.instance.user_check_type_slug
|
||||
else:
|
||||
del self.fields['absence_check_type']
|
||||
|
||||
def clean(self):
|
||||
if 'user_was_present' in self.cleaned_data:
|
||||
if self.cleaned_data['user_was_present'] is not None:
|
||||
kind = 'presence' if self.cleaned_data['user_was_present'] else 'absence'
|
||||
self.check_type_slug = self.cleaned_data[f'{kind}_check_type']
|
||||
self.check_type_label = dict(self.fields[f'{kind}_check_type'].choices).get(self.check_type_slug)
|
||||
if f'{kind}_check_type' in self.cleaned_data:
|
||||
self.check_type_slug = self.cleaned_data[f'{kind}_check_type']
|
||||
self.check_type_label = dict(self.fields[f'{kind}_check_type'].choices).get(
|
||||
self.check_type_slug
|
||||
)
|
||||
|
||||
def save(self):
|
||||
if 'user_was_present' in self.cleaned_data:
|
||||
if hasattr(self, 'check_type_slug'):
|
||||
self.instance.user_check_type_slug = self.check_type_slug
|
||||
self.instance.user_check_type_label = self.check_type_label
|
||||
return super().save()
|
||||
|
|
|
@ -153,11 +153,7 @@ def test_manager_partial_bookings_day_view_24_hours(app, admin_user, freezer):
|
|||
|
||||
@mock.patch('chrono.manager.forms.get_agenda_check_types')
|
||||
def test_manager_partial_bookings_check(check_types, app, admin_user):
|
||||
check_types.return_value = [
|
||||
CheckType(slug='foo-reason', label='Foo reason', kind='absence'),
|
||||
CheckType(slug='bar-reason', label='Bar reason', kind='presence'),
|
||||
CheckType(slug='baz-reason', label='Baz reason', kind='presence'),
|
||||
]
|
||||
check_types.return_value = []
|
||||
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(
|
||||
|
@ -181,6 +177,28 @@ def test_manager_partial_bookings_check(check_types, app, admin_user):
|
|||
assert resp.pyquery('.registrant--bar time')[1].text == '13:30'
|
||||
assert resp.pyquery('.registrant--bar')[0].attrib['style'] == 'left: 30.77%; width: 19.23%;'
|
||||
|
||||
resp = resp.click('Jane Doe')
|
||||
assert 'presence_check_type' not in resp.form.fields
|
||||
assert 'absence_check_type' not in resp.form.fields
|
||||
|
||||
resp.form['user_check_start_time'] = '11:01'
|
||||
resp.form['user_check_end_time'] = '13:15'
|
||||
resp.form['user_was_present'] = 'True'
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
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 time')[0].text == '11:01'
|
||||
assert resp.pyquery('.registrant--bar.check time')[1].text == '13:15'
|
||||
assert resp.pyquery('.registrant--bar.check')[0].attrib['style'] == 'left: 30.9%; width: 17.18%;'
|
||||
assert resp.pyquery('.registrant--bar span').text() == ''
|
||||
|
||||
check_types.return_value = [
|
||||
CheckType(slug='foo-reason', label='Foo reason', kind='absence'),
|
||||
CheckType(slug='bar-reason', label='Bar reason', kind='presence'),
|
||||
CheckType(slug='baz-reason', label='Baz reason', kind='presence'),
|
||||
]
|
||||
resp = resp.click('Jane Doe')
|
||||
assert resp.form['presence_check_type'].options == [
|
||||
('', True, '---------'),
|
||||
|
@ -191,10 +209,6 @@ def test_manager_partial_bookings_check(check_types, app, admin_user):
|
|||
('', True, '---------'),
|
||||
('foo-reason', False, 'Foo reason'),
|
||||
]
|
||||
|
||||
resp.form['user_check_start_time'] = '11:01'
|
||||
resp.form['user_check_end_time'] = '13:15'
|
||||
resp.form['user_was_present'] = 'True'
|
||||
resp.form['presence_check_type'] = 'bar-reason'
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
|
|
Loading…
Reference in New Issue