Beispiel #1
0
        private static RateForTimePeriod GetNormalizedRateForTimePeriod(RateForTimePeriod rate, DateTime startTime, DateTime endTime)
        {
            var newStartTime = startTime.GetDateTimeNextWeekday(rate.StartTime.DayOfWeek);
            var newEndTime   = endTime.GetDateTimeNextWeekday(rate.EndTime.DayOfWeek);

            // normalize the rate to the Day of the starttime, and the time of the original rate
            return(new RateForTimePeriod
            {
                Price = rate.Price,
                StartTime = new DateTime(newStartTime.Year, newStartTime.Month, newStartTime.Day, rate.StartTime.Hour, rate.StartTime.Minute, rate.StartTime.Second),
                EndTime = new DateTime(newEndTime.Year, newEndTime.Month, newEndTime.Day, rate.EndTime.Hour, rate.EndTime.Minute, rate.EndTime.Second)
            });
        }
Beispiel #2
0
        // This method is not being used because overlapping rates are not allowed by the API
        private static RateForTimePeriod HandleOverlappingRate(DateTime startTime, DateTime endTime, IOrderedEnumerable <RateForTimePeriod> availableRates, RateForTimePeriod activeRate)
        {
            if (activeRate == null)
            {
                // no perfect match

                var overlappingRates = availableRates.Where(r => r.StartTime < endTime)
                                       .Intersect(availableRates.Where(r => startTime <= r.EndTime));

                if (!overlappingRates.Any())
                {
                    return(null); // out of bounds
                }
                var areContiguous = true;
                var seedTime      = overlappingRates.FirstOrDefault().StartTime;

                foreach (var rate in overlappingRates)
                {
                    areContiguous &= rate.StartTime == seedTime;

                    if (!areContiguous)
                    {
                        return(null); // garage is closed for some time
                    }
                    seedTime = rate.EndTime;
                }

                if (areContiguous)
                {
                    return(overlappingRates.OrderByDescending(r => r.Price).FirstOrDefault());
                }
            }
            return(null);
        }