Beispiel #1
0
        protected virtual bool UpdateToWaitTillServiceHours(TaskObject taskObject)
        {
            var now = DateTimeOffset.Now;

            if (taskObject.PlannedFor < now)
            {
                taskObject.PlannedFor = now;
            }

            //ServiceHours
            var currentTarget = taskObject.PlannedFor.ToLocalTime().TimeOfDay;

            if (currentTarget >= taskObject.TimeWindowStart && currentTarget <= taskObject.TimeWindowEnd)
            {
                return(false);
            }
            if (_bypassServiceHours)
            {
                _bypassServiceHours = false;
                return(false);
            }

            //out of Time window
            var haveToWait = taskObject.TimeWindowStart - currentTarget;

            if (currentTarget > taskObject.TimeWindowEnd)
            {
                haveToWait += TimeSpan.FromDays(1);
            }
            taskObject.PlannedFor = taskObject.PlannedFor.Add(haveToWait);


            return(true);
        }
Beispiel #2
0
        protected virtual void PlanSingle(TaskObject taskObject, bool recurring = false)
        {
            if (_openTasks.FirstOrDefault(x => x.Name == taskObject.Name) is TaskObject planned)
            {//already planned
                OnNewLog("Warn", $"Task \"{planned.Name}\" already planned.");
                return;
            }

            //planning
            if (taskObject.SchedulingOptions.HasFlag(SchedulingOptions.RecurringByDynamicInterval))
            {
                taskObject.PlannedFor = taskObject.LastStarted.Add(taskObject.DynamicInterval());
            }
            else if (recurring && taskObject.SchedulingOptions.HasFlag(SchedulingOptions.RecurringByInterval))
            {
                //only add interval after first performed
                taskObject.PlannedFor += taskObject.Interval;
                //no repeating for low PlannedFor´s
                if (taskObject.PlannedFor <= DateTimeOffset.Now)
                {
                    taskObject.PlannedFor = DateTimeOffset.Now.Add(taskObject.Interval);
                }
            }

            //WaitTillServiceHours
            if (taskObject.SchedulingOptions.HasFlag(SchedulingOptions.DelayUntilNextTimeWindow))
            {
                UpdateToWaitTillServiceHours(taskObject);
            }

            //adding
            _openTasks.Add(taskObject);
            OnNewLog("Info", $"Task {taskObject.Name} scheduled at {taskObject.PlannedFor.LocalDateTime.ToShortDateString()} {taskObject.PlannedFor.LocalDateTime.ToShortTimeString()}");
        }