Commit 9a3d2c0d authored by Mahmoud Aglan's avatar Mahmoud Aglan

fix(sports): registration wizard resumes existing + marks player fee paid

Two fixes:
1. handleRegistrationFormPaid now also sets registration_fee_paid=1 on
   sa_players, so next time the system knows they already paid.
2. lookupPlayer checks for existing in-progress/completed registration
   and redirects to it instead of creating a duplicate. This means a
   returning player who already completed all steps goes back to step 4
   (their finished registration), not a new step 1.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent dff9df33
...@@ -82,6 +82,33 @@ class RegistrationWizardController extends Controller ...@@ -82,6 +82,33 @@ class RegistrationWizardController extends Controller
return $this->json(['success' => false, 'error' => 'أدخل رقم العضوية أو الرقم القومي أو الاسم']); return $this->json(['success' => false, 'error' => 'أدخل رقم العضوية أو الرقم القومي أو الاسم']);
} }
$db = App::getInstance()->db();
$existingReg = null;
if ($nationalId !== '') {
$existingReg = $db->selectOne(
"SELECT r.id FROM sa_registrations r
INNER JOIN sa_players p ON p.id = r.player_id
WHERE p.national_id = ? AND r.status IN ('in_progress','completed','assessed') AND p.is_archived = 0
ORDER BY r.id DESC LIMIT 1",
[$nationalId]
);
}
if (!$existingReg && $memberId > 0) {
$existingReg = $db->selectOne(
"SELECT r.id FROM sa_registrations r
INNER JOIN sa_players p ON p.id = r.player_id
WHERE p.member_id = ? AND r.status IN ('in_progress','completed','assessed') AND p.is_archived = 0
ORDER BY r.id DESC LIMIT 1",
[$memberId]
);
}
if ($existingReg) {
return $this->json([
'success' => true,
'redirect' => '/sa/registration/' . (int) $existingReg['id'],
]);
}
$result = RegistrationWizardService::startRegistration([ $result = RegistrationWizardService::startRegistration([
'national_id' => $nationalId, 'national_id' => $nationalId,
'player_type' => $playerType, 'player_type' => $playerType,
......
...@@ -113,6 +113,17 @@ final class SaEventListenerService ...@@ -113,6 +113,17 @@ final class SaEventListenerService
'form_payment_status' => SaConstants::PAYMENT_PAID, 'form_payment_status' => SaConstants::PAYMENT_PAID,
'updated_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'),
], 'id = ?', [$registrationId]); ], 'id = ?', [$registrationId]);
$registration = $db->selectOne(
"SELECT player_id FROM sa_registrations WHERE id = ?",
[$registrationId]
);
if ($registration) {
$db->update('sa_players', [
'registration_fee_paid' => 1,
'updated_at' => date('Y-m-d H:i:s'),
], 'id = ?', [(int) $registration['player_id']]);
}
} }
private static function handleRegistrationPaid(int $registrationId, int $paymentId): void private static function handleRegistrationPaid(int $registrationId, int $paymentId): void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment