taks-d.2.1
This commit is contained in:
219
plans/task-d.2.md
Normal file
219
plans/task-d.2.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# Addendum for Task D.2: Customer Role Selection UI + Separate Project Party Field
|
||||
|
||||
## Context
|
||||
|
||||
ตอนนี้การเลือก Customer ใน Lead / Opportunity / Quotation ใช้งานได้แล้ว แต่ยังไม่ชัดว่า Customer ที่เลือกมีบทบาทอะไรในโครงการ
|
||||
|
||||
Business requirement ใหม่:
|
||||
|
||||
* Customer หลักในฟอร์มยังใช้เป็น Billing Customer ได้
|
||||
* แต่ต้องมี Project Party แยกอีกชุดหนึ่ง
|
||||
* Project Party ใช้บอกว่าในโครงการนี้มีบริษัทไหนทำ role อะไร
|
||||
* บริษัทเดียวกันอาจมี role ต่างกันในแต่ละโครงการ
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 1: Billing Customer Field
|
||||
|
||||
ใน Lead / Opportunity / Quotation form ให้คง field หลัก:
|
||||
|
||||
```txt
|
||||
Billing Customer
|
||||
```
|
||||
|
||||
Data source:
|
||||
|
||||
```txt
|
||||
crm_customers
|
||||
```
|
||||
|
||||
Meaning:
|
||||
|
||||
```txt
|
||||
ลูกค้าที่ใช้เป็นผู้ติดต่อ/ผู้ออกเอกสาร/ผู้วางบิลหลัก
|
||||
```
|
||||
|
||||
Do not rename this field to generic Customer.
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 2: Project Party Section
|
||||
|
||||
เพิ่ม section แยกชื่อ:
|
||||
|
||||
```txt
|
||||
Project Parties
|
||||
```
|
||||
|
||||
หรือภาษาไทย:
|
||||
|
||||
```txt
|
||||
บริษัทที่เกี่ยวข้องในโครงการ
|
||||
```
|
||||
|
||||
ใน form/detail ของ:
|
||||
|
||||
```txt
|
||||
Lead / Opportunity
|
||||
Quotation
|
||||
```
|
||||
|
||||
Project Party row ต้องมี field:
|
||||
|
||||
```txt
|
||||
Customer
|
||||
Role
|
||||
Remark
|
||||
```
|
||||
|
||||
Role ดึงจาก master option:
|
||||
|
||||
```txt
|
||||
crm_project_party_role
|
||||
```
|
||||
|
||||
Role values:
|
||||
|
||||
```txt
|
||||
billing_customer
|
||||
customer
|
||||
consultant
|
||||
contractor
|
||||
end_customer
|
||||
other
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 3: Add Party Flow
|
||||
|
||||
ใน Project Parties section ต้องมีปุ่ม:
|
||||
|
||||
```txt
|
||||
Add Party
|
||||
```
|
||||
|
||||
เมื่อกดให้เลือก:
|
||||
|
||||
```txt
|
||||
Customer
|
||||
Role
|
||||
Remark optional
|
||||
```
|
||||
|
||||
ถ้า customer ยังไม่มีใน master ให้ยังไม่ต้องสร้าง inline customer ใน Task นี้
|
||||
ให้ใช้ customer master ที่มีอยู่ก่อน
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 4: Display Role Clearly
|
||||
|
||||
ทุกที่ที่แสดง Project Party ต้องแสดง role ชัดเจน เช่น:
|
||||
|
||||
```txt
|
||||
PTT Public Company Limited
|
||||
Role: End Customer
|
||||
|
||||
Italian Thai
|
||||
Role: Contractor
|
||||
|
||||
AEC Consultant
|
||||
Role: Consultant
|
||||
```
|
||||
|
||||
ห้ามแสดงแค่ชื่อบริษัทโดยไม่มี role
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 5: Billing Customer Auto Add Option
|
||||
|
||||
เมื่อสร้าง Lead / Opportunity / Quotation แล้วเลือก Billing Customer
|
||||
|
||||
ให้ระบบสามารถ auto-add ลง Project Parties เป็น role:
|
||||
|
||||
```txt
|
||||
billing_customer
|
||||
```
|
||||
|
||||
ถ้าทำได้โดยไม่ซับซ้อน
|
||||
|
||||
Rules:
|
||||
|
||||
* ห้าม duplicate customerId + roleCode ใน entity เดียวกัน
|
||||
* ถ้า billing customer มีอยู่แล้วใน Project Parties ไม่ต้องเพิ่มซ้ำ
|
||||
* ถ้า user เปลี่ยน Billing Customer ให้ถาม/หรือ update ตาม business-safe behavior
|
||||
|
||||
ถ้า logic นี้ใหญ่เกินไป ให้ทำเป็น TODO และไม่ block Task D.2
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 6: Detail Page
|
||||
|
||||
ใน detail page ให้แสดงแยกชัดเจน:
|
||||
|
||||
```txt
|
||||
Billing Customer
|
||||
```
|
||||
|
||||
และ
|
||||
|
||||
```txt
|
||||
Project Parties
|
||||
```
|
||||
|
||||
ตัวอย่าง:
|
||||
|
||||
```txt
|
||||
Billing Customer:
|
||||
ABC Engineering Co., Ltd.
|
||||
|
||||
Project Parties:
|
||||
- ABC Engineering Co., Ltd. / Billing Customer
|
||||
- PTT / End Customer
|
||||
- Italian Thai / Contractor
|
||||
- AEC / Consultant
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# UI Requirement 7: Quotation Compatibility
|
||||
|
||||
Quotation เดิมมี:
|
||||
|
||||
```txt
|
||||
crm_quotation_customers
|
||||
```
|
||||
|
||||
ให้ refactor/align กับ Project Parties
|
||||
|
||||
แต่ UI ต้องแสดงแบบเดียวกัน:
|
||||
|
||||
```txt
|
||||
Billing Customer
|
||||
Project Parties
|
||||
```
|
||||
|
||||
อย่าใช้คำว่า Owner ถ้า business ไม่ใช้แล้ว
|
||||
|
||||
Mapping เก่า:
|
||||
|
||||
```txt
|
||||
owner -> customer
|
||||
billing -> billing_customer
|
||||
consultant -> consultant
|
||||
contractor -> contractor
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Definition of Done Addendum
|
||||
|
||||
Task D.2 จะถือว่าครบเมื่อ:
|
||||
|
||||
* Billing Customer เป็น field หลักแยกจาก Project Parties
|
||||
* Project Parties เป็น section/table แยก
|
||||
* แต่ละ Project Party มี Customer + Role + Remark
|
||||
* Role ดึงจาก master option
|
||||
* Detail page แสดง Billing Customer และ Project Parties แยกกัน
|
||||
* Quotation compatibility mapping ไม่ทำให้ข้อมูลเก่าหาย
|
||||
* ไม่มี UI ที่แสดงบริษัทเกี่ยวข้องโดยไม่บอก role
|
||||
Reference in New Issue
Block a user