• Mahmoud Aglan's avatar
    feat(installments): add early settlement — full principal-only payoff with interest waiver · a64e13fa
    Mahmoud Aglan authored
    - InstallmentCalculator: calculateEarlySettlement() sums all pending principal and interest separately; settlement_amount = principal only, all interest waived
    - InstallmentController: earlySettlement() (confirmation page), processEarlySettlement() (executes: single PaymentService call, zeros interest on each settled row, marks plan completed + is_cash_settled=1, dispatches installment.early_settled), settlementReceipt() (print view)
    - Routes: GET/POST /installments/{id}/early-settlement, GET /installments/{id}/settlement-receipt/{receiptId}
    - show.php:  تسوية مبكرة button (requires installment.pay permission, only when active + pending > 0)
    - early_settlement.php: breakdown table (original due / interest waived / principal to pay), pending items preview, mandatory confirmation checkbox, submit disabled until checked
    - settlement_receipt.php: print-ready receipt showing original balance, interest waived, amount paid, settled items list, amount in words, stamp/signature area
    - PaymentService: early_settlement payment type label
    - Architecture Map: section 5.6, new route rows, new event row
    Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
    a64e13fa
Name
Last commit
Last update
..
Controllers Loading commit data...
Models Loading commit data...
Services Loading commit data...
Views Loading commit data...
ApiRoutes.php Loading commit data...
PaymentProcessorAdapter.php Loading commit data...
Routes.php Loading commit data...
bootstrap.php Loading commit data...
provides.php Loading commit data...