4.4 KiB
Task D.1: Enquiry Assignment + CRM Role Permission Stabilization
Goal
เพิ่มระบบ Assign Sales ให้ Enquiry และปรับ Role/Permission ให้รองรับ ALLA OS CRM ไม่ใช่เฉพาะ IT-CENTER template
Must Read
docs/implementation/task-a-template-audit.md
docs/implementation/task-b-template-audit.md
docs/implementation/task-b1-foundation-stabilization.md
src/features/crm/enquiries/**
src/features/crm/customers/**
src/features/foundation/**
src/lib/auth/rbac.ts
src/db/schema.ts
src/db/seeds/foundation.seed.ts
Scope 1: Audit Current Enquiry Assignment
ตรวจสอบว่า crm_enquiries มี field เหล่านี้หรือยัง:
assignedToUserId
assignedAt
assignedBy
assignmentRemark
ตรวจสอบ UI:
Assign Sales
Reassign Sales
My Enquiries
Assigned Enquiries
ตรวจสอบ permission:
crm.enquiry.assign
crm.enquiry.reassign
ถ้าไม่มี ให้ implement ตาม scope ถัดไป
Scope 2: Schema
เพิ่ม field ใน crm_enquiries:
assignedToUserId
assignedAt
assignedBy
assignmentRemark
Rules:
- assignedToUserId อ้างถึง user ใน organization เดียวกัน
- assignedBy คือ current user
- assignedAt คือเวลาที่ assign ล่าสุด
- assignmentRemark optional
- soft delete ไม่เกี่ยวกับ assignment
Scope 3: API
เพิ่ม route:
POST /api/crm/enquiries/[id]/assign
POST /api/crm/enquiries/[id]/reassign
Payload:
{
assignedToUserId: string
remark?: string
}
Rules:
- ต้อง require organization access
- ต้อง validate assignee อยู่ใน organization เดียวกัน
- assign/reassign ต้อง audit
- assign ครั้งแรกใช้ action = assign
- เปลี่ยนคนใช้ action = reassign
Scope 4: Permission
เพิ่ม permission:
crm.enquiry.assign
crm.enquiry.reassign
Role recommendation:
super_admin: all permissions
organization_admin: all crm permissions
sales_manager: read/create/update/assign/reassign enquiry
sales: read/create/update own/assigned enquiry
sales_support: read/create/update enquiry
viewer: read only
อย่า hardcode เฉพาะ IT-CENTER roles
Scope 5: UI
ใน Enquiry Detail เพิ่ม action:
Assign Sales
Reassign Sales
แสดงเมื่อ:
user has crm.enquiry.assign หรือ crm.enquiry.reassign
แสดงข้อมูล:
Assigned Sales
Assigned At
Assigned By
Assignment Remark
ใน Enquiry List เพิ่ม column:
Assigned Sales
Scope 6: Form
ใช้ Sheet/Dialog pattern
Field:
Sales User
Remark
Sales User dropdown ต้องดึงจาก users/memberships ใน organization ปัจจุบัน
ห้าม hardcode user
Scope 7: Audit
Audit entity:
crm_enquiry
Actions:
assign
reassign
beforeData:
oldAssignedToUserId
afterData:
newAssignedToUserId
remark
Scope 8: Membership/Permission Stabilization
ตรวจ Workspace Membership UI ว่ายังเป็น IT-CENTER template อยู่หรือไม่
ถ้ายังเป็น IT-CENTER ให้เพิ่ม CRM permissions เข้าไปก่อน โดยไม่ลบของเดิมทันที
เพิ่ม permission groups:
crm.customer.*
crm.contact.*
crm.enquiry.*
crm.quotation.*
crm.approval.*
crm.document_template.*
อย่างน้อยต้องมี:
crm.enquiry.read
crm.enquiry.create
crm.enquiry.update
crm.enquiry.delete
crm.enquiry.assign
crm.enquiry.reassign
ห้ามทำ
Quotation assignment
Approval assignment
Notification
Dashboard KPI
Report
Major RBAC rewrite
Output
สรุป:
- Files Added
- Files Modified
- Schema Added
- API Routes Added
- Permissions Added
- UI Added
- Audit Integration
- Remaining Risks
Definition of Done
- Enquiry assign sales ได้
- Reassign sales ได้
- Enquiry list แสดง assigned sales
- Enquiry detail แสดง assigned sales
- Permission guard ทำงาน
- super_admin เห็นปุ่ม assign
- audit log ถูกสร้าง
- ไม่กระทบ Customer/Quotation/Approval