private bool GetDay(out ShortDayOfWeek validDay) { validDay = ShortDayOfWeek.Mon; for (var parseSuccess = false; !parseSuccess;) { _log.Info("Enter a day (Mon, Tue, etc.) or q to quit:"); var dayStr = System.Console.ReadLine(); if (dayStr == "q" || dayStr == null) { _log.Info("Terminating at user's request."); return(false); } if (Regex.IsMatch(dayStr, "\\d")) { dayStr = string.Empty; } parseSuccess = Enum.TryParse(dayStr, true, out ShortDayOfWeek day); if (parseSuccess) { validDay = day; } else { _log.Info("Invalid day. Please try again."); } } return(true); }
public IList <RestOpen> Available(ShortDayOfWeek day, int hour, int minute) { if (_schedule == null) { throw new Exception($"No restaurant schedule loaded. Call one of the load methods before calling {nameof(Available)}."); } var requestDateTime = new DateTime(RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek + (int)day, hour, minute, 0); var available = _schedule .Where(s => s.Start <= requestDateTime && s.End > requestDateTime) .OrderBy(s => s.Name) .ToArray(); return(available); }
private void AddScheduleEntry(IList <RestOpen> openTimes, ShortDayOfWeek day, string restaurantName, DateTime startTime, DateTime endTime, int addDayToEnd) { var start = new DateTime( RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek + (int)day, startTime.Hour, startTime.Minute, 0, DateTimeKind.Local); var end = new DateTime( RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek + (int)day + addDayToEnd, endTime.Hour, endTime.Minute, 0, DateTimeKind.Local); // Handle edge case where date range on last day of the week rolls over into next week // Split schedule entry that spans week to last-day entry and first-day entry if (end > new DateTime(RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek) + TimeSpan.FromDays(7)) { var rollOverStart = new DateTime( RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek, 0, 0, 0, DateTimeKind.Local); var rollOverEnd = new DateTime( RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek, endTime.Hour, endTime.Minute, 0, DateTimeKind.Local); openTimes.Add(new RestOpen { Name = restaurantName, Start = rollOverStart, End = rollOverEnd }); LogEntry(openTimes.Last()); // Adjust end to stop at the end of the week end = new DateTime( RestOpen.CalendarYear, RestOpen.CalendarMonth, RestOpen.CalendarFirstDayOfWeek + (int)day, 23, 59, 59, DateTimeKind.Local); } openTimes.Add(new RestOpen { Name = restaurantName, Start = start, End = end }); LogEntry(openTimes.Last()); }