[CLAUDE] PurchaseEvaluation: ô "Cấp này KẾT THÚC quy trình" → opt-out bỏ-tick-được (anh Kiệt FDC)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m12s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m12s
anh Kiệt UAT "cái này option thôi chứ e" — cấp cấu hình AllowApproverFinalize (Mig 58, S89 auto-finalize im lặng) NAY là ô-tích BỎ được: - Default checked = giữ hành vi cũ (duyệt xong KẾT THÚC, không lên CEO) — backward-compat. - BỎ tick (applyLevelFinalize=false) → KHÔNG finalize, trình tiếp CEO/cấp sau; giá chốt ẩn (CEO chọn sau). BE: +param applyLevelFinalize (default true) xuyên interface → service (finalize guard `&& applyLevelFinalize`) → command → handler → controller body. FE: ô xanh static → checkbox 2 app (fe-admin+fe-user SHA-mirror) + hint động + sendPrice/shouldPickPrice gate theo cờ. Test: +test #6 opt-out→advance-to-CEO (spec change; #1-5 backward-compat giữ). Build slnx + 2 FE PASS 0-err; test 434→435. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -47,6 +47,7 @@ public class PurchaseEvaluationWorkflowService(
|
||||
bool finalizeByCcmDelegation = false,
|
||||
decimal? approvedPriceAmount = null,
|
||||
string? approvedPriceSource = null,
|
||||
bool applyLevelFinalize = true,
|
||||
CancellationToken ct = default)
|
||||
{
|
||||
var fromPhase = evaluation.Phase;
|
||||
@ -272,7 +273,7 @@ public class PurchaseEvaluationWorkflowService(
|
||||
// V2 path nhận flag, V1 legacy throw nếu non-admin gọi skipToFinal=true.
|
||||
if (evaluation.ApprovalWorkflowId is Guid awId)
|
||||
{
|
||||
await ApproveV2Async(evaluation, awId, actorUserId, actorRoles, isAdmin, isSystem, comment, skipToFinal, finalizeByCcmDelegation, approvedPriceAmount, approvedPriceSource, ct);
|
||||
await ApproveV2Async(evaluation, awId, actorUserId, actorRoles, isAdmin, isSystem, comment, skipToFinal, finalizeByCcmDelegation, approvedPriceAmount, approvedPriceSource, applyLevelFinalize, ct);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -694,6 +695,7 @@ public class PurchaseEvaluationWorkflowService(
|
||||
bool finalizeByCcmDelegation,
|
||||
decimal? approvedPriceAmount,
|
||||
string? approvedPriceSource,
|
||||
bool applyLevelFinalize,
|
||||
CancellationToken ct)
|
||||
{
|
||||
var aw = await db.ApprovalWorkflows.AsNoTracking()
|
||||
@ -858,7 +860,11 @@ public class PurchaseEvaluationWorkflowService(
|
||||
// hay hơn"). KHÔNG threshold/role-gate (admin chỉ-định slot = đủ thẩm quyền). ① giá chốt:
|
||||
// người duyệt phải chọn (Conflict nếu thiếu, isSystem miễn). Đặt SAU skipToFinal, TRƯỚC
|
||||
// ccm-delegation + advance.
|
||||
if (matchingLevel.AllowApproverFinalize)
|
||||
// [S96 2026-07-01 — anh Kiệt FDC] Cấp cấu hình KẾT THÚC (AllowApproverFinalize) NAY là
|
||||
// OPT-OUT: người duyệt BỎ tick "Cấp này KẾT THÚC quy trình" (applyLevelFinalize=false) →
|
||||
// KHÔNG finalize, rơi xuống advance bình thường → trình tiếp CEO/cấp sau. Đảo S89 (2026-06-24
|
||||
// auto-finalize im lặng) theo phản hồi UAT "cái này option thôi". Default true = giữ auto cũ.
|
||||
if (matchingLevel.AllowApproverFinalize && applyLevelFinalize)
|
||||
{
|
||||
ApplyApprovedPriceOnFinalize(evaluation, isSystem, approvedPriceAmount, approvedPriceSource);
|
||||
evaluation.Phase = PurchaseEvaluationPhase.DaDuyet;
|
||||
|
||||
Reference in New Issue
Block a user