diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java index 5993a5953a693ca8dc38a552731915438ac1c551..cbf56eda965c67dba87eef40a6bd259fa668ded1 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 3b2c34d52e0890d40cd2184e108ff7b31e48ab77..71e0619c0cd375a68cf3d37d98eef46221d6e766 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 46c0e0a29c7aac410be17680d8335e1cd0d2fb24..c377750e49161bef5e0afbbeb30b80b2a80553e7 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.