コード例 #1
0
ファイル: SubmitContract.cs プロジェクト: darrenferne/stuff
        public override IActionResult OnInvoke(IActionRequest <IContractProcessingPayload> request)
        {
            var contractPayload        = request.Payload as IContractProcessingPayload;
            var currentProcessingState = request.Context.ProcessingState as ContractProcessingState;

            var newProcessingState = currentProcessingState;

            if (!newProcessingState.ContractState.IsPendingApproval.GetValueOrDefault())
            {
                var contractTracking = new ContractTrackingReference(contractPayload.TrackingReference);

                if (_persistence.CreateContractTrackingReference(contractTracking).IsSaved)
                {
                    //update the external state
                    newProcessingState = currentProcessingState.Clone(s => s.SetIsPendingApproval(true));
                }
            }

            if (newProcessingState.ContractState.IsPendingApproval.GetValueOrDefault())
            {
                //update the public state
                newProcessingState = newProcessingState.Clone(s => s.SetCurrentFromIsPendingApproval()
                                                              .And()
                                                              .SetContractStatus(ContractStatus.InFlight));
            }

            return(new SuccessStateChange(request.Payload, newProcessingState));
        }