From 7dc349afe3614786882118db0a18d6eb63b98fc2 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 29 Dec 2023 11:17:04 +0100
Subject: [PATCH] #760 - added new switch to transaction settings container

---
 .../containers/TransactionsSettingsContainer.java    | 10 ++++++++--
 .../src/main/resources/languages/base_de.properties  |  4 ++++
 .../src/main/resources/languages/base_en.properties  |  4 ++++
 .../settings/containers/settingsTransactions.ftl     |  5 +++++
 .../containers/TransactionSettingsContainerTest.java | 12 +++++++-----
 5 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java
index 7ce5b0cdc..e30d24383 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java
@@ -11,12 +11,13 @@ import java.util.List;
 public final class TransactionsSettingsContainer implements SettingsContainer
 {
 	private Boolean restActivated;
-
+	private Boolean orderTransactionNameSuggestionsAlphabetically;
 	private List<TransactionNameKeyword> keywords;
 
-	public TransactionsSettingsContainer(Boolean restActivated, List<TransactionNameKeyword> keywords)
+	public TransactionsSettingsContainer(Boolean restActivated, Boolean orderTransactionNameSuggestionsAlphabetically, List<TransactionNameKeyword> keywords)
 	{
 		this.restActivated = restActivated;
+		this.orderTransactionNameSuggestionsAlphabetically = orderTransactionNameSuggestionsAlphabetically;
 		this.keywords = keywords;
 	}
 
@@ -33,6 +34,10 @@ public final class TransactionsSettingsContainer implements SettingsContainer
 		{
 			restActivated = false;
 		}
+		if(orderTransactionNameSuggestionsAlphabetically == null)
+		{
+			orderTransactionNameSuggestionsAlphabetically = false;
+		}
 	}
 
 	@Override
@@ -59,6 +64,7 @@ public final class TransactionsSettingsContainer implements SettingsContainer
 		final Settings settings = settingsService.getSettings();
 
 		settings.setRestActivated(restActivated);
+		settings.setOrderTransactionNameSuggestionsAlphabetically(orderTransactionNameSuggestionsAlphabetically);
 
 		return settings;
 	}
diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties
index 4cce41ce6..3566699b8 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_de.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties
@@ -269,6 +269,10 @@ settings.rest=Saldos anzeigen
 settings.rest.deactivated=Aus
 settings.rest.activated=An
 settings.rest.description=Zeigt den Saldo des letzten Monats und des aktuellen Monatsendes in der Buchungsübersicht an
+settings.transactionNameSuggestionOrder=Sortierung der Namensvorschläge
+settings.transactionNameSuggestionOrder.deactivated=nach Nutzungshäufigkeit
+settings.transactionNameSuggestionOrder.activated=alphabetisch
+settings.transactionNameSuggestionOrder.description=Legt die Sortierung von Namensvorschlägen für Buchungen fest
 settings.darkTheme=Design
 settings.darkTheme.deactivated=Helles Design
 settings.darkTheme.activated=Dunkles Design
diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties
index 5698d6741..f99a50312 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_en.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties
@@ -269,6 +269,10 @@ settings.rest=Show balances
 settings.rest.deactivated=Off
 settings.rest.activated=On
 settings.rest.description=Show the balance of the last month and of the current month end in the transaction overview
+settings.transactionNameSuggestionOrder=Order name suggestions
+settings.transactionNameSuggestionOrder.deactivated=by frequency of use
+settings.transactionNameSuggestionOrder.activated=alphabetically
+settings.transactionNameSuggestionOrder.description=Defines how the transaction name suggestions are ordered.
 settings.darkTheme=Theme
 settings.darkTheme.deactivated=Light Theme
 settings.darkTheme.activated=Dark Theme
diff --git a/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl
index c5c9a173c..1707d6c72 100644
--- a/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl
@@ -13,16 +13,21 @@
                 <div class="table-container">
                     <div class="table-cell">
                         <div class="switch-cell-margin">${locale.getString("settings.rest")}</div>
+                        <div class="switch-cell-margin">${locale.getString("settings.transactionNameSuggestionOrder")}</div>
                     </div>
                     <div class="table-cell table-cell-spacer"></div>
                     <div class="table-cell">
                         <@settingsMacros.switch "rest" "restActivated" settings.isRestActivated()/>
+                        <@settingsMacros.switch "transactionNameSuggestionOrder" "orderTransactionNameSuggestionsAlphabetically" settings.getOrderTransactionNameSuggestionsAlphabetically()?? && settings.getOrderTransactionNameSuggestionsAlphabetically()/>
                     </div>
                     <div class="table-cell table-cell-spacer"></div>
                     <div class="table-cell">
                         <div class="switch-cell-margin">
                             <a class="btn btn-flat tooltipped text-default" data-position="bottom" data-tooltip="${locale.getString("settings.rest.description")}"><i class="material-icons">help_outline</i></a>
                         </div>
+                        <div class="switch-cell-margin">
+                            <a class="btn btn-flat tooltipped text-default" data-position="bottom" data-tooltip="${locale.getString("settings.transactionNameSuggestionOrder.description")}"><i class="material-icons">help_outline</i></a>
+                        </div>
                     </div>
                 </div>
             </div>
diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/TransactionSettingsContainerTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/TransactionSettingsContainerTest.java
index 48a4e73d4..5f9c7fc09 100644
--- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/TransactionSettingsContainerTest.java
+++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/unit/settings/containers/TransactionSettingsContainerTest.java
@@ -27,7 +27,7 @@ class TransactionSettingsContainerTest
 	@Test
 	void test_validate_valid()
 	{
-		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(true, List.of());
+		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(true, true, List.of());
 
 		final Errors errors = new BeanPropertyBindingResult(container, "container");
 		container.validate(errors);
@@ -39,12 +39,13 @@ class TransactionSettingsContainerTest
 	@Test
 	void test_fixBooleans()
 	{
-		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(null, List.of());
+		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(null, null, List.of());
 
 		container.fixBooleans();
 
 		assertThat(container)
-				.hasFieldOrPropertyWithValue("restActivated", false);
+				.hasFieldOrPropertyWithValue("restActivated", false)
+				.hasFieldOrPropertyWithValue("orderTransactionNameSuggestionsAlphabetically", false);
 	}
 
 	@Test
@@ -54,10 +55,11 @@ class TransactionSettingsContainerTest
 
 		Mockito.when(settingsService.getSettings()).thenReturn(defaultSettings);
 
-		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(false, List.of());
+		final TransactionsSettingsContainer container = new TransactionsSettingsContainer(false, false, List.of());
 		final Settings updatedSettings = container.updateSettings(settingsService);
 
 		assertThat(updatedSettings)
-				.hasFieldOrPropertyWithValue("restActivated", false);
+				.hasFieldOrPropertyWithValue("restActivated", false)
+				.hasFieldOrPropertyWithValue("orderTransactionNameSuggestionsAlphabetically", false);
 	}
 }
-- 
GitLab