feat: add percentage loyalti setting mode
This commit is contained in:
+19
-5
@@ -197,20 +197,28 @@ Disimpan di `outlet_settings` (key–value, sudah ada).
|
||||
| Key | Tipe | Default | Arti |
|
||||
|---|---|---|---|
|
||||
| `loyalty.point.enabled` | bool | `false` | Outlet memberi EnakPoint |
|
||||
| `loyalty.point.earn_per_amount` | int (Rp) | `100` | Setiap kelipatan nominal ini… |
|
||||
| `loyalty.point.earn_mode` | `PER_AMOUNT` / `PERCENTAGE` | `PER_AMOUNT` | Cara menghitung earning |
|
||||
| `loyalty.point.earn_per_amount` | int (Rp) | `100` | `PER_AMOUNT`: setiap kelipatan nominal ini… |
|
||||
| `loyalty.point.earn_value` | int | `1` | …mendapat sekian EnakPoint |
|
||||
| `loyalty.point.earn_percent` | desimal (0–100, maks. 2 angka desimal) | `1` | `PERCENTAGE`: sekian persen dari basis menjadi EnakPoint |
|
||||
| `loyalty.point.min_order_amount` | int (Rp) | `0` | Basis minimal agar dapat EnakPoint |
|
||||
| `loyalty.point.max_per_order` | int, nullable | kosong | Batas atas EnakPoint per order |
|
||||
| `loyalty.coin.enabled` | bool | `false` | Outlet memberi EnakCoin |
|
||||
| `loyalty.coin.earn_mode` | `PER_AMOUNT` / `PERCENTAGE` | `PER_AMOUNT` | |
|
||||
| `loyalty.coin.earn_per_amount` | int (Rp) | `25000` | |
|
||||
| `loyalty.coin.earn_value` | int | `1` | |
|
||||
| `loyalty.coin.earn_percent` | desimal (0–100, maks. 2 angka desimal) | `1` | |
|
||||
| `loyalty.coin.min_order_amount` | int (Rp) | `0` | |
|
||||
| `loyalty.coin.max_per_order` | int, nullable | kosong | |
|
||||
|
||||
Dengan nilai EnakPoint default Rp 1, default earning 1 EnakPoint per Rp 100 setara
|
||||
**cashback 1%**. Dashboard selalu menampilkan persentase cashback efektif di samping
|
||||
setting ini: `earn_value × nilai EnakPoint / earn_per_amount`. Tujuannya supaya owner
|
||||
tidak salah mengira skala.
|
||||
setting ini: `earn_value × nilai EnakPoint / earn_per_amount`, atau pada mode
|
||||
`PERCENTAGE`: `earn_percent × nilai EnakPoint`. Tujuannya supaya owner tidak salah
|
||||
mengira skala.
|
||||
|
||||
Setting mode yang sedang tidak dipakai tetap tersimpan, sehingga berpindah mode tidak
|
||||
menghapus nilai mode sebelumnya.
|
||||
|
||||
**Pembayaran EnakPoint.** Hanya ada untuk EnakPoint, tidak ada padanannya untuk
|
||||
EnakCoin.
|
||||
@@ -226,7 +234,8 @@ EnakCoin.
|
||||
```
|
||||
basis = subtotal − discount_amount − dibayar_dengan_enakpoint
|
||||
jumlah = 0 jika basis < min_order_amount
|
||||
jumlah = floor(basis / earn_per_amount) × earn_value
|
||||
jumlah = floor(basis / earn_per_amount) × earn_value mode PER_AMOUNT
|
||||
jumlah = floor(basis × earn_percent / 100) mode PERCENTAGE
|
||||
jumlah = min(jumlah, max_per_order) jika max_per_order diisi
|
||||
```
|
||||
|
||||
@@ -240,7 +249,12 @@ jumlah = min(jumlah, max_per_order) jika max_per_order diisi
|
||||
EnakPoint** dan **3 EnakCoin**. Jika Rp 20.000 dari order itu dibayar dengan EnakPoint,
|
||||
basisnya menjadi Rp 67.500, sehingga customer mendapat 675 EnakPoint dan 2 EnakCoin.
|
||||
|
||||
Validasi: `earn_per_amount > 0`, `earn_value ≥ 0`, `min_order_amount ≥ 0`,
|
||||
Pada mode `PERCENTAGE`, `earn_percent` adalah persen dari basis yang menjadi
|
||||
**jumlah** EnakPoint/EnakCoin (bukan nilai rupiahnya): 2,5% dari basis Rp 87.500
|
||||
menghasilkan 2.187 EnakPoint.
|
||||
|
||||
Validasi: `earn_per_amount > 0`, `earn_value ≥ 0`, `0 ≤ earn_percent ≤ 100` dengan
|
||||
paling banyak dua angka desimal, `min_order_amount ≥ 0`,
|
||||
`max_per_order ≥ 0`, `0 ≤ max_payment_percent ≤ 100`. Hanya role Admin/Manager yang
|
||||
bisa mengubah.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user