public string Details(string id)
        {
            Schedule schedule = _repo.FindBy(Convert.ToInt32(id));
            string   data     = "";

            if (schedule is ScheduleDaily)
            {
                ScheduleDaily model = ((ScheduleDaily)schedule);

                data += "<p>Repeats:" + model.Repeats + "</p>";
                data += "<p>Recurrence: Every " + model.RepeatOn + " day(s)</p>";
                data += "<p>Time:  " + model.Time + "</p>";
                data += "<p>Start Date:  " + model.StartDate + "</p>";
                data += "<p>Stop Date:  " + model.StopDate + "</p>";
            }
            if (schedule is ScheduleOnce)
            {
                ScheduleOnce model = ((ScheduleOnce)schedule);

                data += "<p>Repeats:" + model.Repeats + "</p>";
                data += "<p>Recurrence: One Time</p>";
                data += "<p>Time:  " + model.Time + "</p>";
                data += "<p>Start Date:  " + model.StartDate + "</p>";
            }
            if (schedule is ScheduleWeekly)
            {
                ScheduleWeekly model = ((ScheduleWeekly)schedule);

                data += "<p>Repeats:" + model.Repeats + "</p>";
                data += "<p>Recurrence: Every " + model.RepeatOnWeeks + " weeks(s) on " + model.RepeatOnDaysWeeks + "</p>";
                data += "<p>Time:  " + model.Time + "</p>";
                data += "<p>Start Date:  " + model.StartDate + "</p>";
                data += "<p>Stop Date:  " + model.StopDate + "</p>";
            }
            if (schedule is ScheduleMonthly)
            {
                ScheduleMonthly model = ((ScheduleMonthly)schedule);

                data += "<p>Repeats:" + model.Repeats + "</p>";
                data += "<p>Recurrence:  Day " + model.RepeatOnDay + " every " + model.RepeatOnMonth + " month(s)</p>";
                data += "<p>Time:  " + model.Time + "</p>";
                data += "<p>Start Date:  " + model.StartDate + "</p>";
                data += "<p>Stop Date:  " + model.StopDate + "</p>";
            }
            if (schedule is ScheduleMonthlyRelative)
            {
                ScheduleMonthlyRelative model = ((ScheduleMonthlyRelative)schedule);

                data += "<p>Repeats:" + model.Repeats + "</p>";
                data += "<p>Recurrence:  The " + model.RepeatOnFirst + " " + model.RepeatOnDay + " every " + model.RepeatOnMonth + " month(s)</p>";
                data += "<p>Time:  " + model.Time + "</p>";
                data += "<p>Start Date:  " + model.StartDate + "</p>";
                data += "<p>Stop Date:  " + model.StopDate + "</p>";
            }

            return(data);
        }
        public ActionResult Create([Bind(Include = "UserId,Name,Repeats,RepeatsSelected,StartDate,Time,RepeatOn,StopDate,RepeatOnWeeks,RepeatOnDaysWeeks,RepeatOnDay,RepeatOnMonth,RepeatOnFirst,RepeatOnDay2,RepeatOnMonth2")] ScheduleViewModel vmodel)
        {
            if (vmodel.RepeatsSelected != -1)
            {
                ModelState.Remove("Repeats");
            }
            if (ModelState.IsValid)
            {
                Schedule model = null;
                if (vmodel.Repeats == ScheduleType.RepeatsEnum.Once)
                {
                    model = new ScheduleOnce(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time);
                }
                else
                {
                    if (vmodel.Repeats == ScheduleType.RepeatsEnum.Daily)
                    {
                        model = new ScheduleDaily(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time, vmodel.RepeatOn, vmodel.StopDate);
                    }
                    else
                    {
                        if (vmodel.Repeats == ScheduleType.RepeatsEnum.Weekly)
                        {
                            string days = vmodel.RepeatOnDaysWeeks == null ? "Mon" : vmodel.RepeatOnDaysWeeks;
                            model = new ScheduleWeekly(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time, vmodel.RepeatOnWeeks, days, vmodel.StopDate);
                        }
                        else
                        {
                            if (vmodel.Repeats == ScheduleType.RepeatsEnum.Monthly)
                            {
                                model = new ScheduleMonthly(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time, vmodel.RepeatOnDay, vmodel.RepeatOnMonth, vmodel.StopDate);
                            }
                            else
                            {
                                if (vmodel.Repeats == ScheduleType.RepeatsEnum.MonthlyRelative)
                                {
                                    model = new ScheduleMonthlyRelative(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time, vmodel.RepeatOnFirst, vmodel.RepeatOnDay2, vmodel.RepeatOnMonth2, vmodel.StopDate);
                                }
                            }
                        }
                    }
                }
                User user = _userRepository.FindBy(Convert.ToInt32(vmodel.UserId));
                model.UserId = user.Id;
                _repo.Add(model);
                return(RedirectToAction("Index"));
            }

            return(View(vmodel));
        }
        private bool EditScheduleMonthlyRelative(ScheduleViewModel vmodel, Schedule model)
        {
            if (model.GetType().BaseType.FullName != typeof(ScheduleMonthlyRelative).FullName)
            {
                ScheduleMonthlyRelative         model1        = new ScheduleMonthlyRelative(vmodel.Name, vmodel.Repeats, vmodel.StartDate, vmodel.Time, vmodel.RepeatOnFirst, vmodel.RepeatOnDay2, vmodel.RepeatOnMonth2, vmodel.StopDate);
                IEnumerable <SubscriptionModel> subscriptions = model.Subscriptions;

                AddReportFilters(subscriptions, model1, model.UserId, model.ID);

                return(false);
            }
            else
            {
                ((ScheduleMonthlyRelative)model).Time          = vmodel.Time;
                ((ScheduleMonthlyRelative)model).RepeatOnFirst = vmodel.RepeatOnFirst;
                ((ScheduleMonthlyRelative)model).RepeatOnDay   = vmodel.RepeatOnDay2;
                ((ScheduleMonthlyRelative)model).RepeatOnMonth = vmodel.RepeatOnMonth2;
                ((ScheduleMonthlyRelative)model).StopDate      = vmodel.StopDate;
            }
            return(true);
        }
Example #4
0
        private string NextRunDate(Schedule schedule)
        {
            string   datestart = schedule.StartDate.ToShortDateString();
            string   daterun   = "";
            DateTime today     = DateTime.Now;

            if (schedule is ScheduleOnce)
            {
                datestart += " " + ((ScheduleOnce)schedule).Time;
                DateTime dt = Convert.ToDateTime(datestart);
                if (dt > DateTime.Now)
                {
                    daterun = dt.ToString();
                }
                else
                {
                    daterun = "One execution";
                }
            }
            if (schedule is ScheduleDaily)
            {
                datestart += " " + ((ScheduleDaily)schedule).Time;
                DateTime dt = Convert.ToDateTime(datestart);
                if (dt > DateTime.Now)
                {
                    daterun = dt.ToString();
                }
                else
                {
                    string nextday = today.AddDays(((ScheduleDaily)schedule).RepeatOn).ToShortDateString();
                    daterun = nextday + " " + ((ScheduleDaily)schedule).Time;
                }
            }
            if (schedule is ScheduleWeekly)
            {
                datestart += " " + ((ScheduleWeekly)schedule).Time;
                DateTime dt = Convert.ToDateTime(datestart);
                if (dt > DateTime.Now)
                {
                    daterun = dt.ToString();
                }
                else
                {
                    ScheduleWeekly week            = ((ScheduleWeekly)schedule);
                    string[]       days            = week.RepeatOnDaysWeeks.Split('_');
                    int            days_week       = week.RepeatOnWeeks * 7;
                    DateTime       nextweek        = today.AddDays(days_week);
                    DateTime       first_date_week = Utils.GetFirstDayOfWeek(nextweek);
                    DateTime       nextrun         = GetNextRun(first_date_week, days[0]);
                    daterun = nextrun.ToShortDateString() + " " + ((ScheduleWeekly)schedule).Time;
                }
            }
            if (schedule is ScheduleMonthly)
            {
                datestart += " " + ((ScheduleMonthly)schedule).Time;
                DateTime dt = Convert.ToDateTime(datestart);
                if (dt > DateTime.Now)
                {
                    daterun = dt.ToString();
                }
                else
                {
                    ScheduleMonthly month       = ((ScheduleMonthly)schedule);
                    int             day         = month.RepeatOnDay;
                    int             every_month = month.RepeatOnMonth;

                    DateTime next_month = today.AddMonths(every_month);

                    daterun = next_month.Month + "/" + day + "/" + next_month.Year + " " + ((ScheduleMonthly)schedule).Time;
                }
            }
            if (schedule is ScheduleMonthlyRelative)
            {
                datestart += " " + ((ScheduleMonthlyRelative)schedule).Time;
                DateTime dt = Convert.ToDateTime(datestart);
                if (dt > DateTime.Now)
                {
                    daterun = dt.ToString();
                }
                else
                {
                    ScheduleMonthlyRelative month_relative = ((ScheduleMonthlyRelative)schedule);
                    int      first           = Convert.ToInt32(month_relative.RepeatOnFirst); // 0 is last day
                    string   name_day        = month_relative.RepeatOnDay;
                    int      every_month     = month_relative.RepeatOnMonth;
                    DateTime next_month      = today.AddMonths(every_month);
                    var      firstDayOfMonth = new DateTime(next_month.Year, next_month.Month, 1);

                    DateTime nextrun         = new DateTime();
                    DateTime first_date_week = firstDayOfMonth;//si es first == 1 , es la primera semana
                    if (first > 1)
                    {
                        int      days_week = first * 7;
                        DateTime nextweek  = firstDayOfMonth.AddDays(days_week);
                        first_date_week = Utils.GetFirstDayOfWeek(nextweek);
                    }
                    if (first == 0) //Ultimo del mes
                    {
                        var last_week = firstDayOfMonth.AddMonths(1).AddDays(-3);
                        first_date_week = Utils.GetFirstDayOfWeek(last_week);
                    }

                    nextrun = GetNextRunMonth(first_date_week, name_day);
                    daterun = nextrun.ToShortDateString() + " " + ((ScheduleMonthlyRelative)schedule).Time;
                }
            }
            return(daterun);
        }