public ActionResult Purchase(CheckoutViewModel viewModel, IPaymentOption paymentOption) { if (CartIsNullOrEmpty()) { return(Redirect(Url.ContentUrl(ContentReference.StartPage))); } // Since the payment property is marked with an exclude binding attribute in the CheckoutViewModel // it needs to be manually re-added again. viewModel.Payment = paymentOption; if (User.Identity.IsAuthenticated) { _checkoutService.CheckoutAddressHandling.UpdateAuthenticatedUserAddresses(viewModel); var validation = _checkoutService.AuthenticatedPurchaseValidation; if (!validation.ValidateModel(ModelState, viewModel) || !validation.ValidateOrderOperation(ModelState, _cartService.ValidateCart(Cart)) || !validation.ValidateOrderOperation(ModelState, _cartService.RequestInventory(Cart))) { return(View(viewModel)); } } else { _checkoutService.CheckoutAddressHandling.UpdateAnonymousUserAddresses(viewModel); var validation = _checkoutService.AnonymousPurchaseValidation; if (!validation.ValidateModel(ModelState, viewModel) || !validation.ValidateOrderOperation(ModelState, _cartService.ValidateCart(Cart)) || !validation.ValidateOrderOperation(ModelState, _cartService.RequestInventory(Cart))) { return(View(viewModel)); } } if (!paymentOption.ValidateData()) { return(View(viewModel)); } _checkoutService.UpdateShippingAddresses(Cart, viewModel); _checkoutService.CreateAndAddPaymentToCart(Cart, viewModel); var purchaseOrder = _checkoutService.PlaceOrder(Cart, ModelState, viewModel); if (purchaseOrder == null) { return(View(viewModel)); } var confirmationSentSuccessfully = _checkoutService.SendConfirmation(viewModel, purchaseOrder); _recommendationService.SendOrderTracking(HttpContext, purchaseOrder); return(Redirect(_checkoutService.BuildRedirectionUrl(viewModel, purchaseOrder, confirmationSentSuccessfully))); }
public ActionResult PlaceOrder() { var payment = Cart.GetFirstForm().Payments.FirstOrDefault(); var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var startPage = contentRepository.Get <StartPage>(ContentReference.StartPage); var checkoutPage = contentRepository.Get <CheckoutPage>(startPage.CheckoutPage); var viewModel = _checkoutViewModelFactory.CreateEmptyCheckoutViewModel(checkoutPage); if (!ConfigureCreditCardProperties(payment)) { return(View(viewModel)); } AddDecisionManagerInformation(payment); string redirectUrl; var purchaseOrder = _checkoutService.PlaceOrder(Cart, ModelState, out redirectUrl); if (!string.IsNullOrEmpty(redirectUrl)) { return(Redirect(redirectUrl)); } if (purchaseOrder == null) { return(View(viewModel)); } // commented order confirmation email sending because SMTP server is not configured var confirmationSentSuccessfully = true; //_checkoutService.SendConfirmation(viewModel, purchaseOrder); var billingEmail = Cart.GetFirstShipment().ShippingAddress.Email; return(Redirect(_checkoutService.BuildRedirectionUrl(purchaseOrder, billingEmail, confirmationSentSuccessfully))); }
public ActionResult Purchase(CheckoutViewModel viewModel, IPaymentMethod paymentMethod) { if (CartIsNullOrEmpty()) { return(Redirect(Url.ContentUrl(ContentReference.StartPage))); } viewModel.Payment = paymentMethod; viewModel.IsAuthenticated = User.Identity.IsAuthenticated; _checkoutService.CheckoutAddressHandling.UpdateUserAddresses(viewModel); if (!_checkoutService.ValidateOrder(ModelState, viewModel, _cartService.ValidateCart(Cart))) { return(View(viewModel)); } if (!paymentMethod.ValidateData()) { return(View(viewModel)); } _checkoutService.UpdateShippingAddresses(Cart, viewModel); _checkoutService.CreateAndAddPaymentToCart(Cart, viewModel); var purchaseOrder = _checkoutService.PlaceOrder(Cart, ModelState, viewModel); if (!string.IsNullOrEmpty(viewModel.RedirectUrl)) { return(Redirect(viewModel.RedirectUrl)); } if (purchaseOrder == null) { return(View(viewModel)); } var result = _klarnaPaymentsService.Complete(purchaseOrder); if (result.IsRedirect) { return(Redirect(result.RedirectUrl)); } var confirmationSentSuccessfully = _checkoutService.SendConfirmation(viewModel, purchaseOrder); return(Redirect(_checkoutService.BuildRedirectionUrl(viewModel, purchaseOrder, confirmationSentSuccessfully))); }
public ActionResult Purchase(CheckoutViewModel viewModel, IPaymentOption paymentOption) { if (CartIsNullOrEmpty()) { return(Redirect(Url.ContentUrl(ContentReference.StartPage))); } // Since the payment property is marked with an exclude binding attribute in the CheckoutViewModel // it needs to be manually re-added again. viewModel.Payment = paymentOption; viewModel.IsAuthenticated = User.Identity.IsAuthenticated; _checkoutService.CheckoutAddressHandling.UpdateUserAddresses(viewModel); if (!_checkoutService.ValidateOrder(ModelState, viewModel, _cartService.ValidateCart(Cart))) { return(View(viewModel)); } if (!paymentOption.ValidateData()) { return(View(viewModel)); } _checkoutService.UpdateShippingAddresses(Cart, viewModel); _checkoutService.CreateAndAddPaymentToCart(Cart, viewModel); var purchaseOrder = _checkoutService.PlaceOrder(Cart, ModelState, viewModel); if (!string.IsNullOrEmpty(viewModel.RedirectUrl)) { return(Redirect(viewModel.RedirectUrl)); } if (purchaseOrder == null) { return(View(viewModel)); } var confirmationSentSuccessfully = _checkoutService.SendConfirmation(viewModel, purchaseOrder); if (Request.IsAjaxRequest()) { return(Json(new { Url = _checkoutService.BuildRedirectionUrl(viewModel, purchaseOrder, confirmationSentSuccessfully) })); } return(Redirect(_checkoutService.BuildRedirectionUrl(viewModel, purchaseOrder, confirmationSentSuccessfully))); }
public async Task <ActionResult> Purchase(CheckoutViewModel viewModel, IPaymentMethod paymentOption) { if (CartIsNullOrEmpty()) { return(Redirect(Url.ContentUrl(ContentReference.StartPage))); } // Since the payment property is marked with an exclude binding attribute in the CheckoutViewModel // it needs to be manually re-added again. //viewModel.Payments = paymentOption; if (User.Identity.IsAuthenticated) { _checkoutService.CheckoutAddressHandling.UpdateAuthenticatedUserAddresses(viewModel); var validation = _checkoutService.AuthenticatedPurchaseValidation; if (!validation.ValidateModel(ModelState, viewModel) || !validation.ValidateOrderOperation(ModelState, _cartService.ValidateCart(CartWithValidationIssues.Cart)) || !validation.ValidateOrderOperation(ModelState, _cartService.RequestInventory(CartWithValidationIssues.Cart))) { return(View(viewModel)); } } else { _checkoutService.CheckoutAddressHandling.UpdateAnonymousUserAddresses(viewModel); var validation = _checkoutService.AnonymousPurchaseValidation; if (!validation.ValidateModel(ModelState, viewModel) || !validation.ValidateOrderOperation(ModelState, _cartService.ValidateCart(CartWithValidationIssues.Cart)) || !validation.ValidateOrderOperation(ModelState, _cartService.RequestInventory(CartWithValidationIssues.Cart))) { return(View(viewModel)); } } if (!paymentOption.ValidateData()) { return(View(viewModel)); } _checkoutService.UpdateShippingAddresses(CartWithValidationIssues.Cart, viewModel); _checkoutService.CreateAndAddPaymentToCart(CartWithValidationIssues.Cart, viewModel); var purchaseOrder = _checkoutService.PlaceOrder(CartWithValidationIssues.Cart, ModelState, viewModel); if (purchaseOrder == null) { return(View(viewModel)); } if (Request.IsAuthenticated) { var contact = _customerContext.GetCurrentContact().Contact; var organization = contact.ContactOrganization; if (organization != null) { purchaseOrder.Properties[Constant.Customer.CustomerFullName] = contact.FullName; purchaseOrder.Properties[Constant.Customer.CustomerEmailAddress] = contact.Email; purchaseOrder.Properties[Constant.Customer.CurrentCustomerOrganization] = organization.Name; _orderRepository.Save(purchaseOrder); } } var confirmationSentSuccessfully = await _checkoutService.SendConfirmation(viewModel, purchaseOrder); //await _checkoutService.CreateOrUpdateBoughtProductsProfileStore(CartWithValidationIssues.Cart); //await _checkoutService.CreateBoughtProductsSegments(CartWithValidationIssues.Cart); await _recommendationService.TrackOrder(HttpContext, purchaseOrder); return(Redirect(_checkoutService.BuildRedirectionUrl(viewModel, purchaseOrder, confirmationSentSuccessfully))); }