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 @@
}
+ @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