From 2acb244a7b98a4bcfd05cc45dcf8b29f84cab439 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 21 Apr 2018 15:58:22 +0200
Subject: [PATCH] #297 - account names should be unique (show warning in ui)

---
 .../budgetmaster/controller/AccountController.java         | 7 +++++++
 .../java/de/deadlocker8/budgetmaster/entities/Account.java | 1 +
 src/main/resources/languages/_de.properties                | 1 +
 src/main/resources/languages/_en.properties                | 1 +
 4 files changed, 10 insertions(+)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java
index f6825fc36..0e464d9e4 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java
@@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -94,6 +96,11 @@ public class AccountController extends BaseController
 		AccountValidator accountValidator = new AccountValidator();
 		accountValidator.validate(account, bindingResult);
 
+		if(accountRepository.findByName(account.getName()) != null)
+		{
+			bindingResult.addError(new FieldError("NewAccount", "name", "", false, new String[]{"warning.duplicate.account.name"}, null, null));
+		}
+
 		if(bindingResult.hasErrors())
 		{
 			model.addAttribute("error", bindingResult);
diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
index 9a5cad67b..3a27e557b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
@@ -14,6 +14,7 @@ public class Account
 
 	@NotNull
 	@Size(min = 1)
+	@Column(unique=true)
 	private String name;
 
 	@OneToMany(mappedBy = "account", fetch = FetchType.LAZY)
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index 995eb3513..dee7828a2 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -204,6 +204,7 @@ warning.integer.height.in.pixels=Nur ganzahlige Werte sind f
 warning.empty.savepath.chart=W�hle einen Speicherort f�r das Diagramm aus.
 warning.empty.category.name=Bitte gib einen Namen ein.
 warning.empty.account.name=Bitte gib einen Namen ein.
+warning.duplicate.account.name=Es existiert bereits ein Konto mit diesem Namen.
 warning.empty.category.color=Die Kategoriefarbe darf nicht leer sein.
 warning.empty.payment.name=Das Feld f�r den Namen darf nicht leer sein.
 warning.name.character.limit.reached.45=Der Name darf maximal 45 Zeichen lang sein.
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index 5963c3101..b9ce9d14e 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -204,6 +204,7 @@ warning.integer.height.in.pixels=Only integer values are allowed for the height
 warning.empty.savepath.chart=Please select a location where you want to save the chart.
 warning.empty.category.name=Please insert a name.
 warning.empty.account.name=Please insert a name.
+warning.duplicate.account.name=An account with this name is already existing.
 warning.empty.category.color=The category color should not be empty.
 warning.empty.payment.name=The field for the name can not be empty.
 warning.name.character.limit.reached.45=The name must not exceed 45 characters in length.
-- 
GitLab