Beispiel #1
0
        private bool HasPaidInvoices(Domain.Entities.Contract.Contract contract, params string[] tariffCodes)
        {
            var restorationInvoices = contract.PaymentInvoices
                                      .Where(pi => tariffCodes.Contains(pi.Tariff.Code)).ToList();

            return(restorationInvoices.Any() && restorationInvoices.All(pi => pi.Status.Code != "notpaid"));
        }
Beispiel #2
0
        /// <summary>
        /// Услуги договоров
        /// </summary>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа "Предварительная экспертиза ДК"</returns>
        private Expression <Func <DicRouteStage, bool> > ContractPaymentUseLogic(
            Domain.Entities.Contract.Contract contract)
        {
            if (CurrentStageContains(contract, "DK02.1.0"))
            {
                return(s => s.Code.Equals("DK02.2"));
            }

            return(null);
        }
Beispiel #3
0
        private bool HasPaidInvoices(Domain.Entities.Contract.Contract contract, params string[] tariffCodes)
        {
            var restorationInvoices = _context.PaymentInvoices.Include(pi => pi.Status)
                                      .Include(pi => pi.Tariff)
                                      .LastOrDefault(pi =>
                                                     tariffCodes.Contains(pi.Tariff.Code) && pi.RequestId == contract.Id &&
                                                     pi.Status.Code != "notpaid");

            return(restorationInvoices != null);
        }
Beispiel #4
0
        /// <summary>
        /// Логика обработки этапов при входящих документах, выписках из государственного реестра
        /// </summary>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа "Экспертиза по существу"</returns>
        private Expression <Func <DicRouteStage, bool> > SubstantiveExaminationLogic(Domain.Entities.Contract.Contract contract)
        {
            //Ожидается выписка
            if (CurrentStageContains(contract, "DK02.2.0"))
            {
                return(s => s.Code.Equals("DK02.4"));
            }

            return(null);
        }
Beispiel #5
0
        /// <summary>
        ///     "101_Запрос заявителю"
        /// </summary>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа "Ожидается ответ на запрос"</returns>
        private Expression <Func <DicRouteStage, bool> > RequestAnswerWaitingLogic(
            Domain.Entities.Contract.Contract contract)
        {
            //Экспертиза по существу
            if (CurrentStageContains(contract, "DK02.4"))
            {
                return(s => s.Code.Equals("DK02.4.2"));
            }

            return(null);
        }
Beispiel #6
0
        /// <summary>
        /// Логика при исходящем документе "Реестры эксп.заключений в МЮ РК (Договора)"
        /// </summary>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа "Ожидается решение МЮ"</returns>
        private Expression <Func <DicRouteStage, bool> > MJDesicionWaitLogic(
            Domain.Entities.Contract.Contract contract)
        {
            //Подготовка для передачи в МЮ
            if (CurrentStageContains(contract, "DK02.7"))
            {
                return(s => s.Code.Equals("DK02.8"));
            }

            return(null);
        }
Beispiel #7
0
        /// <summary>
        ///     Логика обработки этапов при исходящих документах, выписках из государственного реестра
        /// </summary>
        /// <param name="document">Документ</param>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа ""</returns>
        private Expression <Func <DicRouteStage, bool> > ContractConclusionLogic(
            Domain.Entities.Document.Document document, Domain.Entities.Contract.Contract contract)
        {
            if (CurrentStageContains(document, "OUT02.1") && CurrentStageContains(contract, "DK02.5.1"))
            {
                return(s => s.Code.Equals("DK02.5.3"));
            }

            if (CurrentStageContains(document, "OUT02.2") && CurrentStageContains(contract, "DK02.5.3"))
            {
                return(s => s.Code.Equals("DK02.5.4"));
            }

            if (CurrentStageContains(document, "OUT02.3") && CurrentStageContains(contract, "DK02.5.4"))
            {
                return(s => s.Code.Equals("DK02.7"));
            }
            return(null);
        }
Beispiel #8
0
        /// <summary>
        /// Логика при исходящем документе "сопроводительное письмо ДК"
        /// </summary>
        /// <param name="contract">Договор</param>
        /// <returns>Запрос для получения этапа "Ожидается решение МЮ"</returns>
        private Expression <Func <DicRouteStage, bool> > Logic(
            Domain.Entities.Contract.Contract contract)
        {
            //Уведомление заявителя о решении
            if (CurrentStageContains(contract, "DK02.9.2"))
            {
                // Зарегистрировано
                if (AnyDocuments(contract, DicDocumentType.Codes.ConclusionAboutRegistrationOfContract))
                {
                    return(s => s.Code.Equals("DK02.9.1"));
                }
                // Отказано в регистрации
                if (AnyDocuments(contract, DicDocumentType.Codes.ConclusionAboutRegistrationRefusalOfContract))
                {
                    return(s => s.Code.Equals("DK02.9.3"));
                }
            }


            return(null);
        }
Beispiel #9
0
        private async Task ApplyStageAsync(Expression <Func <DicRouteStage, bool> > nextStageFunc,
                                           Domain.Entities.Contract.Contract contract)
        {
            if (nextStageFunc == null)
            {
                return;
            }

            DicRouteStage nextStage;

            try
            {
                nextStage = await _context.DicRouteStages.SingleAsync(nextStageFunc);
            }
            catch (Exception)
            {
                Log.Warning($"Workflow logic applier. The next stage query is incorrect: {nextStageFunc}!");
                return;
            }

            var workflow = new ContractWorkflow
            {
                RouteId        = nextStage.RouteId,
                OwnerId        = contract.Id,
                Owner          = contract,
                CurrentStageId = nextStage.Id,
                CurrentUserId  = contract.CurrentWorkflow.CurrentUserId,
                FromStageId    = contract.CurrentWorkflow.CurrentStageId,
                FromUserId     = contract.CurrentWorkflow.CurrentUserId,
                IsComplete     = nextStage.IsLast,
                IsSystem       = nextStage.IsSystem,
                IsMain         = nextStage.IsMain
            };

            await _workflowApplier.ApplyAsync(workflow);
        }
Beispiel #10
0
 private bool AnyDocuments(Domain.Entities.Contract.Contract contract, params string[] documentTypeCodes)
 {
     return(contract.Documents.Select(rd => rd.Document).Any(d => documentTypeCodes.Contains(d.Type.Code)));
 }
Beispiel #11
0
 private bool AnyDocuments(Domain.Entities.Contract.Contract contract, string documentTypeCode)
 {
     return(contract.Documents.Select(rd => rd.Document).Any(d => d.Type.Code.Equals(documentTypeCode)));
 }
Beispiel #12
0
 private bool CurrentStageContains(Domain.Entities.Contract.Contract contract, params string[] codes)
 {
     return(codes.Contains(contract.CurrentWorkflow.CurrentStage.Code));
 }