Example #1
0
        public virtual DateTimeCollection GetInstancesBetween(DateTime startDate, DateTime endDate)
        {
            var r = new Recurrence
            {
                StartDateTime     = StartDate,
                Frequency         = Frequency,
                CanOccurOnHoliday = CanOccurOnHolidays
            };

            if (!RepeatsIndefinitely)
            {
                if (RecurUntil == null)
                {
                    throw new ArgumentNullException();
                }

                r.RecurUntil = (DateTime)RecurUntil;
            }

            if (IsOnWeekdays)
            {
                r.RecurEveryWeekday();
            }
            else
            {
                r.Interval = Interval;
            }

            return(r.InstancesBetween(startDate, endDate));
        }
Example #2
0
        public async Task <IActionResult> AddSchedule([Bind()] MasterSchedule schedule)
        {
            var employee = _context.Employees
                           .FirstOrDefaultAsync(e => e.EmployeeId == schedule.EmployeeId);

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

            if (ModelState.IsValid)
            {
                // TODO: Generate rrule here.
                var r = new Recurrence()
                {
                    StartDateTime     = schedule.StartDate,
                    Frequency         = (RecurFrequency)schedule.Frequency,
                    CanOccurOnHoliday = schedule.CanOccurOnHolidays
                };

                if (!schedule.RepeatsIndefinitely)
                {
                    if (schedule.EndDate == null)
                    {
                        throw new ArgumentNullException();
                    }

                    r.RecurUntil = (DateTime)schedule.EndDate;
                }

                if (schedule.IsOnWeekdays)
                {
                    r.RecurEveryWeekday();
                }
                else
                {
                    r.Interval = schedule.Interval;
                }

                if (schedule.Frequency == RecurFrequency.Weekly)
                {
                    r.ByDay.AddRange(schedule.Days
                                     .Select(day => (System.DayOfWeek)day));

                    if (schedule.Days.Count > 0)
                    {
                        foreach (var day in schedule.Days)
                        {
                            schedule.DaysOfWeek.Add(await _context.DaysOfWeek.FindAsync(day));
                        }
                    }
                }

                _context.Add(schedule);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(ShowSchedules), new { EmployeeId = schedule.EmployeeId }));
            }

            return(View(schedule));
        }