{% extends "base.html" %} {% block title %}Inventory - FinansialApp{% endblock %} {% block page_title %}Inventory / Produk{% endblock %} {% block content %}
{% include '_stok_help_modal.html' %}
{% if kategori %}{% endif %} {% if q %}Reset Cari{% endif %} {% if kategori %}Hapus Filter{% endif %}
{% if can.inventory_input %}
{% if can.inventory_hpp %} Jika ingin input banyak barang sekaligus, isi via Excel lalu upload ulang ke tabel {% endif %} {% if can.inventory_hpp %} {% endif %}
{% endif %}
{% if can.inventory_hpp %}
PRODUK TERLACAK
{{ nilai_produk|rp }}
PERSEDIAAN NON-SKU
{{ nilai_non_sku|rp }}
TOTAL VALUASI
{{ nilai_inventory|rp }}
LEDGER PERSEDIAAN 113*
{{ saldo_persediaan|rp }}
{% else %}
Harga beli, HPP, valuasi persediaan, dan nilai non-SKU disembunyikan oleh pengaturan hak akses.
{% endif %} {% if can.inventory_hpp and selisih_persediaan|abs >= 0.01 %}
{% if saldo_persediaan < -0.01 %} Nilai persediaan tercatat minus. Nilai HPP yang dicatat lebih besar daripada nilai persediaan yang tersedia. Silakan periksa kembali dan tambahkan transaksi pembelian bahan baku / produk yang belum tercatat. {% else %} Ada selisih nilai persediaan. Total produk terlacak dan persediaan non-SKU {{ nilai_inventory|rp }}, sedangkan nilai persediaan yang tercatat {{ saldo_persediaan|rp }}. Jika diperlukan, gunakan Upload Excel dengan mode Koreksi Stok Terkini Hasil Opname. {% endif %}
{% endif %} {% if negative_produk %}
{{ negative_produk|length }} produk memiliki stok minus. Penjualan tetap dicatat, tetapi pembelian atau koreksi stok yang tertinggal perlu dilengkapi: {% for p in negative_produk %}{{ p.nama }} ({{ p.stok|qty }} {{ p.satuan }}){% endfor %}
{% endif %} {% if can.inventory_input and can.inventory_hpp %} {% endif %} {% set low = produk | selectattr('stok', 'le', produk | map(attribute='min_stok') | list | first if produk else 0) | list %} {% set low_list = [] %} {% for p in produk %}{% if p.stok >= 0 and p.min_stok > 0 and p.stok <= p.min_stok %}{% set _ = low_list.append(p) %}{% endif %}{% endfor %} {% if low_list %}
{{ low_list|length }} produk memiliki stok di bawah minimum: {% for p in low_list %}{{ p.nama }} ({{ p.stok|qty }} {{ p.satuan }}){% endfor %}
{% endif %} {% if can.inventory_hpp and (nilai_non_sku or non_sku_rows or can.inventory_input) %}
Persediaan Non-SKU {{ nilai_non_sku|rp }}
Bahan umum tanpa stok per-unit. Panel ini sengaja ditaruh di atas supaya tidak tenggelam oleh daftar SKU.
{% if can.inventory_input %} Beli Non-SKU {% endif %} {% if non_sku_rows %} Riwayat Lengkap {% endif %}
{% if non_sku_rows %}
{% for n in non_sku_rows[:3] %} {% endfor %}
{{ n.tanggal|tgl }} {{ n.deskripsi }} {{ '+' if n.nilai_delta > 0 else '' }}{{ n.nilai_delta|rp }}
{% endif %}
{% endif %} {# Section Non-SKU dipindah ke bawah list SKU, lihat akhir file #} {% macro stok_row_cells(p, can, session) %} {{ p.kode }} {{ p.nama }} {% if p.kategori %} {{ p.kategori }} {% else %} - {% endif %} {{ p.varian or '-' }} {{ p.satuan }} {% if can.inventory_hpp %} {{ p.harga_beli|rp }} {% endif %} {{ p.harga_jual|rp }} {{ p.stok|qty }} {% if p.stok < 0 or (p.min_stok > 0 and p.stok <= p.min_stok) %} {% endif %} {{ p.min_stok|qty }}
{% if can.inventory_input %} {% endif %} {% if can.expense_input %} {% endif %} {% if can.inventory_input %} {% endif %} {% if can.inventory_input and session.role in ('ADMIN','FINANCE') %}
{% endif %}
{% endmacro %}
{% if can.inventory_hpp %} {% endif %} {% for nama, members in grouped %} {% if members|length == 1 %} {% set p = members[0] %} {{ stok_row_cells(p, can, session) }} {% else %} {% set gidx = loop.index %} {% set hj = members|map(attribute='harga_jual')|list %} {% set hb = members|map(attribute='harga_beli')|list %} {% set total_stok = members|sum(attribute='stok') %} {% set ns = namespace(neg=false, low=false) %} {% for m in members %}{% if m.stok < 0 %}{% set ns.neg = true %}{% endif %}{% if m.min_stok > 0 and m.stok <= m.min_stok %}{% set ns.low = true %}{% endif %}{% endfor %} {% if can.inventory_hpp %} {% endif %} {% for p in members %} {{ stok_row_cells(p, can, session) }} {% endfor %} {% endif %} {% else %} {% endfor %}
Kode Nama Produk Kategori Varian SatuanHarga BeliHarga Jual Stok Min. Stok Aksi
{{ nama }} {{ members|length }} varian {% if members[0].kategori %}{{ members[0].kategori }}{% else %}-{% endif %} {{ members|length }} varian -{% if hb|min == hb|max %}{{ hb|min|rp }}{% else %}{{ hb|min|rp }} - {{ hb|max|rp }}{% endif %}{% if hj|min == hj|max %}{{ hj|min|rp }}{% else %}{{ hj|min|rp }} - {{ hj|max|rp }}{% endif %} {{ total_stok|qty }} {% if ns.neg or ns.low %}{% endif %} - klik untuk buka
{% if q or kategori %}Tidak ada produk untuk filter yang dipilih{% else %}Belum ada produk{% endif %}
{# ── Riwayat Non-SKU (di BAWAH list produk, collapsed by default) ── #} {% if can.inventory_hpp and non_sku_rows %}
{% for n in non_sku_rows %} {% endfor %}
TanggalDeskripsiTransaksiPerubahan Nilai
{{ n.tanggal|tgl }} {{ n.deskripsi }} {% if n.jurnal_id %}{{ n.nomor_tx or ('#' ~ n.jurnal_id) }}{% else %}-{% endif %} {{ '+' if n.nilai_delta > 0 else '' }}{{ n.nilai_delta|rp }}
{% endif %} {% if can.inventory_input %} {% if can.inventory_hpp %} {% endif %} {% endif %} {% endblock %} {% block scripts %} {% if session.role in ('ADMIN','FINANCE','OPERATOR') %} {% endif %} {% endblock %}