예제 #1
0
        public void ContainsDateFrame()
        {
            var _openHours = new List <OpenHours>()
            {
                new OpenHours()
                {
                    DayId = 2, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 2, StartingAt = new TimeSpan(16, 00, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 3, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 3, StartingAt = new TimeSpan(16, 00, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 4, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 4, StartingAt = new TimeSpan(16, 00, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 5, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 5, StartingAt = new TimeSpan(16, 00, 0), Duration = new TimeSpan(4, 0, 0)
                },
                new OpenHours()
                {
                    DayId = 6, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(11, 30, 0)
                },
                new OpenHours()
                {
                    DayId = 0, StartingAt = new TimeSpan(8, 30, 0), Duration = new TimeSpan(4, 30, 0)
                }
            };

            var today      = new DateTime(2018, 5, 17, 12, 11, 0); //Jueves Mediodia
            var pickUpTime = new DateTime(2018, 5, 17, 19, 45, 0); //

            /************* Get Pick Up Option *******************/
            var openSlots       = WorkingHours.GetOpenSlots(pickUpTime, _openHours, new List <PublicHoliday>(), new List <Vacation>());
            var compatibleHours = WorkingHours.GetCompatibleOpenSlots(openSlots, null, today);
            /************* Get Pick Up Option *******************/

            var result = WorkingHours.ContainsDateFrame(compatibleHours, new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 17, 11, 15, 0), new TimeSpan(1, 15, 0)));

            Assert.IsFalse(result);
        }
예제 #2
0
        public void CompatibleSlotsContainsDateFrame()
        {
            var compatibleOpenSlots = new List <KeyValuePair <DateTime, TimeSpan> >()
            {
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 29, 9, 0, 0), new TimeSpan(4, 0, 0)),                     //Domingo
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 1, 8, 30, 0), new TimeSpan(4, 0, 0)),                     //Martes
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 1, 16, 0, 0), new TimeSpan(4, 0, 0)),                     //Martes
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 2, 8, 30, 0), new TimeSpan(4, 0, 0)),                     //Miercoles
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 2, 16, 0, 0), new TimeSpan(4, 0, 0))                      //Miercoles
            };
            var selectedtimeframe = new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 29, 9, 0, 0), new TimeSpan(4, 0, 0)); //Domingo, pero mas temprano
            var result            = WorkingHours.ContainsDateFrame(compatibleOpenSlots, selectedtimeframe);

            Assert.IsTrue(result);
        }
예제 #3
0
        public void CompatibleSlotsDoesntContainsDateFrame()
        {
            var compatibleOpenSlots = new List <KeyValuePair <DateTime, TimeSpan> >()
            {
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 29, 9, 0, 0), new TimeSpan(4, 0, 0)),                      //Domingo
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 1, 8, 30, 0), new TimeSpan(4, 0, 0)),                      //Martes
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 1, 16, 0, 0), new TimeSpan(4, 0, 0)),                      //Martes
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 2, 8, 30, 0), new TimeSpan(4, 0, 0)),                      //Miercoles
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 5, 2, 16, 0, 0), new TimeSpan(4, 0, 0))                       //Miercoles
            };
            var selectedtimeframe = new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 29, 13, 1, 0), new TimeSpan(1, 0, 0)); //Domingo, pero fuera de horario de trabajo
            var result            = WorkingHours.ContainsDateFrame(compatibleOpenSlots, selectedtimeframe);

            Assert.IsFalse(result);
        }
예제 #4
0
        public ShoppingCartPickUpDate GetPickUpDate(string bookingId)
        {
            bookingId = bookingId ?? _cartSession.BookingId;
            var result        = _appDbContext.ShoppingCartPickUpDates.LastOrDefault(x => x.BookingId == bookingId);
            var prepTime      = GetPreparationTime(bookingId);
            var discount      = GetDiscount(bookingId);
            var openSlots     = _calendarRepository.GetPickUpOption(prepTime, discount);
            var defaultOption = openSlots.First();

            if (result == null)
            {
                return(InsertPickUpDate(bookingId, defaultOption, true, ""));
            }
            else
            {
                var validDate = WorkingHours.ContainsDateFrame(openSlots, new KeyValuePair <DateTime, TimeSpan>(result.From, result.To));
                if (!validDate)
                {
                    if (result.UserSubmitted)
                    {
                        var message = defaultOption.Key.Date == result.From.Date ?
                                      "Se ajustó la hora de entrega." :
                                      "La fecha que elegiste ya no es válida y fue cambiada.";

                        var userSubmitted = defaultOption.Key.Date == result.From.Date;
                        return(InsertPickUpDate(bookingId, defaultOption, userSubmitted, message));
                    }
                    else
                    {
                        result.From = defaultOption.Key;
                        result.To   = defaultOption.Value;
                        _appDbContext.ShoppingCartPickUpDates.Update(result);
                        _appDbContext.SaveChanges();
                        return(result);
                    }
                }
            }
            return(result);
        }