# Analisis Teknis: Nama Konsumen Tidak Tampil di Order Baru CRM

## Summary / Ringkasan Masalah

Pada modul Penjualan CRM, terjadi masalah di mana nama konsumen/customer tidak muncul (kosong) pada:
1. **List Order Baru dari CRM** (Kolom `CUSTOMER` hanya menampilkan label `(Belum Approved)` atau kosong).
2. **Modal Peringatan Approval Customer** ketika tombol **FOLLOWUP** diklik (Menampilkan `Data customer () Belum approve di Holding (san.mayagrahakencana.com)` di mana teks di dalam tanda kurung `()` kosong).

---

## Technical Root Cause Analysis (Analisis Penyebab Teknis)

```mermaid
flowchart TD
    A[Payload Webhook CRM Masuk] -->|Hanya map company_name| B[per_customers_register]
    B -->|Field nama NULL/Kosong| C[Query CustomerRegister]
    C -->|Response nama = ''| D[CustomerApprovalApi/checkStatus]
    D -->|customer_nama = ''| E[UI Modal: Data customer () Belum approve...]
    C -->|preCustomerMapping nama = ''| F[TransaksiCrm::viewOrderCrm]
    F -->|Customer Name = ''| G[UI Table: Column Customer Kosong]
```

### 1. Pemetaan Field Nama pada Webhook Penerimaan CRM (Upstream Cause)
- **Lokasi Kode:**
  - [Webhook.php](file:///z:/san_tsa_17jul/application/controllers/eusvc/Webhook.php#L14-L28)
  - [Customers.php](file:///z:/san_tsa_17jul/application/controllers/eusvc/Customers.php#L182-L198)
- **Penyebab:**
  Saat data lead/customer baru masuk dari CRM via Webhook, sistem melakukan pemetaan kolom secara kaku ke tabel `per_customers_register`:
  ```php
  $koloms = [
      "nama" => "company_name",
      "email" => "email",
      // ...
  ];
  ```
  Jika webhook dari CRM mengirim nama customer melalui field alternatif (misal: `name`, `lead_name`, `client_name`, `customer_name`, `contact_name`, `title`) atau jika `company_name` bernilai `null`/kosong, maka kolom `nama` pada tabel `per_customers_register` tersimpan sebagai `NULL` atau string kosong `""`.

---

### 2. Penyebab Nama Kosong di Modal Peringatan Approval (`Data customer () Belum approve...`)
- **Lokasi Kode:**
  - [CustomerApprovalApi.php](file:///z:/san_tsa_17jul/application/modules/penjualan/controllers/CustomerApprovalApi.php#L76)
  - [transaksi.php](file:///z:/san_tsa_17jul/application/modules/penjualan/views/transaksi.php#L15785)
- **Penyebab:**
  1. Ketika tombol **FOLLOWUP** diklik pada order CRM yang `customer_id = 0`, JavaScript memanggil API `CustomerApprovalApi/checkStatus`.
  2. Controller `CustomerApprovalApi` mengambil record dari `per_customers_register` dan mengembalikan JSON:
     ```php
     'nama' => isset($regResult->nama) ? $regResult->nama : ''
     ```
     Karena kolom `nama` di database bernilai `NULL` / `""`, JSON mengembalikan `"nama": ""`.
  3. Di JavaScript view [transaksi.php](file:///z:/san_tsa_17jul/application/modules/penjualan/views/transaksi.php#L15785), string pesan modal dibentuk menggunakan:
     ```javascript
     var msg = 'Data customer<br> <r><b>('+customer_nama+')</b></r><br> Belum approve di Holding (san.mayagrahakencana.com)...';
     ```
  4. Karena `customer_nama` bernilai `""`, modal menampilkan `Data customer () Belum approve...` dengan tanda kurung kosong.

---

### 3. Penyebab Nama Kosong / N/A di Tabel List Order Baru CRM
- **Lokasi Kode:**
  - [MdlTransaksiCrm.php](file:///z:/san_tsa_17jul/application/models/MdlTransaksiCrm.php#L193)
  - [MdlTransaksiCrm.php](file:///z:/san_tsa_17jul/application/models/MdlTransaksiCrm.php#L360)
  - [TransaksiCrm.php](file:///z:/san_tsa_17jul/application/modules/penjualan/controllers/TransaksiCrm.php#L216)
- **Penyebab:**
  1. Controller `TransaksiCrm::viewOrderCrm()` memanggil `MdlTransaksiCrm::resolveCustomerName()`.
  2. Fungsi tersebut membaca kolom `nama` dari `per_customers_register` (melalui `buildPreCustomerMapping`).
  3. Apabila kolom `nama` bernilai `NULL`/kosong, nama customer yang dihasilkan hanya berupa `" (Belum Approved)"` atau `"N/A"` tanpa menampilkan identitas pemesan.

---

## Rekomendasi Solusi & Plan Perbaikan

1. **Multi-field Fallback di Webhook Controller (`Webhook.php` & `Customers.php`)**:
   Implementasi Coalesce / Multi-field fallback saat menerima webhook CRM:
   ```php
   $namaCustomer = !empty($json['company_name']) ? $json['company_name'] :
                  (!empty($json['name']) ? $json['name'] :
                  (!empty($json['customer_name']) ? $json['customer_name'] :
                  (!empty($json['lead_name']) ? $json['lead_name'] :
                  (!empty($json['client_name']) ? $json['client_name'] : 'Tanpa Nama'))));
   ```
2. **Fallback pada Resolusi Nama Customer (`MdlTransaksiCrm.php` & `CustomerApprovalApi.php`)**:
   Jika kolom `nama` di `per_customers_register` kosong, berikan fallback nama alternatif (seperti `contact_person`, `email`, atau format `'Lead CRM #' . $clientId`).
3. **Fallback pada UI Modal (`transaksi.php`)**:
   Memastikan variabel `customer_nama` di JavaScript memiliki default value jika bernilai string kosong sebelum ditampilkan ke modal.
