public async Task <IActionResult> NewPullPayment([ModelBinder(typeof(WalletIdModelBinder))]
                                                         WalletId walletId, NewPullPaymentModel model)
        {
            if (GetDerivationSchemeSettings(walletId) == null)
            {
                return(NotFound());
            }

            var storeMethods         = CurrentStore.GetSupportedPaymentMethods(NetworkProvider).Select(method => method.PaymentId).ToList();
            var paymentMethodOptions = _payoutHandlers.GetSupportedPaymentMethods(storeMethods);

            model.PaymentMethodItems =
                paymentMethodOptions.Select(id => new SelectListItem(id.ToPrettyString(), id.ToString(), true));
            model.Name ??= string.Empty;
            model.Currency = model.Currency.ToUpperInvariant().Trim();
            if (!model.PaymentMethods.Any())
            {
                ModelState.AddModelError(nameof(model.PaymentMethods), "You need at least one payment method");
            }
            if (_currencyTable.GetCurrencyData(model.Currency, false) is null)
            {
                ModelState.AddModelError(nameof(model.Currency), "Invalid currency");
            }
            if (model.Amount <= 0.0m)
            {
                ModelState.AddModelError(nameof(model.Amount), "The amount should be more than zero");
            }
            if (model.Name.Length > 50)
            {
                ModelState.AddModelError(nameof(model.Name), "The name should be maximum 50 characters.");
            }

            var selectedPaymentMethodIds = model.PaymentMethods.Select(PaymentMethodId.Parse).ToArray();

            if (!selectedPaymentMethodIds.All(id => selectedPaymentMethodIds.Contains(id)))
            {
                ModelState.AddModelError(nameof(model.Name), "Not all payment methods are supported");
            }
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            await _pullPaymentService.CreatePullPayment(new HostedServices.CreatePullPayment()
            {
                Name             = model.Name,
                Amount           = model.Amount,
                Currency         = model.Currency,
                StoreId          = walletId.StoreId,
                PaymentMethodIds = selectedPaymentMethodIds,
                EmbeddedCSS      = model.EmbeddedCSS,
                CustomCSSLink    = model.CustomCSSLink
            });

            this.TempData.SetStatusMessageModel(new StatusMessageModel()
            {
                Message  = "Pull payment request created",
                Severity = StatusMessageModel.StatusSeverity.Success
            });
            return(RedirectToAction(nameof(PullPayments), new { walletId = walletId.ToString() }));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetBaseCurrencyRates(string baseCurrency, CancellationToken cancellationToken)
        {
            var supportedMethods = CurrentStore.GetSupportedPaymentMethods(_NetworkProvider);

            var currencyCodes = supportedMethods.Where(method => !string.IsNullOrEmpty(method.PaymentId.CryptoCode))
                                .Select(method => method.PaymentId.CryptoCode).Distinct();

            var currencypairs = BuildCurrencyPairs(currencyCodes, baseCurrency);

            var result = await GetRates2(currencypairs, null, cancellationToken);

            var rates = (result as JsonResult)?.Value as Rate[];

            if (rates == null)
            {
                return(result);
            }
            return(Json(new DataWrapper <Rate[]>(rates)));
        }
        public IActionResult NewPullPayment([ModelBinder(typeof(WalletIdModelBinder))]
                                            WalletId walletId)
        {
            if (GetDerivationSchemeSettings(walletId) == null)
            {
                return(NotFound());
            }
            var storeMethods         = CurrentStore.GetSupportedPaymentMethods(NetworkProvider).Select(method => method.PaymentId).ToList();
            var paymentMethodOptions = _payoutHandlers.GetSupportedPaymentMethods(storeMethods);

            return(View(new NewPullPaymentModel
            {
                Name = "",
                Currency = "BTC",
                CustomCSSLink = "",
                EmbeddedCSS = "",
                PaymentMethodItems = paymentMethodOptions.Select(id => new SelectListItem(id.ToPrettyString(), id.ToString(), true))
            }));
        }