diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java index c3b8626aeb19d2bfb1789efd52f1fdefaf2a45e0..040d3cc73bc769c2eb21097f38c2b4f41d64ec89 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/Account.java @@ -19,23 +19,26 @@ public class Account @NotNull @Size(min = 1) - @Column(unique=true) + @Column(unique = true) @Expose private String name; @OneToMany(mappedBy = "account", fetch = FetchType.LAZY) private List<Transaction> referringTransactions; - private boolean isSelected; + private Boolean isSelected = false; + private Boolean isDefault = false; @Expose private AccountType type; + public Account(String name, AccountType type) { this.name = name; this.type = type; this.isSelected = false; + this.isDefault = false; } public Account() @@ -72,16 +75,26 @@ public class Account this.referringTransactions = referringTransactions; } - public boolean isSelected() + public Boolean isSelected() { return isSelected; } - public void setSelected(boolean selected) + public void setSelected(Boolean selected) { isSelected = selected; } + public Boolean isDefault() + { + return isDefault; + } + + public void setDefault(Boolean aDefault) + { + isDefault = aDefault; + } + public AccountType getType() { return type; @@ -100,6 +113,7 @@ public class Account ", name='" + name + '\'' + ", referringTransactions=" + referringTransactions + ", isSelected=" + isSelected + + ", isDefault=" + isDefault + ", type=" + type + '}'; } @@ -111,6 +125,7 @@ public class Account if(o == null || getClass() != o.getClass()) return false; Account account = (Account) o; return isSelected == account.isSelected && + isDefault == account.isDefault && Objects.equals(ID, account.ID) && Objects.equals(name, account.name) && type == account.type; @@ -119,6 +134,6 @@ public class Account @Override public int hashCode() { - return Objects.hash(ID, name, isSelected, type); + return Objects.hash(ID, name, isSelected, isDefault, type); } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java index 8b610e239de0c6c6b7293cf193396ae7c42c772d..eb5cff58299a80d1a08841e4a8c1fc263d19cc9c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java @@ -21,7 +21,7 @@ public class AccountController extends BaseController @Autowired private AccountService accountService; - @RequestMapping(value = "/account/{ID}/select") + @RequestMapping(value = "/accounts/{ID}/select") public String selectAccount(HttpServletRequest request, @PathVariable("ID") Integer ID) { accountService.selectAccount(ID); @@ -34,6 +34,19 @@ public class AccountController extends BaseController return "redirect:" + referer; } + @RequestMapping(value = "/accounts/{ID}/setAsDefault") + public String setAsDefault(HttpServletRequest request, @PathVariable("ID") Integer ID) + { + accountService.setAsDefaultAccount(ID); + + String referer = request.getHeader("Referer"); + if(referer.contains("database/import")) + { + return "redirect:/settings"; + } + return "redirect:" + referer; + } + @RequestMapping("/accounts") public String accounts(HttpServletRequest request, Model model) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountRepository.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountRepository.java index e21d50c2b987b615977eb9641e3cc874257bb986..01e72be7fe06ec009e99085392ae239ba01e974a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountRepository.java @@ -14,4 +14,6 @@ public interface AccountRepository extends JpaRepository<Account, Integer> List<Account> findAllByType(AccountType accountType); Account findByIsSelected(boolean isSelected); + + Account findByIsDefault(boolean isDefault); } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java index 13502eb09cce6f68b8e9cb501c82dbeea2c553ed..28735f78c04ece6bfb0bb76b42d112f6cc248680 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java @@ -56,6 +56,11 @@ public class AccountService implements Resetable Account newSelectedAccount = accounts.get(0); selectAccount(newSelectedAccount.getID()); + if(accountToDelete.isDefault()) + { + setAsDefaultAccount(accountRepository.findAllByType(AccountType.CUSTOM).get(0).getID()); + } + accountRepository.delete(ID); } @@ -79,11 +84,19 @@ public class AccountService implements Resetable accountRepository.save(placeholder); LOGGER.debug("Created placeholder account"); - Account account = new Account(Localization.getString(Strings.ACCOUNT_DEFAULT_NAME), AccountType.CUSTOM); - account = accountRepository.save(account); + Account account = accountRepository.save(new Account(Localization.getString(Strings.ACCOUNT_DEFAULT_NAME), AccountType.CUSTOM)); selectAccount(account.getID()); + setAsDefaultAccount(account.getID()); LOGGER.debug("Created default account"); } + + Account defaultAccount = accountRepository.findByIsDefault(true); + if(defaultAccount == null) + { + Account account = accountRepository.findAllByType(AccountType.CUSTOM).get(0); + setAsDefaultAccount(account.getID()); + } + setAsDefaultAccount(accountRepository.findByIsDefault(true).getID()); } private void deselectAllAccounts() @@ -111,4 +124,23 @@ public class AccountService implements Resetable userRepository.save(user); } } + + public void setAsDefaultAccount(int ID) + { + unsetDefaultForAllAccounts(); + + Account accountToSelect = accountRepository.findOne(ID); + accountToSelect.setDefault(true); + accountRepository.save(accountToSelect); + } + + private void unsetDefaultForAllAccounts() + { + List<Account> accounts = accountRepository.findAll(); + for(Account currentAccount : accounts) + { + currentAccount.setDefault(false); + accountRepository.save(currentAccount); + } + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index dbb32dd306bd7d1bfeddc14d7d0b4e4ca58304da..616d08ca57e019ad2653fbe91e502ba29ef353c7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -210,14 +210,23 @@ public class HelpersService // select random account if no account is selected if(selectedAccount == null) { - Account account = accountRepository.findAllByType(AccountType.CUSTOM).get(0); - accountService.selectAccount(account.getID()); - selectedAccount = accountRepository.findByIsSelected(true); + selectedAccount = accountRepository.findByIsDefault(true); + accountService.selectAccount(selectedAccount.getID()); } return selectedAccount; } + public Account getCurrentAccountOrDefault() + { + Account selectedAccount = getCurrentAccount(); + if(selectedAccount.getType().equals(AccountType.ALL)) + { + return accountService.getRepository().findByIsDefault(true); + } + return selectedAccount; + } + public int getIncomeSumForTransactionList(List<Transaction> transactions) { int sum = 0; diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index a675f29dc61c578379b2cf2ec60e37d0b8ea5868..5513aa722c11f0a71d395ebb8de7c6fca2223c41 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -159,6 +159,7 @@ account.new.label.name=Name account.default.name=Standardkonto account.all=Alle Konten account.budget.asof=Stand +account.tooltip.default=Als Standardkonto festlegen transaction.new.label.name=Name transaction.new.label.amount=Betrag diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 8c5cf07857b0313ae50a21b614cdd9878db6d570..90d4661f93f1676895025c426bd34a1f83c1fcc0 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -160,6 +160,7 @@ account.new.label.name=Name account.default.name=Default Account account.all=All Accounts account.budget.asof=as of +account.tooltip.default=Set as default account transaction.new.label.name=Name transaction.new.label.amount=Amount diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js index ec21ce94d73106b61d74c63da116592b8e8f17ea..7b097f1eaf3660f5bb69bbdc222f00b693568f66 100644 --- a/src/main/resources/static/js/main.js +++ b/src/main/resources/static/js/main.js @@ -17,7 +17,7 @@ $( document ).ready(function() { $("#selectAccount").on('change', function() { var accountID = $(this).val(); - window.location = rootURL + "/account/" + accountID + "/select"; + window.location = rootURL + "/accounts/" + accountID + "/select"; }); if($("#login-password").length) diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl index c9fa22cad49f2b63b007802e38a7b9a4305902ca..ccf1a38638d6526af940e8b6c6c29df411045f73 100644 --- a/src/main/resources/templates/accounts/accounts.ftl +++ b/src/main/resources/templates/accounts/accounts.ftl @@ -23,6 +23,9 @@ <#list accounts as account> <#if (account.getType().name() == "CUSTOM")> <tr> + <td> + <a href="<@s.url '/accounts/${account.getID()?c}/setAsDefault'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${locale.getString("account.tooltip.default")}"><i class="material-icons left"><#if account.isDefault()>star<#else>star_border</#if></i></a> + </td> <td>${account.getName()}</td> <td> <a href="<@s.url '/accounts/${account.getID()?c}/edit'/>" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a> diff --git a/src/main/resources/templates/accounts/newAccount.ftl b/src/main/resources/templates/accounts/newAccount.ftl index 7b030943bef86d7cd493df51afe9930af1d91704..1cc507c12150f204f597a8099b7da4097b715cb7 100644 --- a/src/main/resources/templates/accounts/newAccount.ftl +++ b/src/main/resources/templates/accounts/newAccount.ftl @@ -21,6 +21,7 @@ <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <input type="hidden" name="ID" value="<#if account.getID()??>${account.getID()?c}</#if>"> <input type="hidden" name="isSelected" value="<#if account.isSelected()??>${account.isSelected()?c}</#if>"> + <input type="hidden" name="isDefault" value="<#if account.isDefault()??>${account.isDefault()?c}</#if>"> <#-- name --> <div class="row"> diff --git a/src/main/resources/templates/transactions/newTransactionMacros.ftl b/src/main/resources/templates/transactions/newTransactionMacros.ftl index e7b5dc6f19bc78b80c2748042c28f162903ba4d5..d4c668a018c0aaca11a8269a510c31bf7cc24f7e 100644 --- a/src/main/resources/templates/transactions/newTransactionMacros.ftl +++ b/src/main/resources/templates/transactions/newTransactionMacros.ftl @@ -98,7 +98,7 @@ <#continue> </#if> - <#if account == helpers.getCurrentAccount()> + <#if account == helpers.getCurrentAccountOrDefault()> <option selected value="${account.getID()?c}">${account.getName()}</option> <#continue> </#if>