public ActionResult CreatePayment(PaymentPickerViewModel createPaymentViewModel)
        {
            _transactionLibrary.CreatePayment(createPaymentViewModel.SelectedPaymentMethodId, -1m, false, true);
            _transactionLibrary.ExecuteBasketPipeline();

            return(Redirect("/preview"));
        }
        public ActionResult Rendering()
        {
            var paymentPickerViewModel = new PaymentPickerViewModel();

            var basket          = _transactionLibrary.GetBasket();
            var shippingCountry = basket.GetShippingAddress(Constants.DefaultShipmentAddressName).Country;

            paymentPickerViewModel.ShippingCountry = shippingCountry.Name;

            var availablePaymentMethods = _transactionLibrary.GetPaymentMethods(shippingCountry);

            var existingPayment = basket.Payments.FirstOrDefault();

            paymentPickerViewModel.SelectedPaymentMethodId = existingPayment != null
                                ? existingPayment.PaymentMethod.PaymentMethodId
                                : -1;

            foreach (var availablePaymentMethod in availablePaymentMethods)
            {
                var     option       = new SelectListItem();
                decimal feePercent   = availablePaymentMethod.FeePercent;
                var     fee          = availablePaymentMethod.GetFeeForCurrency(basket.BillingCurrency);
                var     formattedFee = new Money((fee == null ? 0 : fee.Fee), basket.BillingCurrency.ISOCode);

                option.Text = String.Format(" {0} ({1} + {2}%)", availablePaymentMethod.Name, formattedFee,
                                            feePercent.ToString("0.00"));
                option.Value    = availablePaymentMethod.PaymentMethodId.ToString();
                option.Selected = availablePaymentMethod.PaymentMethodId == paymentPickerViewModel.SelectedPaymentMethodId;

                paymentPickerViewModel.AvailablePaymentMethods.Add(option);
            }

            return(View(paymentPickerViewModel));
        }
        public ActionResult Rendering()
        {
            var paymentPickerViewModel = new PaymentPickerViewModel();


            var cart                = GetCart();
            var paymentOption       = GetPaymentOptions(cart.ShopName).FirstOrDefault();
            var paymentMethods      = GetPaymentMethods(paymentOption, cart);
            var paymentMethodPrices = GetPaymentMethodPrices(paymentMethods, cart);


            var payment = cart.Payment.FirstOrDefault();

            if (payment != null)
            {
                int paymentMethodId;
                if (int.TryParse(payment.PaymentMethodID, out paymentMethodId))
                {
                    paymentPickerViewModel.SelectedPaymentMethodId = paymentMethodId;
                }
            }

            foreach (var paymentMethod in paymentMethods)
            {
                var     option       = new SelectListItem();
                var     paymentPrice = paymentMethodPrices.First(x => x.MethodId == paymentMethod.ExternalId);
                decimal feePercent   = (decimal)paymentPrice.GetPropertyValue("FeePercent");
                var     fee          = paymentPrice.Amount;
                var     formattedFee = string.Format("{0} {1}", fee, paymentPrice.CurrencyCode);

                option.Text = String.Format(" {0} ({1} + {2}%)", paymentMethod.Name, formattedFee,
                                            feePercent.ToString("0.00"));
                option.Value    = paymentMethod.ExternalId;
                option.Selected = paymentMethod.ExternalId == paymentPickerViewModel.SelectedPaymentMethodId.ToString();

                paymentPickerViewModel.AvailablePaymentMethods.Add(option);
            }

            return(View(paymentPickerViewModel));
        }
        public virtual PaymentPickerViewModel GetViewModel()
        {
            var paymentPickerViewModel = new PaymentPickerViewModel();

            var basket          = _transactionLibraryInternal.GetBasket().PurchaseOrder;
            var shippingCountry = UCommerce.Api.TransactionLibrary.GetCountries().SingleOrDefault(x => x.Name == "Germany");

            paymentPickerViewModel.ShippingCountry = shippingCountry.Name;

            var availablePaymentMethods = _transactionLibraryInternal.GetPaymentMethods(shippingCountry);

            var existingPayment = basket.Payments.FirstOrDefault();

            paymentPickerViewModel.SelectedPaymentMethodId = existingPayment != null
                ? existingPayment.PaymentMethod.PaymentMethodId
                : -1;
            var priceGroup = SiteContext.Current.CatalogContext.CurrentPriceGroup;

            foreach (var availablePaymentMethod in availablePaymentMethods)
            {
                var     option       = new SelectListItem();
                decimal feePercent   = availablePaymentMethod.FeePercent;
                var     fee          = availablePaymentMethod.GetFeeForPriceGroup(priceGroup);
                var     formattedFee = new Money(fee == null ? 0 : fee.Fee, basket.BillingCurrency);

                option.Text = String.Format(" {0} ({1} + {2}%)", availablePaymentMethod.Name, formattedFee,
                                            feePercent.ToString("0.00"));
                option.Value    = availablePaymentMethod.PaymentMethodId.ToString();
                option.Selected = availablePaymentMethod.PaymentMethodId == paymentPickerViewModel.SelectedPaymentMethodId;

                paymentPickerViewModel.AvailablePaymentMethods.Add(option);
            }
            _transactionLibraryInternal.ExecuteBasketPipeline();

            paymentPickerViewModel.NextStepUrl     = GetNextStepUrl(nextStepId);
            paymentPickerViewModel.PreviousStepUrl = GetPreviousStepUrl(previousStepId);

            return(paymentPickerViewModel);
        }
        public void CreatePayment_And_ExecuteBasketPipeline_Are_Called()
        {
            // Arrange
            var viewModel = new PaymentPickerViewModel
            {
                SelectedPaymentMethodId = 0,
                ShippingCountry         = "Denmark"
            };

            viewModel.AvailablePaymentMethods.Add(new SelectListItem
            {
                Selected = true,
                Text     = "Text",
                Value    = "Paypal"
            });

            // Act
            var result = _controller.CreatePayment(viewModel);

            // Assert
            _transactionLibraryInternal.Received().CreatePayment(viewModel.SelectedPaymentMethodId, -1m, false, true);
            _transactionLibraryInternal.Received().ExecuteBasketPipeline();
        }
        public ActionResult CreatePayment(PaymentPickerViewModel createPaymentViewModel)
        {
            var    model = ResolveModel();
            string message;
            var    parameters = new System.Collections.Generic.Dictionary <string, object>();

            if (!model.CanProcessRequest(parameters, out message))
            {
                return(this.PartialView("_Warning", message));
            }

            var viewModel = model.GetViewModel();

            model.CreatePayment(createPaymentViewModel);

            if (viewModel.NextStepUrl?.Length == 0)
            {
                return(new EmptyResult());
            }
            else
            {
                return(Redirect(viewModel.NextStepUrl));
            }
        }
        public ActionResult CreatePayment(PaymentPickerViewModel createPaymentViewModel)
        {
            var cartService = new CartServiceProvider();
            var cart        = GetCart();

            // First remove all the existing payment info's associated with the cart.
            var removeRequest = new RemovePaymentInfoRequest(cart, cart.Payment.ToList());

            cartService.RemovePaymentInfo(removeRequest);

            var paymentList = new List <PaymentInfo>
            {
                new PaymentInfo()
                {
                    PaymentMethodID = createPaymentViewModel.SelectedPaymentMethodId.ToString(),
                }
            };

            var addRequest = new AddPaymentInfoRequest(cart, paymentList);

            cartService.AddPaymentInfo(addRequest);

            return(Redirect("/preview"));
        }
        public ActionResult CreatePayment(PaymentPickerViewModel createPaymentViewModel)
        {
            var    model = ResolveModel();
            string message;
            var    parameters = new System.Collections.Generic.Dictionary <string, object>();

            if (!model.CanProcessRequest(parameters, out message))
            {
                return(this.PartialView("_Warning", message));
            }

            var viewModel = model.GetViewModel();

            model.CreatePayment(createPaymentViewModel);

            if (ModelState.IsValid)
            {
                return(this.Json(new OperationStatusDTO()
                {
                    Status = "success"
                }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                var errorList = ModelState.ToDictionary(
                    kvp => kvp.Key,
                    kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
                    );

                var responseDTO = new OperationStatusDTO();
                responseDTO.Status = "failed";
                responseDTO.Data.Add("errors", errorList);

                return(this.Json(responseDTO, JsonRequestBehavior.AllowGet));
            }
        }
 public virtual void CreatePayment(PaymentPickerViewModel createPaymentViewModel)
 {
     _transactionLibraryInternal.CreatePayment(createPaymentViewModel.SelectedPaymentMethodId, -1m, false, true);
     _transactionLibraryInternal.ExecuteBasketPipeline();
 }
        public virtual PaymentPickerViewModel GetViewModel()
        {
            Ucommerce.EntitiesV2.PurchaseOrder purchaseOrder;
            var paymentPickerViewModel = new PaymentPickerViewModel();

            try
            {
                purchaseOrder = TransactionLibrary.GetBasket();
            }
            catch (Exception ex)
            {
                Log.Write(ex, ConfigurationPolicy.ErrorLog);
                return(null);
            }

            if (!purchaseOrder.OrderLines.Any())
            {
                return(null);
            }

            var shippingAddress =
                TransactionLibrary.GetShippingInformation(Ucommerce.Constants.DefaultShipmentAddressName);

            var shippingCountry = shippingAddress.Country;

            if (shippingCountry != null)
            {
                paymentPickerViewModel.ShippingCountry = shippingCountry.Name;

                var availablePaymentMethods = TransactionLibrary.GetPaymentMethods(shippingCountry);

                var existingPayment = purchaseOrder.Payments.FirstOrDefault();
                paymentPickerViewModel.SelectedPaymentMethodId = existingPayment != null
                                        ? existingPayment.PaymentMethod.PaymentMethodId
                                        : -1;
                var priceGroupRepository = ObjectFactory.Instance.Resolve <Ucommerce.EntitiesV2.IRepository <Ucommerce.EntitiesV2.PriceGroup> >();
                var priceGroup           = priceGroupRepository.SingleOrDefault(pg => pg.Guid == CatalogContext.CurrentPriceGroup.Guid);

                foreach (var availablePaymentMethod in availablePaymentMethods)
                {
                    var     option                 = new SelectListItem();
                    decimal feePercent             = availablePaymentMethod.FeePercent;
                    var     localizedPaymentMethod = availablePaymentMethod.PaymentMethodDescriptions.FirstOrDefault(s =>
                                                                                                                     s.CultureCode.Equals(CultureInfo.CurrentCulture.ToString()));
                    var fee          = availablePaymentMethod.GetFeeForPriceGroup(priceGroup);
                    var formattedFee = new Money(fee == null ? 0 : fee.Fee, purchaseOrder.BillingCurrency.ISOCode);

                    if (localizedPaymentMethod != null)
                    {
                        var displayName = localizedPaymentMethod.DisplayName;
                        if (string.IsNullOrWhiteSpace(displayName))
                        {
                            displayName = availablePaymentMethod.Name;
                        }

                        option.Text     = String.Format(" {0} ({1} + {2}%)", displayName, formattedFee, feePercent.ToString("0.00"));
                        option.Value    = availablePaymentMethod.PaymentMethodId.ToString();
                        option.Selected = availablePaymentMethod.PaymentMethodId == paymentPickerViewModel.SelectedPaymentMethodId;
                    }

                    paymentPickerViewModel.AvailablePaymentMethods.Add(option);
                }
            }

            TransactionLibrary.ExecuteBasketPipeline();

            paymentPickerViewModel.NextStepUrl     = GetNextStepUrl(nextStepId);
            paymentPickerViewModel.PreviousStepUrl = GetPreviousStepUrl(previousStepId);

            return(paymentPickerViewModel);
        }