Commit 76ca34c3 authored by Fares's avatar Fares

feat(transfers): manual form_number input for child separation

Instead of auto-generating form_number at execution time, require
the user to enter it when creating the separation request. Stored
in transfer_requests.form_number and used during TransferProcessor
execution. Falls back to auto-generation if empty.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 772a86ba
......@@ -63,6 +63,7 @@ class TransferController extends Controller
$spouseId = $request->post('spouse_id') ? (int) $request->post('spouse_id') : null;
$notes = trim($request->post('notes', ''));
$paymentMethod = trim($request->post('payment_method', 'cash'));
$formNumber = trim((string) $request->post('form_number', ''));
$validTypes = ['child_separation', 'child_mandatory_25', 'sports_conversion', 'cross_branch', 'full_transfer'];
if (!in_array($transferType, $validTypes)) {
......@@ -289,6 +290,7 @@ class TransferController extends Controller
'spouse_id' => $spouseId,
'source_membership_number' => $member['membership_number'],
'new_membership_value' => $feeCalc['new_membership_value'] ?? $feeCalc['subscription_price'] ?? '0.00',
'form_number' => $formNumber !== '' ? $formNumber : null,
'source_companions_count' => $sourceCompanionsCount,
'target_companions_count' => $targetCompanionsCount,
'companion_surcharge' => $companionSurcharge,
......
......@@ -18,7 +18,7 @@ class TransferRequest extends Model
protected static array $fillable = [
'source_member_id', 'target_member_id', 'transfer_type',
'child_id', 'spouse_id', 'source_membership_number',
'new_membership_number', 'new_membership_value',
'new_membership_number', 'new_membership_value', 'form_number',
'source_companions_count', 'target_companions_count',
'companion_surcharge', 'companion_surcharge_breakdown',
'years_since_acquisition', 'qualification_code',
......
......@@ -147,8 +147,10 @@ final class TransferProcessor
?? $sourceMember['phone_mobile']
?? '00000000000';
// Generate form_number for new member
$formNumber = FormNumberGenerator::next();
// Use manually entered form_number, or auto-generate as fallback
$formNumber = !empty($request['form_number'])
? $request['form_number']
: FormNumberGenerator::next();
$newMemberData = [
'full_name_ar' => $recipientData['full_name_ar'] ?? $subjectData['full_name_ar'] ?? $subjectName,
......
......@@ -50,6 +50,12 @@
</div>
<div style="padding:20px;display:grid;grid-template-columns:1fr 1fr;gap:15px;">
<!-- Form Number (manual input) -->
<div class="form-group" style="grid-column:1/-1;margin-bottom:15px;">
<label class="form-label">رقم الاستمارة <span style="color:#DC2626;">*</span></label>
<input type="text" name="form_number" id="form_number" class="form-input" required placeholder="أدخل رقم الاستمارة" style="max-width:300px;">
</div>
<!-- MALE-only fields -->
<div id="male-separation-fields">
<!-- Employment Status -->
......
......@@ -26,6 +26,7 @@ if ($transfer['transfer_type'] === 'full_transfer' && !empty($transfer['notes'])
<tr><td style="padding:8px 0;color:#6B7280;">النوع</td><td style="padding:8px 0;font-weight:600;"><?= e($typeLabels[$transfer['transfer_type']] ?? $transfer['transfer_type']) ?></td></tr>
<tr><td style="padding:8px 0;color:#6B7280;">الحالة</td><td style="padding:8px 0;font-weight:700;color:<?= match($transfer['status']) { 'completed' => '#059669', 'fee_paid' => '#2563EB', 'approved' => '#0284C7', 'rejected' => '#DC2626', default => '#D97706' } ?>;"><?= match($transfer['status']) { 'completed' => 'مكتمل', 'fee_paid' => 'تم الدفع', 'approved' => 'معتمد', 'rejected' => 'مرفوض', default => 'مقدّم' } ?></td></tr>
<?php if ($transfer['new_membership_number']): ?><tr><td style="padding:8px 0;color:#6B7280;">رقم العضوية (نفس الرقم)</td><td style="padding:8px 0;font-weight:700;color:#0D7377;font-size:20px;"><?= e($transfer['new_membership_number']) ?></td></tr><?php endif; ?>
<?php if (!empty($transfer['form_number'])): ?><tr><td style="padding:8px 0;color:#6B7280;">رقم الاستمارة</td><td style="padding:8px 0;font-weight:700;color:#1A1A2E;"><?= e($transfer['form_number']) ?></td></tr><?php endif; ?>
<?php if ($transfer['source_companions_count'] !== null): ?>
<tr><td style="padding:8px 0;color:#6B7280;">ملحقين العضوية الأصلية</td><td style="padding:8px 0;"><?= (int) $transfer['source_companions_count'] ?></td></tr>
<?php endif; ?>
......
<?php
declare(strict_types=1);
return function (\App\Core\Database $db): void {
$exists = $db->selectOne(
"SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'transfer_requests' AND column_name = 'form_number'"
);
if (!$exists) {
$db->raw("ALTER TABLE `transfer_requests` ADD COLUMN `form_number` VARCHAR(50) NULL AFTER `new_membership_number`");
}
};
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