From fe54a42fc7bbd4e57a3fcdc6f712ad5f13defa08 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 4 Jun 2024 21:53:30 +0200 Subject: [PATCH] Web checkin: Render special cases of pending state in search (Z#23154934) (#4193) --- src/pretix/api/serializers/order.py | 5 ++++- .../webcheckin/components/searchresult-item.vue | 2 ++ .../webcheckin/static/pretixplugins/webcheckin/main.js | 2 ++ .../static/pretixplugins/webcheckin/scss/main.scss | 4 ++-- src/tests/api/test_checkin.py | 6 ++++++ src/tests/api/test_checkinrpc.py | 2 ++ 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 5c98c908be..43071a111e 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -564,6 +564,8 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer): attendee_name = AttendeeNameField(source='*') attendee_name_parts = AttendeeNamePartsField(source='*') order__status = serializers.SlugRelatedField(read_only=True, slug_field='status', source='order') + order__valid_if_pending = serializers.SlugRelatedField(read_only=True, slug_field='valid_if_pending', source='order') + order__require_approval = serializers.SlugRelatedField(read_only=True, slug_field='require_approval', source='order') class Meta: model = OrderPosition @@ -571,7 +573,8 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer): 'company', 'street', 'zipcode', 'city', 'country', 'state', 'attendee_email', 'voucher', 'tax_rate', 'tax_value', 'secret', 'addon_to', 'subevent', 'checkins', 'downloads', 'answers', 'tax_rule', 'pseudonymization_id', 'pdf_data', 'seat', 'require_attention', - 'order__status', 'valid_from', 'valid_until', 'blocked') + 'order__status', 'order__valid_if_pending', 'order__require_approval', 'valid_from', 'valid_until', + 'blocked') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/components/searchresult-item.vue b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/components/searchresult-item.vue index d05ad6f55c..0cb384187d 100644 --- a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/components/searchresult-item.vue +++ b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/components/searchresult-item.vue @@ -21,6 +21,8 @@ export default { computed: { status() { if (this.position.checkins.length) return 'redeemed'; + if (this.position.order__status === 'n' && this.position.order__valid_if_pending) return 'pending_valid'; + if (this.position.order__status === 'n' && this.position.order__require_approval) return 'require_approval'; return this.position.order__status }, itemvar() { diff --git a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js index 6af874f9b7..2e99c4696f 100644 --- a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js +++ b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js @@ -43,6 +43,8 @@ window.vapp = new Vue({ 'status.n': gettext('Unpaid'), 'status.c': gettext('Canceled'), 'status.e': gettext('Canceled'), + 'status.pending_valid': gettext('Confirmed'), + 'status.require_approval': gettext('Approval pending'), 'status.redeemed': gettext('Redeemed'), 'modal.cancel': gettext('Cancel'), 'modal.continue': gettext('Continue'), diff --git a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/scss/main.scss b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/scss/main.scss index aa2ba73fb7..7697d02996 100644 --- a/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/scss/main.scss +++ b/src/pretix/plugins/webcheckin/static/pretixplugins/webcheckin/scss/main.scss @@ -74,10 +74,10 @@ a.searchresult { align-items: center; font-size: 140%; - &.status-p { + &.status-p, &.status-pending_valid { background: $brand-success; } - &.status-c, &.status-e, &.status-n { + &.status-c, &.status-e, &.status-n, &.status-require_approval { background: $brand-danger; } &.status-redeemed { diff --git a/src/tests/api/test_checkin.py b/src/tests/api/test_checkin.py index 1a4bbff59d..7965e0808b 100644 --- a/src/tests/api/test_checkin.py +++ b/src/tests/api/test_checkin.py @@ -105,6 +105,8 @@ TEST_ORDERPOSITION1_RES = { "id": 1, "require_attention": False, "order__status": "p", + "order__require_approval": False, + "order__valid_if_pending": False, "order": "FOO", "positionid": 1, "item": 1, @@ -140,6 +142,8 @@ TEST_ORDERPOSITION2_RES = { "id": 2, "require_attention": False, "order__status": "p", + "order__require_approval": False, + "order__valid_if_pending": False, "order": "FOO", "positionid": 2, "item": 1, @@ -175,6 +179,8 @@ TEST_ORDERPOSITION3_RES = { "id": 3, "require_attention": False, "order__status": "p", + "order__require_approval": False, + "order__valid_if_pending": False, "order": "FOO", "positionid": 3, "item": 1, diff --git a/src/tests/api/test_checkinrpc.py b/src/tests/api/test_checkinrpc.py index 4e287bd8f5..f1ea62c37c 100644 --- a/src/tests/api/test_checkinrpc.py +++ b/src/tests/api/test_checkinrpc.py @@ -144,6 +144,8 @@ TEST_ORDERPOSITION1_RES = { "id": 1, "require_attention": False, "order__status": "p", + "order__require_approval": False, + "order__valid_if_pending": False, "order": "FOO", "positionid": 1, "item": 1,