# Task D.6.1 – Lead Create Form UX & Default Rules

## Objective

ปรับหน้า Create Lead ให้เหมาะกับการสร้าง Lead ใหม่จริง โดยซ่อน field ที่ยังไม่ควรใช้ตอนเริ่มต้น และตั้งค่า default ตาม business rule

---

## Requirements

### 1. Hide fields on Create Lead

ตอนสร้าง Lead ใหม่ ไม่ต้องแสดง field ต่อไปนี้:

* Lost Reason
* Status
* Marketing Owner

Field เหล่านี้อาจแสดงในหน้า Edit/Detail ตาม permission และสถานะภายหลังได้

---

### 2. Default Lead Status

เมื่อสร้าง Lead ใหม่ ให้ระบบตั้งสถานะอัตโนมัติเป็น:

```text
new_job
```

หรือ label:

```text
New Job
```

User ไม่ต้องเลือกเองในหน้า Create

---

### 3. Default Marketing Owner

Marketing Owner ต้อง default เป็นผู้สร้างเอกสาร

```text
marketingOwnerId = currentUser.id
```

ไม่ต้องให้ user เลือกตอน Create

---

### 4. Add Lead Source field

เพิ่ม field:

```text
Lead Source
```

ใช้เก็บที่มาของ Lead เช่น:

* Website
* Facebook
* Line OA
* Phone Call
* Walk-in
* Referral
* Existing Customer
* Exhibition
* Sales Visit
* Other

ควรใช้ master option / ms_options ถ้ามี foundation รองรับอยู่แล้ว

---

## Create vs Edit Behavior

### Create Lead

แสดงเฉพาะ field ที่จำเป็นสำหรับเปิด Lead ใหม่

ไม่แสดง:

* Lost Reason
* Status
* Marketing Owner

ระบบกำหนดให้อัตโนมัติ

---

### Edit Lead / Detail Lead

สามารถแสดง field เพิ่มเติมตามสถานะและ permission เช่น:

* Status
* Lost Reason เมื่อ status เป็น lost/closed lost
* Marketing Owner สำหรับ admin/manager ถ้าต้อง reassign

---

## Backend Rules

ฝั่ง API/service ต้อง enforce ด้วย ไม่พึ่ง UI อย่างเดียว:

* ถ้า create lead ไม่มี status → set `new_job`
* ถ้า create lead ไม่มี marketingOwnerId → set current user
* ห้าม user override marketingOwnerId ถ้าไม่มี permission
* Lost Reason ต้องไม่ required ตอน create
* Lead Source ควรถูก validate จาก master option

---

## Acceptance Criteria

* Create Lead ไม่แสดง Lost Reason
* Create Lead ไม่แสดง Status
* Create Lead ไม่แสดง Marketing Owner
* Lead ใหม่ถูกสร้างด้วย status `New Job`
* Marketing Owner เป็น user ที่สร้าง Lead
* มี field Lead Source
* Lead Source บันทึกได้ถูกต้อง
* Edit/Detail ยังรองรับ status/lost reason ตาม business rule
* `npm run typecheck`
* `npm run build`

---

# Implementation Result - 2026-07-01

Status: Completed

Implemented:
- Simplified Create Lead UX by hiding `Lost Reason`, `Status`, and `Marketing Owner` from create mode while keeping them available in edit mode.
- Forced create default rules server-side so new leads always open with `new_job` status, `open` outcome, no lost reason, and `ownerMarketingUserId = current user`.
- Added persisted `leadChannel` support on `crm_leads` and exposed it in the UI as `Lead Source`.
- Reused the existing `crm_lead_channel` master-option foundation for the new Lead Source select field.
- Updated lead reference data, DTOs, server mapping, and detail view to carry and display `Lead Source`.
- Rebuilt the lead form around the repo's TanStack Form pattern with explicit create-vs-edit behavior.

Verification:
- `npm run typecheck` -> PASS
- `npm run build` -> PASS
- `npm run audit:pdf` -> PASS

Notes:
- Build still reports existing Turbopack warnings about workspace-root lockfile detection and broad file tracing in storage/template infrastructure. The task did not introduce a blocking build issue.
- Added migration file `drizzle/0001_lead_channel_and_status_default.sql` plus a journal entry for the new `lead_channel` column and removal of the old raw `status` default on `crm_leads`.

Implementation report:
- [task-d.6.1-lead-create-form-ux-default-rules-2026-07-01.md](/C:/Users/mtpphtaps/Documents/gitea/alla-allaos-fullstack/docs/implementation/task-d.6.1-lead-create-form-ux-default-rules-2026-07-01.md)
