/// <inheritdoc />
        public Task <long> Create(ScheduledTaskData data)
        {
            ScheduledDays days = data.Days;

            if (days == ScheduledDays.None)
            {
                days = ScheduledDays.All;
            }
            DateTime?nextexecution = data.FirstExecutionTime();

            return(insert.ExecuteAsync(data.Name, data.WorkableType, data.WorkableName, data.WorkableRevision, nextexecution, days, data.Interval));
        }
        static DateTime?ExecutionTime(this ScheduledTaskData task, DateTime time)
        {
            ScheduledDays dayfilter = task.Days;

            if (dayfilter == ScheduledDays.None)
            {
                dayfilter = ScheduledDays.All;
            }

            while ((time.DayOfWeek.ToScheduledDays() & dayfilter) == ScheduledDays.None)
            {
                time += TimeSpan.FromDays(1.0);
            }

            return(time);
        }
        public override bool Insert(Schedule schedule, DataAccessTransaction trx)
        {
            if (!InsertSchedule(schedule, trx))
            {
                return(false);
            }

            ScheduledDays days = (ScheduledDays)schedule;

            string sql = "INSERT INTO {0} ( SCHEDULE_ID, INTERVAL, STARTDATE, RUNATTIME, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY ) VALUES ( @SCHEDULE_ID, @INTERVAL, @STARTDATE, @RUNATTIME, @SUNDAY, @MONDAY, @TUESDAY, @WEDNESDAY, @THURSDAY, @FRIDAY, @SATURDAY )";

            using (IDbCommand cmd = GetCommand(string.Format(sql, TableName), trx))
            {
                cmd.Parameters.Add(GetDataParameter("@SCHEDULE_ID", days.Id));
                cmd.Parameters.Add(GetDataParameter("@INTERVAL", days.Interval));
                cmd.Parameters.Add(GetDataParameter("@STARTDATE", days.StartDate.Date));
                cmd.Parameters.Add(GetDataParameter("@RUNATTIME", days.RunAtTimeToString()));

                cmd.Parameters.Add(GetDataParameter("@SUNDAY", days.Days[(int)DayOfWeek.Sunday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@MONDAY", days.Days[(int)DayOfWeek.Monday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@TUESDAY", days.Days[(int)DayOfWeek.Tuesday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@WEDNESDAY", days.Days[(int)DayOfWeek.Wednesday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@THURSDAY", days.Days[(int)DayOfWeek.Thursday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@FRIDAY", days.Days[(int)DayOfWeek.Friday] == true ? 1 : 0));
                cmd.Parameters.Add(GetDataParameter("@SATURDAY", days.Days[(int)DayOfWeek.Saturday] == true ? 1 : 0));

                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (SQLiteException e)
                {
                    Log.Debug(string.Format("Insert {0}, ID={1} - {2}", TableName, schedule.Id, e));

                    if (e.ErrorCode == SQLiteErrorCode.Constraint)
                    {
                        return(false);  // assume we have a 'duplicate' error.
                    }
                    throw new DataAccessException(string.Format("ID:{0}, SQL:{1}", schedule.Id, sql), e);
                }
            }
            return(true);
        }
        public IActionResult OnGet()
        {
            var initResult = Init();

            if (initResult != null)
            {
                return(initResult);
            }

            InitPage();

            if (Plan == null)
            {
                return(NotFound());
            }



            Enabled = Plan.Enabled;
            Id      = Plan.Id;
            Name    = Plan.Name;

            StartDate = Plan.StartDate;
            if (StartDate.HasValue)
            {
                StartDate = StartDate.Value;
            }

            EndDate = Plan.EndDate;
            if (EndDate.HasValue)
            {
                EndDate = EndDate.Value;
            }

            Type              = Plan.Type;
            NextTriggerTime   = Plan.NextTriggerTime;
            IntervalInMinutes = Plan.IntervalInMinutes;
            JobTypeName       = $"{Plan.JobType.Name} ({Plan.JobType.Id})";

            if (Plan.ScheduledDays.ScheduledOnSunday)
            {
                ScheduledDays.Add(DayOfWeek.Sunday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnMonday)
            {
                ScheduledDays.Add(DayOfWeek.Monday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnTuesday)
            {
                ScheduledDays.Add(DayOfWeek.Tuesday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnWednesday)
            {
                ScheduledDays.Add(DayOfWeek.Wednesday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnThursday)
            {
                ScheduledDays.Add(DayOfWeek.Thursday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnFriday)
            {
                ScheduledDays.Add(DayOfWeek.Friday.ToString());
            }
            if (Plan.ScheduledDays.ScheduledOnSaturday)
            {
                ScheduledDays.Add(DayOfWeek.Saturday.ToString());
            }

            if (Plan.StartTimespan != null)
            {
                StartTimespan = new DateTime(2000, 1, 1).AddMinutes(Plan.StartTimespan.Value);
            }
            if (Plan.EndTimespan != null)
            {
                EndTimespan = new DateTime(2000, 1, 1).AddMinutes(Plan.EndTimespan.Value);
            }

            BeforeRender();
            return(Page());
        }