Commit Graph

6 Commits

Author SHA1 Message Date
b1bae77c9c [CLAUDE] Workflow: sua quy trinh duyet TAI CHO + co F6 AllowApproverDelete (dot 1)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m31s
Nen cho tinh nang "xoa phieu PE o man duyet" (UAT: phieu bam sai goi thau dang
an luy ke). Dot 1 lam NEN, dot 2 moi lam nut xoa.

Vi sao phai lam nen truoc: phieu dang chay pin ApprovalWorkflowId va doc workflow
SONG theo Id do. Moi POST tao workflow moi = Id MOI, nen tick co tren ban moi
KHONG BAO GIO toi duoc phieu dang treo. Phai co lenh sua-tai-cho giu nguyen Id.

- Domain: ApprovalWorkflowLevel + AllowApproverDelete (F6, per-NGUOI) + Mig
  20260727033522_AddPeAllowApproverDelete (AddColumn bit default false, no new table)
- Application: UpdateAwDefinitionCommand + Validator + Handler
  - 2 phep thu: (T1) khung khong doi - Order tung row bat bien
                (T2) luat choi khong doi - cam CeoApprovalThreshold, AllowApproverFinalize,
                     Code, ApplicableType => 409 bao tao ban moi
  - diff theo Level.Id (CAM delete-then-insert: no FK Restrict + mo coi LevelOpinion)
  - guard 2 tang chu ky: tang 1 chu ky tren ho so CON SONG; tang 2 chu ky CON LUU
    (cha xoa mem hoac opinion xoa mem) - ca hai deu CHAN, khong xoa cung
  - purge chi khi ho so cha KHONG CON ROW; boc transaction (ExecuteDelete tu commit)
  - KHONG tang Version, KHONG dung IsActive, KHONG doi Id
- Api: PUT /api/approval-workflows-v2/{id} + [Authorize(Policy="Workflows.Create")]
- Infra: message 403 in TEN NGUOI thay GUID tran
- FE: Designer tach "Sua tai cho" (PUT) vs "Tao phien ban moi" (POST) + o tick F6
- Tests: +21 (551 tong, 0 fail) - gom F12 chung minh phieu dang chay nhan thay doi ngay

Review: 14 FLAG, 3 HIGH da va (ExecuteDelete ngoai transaction / purge xoa cung
chu ky phieu xoa mem / endpoint khong co day FE goi toi).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 12:36:59 +07:00
fef4c33527 [CLAUDE] FE-User: workflow-matrix view — thêm flag thứ 8 "Duyệt là KẾT THÚC quy trình" (thiếu từ Mig 58)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m1s
WorkflowMatrixViewPage (màn "Luồng duyệt" read-only của user, build S24 với 7 flag) thiếu flag
thứ 8 allowApproverFinalize ("Duyệt là KẾT THÚC quy trình, không trình tiếp CEO") thêm ở Mig 58
(S87) → matrix "chưa hiển thị chính xác" QT-DN-V2-001 (anh Kiệt FDC). BE overview DTO đã gửi sẵn
field này (ApprovalWorkflowV2AdminFeatures.cs:41/188), chỉ FE matrix + AwLevelDto type thiếu.

Thêm allowApproverFinalize vào AwLevelDto + FlagRow thứ 8 (colSpan2, mirror admin Designer).
FE-user only (matrix là view user-app, không có bản fe-admin). Build xanh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 15:45:28 +07:00
fbbd361929 [CLAUDE] FE-User: Plan AA redesign v2 - Table layout rowSpan tận dụng full width + 7 label tiếng Việt + color coding 2 layer
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m14s
UAT feedback 2026-05-15 sau Run #212 deploy: bro request layout DẠNG TABLE tận
dụng hết width thay vì stack vertical panel-per-NV (visual rộng theo chiều
ngang).

Refactor WorkflowCard structure → 4-col HTML table với rowSpan:

Table cols:
  | Bước (Phòng) | Cấp | NV duyệt | Quyền duyệt                  |
  | rowSpan=N    | rowSpan=M | per-NV  | grid 2-col 7 checkbox |

- Bước column: rowSpan = total NV trong Step. Header tone đậm Step palette.
- Cấp column: rowSpan = N NV cùng Order (OR-of-N). Badge ring Cấp palette.
  Nếu N > 1: hint "N NV OR (chỉ cần 1 NV duyệt)".
- NV duyệt column: 1 row per NV slot. Tên + email gray.
- Quyền duyệt column: grid grid-cols-1 md:grid-cols-2 với 7 checkbox label:
  - 4 return mode (col-span-1): "Trả về 1 Cấp trước" / "Trả về 1 Bước trước"
    / "Trả về Người chỉ định" / "Trả về Drafter (mặc định)"
  - 3 long label (col-span-2): "Cho phép chỉnh sửa Section 2 (Hạng mục/NCC/Báo
    giá) lúc đang duyệt" / "Cho phép chỉnh sửa Section ngân sách lúc đang duyệt"
    / "Cho phép duyệt thẳng Cấp cuối khi đang duyệt"

Color coding 2 layer preserved:
- Step (Bước) bg + headerBg: blue/purple/emerald/amber/pink cycle (5 màu)
- Cấp badge: violet/sky/teal/orange/rose cycle (5 màu)
- NV + Quyền duyệt cell: bg-white/80 (lighten Step tone, vẫn show through)

Helper extracted `buildStepRows(step)` build flat Row[] với rowSpan metadata
(isFirstInStep + isFirstInCap + rowSpanStep + rowSpanCap). Drop StepBlock +
NvPermissionPanel components (chuyển inline table cells).

colgroup width hint: Bước=160px / Cấp=100px / NV=240px / Quyền duyệt=1fr (rest).
Tại 1280-1366px viewport (laptop nhỏ Plan AA sidebar widen) Quyền duyệt cell
~400-500px → grid 2-col fit 7 label OK.

Verify:
- npm run build fe-user PASS clean 0 TS err, 522ms, 1907 modules
- Bundle 1284.22 KB (+1.31 KB from baseline)

Em main solo CSS/UX redesign (criteria #2 + #4 Implementer REFUSE — UX layout
decision rowSpan grouping + cell distribution decision).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:10:27 +07:00
4d60598369 [CLAUDE] FE-User: Plan AA redesign - WorkflowMatrixViewPage panel-per-NV layout + color coding 2 layer (Step/Cấp)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m20s
UAT feedback 2026-05-15 sau Run #211 deploy: bro request hiển thị rõ ràng
giống admin Designer (panel per NV + 7 label tiếng Việt) + màu sắc khác nhau
giữa Cấp duyệt + giữa Phòng ban để phân biệt.

Redesign WorkflowMatrixViewPage.tsx ~250 LOC (drop table 11 cột symbol khó hiểu):

NEW layout per Step (Phòng):
- Step container có unique color (cycle 5 màu: blue/purple/emerald/amber/pink)
- Step header bar với tone đậm: "Bước N — Phòng X"
- Group levels theo level.order → 1 Cấp group = N NV panel song song (OR-of-N)
- Cấp badge có unique color (cycle 5 màu: violet/sky/teal/orange/rose)
- "1 NV duyệt" hoặc "N NV (OR-of-N — chỉ cần 1 NV duyệt là qua Cấp)" hint
- NV permission panel mirror admin Designer line 853-949:
  - Header "QUYỀN DUYỆT {NV name} {email}" amber-700 uppercase
  - 7 checkbox label tiếng Việt rõ (read-only disabled accent-emerald):
    1. Trả về 1 Cấp trước
    2. Trả về 1 Bước trước
    3. Trả về Người chỉ định
    4. Trả về Drafter (mặc định)
    5. Cho phép chỉnh sửa Section 2 (Hạng mục/NCC/Báo giá) lúc đang duyệt
    6. Cho phép chỉnh sửa Section ngân sách lúc đang duyệt
    7. Cho phép duyệt thẳng Cấp cuối khi đang duyệt
  - Grid 2-col cho 4 return mode + col-span-2 cho 3 Allow* label dài
  - Inactive label slate-400, active slate-800 font-medium

Color palette (Tailwind JIT — full class strings array):
- STEP_PALETTE: 5 màu cycle theo sIdx % 5
- LEVEL_PALETTE: 5 màu cycle theo (level.order - 1) % 5

Drop FlagCell table cell helper. Replace với StepBlock + NvPermissionPanel +
FlagRow components.

Verify:
- npm run build fe-user PASS clean 0 TS err, 423ms, 1907 modules
- Bundle 1282.91 KB (+0.32 KB from baseline — minor add new components)

Em main solo CSS/UX redesign decision (criteria #2 Implementer REFUSE — UX flow
decision needed cho color palette + layout structure).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:03:42 +07:00
da218f1dd4 [CLAUDE] FE-User: Plan AA hotfix - WorkflowMatrixViewPage container px-6 → px-2 (dịch content sang trái)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m18s
UAT request 2026-05-15 sau deploy Run #210: bro muốn matrix view content sát
sidebar trái thay vì gap 24px (px-6) — tận dụng width gain từ Plan AA sidebar
widen + remove truncate.

Fix 1 line `WorkflowMatrixViewPage.tsx:43` container:
- px-6 (24px) → px-2 (8px)
- py-5 (20px) giữ nguyên
- PageHeader title + WorkflowCard + Table cùng shift left -16px

Verify:
- npm run build fe-user PASS clean 0 TS err, 486ms, bundle 1282.59 KB unchanged

Em main solo CSS polish trivial < 30 min (per criteria #6 Implementer REFUSE).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:52:45 +07:00
c6678022f7 [CLAUDE] FE-User: Plan AA Chunk B - WorkflowMatrixViewPage read-only matrix view + types extend
NEW files:
- pages/pe/WorkflowMatrixViewPage.tsx ~215 LOC
  - useQuery GET /approval-workflows-v2?applicableType=N&isUserSelectable=true
  - PageHeader "Luồng duyệt — {label}" + Network icon
  - Loading/Error/Empty state 3 variant rõ
  - WorkflowCard per ghim version: header (code/version + badge "Đang dùng" emerald + "Được ghim" amber Pin icon)
  - Table 10 cột read-only: Bước rowSpan | Cấp | NV duyệt + 7 Allow* flag (✓/—)
  - FlagCell helper component TS indexed-access type union 7 keys
  - Mirror admin Designer ApprovalWorkflowsV2Page layout (drop edit mutations)
- types/approvalWorkflowV2.ts ~55 LOC
  - 5 type subset: AwLevelDto + AwStepDto + AwDefinitionDto + AwTypeSummaryDto + AwAdminOverviewDto
  - Field name khớp BE record positional param (history not versions)

MODIFIED:
- App.tsx +import + Route /purchase-evaluations/workflow-matrix trước /workspace

Why:
- Chunk A BE đã wire endpoint với filter param + menu seed Pe_DuyetNcc_WfView
  cho user xem matrix workflow admin Designer ghim trước khi tạo phiếu.

Verify:
- npm run build fe-user PASS clean 0 TS err, 1907 modules, 2.61s
- Reviewer cumulative A+B PASS 0 critical/major/minor

Pending Chunk C: Docs session log + STATUS + HANDOFF + 4 agent MEMORY drift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:34:55 +07:00