getMessage(); } } $stmt = $pdo->prepare(" SELECT l.*, a.account_name, a.institution_name, ( SELECT COUNT(*) FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 0 ) AS unpaid_count, ( SELECT COUNT(*) FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 1 ) AS paid_count, ( SELECT COUNT(*) FROM loan_schedules ls WHERE ls.loan_id = l.id ) AS total_count, ( SELECT MIN(ls.due_date) FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 0 ) AS next_due_date, ( SELECT MAX(ls.due_date) FROM loan_schedules ls WHERE ls.loan_id = l.id ) AS maturity_due_date, ( SELECT ls.scheduled_total FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 0 ORDER BY ls.due_date ASC, ls.cycle_no ASC LIMIT 1 ) AS next_payment_amount, ( SELECT ls.payment_phase FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 0 ORDER BY ls.due_date ASC, ls.cycle_no ASC LIMIT 1 ) AS next_payment_phase, ( SELECT COALESCE(SUM(ls.scheduled_total), 0) FROM loan_schedules ls WHERE ls.loan_id = l.id AND ls.is_paid = 0 ) AS remaining_total_amount FROM loans l LEFT JOIN accounts a ON a.id = l.account_id WHERE l.user_id = ? ORDER BY CASE WHEN l.status = 'active' THEN 0 ELSE 1 END, l.id DESC "); $stmt->execute([$uid]); $loans = $stmt->fetchAll(); require __DIR__ . '/../app/views/header.php'; ?>

대출 목록

대출 등록
0 ? round(($paidCount / $totalCount) * 100, 1) : 0.0; $phaseText = '-'; if (($loan['next_payment_phase'] ?? '') === 'grace') { $phaseText = '거치 중'; } elseif (($loan['next_payment_phase'] ?? '') === 'repayment') { $phaseText = '상환 중'; } elseif ($loan['status'] === 'closed') { $phaseText = '종료'; } ?>
·
대출원금
연이자율
%
거치기간
개월
상환기간
개월
남은 원금
남은 이자
남은 총액
다음 회차 금액
다음 납부일
만기일자
남은 회차 수
진행률
%
완료 회 / 전체
상세/스케줄 수정 중도상환
등록된 대출이 없습니다.