public async Task <IActionResult> OnGetAsync(int?id) { if (id == null) { return(NotFound()); } ProfileAvailability = await Context.ProfileAvailability.SingleOrDefaultAsync(m => m.ProAId == id); if (ProfileAvailability == null) { return(NotFound()); } return(Page()); }
public async Task <IActionResult> OnPostAsync(int?id) { if (id == null) { return(NotFound()); } ProfileAvailability = await Context.ProfileAvailability.FindAsync(id); if (ProfileAvailability != null) { Context.ProfileAvailability.Remove(ProfileAvailability); await Context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
public static void LoadScheduleForProfile(Profile profile) { lock (ScheduleLock) { LoggingService.GetInstance().LogScheduling("Loading Schedules for Profile: " + profile.Name); try { if (ProfileAvailabilities.Any(i => i.ProfileId == profile.ProfileId)) { foreach (var availability in ProfileAvailabilities.Where(i => i.ProfileId == profile.ProfileId).ToList()) { ProfileAvailabilities.Remove(availability); } } var dateProperties = DateProperties; var scheduleActiveRanges = new List <ScheduleActiveRange>(); foreach (var schedule in profile.Schedules.Where(i => i.IsActive && !i.MarkedForDeletion)) { LoggingService.GetInstance().LogScheduling("Processing Schedule: " + schedule.DisplayName); if (schedule.ScheduleRecurrence.StartDate.HasValue && schedule.ScheduleRecurrence.StartDate.Value.Date <= dateProperties.Today.Date) { var allDayStart = dateProperties.Today.Date; var allDayEnd = dateProperties.Today.Date.Add(new TimeSpan(23, 59, 59)); if (schedule.ScheduleRecurrence.PatternType == RecurrencePattern.OneTime && schedule.ScheduleRecurrence.EndDate.HasValue && schedule.ScheduleRecurrence.EndDate.Value.Date >= dateProperties.Today.Date) { LoggingService.GetInstance().LogScheduling("Found OneTime Schedule"); if (schedule.ScheduleRecurrence.IsAllDay) { var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = true, IsClosed = schedule.ClosedOnly, SchedulePriority = SchedulePriority.OneTime, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = allDayStart, EndDateTime = allDayEnd }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } else { if (schedule.ScheduleRecurrence.StartTime.HasValue && schedule.ScheduleRecurrence.EndTime.HasValue) { var startTime = schedule.ScheduleRecurrence.StartTime.Value; var endTime = schedule.ScheduleRecurrence.EndTime.Value; var start = dateProperties.Today.Date.Add(new TimeSpan(startTime.Hour, startTime.Minute, startTime.Second)); var end = dateProperties.Today.Date.Add(new TimeSpan(endTime.Hour, endTime.Minute, endTime.Second)); var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = false, IsClosed = schedule.ClosedOnly, SchedulePriority = SchedulePriority.OneTime, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = start, EndDateTime = end }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } } } if ((schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Yearly || schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Monthly) && (!schedule.ScheduleRecurrence.EndDate.HasValue || schedule.ScheduleRecurrence.EndDate.Value.Date >= dateProperties.Today.Date)) { LoggingService.GetInstance().LogScheduling("Found Yearly or Monthly Schedule"); if ((schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Yearly && schedule.ScheduleRecurrence.Month == dateProperties.Month) || schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Monthly) { var isApplicable = false; if (schedule.ScheduleRecurrence.IsRelative && schedule.ScheduleRecurrence.RelativeDayType != RelativeDayType.None) { if (schedule.ScheduleRecurrence.RelativeDayType == RelativeDayType.Day) { switch (schedule.ScheduleRecurrence.RelativeMonthlyType) { case RelativeMonthlyType.First: isApplicable = dateProperties.Date == 1; break; case RelativeMonthlyType.Second: isApplicable = dateProperties.Date == 2; break; case RelativeMonthlyType.Third: isApplicable = dateProperties.Date == 3; break; case RelativeMonthlyType.Fourth: isApplicable = dateProperties.Date == 4; break; case RelativeMonthlyType.Last: isApplicable = dateProperties.LastDayOfMonth; break; } } else { if (schedule.ScheduleRecurrence.RelativeDayType == dateProperties.RelativeDay) { if (schedule.ScheduleRecurrence.RelativeMonthlyType == dateProperties.RelativeMonthly || (schedule.ScheduleRecurrence.RelativeMonthlyType == RelativeMonthlyType.Last && dateProperties.LastDayOccurenceOfMonth)) { isApplicable = true; } } } } else { var dates = schedule.ScheduleRecurrence.Dates.Split('|'); if (dates.Any(i => i == dateProperties.Date.ToString())) { isApplicable = true; } } if (isApplicable) { if (schedule.ScheduleRecurrence.IsAllDay) { var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = true, IsClosed = schedule.ClosedOnly, SchedulePriority = schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Yearly ? SchedulePriority.Yearly : SchedulePriority.Monthly, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = allDayStart, EndDateTime = allDayEnd }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } else if (schedule.ScheduleRecurrence.StartTime.HasValue && schedule.ScheduleRecurrence.EndTime.HasValue) { var startTime = schedule.ScheduleRecurrence.StartTime.Value; var endTime = schedule.ScheduleRecurrence.EndTime.Value; var start = dateProperties.Today.Date.Add(new TimeSpan(startTime.Hour, startTime.Minute, startTime.Second)); var end = startTime > endTime ? allDayEnd : dateProperties.Today.Date.Add(new TimeSpan(endTime.Hour, endTime.Minute, endTime.Second)); var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = false, IsClosed = schedule.ClosedOnly, SchedulePriority = schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Yearly ? SchedulePriority.Yearly : SchedulePriority.Monthly, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = start, EndDateTime = end }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } } } } if (schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Weekly && (!schedule.ScheduleRecurrence.EndDate.HasValue || schedule.ScheduleRecurrence.EndDate.Value.Date >= dateProperties.Today.Date)) { LoggingService.GetInstance().LogScheduling("Found Weekly Schedule"); var isApplicable = false; var days = schedule.ScheduleRecurrence.Days.Split('|'); var isAllDay = schedule.ScheduleRecurrence.IsAllDay; TimeSpan?endTimeOverride = null; if (schedule.ScheduleRecurrence.IsDaySpan && schedule.ScheduleRecurrence.WeeklyStartTime.HasValue && schedule.ScheduleRecurrence.WeeklyEndTime.HasValue) { var weekStartTime = schedule.ScheduleRecurrence.WeeklyStartTime.Value.TimeOfDay; var weekEndTime = schedule.ScheduleRecurrence.WeeklyEndTime.Value.TimeOfDay; var firstDay = days.First(); var lastDay = days.Last(); if (firstDay == lastDay) { if (weekEndTime < weekStartTime && firstDay == dateProperties.Day.ToString()) { endTimeOverride = weekEndTime; } isApplicable = true; } else { int firstInt; int lastInt; if (int.TryParse(firstDay, out firstInt) && int.TryParse(lastDay, out lastInt)) { var range = new List <int>(); if (firstInt < lastInt) { var range1 = new int[(lastInt - firstInt) + 1]; var f = 0; for (var i = firstInt; i <= lastInt; i++) { range1[f] = i; f++; } range.AddRange(range1); } else { var range1 = new int[7 - firstInt]; var f = 0; for (var i = firstInt; i < 7; i++) { range1[f] = i; f++; } range.AddRange(range1); var range2 = new int[lastInt]; var l = 0; for (var i = lastInt; i > 0; i--) { range2[l] = i; l++; } range.AddRange(range2); } if (range.Contains(dateProperties.Day)) { isApplicable = true; } } } } else { if (days.Any(i => i == dateProperties.Day.ToString())) { isApplicable = true; } } if (isApplicable) { DateTime startDateTime; DateTime endDateTime; if (!isAllDay && schedule.ScheduleRecurrence.StartTime.HasValue && schedule.ScheduleRecurrence.EndTime.HasValue) { var startTime = schedule.ScheduleRecurrence.StartTime.Value; var endTime = schedule.ScheduleRecurrence.EndTime.Value; startDateTime = dateProperties.Today.Date.Add(new TimeSpan(startTime.Hour, startTime.Minute, startTime.Second)); endDateTime = startTime > endTime ? allDayEnd : dateProperties.Today.Date.Add(new TimeSpan(endTime.Hour, endTime.Minute, endTime.Second)); } else { startDateTime = allDayStart; endDateTime = allDayEnd; } if (endTimeOverride.HasValue) { endDateTime = dateProperties.Today.Date.Add(endTimeOverride.Value); } if (startDateTime < endDateTime) { var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = isAllDay, IsClosed = schedule.ClosedOnly, SchedulePriority = SchedulePriority.Weekly, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = startDateTime, EndDateTime = endDateTime }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } } } if (schedule.ScheduleRecurrence.PatternType == RecurrencePattern.Daily && (!schedule.ScheduleRecurrence.EndDate.HasValue || schedule.ScheduleRecurrence.EndDate.Value.Date >= dateProperties.Today.Date)) { LoggingService.GetInstance().LogScheduling("Found Daily Schedule"); DateTime startDateTime; DateTime endDateTime; if (!schedule.ScheduleRecurrence.IsAllDay && schedule.ScheduleRecurrence.StartTime.HasValue && schedule.ScheduleRecurrence.EndTime.HasValue) { var startTime = schedule.ScheduleRecurrence.StartTime.Value; var endTime = schedule.ScheduleRecurrence.EndTime.Value; startDateTime = dateProperties.Today.Date.Add(new TimeSpan(startTime.Hour, startTime.Minute, startTime.Second)); endDateTime = startTime > endTime ? allDayEnd : dateProperties.Today.Date.Add(new TimeSpan(endTime.Hour, endTime.Minute, endTime.Second)); } else { startDateTime = allDayStart; endDateTime = allDayEnd; } var scheduleActiveRange = new ScheduleActiveRange { IsAllDay = schedule.ScheduleRecurrence.IsAllDay, IsClosed = schedule.ClosedOnly, SchedulePriority = SchedulePriority.Daily, Message = !String.IsNullOrWhiteSpace(schedule.OverrideMessage) ? schedule.OverrideMessage : schedule.Description, StartDateTime = startDateTime, EndDateTime = endDateTime }; scheduleActiveRanges.Add(scheduleActiveRange); LoggingService.GetInstance().LogScheduling("Schedule Added..."); } } } var profileAvailability = new ProfileAvailability { ProfileId = profile.ProfileId, ScheduleActiveRanges = scheduleActiveRanges, LastUpdated = DateTime.UtcNow.AddHours(ScheduleDateTimeOffset).Date }; ProfileAvailabilities.Add(profileAvailability); LoggingService.GetInstance().LogScheduling("Finished Loading Schedules for Profile..."); } catch (Exception e) { LoggingService.GetInstance().LogException(e); } } }