public static DateTime?DateForServiceDay(ServiceDay day) { DateTime baseDate = DateTime.Today;// - TimeSpan.FromDays(7); while (baseDate.DayOfWeek != DayOfWeek.Monday) { baseDate += TimeSpan.FromDays(1); } if (day == ServiceDay.ReducedWeekday) { //return baseDate.SkipWeekIfHoliday(); return(new DateTime(2015, 11, 11)); } double div = (double)(int)day; int log = 0; while (div > 1) { div /= 2; log++; } if (div == 1) { return((baseDate + TimeSpan.FromDays(log)).SkipWeekIfHoliday()); } return(null); }
public void AddServiceDay(ServiceDay day, DaySchedule schedule) { if (schedule == null || schedule.IsEmpty) { return; } ServiceDay totalDay = day; List <int> psuedoIdenticalDays = new List <int>(); for (int i = 0; i < DaySchedules.Count; i++) { if (DaySchedules[i].IsIdenticalToByTripId(schedule)) { TechnicalDays[i] |= day; Days[i] |= day; return; } else if (DaySchedules[i].IsIdenticalToByTime(schedule)) { totalDay |= TechnicalDays[i]; psuedoIdenticalDays.Add(i); } } foreach (var ind in psuedoIdenticalDays) { Days[ind] = totalDay; } TechnicalDays.Add(day); Days.Add(totalDay); DaySchedules.Add(schedule); }
public async Task <ActionResult> DeleteConfirmed(int id) { ServiceDay serviceDay = await db.ServiceDays.FindAsync(id); db.ServiceDays.Remove(serviceDay); await db.SaveChangesAsync(); return(RedirectToAction("Index")); }
public async Task <ActionResult> Edit([Bind(Include = "ServiceDayID,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Frequency,BeginDate,EndDate,ServiceAddressID")] ServiceDay serviceDay) { if (ModelState.IsValid) { db.Entry(serviceDay).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("Index")); } ViewBag.ServiceAddressID = new SelectList(db.ServiceAddresses, "ServiceAddressID", "Address1", serviceDay.ServiceAddressID); return(View(serviceDay)); }
// GET: ServiceDays/Details/5 public async Task <ActionResult> Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } ServiceDay serviceDay = await db.ServiceDays.FindAsync(id); if (serviceDay == null) { return(HttpNotFound()); } return(View(serviceDay)); }
public DaySchedule this[ServiceDay day] { get { for (int i = 0; i < TechnicalDays.Count; i++) { if (TechnicalDays[i].HasFlag(day) || day.HasFlag(TechnicalDays[i])) { return(DaySchedules[i]); } } return(null); } }
// GET: ServiceDays/Edit/5 public async Task <ActionResult> Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } ServiceDay serviceDay = await db.ServiceDays.FindAsync(id); if (serviceDay == null) { return(HttpNotFound()); } ViewBag.ServiceAddressID = new SelectList(db.ServiceAddresses, "ServiceAddressID", "Address1", serviceDay.ServiceAddressID); return(View(serviceDay)); }
private string ValidateServiceDetails(ServiceDay serviceDay) { foreach (var s in serviceDay.ServiceDetails) { if (s.ServiceDayId == 0) { s.ServiceDayId = serviceDay.Id; } if (s.ServiceDayId != serviceDay.Id) { return($"ServiceDayId mismatch. Rejected."); } if (s.Qty < 0) { return($"Qty must be zero or greater."); } } return(""); }
public static async Task <WeekSchedule> GetScheduleForStop(string id, CancellationToken cancellationToken) { WeekSchedule result = new WeekSchedule(); for (int i = 0; i < 8; i++) { DaySchedule daySched = new DaySchedule(); ServiceDay day = (ServiceDay)(int)Math.Pow(2, i); DateTime? date = HelperFunctions.DateForServiceDay(day); if (date.HasValue) { daySched.LoadFromVerboseString(await ApiLayer.SendRequest("schedule-for-stop/" + id, new Dictionary <string, string>() { ["date"] = date.Value.ToString("yyyy-MM-dd") }, false, cancellationToken), id); result.AddServiceDay(day, daySched); } } return(result); }
public static async Task <RealtimeArrival[]> GetScheduledArrivals(string stopId) { DateTime minTime = DateTime.Now - TimeSpan.FromMinutes(5); DateTime maxTime = DateTime.Now + TimeSpan.FromMinutes(45); ServiceDay day = DateTime.Now.GetServiceDay(); var weekSched = await LoadSchedule(stopId); if (weekSched == null) { return(null); } var daySched = weekSched[day]; SortedSet <RealtimeArrival> result = new SortedSet <RealtimeArrival>(Comparer <RealtimeArrival> .Create((sa1, sa2) => sa1.ScheduledArrivalTime <sa2.ScheduledArrivalTime ? -1 : sa1.ScheduledArrivalTime> sa2.ScheduledArrivalTime ? 1 : 0)); string curRouteId = null; string curRouteName = ""; if (daySched == null || daySched.IsEmpty) { return(result.ToArray()); } foreach (var item in daySched) { if (curRouteId != item.Route) { curRouteId = item.Route; await AccessRouteCache(delegate(List <Tuple <BusRoute, string[], string[]> > routes) { curRouteName = routes.First(rte => rte.Item1.ID == item.Route).Item1.Name; return(false); }); } if (item.ScheduledDepartureTime >= minTime && item.ScheduledDepartureTime < maxTime) { result.Add(new RealtimeArrival() { Route = item.Route, RouteName = curRouteName, Destination = item.Destination, LastUpdateTime = DateTime.Now, PredictedArrivalTime = null, ScheduledArrivalTime = item.ScheduledDepartureTime, Stop = item.Stop, Trip = item.Trip }); } } return(result.ToArray()); }
public void Deformat(CompactFormatReader reader, string stopId) { Stop = stopId; Days.Clear(); TechnicalDays.Clear(); DaySchedules.Clear(); CompactFormatReader[] items; while ((items = reader.Next()) != null) { ServiceDay nextDay = (ServiceDay)items[0].ReadInt(); ServiceDay nextTechnicalDay = (ServiceDay)items[1].ReadInt(); DaySchedule schedule = new DaySchedule() { Stop = stopId }; schedule.Deformat(items[2]); Days.Add(nextDay); TechnicalDays.Add(nextTechnicalDay); DaySchedules.Add(schedule); } }
public DayScheduleGroup(ServiceDay dayGroup) { DayGroup = dayGroup; }
private static string GetFriendlyName(this ServiceDay day, bool rec) { if (day == All) { return("Every Day"); } else if (day == (Weekdays | Weekends)) { return("Every Day*"); } else if (day.HasFlag(Saturday) && day.HasFlag(Sunday)) { ServiceDay others = day & ~Saturday & ~Sunday; if (others == None) { return("Weekends"); } else { return("Weekends, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Saturday)) { ServiceDay others = day & ~Saturday; if (others == None) { return("Saturday"); } else { return("Sat, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Sunday)) { ServiceDay others = day & ~Sunday; if (others == None) { return("Sunday"); } else { return("Sun, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Weekdays)) { string result = "Weekdays"; ServiceDay others = day & ~Weekdays; if (others.HasFlag(ReducedWeekday)) { others = others & ~ReducedWeekday; } else { result += "*"; } if (others == None) { return(result); } else { return(result + ", " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Monday)) { bool reduced = day.HasFlag(ReducedWeekday); ServiceDay others = day & ~Monday; if (reduced) { others = others & ~ReducedWeekday; } if (others == None) { return(rec ? reduced ? "Mon" : "Mon*" : reduced ? "Monday" : "Monday*"); } else { return((reduced ? "Mon" : "Mon*") + ", " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Tuesday)) { ServiceDay others = day & ~Tuesday; if (others == None) { return(rec ? "Tue" : "Tuesday"); } else { return("Tue, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Wednesday)) { ServiceDay others = day & ~Wednesday; if (others == None) { return(rec ? "Wed" : "Wednesday"); } else { return("Wed, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Thursday)) { ServiceDay others = day & ~Thursday; if (others == None) { return(rec ? "Thu" : "Thursday"); } else { return("Thu, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(Friday)) { ServiceDay others = day & ~Friday; if (others == None) { return(rec ? "Fri" : "Friday"); } else { return("Fri, " + others.GetFriendlyName(true)); } } else if (day.HasFlag(ReducedWeekday)) { return("Reduced Weekday"); } else { return("None"); } }
public static string GetFriendlyName(this ServiceDay day) => GetFriendlyName(day, false);
public abstract IEnumerable<ScheduledArrival> GetSchedule(ServiceDay day);
public abstract IEnumerable <ScheduledArrival> GetSchedule(ServiceDay day);