public ActionResult Confirm(string couponcode) { var tmpdata = TempData.Peek(TempDataStringResuorce.NewBookingData) as TempDataConfirmBooking; try { if (tmpdata == null) { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Result = false, Message = "Invalid Booking Request, please try again !", State = ActionResultNotification.MessageState.Error }; return(RedirectToAction("New")); } var model = tmpdata.Model; if (model == null) { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Result = false, Message = "Invalid Booking Request, please try again !", State = ActionResultNotification.MessageState.Error }; return(RedirectToAction("New")); } var offerid = tmpdata.OfferId; IEnumerable <RestaurantMenuItem> restaurantMenuItems; IEnumerable <RestaurantTable> restaurantTables; SeasonalOffer restaurantOffer; Coupon restaurantcoupon; BookingHelper.ValidateModel(this, model, offerid, couponcode, out restaurantMenuItems, out restaurantTables, out restaurantOffer, out restaurantcoupon); if (restaurantOffer != null && restaurantcoupon != null) { ModelState.AddModelError("addstatus", "Two or more offers cannot be clubbed together, either use a Coupon Code or a Seasonal Offer"); } if (ModelState.IsValid) { var booking = new RestaurantBooking { BookedFor = model.BookedFor.ToUniversalTime(), BookedOn = DateTime.UtcNow, BookedTill = model.BookedFor.ToUniversalTime().AddMinutes(AppConfigHelper.BookingSlotMinutes * model.BookedSlots), BookedTables = restaurantTables.ToList(), PrefferedMenuItems = restaurantMenuItems.ToList(), BookingCustomer = new AccountMembershipService().GetUser(((RestaurantUserIdentity)User.Identity).UserGuid, true) }; booking.Bills.Add(BookingHelper.GetBookingBill(restaurantMenuItems, restaurantTables, restaurantOffer, restaurantcoupon, model.BookedSlots)); //Status of the booking is automaticaly set by repository according to availability var bookingresult = Repository.Add(booking); if (bookingresult > 0) { TempData.Remove(TempDataStringResuorce.NewBookingData); } var message = bookingresult > 0 ? String.Format("The Booking of Booking ID:{0} was successful", bookingresult) : String.Format("The Booking was Unsuccessful! Please try again"); var result = new ActionResultNotification { Result = bookingresult > 0, Message = message, State = bookingresult > 0 ? ActionResultNotification.MessageState.Information : ActionResultNotification.MessageState.Error }; if (Request.IsAjaxRequest()) { return(Json(result)); } TempData[TempDataStringResuorce.ActionResultNotification] = result; return(RedirectToAction("Index")); } // If we got this far, something failed, redisplay form TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Message = ModelState.ContainsKey("addstatus") ? ModelState["addstatus"].Errors[0].ErrorMessage : "There was an Error in making you booking, please try again !", Result = false, State = ActionResultNotification.MessageState.Error }; return(View(model)); } catch (Exception e) { var result = new ActionResultNotification { Result = false, Message = e.Message, State = ActionResultNotification.MessageState.Error }; if (Request.IsAjaxRequest()) { return(Json(result)); } TempData[TempDataStringResuorce.ActionResultNotification] = result; if (tmpdata != null) { TempData[TempDataStringResuorce.NewBookingData] = new TempDataConfirmBooking { Model = tmpdata.Model, OfferId = tmpdata.OfferId } } ; return(Confirm()); } }
public ActionResult Confirm() { //Only peek for data as it will be required in post action var tmpdata = TempData.Peek(TempDataStringResuorce.NewBookingData) as TempDataConfirmBooking; try { if (tmpdata == null) { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Result = false, Message = "Invalid Booking Attempt, please try again !", State = ActionResultNotification.MessageState.Error }; return(RedirectToAction("New")); } var model = tmpdata.Model; if (model == null) { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Result = false, Message = "Invalid Booking Request, please try again !", State = ActionResultNotification.MessageState.Error }; return(RedirectToAction("New")); } var offerid = tmpdata.OfferId; IEnumerable <RestaurantMenuItem> restaurantMenuItems; IEnumerable <RestaurantTable> restaurantTables; SeasonalOffer restaurantOffer; BookingHelper.ValidateModel(this, model, offerid, out restaurantMenuItems, out restaurantTables, out restaurantOffer); if (ModelState.IsValid) { return(View(new ConfirmBookingViewModel { Bill = BookingHelper.GetBookingBill(restaurantMenuItems, restaurantTables, restaurantOffer, null, model.BookedSlots), BookedFor = model.BookedFor, BookedSlots = model.BookedSlots, BookedTables = model.BookedTables, MenuItems = restaurantMenuItems.ToList(), Offer = restaurantOffer, PrefferedMenuItems = model.PrefferedMenuItems, Tables = restaurantTables.ToList() })); } TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Message = ModelState.ContainsKey("addstatus") ? ModelState["addstatus"].Errors[0].ErrorMessage : "There was an Error in making you booking, please try again !", Result = false, State = ActionResultNotification.MessageState.Error }; return(RedirectToAction("New")); } catch (Exception e) { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Result = false, Message = e.Message, State = ActionResultNotification.MessageState.Warning }; return(RedirectToAction("Index", "Home")); } }