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

dgjfgj

parent 8db2a862
...@@ -34,10 +34,17 @@ final class PaymentRequestService ...@@ -34,10 +34,17 @@ final class PaymentRequestService
return ['success' => false, 'error' => 'المبلغ يجب أن يكون أكبر من صفر']; return ['success' => false, 'error' => 'المبلغ يجب أن يكون أكبر من صفر'];
} }
if ($entityType !== null && $entityId !== null) {
$existing = $db->selectOne(
"SELECT id FROM payment_requests WHERE member_id = ? AND payment_type = ? AND related_entity_type = ? AND related_entity_id = ? AND status IN ('pending','processing') AND is_voided = 0 LIMIT 1",
[$memberId, $paymentType, $entityType, (int) $entityId]
);
} else {
$existing = $db->selectOne( $existing = $db->selectOne(
"SELECT id FROM payment_requests WHERE member_id = ? AND payment_type = ? AND status IN ('pending','processing') AND is_voided = 0 LIMIT 1", "SELECT id FROM payment_requests WHERE member_id = ? AND payment_type = ? AND status IN ('pending','processing') AND is_voided = 0 LIMIT 1",
[$memberId, $paymentType] [$memberId, $paymentType]
); );
}
if ($existing) { if ($existing) {
return ['success' => false, 'error' => 'يوجد طلب دفع معلق بالفعل لنفس النوع']; return ['success' => false, 'error' => 'يوجد طلب دفع معلق بالفعل لنفس النوع'];
} }
......
...@@ -37,8 +37,12 @@ EventBus::listen('payment_request.completed', function (array $data) { ...@@ -37,8 +37,12 @@ EventBus::listen('payment_request.completed', function (array $data) {
$member = \App\Modules\Members\Models\Member::find($memberId); $member = \App\Modules\Members\Models\Member::find($memberId);
if (!$member) return; if (!$member) return;
if (in_array($member->status, ['potential', 'payment_pending', 'accepted', 'under_review'], true)) {
$membershipNumber = \App\Modules\Members\Services\MemberNumberGenerator::assign($memberId); $membershipNumber = \App\Modules\Members\Services\MemberNumberGenerator::assign($memberId);
$member->update(['status' => 'active']); $member->update(['status' => 'active']);
} else {
$membershipNumber = $member->membership_number;
}
if ($paymentType === 'down_payment') { if ($paymentType === 'down_payment') {
$request = $db->selectOne("SELECT * FROM payment_requests WHERE id = ?", [$requestId]); $request = $db->selectOne("SELECT * FROM payment_requests WHERE id = ?", [$requestId]);
...@@ -137,6 +141,15 @@ EventBus::listen('payment_request.completed', function (array $data) { ...@@ -137,6 +141,15 @@ EventBus::listen('payment_request.completed', function (array $data) {
\App\Core\Logger::info("Child activated via cashier", ['child_id' => $entityId]); \App\Core\Logger::info("Child activated via cashier", ['child_id' => $entityId]);
} }
if ($paymentType === 'seasonal_fee' && $entityType === 'seasonal_memberships') {
$db->update('seasonal_memberships', [
'status' => 'active',
'updated_at' => date('Y-m-d H:i:s'),
], '`id` = ?', [$entityId]);
EventBus::dispatch('seasonal.fee_paid', ['seasonal_id' => $entityId, 'member_id' => $memberId, 'payment_id' => $paymentId]);
\App\Core\Logger::info("Seasonal membership activated via cashier", ['seasonal_id' => $entityId]);
}
if ($paymentType === 'addition_fee' && $entityType === 'temporary_members') { if ($paymentType === 'addition_fee' && $entityType === 'temporary_members') {
$db->update('temporary_members', [ $db->update('temporary_members', [
'status' => 'active', 'status' => 'active',
......
...@@ -135,10 +135,14 @@ class MemberController extends Controller ...@@ -135,10 +135,14 @@ class MemberController extends Controller
$pendingRequests = PaymentRequestService::getForMember((int) $id); $pendingRequests = PaymentRequestService::getForMember((int) $id);
$pendingFormFee = null; $pendingFormFee = null;
$pendingMembership = null; $pendingMembership = null;
$pendingAdditions = [];
foreach ($pendingRequests as $pr) { foreach ($pendingRequests as $pr) {
if ($pr['status'] === 'pending' || $pr['status'] === 'processing') { if ($pr['status'] === 'pending' || $pr['status'] === 'processing') {
if ($pr['payment_type'] === 'form_fee') $pendingFormFee = $pr; if ($pr['payment_type'] === 'form_fee') $pendingFormFee = $pr;
if (in_array($pr['payment_type'], ['membership_fee', 'down_payment'], true)) $pendingMembership = $pr; if (in_array($pr['payment_type'], ['membership_fee', 'down_payment'], true)) $pendingMembership = $pr;
if ($pr['payment_type'] === 'addition_fee' && $pr['related_entity_type'] && $pr['related_entity_id']) {
$pendingAdditions[$pr['related_entity_type'] . ':' . $pr['related_entity_id']] = $pr;
}
} }
} }
...@@ -155,6 +159,7 @@ class MemberController extends Controller ...@@ -155,6 +159,7 @@ class MemberController extends Controller
'specialDiscount' => $specialDiscount, 'specialDiscount' => $specialDiscount,
'pendingFormFee' => $pendingFormFee, 'pendingFormFee' => $pendingFormFee,
'pendingMembership' => $pendingMembership, 'pendingMembership' => $pendingMembership,
'pendingAdditions' => $pendingAdditions,
]); ]);
} }
...@@ -202,6 +207,47 @@ class MemberController extends Controller ...@@ -202,6 +207,47 @@ class MemberController extends Controller
return $this->redirect('/members/' . $id)->withSuccess('تم إرسال طلب الدفع للخزينة — رقم الطلب: ' . $result['request_number']); return $this->redirect('/members/' . $id)->withSuccess('تم إرسال طلب الدفع للخزينة — رقم الطلب: ' . $result['request_number']);
} }
public function payAdditionFee(Request $request, string $id): Response
{
$db = App::getInstance()->db();
$member = Member::find((int) $id);
if (!$member) return $this->redirect('/members')->withError('العضو غير موجود');
$entityType = trim((string) $request->post('entity_type', ''));
$entityId = (int) $request->post('entity_id', 0);
if (!in_array($entityType, ['spouses', 'children', 'temporary_members'], true) || $entityId <= 0) {
return $this->redirect('/members/' . $id)->withError('بيانات غير صالحة');
}
$entity = $db->selectOne("SELECT * FROM {$entityType} WHERE id = ? AND member_id = ? AND is_archived = 0", [$entityId, (int) $id]);
if (!$entity) return $this->redirect('/members/' . $id)->withError('العنصر غير موجود');
$fee = $entity['addition_fee'] ?? '0.00';
if (bccomp($fee, '0.01', 2) < 0) return $this->redirect('/members/' . $id)->withError('لا توجد رسوم مستحقة');
$nameLabel = $entity['full_name_ar'] ?? '';
$typeLabel = match ($entityType) {
'spouses' => 'زوجة',
'children' => ($entity['gender'] ?? '') === 'male' ? 'ابن' : 'ابنة',
'temporary_members' => 'عضو مؤقت',
default => '',
};
$result = PaymentRequestService::createRequest([
'member_id' => (int) $id,
'amount' => $fee,
'payment_type' => 'addition_fee',
'related_entity_type' => $entityType,
'related_entity_id' => $entityId,
'description_ar' => 'رسوم إضافة ' . $typeLabel . ' — ' . $nameLabel,
]);
if (!$result['success']) return $this->redirect('/members/' . $id)->withError($result['error']);
return $this->redirect('/members/' . $id)->withSuccess('تم إرسال رسوم ' . $typeLabel . ' للخزينة — رقم الطلب: ' . $result['request_number']);
}
public function fillForm(Request $request, string $id): Response public function fillForm(Request $request, string $id): Response
{ {
$db = App::getInstance()->db(); $db = App::getInstance()->db();
......
...@@ -12,6 +12,7 @@ return [ ...@@ -12,6 +12,7 @@ return [
['POST', '/members/{id}/status', 'Members\Controllers\MemberController@changeStatus', ['auth'], 'member.change_status'], ['POST', '/members/{id}/status', 'Members\Controllers\MemberController@changeStatus', ['auth'], 'member.change_status'],
['POST', '/members/{id}/pay-form-fee', 'Members\Controllers\MemberController@payFormFee', ['auth'], 'member.pay_form_fee'], ['POST', '/members/{id}/pay-form-fee', 'Members\Controllers\MemberController@payFormFee', ['auth'], 'member.pay_form_fee'],
['POST', '/members/{id}/pay-membership', 'Members\Controllers\MemberController@payMembership',['auth'], 'member.pay_membership'], ['POST', '/members/{id}/pay-membership', 'Members\Controllers\MemberController@payMembership',['auth'], 'member.pay_membership'],
['POST', '/members/{id}/pay-addition', 'Members\Controllers\MemberController@payAdditionFee', ['auth'], 'member.pay_membership'],
['GET', '/members/{id}/fill-form', 'Members\Controllers\MemberController@fillForm', ['auth'], 'member.fill_form'], ['GET', '/members/{id}/fill-form', 'Members\Controllers\MemberController@fillForm', ['auth'], 'member.fill_form'],
['POST', '/members/{id}/fill-form', 'Members\Controllers\MemberController@saveFillForm', ['auth'], 'member.fill_form'], ['POST', '/members/{id}/fill-form', 'Members\Controllers\MemberController@saveFillForm', ['auth'], 'member.fill_form'],
['POST', '/api/members/parse-nid', 'Members\Controllers\MemberApiController@parseNid', ['auth'], 'member.create'], ['POST', '/api/members/parse-nid', 'Members\Controllers\MemberApiController@parseNid', ['auth'], 'member.create'],
......
...@@ -14,6 +14,7 @@ $statusLabel = $member->getStatusLabel(); ...@@ -14,6 +14,7 @@ $statusLabel = $member->getStatusLabel();
$statusColor = $member->getStatusColor(); $statusColor = $member->getStatusColor();
$isInitialPhase = in_array($member->status, ['potential', 'under_review', 'interview_scheduled', 'accepted', 'payment_pending']); $isInitialPhase = in_array($member->status, ['potential', 'under_review', 'interview_scheduled', 'accepted', 'payment_pending']);
$isActive = ($member->status === 'active'); $isActive = ($member->status === 'active');
$pendingAdditions ??= [];
?> ?>
<!-- ═══════════════════════════════════════ --> <!-- ═══════════════════════════════════════ -->
...@@ -277,9 +278,16 @@ if ($formFilled && !$bill['membership_paid'] && !in_array($member->status, ['act ...@@ -277,9 +278,16 @@ if ($formFilled && !$bill['membership_paid'] && !in_array($member->status, ['act
foreach ($bill['items'] as $item) { foreach ($bill['items'] as $item) {
if (in_array($item['type'] ?? '', ['spouse_fee', 'child_fee', 'temp_fee'], true) && !$item['included'] && !$item['paid']) { if (in_array($item['type'] ?? '', ['spouse_fee', 'child_fee', 'temp_fee'], true) && !$item['included'] && !$item['paid']) {
$statusText = !empty($item['in_queue']) ? ' (في الخزينة)' : ''; $inQueue = !empty($item['in_queue']);
$statusColor = !empty($item['in_queue']) ? '#D97706' : '#DC2626'; $statusText = $inQueue ? ' — في انتظار الخزينة' : '';
$missingSteps[] = ['icon' => '&#x26a0;', 'text' => 'لم يتم سداد: ' . $item['label'] . $statusText, 'color' => $statusColor, 'done' => false]; $statusColor = $inQueue ? '#D97706' : '#DC2626';
$stepEntry = ['icon' => $inQueue ? '&#x1f4b3;' : '&#x26a0;', 'text' => 'لم يتم سداد: ' . $item['label'] . $statusText, 'color' => $statusColor, 'done' => false];
if (!$inQueue && !empty($item['entity_type']) && !empty($item['entity_id']) && bccomp($item['amount'], '0.01', 2) >= 0) {
$stepEntry['entity_type'] = $item['entity_type'];
$stepEntry['entity_id'] = $item['entity_id'];
$stepEntry['amount'] = $item['amount'];
}
$missingSteps[] = $stepEntry;
} }
} }
...@@ -294,7 +302,15 @@ $hasIncomplete = !empty(array_filter($missingSteps, fn($s) => !$s['done'])); ...@@ -294,7 +302,15 @@ $hasIncomplete = !empty(array_filter($missingSteps, fn($s) => !$s['done']));
<?php foreach ($missingSteps as $step): ?> <?php foreach ($missingSteps as $step): ?>
<div style="display:flex;align-items:center;gap:10px;padding:8px 0;<?= $step['done'] ? 'opacity:0.5;' : '' ?>border-bottom:1px solid #F9FAFB;"> <div style="display:flex;align-items:center;gap:10px;padding:8px 0;<?= $step['done'] ? 'opacity:0.5;' : '' ?>border-bottom:1px solid #F9FAFB;">
<span style="font-size:18px;"><?= $step['icon'] ?></span> <span style="font-size:18px;"><?= $step['icon'] ?></span>
<span style="color:<?= $step['color'] ?>;font-weight:<?= $step['done'] ? '400' : '600' ?>;font-size:14px;<?= $step['done'] ? 'text-decoration:line-through;' : '' ?>"><?= e($step['text']) ?></span> <span style="flex:1;color:<?= $step['color'] ?>;font-weight:<?= $step['done'] ? '400' : '600' ?>;font-size:14px;<?= $step['done'] ? 'text-decoration:line-through;' : '' ?>"><?= e($step['text']) ?></span>
<?php if (!empty($step['entity_type'])): ?>
<form method="POST" action="/members/<?= (int) $member->id ?>/pay-addition" style="margin:0;">
<?= csrf_field() ?>
<input type="hidden" name="entity_type" value="<?= e($step['entity_type']) ?>">
<input type="hidden" name="entity_id" value="<?= (int) $step['entity_id'] ?>">
<button type="submit" class="btn btn-sm" style="background:#D97706;color:#fff;border:none;font-size:12px;padding:4px 12px;border-radius:6px;white-space:nowrap;" onclick="return confirm('إرسال رسوم <?= e(money($step['amount'])) ?> للخزينة؟')">📤 إرسال للخزينة</button>
</form>
<?php endif; ?>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
...@@ -501,8 +517,26 @@ $categoryLabels = [ ...@@ -501,8 +517,26 @@ $categoryLabels = [
if (bccomp($fee, '0', 2) <= 0 && (int) $s['spouse_order'] === 1) echo '<span style="color:#059669;">مشمولة</span>'; if (bccomp($fee, '0', 2) <= 0 && (int) $s['spouse_order'] === 1) echo '<span style="color:#059669;">مشمولة</span>';
else echo money($fee); else echo money($fee);
?></td> ?></td>
<td><span style="color:<?= match($s['status']) { 'active' => '#059669', 'pending_payment' => '#D97706', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($s['status']) { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'inactive' => 'غير نشط', default => $s['status'] } ?></span></td> <td><?php
<td><a href="/members/<?= (int) $member->id ?>/spouses/<?= (int) $s['id'] ?>" class="btn btn-sm btn-outline">عرض</a></td> $sKey = 'spouses:' . (int) $s['id'];
$sInQueue = isset($pendingAdditions[$sKey]);
if ($sInQueue): ?>
<span style="color:#D97706;font-weight:600;font-size:12px;">&#x1f4b3; في الخزينة</span>
<?php else: ?>
<span style="color:<?= match($s['status']) { 'active' => '#059669', 'pending_payment' => '#D97706', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($s['status']) { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'inactive' => 'غير نشط', default => $s['status'] } ?></span>
<?php endif; ?>
</td>
<td style="white-space:nowrap;">
<a href="/members/<?= (int) $member->id ?>/spouses/<?= (int) $s['id'] ?>" class="btn btn-sm btn-outline">عرض</a>
<?php if ($s['status'] === 'pending_payment' && !$sInQueue && bccomp($s['addition_fee'] ?? '0', '0.01', 2) >= 0): ?>
<form method="POST" action="/members/<?= (int) $member->id ?>/pay-addition" style="display:inline;margin:0;">
<?= csrf_field() ?>
<input type="hidden" name="entity_type" value="spouses">
<input type="hidden" name="entity_id" value="<?= (int) $s['id'] ?>">
<button type="submit" class="btn btn-sm" style="background:#D97706;color:#fff;border:none;font-size:11px;" onclick="return confirm('إرسال رسوم <?= money($s['addition_fee']) ?> للخزينة؟')">📤 خزينة</button>
</form>
<?php endif; ?>
</td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody></table></div> </tbody></table></div>
...@@ -531,8 +565,26 @@ $categoryLabels = [ ...@@ -531,8 +565,26 @@ $categoryLabels = [
$fee = $c['addition_fee'] ?? '0.00'; $fee = $c['addition_fee'] ?? '0.00';
echo bccomp($fee, '0', 2) <= 0 ? '<span style="color:#059669;">مشمول</span>' : money($fee); echo bccomp($fee, '0', 2) <= 0 ? '<span style="color:#059669;">مشمول</span>' : money($fee);
?></td> ?></td>
<td><span style="color:<?= match($c['status'] ?? '') { 'active' => '#059669', 'pending_payment' => '#D97706', 'frozen' => '#6B7280', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($c['status'] ?? '') { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'frozen' => 'مجمد', 'inactive' => 'غير نشط', default => $c['status'] ?? '—' } ?></span></td> <td><?php
<td><a href="/members/<?= (int) $member->id ?>/children/<?= (int) $c['id'] ?>" class="btn btn-sm btn-outline">عرض</a></td> $cKey = 'children:' . (int) $c['id'];
$cInQueue = isset($pendingAdditions[$cKey]);
if ($cInQueue): ?>
<span style="color:#D97706;font-weight:600;font-size:12px;">&#x1f4b3; في الخزينة</span>
<?php else: ?>
<span style="color:<?= match($c['status'] ?? '') { 'active' => '#059669', 'pending_payment' => '#D97706', 'frozen' => '#6B7280', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($c['status'] ?? '') { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'frozen' => 'مجمد', 'inactive' => 'غير نشط', default => $c['status'] ?? '—' } ?></span>
<?php endif; ?>
</td>
<td style="white-space:nowrap;">
<a href="/members/<?= (int) $member->id ?>/children/<?= (int) $c['id'] ?>" class="btn btn-sm btn-outline">عرض</a>
<?php if (($c['status'] ?? '') === 'pending_payment' && !$cInQueue && bccomp($c['addition_fee'] ?? '0', '0.01', 2) >= 0): ?>
<form method="POST" action="/members/<?= (int) $member->id ?>/pay-addition" style="display:inline;margin:0;">
<?= csrf_field() ?>
<input type="hidden" name="entity_type" value="children">
<input type="hidden" name="entity_id" value="<?= (int) $c['id'] ?>">
<button type="submit" class="btn btn-sm" style="background:#D97706;color:#fff;border:none;font-size:11px;" onclick="return confirm('إرسال رسوم <?= money($c['addition_fee']) ?> للخزينة؟')">📤 خزينة</button>
</form>
<?php endif; ?>
</td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody></table></div> </tbody></table></div>
...@@ -554,8 +606,26 @@ $categoryLabels = [ ...@@ -554,8 +606,26 @@ $categoryLabels = [
$fee = $t['addition_fee'] ?? '0.00'; $fee = $t['addition_fee'] ?? '0.00';
echo bccomp($fee, '0', 2) <= 0 ? '<span style="color:#059669;">مشمول</span>' : money($fee); echo bccomp($fee, '0', 2) <= 0 ? '<span style="color:#059669;">مشمول</span>' : money($fee);
?></td> ?></td>
<td><span style="color:<?= match($t['status'] ?? '') { 'active' => '#059669', 'pending_payment' => '#D97706', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($t['status'] ?? '') { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'inactive' => 'غير نشط', default => $t['status'] ?? '—' } ?></span></td> <td><?php
<td><a href="/members/<?= (int) $member->id ?>/temporary/<?= (int) $t['id'] ?>" class="btn btn-sm btn-outline">عرض</a></td> $tKey = 'temporary_members:' . (int) $t['id'];
$tInQueue = isset($pendingAdditions[$tKey]);
if ($tInQueue): ?>
<span style="color:#D97706;font-weight:600;font-size:12px;">&#x1f4b3; في الخزينة</span>
<?php else: ?>
<span style="color:<?= match($t['status'] ?? '') { 'active' => '#059669', 'pending_payment' => '#D97706', default => '#DC2626' } ?>;font-weight:600;font-size:12px;">&#x25cf; <?= match($t['status'] ?? '') { 'active' => 'نشط', 'pending_payment' => 'في انتظار الدفع', 'inactive' => 'غير نشط', default => $t['status'] ?? '—' } ?></span>
<?php endif; ?>
</td>
<td style="white-space:nowrap;">
<a href="/members/<?= (int) $member->id ?>/temporary/<?= (int) $t['id'] ?>" class="btn btn-sm btn-outline">عرض</a>
<?php if (($t['status'] ?? '') === 'pending_payment' && !$tInQueue && bccomp($t['addition_fee'] ?? '0', '0.01', 2) >= 0): ?>
<form method="POST" action="/members/<?= (int) $member->id ?>/pay-addition" style="display:inline;margin:0;">
<?= csrf_field() ?>
<input type="hidden" name="entity_type" value="temporary_members">
<input type="hidden" name="entity_id" value="<?= (int) $t['id'] ?>">
<button type="submit" class="btn btn-sm" style="background:#D97706;color:#fff;border:none;font-size:11px;" onclick="return confirm('إرسال رسوم <?= money($t['addition_fee']) ?> للخزينة؟')">📤 خزينة</button>
</form>
<?php endif; ?>
</td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody></table></div> </tbody></table></div>
......
...@@ -129,7 +129,7 @@ final class PaymentService ...@@ -129,7 +129,7 @@ final class PaymentService
'receipt_id' => $receiptId, 'receipt_id' => $receiptId,
'receipt_number' => $receiptNumber, 'receipt_number' => $receiptNumber,
'member_id' => ($memberId !== null && $memberId > 0) ? $memberId : 0, 'member_id' => ($memberId !== null && $memberId > 0) ? $memberId : 0,
'type' => $paymentType, 'payment_type' => $paymentType,
'amount' => $amount, 'amount' => $amount,
'method' => $paymentMethod, 'method' => $paymentMethod,
]); ]);
...@@ -217,7 +217,7 @@ final class PaymentService ...@@ -217,7 +217,7 @@ final class PaymentService
EventBus::dispatch('payment.voided', [ EventBus::dispatch('payment.voided', [
'payment_id' => $paymentId, 'payment_id' => $paymentId,
'member_id' => (int) $payment['member_id'], 'member_id' => (int) $payment['member_id'],
'type' => $payment['payment_type'], 'payment_type' => $payment['payment_type'],
'amount' => $payment['amount'], 'amount' => $payment['amount'],
'reason' => $reason, 'reason' => $reason,
]); ]);
......
...@@ -100,19 +100,19 @@ class SeasonalController extends Controller ...@@ -100,19 +100,19 @@ class SeasonalController extends Controller
return $this->redirect("/members/{$memberId}/seasonal/create"); return $this->redirect("/members/{$memberId}/seasonal/create");
} }
$hasFee = bccomp($fee, '0.00', 2) > 0;
$seasonal = SeasonalMembership::create([ $seasonal = SeasonalMembership::create([
'member_id' => (int) $memberId, 'member_id' => (int) $memberId,
'branch_id' => (int) $data['branch_id'], 'branch_id' => (int) $data['branch_id'],
'start_date' => $startDate, 'start_date' => $startDate,
'end_date' => $endDate, 'end_date' => $endDate,
'fee_amount' => $fee, 'fee_amount' => $fee,
'status' => 'active', 'status' => $hasFee ? 'pending_payment' : 'active',
'carnet_marking' => 'موسمي', 'carnet_marking' => 'موسمي',
'notes' => $data['notes'] ?? null, 'notes' => $data['notes'] ?? null,
]); ]);
// Send payment to cashier queue if ($hasFee) {
if (bccomp($fee, '0.00', 2) > 0) {
$payResult = PaymentRequestService::createRequest([ $payResult = PaymentRequestService::createRequest([
'member_id' => (int) $memberId, 'member_id' => (int) $memberId,
'amount' => $fee, 'amount' => $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