# POS Laundry Multi Cabang

Aplikasi POS Laundry berbasis Laravel 13, PHP 8.3+, MySQL 8, Blade, Livewire, queue, scheduler, policy/middleware role, dan PWA portal pelanggan.

## Instalasi

```bash
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
npm install
npm run build
php artisan serve
php artisan queue:work
```

Login awal:

- Owner: `owner@laundry.test` / `password`
- Kasir: `kasir@laundry.test` / `password`
- PIN portal pelanggan default: `000000`

## Modul Utama

- Autentikasi admin, role `owner`, `admin_cabang`, `manager`, `kasir`, dan pembatasan cabang via middleware.
- Master data cabang, kategori, produk layanan/retail, pelanggan, supplier, user, dan pengaturan.
- POS menghitung total di server, mencatat pembayaran, memotong stok retail, dan membuat timeline awal.
- Order laundry memakai status inti dan progress customer-facing terpisah di `order_progress_logs`.
- Form digital pemeriksaan barang hanya dari nota, tanpa sidebar, dengan retensi evidence via scheduler.
- Inventory, pembelian, stock opname, mutasi stok, dan transfer antar cabang dengan approval.
- Laporan penjualan, laba rugi, bonus karyawan, dan pencairan bonus ke biaya operasional.
- Portal pelanggan PWA memakai nomor HP + PIN untuk tracking, histori, reward progress, repeat order, dan pickup request.
- Public tracking nota aman untuk tanggal kosong.

## Arsitektur

Business rule utama berada di service:

- `OrderService`
- `PaymentService`
- `StockService`
- `BonusService`
- `CustomerPortalService`
- `ProgressService`
- `EvidenceService`
- `RequestService`

Transaksi database dipakai pada checkout POS, pembayaran, transfer stok, konversi request, dan pencairan bonus. Controller dibuat tipis dan route dipisah berdasarkan area admin, portal, dan public tracking.

## Scheduler dan Queue

Tambahkan cron server:

```bash
* * * * * cd /path/to/app && php artisan schedule:run >> /dev/null 2>&1
```

Cleanup evidence berjalan lewat `php artisan evidence:cleanup`, yang mengantrekan `CleanupEvidenceFiles`.

## Testing

```bash
php artisan test
```

Test dasar mencakup checkout, pengurangan stok retail, validasi pengambilan harus lunas, alur status, reward gratis tanpa bonus karyawan, dan autentikasi portal pelanggan dengan PIN.
