{% extends "base.html" %}
{% block title %}Dashboard - FinansialApp{% endblock %}
{% block page_title %}
{% if session.role == 'OPERATOR' %}Portal Operator{% elif session.role == 'INVESTOR' %}Dashboard Investor{% else %}Dashboard{% endif %}
{% endblock %}
{% block content %}
{% if session.role == 'OPERATOR' %}
{# ── OPERATOR PORTAL ── #}
{% set cm = today.strftime('%B %Y') %}
{% set net_cf = cf.masuk - cf.keluar %}
{% set total_exp = pnl.hpp + pnl.op_exp + pnl.tax %}
{% set lb_c = '#15803d' if pnl.laba_bersih >= 0 else '#dc2626' %}
{% set lb_bg2 = 'rgba(22,163,74,.12)' if pnl.laba_bersih >= 0 else 'rgba(220,38,38,.12)' %}
{% set cf_c = '#15803d' if net_cf >= 0 else '#dc2626' %}
{% set cf_bg3 = 'rgba(22,163,74,.12)' if net_cf >= 0 else 'rgba(220,38,38,.12)' %}
Total Pendapatan
{{ pnl.rev|rp }}
{% if pnl.rev > 0 and max_rev_year > 0 %}
{% if pnl.rev >= max_rev_year %}
Tertinggi di tahun {{ today.year }}
{% else %}
{{ "%.0f"|format(pnl.rev / max_rev_year * 100) }}% dari tertinggi tahun ini
({{ max_rev_year|rp }})
{% endif %}
{% else %}
periode ini
{% endif %}
Total Beban
{{ total_exp|rp }}
operasional · pajak · penyusutan
{% if pnl.rev > 0 %}{{ "%.1f"|format(total_exp / pnl.rev * 100) }}%{% else %}-{% endif %}
Laba Bersih
{{ pnl.laba_bersih|rp }}
margin {{ pnl.pct_laba_bersih }}%
{{ pnl.pct_laba_bersih }}%
{% set saldo_pos = cf.saldo >= 0 %}
{% if saldo_rekening %}
Rekening
{% for rek in saldo_rekening %}
{% if 'Kas' in rek.nama or 'kas' in rek.nama %}
{% set chip_bg = '#dcfce7' %}
{% set chip_border = '#86efac' %}
{% set chip_lbl = '#15803d' %}
{% set chip_icon = 'fas fa-money-bill-wave' %}
{% set chip_ic_clr = '#16a34a' %}
{% elif 'Wallet' in rek.nama or 'wallet' in rek.nama or 'E-' in rek.nama %}
{% set chip_bg = '#faf5ff' %}
{% set chip_border = '#d8b4fe' %}
{% set chip_lbl = '#7c3aed' %}
{% set chip_icon = 'fas fa-wallet' %}
{% set chip_ic_clr = '#8b5cf6' %}
{% else %}
{% set chip_bg = '#dbeafe' %}
{% set chip_border = '#93c5fd' %}
{% set chip_lbl = '#1d4ed8' %}
{% set chip_icon = 'fas fa-building-columns' %}
{% set chip_ic_clr = '#3b82f6' %}
{% endif %}
{{ rek.nama }}
{{ rek.saldo|rp }}
{% endfor %}
{% endif %}
{% if ratios and app_pref.ratio_widgets and show_feature.analisis_rasio %}
{% set _rcls = {
'Sehat': 'badge-lunas',
'Cukup': 'badge-sebagian',
'Perlu Perhatian': 'badge-belum'
} %}
{# Map key → (label, value, interpretation, icon, color) #}
{% set _rw_map = {
'current_ratio': ('Current Ratio', '%.2fx'|format(ratios.current_ratio), ratios.current_int, 'fas fa-droplet', '#0ea5e9'),
'quick_ratio': ('Quick Ratio', '%.2fx'|format(ratios.quick_ratio), ratios.quick_int, 'fas fa-bolt', '#06b6d4'),
'cash_ratio': ('Cash Ratio', '%.2fx'|format(ratios.cash_ratio), ratios.cash_int, 'fas fa-coins', '#14b8a6'),
'der': ('DER', '%.2fx'|format(ratios.der), ratios.der_int, 'fas fa-scale-balanced', '#f97316'),
'debt_to_asset': ('Debt to Asset', '%.2f'|format(ratios.debt_to_asset), ratios.dta_int, 'fas fa-link', '#fb923c'),
'equity_ratio': ('Equity Ratio', '%.2f'|format(ratios.equity_ratio), ratios.eqr_int, 'fas fa-shield', '#fbbf24'),
'gpm': ('Gross Margin', '%.1f%%'|format(ratios.gpm), ratios.gpm_int, 'fas fa-percent', '#22c55e'),
'opm': ('Operating Margin', '%.1f%%'|format(ratios.opm), ratios.opm_int, 'fas fa-percent', '#16a34a'),
'npm': ('Net Margin', '%.1f%%'|format(ratios.npm), ratios.npm_int, 'fas fa-percent', '#8b5cf6'),
'roa': ('ROA', '%.1f%%'|format(ratios.roa), ratios.roa_int, 'fas fa-chart-pie', '#ec4899'),
'roe': ('ROE', '%.1f%%'|format(ratios.roe), ratios.roe_int, 'fas fa-chart-line', '#10b981'),
'inv_turnover': ('Inventory Turnover', '%.2fx'|format(ratios.inv_turnover), ratios.inv_int, 'fas fa-boxes-stacked', '#0284c7'),
'asset_turnover': ('Asset Turnover', '%.2fx'|format(ratios.asset_turnover), ratios.at_int, 'fas fa-rotate', '#7c3aed'),
'receivables_turnover': ('Receivables Turnover', '%.2fx'|format(ratios.receivables_turnover), ratios.recv_int,'fas fa-hand-holding-dollar', '#d97706')
} %}
Kesehatan Keuangan
{% for w_key in app_pref.ratio_widgets %}
{% set r = _rw_map.get(w_key) %}
{% if r %}
{% endif %}
{% endfor %}
Lihat semua rasio
{% endif %}
Pendapatan:
—
Laba Bersih:
—
Rata-rata Laba/Hari Aktif:
—
Belum ada transaksi pada bulan ini.
{% if stok_rendah %}
{% for p in stok_rendah %}
| {{ p.nama }}{% if p.varian %} {{ p.varian }}{% endif %} |
{{ p.stok|qty }} {{ p.satuan }} |
{% endfor %}
{% endif %}
{% if piutang_jatuh %}
{% for p in piutang_jatuh %}
|
{{ p.pelanggan }}
JT: {{ p.jatuh_tempo|tgl }}
|
{{ (p.jumlah-p.terbayar)|rp }}
|
{% endfor %}
{% endif %}
{% if not stok_rendah and not piutang_jatuh %}
Tidak ada peringatan aktif
{% endif %}
{%- set rev = pnl.rev if pnl.rev else 1 -%}
{%- macro barMain(pct, color) -%}
|
{%- endmacro -%}
{%- macro barSub(pct, color) -%}
|
{%- endmacro -%}
| Aktivitas |
Nominal |
% |
Bar |
|
Total Pendapatan |
{{ pnl.rev|rp }} |
100% |
{{ barMain(100, 'var(--pgp)') }}
{% if can.show_hpp_margin %}
|
HPP / COGS |
{% if pnl.hpp %}{{ pnl.hpp|rp }}{% else %}-{% endif %} |
{{ pnl.pct_hpp }}% |
{{ barSub(pnl.pct_hpp, '#ef4444') }}
|
|
Laba Kotor |
{{ pnl.laba_kotor|rp }} |
{{ pnl.pct_laba_kotor }}% |
{{ barMain(pnl.pct_laba_kotor, 'var(--pgp)') }}
{% endif %}
|
Biaya Operasional |
{% if pnl.op_exp %}{{ pnl.op_exp|rp }}{% else %}-{% endif %} |
{{ pnl.pct_op }}% |
{{ barSub(pnl.pct_op, '#f97316') }}
|
|
Margin Operasional |
{{ pnl.laba_op|rp }} |
{{ pnl.pct_laba_op }}% |
{{ barMain(pnl.pct_laba_op, 'var(--pbp)') }}
|
Penyusutan |
{% if pnl.depr %}{{ pnl.depr|rp }}{% else %}-{% endif %} |
{{ pnl.pct_depr }}% |
{{ barSub(pnl.pct_depr, '#64748b') }}
|
|
EBIT |
{{ pnl.ebit|rp }} |
{{ pnl.pct_ebit }}% |
{{ barMain(pnl.pct_ebit, 'var(--ppp)') }}
{% if pnl.interest %}
|
Beban Bunga |
{{ pnl.interest|rp }} |
{{ (pnl.interest/pnl.rev*100)|round(1) if pnl.rev else 0 }}% |
{{ barSub((pnl.interest/pnl.rev*100)|round|int if pnl.rev else 0, '#ef4444') }}
{% endif %}
|
Pajak |
{% if pnl.tax %}{{ pnl.tax|rp }}{% else %}-{% endif %} |
{{ pnl.pct_tax }}% |
{{ barSub(pnl.pct_tax, '#ef4444') }}
|
|
Laba Bersih |
{{ pnl.laba_bersih|rp }} |
{{ pnl.pct_laba_bersih }}% |
|
|
Penarikan Owner |
{% if pnl.prive %}{{ pnl.prive|rp }}{% else %}-{% endif %} |
{{ pnl.pct_prive }}% |
{{ barSub(pnl.pct_prive, '#8b5cf6') }}
|
|
Laba Ditahan |
{{ pnl.laba_tahan|rp }} |
{{ pnl.pct_laba_tahan }}% |
|
{% if cf_masuk_rek or cf_keluar_kat %}
● Masuk per rekening
·
● Keluar per jenis pengeluaran
{% endif %}
Uang Masuk
{{ cf.masuk|rp }}
Uang Keluar
{{ cf.keluar|rp }}
{% if net_cf >= 0 %}
Net Cashflow Periode Ini
+{{ net_cf|rp }}
Masuk − Keluar
{% else %}
Net Cashflow Periode Ini
{{ net_cf|rp }}
Masuk − Keluar
{% endif %}
Saldo Kas & Bank
{{ cf.saldo|rp }}
Saldo kumulatif semua rekening
| Tanggal |
Keterangan |
Tipe |
Kategori |
Jumlah |
{% for t in transaksi_baru %}
| {{ t.tanggal|tgl }} |
{{ t.keterangan }} |
{% if t.tipe_tx == 'PEMASUKAN' %}Pemasukan
{% elif t.tipe_tx == 'PENGELUARAN' %}Pengeluaran
{% elif t.tipe_tx == 'PELUNASAN' %}Pelunasan
{% elif t.tipe_tx == 'TRANSFER' %}Transfer
{% else %}Jurnal{% endif %}
|
{% if t.kategori == 'OPERASIONAL' %}Operasional
{% elif t.kategori == 'INVESTASI' %}Investasi
{% elif t.kategori == 'PENDANAAN' %}Pendanaan
{% else %}{{ t.kategori or '-' }}{% endif %}
|
{{ t.total|rp }} |
{% else %}
| Belum ada transaksi |
{% endfor %}
{% endif %}{# end normal dashboard (else) #}