public async Task <ActionResult> Create([Bind(Include = "Name,Street,City,PhoneNumber,CheckIn,CheckOut,ConfirmationFileUrl,Price")] Accommodation accommodation) { try { //check valid check-in and check-out if (!accommodation.IsCheckInBeforeCheckOut()) { ModelState.AddModelError("", "Please check the check-in and check-out dates. Check-out cannot be before check-in."); } else if (ModelState.IsValid) { int tripId = Int32.Parse(accommodation.ConfirmationFileUrl); //temporarily storing tripid in confirmationurl Trip trip = await db.Trips.FindAsync(tripId); if (trip.TripOwner != User.Identity.GetUserId()) { return(View("CustomisedError", new HandleErrorInfo( new UnauthorizedAccessException("Oops, this trip doesn't seem to be yours, you cannot add an accommodation to it."), "Trip", "Index"))); } //if before trip start date -> error if (accommodation.CheckIn < trip.StartDate) { ModelState.AddModelError("", "The check-in date is before the trip start date (" + trip.StartDate.ToShortDateString() + "). Please correct."); } else { try { AssignAccommodationToStep(accommodation, trip, true); accommodation.ConfirmationFileUrl = null; db.Accommodations.Add(accommodation); //increase trip budget trip.TotalCost += accommodation.Price; await db.SaveChangesAsync(); //return update view in case user wants to attach confirmation file return(RedirectToAction("Edit", new { id = accommodation.AccommodationId })); } catch (ArgumentException ex) { //give feedback to user about which step to check ViewBag.ErrorMessage = ex.Message; } } } } catch (RetryLimitExceededException) { ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, contact the system administrator."); } ViewBag.TripId = accommodation.ConfirmationFileUrl; ViewBag.CheckIn = String.Format("{0:dd-MM-yyyy hh:mm tt}", accommodation.CheckIn); ViewBag.CheckOut = String.Format("{0:dd-MM-yyyy hh:mm tt}", accommodation.CheckOut); return(View(accommodation)); }
public void CanCheckInBeforeCheckingOut() { Accommodation acc = new Accommodation() { CheckIn = new DateTime(2018, 2, 3, 14, 0, 0), CheckOut = new DateTime(2018, 2, 4, 9, 0, 0) }; Assert.AreEqual(true, acc.IsCheckInBeforeCheckOut()); }
public void CannotCheckOutBeforeCheckingIn() { Accommodation acc1 = new Accommodation() { CheckIn = new DateTime(2018, 2, 3, 9, 0, 0), CheckOut = new DateTime(2018, 2, 3, 14, 0, 0) }; Accommodation acc2 = new Accommodation() { CheckIn = new DateTime(2018, 2, 4, 14, 0, 0), CheckOut = new DateTime(2018, 2, 3, 9, 0, 0) }; Assert.AreEqual(false, acc1.IsCheckInBeforeCheckOut()); Assert.AreEqual(false, acc2.IsCheckInBeforeCheckOut()); }