From fc702adfcd84b8d49d96e01493317a2f9001811a Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Thu, 2 Apr 2026 19:28:18 +0100 Subject: [PATCH] WIP --- BudgetApp.Data/Entities/RecurrenceType.cs | 3 ++- BudgetApp.Data/Entities/Salary.cs | 9 ++++---- .../Repositories/SalaryRepository.cs | 9 ++++---- .../Repositories/TransactionRepository.cs | 11 +++++----- BudgetApp/BudgetApp.csproj | 6 ++++++ BudgetApp/Components/Pages/Home.razor | 1 + BudgetApp/Components/Pages/Home.razor.cs | 13 ++++++++---- BudgetApp/Components/Pages/Salary.razor | 2 ++ BudgetApp/Components/Pages/Transactions.razor | 17 +++++++++++---- .../Components/Pages/Transactions.razor.cs | 20 ++++++++++++++++++ BudgetApp/budgetapp.db-shm | Bin 32768 -> 32768 bytes BudgetApp/budgetapp.db-wal | Bin 387312 -> 461472 bytes BudgetApp/budgetapp.db.db | Bin 0 -> 217088 bytes 13 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 BudgetApp/budgetapp.db.db diff --git a/BudgetApp.Data/Entities/RecurrenceType.cs b/BudgetApp.Data/Entities/RecurrenceType.cs index 45a7990..b2ae989 100644 --- a/BudgetApp.Data/Entities/RecurrenceType.cs +++ b/BudgetApp.Data/Entities/RecurrenceType.cs @@ -6,5 +6,6 @@ public enum RecurrenceType Daily, Weekly, Monthly, - Yearly + Yearly, + FourWeekly } \ No newline at end of file diff --git a/BudgetApp.Data/Entities/Salary.cs b/BudgetApp.Data/Entities/Salary.cs index bb8fca9..7c8e76e 100644 --- a/BudgetApp.Data/Entities/Salary.cs +++ b/BudgetApp.Data/Entities/Salary.cs @@ -27,10 +27,11 @@ public class Salary public string GetPaydaySummary() => RecurrenceType switch { - RecurrenceType.Weekly => $"Every week on {StartDate:dddd}", - RecurrenceType.Monthly => $"Monthly on the {GetOrdinal(StartDate.Day)}", - RecurrenceType.Yearly => $"Annually on {StartDate:MMMM d}", - _ => RecurrenceType.ToString() + RecurrenceType.Weekly => $"Every week on {StartDate:dddd}", + RecurrenceType.FourWeekly => $"Every 4 weeks on {StartDate:dddd}", + RecurrenceType.Monthly => $"Monthly on the {GetOrdinal(StartDate.Day)}", + RecurrenceType.Yearly => $"Annually on {StartDate:MMMM d}", + _ => RecurrenceType.ToString() }; private static string GetOrdinal(int day) => day switch diff --git a/BudgetApp.Data/Repositories/SalaryRepository.cs b/BudgetApp.Data/Repositories/SalaryRepository.cs index eb81fb7..fb4ad33 100644 --- a/BudgetApp.Data/Repositories/SalaryRepository.cs +++ b/BudgetApp.Data/Repositories/SalaryRepository.cs @@ -129,9 +129,10 @@ public class SalaryRepository(ApplicationDbContext db) : ISalaryRepository private static DateTime GetNextDate(DateTime from, Salary salary) => salary.RecurrenceType switch { - RecurrenceType.Weekly => from.AddDays(7), - RecurrenceType.Monthly => from.AddMonths(1), - RecurrenceType.Yearly => from.AddYears(1), - _ => from.AddMonths(1) + RecurrenceType.Weekly => from.AddDays(7), + RecurrenceType.FourWeekly => from.AddDays(28), + RecurrenceType.Monthly => from.AddMonths(1), + RecurrenceType.Yearly => from.AddYears(1), + _ => from.AddMonths(1) }; } diff --git a/BudgetApp.Data/Repositories/TransactionRepository.cs b/BudgetApp.Data/Repositories/TransactionRepository.cs index 01677dc..f653de3 100644 --- a/BudgetApp.Data/Repositories/TransactionRepository.cs +++ b/BudgetApp.Data/Repositories/TransactionRepository.cs @@ -278,10 +278,11 @@ public class TransactionRepository(ApplicationDbContext db) : ITransactionReposi internal static DateTime GetNextOccurrence(DateTime current, RecurrenceType recurrence) => recurrence switch { - RecurrenceType.Daily => current.AddDays(1), - RecurrenceType.Weekly => current.AddDays(7), - RecurrenceType.Monthly => current.AddMonths(1), - RecurrenceType.Yearly => current.AddYears(1), - _ => DateTime.MaxValue + RecurrenceType.Daily => current.AddDays(1), + RecurrenceType.Weekly => current.AddDays(7), + RecurrenceType.FourWeekly => current.AddDays(28), + RecurrenceType.Monthly => current.AddMonths(1), + RecurrenceType.Yearly => current.AddYears(1), + _ => DateTime.MaxValue }; } diff --git a/BudgetApp/BudgetApp.csproj b/BudgetApp/BudgetApp.csproj index c3894b4..850f5c7 100644 --- a/BudgetApp/BudgetApp.csproj +++ b/BudgetApp/BudgetApp.csproj @@ -24,4 +24,10 @@ + + + PreserveNewest + + + diff --git a/BudgetApp/Components/Pages/Home.razor b/BudgetApp/Components/Pages/Home.razor index 14074b3..44b9a6d 100644 --- a/BudgetApp/Components/Pages/Home.razor +++ b/BudgetApp/Components/Pages/Home.razor @@ -110,6 +110,7 @@ else + diff --git a/BudgetApp/Components/Pages/Home.razor.cs b/BudgetApp/Components/Pages/Home.razor.cs index d1cf668..811bb27 100644 --- a/BudgetApp/Components/Pages/Home.razor.cs +++ b/BudgetApp/Components/Pages/Home.razor.cs @@ -287,9 +287,14 @@ public partial class Home private static string GetRecurrenceLabel(Transaction t) { - if (t.RecurrenceType != RecurrenceType.None) - return t.RecurrenceType.ToString(); - return t.ParentTransaction?.RecurrenceType.ToString() ?? "Recurring"; + var type = t.RecurrenceType != RecurrenceType.None + ? t.RecurrenceType + : (t.ParentTransaction?.RecurrenceType ?? RecurrenceType.None); + return type switch + { + RecurrenceType.FourWeekly => "4 Weekly", + _ => type.ToString() + }; } private void ComputeProjectedBalances() @@ -342,7 +347,7 @@ public partial class Home if (_nextPayday is null) return; var txnsToPayday = await TransactionService.GetTransactionsInRangeAsync( - _userId, DateTime.Today.AddDays(1), _nextPayday.Value); + _userId, DateTime.Today.AddDays(1), _nextPayday.Value.AddDays(-1)); foreach (var account in _data.Accounts) { diff --git a/BudgetApp/Components/Pages/Salary.razor b/BudgetApp/Components/Pages/Salary.razor index d19cef7..85a9116 100644 --- a/BudgetApp/Components/Pages/Salary.razor +++ b/BudgetApp/Components/Pages/Salary.razor @@ -51,6 +51,7 @@ + @@ -192,6 +193,7 @@ else + diff --git a/BudgetApp/Components/Pages/Transactions.razor b/BudgetApp/Components/Pages/Transactions.razor index 45b4d8a..81bdc4b 100644 --- a/BudgetApp/Components/Pages/Transactions.razor +++ b/BudgetApp/Components/Pages/Transactions.razor @@ -80,6 +80,7 @@ + @@ -178,8 +179,15 @@ else - @foreach (var t in PagedTransactions) + @foreach (var group in GroupedPagedTransactions) { + + + @group.Key.ToString("dddd, d MMMM") + + + @foreach (var t in OrderGroupByIncomeFirst(group)) + { @if (t.SalaryId is null) @@ -221,11 +229,11 @@ else @if (t.RecurrenceType != RecurrenceType.None) { - 🔁 @t.RecurrenceType + 🔁 @GetRecurrenceLabel(t.RecurrenceType) } else if (t.ParentTransactionId is not null) { - 🔁 @(t.ParentTransaction?.RecurrenceType.ToString() ?? "Recurring") + 🔁 @GetRecurrenceLabel(t.ParentTransaction?.RecurrenceType ?? RecurrenceType.None) } else { @@ -236,7 +244,8 @@ else @(t.Type == TransactionType.Income ? "+" : "-")@t.Account.FormatAmount(t.Amount) - } + } + } diff --git a/BudgetApp/Components/Pages/Transactions.razor.cs b/BudgetApp/Components/Pages/Transactions.razor.cs index 4b240c8..4e56ed1 100644 --- a/BudgetApp/Components/Pages/Transactions.razor.cs +++ b/BudgetApp/Components/Pages/Transactions.razor.cs @@ -26,6 +26,20 @@ public partial class Transactions .Take(_pageSize) .ToList(); + private IEnumerable> GroupedPagedTransactions + { + get + { + var groups = PagedTransactions.GroupBy(t => t.Date.Date); + return _sortColumn == "date" && _sortAscending + ? groups.OrderBy(g => g.Key) + : groups.OrderByDescending(g => g.Key); + } + } + + private static IEnumerable OrderGroupByIncomeFirst(IGrouping group) => + group.OrderByDescending(t => t.Type == TransactionType.Income).ThenBy(t => t.Description); + private string _sortColumn = "date"; private bool _sortAscending = true; @@ -305,6 +319,12 @@ public partial class Transactions _bulkDeleteCount = 0; } + private static string GetRecurrenceLabel(RecurrenceType type) => type switch + { + RecurrenceType.FourWeekly => "4 Weekly", + _ => type.ToString() + }; + private async Task TogglePaid(Transaction t) { if (_userId is null) return; diff --git a/BudgetApp/budgetapp.db-shm b/BudgetApp/budgetapp.db-shm index b1ccf5b1155b61bc8a5765828260fafb6b41d8da..7306cb17f841bd34a50741bccfa2279b6a8f8bf7 100644 GIT binary patch delta 269 zcmZo@U}|V!s+V}A%K!pQK+MR%AW#6LHG%lJV%4Vr^REX@m_vT-pJ?d7-w~=hg<)4N zsp^47fdR@+_18xb}$0GbAviGh{GiGGsAiGvqMjGUPGjGZX+7_=>aJGq^GYGb92zXBj6S qi05ET1~R`gP2QKp!I%POZr+p1#>|)sWWN@iysnCaF%8J{WCZ|6txjYB delta 220 zcmZo@U}|V!s+V}A%K!pQK+MR%AP@(nHG%l60IB;>^k0EdQ03;+NC diff --git a/BudgetApp/budgetapp.db-wal b/BudgetApp/budgetapp.db-wal index 36c7307a288b5d74fcc262cc1819ea2673442987..4760394a43e9f17c3dabeefebbeded8b07181224 100644 GIT binary patch delta 829 zcmexxQGCHvnT8g|7N!>F7M3lnA6`t3xG2EU#eC**Ps`eU8!evliK|CM0gzAktg{*Z2ge=_gd%oaZc4 zK-vtyL$zrFwY>{xwUYaFyVQ1WL-%Pe{!KvpmND@E;(x)vhJP9VBmO)5*S2r_&N82$ zQDu4DNVP#;eQtBKsTgR09pi*M#}0rjx+&tl+z%D;er7SO_b{MY#}Y(K}& zIvHePk~k~Goh(3&@)fL>a%=`Od1?|eJ9v55F|hMSGVovG_u*~fjpUc(`@nZ-`!jLY z*}RM*(-T}+#HPPluVL6q;!m>NJBU`x`j!`;BUxiItIwo|&nMxv}N+hlW7oE^GOunpI^&(hb6K z80vcJEIN~24rrkmXKG?)YM^IgVPaus3US?L#RV#{8&Bq-x(-uabK18})1R5GMK#V6 m=k~%X;ss;ctF9Asa delta 19 bcmZ25Rp!G*@rD-07N!>F7M3lnA6@_eQ^yEZ diff --git a/BudgetApp/budgetapp.db.db b/BudgetApp/budgetapp.db.db new file mode 100644 index 0000000000000000000000000000000000000000..bcde87d0c67f4342f7f4116b47cf1b15a56e8712 GIT binary patch literal 217088 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 literal 0 HcmV?d00001