From 41e8e1f709a61d0e894015d4ac01ea25031c9964 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 13 Dec 2022 21:53:37 +0100 Subject: [PATCH] #725 - show balance of end of current month as first transaction --- .../transactions/TransactionService.java | 15 +++++++++-- .../budgetmaster/utils/Strings.java | 1 + .../resources/languages/base_de.properties | 1 + .../resources/languages/base_en.properties | 1 + .../unit/TransactionServiceDatabaseTest.java | 26 +++++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java index beefb2496..7cd4ee799 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java @@ -78,16 +78,27 @@ public class TransactionService implements Resettable { final List<Transaction> transactions = getTransactionsForMonthAndYearWithoutRest(account, month, year, filterConfiguration); - final LocalDate endDate = LocalDate.of(year, month, 1).minusMonths(1).with(lastDayOfMonth()); + final LocalDate endDateLastMonth = LocalDate.of(year, month, 1).minusMonths(1).with(lastDayOfMonth()); final Transaction transactionBalanceLastMonth = new Transaction(); transactionBalanceLastMonth.setCategory(categoryService.findByType(CategoryType.REST)); transactionBalanceLastMonth.setName(Localization.getString(Strings.TRANSACTION_BALANCE_LAST_MONTH)); transactionBalanceLastMonth.setDate(LocalDate.of(year, month, 1)); - transactionBalanceLastMonth.setAmount(getRest(account, endDate)); + transactionBalanceLastMonth.setAmount(getRest(account, endDateLastMonth)); transactionBalanceLastMonth.setTags(new ArrayList<>()); transactions.add(transactionBalanceLastMonth); + final LocalDate endDateCurrentMonth = LocalDate.of(year, month, 1).with(lastDayOfMonth()); + + final Transaction transactionBalanceCurrentMonth = new Transaction(); + transactionBalanceCurrentMonth.setCategory(categoryService.findByType(CategoryType.REST)); + transactionBalanceCurrentMonth.setName(Localization.getString(Strings.TRANSACTION_BALANCE_CURRENT_MONTH)); + transactionBalanceCurrentMonth.setDate(endDateCurrentMonth); + transactionBalanceCurrentMonth.setAmount(getRest(account, endDateCurrentMonth)); + transactionBalanceCurrentMonth.setTags(new ArrayList<>()); + // always add as first transaction + transactions.add(0, transactionBalanceCurrentMonth); + return transactions; } diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java index a5f1e79ac..565fa16fe 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java @@ -14,6 +14,7 @@ public class Strings public static final String TITLE_CATEGORY_BUDGETS = "title.category.budgets"; public static final String TEMPLATE_GROUP_DEFAULT = "template.group.default"; public static final String TRANSACTION_BALANCE_LAST_MONTH = "transaction.balance.last.month"; + public static final String TRANSACTION_BALANCE_CURRENT_MONTH = "transaction.balance.current.month"; //ACCOUNT public static final String ACCOUNT_DEFAULT_NAME = "account.default.name"; diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties index 9e1da8f13..5239fc6ec 100644 --- a/BudgetMasterServer/src/main/resources/languages/base_de.properties +++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties @@ -85,6 +85,7 @@ transaction.warning.name.keyword.button.cancel=Abbrechen transaction.warning.name.keyword.button.edit=Schlüsselwörter editieren template.group.default=Ungruppiert transaction.balance.last.month=Saldo letzter Monat +transaction.balance.current.month=Saldo Monatsende # WEEK DAYS monday=Montag diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties index d31ceccca..f86c0a251 100644 --- a/BudgetMasterServer/src/main/resources/languages/base_en.properties +++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties @@ -86,6 +86,7 @@ transaction.warning.name.keyword.button.cancel=Cancel transaction.warning.name.keyword.button.edit=Edit keywords template.group.default=Not grouped transaction.balance.last.month=Last month balance +transaction.balance.current.month=Balance at end of month # WEEK DAYS monday=Monday diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java index dc05ab00d..232bc0be9 100644 --- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java +++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java @@ -210,4 +210,30 @@ class TransactionServiceDatabaseTest .isEqualTo(LocalDate.of(2021, 6, 30)); } } + + @Test + void test_getTransactionsForMonthAndYear_includeAccountBalances() + { + FilterConfiguration filterConfiguration = new FilterConfiguration(true, true, true, true, true, null, null, ""); + + List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(accountRepository.findByName("Default Account"), 6, 2021, true, filterConfiguration); + + Transaction transactionBalanceLastMonth = new Transaction(); + transactionBalanceLastMonth.setName("Last month balance"); + transactionBalanceLastMonth.setAmount(998300); + transactionBalanceLastMonth.setDate(LocalDate.of(2021, 6, 1)); + transactionBalanceLastMonth.setCategory(categoryService.findByType(CategoryType.REST)); + transactionBalanceLastMonth.setTags(List.of()); + + Transaction transactionBalanceCurrentMonth = new Transaction(); + transactionBalanceCurrentMonth.setName("Balance at end of month"); + transactionBalanceCurrentMonth.setAmount(998200); + transactionBalanceCurrentMonth.setDate(LocalDate.of(2021, 6, 30)); + transactionBalanceCurrentMonth.setCategory(categoryService.findByType(CategoryType.REST)); + transactionBalanceCurrentMonth.setTags(List.of()); + + assertThat(transactions) + .hasSize(3) + .containsExactly(transactionBalanceCurrentMonth, transactionLastDayOfJune, transactionBalanceLastMonth); + } } -- GitLab