コード例 #1
0
        // Внимание! Желательно всякие странные условия, связанные получением следующих этапов бизнесс процесса документов,
        // которые по разным причинам нельзя реализовать на уровне базы данных, встраивать в этот метод, не загрязняя код в контроллерах или других местах.

        /// <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);
        }
コード例 #2
0
 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
     });
 }
コード例 #3
0
        //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(
                              "Переход на этап \"Создание охранного документа\" не возможно пока не истечет срок публикации, либо отсутствует входящий документ «Ходатайство о досрочной публикации» ");
                }
            }
        }
コード例 #4
0
ファイル: WorkflowApplier.cs プロジェクト: Hugoberry/WEB
        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(
                              "Переход на этап \"Создание охранного документа\" не возможно пока не истечет срок публикации, либо отсутствует входящий документ «Ходатайство о досрочной публикации» ");
                }
            }
        }