api: hide check fields for bookings of meetings agendas (#69169) #6

Merged
lguerin merged 2 commits from wip/69169-api-check-fields-for-meetings into main 2022-11-16 11:20:25 +01:00
4 changed files with 66 additions and 27 deletions

View File

@ -230,17 +230,21 @@ class BookingSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['user_absence_reason'] = (
self.instance.user_check_type_slug if self.instance.user_was_present is False else None
)
ret['user_presence_reason'] = (
self.instance.user_check_type_slug if self.instance.user_was_present is True else None
)
if self.instance.event.agenda.kind != 'events':
ret['desk'] = {
'slug': self.instance.event.desk.slug,
'label': self.instance.event.desk.label,
}
ret.pop('user_was_present', None)
ret.pop('user_absence_reason', None)
ret.pop('user_presence_reason', None)
else:
ret['user_absence_reason'] = (
self.instance.user_check_type_slug if self.instance.user_was_present is False else None
)
ret['user_presence_reason'] = (
self.instance.user_check_type_slug if self.instance.user_was_present is True else None
)
return ret
def _validate_check_type(self, kind, value):

View File

@ -2538,6 +2538,13 @@ class BookingAPI(APIView):
if not serializer.is_valid():
raise APIErrorBadRequest(N_('invalid payload'), errors=serializer.errors, err=4)
if self.booking.event.agenda.kind != 'events' and (
'user_was_present' in request.data
or 'user_absence_reason' in request.data
or 'user_presence_reason' in request.data
):
raise APIErrorBadRequest(N_('can not set check fields for non events agenda'), err=7)
if (
self.booking.event.checked
and self.booking.event.agenda.disable_check_update

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: chrono 0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-31 16:43+0000\n"
"PO-Revision-Date: 2022-11-09 10:19+0100\n"
"POT-Creation-Date: 2022-11-15 14:09+0000\n"
"PO-Revision-Date: 2022-11-15 15:10+0100\n"
"Last-Translator: Frederic Peters <fpeters@entrouvert.com>\n"
"Language: French\n"
"MIME-Version: 1.0\n"
@ -1294,15 +1294,6 @@ msgctxt "categories"
msgid "All"
msgstr "Toutes"
#: api/views.py
msgctxt "agendas"
msgid "All"
msgstr "Tous"
#: api/views.py
msgid "Presence/Absence"
msgstr "Présence/Absence"
#: api/views.py
msgid "Bookings Count"
msgstr "Nombre de réservations"
@ -1311,13 +1302,27 @@ msgstr "Nombre de réservations"
msgid "Interval"
msgstr "Intervalle"
#: api/views.py
msgid "Category should now be selected using the Agenda field below."
msgstr "La catégorie doit maintenant être sélectionnée en utilisant le champ Agenda."
#: api/views.py
msgid "Agenda"
msgstr "Agenda"
#: api/views.py manager/forms.py
msgid "Group by"
msgstr "Grouper par"
#: api/views.py
msgctxt "agendas"
msgid "All"
msgstr "Tous"
#: api/views.py
#, python-format
msgid "All agendas of category %s"
msgstr "Tous les agendas de la catégorie %s"
#: api/views.py manager/templates/chrono/manager_home.html
msgid "Misc"
msgstr "Divers"
#: api/views.py
msgid "invalid statistics filters"
@ -1339,6 +1344,14 @@ msgstr "Absent"
msgid "None"
msgstr "Aucun"
#: api/views.py
msgid "Presence/Absence"
msgstr "Présence/Absence"
#: api/views.py manager/forms.py
msgid "Group by"
msgstr "Grouper par"
#: manager/forms.py
msgid "Desk 1"
msgstr "Guichet 1"
@ -2629,10 +2642,6 @@ msgstr ""
 Nouveau » dans le coin supérieur droit de la page pour en ajouter un "
"premier."
#: manager/templates/chrono/manager_home.html
msgid "Misc"
msgstr "Divers"
#: manager/templates/chrono/manager_home.html
msgid ""
"This site doesn't have any agenda yet. Click on the \"New\" button in the "

View File

@ -154,9 +154,6 @@ def test_bookings_api(app, user):
'user_last_name': '',
'user_email': '',
'user_phone_number': '',
'user_was_present': None,
'user_absence_reason': None,
'user_presence_reason': None,
'use_color_for': None,
'extra_data': None,
'cancellation_datetime': None,
@ -630,6 +627,12 @@ def test_booking_patch_api_present(app, user, flag):
resp = app.patch_json('/api/booking/%s/' % booking.pk)
assert resp.json['err'] == 0
agenda.kind = 'meetings'
agenda.save()
resp = app.patch_json('/api/booking/%s/' % booking.pk, params={'user_was_present': flag}, status=400)
assert resp.json['err'] == 7
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
@mock.patch('chrono.api.serializers.get_agenda_check_types')
def test_booking_patch_api_absence_reason(check_types, app, user):
@ -739,6 +742,14 @@ def test_booking_patch_api_absence_reason(check_types, app, user):
resp = app.patch_json('/api/booking/%s/' % booking.pk)
assert resp.json['err'] == 0
agenda.kind = 'meetings'
agenda.save()
resp = app.patch_json(
'/api/booking/%s/' % booking.pk, params={'user_absence_reason': 'foo-bar'}, status=400
)
assert resp.json['err'] == 7
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
@mock.patch('chrono.api.serializers.get_agenda_check_types')
def test_booking_patch_api_presence_reason(check_types, app, user):
@ -848,6 +859,14 @@ def test_booking_patch_api_presence_reason(check_types, app, user):
resp = app.patch_json('/api/booking/%s/' % booking.pk)
assert resp.json['err'] == 0
agenda.kind = 'meetings'
agenda.save()
resp = app.patch_json(
'/api/booking/%s/' % booking.pk, params={'user_presence_reason': 'foo-bar'}, status=400
)
assert resp.json['err'] == 7
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
def test_booking_patch_api_both_reasons(app, user):
agenda = Agenda.objects.create(kind='events')