# Rencana Penyelesaian: Alur Otorisasi Estimate Sebelum Order

Mengubah alur bisnis pengajuan *estimate* agar tidak langsung dikirim ke holding/subsidiary saat disetujui (won/accepted), melainkan berubah status menjadi **"Siap Diorder"** terlebih dahulu dan memerlukan otorisasi dari atasan sebelum diproses ke sistem eksternal.

---

## Rincian Perubahan

### 1. Penambahan Status Baru (`siap_diorder`)
* **Bahasa/Locale**:
  * [Indonesian](file:///w:/san_ibb_2jul/app/Language/Indonesian/custom_lang.php): `$lang["siap_diorder"] = "Siap Diorder";`
  * [English](file:///w:/san_ibb_2jul/app/Language/english/custom_lang.php): `$lang["siap_diorder"] = "Ready to Order";`
* **Label Badge**:
  * Menyesuaikan [general_helper.php](file:///w:/san_ibb_2jul/app/Helpers/general_helper.php) di fungsi `get_estimate_status_label()` agar status `'siap_diorder'` memiliki badge berwarna biru (`bg-info`) atau oranye (`bg-warning`).

### 2. Refaktorisasi dan Penyesuaian Backend (`app/Controllers/Estimates.php`)
* **Pemisahan Logika Pengiriman**:
  * Ekstrak logika penulisan order ke database dan pengiriman sinkronisasi webhook/RabbitMQ dari fungsi `save_order()` ke dalam fungsi privat baru: `_process_order_webhook_sync($estimate_id)`.
* **Fungsi Otorisasi Baru (`authorize_order`)**:
  * Membuat endpoint baru `authorize_order($estimate_id)` yang memvalidasi bahwa user adalah atasan/admin.
  * Mengubah status dokumen dari `'siap_diorder'` menjadi `'accepted'`.
  * Memanggil `_process_order_webhook_sync($estimate_id)` untuk memproses order dan sinkronisasi ke holding/subsidiary.
* **Penyesuaian `save_order()`**:
  * Mengizinkan status `'siap_diorder'` di bagian pengecekan status awal.
  * Melewati proses pengiriman order langsung karena status dokumen sekarang adalah `'siap_diorder'` (bukan `'accepted'`).

### 3. Penyesuaian Antarmuka Pengguna (UI/Views)
* **Pemicu Awal (Salesperson)**:
  * Mengubah tombol aksi di [estimate_action_bar.php](file:///W:/san_ibb_2jul/app/Views/estimates/estimate_action_bar.php) agar membuka modal `modal_admdomain_form` dengan status target `'siap_diorder'` (sebelumnya `'accepted'`).
* **Tombol Otorisasi (Atasan/Supervisor)**:
  * Pada detail halaman *estimate* [estimate_action_bar.php](file:///W:/san_ibb_2jul/app/Views/estimates/estimate_action_bar.php), jika status dokumen adalah `'siap_diorder'` **DAN** pengguna saat ini adalah atasan/admin, tampilkan tombol **"Otorisasi Order"** yang memicu *endpoint* `authorize_order` melalui AJAX.

---

## Alur Kerja Baru (Workflow)

```mermaid
sequenceDiagram
    actor Sales as Salesperson
    actor Atasan as Supervisor / Admin
    participant CRM as CRM System (Backend)
    participant External as Holding / Subsidiary

    Sales->>CRM: Klik "Mark as Won" & Pilih Executor
    Note over CRM: Status berubah menjadi "Siap Diorder"
    Note over CRM: Data tersimpan, tapi webhook TIDAK dikirim
    
    Atasan->>CRM: Lihat Estimate & Klik "Otorisasi Order"
    Note over CRM: Validasi Hak Akses Atasan
    CRM->>CRM: Update status menjadi "Accepted"
    CRM->>External: Jalankan Webhook Sync Pre-order
    External-->>CRM: Respon Sinkronisasi Sukses
    CRM-->>Atasan: Tampilkan Notifikasi Berhasil
```

---

## Rencana Verifikasi

### Pengujian Manual
1. **Pengajuan oleh Sales**:
   * Masuk sebagai Salesperson, buka *estimate* dengan status `draft` atau `sent`.
   * Klik tombol konfirmasi won/setuju, isi detail konsumen dan executor di modal.
   * Pastikan dokumen tersimpan dengan status baru **"Siap Diorder"** dan data tidak terkirim ke holding/subsidiary (cek log atau database table `rise_order_bridge_items`).
   * Pastikan tombol edit atau konfirmasi ulang tidak muncul kembali untuk Sales.
2. **Otorisasi oleh Atasan**:
   * Masuk sebagai Admin/Supervisor.
   * Buka *estimate* yang bersangkutan, pastikan tombol **"Otorisasi Order"** muncul.
   * Klik otorisasi, pastikan status berubah menjadi **"Accepted"** dan data terkirim sukses via webhook ke holding/subsidiary.
