Commit 0cc510ee authored by Mahmoud Aglan's avatar Mahmoud Aglan

feat(transfers): add 15% foreign spouse surcharge to child separation fee

When a separating child's wife is foreign (أجنبي), 15% of the full
membership value (based on the chosen qualification) is added per
foreign spouse to the separation fee total.

- Add foreignSpouseCount param to calculateForChildSeparation
- Count foreign spouses from dep_spouses nationality field in controller
- Add foreign_spouse_fee column to transfer_requests
- Display surcharge in transfer show page breakdown
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 50e7f8bc
...@@ -188,6 +188,15 @@ class TransferController extends Controller ...@@ -188,6 +188,15 @@ class TransferController extends Controller
} }
if ($transferType === 'child_separation' && $child && $effectiveTransferDate) { if ($transferType === 'child_separation' && $child && $effectiveTransferDate) {
// Count foreign spouses from submitted dependent data
$foreignSpouseCount = 0;
$rawSpousesForCount = $request->post('dep_spouses', []);
foreach ($rawSpousesForCount as $sp) {
if (!empty($sp['full_name_ar']) && ($sp['nationality'] ?? 'مصري') === 'أجنبي') {
$foreignSpouseCount++;
}
}
$feeCalc = SeparationFeeCalculator::calculateForChildSeparation( $feeCalc = SeparationFeeCalculator::calculateForChildSeparation(
(int) $memberId, (int) $memberId,
(int) $childId, (int) $childId,
...@@ -197,7 +206,8 @@ class TransferController extends Controller ...@@ -197,7 +206,8 @@ class TransferController extends Controller
$qualCode, $qualCode,
$depSpouses, $depSpouses,
$depChildren, $depChildren,
$depTemps $depTemps,
$foreignSpouseCount
); );
} else { } else {
$feeCalc = SeparationFeeCalculator::calculate((int) $memberId, $childId, $qualCode); $feeCalc = SeparationFeeCalculator::calculate((int) $memberId, $childId, $qualCode);
...@@ -334,6 +344,7 @@ class TransferController extends Controller ...@@ -334,6 +344,7 @@ class TransferController extends Controller
'separation_fee' => $feeCalc['separation_fee'], 'separation_fee' => $feeCalc['separation_fee'],
'form_fee' => $feeCalc['form_fee'], 'form_fee' => $feeCalc['form_fee'],
'annual_subscription_fee' => $feeCalc['annual_subscription_fee'], 'annual_subscription_fee' => $feeCalc['annual_subscription_fee'],
'foreign_spouse_fee' => $feeCalc['foreign_spouse_fee'] ?? '0.00',
'total_fee' => $totalWithSurcharge, 'total_fee' => $totalWithSurcharge,
'status' => 'requested', 'status' => 'requested',
'notes' => $notesJson, 'notes' => $notesJson,
......
...@@ -240,7 +240,8 @@ final class SeparationFeeCalculator ...@@ -240,7 +240,8 @@ final class SeparationFeeCalculator
?string $qualificationCode = null, ?string $qualificationCode = null,
int $depSpouses = 0, int $depSpouses = 0,
int $depChildren = 0, int $depChildren = 0,
int $depTemps = 0 int $depTemps = 0,
int $foreignSpouseCount = 0
): array { ): array {
$db = App::getInstance()->db(); $db = App::getInstance()->db();
$member = $db->selectOne("SELECT * FROM members WHERE id = ?", [$sourceMemberId]); $member = $db->selectOne("SELECT * FROM members WHERE id = ?", [$sourceMemberId]);
...@@ -314,7 +315,14 @@ final class SeparationFeeCalculator ...@@ -314,7 +315,14 @@ final class SeparationFeeCalculator
$familyTotal = bcadd($familyTotal, bcmul($tempSub, (string) $depTemps, 2), 2); $familyTotal = bcadd($familyTotal, bcmul($tempSub, (string) $depTemps, 2), 2);
$annualSubscriptionFee = $annualSubCovered ? '0.00' : bcadd($familyTotal, $devFee, 2); $annualSubscriptionFee = $annualSubCovered ? '0.00' : bcadd($familyTotal, $devFee, 2);
$totalFee = bcadd(bcadd($separationFee, $formFee, 2), $annualSubscriptionFee, 2); // Foreign spouse surcharge: 15% of membership value per foreign spouse
$foreignSpouseFee = '0.00';
if ($foreignSpouseCount > 0) {
$perForeignSpouse = bcdiv(bcmul($subscriptionPrice, '15', 4), '100', 2);
$foreignSpouseFee = bcmul($perForeignSpouse, (string) $foreignSpouseCount, 2);
}
$totalFee = bcadd(bcadd(bcadd($separationFee, $formFee, 2), $annualSubscriptionFee, 2), $foreignSpouseFee, 2);
return [ return [
'success' => true, 'success' => true,
...@@ -328,6 +336,8 @@ final class SeparationFeeCalculator ...@@ -328,6 +336,8 @@ final class SeparationFeeCalculator
'form_fee' => $formFee, 'form_fee' => $formFee,
'annual_subscription_fee' => $annualSubscriptionFee, 'annual_subscription_fee' => $annualSubscriptionFee,
'annual_sub_covered' => $annualSubCovered, 'annual_sub_covered' => $annualSubCovered,
'foreign_spouse_fee' => $foreignSpouseFee,
'foreign_spouse_count' => $foreignSpouseCount,
'total_fee' => $totalFee, 'total_fee' => $totalFee,
'acquisition_date' => $acquisitionDate, 'acquisition_date' => $acquisitionDate,
'effective_transfer_date' => $effectiveTransferDate, 'effective_transfer_date' => $effectiveTransferDate,
......
...@@ -74,6 +74,12 @@ if ($transfer['transfer_type'] === 'full_transfer' && !empty($transfer['notes']) ...@@ -74,6 +74,12 @@ if ($transfer['transfer_type'] === 'full_transfer' && !empty($transfer['notes'])
<td style="padding:8px 0;color:#6B7280;">اشتراك سنوي + تنمية</td> <td style="padding:8px 0;color:#6B7280;">اشتراك سنوي + تنمية</td>
<td style="padding:8px 0;font-weight:600;direction:ltr;text-align:left;"><?= money($transfer['annual_subscription_fee'] ?? '0') ?></td> <td style="padding:8px 0;font-weight:600;direction:ltr;text-align:left;"><?= money($transfer['annual_subscription_fee'] ?? '0') ?></td>
</tr> </tr>
<?php if (bccomp($transfer['foreign_spouse_fee'] ?? '0', '0', 2) > 0): ?>
<tr>
<td style="padding:8px 0;color:#D97706;font-weight:600;">رسوم زوجة أجنبية (15%)</td>
<td style="padding:8px 0;font-weight:700;direction:ltr;text-align:left;color:#D97706;"><?= money($transfer['foreign_spouse_fee']) ?></td>
</tr>
<?php endif; ?>
<?php if (bccomp($transfer['companion_surcharge'] ?? '0', '0', 2) > 0): ?> <?php if (bccomp($transfer['companion_surcharge'] ?? '0', '0', 2) > 0): ?>
<tr> <tr>
<td style="padding:8px 0;color:#7C3AED;font-weight:600;">رسوم ملحقين إضافيين</td> <td style="padding:8px 0;color:#7C3AED;font-weight:600;">رسوم ملحقين إضافيين</td>
......
<?php
declare(strict_types=1);
return [
'up' => "ALTER TABLE `transfer_requests` ADD COLUMN `foreign_spouse_fee` DECIMAL(15,2) NOT NULL DEFAULT 0.00 AFTER `annual_subscription_fee`",
'down' => "ALTER TABLE `transfer_requests` DROP COLUMN `foreign_spouse_fee`",
];
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