Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #6
0
 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("");
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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());
        }
Beispiel #11
0
 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;
 }
Beispiel #13
0
 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");
     }
 }
Beispiel #14
0
 public static string GetFriendlyName(this ServiceDay day) => GetFriendlyName(day, false);
Beispiel #15
0
 public DayScheduleGroup(ServiceDay dayGroup)
 {
     DayGroup = dayGroup;
 }
Beispiel #16
0
 public abstract IEnumerable<ScheduledArrival> GetSchedule(ServiceDay day);
 public abstract IEnumerable <ScheduledArrival> GetSchedule(ServiceDay day);