Commit 1e65e84e authored by Mahmoud Aglan's avatar Mahmoud Aglan

fix(transfers): archive conflicting potential members before creating separated member

Transfer #14 failed because the national_id already existed on a potential (never-activated)
member record. Now archives any conflicting potential/inactive/pending member with the same
national_id before inserting the new active member.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 9cde9287
...@@ -193,6 +193,22 @@ final class TransferProcessor ...@@ -193,6 +193,22 @@ final class TransferProcessor
$newMemberData['transferred_from_transfer_id'] = $transferRequestId; $newMemberData['transferred_from_transfer_id'] = $transferRequestId;
// Archive any conflicting potential/inactive member with the same national_id
$newNid = $newMemberData['national_id'] ?? null;
if ($newNid) {
$conflict = $db->selectOne(
"SELECT id FROM members WHERE national_id = ? AND status IN ('potential','inactive','pending') AND is_archived = 0",
[$newNid]
);
if ($conflict) {
$db->update('members', [
'is_archived' => 1,
'archived_at' => date('Y-m-d H:i:s'),
'national_id' => null,
], '`id` = ?', [(int) $conflict['id']]);
}
}
$newMemberId = $db->insert('members', $newMemberData); $newMemberId = $db->insert('members', $newMemberData);
// 5. Record number chain // 5. Record number chain
......
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