[CLAUDE] Docs: Session 17 schema mới ApprovalWorkflowsV2 (Chunk D)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m16s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m16s
Update STATUS row mới + HANDOFF brief Session 17 + CLAUDE.md count 22 migration / 58 bảng. Tóm tắt session: - User chốt sau S16: schema flat Mig 21 vẫn không đúng intent → yêu cầu viết lại + thêm Menu mới "Duyệt NCC (Mới)" với cấu trúc explicit Quy trình > Bước (Phòng) > Cấp (NV cụ thể). - 4 commit (3 chunk per-commit + docs): Mig 22 + 3 bảng mới + Application CQRS + API + FE Designer mới. - PE/Contract Service CHƯA wire — vẫn pin Mig 21 legacy. - Sau UAT UIUX OK → Session sau pin ApprovalWorkflowId song song + Service rewrite + migrate data + drop legacy. - Backward compat 100%, 77 test pass no regression.
This commit is contained in:
@ -1,6 +1,70 @@
|
||||
# HANDOFF — Brief 5 phút cho session tiếp theo
|
||||
|
||||
**Last updated:** 2026-05-08 (Session 16 — **🎯 DRASTIC REFACTOR DONE: flat workflow Phòng × Cấp + Mig 21 + Service rewrite + FE Designer rewrite. 2 commit Chunk A+B. 96 → 77 test pass (drop 19 legacy). Backward compat: legacy phase 2-9+98 enum giữ cho data cũ.**)
|
||||
**Last updated:** 2026-05-08 (Session 17 — **🎯 SCHEMA MỚI ApprovalWorkflowsV2 + Menu "Duyệt NCC (Mới)" UAT. 4 commit. Schema riêng trên Mig 22. Cấu trúc Bước (Phòng) > Cấp (NV cụ thể qua ApproverUserId — KHÔNG OR-of-many). Chỉ admin Designer xong, Service PE/Contract chưa wire qua schema mới — UAT UIUX trước.**)
|
||||
|
||||
## TL;DR Session 17 (08/05 — Schema mới UAT trước khi drop legacy)
|
||||
|
||||
User chốt sau Session 16: schema flat Mig 21 vẫn không đúng intent. Yêu cầu **viết lại toàn bộ chỗ Quy trình Duyệt + thêm Menu mới "Duyệt NCC (Mới)"** với cấu trúc rõ ràng:
|
||||
|
||||
```
|
||||
Mã Quy trình - Tên Quy trình
|
||||
* Bước 1 - Phòng A
|
||||
* Cấp 1 - NV X ← 1 user CỤ THỂ qua ApproverUserId
|
||||
* Cấp 2 - NV Y
|
||||
* Bước 2 - Phòng B
|
||||
* Cấp 1 - NV Z
|
||||
```
|
||||
|
||||
Khác Mig 21: mỗi Cấp = 1 NV chính xác, KHÔNG OR-of-many group Dept+PositionLevel/Role/User.
|
||||
|
||||
**4 commit (3 chunk per-commit + docs):**
|
||||
|
||||
### Chunk A (`c847dc0`) — Domain + EF + Mig 22 + Menu
|
||||
|
||||
- Domain `ApprovalWorkflowsV2/ApprovalWorkflow.cs` — 3 entity (ApprovalWorkflow + Step + Level) + enum `ApprovalWorkflowApplicableType` (DuyetNcc=1 / DuyetNccPhuongAn=2 / Contract=3)
|
||||
- EF `ApprovalWorkflowConfiguration.cs` — UNIQUE (Code, Version), FK Cascade Step→Workflow + Level→Step, FK Restrict Department + ApproverUserId
|
||||
- ApplicationDbContext +3 DbSet
|
||||
- **Migration 22** `AddApprovalWorkflowsV2` — 3 CREATE TABLE + 1 UNIQUE + 4 INDEX. Applied cả `_Design` + `_Dev` LocalDB
|
||||
- DbInitializer SeedMenusAsync: +menu `ApprovalWorkflowsV2` root dưới System (icon Workflow) + leaf `AwV2_DuyetNcc` (icon FileCheck, label "Duyệt NCC (Mới)")
|
||||
- MenuKeys.cs +2 const trong All array
|
||||
|
||||
### Chunk B (`f6047d5`) — Application CQRS + API
|
||||
|
||||
- `Application/ApprovalWorkflowsV2/ApprovalWorkflowV2AdminFeatures.cs`:
|
||||
- `GetAwAdminOverviewQuery(ApplicableType?)` — load 3-level Include + dept/user names map
|
||||
- `CreateAwDefinitionCommand` + Validator — auto-increment Version theo Code, deactivate active version cùng ApplicableType
|
||||
- `DeleteAwDefinitionCommand` — UAT helper unconditional (chưa pin)
|
||||
- DTO AwDefinition/AwStep/AwLevel + AwTypeSummary
|
||||
- IApplicationDbContext +3 DbSet
|
||||
- `Api/Controllers/ApprovalWorkflowsV2Controller` — route `/api/approval-workflows-v2`, GET ?applicableType=N | POST | DELETE/{id}, reuse policy `Workflows.Read` + `Workflows.Create`
|
||||
|
||||
### Chunk C (`2781c7e`) — FE Designer
|
||||
|
||||
- `fe-admin/src/pages/system/ApprovalWorkflowsV2Page.tsx` (~480 LOC)
|
||||
- Overview cards Active+History per ApplicableType
|
||||
- DefinitionCard read-only: Bước (badge phòng emerald) → Cấp (badge violet C1/C2 + tên NV + email)
|
||||
- Designer dialog: Mã/Tên/Mô tả + Add/Remove Step + reorder (chevron up/down) + Add/Remove Level + Select Phòng + Select NV duyệt
|
||||
- Validate: mỗi Step ≥1 Level, mỗi Level phải có ApproverUserId
|
||||
- Auto-assign code mặc định theo type: `QT-DN-V2-001` / `QT-DN-PA-V2-001` / `QT-HD-V2-001`
|
||||
- Layout.tsx resolver +ApprovalWorkflowsV2 root → `/system/approval-workflows-v2`, +AwV2_<TypeCode> leaf → `/system/approval-workflows-v2/<code>`
|
||||
- App.tsx +2 route
|
||||
- menuKeys.ts +2 const sync với BE
|
||||
|
||||
### Chunk D — Docs (current)
|
||||
|
||||
STATUS + HANDOFF + project_solution_erp.md memory.
|
||||
|
||||
## ⚠️ Điều quan trọng cho Session 18+
|
||||
|
||||
1. **PE/Contract Service CHƯA wire** qua schema mới — vẫn pin `WorkflowDefinitionId` từ Mig 21 (legacy). Sau khi user UAT UIUX OK, Session sau cần:
|
||||
- Thêm pinning `ApprovalWorkflowId` vào PE/Contract entity (nullable, song song WorkflowDefinitionId)
|
||||
- Service rewrite: nếu pin V2 → iterate ApprovalWorkflowSteps OrderBy Order → ApprovalWorkflowLevels OrderBy Order → match `actor.Id == level.ApproverUserId` (chính xác 1-1)
|
||||
- Migration data từ legacy → V2 (manual hoặc seed sample)
|
||||
- Drop legacy WorkflowDefinition + WorkflowStep + Approver tables sau khi không phiếu nào pin
|
||||
2. **Backward compat 100%** — schema mới chỉ thêm vào, không sửa cũ. Phiếu PE/Contract đang chạy không bị ảnh hưởng.
|
||||
3. **77 test pass giữ nguyên** — không thêm test mới (Designer UI chưa critical, defer khi Service wire xong → test policy + match approver).
|
||||
|
||||
---
|
||||
|
||||
## TL;DR Session 16 (08/05 — Drastic refactor flat workflow EXECUTE)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user