public static Task <TOutput> RunInAsync <TI, TO>(BaseWorkflow <TI, TO> workflow, TInput input) { if (workflow.context == null) { throw new InvalidOperationException($"Cannot run workflow within an activity"); } var w = (ClrHelper.Instance.Build(typeof(TWorkflow).FullName, workflow.serviceProvider) as IWorkflowExecutor <TOutput>) !; return(w.RunAsync(workflow.context, input !)); }
public async Task ApplyAsync(BaseWorkflow workflow) { if (!(workflow is RequestWorkflow)) { throw new ArgumentException( $"The argument type: ${workflow.GetType()} is not {nameof(RequestWorkflow)}"); } var requestWorkflow = (RequestWorkflow)workflow; requestWorkflow.DateUpdate = DateTimeOffset.Now; if (requestWorkflow.Id < 1) { requestWorkflow.DateCreate = DateTimeOffset.Now; } await _context.RequestWorkflows.AddAsync(requestWorkflow); var request = requestWorkflow.Owner ?? _context.Requests .Include(r => r.ProtectionDocType).Include(r => r.Documents) .ThenInclude(a => a.Document.Type).Include(r => r.CurrentWorkflow.CurrentStage) .SingleOrDefault(r => r.Id == requestWorkflow.OwnerId); if (request == null) { throw new ApplicationException($"Workflow has incorrect request id: {requestWorkflow.OwnerId}"); } var stage = await _context.DicRouteStages.SingleOrDefaultAsync(rs => rs.Id == requestWorkflow.CurrentStageId); CheckStage(request, stage); request.StatusId = stage?.RequestStatusId ?? request.StatusId; request.IsRead = false; request.CurrentWorkflow = requestWorkflow; request.CurrentWorkflowId = requestWorkflow.Id; request.DateUpdate = DateTimeOffset.Now; request.IsComplete = workflow.IsComplete ?? request.IsComplete; _context.Requests.Update(request); _context.SaveChanges(); await _taskRegister.RegisterAsync(request.Id); await _notificationSender.ProcessRequestAsync(request.Id); }
private void UpdateWorkflow(BaseWorkflow workflow, UserWorkflow existingUserWorkflow) { //not updating the primary properties e.g. sourceEmailAddress, expiresIn etc. existingUserWorkflow.SetPersonal(workflow.WorkflowData.FirstName, workflow.WorkflowData.LastName, workflow.WorkflowData.Email); existingUserWorkflow.SetWork(workflow.WorkflowData.Work); existingUserWorkflow.SetAddress(workflow.WorkflowData.Street, workflow.WorkflowData.City, workflow.WorkflowData.Zip, workflow.WorkflowData.State); existingUserWorkflow.UpdateStatus(workflow.Status); foreach (var step in existingUserWorkflow.Steps) { if (step.TrackingState == TrackingState.Updated) { _db.Entry(step).State = EntityState.Modified; } } _db.Entry(existingUserWorkflow).State = EntityState.Modified; _db.SaveChanges(); }
public async Task ApplyAsync(BaseWorkflow workflow) { if (!(workflow is ContractWorkflow)) { throw new ArgumentException($"The argument type: ${workflow.GetType()} is not {nameof(ContractWorkflow)}"); } var contractWorkflow = (ContractWorkflow)workflow; contractWorkflow.DateUpdate = DateTimeOffset.Now; if (contractWorkflow.Id < 1) { contractWorkflow.DateCreate = DateTimeOffset.Now; } await _context.ContractWorkflows.AddAsync(contractWorkflow); Domain.Entities.Contract.Contract contract = contractWorkflow.Owner ?? _context.Contracts.Single(c => c.Id == contractWorkflow.OwnerId); if (contract == null) { throw new ApplicationException($"Workflow has incorrect contract id: {contractWorkflow.OwnerId}"); } var stage = await _context.DicRouteStages.SingleOrDefaultAsync(rs => rs.Id == contractWorkflow.CurrentStageId); contract.CurrentWorkflow = contractWorkflow; contract.StatusId = stage?.ContractStatusId ?? contract.StatusId; contract.CurrentWorkflow = contractWorkflow; contract.CurrentWorkflowId = contractWorkflow.Id; contract.DateUpdate = DateTimeOffset.Now; contract.IsRead = false; contract.GosDate = stage != null && stage.Code.Equals("DK02.9.2") ? _calendarProvider.GetPublicationDate(contract.RegDate ?? contract.DateCreate) : contract.GosDate; _context.Contracts.Update(contract); await _context.SaveChangesAsync(); await _taskRegister.RegisterAsync(contract.Id); _notificationSender.ProcessContract(contract.Id); }
public async Task ApplyAsync(BaseWorkflow workflow) { if (!(workflow is DocumentWorkflow)) { throw new ArgumentException($"The argument type: ${workflow.GetType()} is not {nameof(DocumentWorkflow)}"); } var documentWorkflow = (DocumentWorkflow)workflow; var document = documentWorkflow.Owner ?? await _context.Documents.SingleOrDefaultAsync(d => d.Id == documentWorkflow.OwnerId); if (document == null) { throw new ApplicationException($"Workflow has incorrect document id: {documentWorkflow.OwnerId}"); } document.CurrentWorkflow = documentWorkflow; await _context.DocumentWorkflows.AddAsync(documentWorkflow); }
//TODO: SRP private async Task SaveNewUserWorkflow(BaseWorkflow workflow) { //Building var dbWorkflow = new UserWorkflow(workflow.Name, workflow.SourceEmailAddress, workflow.RequestId, workflow.ExpiresIn, workflow.CreatedOn); foreach (var step in workflow.Steps) { dbWorkflow.AddWorkflowStep(new UserWorkflowStep(step.Step)); } //Persisting foreach (var step in dbWorkflow.Steps) { if (step.TrackingState == TrackingState.Created) { _db.Entry(step).State = EntityState.Added; } } _db.UserWorkflows.Add(dbWorkflow); await _db.SaveChangesAsync(); }
public async Task SaveWorkflowAsync(BaseWorkflow workflow) { if (workflow.Id > 0) { var existingWorkflow = _db.UserWorkflows .Include(wf => wf.Steps) .FirstOrDefault(wf => wf.Id == workflow.Id); if (existingWorkflow != null) { UpdateWorkflow(workflow, existingWorkflow); //do we need this, coz we are not updating the whole workflow, instead now its task based update.. this could be removed. } else { throw new ArgumentOutOfRangeException("Id", $"can not find workflow for Id {workflow.Id} for update/save"); } } else { await SaveNewUserWorkflow(workflow); } }
public async Task ApplyAsync(BaseWorkflow workflow) { if (!(workflow is ProtectionDocWorkflow)) { throw new ArgumentException( $"The argument type: ${workflow.GetType()} is not {nameof(ProtectionDocWorkflow)}"); } var protectionDocWorkflow = (ProtectionDocWorkflow)workflow; protectionDocWorkflow.DateUpdate = DateTimeOffset.Now; if (protectionDocWorkflow.Id < 1) { protectionDocWorkflow.DateCreate = DateTimeOffset.Now; } await _context.ProtectionDocWorkflows.AddAsync(protectionDocWorkflow); var protectionDoc = protectionDocWorkflow.Owner ?? _context.ProtectionDocs .Include(r => r.Type) .SingleOrDefault(r => r.Id == protectionDocWorkflow.OwnerId); if (protectionDoc == null) { throw new ApplicationException($"Workflow has incorrect request id: {protectionDocWorkflow.OwnerId}"); } var stage = await _context.DicRouteStages.SingleOrDefaultAsync(rs => rs.Id == protectionDocWorkflow.CurrentStageId); protectionDoc.StatusId = stage?.ProtectionDocStatusId ?? protectionDoc.StatusId; protectionDoc.CurrentWorkflow = protectionDocWorkflow; protectionDoc.CurrentWorkflowId = protectionDocWorkflow.Id; protectionDoc.DateUpdate = DateTimeOffset.Now; _context.ProtectionDocs.Update(protectionDoc); await _context.SaveChangesAsync(); await _notificationSender.ProcessRequestAsync(protectionDoc.Id); }
public async Task <BaseWorkflow> GetWorkflowByRequestIdAsync(string requestId) { BaseWorkflow = await _workflowDataService.GetWorkflowByRequestId(requestId); return(BaseWorkflow); }
//Load public async Task LoadUserWorkflowByRequestId(string requestId) { BaseWorkflow = await _workflowDataService.GetWorkflowByRequestId(requestId); }