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) }
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); }
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); }
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); }