{{ viewTitles[currentView] }}
Akses: {{ userRole }}Sistem Berhasil Diperbarui!
Queen POS Anda telah ditingkatkan ke versi terbaru v{{ currentAppVersion }}.Ringkasan Bisnis
Rp {{ formatNumber(dashData.omzetHariIni) }}
{{ dashData.transaksiHariIni }} Nota
Rp {{ formatNumber(dashData.hutangPO) }}
{{ dashData.stokMenipis }} Item
Tren Penjualan (7 Hari Terakhir)
Produk Terlaris (Bulan Ini)
Rp {{ formatNumber(dashData.labaHariIni) }}
Pembayaran (Hari Ini)
5 Transaksi Terakhir
| No. Nota | Waktu | Pelanggan | Pembayaran | Total |
|---|---|---|---|---|
| {{ trx.receiptNumber || trx.id.substring(0,8) }} | {{ trx.dateStr ? trx.dateStr.split(', ')[1] : '-' }} |
{{ trx.customerName || 'Walk-in Customer' }}
|
{{ trx.paymentMethod || 'Tunai' }} | Rp {{ formatNumber(trx.total) }} |
| Belum ada transaksi hari ini. | ||||
Laci Kasir Belum Aktif
Anda belum melakukan pembukaan shift atau laci kasir untuk cabang ini. Silakan masukkan uang modal awal terlebih dahulu untuk mulai berjualan.
{{ product.name || 'Tanpa Nama' }}
{{ product.name || 'Tanpa Nama' }}
Riwayat Pembelian & PO
| No. Invoice / PO | Tanggal | Cabang | PIC | Supplier | Status Barang | Status Bayar | Pembayaran | Total Pembelian | Aksi |
|---|---|---|---|---|---|---|---|---|---|
| {{ po.id }} | {{ po.dateStr }} | {{ getOutletName(po.outletId) || 'Gudang Pusat' }} | {{ po.pic || po.userName || 'Sistem' }} | {{ getSupplierName(po.supplierId) }} | Telah Diterima Retur Sebagian Retur Full Menunggu Brg Tukar Menunggu Kedatangan | {{ po.paymentStatus === 'LUNAS' ? 'Lunas' : 'Hutang / Belum Lunas' }} |
{{ po.paymentHistory[0].method || 'CASH' }}:
Rp {{ formatNumber(po.paymentHistory[0].amount) }}
|
{{ hist.method || 'CASH' }}: Rp {{ formatNumber(hist.amount) }}
{{ po.paymentMethod || 'CASH' }}:
Rp {{ formatNumber(po.paymentStatus === 'LUNAS' ? po.total : (po.paidAmount || 0)) }}
Sisa: Rp {{ formatNumber(po.total - (po.paidAmount || 0)) }}
|
Rp {{ formatNumber(po.total) }} |
|
| Belum ada riwayat pembelian sesuai filter. | |||||||||
Manajemen Keuangan & Arus Kas
Rp {{ formatNumber(financeSalesPayments.reduce((sum, g) => sum + g.total, 0)) }}
METODE: {{ group.method }}
Total: Rp {{ formatNumber(group.total) }}
| Waktu Pembayaran | No. Invoice | Pelanggan | Nominal Masuk |
|---|---|---|---|
| {{ item.date }} {{ item.type }} | {{ item.id }} | {{ item.name }} | Rp {{ formatNumber(item.amount) }} |
Rp {{ formatNumber(financePurchasePayments.reduce((sum, g) => sum + g.total, 0)) }}
METODE: {{ group.method }}
Total: Rp {{ formatNumber(group.total) }}
| Waktu Pembayaran | No. PO | Supplier | Nominal Keluar |
|---|---|---|---|
| {{ item.date }} {{ item.type }} | {{ item.id }} | {{ item.name }} | Rp {{ formatNumber(item.amount) }} |
Rp {{ formatNumber(financeARList.reduce((sum, ar) => sum + getSisaTagihan(ar), 0)) }}
| No. Invoice | Tgl Invoice | Pelanggan | Total Tagihan | Sudah Dibayar | Sisa Piutang (AR) | Aksi |
|---|---|---|---|---|---|---|
| {{ ar.id }} | {{ ar.dateStr || '-' }} | {{ getCustomerName(ar.customerId) || 'Umum' }} | Rp {{ formatNumber(ar.total) }} |
{{ ph.method }}: Rp {{ formatNumber(ph.amount) }}
Total: Rp {{ formatNumber(getActualPaid(ar)) }}
|
Rp {{ formatNumber(getSisaTagihan(ar)) }} | |
| Hore! Tidak ada pelanggan yang berhutang (Piutang Bersih). | ||||||
Rp {{ formatNumber(financeAPList.reduce((sum, ap) => sum + getSisaTagihan(ap), 0)) }}
| No. PO / Invoice | Tgl PO | Supplier | Jatuh Tempo | Total Tagihan | Sudah Dibayar | Sisa Hutang (AP) | Aksi |
|---|---|---|---|---|---|---|---|
| {{ ap.id }} | {{ (ap.dateStr || '').split(',')[0] }} | {{ getSupplierName(ap.supplierId) }} | {{ ap.dueDate || 'Belum Diatur' }} | Rp {{ formatNumber(ap.total) }} |
{{ ph.method }}: Rp {{ formatNumber(ph.amount) }}
Total: Rp {{ formatNumber(getActualPaid(ap)) }}
|
Rp {{ formatNumber(getSisaTagihan(ap)) }} | |
| Bagus! Toko Anda sedang tidak memiliki hutang ke Supplier manapun. | |||||||
Pengaturan Register Kasir
Kelola modal awal, pengeluaran, dan tutup kasir per cabang.
| Perangkat & Info Karyawan | Cabang | Modal Awal | Pengeluaran | Status | Aksi |
|---|---|---|---|---|---|
| Belum ada riwayat shift kasir. | |||||
|
{{ reg.registerName || 'Kasir Utama' }}
{{ reg.cashierName }}
{{ reg.cashierEmail || '-' }}
{{ reg.cashierPhone || '-' }}
Buka: {{ reg.openTimeStr }}
Tutup: {{ reg.closeTimeStr }} |
{{ getOutletName(reg.outletId) }} |
Rp {{ formatNumber(reg.startingCash) }}
|
Rp {{ formatNumber(reg.totalExpenses || 0) }}
|
AKTIF DITUTUP | Laci Terkunci |
Master Metode Pembayaran
| Nama Metode & Detail | Kategori | Potongan MDR | Surcharge (Customer) | Status | Aksi |
|---|---|---|---|---|---|
|
Belum ada metode pembayaran. Klik tombol Tambah Metode untuk memulai. |
|||||
{{ outletName }}{{ methods.length }} Metode Aktif/Nonaktif |
|||||
|
{{ pm.name }}
{{ pm.bankName }}
- {{ pm.accountNumber }}
QR Code Tersedia
|
{{ pm.type }} | {{ pm.mdr || 0 }}% | {{ pm.surchargeType === 'percent' ? (pm.surcharge || 0) + '%' : 'Rp ' + formatNumber(pm.surcharge || 0) }} | {{ pm.isActive ? 'Aktif' : 'Nonaktif' }} | |
Pengaturan Aturan Inventory (Stok)
Atur bagaimana sistem menangani dan membatasi penjualan barang berdasarkan ketersediaan stok fisik.
Negative Inventory (Penjualan Tanpa Stok)
Jika saklar ini DIHIDUPKAN, kasir di menu POS tetap bisa menginput dan menjual barang meskipun sisa stoknya 0. Sisa stok di sistem akan otomatis berubah menjadi minus (-).
Jika saklar ini DIMATIKAN, sistem akan memblokir kasir jika mencoba memasukkan barang yang stoknya sudah habis.
Pengaturan Penomoran Invoice Otomatis
Atur prefix/awalan dan pola penomoran untuk transaksi kasir (POS) maupun Purchase Order (PO).
Invoice POS (Penjualan)
Invoice PO (Pembelian)
Pengaturan Struk (Receipt) & Cetak
Atur tampilan cetakan, sosial media, marketplace, dan Syarat & Ketentuan (T&C).
Informasi & Logo Toko
Kontak & Marketplace
Catatan Kaki & Aturan (T&C)
Promo Khusus E-Receipt (Digital)
Tampilkan banner dan diskon khusus ini hanya di halaman Struk Digital (E-Receipt) yang dilihat pelanggan dari HP mereka.
Live Preview ({{ appSettings.defaultPrintSize || '80mm' }})
| Subtotal | 475.000 |
| PPN (Tax) | 52.250 |
| TOTAL | 527.250 |
| DIBAYAR | 527.250 |
| KEMBALI | 0 |
| No | Deskripsi Produk | SKU | Qty | Harga Satuan | Total |
| 1 |
Baju Kaos Pria Motif Tanjiro
Varian: Maroon - M
|
BKT001-MAROON-M | 5 pcs | Rp 95.000 | Rp 475.000 |
| Subtotal Produk | Rp 475.000 |
| PPN (Tax) | Rp 52.250 |
| TOTAL TAGIHAN | Rp 527.250 |
| DIBAYAR (QRIS) | Rp 527.250 |
| Kembalian | Rp 0 |
| [RETUR] Baju Kaos Pria Motif Tanjiro (1 pcs) Alasan: Tukar ukuran / Cacat |
- Rp 95.000 |
Penerima / Pelanggan,
Hormat Kami,
Pengaturan Metode HPP (Modal)
Pilih bagaimana sistem menghitung Harga Pokok Penjualan (HPP) saat terjadi transaksi. Metode ini menentukan besaran margin laba pada laporan penjualan Anda.
Master Satuan Produk (UOM)
| Nama Satuan | Aksi |
|---|---|
| {{ u.name }} | |
| Data kosong. | |
Master Tag Produk Khusus
| Nama Tag | Aksi |
|---|---|
| {{ t.name }} | |
| Data kosong. | |
Master Grup Identifier (Modifier)
Buat grup opsi tambahan seperti Topping, Level Pedas, Packaging, dll.
| Nama Grup Identifier | Aksi |
|---|---|
| {{ ig.name }} | |
|
Belum ada Grup Identifier. Klik "Tambah Grup" untuk mulai membuat Topping, Varian Rasa, dll. |
|
Level Otorisasi Jabatan (Hak Akses)
{{ isEditingRole ? 'Edit Matriks Hak Akses' : 'Buat Level Akses Baru' }}
| Modul Sistem | Lihat (Read) | Ubah/Hapus (Write) |
|---|---|---|
| {{ mod.name }} |
| ID | Nama Jabatan | Aksi |
|---|---|---|
| #{{ role.id }} | {{ role.name }} |
Manajemen Kredensial User
{{ isEditingUser ? 'Edit Data User' : 'Registrasi User Baru' }}
| Nama Karyawan | Role / Jabatan | Aksi | |
|---|---|---|---|
| {{ u.namaLengkap }} | {{ u.email }} |
{{ getRoleName(u.roleId) }} |
Daftar Induk Produk
| Kode Produk | Foto | Nama Produk | Daftar Varian (Klik Lihat Detail) | HPP (Modal) | Hrg Jual | Aksi |
|---|---|---|---|---|---|---|
| {{ p.sku || 'N/A' }} |
|
{{ p.name || '-' }}
Discontinue
{{ t }}
{{ getCategoryPath(p) }}
|
- Tanpa Varian -
{{ v.name || v.attributes }} ({{ v.variantSku || '-' }})
|
{{ getProductPriceRange(p, 'hpp') }} |
{{ getProductPriceRange(p, 'sell') }}
Promo Induk Aktif
|
|
| Tidak ada produk sesuai pencarian. | ||||||
Database SKU Varian
| Foto | Induk & Kategori | Nama Varian | Kode Varian | HPP (Modal) | Harga Jual | {{ catalogVariantOutletFilter ? 'Stok Outlet' : 'Stok Total' }} |
|---|---|---|---|---|---|---|
|
|
{{ v.parentName }}
{{ v.categoryPath }}
|
{{ v.name }} | {{ v.sku }} | Rp {{ formatNumber(v.hpp) }} |
Rp {{ formatNumber(v.base) }}
Rp {{ formatNumber(v.sell) }}
|
{{ getDisplayVariantStock(v) }} |
| Belum ada varian produk sesuai filter. | ||||||
Struktur Pohon Kategori
| Kategori | Level | Aksi |
|---|---|---|
| {{ cat.name }} | Level {{ cat.treeLevel + 1 }} | |
| Data kosong. | ||
Konfigurasi Label Barcode
| Produk | Tgl Expired | Jumlah | Aksi |
|---|---|---|---|
|
{{ item.name }}
{{ item.variantName }}
{{ item.sku }}
|
|||
| Belum ada antrean produk. |
Live Preview Hasil Cetak
Riwayat Stok Opname
| ID Dokumen | Waktu Eksekusi | Lokasi Cabang | PIC (Petugas) | Catatan Khusus | Status | Aksi |
|---|---|---|---|---|---|---|
| {{ op.id }} | {{ op.dateStr }} | {{ getOutletName(op.outletId) || '-' }} | {{ op.pic }} | {{ op.note || '-' }} | {{ op.status }} | |
| Belum ada riwayat stok opname. Silakan buat dokumen opname baru. | ||||||
Form Penyesuaian Stok (Opname)
Samakan stok di sistem dengan fisik di gudang/toko.
| Produk / Nama Varian | SKU | Stok Sistem | Stok Fisik Aktual | Catatan / Keterangan |
|---|---|---|---|---|
| {{ p.name }} | {{ p.sku || '-' }} | {{ getProductStockAtOutlet(p, invOutletFilter) }} |
Stok Plus! Info Batch Baru:
|
|
| {{ p.name }} - {{ v.name || v.attributes }} | {{ v.variantSku || '-' }} | {{ (v.outletStocks && v.outletStocks[invOutletFilter]) ? v.outletStocks[invOutletFilter] : 0 }} |
Stok Plus! Info Batch Baru:
|
|
| Tidak ada data produk yang sesuai filter. | ||||
Daftar Produk yang Membutuhkan Restock
| Produk / Varian | SKU | Sisa Stok | Batas Minimum | Status |
|---|---|---|---|---|
| {{ alert.name }} | {{ alert.sku }} |
{{ alert.currentStock }} | {{ alert.minStock }} | HABIS TOTAL SEGERA RESTOCK |
|
Semua stok produk Anda dalam kondisi aman! Tidak ada produk yang menyentuh batas minimum stok. |
||||
Rp {{ formatNumber(totalAsetStok) }}
Rp {{ formatNumber(totalPotensiOmset) }}
| Produk / Nama Varian | Harga (Rp) | Stok Fisik Outlet | {{ invOutletFilter ? 'Total Outlet Ini' : 'Total Keseluruhan' }} | ||
|---|---|---|---|---|---|
| HPP (Otomatis/Manual) |
Jual | {{ out.name }} | - | ||
| {{ p.name }} {{ p.sku }} |
Std: {{ formatNumber(p.hppPrice || 0) }}
Avg: {{ formatNumber(p.averageCost || p.hppPrice || 0) }}
|
{{ formatNumber(getEffectiveBasePrice(p)) }} | {{ getProductStockAtOutlet(p, out.id) }} {{ p.uom || 'Pcs' }} | - | {{ invOutletFilter ? getProductStockAtOutlet(p, invOutletFilter) : getBaseTotalStock(p) }} {{ p.uom || 'Pcs' }} |
| {{ p.name }} - {{ v.name || v.attributes || 'Varian '+(index+1) }} {{ v.variantSku || '-' }} |
Std: {{ formatNumber(v.hppPrice || 0) }}
Avg: {{ formatNumber(v.averageCost || v.hppPrice || 0) }}
|
{{ formatNumber(getEffectiveVariantPrice(p, v)) }} | {{ (v.outletStocks && v.outletStocks[out.id]) ? v.outletStocks[out.id] : 0 }} {{ p.uom || 'Pcs' }} | - | {{ invOutletFilter ? (v.outletStocks && v.outletStocks[invOutletFilter] ? v.outletStocks[invOutletFilter] : 0) : getVariantTotalStock(v) }} {{ p.uom || 'Pcs' }} |
| Tidak ada data produk/varian yang sesuai filter. | |||||
Pilih Cabang Terlebih Dahulu
Fitur Alokasi Stok digunakan untuk memantau barang yang sedang berada di meja kasir. Silakan pilih spesifik 1 cabang pada filter di atas untuk melihat datanya.
| Produk / Nama Varian | Analisa Alokasi Stok Outlet Terpilih | ||
|---|---|---|---|
| Stok Fisik (Asli Gudang) | Ditahan (Masuk Kasir) | Tersedia (Bisa Dijual) | |
| {{ p.name }} {{ p.sku }} | {{ getProductStockAtOutlet(p, invOutletFilter) }} {{ p.uom || 'Pcs' }} | {{ getReservedStock(p.sku, invOutletFilter) }} {{ p.uom || 'Pcs' }} | {{ getAvailableStock(p, null, invOutletFilter) }} {{ p.uom || 'Pcs' }} |
| {{ p.name }} - {{ v.name || v.attributes || 'Varian '+(index+1) }} {{ v.variantSku || '-' }} | {{ (v.outletStocks && v.outletStocks[invOutletFilter]) ? v.outletStocks[invOutletFilter] : 0 }} {{ p.uom || 'Pcs' }} | {{ getReservedStock(v.variantSku, invOutletFilter) }} {{ p.uom || 'Pcs' }} | {{ getAvailableStock(p, v, invOutletFilter) }} {{ p.uom || 'Pcs' }} |
| Tidak ada data produk/varian yang sesuai filter. | |||
| Waktu | Ref. Transaksi | Cabang (Outlet) | Nama Item (SKU) | Qty | Status | User / PIC |
|---|---|---|---|---|---|---|
| {{ log.dateStr }} | {{ log.refId }} | {{ log.outletName || 'Gudang Pusat' }} |
{{ log.productName }}
{{ log.sku }}
{{ log.variantName }}
{{ log.sku }}
|
{{ log.qtyChange > 0 ? '+'+log.qtyChange : log.qtyChange }} | {{ log.type === 'OUT' ? 'KELUAR' : (log.type === 'ADJUST' ? 'SESUAI' : 'MASUK') }} | {{ log.userName || log.cashierName || 'Sistem' }} |
| Belum ada riwayat mutasi / Sesuai filter. | ||||||
| Nama Produk & Varian | SKU | Tanggal | Stok Awal | Masuk (In) | Keluar (Out) | Stok Akhir | Aksi / Rincian |
|---|---|---|---|---|---|---|---|
|
{{ log.name }}
{{ log.variantName }}
|
{{ log.sku }} | {{ log.displayDate }} | {{ log.stokAwal }} | {{ log.masuk }} | {{ log.keluar }} | {{ log.stokAkhir }} | - |
| Tidak ada data produk/kartu stok sesuai filter. | |||||||
Database Pelanggan
| Nama | Kontak & Alamat | Membership (Diskon) | Aksi |
|---|---|---|---|
| {{ c.name }} | {{ c.phone }} {{ c.address || '-' }} |
{{ getMembershipName(c.membershipId) }} ({{ getMembershipDiscount(c.membershipId) }}%) | |
| Tidak ada pelanggan yang sesuai dengan pencarian Anda. | |||
Tier Membership
| Nama Tier | Diskon (%) | Aksi |
|---|---|---|
| {{ m.tierName }} | {{ m.discountPercent }}% |
Database Supplier (Pemasok)
| Nama Pemasok | No. Telp/WA | Alamat Pemasok | Aksi |
|---|---|---|---|
| {{ s.name }} | {{ s.phone }} | {{ s.address || '-' }} | |
| Tidak ada data supplier yang sesuai dengan pencarian Anda. | |||
Manajemen Outlet & Pajak
| Kode | Nama Outlet | Pajak (PPN) | Service Charge | Desain Struk | Aksi |
|---|---|---|---|---|---|
| {{ o.code }} | {{ o.name }} {{ o.location }} |
{{ o.taxPercent || 0 }}% | {{ o.serviceChargePercent || 0 }}% |
Riwayat Transfer Barang
Pantau pergerakan stok antar cabang/gudang.
| No. Dokumen | Tanggal Buat | Rute Pengiriman | PIC | Status | Aksi |
|---|---|---|---|---|---|
| {{ tf.id }} | {{ tf.dateStr }} | {{ getOutletName(tf.fromOutlet) }} {{ getOutletName(tf.toOutlet) }} | {{ tf.pic || 'Admin' }} | {{ tf.status }} | |
| Belum ada riwayat transfer barang antar cabang. | |||||
Draft Pengajuan Transfer
| Produk / Nama Varian | SKU | Stok Tersedia | Qty Diajukan |
|---|---|---|---|
| {{ p.name }} | {{ p.sku || '-' }} | {{ getRealAvailableStock(p, null, transferForm.fromOutlet) }} | |
| {{ p.name }} - {{ v.name || v.attributes }} | {{ v.variantSku || '-' }} | {{ getRealAvailableStock(p, v, transferForm.fromOutlet) }} |
Laporan Keuangan
Rp {{ formatNumber(reportFinancialSummary.totalOmset) }}
Rp {{ formatNumber(reportFinancialSummary.totalHpp) }}
Rp {{ formatNumber(reportFinancialSummary.labaBersih) }}
{{ reportFinancialSummary.marginRataRata.toFixed(1) }}%
Rincian per Transaksi
Berdasarkan Filter| INVOICE & WAKTU | CABANG | OMSET BERSIH | MODAL HPP | LABA (PROFIT) | MARGIN |
|---|---|---|---|---|---|
|
{{ trx.id }}
{{ trx.dateStr }}
|
{{ getOutletName(trx.outletId) || 'Global' }} | Rp {{ formatNumber(trx.omsetReport !== undefined ? trx.omsetReport : trx.total) }} | Rp {{ formatNumber(trx.totalHppNota) }} | Rp {{ formatNumber(trx.profit) }} | {{ (trx.margin || 0).toFixed(1) }}% |
| Belum ada riwayat keuangan pada filter ini. | |||||
Top 10 Produk Paling Cepat Laku (Berdasarkan Qty)
Distribusi Pendapatan per Kategori Produk
Rekap Metode Pembayaran (Kasir)
Frekuensi Transaksi per Jam (00:00 - 23:59)
(Geser grafik ke kanan/kiri untuk melihat jam lainnya) (Arahkan kursor Anda ke tiang grafik untuk melihat detailnya)
Riwayat Transaksi Penjualan (POS)
| No. Inv | Waktu | Cabang | Kasir / PIC | Pelanggan | Tipe / Kirim | Status | Pembayaran | Total | Aksi Lanjutan |
|---|---|---|---|---|---|---|---|---|---|
| {{ trx.id }} | {{ trx.dateStr }} | {{ getOutletName(trx.outletId) || 'Global/Pusat' }} | {{ trx.cashierName || trx.cashier }} | {{ trx.customer }} |
Kirim
PO
Store
Perlu Diproses
Disiapkan
Dipacking
Dikirim (Ship)
Terkirim
|
{{ trx.paymentStatus || 'LUNAS' }} |
{{ trx.paymentMethod }}: Rp {{ formatNumber(trx.firstPayment !== undefined ? trx.firstPayment : trx.amountReceived) }}
{{ sp.method }}: Rp {{ formatNumber(sp.amount) }}
{{ pay.method }}: Rp {{ formatNumber(pay.amount) }}
Sisa: Rp {{ formatNumber(trx.total - trx.amountReceived) }}
|
Rp {{ formatNumber(trx.total) }} |
|
| Belum ada transaksi / Data tidak ditemukan sesuai filter. | |||||||||
Fulfillment & Pengiriman
New
{{ fulfillmentOrders.new.length }}Pick
{{ fulfillmentOrders.pick.length }}Pack
{{ fulfillmentOrders.pack.length }}Ship
{{ fulfillmentOrders.ship.length }}Hold
{{ fulfillmentOrders.hold ? fulfillmentOrders.hold.length : 0 }}Completed
{{ fulfillmentOrders.completed.length }}| Inv | : | {{ activePrintData.id }} |
| Tgl | : | {{ activePrintData.dateStr }} |
| Kasir | : | {{ activePrintData.cashierName }} |
| Plg | : | {{ activePrintData.customer }} |
| Subtotal Baru | {{ formatNumber(activePrintData.items.filter(item => item.productId !== 'EXCHANGE').reduce((sum, item) => sum + (item.qty * (item.finalPrice || item.sellPrice)), 0)) }} |
| Potongan Tukar | -{{ formatNumber(Math.abs(activePrintData.items.filter(item => item.productId === 'EXCHANGE').reduce((sum, item) => sum + (item.qty * (item.finalPrice || item.sellPrice)), 0))) }} |
| Diskon Item | -{{ formatNumber(activePrintData.discountAmt - (activePrintData.globalDiscountAmt || 0)) }} |
| Diskon Invoice | -{{ formatNumber(activePrintData.globalDiscountAmt) }} |
| PPN | {{ formatNumber(activePrintData.taxAmt || activePrintData.taxAmount) }} |
| Biaya Layanan | {{ formatNumber(activePrintData.surchargeFee) }} |
| TOTAL | Rp {{ formatNumber(activePrintData.total) }} |
| PEMBAYARAN (SPLIT): | |
| - {{ split.method }} | {{ formatNumber(split.amount) }} |
| SISA HUTANG | {{ formatNumber(activePrintData.total - activePrintData.amountReceived) }} |
| STATUS | LUNAS |
| METODE BAYAR | {{ activePrintData.paymentMethod || 'CASH' }} |
| Catatan | {{ activePrintData.paymentNote }} |
| TOTAL DIBAYAR | {{ formatNumber(activePrintData.amountReceived) }} |
| KEMBALI | {{ formatNumber(activePrintData.amountReceived - activePrintData.total) }} |
| SISA HUTANG | {{ formatNumber(activePrintData.total - activePrintData.amountReceived) }} |
{{ activePrintData.dateStr.split(' ')[0] }} Rp {{ formatNumber(activePrintData.firstPayment !== undefined ? activePrintData.firstPayment : (activePrintData.amountReceived - activePrintData.paymentHistory.reduce((a, b) => a + Number(b.amount), 0))) }}
{{ pay.dateStr || pay.date }} Rp {{ formatNumber(pay.amount) }}
Ket: {{ retur.alasan }} - Rp {{ formatNumber(retur.refundAmount) }}
| No | Deskripsi Produk | SKU | Qty | Harga Satuan | Total |
| {{ idx + 1 }} |
TUKAR TAMBAH:
{{ item.name }}
{{ item.name.replace('[SALDO TUKAR] ', '') }}
Ref: {{ item.note }}
Varian: {{ item.variantName }}
- {{ catatan.trim() }}
|
{{ item.variantSku || item.sku || '-' }} | {{ item.qty }} {{ item.uom || 'pcs' }} | {{ item.productId === 'EXCHANGE' ? '- Rp ' + formatNumber(Math.abs(item.finalPrice || item.sellPrice)) : 'Rp ' + formatNumber(item.finalPrice || item.sellPrice) }} | {{ item.productId === 'EXCHANGE' ? '- Rp ' + formatNumber(Math.abs(item.qty * (item.finalPrice || item.sellPrice))) : 'Rp ' + formatNumber(item.qty * (item.finalPrice || item.sellPrice)) }} |
| Subtotal Produk | Rp {{ formatNumber(activePrintData.items.filter(i => i.productId !== 'EXCHANGE').reduce((sum, i) => sum + (i.qty * (i.finalPrice || i.sellPrice)), 0)) }} |
| Potongan Tukar Tambah | - Rp {{ formatNumber(Math.abs(activePrintData.items.filter(i => i.productId === 'EXCHANGE').reduce((sum, i) => sum + (i.qty * (i.finalPrice || i.sellPrice)), 0))) }} |
| PPN (Tax) | Rp {{ formatNumber(activePrintData.taxAmt || activePrintData.taxAmount) }} |
| PPN (Tax) | Rp 0 |
| Biaya Layanan | Rp {{ formatNumber(activePrintData.surchargeFee) }} |
| TOTAL TAGIHAN | Rp {{ formatNumber(activePrintData.total) }} |
| RINCIAN PEMBAYARAN (SPLIT): | |
| - {{ split.method }} | Rp {{ formatNumber(split.amount) }} |
| Sisa Hutang | Rp {{ formatNumber(activePrintData.total - activePrintData.amountReceived) }} |
| Status Pembayaran | LUNAS |
| Metode Pembayaran | {{ activePrintData.paymentMethod || 'CASH' }} |
| Catatan Transaksi | {{ activePrintData.paymentNote }} |
| TOTAL DIBAYAR | Rp {{ formatNumber(activePrintData.amountReceived) }} |
| Kembalian | Rp {{ formatNumber(activePrintData.amountReceived - activePrintData.total) }} |
| Sisa Hutang | Rp {{ formatNumber(activePrintData.total - activePrintData.amountReceived) }} |
| Tanggal | Metode | Nominal Bayar |
|---|---|---|
| {{ activePrintData.dateStr.split(' ')[0] }} | {{ activePrintData.paymentMethod }} | Rp {{ formatNumber(activePrintData.firstPayment !== undefined ? activePrintData.firstPayment : (activePrintData.amountReceived - activePrintData.paymentHistory.reduce((a, b) => a + Number(b.amount), 0))) }} |
| {{ pay.dateStr || pay.date }} | {{ pay.method }} | Rp {{ formatNumber(pay.amount) }} |
Ket: {{ retur.alasan }} - Rp {{ formatNumber(retur.refundAmount) }}
Penerima / Pelanggan,
Hormat Kami,
| NAMA BARANG | SKU | QTY |
|---|---|---|
|
{{ i.name }}
Varian: {{ i.variantName }}
Catatan: {{ i.note }}
|
{{ i.variantSku || i.sku || '-' }} | {{ i.qty }} {{ i.uom || 'Pcs' }} |
{{ (appSettings && appSettings.storeName) ? appSettings.storeName : 'QUINSAH COLLECTION' }}
{{ (appSettings && appSettings.storeAddress) ? appSettings.storeAddress : getOutletAddress(activePrintData.outletId) }}
| No | Deskripsi Barang | SKU | Qty | Harga Beli | Subtotal |
|---|---|---|---|---|---|
| {{ idx + 1 }} |
{{ item.productName }}
Varian: {{ item.variantName }}
|
{{ item.variantSku || item.sku || '-' }} | {{ item.qty }} | Rp {{ formatNumber(item.price) }} | Rp {{ formatNumber(item.qty * item.price) }} |
| Subtotal: | Rp {{ formatNumber(activePrintData.items.reduce((s,i) => s + (i.qty * i.price), 0)) }} |
| Pajak (PPN) ({{activePrintData.taxPercent}}%): | Rp {{ formatNumber(activePrintData.taxAmount || 0) }} |
| TOTAL PEMBELIAN: | Rp {{ formatNumber(activePrintData.total) }} |
|
Riwayat Pembayaran:
{{ hist.date.split(',')[0] }} - {{ hist.method || 'CASH' }}
Rp {{ formatNumber(hist.amount) }}
|
|
| Sisa Hutang: | Rp {{ formatNumber(activePrintData.total - (activePrintData.paidAmount || 0)) }} |
| Tanggal | Nama Barang | Qty | Status/Tindakan | Potongan Hutang |
| {{ ret.date ? ret.date.split(',')[0] : '-' }} |
{{ ret.productName || 'Produk' }} Ket: {{ ret.alasan }} |
{{ ret.qtyRetur }} | {{ ret.action || 'Refund' }} | {{ ret.refundAmount > 0 ? '- Rp ' + formatNumber(ret.refundAmount) : 'Rp 0' }} |
Disetujui Oleh,
Manajemen Quinsah
Pihak Supplier,
{{ getSupplierName(activePrintData.supplierId) }}