// Внимание! Желательно всякие странные условия, связанные получением следующих этапов бизнесс процесса документов, // которые по разным причинам нельзя реализовать на уровне базы данных, встраивать в этот метод, не загрязняя код в контроллерах или других местах. /// <summary> /// Фильтрует следующие этапы бизнес процесса, используя какую-то бизнес логику, которая не реализована на уровне бд. /// </summary> /// <param name="currentDocumentWorkflow">Текущий бизнес процесс документа.</param> /// <param name="nextRouteStages">Массив следующих этапов бизнес процесса документа.</param> /// <returns>Отфильтрованный массив следующих этапов бизнес процесса документа.</returns> private async Task <DicRouteStage[]> FilterRouteStagesUsingBusinessLogic(DocumentWorkflow currentDocumentWorkflow, DicRouteStage[] nextRouteStages) { Document document = currentDocumentWorkflow.Owner; // Если документ является свидетельством на ТЗ или НМПТ и его текущий этап бизнес процесса "Создание исходящего документа", то // он отправляет на этап "Контроль заместителя начальника департамента", если этот этап был в массиве следующих доступных этапов. // Если же документ является отчетом эксперта по заявке ТЗ и НМПТ и его текущий этап бизнес процесса "Создание внутреннего документа", то // доступных этапов для перехода у этого документа не будет. if (document.Type.Code == DicDocumentTypeCodes.NmptCertificate) { DicRouteStage fromStage = await GetRouteStageById(currentDocumentWorkflow.CurrentStageId ?? 0); if (fromStage.Code == RouteStageCodes.DocumentOutgoing_01_1) { nextRouteStages = nextRouteStages .Where(routeStage => routeStage.Code == RouteStageCodes.OUT_DeputyHeadOfDepartment) .ToArray(); } } else if (document.Type.Code == DicDocumentTypeCodes.TZPOL555 || document.Type.Code == DicDocumentTypeCodes.TZPOL555PR || document.Type.Code == DicDocumentTypeCodes.TZPOL555PRWD || document.Type.Code == DicDocumentTypeCodes.TZPOL555PF) { DicRouteStage fromStage = await GetRouteStageById(currentDocumentWorkflow.CurrentStageId ?? 0); if (fromStage.Code == RouteStageCodes.DocumentInternal_0_1) { nextRouteStages = new DicRouteStage[] { }; } } return(nextRouteStages); }
private ContractWorkflow GenerateWorkflow(ContractWorkflow currentWorkflow, DicRouteStage taskResultStage) { return(new ContractWorkflow { OwnerId = currentWorkflow.OwnerId, FromUserId = currentWorkflow.CurrentUserId, FromStageId = currentWorkflow.CurrentStageId, CurrentUserId = currentWorkflow.CurrentUserId, CurrentStageId = taskResultStage.Id, RouteId = taskResultStage.RouteId, IsComplete = taskResultStage.IsLast, IsSystem = taskResultStage.IsSystem, IsMain = taskResultStage.IsMain }); }
//TODO: Перенести эту логику private void CheckStage(Request request, DicRouteStage nextStage) { var queue = Executor.GetQuery <GetWorkflowTaskQueuesByRequestIdQuery>().Process(q => q.Execute(request.Id)).Result.LastOrDefault(); if (nextStage.Code == "U04" && request.CurrentWorkflow.CurrentStage.Code == "U03.8" ) //Готовые для передачи в Госреестр (ПМ) { if (queue != null && request.Documents.All(a => a.Document.Type.Code != "001.004G.1") && queue.ConditionStage.Code == "U03.8" && queue.ResultStage.Code == "U04" && queue.ResolveDate > DateTime.Now) { throw new Exception( "Переход на этап \"Создание охранного документа\" не возможно пока не истечет срок публикации, либо отсутствует входящий документ «Ходатайство о досрочной публикации» "); } } }
private void CheckStage(Domain.Entities.Request.Request request, DicRouteStage nextStage) { var queue = _context.WorkflowTaskQueues.Include(a => a.ConditionStage).Include(a => a.ResultStage) .LastOrDefault(a => a.RequestId == request.Id); if (nextStage.Code == "U04" && request.CurrentWorkflow.CurrentStage.Code == "U03.8" ) //Готовые для передачи в Госреестр (ПМ) { if (queue != null && request.Documents.All(a => a.Document.Type.Code != "001.004G.1") && queue.ConditionStage.Code == "U03.8" && queue.ResultStage.Code == "U04" && queue.ResolveDate > DateTime.Now) { throw new Exception( "Переход на этап \"Создание охранного документа\" не возможно пока не истечет срок публикации, либо отсутствует входящий документ «Ходатайство о досрочной публикации» "); } } }