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
$status = $renewal['status'] ?? 'paid';
$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]
);
if ($existing) {
$updateData = ['status' => $status, 'updated_at' => date('Y-m-d H:i:s')];
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';
}
$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