diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java index 83d5fcc94d6dd9f3bb468664c75f97f5846191ec..f163725229d1d41643780c72117cdcaf04493ee9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/AccountController.java @@ -54,8 +54,16 @@ public class AccountController extends BaseController @RequestMapping("/accounts/{ID}/delete") public String deleteAccountAndReferringPayments(Model model, @PathVariable("ID") Integer ID) { - accountService.deleteAccount(ID); - return "redirect:/accounts"; + if(accountRepository.findAll().size() > 1) + { + accountService.deleteAccount(ID); + return "redirect:/accounts"; + } + + model.addAttribute("accounts", accountRepository.findAllByOrderByNameAsc()); + model.addAttribute("currentAccount", accountRepository.getOne(ID)); + model.addAttribute("accountNotDeletable", true); + return "accounts/accounts"; } @RequestMapping("/accounts/newAccount") diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java index a13900099da1dd48be5239827463431870087b5f..4aae54809df93a18b5dc2026c43f0d781384799f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java @@ -1,5 +1,8 @@ package de.deadlocker8.budgetmaster.services; +import de.deadlocker8.budgetmaster.authentication.User; +import de.deadlocker8.budgetmaster.authentication.UserRepository; +import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.repositories.AccountRepository; import de.deadlocker8.budgetmaster.repositories.PaymentRepository; @@ -19,12 +22,14 @@ public class AccountService implements Resetable private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private AccountRepository accountRepository; private PaymentRepository paymentRepository; + private UserRepository userRepository; @Autowired - public AccountService(AccountRepository accountRepository, PaymentRepository paymentRepository, LocalizationService localizationService) + public AccountService(AccountRepository accountRepository, PaymentRepository paymentRepository, UserRepository userRepository) { this.accountRepository = accountRepository; this.paymentRepository = paymentRepository; + this.userRepository = userRepository; createDefaults(); } @@ -38,6 +43,12 @@ public class AccountService implements Resetable { Account accountToDelete = accountRepository.findOne(ID); paymentRepository.delete(accountToDelete.getReferringPayments()); + + List<Account> accounts = accountRepository.findAll(); + accounts.remove(accountToDelete); + Account newSelectedAccount = accounts.get(0); + selectAccount(newSelectedAccount.getID()); + accountRepository.delete(ID); } @@ -71,5 +82,9 @@ public class AccountService implements Resetable Account accountToSelect = accountRepository.findOne(ID); accountToSelect.setSelected(true); accountRepository.save(accountToSelect); + + User user = userRepository.findByName("Default"); + user.setSelectedAccount(accountToSelect); + userRepository.save(user); } } diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 42103169ce0790c5f1d92a7f007dd36ba8704e2a..f3c80ec1f088cf7bcdac5488c4d83abbe3157ecc 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -197,6 +197,7 @@ info.title.shutdown=BudgetMaster beenden info.text.shutdown=M�chtest du BudgetMaster wirklich beenden?\nDies kann w�hrend der Ausf�hrung von Aufgaben zu unvorhersebaren Konsequenzen f�hren. # 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.enddate.before.startdate=Das Enddatum darf zeitlich nicht vor dem Startdatum liegen. warning.empty.width.in.pixels=Bitte gib eine Breite in Pixeln an. warning.integer.width.in.pixels=Nur ganzahlige Werte sind f�r das Feld Breite erlaubt. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 16f798a295035ff44c4dd7d91e1c4ecf0654db0f..a4bb2ec83b72c24256b931a340293ced94ad4693 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -197,6 +197,7 @@ info.title.shutdown=Shutdown BudgetMaster info.text.shutdown=Do you really want to shutdown BudgetMaster? This could lead to unforeseen consequences during running tasks. # 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.enddate.before.startdate=The end date can not be earlier than the start date. warning.empty.width.in.pixels=Please enter a width in pixels. warning.integer.width.in.pixels=Only integer values are allowed for the width field. diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js index bd3862a0bb91948ae89a2f73f6997947b8c0cc6a..e98a242745f593075900f57402b74f1a6b87a3bf 100644 --- a/src/main/resources/static/js/main.js +++ b/src/main/resources/static/js/main.js @@ -5,6 +5,8 @@ $( document ).ready(function() { $('.modal').modal(); + $('.modal').modal('open'); + $('select').material_select(); $("#selectAccount").on('change', function() diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl index c7562c089b9410a1f96c9573481fdaf88415183b..c04ba4ad77ea4732a90705483f18c4f511bfdffa 100644 --- a/src/main/resources/templates/accounts/accounts.ftl +++ b/src/main/resources/templates/accounts/accounts.ftl @@ -32,25 +32,37 @@ </table> </div> </div> + </main> - <#if currentAccount??> - <!-- confirm delete modal --> - <div id="modalConfirmDelete" class="modal"> - <div class="modal-content"> - <h4>${locale.getString("info.title.account.delete")}</h4> - <p>${locale.getString("info.text.account.delete", currentAccount.getName(), currentAccount.getReferringPayments()?size)}</p> - </div> - <div class="modal-footer"> - <a href="/accounts" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("cancel")}</a> - <a href="/accounts/${currentAccount.getID()}/delete" class="modal-action modal-close waves-effect waves-green btn-flat ">${locale.getString("info.button.account.delete")}</a> - </div> + <#if currentAccount??> + <!-- confirm delete modal --> + <div id="modalConfirmDelete" class="modal"> + <div class="modal-content"> + <h4>${locale.getString("info.title.account.delete")}</h4> + <p>${locale.getString("info.text.account.delete", currentAccount.getName(), currentAccount.getReferringPayments()?size)}</p> </div> - </#if> - </main> + <div class="modal-footer"> + <a href="/accounts" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("cancel")}</a> + <a href="/accounts/${currentAccount.getID()}/delete" class="modal-action modal-close waves-effect waves-green btn-flat ">${locale.getString("info.button.account.delete")}</a> + </div> + </div> + </#if> + + <#if accountNotDeletable??> + <!-- warning account not deletable --> + <div id="modalAccountNotDeletable" class="modal"> + <div class="modal-content"> + <h4>${locale.getString("info.title.account.delete")}</h4> + <p>${locale.getString("warning.text.account.delete", currentAccount.getName())}</p> + </div> + <div class="modal-footer"> + <a href="/accounts" class="modal-action modal-close waves-effect waves-green btn-flat ">${locale.getString("ok")}</a> + </div> + </div> + </#if> <!-- Scripts--> <#import "../scripts.ftl" as scripts> <@scripts.scripts/> - <script src="/js/categories.js"></script> </body> </html> \ No newline at end of file