public IActionResult StoreNumbers(string storeId, string cryptoCode) { var store = HttpContext.GetStoreData(); if (store == null) { return(NotFound()); } var vm = new StoreNumbersViewModel { Store = store, CryptoCode = cryptoCode }; return(ViewComponent("StoreNumbers", new { vm })); }
public async Task <IViewComponentResult> InvokeAsync(StoreNumbersViewModel vm) { if (vm.Store == null) { throw new ArgumentNullException(nameof(vm.Store)); } if (vm.CryptoCode == null) { throw new ArgumentNullException(nameof(vm.CryptoCode)); } vm.WalletId = new WalletId(vm.Store.Id, vm.CryptoCode); if (vm.InitialRendering) { return(View(vm)); } await using var ctx = _dbContextFactory.CreateContext(); var payoutsCount = await ctx.Payouts .Where(p => p.PullPaymentData.StoreId == vm.Store.Id && !p.PullPaymentData.Archived && p.State == PayoutState.AwaitingApproval) .CountAsync(); var refundsCount = await ctx.Invoices .Where(i => i.StoreData.Id == vm.Store.Id && !i.Archived && i.CurrentRefundId != null) .CountAsync(); var derivation = vm.Store.GetDerivationSchemeSettings(_networkProvider, vm.CryptoCode); int?transactionsCount = null; if (derivation != null && _nbxConnectionFactory.Available) { await using var conn = await _nbxConnectionFactory.OpenConnection(); var wid = NBXplorer.Client.DBUtils.nbxv1_get_wallet_id(derivation.Network.CryptoCode, derivation.AccountDerivation.ToString()); var afterDate = DateTimeOffset.UtcNow - TimeSpan.FromDays(vm.TransactionDays); var count = await conn.ExecuteScalarAsync <long>("SELECT COUNT(*) FROM wallets_history WHERE code=@code AND wallet_id=@wid AND seen_at > @afterDate", new { code = derivation.Network.CryptoCode, wid, afterDate }); transactionsCount = (int)count; } vm.PayoutsPending = payoutsCount; vm.Transactions = transactionsCount; vm.RefundsIssued = refundsCount; return(View(vm)); }
public async Task <IViewComponentResult> InvokeAsync(StoreData store) { await using var ctx = _dbContextFactory.CreateContext(); var payoutsCount = await ctx.Payouts .Where(p => p.PullPaymentData.StoreId == store.Id && !p.PullPaymentData.Archived && p.State == PayoutState.AwaitingApproval) .CountAsync(); var refundsCount = await ctx.Invoices .Where(i => i.StoreData.Id == store.Id && !i.Archived && i.CurrentRefundId != null) .CountAsync(); var walletId = new WalletId(store.Id, CryptoCode); var derivation = store.GetDerivationSchemeSettings(_networkProvider, walletId.CryptoCode); var transactionsCount = 0; if (derivation != null) { var network = derivation.Network; var wallet = _walletProvider.GetWallet(network); var allTransactions = await wallet.FetchTransactions(derivation.AccountDerivation); var afterDate = DateTimeOffset.UtcNow - TimeSpan.FromDays(TransactionDays); transactionsCount = allTransactions.UnconfirmedTransactions.Transactions .Concat(allTransactions.ConfirmedTransactions.Transactions) .Count(t => t.Timestamp > afterDate); } var vm = new StoreNumbersViewModel { Store = store, WalletId = walletId, PayoutsPending = payoutsCount, Transactions = transactionsCount, TransactionDays = TransactionDays, RefundsIssued = refundsCount }; return(View(vm)); }