Add Paging to Pull Payments (#2997)

This commit is contained in:
Andrew Camilleri
2021-10-22 08:10:59 +02:00
committed by GitHub
parent 9b0d1a23dc
commit c46a69e1bd
4 changed files with 89 additions and 32 deletions

View File

@@ -131,31 +131,48 @@ namespace BTCPayServer.Controllers
}
[HttpGet("")]
public async Task<IActionResult> PullPayments(string storeId)
public async Task<IActionResult> PullPayments(string storeId, int skip = 0, int count = 50,
string sortOrder = "desc")
{
using var ctx = this._dbContextFactory.CreateContext();
await using var ctx = _dbContextFactory.CreateContext();
var now = DateTimeOffset.UtcNow;
var pps = await ctx.PullPayments.Where(p => p.StoreId == storeId && !p.Archived)
.OrderByDescending(p => p.StartDate)
.Select(o => new
{
PullPayment = o,
Awaiting = o.Payouts
.Where(p => p.State == PayoutState.AwaitingPayment || p.State == PayoutState.AwaitingApproval),
Completed = o.Payouts
.Where(p => p.State == PayoutState.Completed || p.State == PayoutState.InProgress)
})
.ToListAsync();
var ppsQuery = ctx.PullPayments
.Include(data => data.Payouts)
.Where(p => p.StoreId == storeId && !p.Archived);
var vm = new PullPaymentsModel();
foreach (var o in pps)
if (sortOrder != null)
{
var pp = o.PullPayment;
var totalCompleted = o.Completed.Where(o => o.IsInPeriod(pp, now))
switch (sortOrder)
{
case "desc":
ViewData["NextStartSortOrder"] = "asc";
ppsQuery = ppsQuery.OrderByDescending(p => p.StartDate);
break;
case "asc":
ppsQuery = ppsQuery.OrderBy(p => p.StartDate);
ViewData["NextStartSortOrder"] = "desc";
break;
}
}
var vm = this.ParseListQuery(new PullPaymentsModel()
{
Skip = skip, Count = count, Total = await ppsQuery.CountAsync()
});
var pps = (await ppsQuery
.Skip(vm.Skip)
.Take(vm.Count)
.ToListAsync()
);
foreach (var pp in pps)
{
var totalCompleted = pp.Payouts.Where(p => (p.State == PayoutState.Completed ||
p.State == PayoutState.InProgress) && p.IsInPeriod(pp, now))
.Select(o => o.GetBlob(_jsonSerializerSettings).Amount).Sum();
var totalAwaiting = o.Awaiting.Where(o => o.IsInPeriod(pp, now))
.Select(o => o.GetBlob(_jsonSerializerSettings).Amount).Sum();
var totalAwaiting = pp.Payouts.Where(p => (p.State == PayoutState.AwaitingPayment ||
p.State == PayoutState.AwaitingApproval) &&
p.IsInPeriod(pp, now)).Select(o => o.GetBlob(_jsonSerializerSettings).Amount).Sum();;
var ppBlob = pp.GetBlob();
var ni = _currencyNameTable.GetCurrencyData(ppBlob.Currency, true);
var nfi = _currencyNameTable.GetNumberFormatInfo(ppBlob.Currency, true);

View File

@@ -23,7 +23,9 @@ namespace BTCPayServer
else if (model is UsersViewModel)
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.UsersQuery));
else if (model is PayoutsModel)
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.UsersQuery));
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.PayoutsQuery));
else if (model is PullPaymentsModel)
prop = typeof(UserPrefsCookie).GetProperty(nameof(UserPrefsCookie.PullPaymentsQuery));
else
throw new Exception("Unsupported BasePagingViewModel for cookie user preferences saving");
@@ -82,6 +84,7 @@ namespace BTCPayServer
public ListQueryDataHolder PaymentRequestsQuery { get; set; }
public ListQueryDataHolder UsersQuery { get; set; }
public ListQueryDataHolder PayoutsQuery { get; set; }
public ListQueryDataHolder PullPaymentsQuery { get; set; }
}
class ListQueryDataHolder

View File

@@ -6,7 +6,7 @@ using Microsoft.AspNetCore.Mvc.Rendering;
namespace BTCPayServer.Models.WalletViewModels
{
public class PullPaymentsModel
public class PullPaymentsModel: BasePagingViewModel
{
public class PullPaymentModel
{

View File

@@ -5,6 +5,26 @@
Layout = "../Shared/_NavLayout.cshtml";
ViewData["NavPartialName"] = "../Stores/_Nav";
ViewData.SetActivePageAndTitle(StoreNavPages.PullPayments, "Pull payments", Context.GetStoreData().StoreName);
var nextStartDateSortOrder = (string)ViewData["NextStartSortOrder"];
String startDateSortOrder = null;
switch (nextStartDateSortOrder)
{
case "asc":
startDateSortOrder = "desc";
break;
case "desc":
startDateSortOrder = "asc";
break;
}
var sortIconClass = "fa-sort";
if (startDateSortOrder != null)
{
sortIconClass = $"fa-sort-alpha-{startDateSortOrder}";
}
var sortByDesc = "Sort by descending...";
var sortByAsc = "Sort by ascending...";
}
@section PageHeadContent {
@@ -56,7 +76,16 @@
<table class="table table-hover table-responsive-lg">
<thead class="thead-inverse">
<tr>
<th scope="col">Start</th>
<th scope="col">
<a
asp-action="PullPayments"
asp-route-sortOrder="@(nextStartDateSortOrder ?? "asc")"
class="text-nowrap"
title="@(nextStartDateSortOrder == "desc" ? sortByAsc : sortByDesc)">
Start
<span class="fa @(sortIconClass)"></span>
</a>
</th>
<th scope="col">Name</th>
<th scope="col">Refunded</th>
<th scope="col" class="text-end">Actions</th>
@@ -81,28 +110,36 @@
<td class="text-end">
<a asp-action="ViewPullPayment"
asp-controller="PullPayment"
asp-route-pullPaymentId="@pp.Id">View</a> -
asp-route-pullPaymentId="@pp.Id">
View
</a> -
<a class="pp-payout" asp-action="Payouts"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-pullPaymentId="@pp.Id">Payouts</a> -
asp-route-pullPaymentId="@pp.Id">
Payouts
</a> -
<a asp-action="ArchivePullPayment"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-pullPaymentId="@pp.Id"
data-bs-toggle="modal"
data-bs-target="#ConfirmModal"
data-description="Do you really want to archive the pull payment <strong>@pp.Name</strong>?">Archive</a>
data-description="Do you really want to archive the pull payment <strong>@pp.Name</strong>?">
Archive
</a>
</td>
</tr>
}
</tbody>
</table>
</div>
<vc:pager view-model="Model"/>
</div>
<partial name="_Confirm" model="@(new ConfirmModel("Archive pull payment", "Do you really want to archive the pull payment?", "Archive"))" />
<partial name="_Confirm" model="@(new ConfirmModel("Archive pull payment", "Do you really want to archive the pull payment?", "Archive"))"/>
@section PageFootContent {
<script>
@section PageFootContent {
<script>
var ppProgresses = document.getElementsByClassName("ppProgress");
for (var i = 0; i < ppProgresses.length; i++) {
var pp = ppProgresses[i];
@@ -111,7 +148,7 @@
pp.setAttribute("title", template.innerHTML);
}
</script>
}
}
}
else
{