# 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
