public RouteScheduleSummary(RouteSchedule routeSchedule) { this.ID = routeSchedule.ID; this.RouteID = routeSchedule.RouteID; this.DayOfWeek = daysOfWeek[routeSchedule.DayOfWeek]; this.StartTime = routeSchedule.StartTime.ToShortTimeString(); this.EndTime = routeSchedule.EndTime.ToShortTimeString(); }
public RouteSchedule(RouteSchedule otherSchedule) { this.ID = otherSchedule.ID; this.RouteID = otherSchedule.RouteID; this.DayOfWeek = otherSchedule.DayOfWeek; this.StartTime = otherSchedule.StartTime; this.EndTime = otherSchedule.EndTime; this.Route = otherSchedule.Route; }
public RouteSchedule(RouteSchedule otherSchedule) { this.ID = otherSchedule.ID; this.RouteID = otherSchedule.RouteID; this.DayOfWeek = otherSchedule.DayOfWeek; this.StartTime = otherSchedule.StartTime; this.EndTime = otherSchedule.EndTime; this.Route = otherSchedule.Route; }
private static void ProcessEffectiveDay(DateTime scheduleDate, int day, IEnumerable<RouteSchedule> routeSchedules, IEnumerable<RouteScheduleOverride> routeScheduleOverrides, List<RouteSchedule> effectiveSchedules) { // Obtain any special schedules for the day var specialSchedules = FindOverrideSchedules(routeScheduleOverrides, scheduleDate); var todaysSchedules = FindTodaysSchedules(routeSchedules, scheduleDate); foreach(var routeSchedule in todaysSchedules) { var modifiedSchedules = ModifyRouteSchedule(routeSchedule, specialSchedules); if (modifiedSchedules != null) { foreach(var schedule in modifiedSchedules) { schedule.DayOfWeek += ((day / 7) * 7); // Adjust for additional weeks effectiveSchedules.Add(schedule); } } } if (specialSchedules != null) { // Add special route foreach (var specialRoute in specialSchedules) { if (specialRoute.OverrideType != RouteScheduleOverride.OverrideRule.NoService) { var routeSchedule = new RouteSchedule(specialRoute); routeSchedule.DayOfWeek += ((day / 7) * 7); // Adjust for additional weeks effectiveSchedules.Add(routeSchedule); } } } // Add any new routes var addedSchedules = FindAddedSchedules(routeScheduleOverrides, scheduleDate); if (addedSchedules != null) { foreach (var addedRoute in addedSchedules) { var routeSchedule = new RouteSchedule(addedRoute); routeSchedule.DayOfWeek += ((day / 7) * 7); // Adjust for additional weeks effectiveSchedules.Add(routeSchedule); } } }
/// <summary> /// Based on the possible overlap of the special schedule, the result could be 0, 1, 2, or 3 new schedule time slots. /// </summary> /// <param name="routeSchedule"></param> /// <param name="specialSchedules"></param> /// <param name="dayLabel"></param> /// <returns></returns> private static List<RouteSchedule> ModifyRouteScheduleForOverlap(RouteSchedule routeSchedule, IEnumerable<RouteScheduleOverride> specialSchedules) { var schedules = new List<RouteSchedule>(); bool keepFixedRoute = true; foreach (var specialSchedule in specialSchedules) { if (!specialSchedule.OverriddenRouteID.HasValue || // Applies to all routes if null (specialSchedule.OverriddenRouteID == routeSchedule.RouteID) ) { // This route is targeted if (routeSchedule.StartTime.TimeOfDay >= specialSchedule.StartTime.TimeOfDay && routeSchedule.EndTime.TimeOfDay <= specialSchedule.EndTime.TimeOfDay) { // Exact overlap or completely contained - replace with new / cancel all keepFixedRoute = false; } else { // Check for any overlap if (routeSchedule.StartTime.TimeOfDay < specialSchedule.EndTime.TimeOfDay && specialSchedule.StartTime.TimeOfDay < routeSchedule.EndTime.TimeOfDay) { // Have overlap if (routeSchedule.StartTime.TimeOfDay < specialSchedule.StartTime.TimeOfDay) { // First part of orignal schedule is to be retained var newSchedule = new RouteSchedule(routeSchedule); newSchedule.EndTime = specialSchedule.StartTime; schedules.Add(newSchedule); keepFixedRoute = false; } if (routeSchedule.EndTime.TimeOfDay > specialSchedule.EndTime.TimeOfDay) { // End part of orignal schedule is to be retained var newSchedule = new RouteSchedule(routeSchedule); newSchedule.StartTime = specialSchedule.EndTime; schedules.Add(newSchedule); keepFixedRoute = false; } // Check for beginning or end aligned with special case if ( (routeSchedule.StartTime == specialSchedule.StartTime) || (routeSchedule.EndTime == specialSchedule.EndTime) ) { keepFixedRoute = false; } } } } } if (keepFixedRoute) { schedules.Add(new RouteSchedule(routeSchedule)); } return schedules; }
/// <summary> /// Apply Delete or Replace cases to fixed route /// </summary> /// <param name="routeSchedule"></param> /// <param name="specialSchedules"></param> /// <returns></returns> private static List<RouteSchedule> ModifyRouteSchedule(RouteSchedule routeSchedule, IEnumerable<RouteScheduleOverride> specialSchedules) { var schedules = new List<RouteSchedule>(); if (specialSchedules != null) { schedules.AddRange(ModifyRouteScheduleForOverlap(routeSchedule, specialSchedules)); } else { schedules.Add(new RouteSchedule(routeSchedule)); } return schedules; }