public function angsuranCreate(): void
{
$loanId = (int)($_GET['loan_id'] ?? 0);
$loan = $this->findLoanAny($loanId);
if (!$loan) {
flash_set('msg', 'Pinjaman tidak ditemukan.', 'warning');
redirect('/pinjaman/angsuran');
}
// ==========================================================
// installments
// ==========================================================
$installments = [];
try {
if ($this->model && method_exists($this->model, 'listInstallments')) {
$installments = $this->model->listInstallments($loanId);
} elseif ($this->m && method_exists($this->m, 'listInstallments')) {
$installments = $this->m->listInstallments($loanId);
} else {
// fallback query
$st = db()->prepare("
SELECT *
FROM loan_installments
WHERE loan_id=?
ORDER BY pay_date ASC, id ASC
");
$st->execute([$loanId]);
$installments = $st->fetchAll() ?: [];
}
} catch (Throwable $e) {
$installments = [];
}
// ==========================================================
// [ADDED] ambil akun COA (KeuanganModel / JurnalModel)
// ==========================================================
$accounts = [];
try {
if (class_exists('KeuanganModel')) {
$keu = new KeuanganModel();
if (method_exists($keu, 'getAccounts')) {
$accounts = $keu->getAccounts();
}
}
if (empty($accounts) && class_exists('JurnalModel')) {
$jm = new JurnalModel();
if (method_exists($jm, 'listAccounts')) {
$accounts = $jm->listAccounts();
}
}
} catch (Throwable $e) {}
// ==========================================================
// akun kas / bank (legacy + baru)
// ==========================================================
$cashAccounts = $this->getCashBankAccountsAny();
// outstanding info
$outstanding = $this->getOutstandingPrincipal($loan);
// pilih view
$view = 'pinjaman/angsuran_create';
if ($this->model && is_file(APP_PATH . '/views/pinjaman/angsuran_form.php')) {
$view = 'pinjaman/angsuran_form';
}
// ==========================================================
// render
// ==========================================================
$this->render($view, [
'title' => 'Bayar Angsuran',
// data utama
'loan' => $loan,
'installments' => $installments,
'outstanding' => $outstanding,
// ======================================================
// [ADDED] COA + default account
// ======================================================
'accounts' => $accounts,
'defaultPayAccountId' => default_cash_account_id(),
'defaultCashId' => default_cash_account_id(),
'defaultBankId' => default_bank_account_id(),
// ======================================================
// legacy & new key (tidak dihapus)
// ======================================================
'cash_accounts' => $cashAccounts,
'cashAccounts' => $cashAccounts,
// form default
'form' => [
'pay_date' => date('Y-m-d'),
'amount_principal' => '',
'amount_interest' => '',
'amount_total' => '',
'auto_split' => 1,
'cash_account_id' => $cashAccounts[0]['id'] ?? '',
'note' => ''
]
]);
}
Fatal error: Uncaught PDOException: SQLSTATE[08004] [1040] Too many connections in /home/edigital/applikasiupdate.simkopmer3.e-digital.id/config/database.php:40
Stack trace:
#0 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/config/database.php(40): PDO->__construct()
#1 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/app/controllers/AuthController.php(25): db()
#2 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/app/routes/web.php(234): AuthController->__construct()
#3 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/app/routes/web.php(72): {closure}()
#4 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/app/routes/web.php(947): Router->dispatch()
#5 /home/edigital/applikasiupdate.simkopmer3.e-digital.id/index.php(225): require_once('/home/edigital/...')
#6 {main}
thrown in /home/edigital/applikasiupdate.simkopmer3.e-digital.id/config/database.php on line 40