public CheckBookingModel bookholidayhome(int Id, DateTime from, DateTime to) { from = from + new TimeSpan(0, 16, 0, 0); to = to + new TimeSpan(0, 11, 0, 0); DateTime TimeofBookingMax = from - new TimeSpan(14, 0, 0, 0); CheckBookingModel model = new CheckBookingModel(); List <ReserveObject> reservedList = new List <ReserveObject>(); try { //change this //reservedList = context.ReserveObjects.Where(d => d.bookingFrom >= TimeofBookingMax && d.bookingFrom <= to).ToList(); reservedList = context.HolidayHomes.Find(Id).reserveTimes.Where(d => d.bookingFrom >= TimeofBookingMax && d.bookingFrom <= to).ToList(); } catch { } if (reservedList.Count() == 0) { model.Available = true; model.DaysAvailable = (to - from).Days; model.FirstDateAvailable = from; } else { model = CheckForAvailableDays(from, to, reservedList); } if (model.Available == true) { HolidayHome home; ReserveObject reserve = new ReserveObject(); reserve.bookingFrom = from; reserve.bookingToo = to; reserve.totalNights = (int)Math.Round((to - from).TotalDays); try { home = context.HolidayHomes.Find(Id); home.reserveTimes.Add(reserve); context.SaveChanges(); } catch { } } return(model); }
public ActionResult ReserveRoom(ReverveRoomModel model) { if (model.dateTo <= model.dateFrom) { ModelState.AddModelError("dateTo", "Date should be later than above"); } if (model.dateFrom == null) { ModelState.AddModelError("dateFrom", "Pole nie moze być puste"); } if (ModelState.IsValid) { //repository.BookHolidayHome(model.holidayhomeId, model.dateFrom, model.dateTo); CheckBookingModel modelbook = repository.bookroom(model.roomId, model.dateFrom, model.dateTo); ViewBag.checkbookingmodel = modelbook; return(RedirectToAction("ShowDetailsRoom", "Home", new { Id = model.roomId })); } else { Room room = repository.GetRoomById(model.roomId); List <DateTime> list = repository.GetDaysBookedRoom(model.roomId); List <string> liststring = new List <string>(); foreach (var item in list) { liststring.Add(item.ToShortDateString()); } BookRoomViewModel viewmodel = new BookRoomViewModel(); viewmodel.room = room; viewmodel.list = liststring; return(View("~/Views/Client/BookRoom.cshtml", viewmodel)); //Room room = repository.GetRoomById(model.roomId); //return View("~/Views/Client/BookRoom.cshtml", room); } }
public void when_calling_ReserveRoom_returns_model() { CheckBookingModel model = new CheckBookingModel(); model.Available = true; model.DaysAvailable = 3; model.FirstDateAvailable = new DateTime(2019, 4, 13); model.room = new Room() { Price = 100, numberofGuests = 1, numberofBeds = 1, doubleBed = false, petsAllowed = false, Toilet = true, Kitchen = false, numberofTelevisions = 1 }; model.holidayHome = new HolidayHome() { HolidayHomeId = 3, Price = 200, numberofGuests = 1, numberofBeds = 1, doubleBed = false, petsAllowed = true, Toilet = true, Kitchen = false, numberofTelevisions = 1, numberofFloors = 1 }; ReverveRoomModel reservemodel = new ReverveRoomModel(); reservemodel.dateFrom = new DateTime(2019, 4, 2); reservemodel.dateTo = new DateTime(2019, 4, 5); reservemodel.roomId = 3; Mock <IHolidaysRepository> mock = new Mock <IHolidaysRepository>(); mock.Setup(r => r.bookroom(It.IsAny <int>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns(model); ClientController controller = new ClientController(mock.Object); RedirectToRouteResult result = (RedirectToRouteResult)(controller.ReserveRoom(reservemodel)); Assert.AreEqual("ShowDetailsRoom", result.RouteValues["action"]); Assert.AreEqual("Home", result.RouteValues["controller"]); Assert.AreEqual(3, result.RouteValues["Id"]); }
//public bool BookHolidayHome(int Id, DateTime from, DateTime to) //{ // if (from >= to || DateTime.Now >= to) // { // return false; // } // from.AddHours(16); // to.AddHours(11); // HolidayHome home; // ReserveObject reserve = new ReserveObject(); // reserve.bookingFrom = from; // reserve.bookingToo = to; // reserve.totalDays = to.Subtract(from).Days; // reserve.totalHours = to.Subtract(from).Hours; // try // { // home = context.HolidayHomes.Find(Id); // home.reserveTimes.Add(reserve); // context.SaveChanges(); // return true; // } // catch // { // return false; // } //} public CheckBookingModel CheckForAvailableDays(DateTime from, DateTime to, List <ReserveObject> list) { CheckBookingModel model = new CheckBookingModel(); List <DateTime> listofdaystobook = new List <DateTime>(); List <DateTime> DaysToRemove = new List <DateTime>(); int nightsCount = (int)Math.Round((to - from).TotalDays); //int daysCount = (int)Math.Round((to - from).TotalDays+1); for (int i = 0; i < nightsCount; i++) { //listofdaystobook.Add(new DateTime(from.Year, from.Month, (from.Day + i),16,0,0)); DateTime day = from; day.AddHours(16); day.AddDays(i); listofdaystobook.Add(day); } //listofdaystobook[0]=listofdaystobook[0].AddHours(16); // int count= listofdaystobook.Count-1; // listofdaystobook[count]= listofdaystobook[count].AddHours(11); foreach (var datetime in listofdaystobook) { foreach (var reserveobj in list) { if (datetime == reserveobj.bookingFrom || datetime == reserveobj.bookingToo || (datetime > reserveobj.bookingFrom && datetime < reserveobj.bookingToo)) { DaysToRemove.Add(datetime); } else { } } } DaysToRemove = DaysToRemove.Distinct().ToList(); foreach (var item in DaysToRemove) { try { listofdaystobook.Remove(item); } catch { } } if (listofdaystobook.Count == 0) { return(model); } else { if (nightsCount == listofdaystobook.Count) { model.Available = true; } else { model.Available = false; } model.DaysAvailable = listofdaystobook.Count; listofdaystobook.Sort((x, y) => x.Day.CompareTo(y.Day)); model.FirstDateAvailable = listofdaystobook.FirstOrDefault(); return(model); } }