diff --git a/src/Backend/SolutionErp.Application/Contracts/ContractFeatures.cs b/src/Backend/SolutionErp.Application/Contracts/ContractFeatures.cs index 714d2ce..4088ac7 100644 --- a/src/Backend/SolutionErp.Application/Contracts/ContractFeatures.cs +++ b/src/Backend/SolutionErp.Application/Contracts/ContractFeatures.cs @@ -27,7 +27,13 @@ public record CreateContractCommand( string? DraftData, Guid? BudgetId, string? BudgetManualName, - decimal? BudgetManualAmount) : IRequest; + decimal? BudgetManualAmount, + // [Plan B S29 2026-05-22 Chunk E1] Drafter pick V2 workflow lúc create — + // mirror PE pattern Workspace Select dropdown. Nếu null → fallback V1 auto + // pick activeWfId (7 prod contract giữ behavior). Mutually exclusive với + // V1: pin V2 + V1 cùng lúc OK schema (cả 2 nullable) — Service ApproveV2Async + // branch ưu tiên V2 nếu cả 2 set. + Guid? ApprovalWorkflowId = null) : IRequest; public class CreateContractCommandValidator : AbstractValidator { @@ -94,6 +100,10 @@ public class CreateContractCommandHandler( BudgetManualName = request.BudgetManualName, BudgetManualAmount = request.BudgetManualAmount, WorkflowDefinitionId = activeWfId, + // [Plan B S29 2026-05-22 Chunk E1] Pin V2 workflow nếu Drafter pick + // qua Workspace Select dropdown (Chunk D FE). Cả 2 set ok — Service + // ApproveV2Async branch dispatch theo ApprovalWorkflowId trước. + ApprovalWorkflowId = request.ApprovalWorkflowId, SlaDeadline = DateTime.UtcNow.Add(workflow.GetPhaseSla(ContractPhase.DangSoanThao) ?? TimeSpan.FromDays(7)), };