diff --git a/MoneyMap/Pages/Receipts.cshtml b/MoneyMap/Pages/Receipts.cshtml index 130f632..57dbfa4 100644 --- a/MoneyMap/Pages/Receipts.cshtml +++ b/MoneyMap/Pages/Receipts.cshtml @@ -142,7 +142,14 @@
All Receipts - - @Model.Receipts.Count total + @if (Model.TotalCount > 0) + { + - Showing @((Model.PageNumber - 1) * Model.PageSize + 1)-@(Math.Min(Model.PageNumber * Model.PageSize, Model.TotalCount)) of @Model.TotalCount + } + else + { + - 0 total + }
@if (Model.Receipts.Any(r => !r.TransactionId.HasValue && (!string.IsNullOrWhiteSpace(r.Merchant) || r.ReceiptDate.HasValue || r.Total.HasValue))) { @@ -273,6 +280,47 @@
} + @if (Model.TotalPages > 1) + { + + } diff --git a/MoneyMap/Pages/Receipts.cshtml.cs b/MoneyMap/Pages/Receipts.cshtml.cs index e022ef0..af7de9e 100644 --- a/MoneyMap/Pages/Receipts.cshtml.cs +++ b/MoneyMap/Pages/Receipts.cshtml.cs @@ -24,6 +24,15 @@ namespace MoneyMap.Pages public List Receipts { get; set; } = new(); public Dictionary> ReceiptTransactionMatches { get; set; } = new(); + [BindProperty(SupportsGet = true)] + public int PageNumber { get; set; } = 1; + + [BindProperty(SupportsGet = true)] + public int PageSize { get; set; } = 25; + + public int TotalCount { get; set; } + public int TotalPages => (int)Math.Ceiling((double)TotalCount / PageSize); + [BindProperty] public IFormFile? UploadFile { get; set; } @@ -238,9 +247,19 @@ namespace MoneyMap.Pages private async Task LoadReceiptsAsync() { - var receipts = await _db.Receipts + if (PageNumber < 1) PageNumber = 1; + if (PageSize < 1) PageSize = 25; + if (PageSize > 100) PageSize = 100; + + var query = _db.Receipts .Include(r => r.Transaction) - .OrderByDescending(r => r.UploadedAtUtc) + .OrderByDescending(r => r.UploadedAtUtc); + + TotalCount = await query.CountAsync(); + + var receipts = await query + .Skip((PageNumber - 1) * PageSize) + .Take(PageSize) .ToListAsync(); Receipts = receipts.Select(r => new ReceiptRow