Files
alla-allaos-fullstack/plans/task-d.2.md
phaichayon 5be6c54272 taks-d.2.1
2026-06-17 14:46:52 +07:00

4.9 KiB

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 หลัก:

Billing Customer

Data source:

crm_customers

Meaning:

ลูกค้าที่ใช้เป็นผู้ติดต่อ/ผู้ออกเอกสาร/ผู้วางบิลหลัก

Do not rename this field to generic Customer.


UI Requirement 2: Project Party Section

เพิ่ม section แยกชื่อ:

Project Parties

หรือภาษาไทย:

บริษัทที่เกี่ยวข้องในโครงการ

ใน form/detail ของ:

Lead / Opportunity
Quotation

Project Party row ต้องมี field:

Customer
Role
Remark

Role ดึงจาก master option:

crm_project_party_role

Role values:

billing_customer
customer
consultant
contractor
end_customer
other

UI Requirement 3: Add Party Flow

ใน Project Parties section ต้องมีปุ่ม:

Add Party

เมื่อกดให้เลือก:

Customer
Role
Remark optional

ถ้า customer ยังไม่มีใน master ให้ยังไม่ต้องสร้าง inline customer ใน Task นี้ ให้ใช้ customer master ที่มีอยู่ก่อน


UI Requirement 4: Display Role Clearly

ทุกที่ที่แสดง Project Party ต้องแสดง role ชัดเจน เช่น:

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:

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 ให้แสดงแยกชัดเจน:

Billing Customer

และ

Project Parties

ตัวอย่าง:

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 เดิมมี:

crm_quotation_customers

ให้ refactor/align กับ Project Parties

แต่ UI ต้องแสดงแบบเดียวกัน:

Billing Customer
Project Parties

อย่าใช้คำว่า Owner ถ้า business ไม่ใช้แล้ว

Mapping เก่า:

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