# Task D.1: Enquiry Assignment + CRM Role Permission Stabilization ## Goal เพิ่มระบบ Assign Sales ให้ Enquiry และปรับ Role/Permission ให้รองรับ ALLA OS CRM ไม่ใช่เฉพาะ IT-CENTER template ## Must Read ```txt 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 เหล่านี้หรือยัง: ```txt assignedToUserId assignedAt assignedBy assignmentRemark ``` ตรวจสอบ UI: ```txt Assign Sales Reassign Sales My Enquiries Assigned Enquiries ``` ตรวจสอบ permission: ```txt crm.enquiry.assign crm.enquiry.reassign ``` ถ้าไม่มี ให้ implement ตาม scope ถัดไป ## Scope 2: Schema เพิ่ม field ใน `crm_enquiries`: ```txt assignedToUserId assignedAt assignedBy assignmentRemark ``` Rules: * assignedToUserId อ้างถึง user ใน organization เดียวกัน * assignedBy คือ current user * assignedAt คือเวลาที่ assign ล่าสุด * assignmentRemark optional * soft delete ไม่เกี่ยวกับ assignment ## Scope 3: API เพิ่ม route: ```txt POST /api/crm/enquiries/[id]/assign POST /api/crm/enquiries/[id]/reassign ``` Payload: ```ts { assignedToUserId: string remark?: string } ``` Rules: * ต้อง require organization access * ต้อง validate assignee อยู่ใน organization เดียวกัน * assign/reassign ต้อง audit * assign ครั้งแรกใช้ action = assign * เปลี่ยนคนใช้ action = reassign ## Scope 4: Permission เพิ่ม permission: ```txt crm.enquiry.assign crm.enquiry.reassign ``` Role recommendation: ```txt 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: ```txt Assign Sales Reassign Sales ``` แสดงเมื่อ: ```txt user has crm.enquiry.assign หรือ crm.enquiry.reassign ``` แสดงข้อมูล: ```txt Assigned Sales Assigned At Assigned By Assignment Remark ``` ใน Enquiry List เพิ่ม column: ```txt Assigned Sales ``` ## Scope 6: Form ใช้ Sheet/Dialog pattern Field: ```txt Sales User Remark ``` Sales User dropdown ต้องดึงจาก users/memberships ใน organization ปัจจุบัน ห้าม hardcode user ## Scope 7: Audit Audit entity: ```txt crm_enquiry ``` Actions: ```txt assign reassign ``` beforeData: ```txt oldAssignedToUserId ``` afterData: ```txt newAssignedToUserId remark ``` ## Scope 8: Membership/Permission Stabilization ตรวจ Workspace Membership UI ว่ายังเป็น IT-CENTER template อยู่หรือไม่ ถ้ายังเป็น IT-CENTER ให้เพิ่ม CRM permissions เข้าไปก่อน โดยไม่ลบของเดิมทันที เพิ่ม permission groups: ```txt crm.customer.* crm.contact.* crm.enquiry.* crm.quotation.* crm.approval.* crm.document_template.* ``` อย่างน้อยต้องมี: ```txt crm.enquiry.read crm.enquiry.create crm.enquiry.update crm.enquiry.delete crm.enquiry.assign crm.enquiry.reassign ``` ## ห้ามทำ ```txt Quotation assignment Approval assignment Notification Dashboard KPI Report Major RBAC rewrite ``` ## Output สรุป: 1. Files Added 2. Files Modified 3. Schema Added 4. API Routes Added 5. Permissions Added 6. UI Added 7. Audit Integration 8. 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