From 5a356c2f4cb197caa5e440d70bc8cb26219812a3 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 4 May 2021 23:08:45 +0200 Subject: [PATCH] at least one account must be set to visibility full access (otherwise no default account exists) --- .../accounts/AccountController.java | 21 ++++++++++++++++++- .../resources/languages/base_de.properties | 1 + .../resources/languages/base_en.properties | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java index 5993a5953..cbf56eda9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.WebRequest; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Optional; @@ -119,7 +120,7 @@ public class AccountController extends BaseController } @PostMapping(value = "/newAccount") - public String post(HttpServletRequest request, Model model, + public String post(HttpServletRequest request, WebRequest webRequest, Model model, @ModelAttribute("NewAccount") Account account, BindingResult bindingResult) { @@ -133,6 +134,15 @@ public class AccountController extends BaseController bindingResult.addError(new FieldError("NewAccount", "name", "", false, new String[]{"warning.duplicate.account.name"}, null, null)); } + List<Account> activatedAccounts = accountService.getRepository().findAllByTypeAndAccountStateOrderByNameAsc(AccountType.CUSTOM, AccountState.FULL_ACCESS); + boolean newAccountStateWouldLeaveNoFullAccessAccounts = activatedAccounts.size() == 1 && account.getAccountState() != AccountState.FULL_ACCESS; + if(!isNewAccount && newAccountStateWouldLeaveNoFullAccessAccounts) + { + final String warningMessage = Localization.getString("warning.account.edit.state", Localization.getString(AccountState.FULL_ACCESS.getLocalizationKey())); + WebRequestUtils.putNotification(webRequest, new Notification(warningMessage, NotificationType.WARNING)); + bindingResult.addError(new FieldError("NewAccount", "state", account.getAccountState(), false, new String[]{"warning.account.edit.state"}, null, null)); + } + if(bindingResult.hasErrors()) { model.addAttribute("error", bindingResult); @@ -171,6 +181,15 @@ public class AccountController extends BaseController existingAccount.setType(AccountType.CUSTOM); existingAccount.setAccountState(newAccount.getAccountState()); accountService.getRepository().save(existingAccount); + + if(existingAccount.isDefault() && existingAccount.getAccountState() != AccountState.FULL_ACCESS) + { + // set any activated account as new default account + accountService.unsetDefaultForAllAccounts(); + List<Account> activatedAccounts = accountService.getRepository().findAllByTypeAndAccountStateOrderByNameAsc(AccountType.CUSTOM, AccountState.FULL_ACCESS); + Account newDefaultAccount = activatedAccounts.get(0); + accountService.setAsDefaultAccount(newDefaultAccount.getID()); + } } } } \ No newline at end of file diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 3b2c34d52..71e0619c0 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -151,6 +151,7 @@ delete.image.error.not.existing=Fehler: Bild mit ID {0} existiert nicht # WARNING warning.text.account.delete=Das Konto "{0}" kann nicht gelöscht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu löschen musst du zuerst ein neues anlegen. +warning.account.edit.state=Für mindestens ein Konto muss die Sichtbarkeit auf "{0}" gesetzt sein!s 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. diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index 46c0e0a29..c377750e4 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -151,6 +151,7 @@ delete.image.error.not.existing=Error: Image with ID {0} does not exist # WARNING warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one. +warning.account.edit.state=At least one account must have set it's visibility to "{0}"! 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. -- GitLab