๐ Daftar Isi
1. Pendahuluan
Tentang UMI Cell
UMI Cell adalah sistem manajemen Konter berbasis web yang dirancang untuk memudahkan pengelolaan bisnis HP, meliputi:
- โ Manajemen Produk dengan Multi-Cabang & Multi-Harga
- โ Transaksi Pembelian & Penjualan
- โ Service & Reparasi HP dengan Tracking Status
- โ Portal Customer untuk Cek Status Service & History Transaksi
- โ Dashboard Admin dengan Monitoring Real-time
- โ Manajemen Pelanggan & Supplier
- โ Laporan Laba Rugi, Stok, dan Kinerja
- โ QR Code untuk Produk & Transaksi
- โ Import Produk via Excel
Kebutuhan Sistem
| Komponen | Spesifikasi |
|---|---|
| Web Server | Apache/Nginx + PHP 8.1+ |
| Database | MySQL 5.7+ / MariaDB |
| Browser | Chrome, Firefox, Edge (versi terbaru) |
| Kamera (Optional) | Untuk fitur scan QR Code |
2. Login & Akses
Cara Login
Email dan Password
Tipe User & Hak Akses
| Role | Akses & Wewenang |
|---|---|
| Super Admin | Akses penuh ke semua fitur, manage user & cabang |
| Admin | Kelola transaksi, produk, service, dan laporan |
| Kasir | Input transaksi penjualan & pembelian |
| Teknisi | Kelola service, update status service |
| Customer | Cek status service |
3. Dashboard & Portal Customer
3.1 Dashboard Admin
Dashboard Admin merupakan halaman utama yang ditampilkan setelah login sebagai Admin, Super Admin, Kasir, atau Teknisi. Dashboard menyediakan ringkasan informasi penting untuk monitoring bisnis.
Informasi di Dashboard Admin
1. Produk yang Sudah Mencapai Batas Minimum Stok
Section ini menampilkan tabel dengan kartu merah (danger) yang berisi informasi produk yang stoknya sudah rendah atau mencapai batas minimum. Menampilkan maksimal 10 produk dengan stok terendah.
| Kolom | Informasi |
|---|---|
| # | Nomor urut |
| Kode Produk | Format: B-0001, B-0002, dst (auto generated dari ID produk) |
| Nama Produk | Nama lengkap produk |
| Cabang | Nama cabang tempat produk berada |
| Stok Saat Ini | Jumlah stok tersedia (badge merah dengan unit) |
| Stok Minimum | Batas minimum stok yang ditentukan |
| Status | Badge status: - Hitam "Habis": Stok = 0 - Merah "Di Bawah Minimum": Stok kurang dari Min Stock - Kuning "Mencapai Minimum": Stok sama dengan Min Stock |
2. Peringkat Produk Terlaris
Section ini menampilkan tabel dengan kartu hijau (success) yang berisi 10 produk dengan penjualan tertinggi.
| Kolom | Informasi |
|---|---|
| # | Ranking (1-10) |
| Produk | Nama produk (bold) dan nama merek (kecil abu-abu di bawahnya) |
| Terjual | Total quantity yang terjual (badge hijau) |
| Pendapatan | Total pendapatan dari produk tersebut (dalam Rupiah) |
3. Peringkat Customer
Section ini menampilkan tabel dengan kartu biru (info) yang berisi 10 customer dengan total belanja tertinggi.
| Kolom | Informasi |
|---|---|
| # | Ranking (1-10) |
| Customer | Nama customer (bold) dan nomor WhatsApp (kecil abu-abu di bawahnya) |
| Transaksi | Total jumlah transaksi (badge biru dengan format: 5x, 10x, dst) |
| Total Belanja | Total uang yang telah dibelanjakan (dalam Rupiah) |
- Cek section "Produk Mencapai Batas Minimum Stok" setiap hari untuk mengetahui produk yang perlu di-restock
- Gunakan data "Peringkat Produk Terlaris" untuk strategi stocking - pastikan produk laris selalu tersedia
- Manfaatkan data "Peringkat Customer" untuk program loyalitas atau promo khusus customer setia
- Dashboard ini otomatis update setiap kali ada transaksi baru
3.2 Dashboard Customer
Sistem ini menyediakan halaman khusus untuk customer, dimana customer dapat mengakses informasi penting terkait transaksi dan service mereka secara mandiri tanpa perlu menghubungi toko.
Cara Customer Mengakses Dashboard
Email dan Password yang diberikan
Informasi di Dashboard Customer
- Total Pembelian - Jumlah transaksi pembelian yang pernah dilakukan
- Total Belanja - Total uang yang telah dibelanjakan (dalam Rupiah)
- Total Service - Jumlah service yang pernah dilakukan
- Service Aktif - Jumlah service yang sedang dalam proses (belum selesai)
Section Service Aktif
Jika customer memiliki service yang sedang dikerjakan, akan ditampilkan dalam bentuk kartu khusus dengan background gradient ungu yang menarik. Setiap kartu service aktif menampilkan:
- Merek & Model Device - Contoh: Samsung Galaxy A12
- Nomor Service - Kode unik untuk tracking
- Keluhan - Masalah yang dilaporkan customer
- Diagnosa - Hasil pemeriksaan teknisi (jika sudah ada)
- Tanggal Service - Kapan barang masuk
- Status - Status terkini (badge putih di tengah kartu)
- Tombol "Lihat Detail" - Untuk melihat informasi lengkap service
Section Riwayat Pembelian
Menampilkan 5 transaksi pembelian terakhir. Setiap item menampilkan:
- Nomor Invoice - Nomor transaksi pembelian
- Tanggal & Waktu - Kapan pembelian dilakukan
- Nama Cabang - Lokasi toko tempat pembelian
- Produk Dibeli - Daftar produk dengan quantity (maksimal 3 produk ditampilkan, sisanya "+X lainnya")
- Total Pembayaran - Jumlah yang dibayarkan (dengan warna ungu)
- Metode Pembayaran - Badge hijau menampilkan metode (Cash/Transfer/dll)
Section Riwayat Service
Menampilkan 5 service terakhir (semua status). Setiap item menampilkan:
- Merek & Model Device - HP yang diservice
- Nomor Service - Kode tracking
- Tanggal Service - Kapan barang masuk
- Keluhan - Deskripsi masalah (dipotong 40 karakter)
- Status - Badge berwarna sesuai status:
- ๐ก Kuning (Warning) - Menunggu Diagnosa
- ๐ต Biru (Info) - Dalam Pengerjaan
- โซ Abu-abu (Secondary) - Menunggu Sparepart
- ๐ข Hijau (Success) - Selesai / Diambil
- ๐ด Merah (Danger) - Dibatalkan
- Total Biaya - Jika sudah ada (dengan warna ungu)
- Tombol "Detail" - Untuk melihat informasi lengkap
Section Informasi Kontak
Menampilkan data profil customer:
- Nama - Nama lengkap customer
- WhatsApp - Nomor telepon/WA
- Email - Alamat email
- Alamat - Alamat lengkap customer
Keuntungan Dashboard Customer
- Tidak perlu datang ke toko atau telepon untuk cek status service
- Dapat memantau progress service kapan saja, 24/7
- Melihat semua riwayat pembelian dan service di satu tempat
- Akses mudah ke history pembelian untuk keperluan garansi
- Lebih transparan dan meningkatkan kepercayaan
- Statistik lengkap tentang total belanja dan service
- Mengurangi telepon/chat customer yang menanyakan status service
- Meningkatkan kepuasan dan loyalitas customer
- Memperkuat citra profesional toko
- Efisiensi waktu staff untuk fokus pada pekerjaan lain
- Customer dapat self-service untuk mengecek informasi mereka
- Setiap customer harus memiliki akun (email & password) untuk bisa login
- Admin harus membuat akun customer saat menambah data customer baru
- Customer hanya bisa melihat data milik mereka sendiri (privacy terjaga)
- Teknisi harus rajin update status service agar customer mendapat informasi akurat
- Dashboard menampilkan maksimal 5 transaksi dan 5 service terakhir di halaman utama
4. Data Master
4.1 Kategori Produk
Pengelompokan produk berdasarkan jenis (Smartphone, Aksesoris, Sparepart, dll)
Menambah Kategori
- Nama Kategori - Wajib diisi (contoh: "Smartphone")
- Deskripsi - Wajib diisi (deskripsi kategori)
4.2 Merek
Daftar merek produk (Samsung, Xiaomi, iPhone, Oppo, dll)
Menambah Merek
4.3 Supplier
Data pemasok produk
Menambah Supplier
- Nama Supplier - Wajib
- NO WhatsApp - Wajib
- Alamat - Wajib
- Email - Opsional
4.4 Customer
Database pelanggan
Menambah Customer
- Nama Customer - Wajib
- NO WhatsApp - Wajib
- Alamat - Wajib
- Email - Wajib
4.5 Cabang (Branch)
Data cabang toko (untuk multi-branch)
Menambah Cabang
- Nama Cabang - Wajib
- Alamat - Wajib
- NO WhatsApp - Wajib
4. Manajemen Produk
4.1 Tambah Produk Manual
Fitur produk menggunakan sistem Multi-Cabang dengan Stok & Harga per Cabang
๐ Tab 1: Data Produk
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Nama Produk | Text | โ Ya | Nama lengkap produk |
| Kategori | Dropdown | โ Ya | Pilih kategori dari master |
| Merek | Dropdown | โ Ya | Pilih merek dari master |
| Satuan Unit | Text | โ Ya | Contoh: pcs, box, unit |
| Minimal Stok | Number | โ Ya | Batas minimum stok (min: 0) |
| Deskripsi | Textarea | โ Tidak | Deskripsi produk |
๐ฆ Tab 2: Stok per Cabang
Tambahkan stok untuk setiap cabang:
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Cabang | Dropdown | โ Ya | Pilih cabang |
| Jumlah Stok | Number | โ Ya | Qty stok (min: 0) |
- Minimal 1 stok cabang harus ditambahkan
- Tidak boleh ada duplikasi cabang yang sama
- Cabang di Tab 2 HARUS sama dengan cabang di Tab 3
๐ฐ Tab 3: Harga per Cabang
Tambahkan harga untuk setiap cabang:
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Cabang | Dropdown | โ Ya | Pilih cabang (harus sama dengan Tab 2) |
| Harga Beli | Number | โ Ya | Modal/HPP produk (min: 0) |
| Harga Jual | Number | โ Ya | Harga jual ke customer (min: 0) |
- Minimal 1 harga cabang harus ditambahkan
- Tidak boleh duplikasi cabang
- Cabang di Tab 3 HARUS sinkron dengan Tab 2
4.2 Import Produk dari Excel
- Nama Produk - Wajib
- Kategori - Nama kategori yang sudah ada di master
- Merek - Nama merek yang sudah ada di master
- Unit - Satuan (pcs, box, dll)
- Cabang - Nama cabang
- Harga Beli - Harga modal
- Harga Jual - Harga jual
- Stok - Jumlah stok
- Stok Minimal - Batas minimum
- Deskripsi - Opsional
- Pastikan kategori dan merek sudah ada di database
- Pastikan cabang sudah dibuat
- Format angka harus numerik (tidak boleh ada huruf)
- Tidak boleh ada data duplikat
- Barcode akan digenerate otomatis oleh sistem
4.3 Scan QR Code Produk
- Tab "Input Manual" - Ketik/paste barcode lalu Enter
- Tab "Scan dengan Kamera" - Aktifkan kamera dan arahkan ke QR Code
4.4 Download QR Code Produk
4.5 Detail Produk (Show)
Halaman detail produk menampilkan:
- โ QR Code produk (dapat diunduh)
- โ Informasi: Nama, Kategori, Merek, Unit, Min Stock, Deskripsi
- โ
Total Stok - Dengan indikator warna:
- ๐ข Hijau: Stok aman (โฅ min stock)
- ๐ก Kuning: Stok rendah (< min stock)
- ๐ด Merah: Stok habis (0)
- โ Nilai Stok - Total harga beli ร quantity
- โ Tabel Stok per Cabang - Stok, status, nilai per cabang
- โ Tabel Harga per Cabang - Harga beli, jual, margin (Rp & %), tanggal efektif
- โ Statistik - Total stok, nilai total, tersedia di berapa cabang
Margin (Rp) = Harga Jual - Harga Beli
Margin (%) = ((Harga Jual - Harga Beli) / Harga Beli) ร 100%
Nilai Total Stok = Harga Beli ร Quantity
5. Transaksi Pembelian
5.1 Buat Transaksi Pembelian
๐ Form Informasi Pembelian
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| No. Pembelian | Text | - | Auto-generate, readonly |
| Supplier | Dropdown | โ Ya | Pilih dari master supplier |
| Cabang | Dropdown | โ Ya | Cabang tujuan pembelian |
| Tanggal Pembelian | Date | โ Ya | Default: hari ini |
| Catatan | Textarea | โ Tidak | Catatan tambahan |
๐ฆ Metode 1: Pilih Produk (Tab 1)
๐ท Metode 2: Scan QR Code (Tab 2)
๐ Tabel Detail Produk
| Kolom | Keterangan |
|---|---|
| Produk | Nama produk (display only) |
| Stok | Stok tersedia di cabang (display only) |
| Qty | Jumlah yang dibeli (editable, min: 1) |
| Harga | Harga beli per unit (editable, min: 0) |
| Subtotal | Qty ร Harga (auto calculate) |
| Aksi | Tombol hapus baris |
- Supplier dan Cabang wajib dipilih
- Minimal 1 produk harus ditambahkan
- Total pembelian harus > 0
5.2 Halaman Index Pembelian
Menampilkan daftar semua pembelian dengan kolom:
- No. Pembelian
- Tanggal
- Supplier
- Cabang
- Total
- Status (Badge: Pending๐ก, Completed๐ข, Cancelled๐ด)
- User (yang input)
- Aksi (Detail, Edit, Delete)
5.3 Detail Pembelian (Show)
Menampilkan informasi lengkap:
- QR Code pembelian (dapat diunduh JPG)
- Tabel detail produk yang dibeli
- Informasi pembelian lengkap
- Tombol:
6. Transaksi Penjualan
6.1 Buat Transaksi Penjualan
๐ Form Informasi Penjualan
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| No. Penjualan | Text | - | Auto-generate, readonly |
| Cabang | Dropdown | โ Ya | Cabang penjualan |
| Customer | Dropdown | โ Tidak | Default: Umum |
| Tanggal Penjualan | Date | โ Ya | Default: hari ini |
| Metode Pembayaran | Dropdown | โ Ya | cash, transfer, credit |
| Catatan | Textarea | โ Tidak | Catatan tambahan |
๐ณ Metode Pembayaran
| Metode | Badge | Keterangan |
|---|---|---|
| Tunai (cash) | Pembayaran tunai | |
| Transfer (transfer) | Transfer bank | |
| Kredit (credit) | Hutang/tempo |
๐ฆ Metode Input Produk
Tab 1: Pilih Produk - Dropdown select produk
Tab 2: Scan QR Code - Input manual atau scan dengan kamera
๐ Tabel Detail Produk Penjualan
| Kolom | Keterangan |
|---|---|
| Produk | Nama produk |
| Stok | Stok tersedia |
| Qty | Jumlah jual (max = stok tersedia) |
| Harga | Harga jual per unit (editable) |
| Diskon | Diskon per item (min: 0) |
| Subtotal | (Qty ร Harga) - Diskon |
| Aksi | Hapus baris |
๐ฐ Kalkulasi Total Penjualan
| Field | Tipe | Keterangan |
|---|---|---|
| Subtotal | Display | Sum dari semua subtotal items |
| Diskon | Number | Diskon global (opsional, min: 0) |
| Pajak | Number | Pajak global (opsional, min: 0) |
| Total Pembayaran | Display | Subtotal - Diskon + Pajak |
Subtotal Item = (Qty ร Harga) - Diskon Item
Subtotal = Sum dari semua Subtotal Item
Total Pembayaran = Subtotal - Diskon Global + Pajak
- Cabang dan Metode Pembayaran wajib dipilih
- Minimal 1 produk harus ditambahkan
- Qty tidak boleh melebihi stok tersedia
6.2 Detail Penjualan (Show)
Menampilkan:
- Detail produk yang dijual
- Total: Subtotal, Diskon, Pajak, Total
- Informasi penjualan lengkap
- QR Code penjualan (download JPG)
- Tombol:
7. Manajemen Stok
Modul manajemen stok digunakan untuk monitoring pergerakan stok dan melakukan stock opname (inventarisasi fisik). Fitur ini membantu menjaga akurasi data stok dengan kondisi fisik barang di toko.
7.1 Pergerakan Stok (Stock Movement)
Halaman pergerakan stok menampilkan histori/riwayat semua transaksi yang mempengaruhi jumlah stok produk. Halaman ini bersifat read-only (hanya untuk melihat data, tidak ada input manual).
Akses Menu
๐ Kolom yang Ditampilkan
| Kolom | Keterangan |
|---|---|
| No | Nomor urut |
| Tanggal | Tanggal & waktu terjadinya pergerakan stok |
| Produk | Nama produk yang stoknya berubah |
| Cabang | Cabang tempat stok berubah |
| Tipe | (in), (out), atau (adjustment) |
| Qty | Jumlah perubahan stok (dengan tanda + untuk masuk, - untuk keluar) |
| Referensi |
Sumber transaksi: , , atau |
| Catatan | Keterangan tambahan (jika ada) |
| User | User yang melakukan transaksi |
๐ Filter Data
Gunakan filter untuk mempermudah pencarian data:
| Filter | Keterangan |
|---|---|
| Produk | Filter berdasarkan produk tertentu (dropdown) |
| Cabang | Filter berdasarkan cabang (dropdown) |
| Tipe |
Filter berdasarkan tipe pergerakan: - Masuk (in) - Keluar (out) - Penyesuaian (adjustment) |
| Dari Tanggal | Tanggal awal periode (date picker) |
| Sampai Tanggal | Tanggal akhir periode (date picker) |
๐ Jenis-jenis Pergerakan Stok
| Sumber Transaksi | Tipe | Keterangan |
|---|---|---|
| Pembelian | Stok bertambah dari pembelian barang ke supplier | |
| Penjualan | Stok berkurang karena terjual ke customer | |
| Stock Opname | Penyesuaian stok dari hasil stock opname (bisa + atau - tergantung selisih) |
- Audit Trail: Semua perubahan stok tercatat dan dapat dilacak
- Tracking Riwayat: Melihat histori stok per produk atau per cabang
- Analisa Pergerakan: Identifikasi produk fast-moving (laku cepat) atau slow-moving (laku lambat)
- Deteksi Anomali: Monitoring pola pergerakan stok yang tidak normal
7.2 Stock Opname (Inventarisasi Fisik)
Stock opname adalah proses menghitung fisik barang di toko dan menyesuaikannya dengan data sistem. Dilakukan secara berkala untuk memastikan akurasi data.
Akses Menu
Halaman Index Stock Opname
Menampilkan daftar semua stock opname yang pernah dilakukan:
| Kolom | Keterangan |
|---|---|
| No | Nomor urut |
| No. Opname | Nomor unik SO (format: OPYYYYMMDD0001) |
| Tanggal | Tanggal pelaksanaan stock opname |
| Cabang | Cabang yang di-opname |
| Jumlah Item | Jumlah produk yang memiliki selisih |
| Status | , , atau |
| User | User yang melakukan SO |
| Aksi | Detail, Edit, Hapus |
Membuat Stock Opname Baru
๐ Panel Kanan: Informasi Stock Opname
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| No. Opname | Text | - | Auto-generate (readonly) |
| Cabang | Dropdown | โ Ya | Pilih cabang yang akan di-opname |
| Tanggal Opname | Date | โ Ya | Default: hari ini |
| Catatan | Textarea | โ Tidak | Keterangan SO (contoh: "SO Bulanan Januari 2026") |
| Total Item dengan Selisih | Display | - | Auto calculate (contoh: "5 item") |
๐ฆ Panel Kiri: Tabel Detail Produk
Setelah klik "Muat Produk", semua produk dari cabang akan ditampilkan dalam tabel:
| Kolom | Keterangan |
|---|---|
| No | Nomor urut |
| Produk | Nama produk - Merek (readonly) |
| Satuan | Unit produk (readonly, contoh: pcs, box) |
| Stok Sistem | Stok yang tercatat di database (readonly, badge biru) |
| Stok Fisik | Input hasil hitung fisik (editable, default = stok sistem) |
| Selisih |
Auto calculate: Stok Fisik - Stok Sistem Warna badge: ๐ข jika positif (kelebihan) ๐ด jika negatif (kekurangan) โช jika tidak ada selisih |
| Catatan | Input keterangan selisih (editable, opsional) |
- Hijau (+) = Stok fisik lebih banyak dari sistem (ada kelebihan)
- Merah (-) = Stok fisik lebih sedikit dari sistem (ada kekurangan)
- Abu-abu (0) = Stok cocok
Selisih = Stok Fisik - Stok Sistem
Interpretasi Selisih:
- Selisih > 0 (Positif): Ada kelebihan stok โ Stok sistem akan ditambah
- Selisih < 0 (Negatif): Ada kekurangan stok โ Stok sistem akan dikurangi
- Selisih = 0: Stok cocok โ Produk TIDAK disimpan dalam SO (dilewati)
- Tombol "Simpan Stock Opname" akan DISABLED jika tidak ada produk dengan selisih
- Stock opname berstatus completed (selesai) saat disimpan
- Stok sistem LANGSUNG diupdate ke stok fisik saat simpan
- Sistem HANYA menyimpan produk yang memiliki selisih (โ 0)
- Pergerakan stok otomatis tercatat dengan tipe "adjustment"
- Pastikan stok fisik sudah benar sebelum simpan (tidak bisa undo otomatis)
- Status SO:
- Stok sistem sudah diupdate sesuai stok fisik
- Pergerakan stok tercatat di menu "Pergerakan Stok" dengan referensi "Stock Opname"
- SO masih bisa diedit atau dihapus (tidak ada lock)
Detail Stock Opname (Show)
Klik tombol untuk melihat detail SO. Halaman detail menampilkan:
- โ Informasi SO: No. Opname, Tanggal, Cabang, Status, User, Catatan
- โ Tabel Detail Produk: Produk, Stok Sistem, Stok Fisik, Selisih (dengan warna), Catatan
- โ
Tombol Aksi:
- - Edit SO
- - Hapus SO
Edit Stock Opname
Stock opname bisa diedit kapan saja (tidak ada batasan status):
Hapus Stock Opname
๐ Rekomendasi Jadwal Stock Opname
| Frekuensi | Jenis Produk | Keterangan |
|---|---|---|
| Harian | Produk high-value (HP flagship) | Untuk produk dengan nilai tinggi |
| Mingguan | Produk fast-moving (aksesoris populer) | Produk yang sering terjual |
| Bulanan | Semua produk | Stock opname menyeluruh semua cabang |
| Tahunan | Full inventory audit | Audit lengkap dengan eksternal auditor (jika perlu) |
๐ Tips Stock Opname yang Efektif
- Persiapan: Siapkan barcode scanner atau checklist produk sebelum mulai
- Waktu: Lakukan di luar jam operasional atau saat toko tutup
- Tim: Libatkan minimal 2 orang (1 hitung, 1 input data) untuk akurasi
- Sistematis: Hitung per kategori atau per rak agar tidak terlewat
- Double Check: Cek ulang produk dengan selisih besar sebelum approve
- Dokumentasi: Foto kondisi barang jika ada selisih untuk audit trail
- Analisa: Review penyebab selisih untuk mencegah di periode berikutnya
- Transaksi yang belum/salah diinput ke sistem
- Barang rusak atau cacat yang belum dicatat
- Kehilangan atau pencurian (shrinkage)
- Kesalahan penempatan produk (produk A tercampur dengan produk B)
- Retur customer yang belum diproses
- Transfer antar cabang yang belum tercatat
8. Service HP
8.1 Buat Pesanan Service
๐ฑ Card 1: Informasi Perangkat
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Jenis Perangkat | Dropdown | โ Ya | Handphone, Tablet, Laptop, Smartwatch, Lainnya |
| Merek | Text | โ Ya | Contoh: Samsung, iPhone, Xiaomi |
| Model | Text | โ Ya | Contoh: Galaxy S23, iPhone 14 Pro |
| IMEI | Text | โ Tidak | Nomor IMEI perangkat |
๐ง Card 2: Keluhan & Diagnosa
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Keluhan Pelanggan | Textarea | โ Ya | Deskripsi masalah yang dialami customer |
| Diagnosa Teknisi | Textarea | โ Tidak | Hasil diagnosa awal (bisa diisi nanti) |
๐ฉ Card 3: Spare Part Yang Digunakan
Dapat menambahkan beberapa spare part:
| Field | Tipe | Keterangan |
|---|---|---|
| Spare Part | Dropdown | Pilih dari master produk |
| Qty | Number | Jumlah (min: 1) |
| Harga Satuan | Number | Auto-fill dari harga jual produk |
| Subtotal | Display | Qty ร Harga Satuan (auto calculate) |
Tombol: dan
๐ Card 4: Informasi Service
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Tanggal Service | Date | โ Ya | Default: hari ini |
| Customer | Dropdown | โ Ya | Pilih dari master customer |
| Cabang | Dropdown | โ Ya | Pilih cabang |
| Teknisi | Display | - | Auto: user yang login |
| Prioritas | Dropdown | โ Tidak | normal, urgent, very urgent |
| Estimasi Selesai | Datetime-local | โ Tidak | Target selesai |
| Biaya Jasa Service | Number | โ Tidak | Default: 0 |
| Total Biaya Spare Part | Display | - | Sum dari spare part (auto) |
| Estimasi Total Biaya | Display | - | Biaya Jasa + Spare Part |
| Uang Muka (DP) | Number | โ Tidak | Default: 0 |
| Catatan | Textarea | โ Tidak | Catatan tambahan |
Total Biaya Spare Part = Sum dari (Qty ร Harga Satuan)
Estimasi Total Biaya = Biaya Jasa + Total Biaya Spare Part
Sisa Pembayaran = Estimasi Total Biaya - DP
8.2 Status Service (Lifecycle)
Urutan status service dari awal sampai selesai:
| No | Status | Badge | Keterangan |
|---|---|---|---|
| 1 | Menunggu Diagnosa | Service baru masuk, belum diperiksa | |
| 2 | Sedang Diagnosa | Teknisi sedang cek masalah | |
| 3 | Menunggu Persetujuan | Menunggu customer approve biaya | |
| 4 | Menunggu Spare Part | Menunggu spare part datang | |
| 5 | Dalam Pengerjaan | Sedang dikerjakan teknisi | |
| 6 | Quality Control | Pengecekan kualitas hasil service | |
| 7 | Siap Diambil | Service selesai, menunggu diambil customer | |
| 8 | Selesai | Sudah diambil customer | |
| 9 | Dibatalkan | Service dibatalkan |
8.3 Update Status Service
8.4 Detail Service (Show)
Halaman detail menampilkan:
- โ Informasi Perangkat: Jenis, Merek, Model, IMEI
- โ Keluhan & Diagnosa
- โ Spare Part yang Digunakan (tabel)
- โ Riwayat Status: Timeline lengkap dengan tanggal, status, notes, user
- โ Informasi Service: No, Tanggal, Customer, Cabang, Teknisi, Prioritas, Status, Estimasi, Catatan
- โ
Biaya Service:
- Biaya Jasa
- Biaya Spare Part
- Total
- DP (Down Payment)
- Sisa Pembayaran
- โ Form Update Status (jika belum selesai/dibatalkan)
- โ QR Code Service (download JPG)
- โ Tombol:
8.5 Customer Cek Status Service
Customer bisa cek status tanpa login:
/customer
9. Laporan
9.1 Laporan Laba Rugi
Laporan analisa keuntungan dan kerugian bisnis dalam periode tertentu. Menampilkan ringkasan keuangan, grafik penjualan, produk terlaris, pelanggan terbaik, dan detail laba rugi per produk.
๐ Filter Laporan
| Filter | Wajib | Keterangan |
|---|---|---|
| Tanggal Mulai | โ Ya | Tanggal awal periode laporan |
| Tanggal Akhir | โ Ya | Tanggal akhir periode laporan |
| Cabang | โ Tidak | Dropdown: "Semua Cabang" atau pilih cabang tertentu |
๐ BAGIAN 1: Summary Cards (4 Kartu Ringkasan)
| Card | Label | Warna | Rumus |
|---|---|---|---|
| Card 1 | Total Penjualan | Biru (bg-info) | SUM(sale.total_amount) dari semua penjualan completed |
| Card 2 | Harga Pokok Penjualan (HPP) | Kuning (bg-warning) | SUM(quantity ร purchase_price) dari semua sale_details |
| Card 3 | Laba Kotor | Hijau (bg-success) | Total Penjualan - HPP |
| Card 4 | Laba Bersih | Hijau/Merah (tergantung nilai) | Total Penjualan - Total Diskon + Total Pajak - HPP |
๐ BAGIAN 2: Additional Metrics (3 Info Box)
| Box | Label | Icon | Rumus |
|---|---|---|---|
| Box 1 | Margin Laba | ๐ (percent) | (Laba Bersih / Total Penjualan) ร 100% |
| Box 2 | Total Diskon | ๐ท๏ธ (tags) | SUM(sale.discount) dari semua penjualan |
| Box 3 | Total Pajak | ๐งพ (receipt) | SUM(sale.tax) dari semua penjualan |
๐ BAGIAN 3: Grafik Penjualan & Pembelian
Judul: "Grafik Penjualan & Pembelian"
Jenis: Line Chart (grafik garis)
Data yang ditampilkan:
- Garis Biru: Total penjualan per hari (dari tabel sales)
- Garis Merah: Total pembelian per hari (dari tabel purchases)
X-axis: Tanggal (format: "15 Jan", "16 Jan", dll)
Y-axis: Nominal dalam Rupiah
๐ BAGIAN 4: Top 10 Produk Terlaris
Judul Card: "Top 10 Produk Terlaris"
Urutan: Diurutkan berdasarkan Total Laba tertinggi (bukan quantity)
| Kolom | Keterangan | Rumus |
|---|---|---|
| No | Nomor urut (1-10) | - |
| Produk | Nama produk | product.name |
| Qty Terjual | Jumlah terjual + satuan | SUM(quantity) + unit (contoh: "150 pcs") |
| Total Penjualan | Total pendapatan dari produk | SUM(quantity ร selling_price - discount) |
| Total Laba | Total keuntungan dari produk (badge hijau/merah) | SUM(quantity ร (selling_price - purchase_price) - discount) |
๐ฅ BAGIAN 5: Top 10 Customer
Judul Card: "Top 10 Customer"
Urutan: Diurutkan berdasarkan Total Pembelian tertinggi
| Kolom | Keterangan | Rumus |
|---|---|---|
| No | Nomor urut (1-10) | - |
| Nama Customer | Nama + nomor telepon | customer.name + phone |
| Total Transaksi | Jumlah transaksi (badge biru) | COUNT(*) transaksi + "transaksi" |
| Total Pembelian | Total belanja customer | SUM(total_amount) |
| Rata-rata Pembelian | Rata-rata per transaksi | AVG(total_amount) |
๐ฐ BAGIAN 6: Laporan Laba Rugi (Tabel Detail)
Judul Card: "Laporan Laba Rugi"
Tombol Export: ,
Header Tabel: "Periode: [Tanggal Mulai] - [Tanggal Akhir]"
| Baris | Label | Nilai | Warna Background |
|---|---|---|---|
| SECTION: PENDAPATAN | |||
| Header | PENDAPATAN | - | Biru (bg-info) |
| Sub-item | Penjualan | Rp [totalRevenue] | Putih |
| Sub-item | Diskon Penjualan | (Rp [totalSalesDiscount]) | Putih |
| Sub-item | Pajak | Rp [totalSalesTax] | Putih |
| Subtotal | Total Pendapatan Bersih | Rp [totalRevenue - totalSalesDiscount + totalSalesTax] | Putih (font bold) |
| SECTION: HPP | |||
| Header | HARGA POKOK PENJUALAN (HPP) | - | Kuning (bg-warning) |
| Sub-item | HPP | Rp [totalCOGS] | Putih |
| SECTION: LABA | |||
| Total | LABA KOTOR | Rp [grossProfit] | Hijau (bg-success, font bold) |
| Total | LABA BERSIH | Rp [netProfit] | Hijau/Merah (tergantung nilai, font bold, text white) |
๐ฆ BAGIAN 7: Laporan Laba Rugi Per Produk
Judul Card: "Laporan Laba Rugi Per Produk"
Tombol Export: ,
Header Tabel (2 baris):
| Nota | Nama Item | Total Jual | Harga Pokok | Potongan | Laba | |
|---|---|---|---|---|---|---|
| Laba Kotor | Laba % | |||||
Isi Tabel (per produk):
| Kolom | Keterangan | Rumus dari Controller |
|---|---|---|
| Nota | Nomor urut | Auto increment (1, 2, 3, ...) |
| Nama Item | Nama produk - Brand | product.name + " - " + brand.name |
| Total Jual | Total penjualan produk | SUM(quantity * selling_price) |
| Harga Pokok | HPP produk | SUM(quantity * purchase_price) |
| Potongan | Total diskon produk (level item) | SUM(discount) dari sale_details |
| Laba Kotor | Laba kotor produk | SUM(quantity * (selling_price - purchase_price)) |
| Laba % | Persentase laba | (SUM(quantity * (selling_price - purchase_price)) / SUM(quantity * selling_price) * 100) |
Baris Sub Total (setiap produk):
- Label: "Sub Total" (colspan 2)
- Menampilkan nilai yang sama dengan baris produk di atasnya
- Background: abu-abu muda (bg-light)
- Font: Bold
Baris TOTAL (Grand Total di akhir tabel):
| Kolom | Nilai |
|---|---|
| Label | TOTAL (colspan 2) |
| Total Jual | SUM semua total_jual |
| Harga Pokok | SUM semua harga_pokok |
| Potongan | SUM semua potongan |
| Laba Kotor | SUM semua laba_kotor |
| Laba % | Kosong |
Style Grand Total: Background hijau (bg-success), Text putih, Font bold
๐งฎ Rumus Kalkulasi Lengkap
SUM(sale.total_amount) WHERE status = 'completed'
2. Total Diskon:
SUM(sale.discount) WHERE status = 'completed'
Catatan: Ini diskon level transaksi (dari tabel sales)
3. Total Pajak:
SUM(sale.tax) WHERE status = 'completed'
4. Harga Pokok Penjualan (HPP):
SUM(sale_detail.quantity ร sale_detail.purchase_price)
5. Laba Kotor:
Total Penjualan - HPP
6. Laba Bersih:
Total Penjualan - Total Diskon + Total Pajak - HPP
Catatan: Belum termasuk biaya operasional (gaji, sewa, listrik, dll)
7. Margin Laba:
(Laba Bersih / Total Penjualan) ร 100%
--- UNTUK TABEL PER PRODUK ---
8. Total Jual (per produk):
SUM(quantity ร selling_price) GROUP BY product_id
9. Harga Pokok (per produk):
SUM(quantity ร purchase_price) GROUP BY product_id
10. Potongan (per produk):
SUM(discount) dari tabel sale_details GROUP BY product_id
Catatan: Ini diskon level item (beda dengan Total Diskon di atas)
11. Laba Kotor (per produk):
SUM(quantity ร (selling_price - purchase_price)) GROUP BY product_id
12. Laba % (per produk):
(Laba Kotor per produk / Total Jual per produk) ร 100%
๐ค Tombol Export yang Tersedia
- Export PDF Laporan Utama: (di card "Laporan Laba Rugi")
- Export Excel Laporan Utama: (di card "Laporan Laba Rugi")
- Export PDF Per Produk: (di card "Laporan Laba Rugi Per Produk")
- Export Excel Per Produk: (di card "Laporan Laba Rugi Per Produk")
9.2 Laporan Daftar Item (Product List)
Daftar seluruh produk beserta nilai aset
๐ Filter
| Filter | Keterangan |
|---|---|
| Cabang | Semua Cabang / pilih cabang tertentu |
๐ Kolom yang Ditampilkan
- Kode (B-xxxx)
- Nama Produk
- Kategori
- Merek
- Total Stok
- Stok Min
- Harga Beli
- Harga Jual
- Deskripsi
- Aset (Harga Beli ร Qty) - Per produk dan Total keseluruhan
Nilai Aset per Produk = Harga Beli ร Total Stok
Total Nilai Aset = Sum dari semua Nilai Aset per Produk
๐ค Export
9.3 Laporan Pendapatan Service
Laporan analisa pendapatan dari service HP dalam periode tertentu. Menampilkan ringkasan keuangan, grafik tren pendapatan harian, pendapatan per cabang, dan detail transaksi service.
๐ Filter Laporan
| Filter | Wajib | Keterangan |
|---|---|---|
| Tanggal Mulai | โ Ya | Tanggal awal periode laporan |
| Tanggal Akhir | โ Ya | Tanggal akhir periode laporan |
| Cabang | โ Tidak | Dropdown: "Semua Cabang" atau pilih cabang tertentu |
Tombol Export (di atas tabel):
- Semua nilai pendapatan ditampilkan dalam format Rupiah PENUH dengan pemisah titik ribuan
- Contoh: Rp 1.250.000 (bukan Rp 1.250K)
- Format ini berlaku untuk tampilan web, export PDF, dan export Excel
๐ BAGIAN 1: Summary Cards (4 Kartu Ringkasan)
| Card | Label | Warna | Format Nilai | Rumus |
|---|---|---|---|---|
| Card 1 | Total Pendapatan | Hijau (bg-success) | Rp 1.250.000 (format penuh dengan pemisah titik) | SUM(service.total_cost) |
| Card 2 | Biaya Jasa Service | Biru (bg-info) | Rp 850.000 (format penuh dengan pemisah titik) | SUM(service.service_fee) |
| Card 3 | Biaya Spare Part | Kuning (bg-warning) | Rp 400.000 (format penuh dengan pemisah titik) | SUM(service.parts_cost) |
| Card 4 | Sisa Pembayaran | Merah (bg-danger) | Rp 150.000 (format penuh dengan pemisah titik) | SUM(service.remaining_payment) |
๐ BAGIAN 2: Additional Metrics (3 Info Box)
| Box | Label | Warna | Rumus |
|---|---|---|---|
| Box 1 | Down Payment (DP) | Biru (bg-primary) | SUM(service.down_payment) |
| Box 2 | Rata-rata DP | Hijau (bg-success) | (Total DP / Total Pendapatan) ร 100% Format: "...%" |
| Box 3 | Rata-rata Nilai per Service | Biru (bg-info) | Total Pendapatan / COUNT(service) Format: "Rp ..." |
๐ BAGIAN 3: Tren Pendapatan Harian (Grafik)
Judul Card: "Tren Pendapatan Harian"
Jenis: Line Chart (grafik garis)
Warna Header: Biru (bg-info)
Data yang ditampilkan:
- Garis Hijau: Total pendapatan per hari (dari service_date)
X-axis: Tanggal (format: "15 Jan", "16 Jan", dll)
Y-axis: Nominal dalam Rupiah (format: "Rp ...")
Rumus Data Chart: GROUP BY DATE(service_date), lalu SUM(total_cost)
๐ฐ BAGIAN 4: Pendapatan Per Cabang (Tabel)
Judul Card: "Pendapatan Per Cabang"
Warna Header: Hijau (bg-success)
| Kolom | Keterangan | Rumus |
|---|---|---|
| Cabang | Nama cabang (bold) | branch.name |
| Jumlah Service | Total service di cabang | COUNT(*) GROUP BY branch_id |
| Biaya Jasa | Total biaya jasa cabang | SUM(service_fee) GROUP BY branch_id |
| Biaya Spare Part | Total biaya spare part cabang | SUM(parts_cost) GROUP BY branch_id |
| Total Pendapatan | Total pendapatan cabang (bold) | SUM(total_cost) GROUP BY branch_id |
| Persentase | Kontribusi cabang (badge biru) | (Pendapatan Cabang / Total Pendapatan Semua) ร 100% |
Baris TOTAL (Footer):
| Kolom | Nilai |
|---|---|
| Label | TOTAL |
| Jumlah Service | SUM semua total_services |
| Biaya Jasa | Total service fee semua cabang |
| Biaya Spare Part | Total parts cost semua cabang |
| Total Pendapatan | Total pendapatan semua cabang |
| Persentase | 100% |
Style Footer: Background abu-abu muda (bg-light), Font bold
๐ BAGIAN 5: Detail Transaksi Service (Tabel)
Judul Card: "Detail Transaksi Service"
Warna Header: Abu-abu (bg-secondary)
| Kolom | Keterangan | Data/Rumus |
|---|---|---|
| No. Service | Nomor service (clickable link) | service.service_number (link ke detail service) |
| Tanggal | Tanggal service | service_date (format: d/m/Y) |
| Customer | Nama customer | customer.name |
| Device | Merek + Model HP | device_brand + " " + device_model |
| Cabang | Nama cabang | branch.name |
| Biaya Jasa | Biaya jasa service (align right) | service.service_fee |
| Biaya Spare Part | Biaya spare part (align right) | service.parts_cost |
| Total | Total biaya (bold, align right) | service.total_cost |
| DP | Down payment (align right) | service.down_payment |
| Sisa | Sisa pembayaran (align right, warna merah jika > 0, hijau jika 0) | service.remaining_payment |
Baris TOTAL (Footer):
| Kolom | Nilai |
|---|---|
| Label | TOTAL: (colspan 5, align right) |
| Biaya Jasa | SUM(service_fee) |
| Biaya Spare Part | SUM(parts_cost) |
| Total | SUM(total_cost) |
| DP | SUM(down_payment) |
| Sisa | SUM(remaining_payment) |
Style Footer: Font bold
Fitur Tabel: DataTables (pagination, search, sorting), default 25 rows per page, order by Tanggal desc
๐งฎ Rumus Kalkulasi Lengkap
SUM(service.total_cost) WHERE service_date BETWEEN start_date AND end_date
Catatan: total_cost = service_fee + parts_cost
2. Biaya Jasa Service:
SUM(service.service_fee)
3. Biaya Spare Part:
SUM(service.parts_cost)
4. Total Down Payment (DP):
SUM(service.down_payment)
5. Sisa Pembayaran:
SUM(service.remaining_payment)
Catatan: remaining_payment = total_cost - down_payment
6. Rata-rata DP (%):
(Total Down Payment / Total Pendapatan) ร 100%
7. Rata-rata Nilai per Service:
Total Pendapatan / COUNT(service)
--- UNTUK TABEL PER CABANG ---
8. Pendapatan Per Cabang:
SUM(total_cost) GROUP BY branch_id
9. Persentase Kontribusi Cabang:
(Pendapatan Cabang / Total Pendapatan Semua Cabang) ร 100%
๐ค Tombol Export yang Tersedia
- Export PDF: - Download laporan dalam format PDF
- Export Excel: - Download laporan dalam format Excel (lengkap dengan ringkasan, per cabang, dan detail transaksi)
9.4 Laporan Service Berdasarkan Status
Laporan ini menampilkan monitoring distribusi status service, mendeteksi service yang tertunda, dan memantau service yang siap diambil customer. Laporan ini sangat berguna untuk monitoring operasional service dan customer service.
๐ Filter Laporan
Filter yang tersedia untuk mengatur tampilan data:
| Filter | Tipe | Keterangan |
|---|---|---|
| Tanggal Mulai | Date Input | Wajib diisi. Tanggal awal periode laporan |
| Tanggal Akhir | Date Input | Wajib diisi. Tanggal akhir periode laporan |
| Cabang | Dropdown | Opsional. Pilih "Semua Cabang" atau cabang tertentu |
| Tombol Aksi: | ||
๐ BAGIAN 1: Summary Cards
Menampilkan ringkasan utama dengan 4 kartu informasi:
| Card | Warna | Icon | Label | Keterangan |
|---|---|---|---|---|
| Card 1 | bg-info (Biru) | ๐ง fa-wrench | Total Service | Total semua service dalam periode (count) |
| Card 2 | bg-success (Hijau) | โ fa-check-circle | Selesai | Jumlah service dengan status "selesai" (count) |
| Card 3 | bg-warning (Kuning) | โ ๏ธ fa-exclamation-triangle | Tertunda (>3 hari) | Service yang berjalan > 3 hari dari tanggal service (count) |
| Card 4 | bg-primary (Biru Tua) | ๐ fa-bell | Siap Diambil | Service dengan status "siap diambil" (count) |
๐ BAGIAN 2: Distribusi Status Service (Pie Chart)
Visualisasi grafik berbentuk Pie Chart yang menampilkan distribusi persentase tiap status service:
- Judul: "Distribusi Status Service"
- Warna Card Header: bg-info (Biru)
- Tipe Chart: Pie Chart (Chart.js)
- Data: Menampilkan semua status yang ada dengan warna berbeda:
- Menunggu Diagnosa - Kuning (#FFC107)
- Sedang Diagnosa - Orange (#FF9800)
- Menunggu Persetujuan - Biru (#2196F3)
- Menunggu Spare Part - Ungu (#9C27B0)
- Dalam Pengerjaan - Cyan (#00BCD4)
- Quality Control - Hijau Tua (#4CAF50)
- Siap Diambil - Hijau Muda (#8BC34A)
- Selesai - Hijau (#4CAF50)
- Dibatalkan - Merah (#F44336)
- Legend Position: Bottom (bawah chart)
- Responsive: Ya, menyesuaikan ukuran layar
๐ BAGIAN 3: Statistik Per Status (Tabel)
Tabel yang menampilkan rincian per status dalam bentuk tabel:
| Kolom | Alignment | Keterangan |
|---|---|---|
| Status | Left | Nama status (ucwords/kapital per kata) |
| Jumlah | Center | Count service dengan status tersebut |
| Total Nilai | Right | Sum total_cost dari service dengan status tersebut (format Rupiah) |
| FOOTER (bg-light, bold): TOTAL | Total Count | Total Sum Nilai | ||
Warna Card Header: bg-info (Biru)
Judul Card: "Statistik Per Status"
๐ BAGIAN 4: Service Tertunda (>3 hari)
Kondisi Tampil: Hanya muncul jika ada service yang tertunda (>3 hari dari tanggal service)
Warna Card Header: bg-warning (Kuning)
Judul Card: "Service Tertunda (>3 hari)"
| Kolom | Keterangan |
|---|---|
| No. Service | Service number (clickable link ke detail service) |
| Tanggal | Tanggal service (format: dd/mm/yyyy) |
| Customer | Nama customer |
| Device | Merk dan model device (contoh: "Samsung Galaxy A52") |
| Status | Status saat ini (badge warning kuning) |
| Teknisi | Nama teknisi atau "-" jika belum ada |
| Lama (Hari) | Jumlah hari sejak tanggal service sampai sekarang (contoh: "5 hari") |
๐ BAGIAN 5: Service Siap Diambil
Kondisi Tampil: Hanya muncul jika ada service dengan status "siap diambil"
Warna Card Header: bg-primary (Biru Tua)
Judul Card: "Service Siap Diambil"
| Kolom | Alignment | Keterangan |
|---|---|---|
| No. Service | Left | Service number (clickable link ke detail service) |
| Tanggal | Left | Tanggal service (format: dd/mm/yyyy) |
| Customer | Left | Nama customer |
| Device | Left | Merk dan model device |
| Teknisi | Left | Nama teknisi atau "-" |
| Total Biaya | Right | Total cost service (format Rupiah) |
| Sisa Bayar | Right | Remaining payment (format Rupiah) |
๐ BAGIAN 6: Detail Semua Service (DataTables)
Tabel lengkap semua service dengan fitur DataTables (sortir, search, pagination):
Warna Card Header: bg-secondary (Abu-abu)
Judul Card: "Detail Semua Service"
| Kolom | Alignment | Keterangan |
|---|---|---|
| No. Service | Left | Service number (clickable link) |
| Tanggal | Left | Tanggal service (dd/mm/yyyy) |
| Customer | Left | Nama customer |
| Device | Left | Merk dan model device |
| Status | Left | Badge dengan warna sesuai status:
|
| Cabang | Left | Nama cabang |
| Teknisi | Left | Nama teknisi atau "-" |
| Total | Right | Total cost (format Rupiah) |
Fitur DataTables:
- Responsive: Ya
- Length Change: Ya (bisa ganti jumlah baris per halaman)
- Page Length Default: 25 baris
- Order Default: Kolom Tanggal (index 1), descending (terbaru di atas)
- Search: Ya (kotak pencarian global)
- Pagination: Ya
๐งฎ Rumus dan Perhitungan
Berikut rumus yang digunakan dalam laporan ini:
- Total Service: COUNT semua service dalam periode
- Selesai: COUNT service dengan status = 'selesai'
- Tertunda (>3 hari): COUNT service dimana (NOW - service_date) > 3 hari DAN status โ 'selesai' DAN status โ 'dibatalkan'
- Siap Diambil: COUNT service dengan status = 'siap diambil'
- Lama Service (hari): DATEDIFF(NOW, service_date) untuk service yang belum selesai
- Total Nilai per Status: SUM(total_cost) GROUP BY status
- Persentase Distribusi Status: (COUNT status tertentu / Total Service) ร 100%
๐ค Tombol Export yang Tersedia
- Export PDF: - Download laporan dalam format PDF (target="_blank", buka tab baru)
- Export Excel: - Download laporan dalam format Excel (lengkap dengan ringkasan, statistik per status, dan detail semua service)
Parameter Export: Semua filter yang dipilih (start_date, end_date, branch_id) akan di-pass ke URL export.
9.5 Laporan Kinerja Teknisi
Laporan ini menampilkan evaluasi performa dan produktivitas teknisi dalam menangani service. Berguna untuk penilaian kinerja, bonus, dan alokasi tugas teknisi.
๐ Filter Laporan
Filter yang tersedia untuk mengatur tampilan data:
| Filter | Tipe | Keterangan |
|---|---|---|
| Tanggal Mulai | Date Input | Wajib diisi. Tanggal awal periode laporan |
| Tanggal Akhir | Date Input | Wajib diisi. Tanggal akhir periode laporan |
| Teknisi | Dropdown | Opsional. Pilih "Semua Teknisi" atau teknisi tertentu untuk melihat data spesifik |
| Cabang | Dropdown | Opsional. Pilih "Semua Cabang" atau cabang tertentu |
| Tombol Aksi: | ||
๐ BAGIAN 1: Summary Cards
Menampilkan ringkasan utama dengan 4 kartu informasi:
| Card | Warna | Icon | Label | Keterangan |
|---|---|---|---|---|
| Card 1 | bg-info (Biru) | ๐ง fa-wrench | Total Service | Total semua service dalam periode (count) |
| Card 2 | bg-success (Hijau) | โ fa-check-circle | Selesai | Jumlah service dengan status "selesai" (count) |
| Card 3 | bg-warning (Kuning) | ๐ฅ fa-users | Jumlah Teknisi | Total teknisi yang menangani service (count distinct teknisi) |
| Card 4 | bg-primary (Biru Tua) | ๐ฐ fa-money-bill-wave | Total Pendapatan | Total pendapatan dari service yang selesai (format penuh: "Rp 1.250.000") |
๐ BAGIAN 2: Grafik Kinerja Teknisi (Bar Chart Stacked)
Visualisasi grafik berbentuk Stacked Bar Chart yang menampilkan kinerja per teknisi:
- Judul: "Grafik Kinerja Teknisi"
- Warna Card Header: bg-info (Biru)
- Tipe Chart: Bar Chart (Chart.js) - Stacked (bertumpuk)
- Sumbu X: Nama teknisi
- Sumbu Y: Jumlah service (begin at zero)
- Dataset (3 layer bertumpuk):
- Selesai - Hijau (#4CAF50)
- Dalam Proses - Biru (#2196F3)
- Dibatalkan - Merah (#F44336)
- Legend Position: Top (atas chart)
- Responsive: Ya, menyesuaikan ukuran layar
- Stacked Mode: Ya (sumbu X dan Y di-stack)
๐ BAGIAN 3: Statistik Per Teknisi (Tabel)
Tabel detail yang menampilkan statistik lengkap setiap teknisi:
Warna Card Header: bg-success (Hijau)
Judul Card: "Statistik Per Teknisi"
| Kolom | Alignment | Format/Badge | Keterangan |
|---|---|---|---|
| Teknisi | Left | Bold | Nama teknisi (bold/tebal) |
| Total Service | Center | Plain text | Jumlah total service yang ditangani teknisi |
| Selesai | Center | badge badge-success (hijau) | Jumlah service yang selesai |
| Dalam Proses | Center | badge badge-info (biru muda) | Jumlah service yang masih dalam proses |
| Dibatalkan | Center | badge badge-danger (merah) | Jumlah service yang dibatalkan |
| Success Rate | Center | badge dengan warna dinamis:
|
Persentase keberhasilan (contoh: "85%") |
| Avg. Durasi | Center | Plain text + " hari" | Rata-rata durasi pengerjaan (contoh: "3 hari") |
| Total Pendapatan | Right | Format Rupiah | Total pendapatan dari semua service teknisi (contoh: "Rp 5.250.000") |
| FOOTER (bg-light, bold): TOTAL | Sum Total Service | Sum Selesai | Sum Dalam Proses | Sum Dibatalkan | "-" | "-" | Sum Total Pendapatan | |||
๐ BAGIAN 4: Detail Service (DataTables)
Tabel lengkap semua service dengan fitur DataTables (sortir, search, pagination):
Warna Card Header: bg-secondary (Abu-abu)
Judul Card: "Detail Service"
| Kolom | Alignment | Keterangan |
|---|---|---|
| No. Service | Left | Service number (clickable link ke detail service) |
| Tanggal | Left | Tanggal service (format: dd/mm/yyyy) |
| Customer | Left | Nama customer |
| Device | Left | Merk dan model device (contoh: "Samsung Galaxy A52") |
| Teknisi | Left | Nama teknisi atau "-" jika belum ada |
| Status | Left | Badge dengan warna sesuai status:
|
| Durasi | Left | Durasi pengerjaan:
|
| Total | Right | Total cost service (format Rupiah) |
Fitur DataTables:
- Responsive: Ya
- Length Change: Ya (bisa ganti jumlah baris per halaman)
- Page Length Default: 25 baris
- Order Default: Kolom Tanggal (index 1), descending (terbaru di atas)
- Search: Ya (kotak pencarian global)
- Pagination: Ya
๐งฎ Rumus dan Perhitungan
Berikut rumus yang digunakan dalam laporan ini:
- Total Service: COUNT semua service dalam periode
- Selesai: COUNT service dengan status = 'selesai'
- Jumlah Teknisi: COUNT DISTINCT(technician_id)
- Total Pendapatan (Card): SUM(total_cost) WHERE status = 'selesai' / 1000 (dalam ribuan)
- Total Service Per Teknisi: COUNT service WHERE technician_id = X
- Selesai Per Teknisi: COUNT service WHERE technician_id = X AND status = 'selesai'
- Dalam Proses Per Teknisi: COUNT service WHERE technician_id = X AND status NOT IN ('selesai', 'dibatalkan')
- Dibatalkan Per Teknisi: COUNT service WHERE technician_id = X AND status = 'dibatalkan'
- Success Rate (%): (Selesai / Total Service) ร 100
- Avg. Durasi (hari): AVG(DATEDIFF(completed_at, service_date)) untuk service yang selesai
- Total Pendapatan Per Teknisi: SUM(total_cost) WHERE technician_id = X
- Durasi Service (untuk tabel detail):
- Jika selesai: DATEDIFF(completed_at, service_date)
- Jika belum selesai: DATEDIFF(NOW, service_date)
๐จ Badge Warna Success Rate
Success Rate menggunakan badge dinamis dengan aturan:
- ๐ข badge-success (Hijau): Success Rate โฅ 80%
- ๐ก badge-warning (Kuning): Success Rate 60-79%
- ๐ด badge-danger (Merah): Success Rate < 60%
๐ค Tombol Export yang Tersedia
- Export PDF: - Download laporan dalam format PDF (target="_blank", buka tab baru)
- Export Excel: - Download laporan dalam format Excel (lengkap dengan ringkasan, statistik per teknisi, dan detail service)
Parameter Export: Semua filter yang dipilih (start_date, end_date, technician_id, branch_id) akan di-pass ke URL export.
10. Pengaturan Sistem
Modul pengaturan sistem digunakan untuk mengelola user, roles, dan permissions menggunakan package Spatie Laravel Permission. Fitur ini memerlukan permission khusus untuk mengaksesnya.
10.1 Manajemen Roles (Peran)
Roles adalah peran atau jabatan user dalam sistem yang menentukan hak akses (permissions) yang dimiliki user.
๐ Halaman Daftar Roles
Menampilkan tabel dengan kolom:
| Kolom | Keterangan |
|---|---|
| NO. | Nomor urut |
| Nama Role | Nama role (contoh: Super Admin, Admin, Kasir, Teknisi, Customer) |
| Permission | Daftar permission yang dimiliki role (ditampilkan sebagai button hijau kecil) |
| Aksi | Tombol Edit (kuning) dan Hapus (merah) |
โ Menambah Role Baru
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Nama Role | Text Input | โ Ya | Nama role harus unique (tidak boleh sama dengan role yang sudah ada) |
| Permission | Checkbox (inline) | โ Tidak | Centang permission yang ingin diberikan ke role ini. Semua permission yang ada di database akan ditampilkan sebagai checkbox |
โ๏ธ Edit Role
syncPermissions()
๐๏ธ Hapus Role
- Role yang dihapus tidak dapat dikembalikan
- User yang memiliki role ini akan kehilangan semua permissions dari role tersebut
- Sebaiknya jangan hapus role default sistem
10.2 Manajemen Permissions (Hak Akses)
Halaman permissions menampilkan daftar READ-ONLY dari semua permission yang tersedia di sistem. Halaman ini TIDAK MEMILIKI fitur tambah, edit, atau hapus permission.
๐ Halaman Daftar Permissions
Menampilkan tabel dengan kolom:
| Kolom | Keterangan |
|---|---|
| NO. | Nomor urut |
| Nama Permission | Nama permission (contoh: products.index, sales.create, users.delete, dll) |
- Halaman ini HANYA untuk melihat daftar permissions yang ada
- TIDAK ADA tombol Tambah, Edit, atau Hapus permission
- Permissions di-manage langsung di database atau via seeder
- Untuk assign permission ke role, gunakan halaman Roles (Section 10.1)
๐ Format Nama Permission
Permission di sistem ini menggunakan format: module.action
Contoh permission yang umum ada di sistem:
| Modul | Contoh Permission |
|---|---|
| Products | products.index, products.create, products.edit, products.delete |
| Sales | sales.index, sales.create, sales.edit, sales.delete |
| Purchases | purchases.index, purchases.create, purchases.edit, purchases.delete |
| Services | services.index, services.create, services.edit, services.delete |
| Roles | roles.index, roles.create, roles.edit, roles.delete |
| Users | users.index, users.create, users.edit, users.delete |
| Permissions | permissions.index |
๐ Cara Assign Permission ke Role
Karena halaman Permissions hanya READ-ONLY, untuk memberikan permission ke role dilakukan di halaman Roles:
10.3 Manajemen Users (Pengguna)
Kelola akun pengguna yang dapat mengakses sistem.
๐ Halaman Daftar Users
Menampilkan tabel dengan kolom:
| Kolom | Keterangan |
|---|---|
| NO. | Nomor urut |
| Nama User | Nama lengkap user |
| Role | Role yang dimiliki user (ditampilkan sebagai badge hijau) |
| Aksi | Tombol Edit (kuning) dan Hapus (merah) |
โ Menambah User Baru
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| Nama User | Text Input | โ Ya | Nama lengkap user |
| Email Input | โ Ya | Email harus valid dan unique (digunakan untuk login) | |
| Password | Password Input | โ Ya | Password untuk login |
| Konfirmasi Password | Password Input | โ Ya | Harus sama dengan password (validasi konfirmasi) |
| Role | Checkbox (inline) | โ Tidak | Centang role yang ingin diberikan ke user. User bisa memiliki LEBIH DARI 1 role |
- Field yang ada HANYA: Nama User, Email, Password, Konfirmasi Password, dan Role
- TIDAK ADA field: Cabang, No. Telepon, Alamat, atau Status
- User bisa memiliki multiple roles (checkbox, bukan dropdown)
- Password akan di-hash dengan bcrypt sebelum disimpan
โ๏ธ Edit User
- Jika field password KOSONG โ password tidak diubah (tetap password lama)
- Jika field password DIISI โ password lama akan di-replace dengan password baru (di-hash)
๐๏ธ Hapus User
- User yang dihapus tidak dapat dikembalikan
- Riwayat transaksi yang dibuat user tetap tersimpan (tidak dihapus)
๐ Validasi Form
Form tambah dan edit user memiliki validasi JavaScript:
- Nama User: Tidak boleh kosong
- Email: Tidak boleh kosong, harus format email valid
- Password (Tambah): Wajib diisi
- Konfirmasi Password: Harus sama dengan password
- Error akan muncul dengan class
is-invaliddan pesan di bawah field - Modal akan auto-buka kembali jika ada error dari server
11. Tips & Troubleshooting
11.1 Tips Penggunaan
๐ฏ Best Practices
- Siapkan Master Data Dulu - Buat kategori, merek, supplier, customer, dan cabang sebelum input produk
- Import Excel untuk Bulk - Gunakan fitur import Excel untuk input produk massal (lebih cepat)
- Perhatikan Stok & Harga per Cabang - Pastikan cabang di Tab Stok = cabang di Tab Harga
- Cek Stok Harian - Monitor stok menipis setiap hari dari dashboard
- Update Status Service - Update progres service berkala agar customer informed
- Cetak QR Code - Print QR Code dan tempel di produk untuk scan cepat saat transaksi
- Rekap Laporan Bulanan - Export laporan laba rugi setiap akhir bulan untuk evaluasi
- Backup Data Rutin - Backup database minimal 1 minggu sekali
โก Shortcut Cepat
- Scan QR di Penjualan - Gunakan scan QR saat transaksi untuk input produk lebih cepat
- Filter Tanggal - Manfaatkan filter tanggal di semua laporan
- Search Box - Gunakan search untuk cari produk/customer/transaksi cepat
- Export Excel - Export laporan ke Excel untuk analisa lebih lanjut di spreadsheet
11.2 Troubleshooting
โ Masalah: QR Code Tidak Tergenerate
Solusi:- Pastikan library BaconQrCode sudah terinstall (cek composer)
- Periksa permission folder
public/qrcodes(harus writable) - Restart web server
- Cek log error di
storage/logs/laravel.log
โ Masalah: Import Excel Gagal
Solusi:- Pastikan format Excel sesuai template yang didownload
- Cek kategori dan merek sudah ada di database
- Cek cabang sudah dibuat
- Pastikan tidak ada data duplikat
- Periksa format angka (harga & stok harus numerik, tidak boleh ada huruf)
- Jangan ada baris kosong di tengah data
- Nama kategori, merek, cabang harus sama persis dengan yang ada di database (case sensitive)
โ Masalah: Cabang di Stok & Harga Tidak Sinkron
Solusi:- Saat tambah produk, pastikan cabang di Tab 2 (Stok) sama dengan Tab 3 (Harga)
- Jika sudah terlanjur, edit produk dan tambahkan cabang yang kurang
- Validasi sistem akan menolak jika cabang tidak sinkron
โ Masalah: Stok Tidak Update Setelah Transaksi
Solusi:- Periksa transaksi sudah tersimpan dengan benar (cek di index)
- Cek tidak ada error saat simpan transaksi
- Refresh halaman produk (Ctrl + F5)
- Periksa log error di server
- Pastikan cabang di transaksi ada di produk
โ Masalah: Qty Penjualan Melebihi Stok
Solusi:- Sistem akan otomatis validasi qty tidak boleh > stok tersedia
- Jika tetap bisa, berarti ada bug - hubungi developer
- Cek stok di cabang yang dipilih (bukan total stok semua cabang)
โ Masalah: Kamera QR Tidak Muncul
Solusi:- Pastikan browser mendukung akses kamera (Chrome, Firefox, Edge recommended)
- Berikan permission kamera saat diminta browser
- Gunakan HTTPS (jika deploy online, localhost bisa HTTP)
- Coba browser lain jika masih tidak bisa
- Pastikan kamera tidak sedang digunakan aplikasi lain
โ Masalah: Laporan Tidak Muncul / Kosong
Solusi:- Periksa filter tanggal sudah benar
- Pastikan ada data di periode yang dipilih
- Cek filter cabang (jika pilih cabang tertentu, pastikan ada data di cabang tersebut)
- Clear cache browser (Ctrl + Shift + Del)
- Coba periode tanggal yang berbeda untuk testing
โ Masalah: Tidak Bisa Login
Solusi:- Periksa email dan password benar
- Pastikan akun tidak dinonaktifkan (hubungi admin)
- Clear cookies browser
- Coba browser lain atau mode incognito
- Hubungi admin untuk reset password jika lupa
โ Masalah: Margin/Laba Negatif di Laporan
Solusi:- Periksa harga jual < harga beli (rugi)
- Cek apakah ada diskon terlalu besar
- Review harga jual produk yang margin-nya negatif
- Sesuaikan harga jual agar profit positif
11.3 Keamanan Data
๐ Praktik Keamanan
- Gunakan password kuat (minimal 8 karakter, kombinasi huruf besar-kecil-angka-simbol)
- Jangan share password antar user
- Logout setelah selesai menggunakan aplikasi
- Jangan akses dari komputer publik/warnet
- Ganti password secara berkala (3-6 bulan sekali)
- Backup database ke storage eksternal (Google Drive, Dropbox, dll)
- Gunakan HTTPS jika deploy online (SSL Certificate)
11.4 Maintenance Rutin
| Periode | Aktivitas yang Harus Dilakukan |
|---|---|
| Harian |
- Cek stok menipis dari dashboard - Update status service yang sedang berjalan - Review transaksi hari ini |
| Mingguan |
- Backup database - Review laporan penjualan minggu ini - Cek service yang tertunda - Update harga produk jika ada perubahan |
| Bulanan |
- Export laporan laba rugi lengkap - Analisa profit per produk - Inventory check (stock opname) - Review kinerja teknisi - Evaluasi produk slow-moving |
| 3 Bulan |
- Ganti password semua user - Cleanup data lama (transaksi >1 tahun ke arsip) - Optimize database (VACUUM/OPTIMIZE TABLE) - Review & update master data |
11.5 FAQ (Frequently Asked Questions)
โ Apakah bisa ubah harga produk setelah dibuat?
Jawab: Ya, bisa. Edit produk โ Tab 3 (Harga per Cabang) โ ubah harga beli/jual โ simpan. Perubahan harga tidak mempengaruhi transaksi yang sudah lewat.
โ Bagaimana cara tambah cabang baru untuk produk yang sudah ada?
Jawab: Edit produk โ Tab 2 (tambah stok cabang baru) โ Tab 3 (tambah harga cabang baru) โ simpan. Pastikan cabang yang ditambah di Tab 2 dan Tab 3 sama.
โ Apakah bisa hapus transaksi yang sudah disimpan?
Jawab: Tergantung role user. Admin/Super Admin bisa hapus transaksi. Namun sebaiknya jangan hapus untuk menjaga integritas data. Jika ada kesalahan, buat transaksi koreksi.
โ Bagaimana cara melihat history perubahan harga produk?
Jawab: Di halaman detail produk โ Tabel Harga per Cabang โ ada kolom "Tanggal Efektif" yang menunjukkan kapan harga terakhir diupdate.
โ Apakah laporan bisa difilter per kasir/teknisi?
Jawab: Laporan kinerja teknisi bisa filter per teknisi. Untuk laporan penjualan per kasir, belum tersedia filter (tapi data kasir ditampilkan di tabel transaksi).
โ Bagaimana cara handle produk yang ada di 2 cabang dengan harga berbeda?
Jawab: Sistem sudah support Multi-Harga per Cabang. Di Tab 3, tambahkan harga untuk masing-masing cabang dengan nilai yang berbeda.
โ Apakah bisa cetak label QR Code dalam jumlah banyak sekaligus?
Jawab: Saat ini harus download QR Code satu per satu dari halaman detail produk. Untuk cetak massal, bisa gunakan software label printing eksternal.