private async Task AddReservationDetails(AddBookingVM vm) { var reservationDetails = new ReservationDetail { RoomReservationId = vm.RoomReservationId, RoomId = vm.RoomId, CheckInDate = vm.CheckInDate, CheckOutDate = vm.CheckOutDate, Rate = _db.Rooms.Single(r => r.Id == vm.RoomId).Rate }; _db.ReservationDetails.Add(reservationDetails); await _db.SaveChangesAsync(); }
private async Task <Guest> RegisterGuest(AddBookingVM vm) { var guest = new Guest { TitleId = vm.TitleId, FirstName = vm.FirstName, LastName = vm.LastName, Address = vm.Address, ContactNumber = vm.ContactNumber }; _db.Guests.Add(guest); await _db.SaveChangesAsync(); return(guest); }
public async Task <ActionResult> AddBooking(AddBookingVM vm) { if (vm == null) { return(RedirectToAction("Index")); } if (vm.NumOfDays == 0) { ModelState.AddModelError("", "Failed to add booking. CheckOut Date should be greater than CheckIn Date."); TempData["Message"] = "Failed to add booking. CheckOut Date should be greater than CheckIn Date."; if (vm.RoomReservationId == 0) { return(RedirectToAction("Index")); } return(RedirectToAction("RetrieveBooking", new { reservationId = vm.RoomReservationId, lastName = vm.LastName })); } var roomsAlreadyBooked = _db.ReservationDetails.Where(r => r.RoomId == vm.RoomId).ToList(); if (roomsAlreadyBooked != null && roomsAlreadyBooked.Count() > 0) { var validRooms = roomsAlreadyBooked.Where(r => (vm.CheckInDate < r.CheckInDate && vm.CheckOutDate <= r.CheckInDate) || (vm.CheckInDate > r.CheckOutDate)).ToList(); if (validRooms != null && validRooms.Count != roomsAlreadyBooked.Count()) { string msg = string.Format(@"Sorry, selected room already booked or there is an overlap with other bookings for the period {0: dd-MMM-yyyy} - {1: dd-MMM-yyyy}. Please revice your booking dates and try again.", vm.CheckInDate, vm.CheckOutDate); TempData["Message"] = msg; ModelState.AddModelError("", msg); if (vm.RoomReservationId == 0) { return(RedirectToAction("Index")); } return(RedirectToAction("RetrieveBooking", new { reservationId = vm.RoomReservationId, lastName = vm.LastName })); } } if (ModelState.IsValid) { if (vm.RoomReservationId == 0) // First time registration. No reservation yet. { var newGuest = await RegisterGuest(vm); // Register Guest. vm.GuestId = newGuest.Id; var reservation = await CreateReservationForTheRegisteredGuest(newGuest.Id); // Create Reservation. vm.RoomReservationId = reservation.Id; } await AddReservationDetails(vm); // Add room reservation details. await UpdateGuestDetails(vm.GuestId); // Update guest details if changed. PopulateTitlesDropDownList(vm.TitleId); int guestId = vm.GuestId; int roomReservationId = vm.RoomReservationId; var reservationsVM = await PopulateReservationsVM(guestId, roomReservationId); await UpdateReservationTotalAmount(roomReservationId, reservationsVM.TotalAmount); ViewBag.TotalAmount = reservationsVM.TotalAmount; TempData["Message"] = "Booking details saved successfully."; return(View("Index", reservationsVM)); } TempData["Message"] = string.Format("Failed to save the booking. Check booking details validity. Try again."); return(RedirectToAction("Index")); }