252 lines
4.4 KiB
Markdown
252 lines
4.4 KiB
Markdown
# 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
|