Commit 60733923 authored by Mahmoud Aglan's avatar Mahmoud Aglan

fix(subscriptions): skip waiver-acquired members in subscription sync/refresh

SubscriptionSyncService was recreating subscription rows for waiver-acquired
members on every page view and event. Added early return when
transferred_from_waiver_id is set — waiver fee covers annual subscription,
no separate subscription rows should exist.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent adb79de3
...@@ -25,13 +25,18 @@ final class SubscriptionSyncService ...@@ -25,13 +25,18 @@ final class SubscriptionSyncService
$db = App::getInstance()->db(); $db = App::getInstance()->db();
$member = $db->selectOne( $member = $db->selectOne(
"SELECT id, full_name_ar, membership_type, status FROM members WHERE id = ? AND is_archived = 0", "SELECT id, full_name_ar, membership_type, status, transferred_from_waiver_id FROM members WHERE id = ? AND is_archived = 0",
[$memberId] [$memberId]
); );
if (!$member || $member['status'] !== 'active') { if (!$member || $member['status'] !== 'active') {
return; return;
} }
// Waiver-acquired members have no subscriptions — waiver fee covers the annual
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes(); $exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) { if (in_array($member['membership_type'], $exemptTypes, true)) {
return; return;
...@@ -129,13 +134,17 @@ final class SubscriptionSyncService ...@@ -129,13 +134,17 @@ final class SubscriptionSyncService
// Only sync for active members (not seasonal/honorary types) // Only sync for active members (not seasonal/honorary types)
$member = $db->selectOne( $member = $db->selectOne(
"SELECT id, membership_type, status FROM members WHERE id = ? AND is_archived = 0", "SELECT id, membership_type, status, transferred_from_waiver_id FROM members WHERE id = ? AND is_archived = 0",
[$memberId] [$memberId]
); );
if (!$member || $member['status'] !== 'active') { if (!$member || $member['status'] !== 'active') {
return; return;
} }
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes(); $exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) { if (in_array($member['membership_type'], $exemptTypes, true)) {
return; return;
...@@ -241,13 +250,17 @@ final class SubscriptionSyncService ...@@ -241,13 +250,17 @@ final class SubscriptionSyncService
$fy = financial_year(); $fy = financial_year();
$member = $db->selectOne( $member = $db->selectOne(
"SELECT id, membership_type, status FROM members WHERE id = ? AND is_archived = 0", "SELECT id, membership_type, status, transferred_from_waiver_id FROM members WHERE id = ? AND is_archived = 0",
[$memberId] [$memberId]
); );
if (!$member || $member['status'] !== 'active') { if (!$member || $member['status'] !== 'active') {
return; return;
} }
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes(); $exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) { if (in_array($member['membership_type'], $exemptTypes, true)) {
return; return;
......
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