예제 #1
0
        public void CalculateCompatibleDays()
        {
            var openSlots = new List <KeyValuePair <DateTime, TimeSpan> >()
            {
                new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 28, 18, 45, 0), new TimeSpan(1, 15, 0)), //Sabado
                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 discount = new Discount
            {
                ValidFrom     = new DateTime(2016, 11, 5), //Sabado
                DurationDays  = 1,
                InstancesLeft = null,
                Loop          = 7,
                Percentage    = 15,
                Phrase        = "SABADO15REPO",
                Roof          = 200,
                IsActive      = true
            };
            var today = new DateTime(2018, 4, 28); //Sabado

            var result = WorkingHours.GetCompatibleOpenSlots(openSlots, discount, today);

            Assert.AreEqual(result.Count(), 1);
            Assert.AreEqual(result.First(), new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 28, 18, 45, 0), new TimeSpan(1, 15, 0)));
        }
        public void CalculateCompatibleDaysDiscountSameDayButFirstDeliverableDate()
        {
            var openSlots = 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 discount = new Discount
            {
                ValidFrom     = new DateTime(2016, 11, 5), //Sabado
                DurationDays  = 1,
                InstancesLeft = null,
                Weekly        = true,
                Percentage    = 15,
                Phrase        = "SABADO15REPO",
                Roof          = 200,
                IsActive      = true
            };
            var today = new DateTime(2018, 4, 28); //Sabado

            var result = WorkingHours.GetCompatibleOpenSlots(openSlots, discount, today);

            Assert.AreEqual(result.Count(), 1);
            Assert.AreEqual(result.First(), new KeyValuePair <DateTime, TimeSpan>(new DateTime(2018, 4, 29, 9, 0, 0), new TimeSpan(4, 0, 0))); //El desc es del sabado, y se usa un sabado, pero la primera hora disponible de entrega es domingo,new DateTime(2018, 4, 29, 9, 0, 0), new TimeSpan(4, 0, 0)
        }
예제 #3
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);
        }
예제 #4
0
        public IEnumerable <KeyValuePair <DateTime, TimeSpan> > GetPickUpOption(int preparationTime, Discount discount)
        {
            var validDiscount = Discount.IsValid(LocalTime(), discount);

            if (!validDiscount)
            {
                discount = null;
            }

            var pickUpTime = GetPickupEstimate(preparationTime);
            var openHours  = Calendar.OpenHours;
            var holidays   = Calendar.Holidays;
            var vacations  = Calendar.Vacations;

            var openSlots     = WorkingHours.GetOpenSlots(pickUpTime, openHours, holidays, vacations);
            var pickUpOptions = WorkingHours.GetCompatibleOpenSlots(openSlots, discount, LocalTime());

            return(pickUpOptions);
        }
예제 #5
0
        public IEnumerable <KeyValuePair <DateTime, TimeSpan> > GetPickUpOption(int preparationTime, Discount discount)
        {
            var validDiscount = Discount.ApplyDiscount(LocalTime(), 1, discount) < 0;

            if (!validDiscount)
            {
                discount = null;
            }

            var pickUpTime = GetPickupEstimate(preparationTime);
            var openHours  = _appDbContext.OpenHours.ToList();
            var holidays   = _appDbContext.Holidays.ToList();
            var vacations  = _appDbContext.Vacations.ToList();

            var openSlots     = WorkingHours.GetOpenSlots(pickUpTime, openHours, holidays, vacations);
            var pickUpOptions = WorkingHours.GetCompatibleOpenSlots(openSlots, discount, LocalTime());

            return(pickUpOptions);
        }