Files
alla-allaos-fullstack/plans/task-d.1.md
2026-06-16 14:25:26 +07:00

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

สรุป:

  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