public ActionResult AddLocalReservation(LocalReservationViewModel lrVM) { if (!Request.IsAuthenticated) { return(RedirectToAction("Login", "Account")); } else { if (ModelState.IsValid) { int totalDays = (lrVM.DateTo - lrVM.DateFrom).Days; bool isCorrectDate = true; var now = DateTime.Now; var checkDate = new DateTime(now.Year, now.Month, now.Day); if (checkDate > lrVM.DateFrom) { isCorrectDate = false; } if (totalDays <= 30 && isCorrectDate) { //send a request on the main server and await for the response DTOHelper dtoHlp = new DTOHelper(); MyRemoteServices.AgentEndpointPortClient aepc = new MyRemoteServices.AgentEndpointPortClient(); MyRemoteServices.addLocalReservationRequest alrRequest = dtoHlp.GetLocalReservationRequest(lrVM); MyRemoteServices.addLocalReservationResponse alrResponse = aepc.addLocalReservation(alrRequest); if (alrResponse.responseWrapper.success) { //save localy using (var ctx = new ApplicationDbContext()) { BookingUnit myUnit = ctx.BookingUnits.FirstOrDefault(x => x.Id == lrVM.BookingUnitId); TotalPriceCalculator totPrCalc = new TotalPriceCalculator(); double totalPrice = totPrCalc.CalculateTotalPrice(lrVM.BookingUnitId, lrVM.DateFrom, lrVM.DateTo); Reservation localReservation = new Reservation { ReservationStatus = ReservationStatus.WAITING, SubjectName = lrVM.ReserveeFirstName, SubjectSurname = lrVM.ReserveeLastName, From = lrVM.DateFrom, To = lrVM.DateTo, BookingUnit = myUnit, TotalPrice = totalPrice, MainServerId = (long)alrResponse.responseWrapper.responseBody }; //add the new item ctx.Reservations.Add(localReservation); //save changes ctx.SaveChanges(); } } else { //some error happened, retry TempData["error"] = alrResponse.responseWrapper.message; return(RedirectToAction("LocalReservation", "Agent", new { bookingUnitId = lrVM.BookingUnitId })); } TempData["success"] = "Successfully added a local reservation of the unit: " + lrVM.BookingUnitName; return(RedirectToAction("AgentPage", "Agent")); } else { //max days limit or begin date exception TempData["error"] = "The begin date must be today's date or greater. The maximum number of days for one reservation is 30"; return(RedirectToAction("LocalReservation", "Agent", new { bookingUnitId = lrVM.BookingUnitId })); } } else { //invalid VM exception TempData["error"] = "Some form atributes are incorrect"; return(RedirectToAction("LocalReservation", "Agent", new { bookingUnitId = lrVM.BookingUnitId })); } } }