Ejemplo n.º 1
0
 public CustomScheduleDataCalculator(IRuleSerializerRoot ruleSerializer
                                     , IRuleHandlerSettingsFactory settingsFactor
                                     , IScheduleDataCalculator decoratee)
 {
     RuleSerializer = ruleSerializer ?? throw new ArgumentNullException(nameof(ruleSerializer));
     Decoratee      = decoratee ?? throw new ArgumentNullException(nameof(decoratee));
 }
 public NonexistedOutputDayFactory(TypiconDBContext dbContext
                                   , IScheduleDataCalculator dataCalculator
                                   , IScheduleDayNameComposer nameComposer
                                   , ITypiconSerializer typiconSerializer
                                   , ScheduleHandler handler) : base(dataCalculator, nameComposer, typiconSerializer, handler)
 {
     _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
 }
Ejemplo n.º 3
0
 public AsAdditionDataCalculator(IQueryProcessor queryProcessor
                                 , IScheduleDataCalculator innerCalculator
                                 , IRuleHandlerSettingsFactory settingsFactory)
 {
     _queryProcessor  = queryProcessor ?? throw new ArgumentNullException(nameof(queryProcessor));
     _innerCalculator = innerCalculator ?? throw new ArgumentNullException(nameof(innerCalculator));
     _settingsFactory = settingsFactory ?? throw new ArgumentNullException(nameof(settingsFactory));
 }
Ejemplo n.º 4
0
        private readonly ScheduleHandler _handler;// = new ServiceSequenceHandler();

        public OutputDayFactory(IScheduleDataCalculator dataCalculator
                                , IScheduleDayNameComposer nameComposer
                                , ITypiconSerializer typiconSerializer
                                , ScheduleHandler handler)
        {
            _dataCalculator    = dataCalculator ?? throw new ArgumentNullException(nameof(dataCalculator));
            _nameComposer      = nameComposer ?? throw new ArgumentNullException(nameof(nameComposer));
            _typiconSerializer = typiconSerializer ?? throw new ArgumentNullException(nameof(typiconSerializer));
            _handler           = handler ?? throw new ArgumentNullException(nameof(handler));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Используется для формирования customsequence
        /// </summary>
        /// <param name="dataCalculator"></param>
        /// <param name="req"></param>
        /// <returns></returns>
        public CreateOutputDayResponse Create(IScheduleDataCalculator dataCalculator, CreateOutputDayRequest req)
        {
            if (dataCalculator == null)
            {
                throw new ArgumentNullException(nameof(dataCalculator));
            }

            OutputDayInfo dayInfo = null;

            return(InnerCreate(req, ref dayInfo, dataCalculator));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Вычисляет свойства для заполнения выходной формы
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private OutputDayInfo GetOutputDayInfo(IScheduleDataCalculator dataCalculator, ScheduleDataCalculatorRequest request)
        {
            //Формируем данные для обработки
            var response = dataCalculator.Calculate(request);

            var outputDay = new OutputDay()
            {
                TypiconId = request.TypiconId,
                Date      = request.Date
            };

            if (response.Success)
            {
                //все удачно - собираем информацию

                var settings = response.Value.Settings;

                var brokenConstraints = GetBrokenConstraints(settings);

                _handler.Settings = settings;

                _handler.ClearResult();

                settings.RuleContainer.Interpret(_handler);

                var results = _handler.GetResults();

                var sign = response.Value.Rule.Template.GetPredefinedTemplate();

                outputDay.Header = new OutputDayHeader()
                {
                    //задаем имя дню
                    Name = _nameComposer.Compose(request.Date, response.Value.Rule.Template.Priority, settings.AllWorships),

                    PredefinedSignId = sign.Id,
                    //Если settings.PrintDayTemplate определен в ModifiedRule, то назначаем его
                    PrintDayTemplate = settings.PrintDayTemplate ?? sign.PrintTemplate
                };

                return(new OutputDayInfo(
                           outputDay,
                           settings.AllWorships,
                           results,
                           brokenConstraints));
            }
            else
            {
                //если response возвращается неудачный, то возвращаем "пустую" информацию
                return(new OutputDayInfo(
                           outputDay,
        protected override CreateOutputDayResponse InnerCreate(CreateOutputDayRequest req, ref OutputDayInfo dayInfo, IScheduleDataCalculator dataCalculator)
        {
            var exists = _dbContext.IsOutputDayExists(req.TypiconId, req.Date);

            if (!exists)
            {
                return(base.InnerCreate(req, ref dayInfo, dataCalculator));
            }
            else
            {
                dayInfo = null;

                return(default);
Ejemplo n.º 8
0
        protected virtual CreateOutputDayResponse InnerCreate(CreateOutputDayRequest req, ref OutputDayInfo dayInfo, IScheduleDataCalculator dataCalculator)
        {
            if (dayInfo == null)
            {
                //Формируем данные для обработки
                dayInfo = GetOutputDayInfo(dataCalculator, new ScheduleDataCalculatorRequest()
                {
                    TypiconId        = req.TypiconId,
                    TypiconVersionId = req.TypiconVersionId,
                    Date             = req.Date
                });
            }

            if (req.HandlingMode == HandlingMode.DayBefore ||
                req.HandlingMode == HandlingMode.All)
            {
                //добавляем DayBefore
                dayInfo.Day.AddWorships(dayInfo.ScheduleResults.DayBefore, _typiconSerializer);
            }

            if (req.HandlingMode == HandlingMode.ThisDay ||
                req.HandlingMode == HandlingMode.All ||
                req.HandlingMode == HandlingMode.AstronomicDay)
            {
                //добавляем ThisDay
                dayInfo.Day.AddWorships(dayInfo.ScheduleResults.ThisDay, _typiconSerializer);
            }

            var localDayInfo = dayInfo;

            //добавляем AstronomicDay
            if (req.HandlingMode == HandlingMode.AstronomicDay)
            {
                //Формируем данные для обработки от следующего дня
                dayInfo = GetOutputDayInfo(dataCalculator, new ScheduleDataCalculatorRequest()
                {
                    TypiconId        = req.TypiconId,
                    TypiconVersionId = req.TypiconVersionId,
                    Date             = req.Date.AddDays(1)
                });

                //складываем значения
                localDayInfo.Merge(dayInfo, _typiconSerializer);
            }

            //Добавить ссылки на службы
            localDayInfo.Day.OutputFormDayWorships = GetOutputDayDayWorships(localDayInfo.Day, localDayInfo.DayWorships);

            return(new CreateOutputDayResponse(localDayInfo.Day, localDayInfo.BrokenConstraints));
        }
Ejemplo n.º 9
0
 public ScheduleService(IScheduleDataCalculator dataCalculator, IScheduleDayNameComposer nameComposer)
 {
     this.dataCalculator = dataCalculator ?? throw new ArgumentNullException("dataCalculator");
     this.nameComposer   = nameComposer ?? throw new ArgumentNullException("nameComposer");
 }