[CLAUDE] ApprovalWorkflowsV2: Chunk H — K10 hotfix AwLevelDto wire AllowApproverSkipToFinal (Mig 31 admin DTO gap)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m23s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m23s
CICD Monitor K9 catch: GET /api/approval-workflows-v2 response thiếu field `allowApproverSkipToFinal` trong levels[]. Mig 31 column added Levels + Service ApproveV2Async wire (K2) + PE bundle DTO ApprovalWorkflowOptionsDto wire (K2) + FE Designer 7th checkbox UI (K3) đầy đủ — NHƯNG `AwLevelDto` admin overview DTO chưa wire field → round-trip Designer create/update fail (em main K2 design gap, Reviewer K2 cũng miss audit ApprovalWorkflowV2AdminFeatures). 4 edits ApprovalWorkflowV2AdminFeatures.cs: 1. AwLevelDto record +AllowApproverSkipToFinal field (7th — sau AllowApproverEditBudget) 2. ToDto handler (GetAwAdminOverviewQueryHandler) ctor call +l.AllowApproverSkipToFinal 3. CreateAwLevelInput record +AllowApproverSkipToFinal=false default (admin opt-in) 4. CreateAwDefinitionCommandHandler entity init +AllowApproverSkipToFinal = l.AllowApproverSkipToFinal Pattern lesson: per-NV admin opt-in flag wire 6 surface points required (entity + EF config + Mig + Service guard + PE bundle DTO + ApprovalWorkflowOptionsDto + FE Designer + admin AwLevelDto + Create input). Mig 30 F4 đã có same gap risk ban đầu (S22+5 needed full wire). Update memory `feedback_per_nv_permission_scope` checklist add "admin AwLevelDto + Create input wire" cho future flag F5+. Verify: - dotnet build production projects clean (0 err, 2 pre-existing DocxRenderer warn) - Awaiting CICD Monitor K11 verify post-deploy (GET /api/approval-workflows-v2 levels[].allowApproverSkipToFinal field PRESENT + Designer round-trip OK) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -29,13 +29,15 @@ public record AwLevelDto(
|
||||
string? ApproverEmail,
|
||||
// Mig 29 (S21 t5) — 5 advanced options per slot Approver (F1 mode Trả lại
|
||||
// + F3 Edit Section 2). Mig 30 (S22+5) — F4 +AllowApproverEditBudget.
|
||||
// Mỗi NV trong workflow có quyền riêng.
|
||||
// Mig 31 (S23 t1) — F2 +AllowApproverSkipToFinal (refactor sang Approver scope ChoDuyet).
|
||||
// Mỗi NV trong workflow có quyền riêng — 7 Allow* cumulative.
|
||||
bool AllowReturnOneLevel,
|
||||
bool AllowReturnOneStep,
|
||||
bool AllowReturnToAssignee,
|
||||
bool AllowReturnToDrafter,
|
||||
bool AllowApproverEditDetails,
|
||||
bool AllowApproverEditBudget);
|
||||
bool AllowApproverEditBudget,
|
||||
bool AllowApproverSkipToFinal);
|
||||
|
||||
public record AwStepDto(
|
||||
Guid Id,
|
||||
@ -152,10 +154,11 @@ public class GetAwAdminOverviewQueryHandler(
|
||||
s.Levels.OrderBy(l => l.Order).Select(l =>
|
||||
{
|
||||
users.TryGetValue(l.ApproverUserId, out var info);
|
||||
// Mig 29 (S21 t5) — 5 Allow* flag per slot Level
|
||||
// Mig 29 (S21 t5) + Mig 30 (S22+5) + Mig 31 (S23 t1) — 7 Allow* flag per slot Level
|
||||
return new AwLevelDto(l.Id, l.Order, l.Name, l.ApproverUserId, info.FullName, info.Email,
|
||||
l.AllowReturnOneLevel, l.AllowReturnOneStep, l.AllowReturnToAssignee,
|
||||
l.AllowReturnToDrafter, l.AllowApproverEditDetails, l.AllowApproverEditBudget);
|
||||
l.AllowReturnToDrafter, l.AllowApproverEditDetails, l.AllowApproverEditBudget,
|
||||
l.AllowApproverSkipToFinal);
|
||||
}).ToList()
|
||||
)).ToList());
|
||||
|
||||
@ -185,15 +188,17 @@ public record CreateAwLevelInput(
|
||||
int Order,
|
||||
string? Name,
|
||||
Guid ApproverUserId,
|
||||
// Mig 29 (S21 t5) — 5 Allow* options per slot. Admin Designer tick per
|
||||
// Level row. Default backward compat: AllowReturnToDrafter=true, 4 còn lại
|
||||
// false (admin opt-in từng slot). Mig 30 (S22+5) — F4 AllowApproverEditBudget.
|
||||
// Mig 29 (S21 t5) + Mig 30 (S22+5) + Mig 31 (S23 t1) — 7 Allow* options per
|
||||
// slot. Admin Designer tick per Level row. Default backward compat:
|
||||
// AllowReturnToDrafter=true (S17 fallback), 6 còn lại false (admin opt-in
|
||||
// từng slot). Pattern proven 3× cumulative.
|
||||
bool AllowReturnOneLevel = false,
|
||||
bool AllowReturnOneStep = false,
|
||||
bool AllowReturnToAssignee = false,
|
||||
bool AllowReturnToDrafter = true,
|
||||
bool AllowApproverEditDetails = false,
|
||||
bool AllowApproverEditBudget = false);
|
||||
bool AllowApproverEditBudget = false,
|
||||
bool AllowApproverSkipToFinal = false);
|
||||
|
||||
public record CreateAwStepInput(
|
||||
int Order,
|
||||
@ -313,13 +318,14 @@ public class CreateAwDefinitionCommandHandler(IApplicationDbContext db)
|
||||
Order = l.Order,
|
||||
Name = l.Name,
|
||||
ApproverUserId = l.ApproverUserId,
|
||||
// Mig 29 (S21 t5) — 5 Allow* per slot
|
||||
// Mig 29 (S21 t5) + Mig 30 (S22+5) + Mig 31 (S23 t1) — 7 Allow* per slot
|
||||
AllowReturnOneLevel = l.AllowReturnOneLevel,
|
||||
AllowReturnOneStep = l.AllowReturnOneStep,
|
||||
AllowReturnToAssignee = l.AllowReturnToAssignee,
|
||||
AllowReturnToDrafter = l.AllowReturnToDrafter,
|
||||
AllowApproverEditDetails = l.AllowApproverEditDetails,
|
||||
AllowApproverEditBudget = l.AllowApproverEditBudget,
|
||||
AllowApproverSkipToFinal = l.AllowApproverSkipToFinal,
|
||||
}).ToList(),
|
||||
})
|
||||
.ToList(),
|
||||
|
||||
Reference in New Issue
Block a user