Ejemplo n.º 1
0
        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());
        }