Commit f0e364fd authored by Mahmoud Aglan's avatar Mahmoud Aglan

Fix retroactive renewal setting paid_amount without creating payment record

processRetroactiveRenewal() was setting paid_amount = total_amount when
status='paid' but not creating a payment record, causing fine_amount to
stay at 0 (calculator sees paid_amount == total_amount → skips the year).
Now creates a retroactive payment via createRetroactivePayment() before
setting paid_amount, ensuring payment_id is always populated.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 9612d215
...@@ -764,14 +764,23 @@ final class RetroactiveMembershipService ...@@ -764,14 +764,23 @@ final class RetroactiveMembershipService
$status = $renewal['status'] ?? 'paid'; $status = $renewal['status'] ?? 'paid';
$existing = $db->selectOne( $existing = $db->selectOne(
"SELECT id FROM subscriptions WHERE member_id = ? AND financial_year = ? AND person_type = 'member'", "SELECT id, total_amount FROM subscriptions WHERE member_id = ? AND financial_year = ? AND person_type = 'member'",
[$memberId, $financialYear] [$memberId, $financialYear]
); );
if ($existing) { if ($existing) {
$updateData = ['status' => $status, 'updated_at' => date('Y-m-d H:i:s')]; $updateData = ['status' => $status, 'updated_at' => date('Y-m-d H:i:s')];
if ($status === 'paid') { if ($status === 'paid') {
$updateData['paid_amount'] = (string) ($renewal['amount'] ?? '0.00'); $paidAmount = (string) ($renewal['amount'] ?? $existing['total_amount']);
$paymentId = self::createRetroactivePayment($memberId, [
'payment_type' => 'annual_subscription',
'amount' => $paidAmount,
'payment_method' => $renewal['payment_method'] ?? 'cash',
'payment_date' => self::safeDate($renewal['paid_date'] ?? null) ?? date('Y-m-d'),
'description' => "اشتراك سنوي {$financialYear} — تجديد بأثر رجعي",
]);
$updateData['paid_amount'] = $paidAmount;
$updateData['payment_id'] = $paymentId;
$updateData['paid_at'] = (self::safeDate($renewal['paid_date'] ?? null) ?? date('Y-m-d')) . ' 09:00:00'; $updateData['paid_at'] = (self::safeDate($renewal['paid_date'] ?? null) ?? date('Y-m-d')) . ' 09:00:00';
} }
$db->update('subscriptions', $updateData, '`id` = ?', [(int) $existing['id']]); $db->update('subscriptions', $updateData, '`id` = ?', [(int) $existing['id']]);
......
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