public ActionResult Index([Bind(Prefix = "Form")] BookingModel form) { Predicate <BookingOrderModel> match = null; Predicate <BookingOrder> predicate2 = null; Action <BookingOrderModel> action2 = null; if (form == null) { throw new ArgumentNullException("form"); } if (form.Action == "remove") { base.ModelState.Clear(); if ((form.RemoveOrderId != null) && (form.Orders != null)) { if (match == null) { match = m => ((m != null) && (m.BookingOrder != null)) && (m.BookingOrder.orderid == form.RemoveOrderId); } form.Orders.RemoveAll(match); using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session)) { if ((cart != null) && (cart.Orders != null)) { if (predicate2 == null) { predicate2 = m => m.orderid == form.RemoveOrderId; } cart.Orders.RemoveAll(predicate2); } } } } BookingContext model = new BookingContext(); model.PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, 2025654180); BookingClaim bookingClaim = new BookingClaim { orders = new List <BookingOrder>() }; if (form.Orders != null) { if (action2 == null) { action2 = delegate(BookingOrderModel m) { if ((m != null) && (m.BookingOrder != null)) { bookingClaim.orders.Add(m.BookingOrder); } }; } form.Orders.ForEach(action2); } BookingCartParam bookingCartParam = new BookingCartParam { ln = UrlLanguage.CurrentLanguage, pa = form.PartnerAlias, psid = form.PartnerSessionID }; GuestService.Controllers.Api.BookingController controller = new GuestService.Controllers.Api.BookingController(); bookingClaim.note = form.BookingNote; Customer customer = new Customer { name = form.CustomerName, mobile = form.CustomerMobile, email = form.CustomerEmail, address = form.CustomerAddress }; bookingClaim.customer = customer; if (form.PromoCodes != null) { bookingClaim.PromoCodes = new List <string>(form.PromoCodes); } if (form.Action == null) { if (!form.RulesAccepted) { base.ModelState.AddModelError("Form.RulesAccepted", BookingStrings.RulesAccepted); } if (base.ModelState.IsValid) { CompleteOperation operation = CompleteOperation.CreateFromSession(base.Session); operation.Start(); model.BookingOperationId = operation.OperationId; int?userId = WebSecurity.IsAuthenticated ? new int?(WebSecurity.CurrentUserId) : null; ThreadPool.QueueUserWorkItem(delegate(object o) { try { BookingCartResult result = new BookingCartResult { Form = form, Reservation = controller.Book(bookingCartParam, bookingClaim) }; if (((result.Reservation != null) && result.Reservation.claimId.HasValue) && userId.HasValue) { GuestProvider.LinkGuestClaim(userId.Value, result.Reservation.claimId.Value); } string data = JsonConvert.SerializeObject(result); CompleteOperationProvider.SetResult(operation.OperationId, "bookingresult", data); } catch (Exception exception) { Tracing.WebTrace.TraceEvent(TraceEventType.Error, 2, exception.ToString()); CompleteOperationProvider.SetResult(operation.OperationId, null, null); } }, null); model.Form = form; return(base.View("_BookingProcessing", model)); } } else if (form.Action == "promo") { base.ModelState.Clear(); List <string> list = (form.PromoCodes == null) ? new List <string>() : new List <string>(form.PromoCodes); if (!string.IsNullOrWhiteSpace(form.PromoCode)) { Action <BookingOrderModel> action = null; BookingClaim checkPromoClaim = new BookingClaim { orders = new List <BookingOrder>() }; if (form.Orders != null) { if (action == null) { action = delegate(BookingOrderModel m) { if ((m != null) && (m.BookingOrder != null)) { checkPromoClaim.orders.Add(m.BookingOrder); } }; } form.Orders.ForEach(action); } checkPromoClaim.PromoCodes = (form.PromoCodes != null) ? new List <string>(form.PromoCodes) : new List <string>(); CheckPromoCodeResult result = controller.CheckPromoCode(bookingCartParam, bookingClaim, form.PromoCode); if ((result != null) && (result.errorcode == 0)) { list.Add(form.PromoCode); bookingClaim.PromoCodes = list; form.PromoCodes = list.ToArray(); } else { base.ModelState.AddModelError("PromoCodeError", (result != null) ? result.errormessage : "невозможно применить промо код"); } } } ReservationState reservation = controller.Calculate(bookingCartParam, bookingClaim); model.Prepare(form, reservation); return(base.View(model)); }
public JsonResult BookingStatus(string id) { if (string.IsNullOrEmpty(id)) { throw new System.ArgumentNullException("id"); } int?reservation = null; string[] errors = null; CompleteOperation operation = CompleteOperation.CreateFromSession(base.Session); bool isFinished = operation.IsFinished(); if (isFinished) { if (operation.OperationResultType == "bookingresult" && operation.OperationResultData != null) { BookingCartResult bookingResult = JsonConvert.DeserializeObject <BookingCartResult>(operation.OperationResultData); if (bookingResult != null && bookingResult.Reservation != null) { reservation = bookingResult.Reservation.claimId; if (reservation.HasValue) { base.TempData[string.Format("order.{0}.name", reservation.Value)] = ((bookingResult.Form != null) ? bookingResult.Form.CustomerName : ""); try { //разрешаем пользователю смотреть путевку в экране оплат if (System.Web.HttpContext.Current.Session["allowed_claims"] == null) { System.Web.HttpContext.Current.Session["allowed_claims"] = new List <int>(); } // System.Web.HttpContext.Current var list = (System.Web.HttpContext.Current.Session["allowed_claims"] as List <int>); list.Add(bookingResult.Reservation.claimId.Value); System.Web.HttpContext.Current.Session["allowed_claims"] = list; } catch (Exception ex) { Console.WriteLine(ex.Message); } operation.Clear(); using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session)) { cart.Clear(); } } else { if (bookingResult.Reservation.errors != null) { errors = ( from m in bookingResult.Reservation.errors select(!string.IsNullOrEmpty(m.usermessage)) ? m.usermessage : m.message).ToArray <string>(); } } } } } return(base.Json(new { isfinished = isFinished, reservation = reservation, errors = errors }, JsonRequestBehavior.AllowGet)); }
public ActionResult Index(BookingCartWebParam param) { Action <BookingOrder> action = null; Action <BookingOrder> action2 = null; BookingContext context = new BookingContext(); CompleteOperation operation = CompleteOperation.CreateFromSession(base.Session); if (operation.IsProgress) { context.BookingOperationId = operation.OperationId; return(base.View("_BookingProcessing", context)); } if (operation.HasResult) { BookingCartResult result = JsonConvert.DeserializeObject <BookingCartResult>(operation.OperationResultData); if (result != null) { context.Prepare(result.Form, result.Reservation); } operation.Clear(); return(base.View(context)); } using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session)) { if (param != null) { if (param.PartnerSessionID != null) { cart.PartnerSessionID = param.PartnerSessionID; } if (param.PartnerAlias != null) { cart.PartnerAlias = param.PartnerAlias; } } context.Form = new BookingModel(); context.Form.PartnerAlias = cart.PartnerAlias; context.Form.PartnerSessionID = cart.PartnerSessionID; if (WebSecurity.IsAuthenticated) { context.Form.CustomerEmail = WebSecurity.CurrentUserName; } if (cart.Orders != null) { if (action == null) { action = delegate(BookingOrder o) { if (((o != null) && (o.excursion != null)) && (o.excursion.contact != null)) { if (!((context.Form.CustomerName != null) || string.IsNullOrEmpty(o.excursion.contact.name))) { context.Form.CustomerName = o.excursion.contact.name; } if (!((context.Form.CustomerMobile != null) || string.IsNullOrEmpty(o.excursion.contact.mobile))) { context.Form.CustomerMobile = o.excursion.contact.mobile; } } }; } cart.Orders.ForEach(action); } if (cart.Orders != null) { if (action2 == null) { action2 = delegate(BookingOrder m) { BookingOrderModel item = new BookingOrderModel { BookingOrder = m }; context.Form.Orders.Add(item); }; } cart.Orders.ForEach(action2); } } context.Form.Action = "calculate"; context.PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, 2025654180); return(this.Index(context.Form)); }