From f268c9b88afc583d4320e409518f0b494515b189 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Fri, 2 Oct 2026 13:00:55 +0330 Subject: [PATCH] fix(events): prevent resuming unavailable registrations --- apps/events/api/views.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/events/api/views.py b/apps/events/api/views.py index 7459135..e1d4ef5 100644 --- a/apps/events/api/views.py +++ b/apps/events/api/views.py @@ -809,7 +809,7 @@ def _my_registration_checkout_fields(registration, now): checkout_state = "legacy_pending" elif registration.checkout_expires_at > now: checkout_state = "active" - can_resume = not bool(payment and payment.verification_manual_review_at) + can_resume = _can_resume_registration(registration, payment) else: checkout_state = "expired" elif registration.status == Registration.StatusChoices.CANCELLED: @@ -845,6 +845,17 @@ def _my_registration_checkout_fields(registration, now): } +def _can_resume_registration(registration, payment): + if payment and payment.verification_manual_review_at: + return False + event = registration.event + return bool( + event.status == Event.StatusChoices.PUBLISHED + and event.is_registration_open + and (event.capacity is None or event.current_attendees_count <= event.capacity) + ) + + @events_router.get("/my-registrations/paginated", response=PaginatedMyEventRegistrationsSchema, auth=jwt_auth) def my_registrations_paginated( request, @@ -962,7 +973,7 @@ def is_registered(request, event_id: int): checkout_state = "legacy_pending" elif registration.checkout_expires_at > now: checkout_state = "active" - can_resume = not bool(payment and payment.verification_manual_review_at) + can_resume = _can_resume_registration(registration, payment) can_cancel = True else: checkout_state = "expired" @@ -1174,7 +1185,7 @@ def registration_hub_status( state == "active_checkout" and registration and registration.status == Registration.StatusChoices.PENDING - and (payment is None or not payment.verification_manual_review_at) + and _can_resume_registration(registration, payment) ) can_cancel = bool( state == "active_checkout"