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
$db = App::getInstance()->db();
$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]
);
if (!$member || $member['status'] !== 'active') {
return;
}
// Waiver-acquired members have no subscriptions — waiver fee covers the annual
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) {
return;
......@@ -129,13 +134,17 @@ final class SubscriptionSyncService
// Only sync for active members (not seasonal/honorary types)
$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]
);
if (!$member || $member['status'] !== 'active') {
return;
}
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) {
return;
......@@ -241,13 +250,17 @@ final class SubscriptionSyncService
$fy = financial_year();
$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]
);
if (!$member || $member['status'] !== 'active') {
return;
}
if (!empty($member['transferred_from_waiver_id'])) {
return;
}
$exemptTypes = self::getExemptTypes();
if (in_array($member['membership_type'], $exemptTypes, true)) {
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