task-h.1 complate
This commit is contained in:
251
plans/task-d.1.md
Normal file
251
plans/task-d.1.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user