Example #1
0
    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));
    }