From 477d3c203a01f6242ca2be3ba34825b9eeeb83ae Mon Sep 17 00:00:00 2001 From: MK13 Date: Sun, 30 Jun 2019 03:03:36 +0200 Subject: [PATCH] Add charts (based on JFreeChart) Currently only an expense report is supported, but more will come. Also moved rest templates into own toplevel package. --- .../de/financer/dto/AccountGroupExpense.java | 33 ++++++++++++++ .../controller/AccountGroupController.java | 10 +++++ .../financer/dba/AccountGroupRepository.java | 8 ++++ .../financer/dba/TransactionRepository.java | 2 +- .../financer/service/AccountGroupService.java | 44 +++++++++++++++---- .../hsqldb/V12_0_0__accountGroupsAccount.sql | 3 ++ financer-web-client/pom.xml | 8 +++- .../AccountGroupExpensesChartGenerator.java | 40 +++++++++++++++++ .../controller/AccountController.java | 3 +- .../controller/AccountGroupController.java | 2 +- .../financer/controller/ChartController.java | 40 +++++++++++++++++ .../java/de/financer/controller/Function.java | 1 + .../RecurringTransactionController.java | 2 +- .../controller/TransactionController.java | 8 ++-- .../template/FinancerRestTemplate.java | 2 +- .../template/GetAccountByKeyTemplate.java | 2 +- .../GetAccountGroupExpensesTemplate.java | 24 ++++++++++ .../template/GetAllAccountGroupsTemplate.java | 2 +- .../template/GetAllAccountsTemplate.java | 2 +- ...llActiveRecurringTransactionsTemplate.java | 2 +- ...RecurringTransactionsDueTodayTemplate.java | 2 +- .../GetAllRecurringTransactionsTemplate.java | 2 +- .../GetAllTransactionsForAccountTemplate.java | 2 +- .../template/GetCurrentAssetsTemplate.java | 2 +- .../GetExpensesCurrentPeriodTemplate.java | 3 +- .../template/StringTemplate.java | 2 +- .../main/resources/i18n/message.properties | 2 + .../resources/i18n/message_de_DE.properties | 4 +- .../templates/account/accountOverview.html | 4 +- 29 files changed, 229 insertions(+), 32 deletions(-) create mode 100644 financer-common/src/main/java/de/financer/dto/AccountGroupExpense.java create mode 100644 financer-server/src/main/resources/database/hsqldb/V12_0_0__accountGroupsAccount.sql create mode 100644 financer-web-client/src/main/java/de/financer/chart/AccountGroupExpensesChartGenerator.java create mode 100644 financer-web-client/src/main/java/de/financer/controller/ChartController.java rename financer-web-client/src/main/java/de/financer/{controller => }/template/FinancerRestTemplate.java (97%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAccountByKeyTemplate.java (95%) create mode 100644 financer-web-client/src/main/java/de/financer/template/GetAccountGroupExpensesTemplate.java rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllAccountGroupsTemplate.java (94%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllAccountsTemplate.java (93%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllActiveRecurringTransactionsTemplate.java (94%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllRecurringTransactionsDueTodayTemplate.java (94%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllRecurringTransactionsTemplate.java (94%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetAllTransactionsForAccountTemplate.java (95%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetCurrentAssetsTemplate.java (93%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/GetExpensesCurrentPeriodTemplate.java (91%) rename financer-web-client/src/main/java/de/financer/{controller => }/template/StringTemplate.java (91%) diff --git a/financer-common/src/main/java/de/financer/dto/AccountGroupExpense.java b/financer-common/src/main/java/de/financer/dto/AccountGroupExpense.java new file mode 100644 index 0000000..d891fc4 --- /dev/null +++ b/financer-common/src/main/java/de/financer/dto/AccountGroupExpense.java @@ -0,0 +1,33 @@ +package de.financer.dto; + +import de.financer.model.AccountGroup; + +public class AccountGroupExpense { + private AccountGroup accountGroup; + private Long expense; + + public AccountGroupExpense() { + // nothing to do + } + + public AccountGroupExpense(AccountGroup accountGroup, Long expense) { + this.accountGroup = accountGroup; + this.expense = expense; + } + + public AccountGroup getAccountGroup() { + return accountGroup; + } + + public void setAccountGroup(AccountGroup accountGroup) { + this.accountGroup = accountGroup; + } + + public Long getExpense() { + return expense; + } + + public void setExpense(Long expense) { + this.expense = expense; + } +} diff --git a/financer-server/src/main/java/de/financer/controller/AccountGroupController.java b/financer-server/src/main/java/de/financer/controller/AccountGroupController.java index 109f9ce..8a00135 100644 --- a/financer-server/src/main/java/de/financer/controller/AccountGroupController.java +++ b/financer-server/src/main/java/de/financer/controller/AccountGroupController.java @@ -1,6 +1,7 @@ package de.financer.controller; import de.financer.ResponseReason; +import de.financer.dto.AccountGroupExpense; import de.financer.model.AccountGroup; import de.financer.service.AccountGroupService; import org.slf4j.Logger; @@ -50,4 +51,13 @@ public class AccountGroupController { return responseReason.toResponseEntity(); } + + @RequestMapping("getAccountGroupExpenses") + public Iterable getAccountGroupExpenses(String periodStart, String periodEnd) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(String.format("/accountGroups/getAccountGroupExpenses got parameters: %s|%s", periodStart, periodEnd)); + } + + return this.accountGroupService.getAccountGroupExpenses(periodStart, periodEnd); + } } diff --git a/financer-server/src/main/java/de/financer/dba/AccountGroupRepository.java b/financer-server/src/main/java/de/financer/dba/AccountGroupRepository.java index 144cb66..4013ab1 100644 --- a/financer-server/src/main/java/de/financer/dba/AccountGroupRepository.java +++ b/financer-server/src/main/java/de/financer/dba/AccountGroupRepository.java @@ -1,11 +1,19 @@ package de.financer.dba; +import de.financer.dto.AccountGroupExpense; import de.financer.model.AccountGroup; +import de.financer.model.AccountType; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; + @Transactional(propagation = Propagation.REQUIRED) public interface AccountGroupRepository extends CrudRepository { AccountGroup findByName(String name); + + @Query("SELECT new de.financer.dto.AccountGroupExpense(ag, SUM(t.amount)) FROM Transaction t JOIN t.toAccount a JOIN a.accountGroup ag WHERE a.type in :expenseTypes AND t.date BETWEEN :startDate AND :startEnd GROUP BY ag") + Iterable getAccountGroupExpenses(LocalDate startDate, LocalDate startEnd, AccountType... expenseTypes); } diff --git a/financer-server/src/main/java/de/financer/dba/TransactionRepository.java b/financer-server/src/main/java/de/financer/dba/TransactionRepository.java index 04ac1e6..1fb6f7c 100644 --- a/financer-server/src/main/java/de/financer/dba/TransactionRepository.java +++ b/financer-server/src/main/java/de/financer/dba/TransactionRepository.java @@ -16,4 +16,4 @@ public interface TransactionRepository extends CrudRepository @Query("SELECT SUM(t.amount) FROM Transaction t JOIN t.toAccount a WHERE t.date BETWEEN :periodStart AND :periodEnd AND a.type IN :expenseTypes") Long getExpensesCurrentPeriod(LocalDate periodStart, LocalDate periodEnd, AccountType... expenseTypes); -} +} \ No newline at end of file diff --git a/financer-server/src/main/java/de/financer/service/AccountGroupService.java b/financer-server/src/main/java/de/financer/service/AccountGroupService.java index 1b41de9..4a4886a 100644 --- a/financer-server/src/main/java/de/financer/service/AccountGroupService.java +++ b/financer-server/src/main/java/de/financer/service/AccountGroupService.java @@ -1,8 +1,11 @@ package de.financer.service; import de.financer.ResponseReason; +import de.financer.config.FinancerConfig; import de.financer.dba.AccountGroupRepository; +import de.financer.dto.AccountGroupExpense; import de.financer.model.AccountGroup; +import de.financer.model.AccountType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +14,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Collections; + @Service public class AccountGroupService { private static final Logger LOGGER = LoggerFactory.getLogger(AccountGroupService.class); @@ -18,6 +26,9 @@ public class AccountGroupService { @Autowired private AccountGroupRepository accountGroupRepository; + @Autowired + private FinancerConfig financerConfig; + /** * @return all existing account groups */ @@ -29,6 +40,7 @@ public class AccountGroupService { * This method returns the account group with the given name. * * @param name the name to get the account group for + * * @return the account group or null if no account group with the given name can be found */ public AccountGroup getAccountGroupByName(String name) { @@ -39,10 +51,10 @@ public class AccountGroupService { * This method creates a new account group with the given name. * * @param name the name of the new account group - * @return {@link ResponseReason#DUPLICATE_ACCOUNT_GROUP_NAME} if an account group with the given name already exists, - * {@link ResponseReason#UNKNOWN_ERROR} if an unknown error occurs, - * {@link ResponseReason#OK} if the operation completed successfully. - * Never returns null. + * + * @return {@link ResponseReason#DUPLICATE_ACCOUNT_GROUP_NAME} if an account group with the given name already + * exists, {@link ResponseReason#UNKNOWN_ERROR} if an unknown error occurs, {@link ResponseReason#OK} if the + * operation completed successfully. Never returns null. */ @Transactional(propagation = Propagation.SUPPORTS) public ResponseReason createAccountGroup(String name) { @@ -52,13 +64,11 @@ public class AccountGroupService { try { this.accountGroupRepository.save(accountGroup); - } - catch (DataIntegrityViolationException dive) { + } catch (DataIntegrityViolationException dive) { LOGGER.error(String.format("Duplicate account group name! %s", name), dive); return ResponseReason.DUPLICATE_ACCOUNT_GROUP_NAME; - } - catch (Exception e) { + } catch (Exception e) { LOGGER.error(String.format("Could not save account group %s", name), e); return ResponseReason.UNKNOWN_ERROR; @@ -66,4 +76,22 @@ public class AccountGroupService { return ResponseReason.OK; } + + public Iterable getAccountGroupExpenses(String periodStart, String periodEnd) { + LocalDate startDate; + LocalDate endDate; + + try { + startDate = LocalDate.parse(periodStart, DateTimeFormatter.ofPattern(this.financerConfig.getDateFormat())); + endDate = LocalDate.parse(periodEnd, DateTimeFormatter.ofPattern(this.financerConfig.getDateFormat())); + } catch (DateTimeParseException dtpe) { + LOGGER.error(String + .format("Could not parse periodStart (%s) or periodEnd (%s): %s", periodStart, periodEnd, dtpe + .getMessage())); + + return Collections.emptyList(); + } + + return this.accountGroupRepository.getAccountGroupExpenses(startDate, endDate, AccountType.LIABILITY, AccountType.EXPENSE); + } } diff --git a/financer-server/src/main/resources/database/hsqldb/V12_0_0__accountGroupsAccount.sql b/financer-server/src/main/resources/database/hsqldb/V12_0_0__accountGroupsAccount.sql new file mode 100644 index 0000000..11dd0f4 --- /dev/null +++ b/financer-server/src/main/resources/database/hsqldb/V12_0_0__accountGroupsAccount.sql @@ -0,0 +1,3 @@ +UPDATE account SET account_group_id = (SELECT id FROM account_group WHERE name = 'Car') WHERE "key" IN ('Car', 'Gas') + +UPDATE account SET account_group_id = (SELECT id FROM account_group WHERE name = 'Housing') WHERE "key" IN ('Rent', 'FVS', 'Electricity/Water') \ No newline at end of file diff --git a/financer-web-client/pom.xml b/financer-web-client/pom.xml index 757fb57..d568c18 100644 --- a/financer-web-client/pom.xml +++ b/financer-web-client/pom.xml @@ -12,7 +12,8 @@ financer-web-client ${packaging.type} - The web client part of the financer application - a simple app to manage your personal finances + The web client part of the financer application - a simple app to manage your personal finances + financer-web-client @@ -47,6 +48,11 @@ commons-collections4 + + org.jfree + jfreechart + 1.5.0 + diff --git a/financer-web-client/src/main/java/de/financer/chart/AccountGroupExpensesChartGenerator.java b/financer-web-client/src/main/java/de/financer/chart/AccountGroupExpensesChartGenerator.java new file mode 100644 index 0000000..32999f2 --- /dev/null +++ b/financer-web-client/src/main/java/de/financer/chart/AccountGroupExpensesChartGenerator.java @@ -0,0 +1,40 @@ +package de.financer.chart; + +import de.financer.config.FinancerConfig; +import de.financer.dto.AccountGroupExpense; +import de.financer.template.GetAccountGroupExpensesTemplate; +import de.financer.util.ControllerUtils; +import org.apache.commons.collections4.IterableUtils; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.data.general.DefaultPieDataset; +import org.jfree.data.general.PieDataset; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +import java.time.LocalDate; + +public class AccountGroupExpensesChartGenerator { + public JFreeChart generateChart(FinancerConfig financerConfig, LocalDate periodStart, LocalDate periodEnd, MessageSource messageSource) { + final String start = ControllerUtils.formatDate(financerConfig, periodStart); + final String end = ControllerUtils.formatDate(financerConfig, periodEnd); + + final Iterable expenses = new GetAccountGroupExpensesTemplate() + .exchange(financerConfig, start, end).getBody(); + + final PieDataset dataSet = createDataSet(expenses); + + return ChartFactory.createPieChart(messageSource + .getMessage("financer.chart.account-group-expenses-current-period.title", null, LocaleContextHolder + .getLocale()), dataSet); + } + + private PieDataset createDataSet(Iterable data) { + final DefaultPieDataset dataSet = new DefaultPieDataset(); + + IterableUtils.toList(data).stream() + .forEach((ex) -> dataSet.setValue(ex.getAccountGroup().getName(), ex.getExpense())); + + return dataSet; + } +} diff --git a/financer-web-client/src/main/java/de/financer/controller/AccountController.java b/financer-web-client/src/main/java/de/financer/controller/AccountController.java index df717bd..656015f 100644 --- a/financer-web-client/src/main/java/de/financer/controller/AccountController.java +++ b/financer-web-client/src/main/java/de/financer/controller/AccountController.java @@ -2,7 +2,7 @@ package de.financer.controller; import de.financer.ResponseReason; import de.financer.config.FinancerConfig; -import de.financer.controller.template.*; +import de.financer.template.*; import de.financer.form.NewAccountForm; import de.financer.model.*; import de.financer.util.ControllerUtils; @@ -19,7 +19,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.util.UriComponentsBuilder; -import java.time.LocalDate; import java.util.List; @Controller diff --git a/financer-web-client/src/main/java/de/financer/controller/AccountGroupController.java b/financer-web-client/src/main/java/de/financer/controller/AccountGroupController.java index dc6a8d6..1ff741d 100644 --- a/financer-web-client/src/main/java/de/financer/controller/AccountGroupController.java +++ b/financer-web-client/src/main/java/de/financer/controller/AccountGroupController.java @@ -2,7 +2,7 @@ package de.financer.controller; import de.financer.ResponseReason; import de.financer.config.FinancerConfig; -import de.financer.controller.template.StringTemplate; +import de.financer.template.StringTemplate; import de.financer.form.NewAccountGroupForm; import de.financer.util.ControllerUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/financer-web-client/src/main/java/de/financer/controller/ChartController.java b/financer-web-client/src/main/java/de/financer/controller/ChartController.java new file mode 100644 index 0000000..4de1ed3 --- /dev/null +++ b/financer-web-client/src/main/java/de/financer/controller/ChartController.java @@ -0,0 +1,40 @@ +package de.financer.controller; + +import de.financer.chart.AccountGroupExpensesChartGenerator; +import de.financer.config.FinancerConfig; +import de.financer.util.ExpensePeriod; +import org.jfree.chart.ChartUtils; +import org.jfree.chart.JFreeChart; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Controller +public class ChartController { + @Autowired + private FinancerConfig financerConfig; + + @Autowired + private MessageSource messageSource; + + @GetMapping("/getAccountGroupExpensesCurrentPeriod") + public void getAccountGroupExpensesCurrentPeriod(HttpServletResponse response) { + final ExpensePeriod period = ExpensePeriod + .getCurrentExpensePeriod(this.financerConfig.getMonthPeriodStartDay()); + + JFreeChart chart = new AccountGroupExpensesChartGenerator() + .generateChart(this.financerConfig, period.getStart(), period.getEnd(), this.messageSource); + + response.setContentType("image/png"); + + try { + ChartUtils.writeChartAsPNG(response.getOutputStream(), chart, 1024, 768); + } catch (IOException ioe) { + // TODO + } + } +} diff --git a/financer-web-client/src/main/java/de/financer/controller/Function.java b/financer-web-client/src/main/java/de/financer/controller/Function.java index d7d2a9f..2824bbc 100644 --- a/financer-web-client/src/main/java/de/financer/controller/Function.java +++ b/financer-web-client/src/main/java/de/financer/controller/Function.java @@ -10,6 +10,7 @@ public enum Function { ACC_GP_CREATE_ACCOUNT_GROUP("accountGroups/createAccountGroup"), ACC_GP_GET_ALL("accountGroups/getAll"), + ACC_GP_GET_ACC_GP_EXPENSES("accountGroups/getAccountGroupExpenses"), TR_GET_ALL("transactions/getAll"), TR_GET_ALL_FOR_ACCOUNT("transactions/getAllForAccount"), diff --git a/financer-web-client/src/main/java/de/financer/controller/RecurringTransactionController.java b/financer-web-client/src/main/java/de/financer/controller/RecurringTransactionController.java index 28de982..fc371f2 100644 --- a/financer-web-client/src/main/java/de/financer/controller/RecurringTransactionController.java +++ b/financer-web-client/src/main/java/de/financer/controller/RecurringTransactionController.java @@ -2,7 +2,7 @@ package de.financer.controller; import de.financer.ResponseReason; import de.financer.config.FinancerConfig; -import de.financer.controller.template.*; +import de.financer.template.*; import de.financer.form.NewRecurringTransactionForm; import de.financer.form.RecurringToTransactionWithAmountForm; import de.financer.model.Account; diff --git a/financer-web-client/src/main/java/de/financer/controller/TransactionController.java b/financer-web-client/src/main/java/de/financer/controller/TransactionController.java index 3463fb9..cff418b 100644 --- a/financer-web-client/src/main/java/de/financer/controller/TransactionController.java +++ b/financer-web-client/src/main/java/de/financer/controller/TransactionController.java @@ -2,10 +2,10 @@ package de.financer.controller; import de.financer.ResponseReason; import de.financer.config.FinancerConfig; -import de.financer.controller.template.GetAccountByKeyTemplate; -import de.financer.controller.template.GetAllAccountsTemplate; -import de.financer.controller.template.GetAllTransactionsForAccountTemplate; -import de.financer.controller.template.StringTemplate; +import de.financer.template.GetAccountByKeyTemplate; +import de.financer.template.GetAllAccountsTemplate; +import de.financer.template.GetAllTransactionsForAccountTemplate; +import de.financer.template.StringTemplate; import de.financer.form.NewTransactionForm; import de.financer.model.Account; import de.financer.model.AccountStatus; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/FinancerRestTemplate.java b/financer-web-client/src/main/java/de/financer/template/FinancerRestTemplate.java similarity index 97% rename from financer-web-client/src/main/java/de/financer/controller/template/FinancerRestTemplate.java rename to financer-web-client/src/main/java/de/financer/template/FinancerRestTemplate.java index bd4d604..4009ce9 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/FinancerRestTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/FinancerRestTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAccountByKeyTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAccountByKeyTemplate.java similarity index 95% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAccountByKeyTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAccountByKeyTemplate.java index d2552b4..895d2e1 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAccountByKeyTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAccountByKeyTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/template/GetAccountGroupExpensesTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAccountGroupExpensesTemplate.java new file mode 100644 index 0000000..64e28cc --- /dev/null +++ b/financer-web-client/src/main/java/de/financer/template/GetAccountGroupExpensesTemplate.java @@ -0,0 +1,24 @@ +package de.financer.template; + +import de.financer.config.FinancerConfig; +import de.financer.controller.Function; +import de.financer.dto.AccountGroupExpense; +import de.financer.model.Account; +import de.financer.model.Transaction; +import de.financer.util.ControllerUtils; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.ResponseEntity; +import org.springframework.web.util.UriComponentsBuilder; + +public class GetAccountGroupExpensesTemplate { + public ResponseEntity> exchange(FinancerConfig financerConfig, String start, String end) { + final UriComponentsBuilder expensesBuilder = UriComponentsBuilder + .fromHttpUrl(ControllerUtils.buildUrl(financerConfig, Function.ACC_GP_GET_ACC_GP_EXPENSES)) + .queryParam("periodStart", start) + .queryParam("periodEnd", end); + + return new FinancerRestTemplate>() + .exchange(expensesBuilder.toUriString(), new ParameterizedTypeReference>() { + }); + } +} diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountGroupsTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllAccountGroupsTemplate.java similarity index 94% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountGroupsTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllAccountGroupsTemplate.java index 46b2ecc..c467255 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountGroupsTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllAccountGroupsTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountsTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllAccountsTemplate.java similarity index 93% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountsTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllAccountsTemplate.java index b1933b5..433f89e 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllAccountsTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllAccountsTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllActiveRecurringTransactionsTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllActiveRecurringTransactionsTemplate.java similarity index 94% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllActiveRecurringTransactionsTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllActiveRecurringTransactionsTemplate.java index 8d779b6..65b44c7 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllActiveRecurringTransactionsTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllActiveRecurringTransactionsTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsDueTodayTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsDueTodayTemplate.java similarity index 94% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsDueTodayTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsDueTodayTemplate.java index a63fa03..2f843f9 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsDueTodayTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsDueTodayTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsTemplate.java similarity index 94% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsTemplate.java index 071bb51..4954b7e 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllRecurringTransactionsTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllRecurringTransactionsTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetAllTransactionsForAccountTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetAllTransactionsForAccountTemplate.java similarity index 95% rename from financer-web-client/src/main/java/de/financer/controller/template/GetAllTransactionsForAccountTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetAllTransactionsForAccountTemplate.java index 8f3b4de..d7811d0 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetAllTransactionsForAccountTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetAllTransactionsForAccountTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetCurrentAssetsTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetCurrentAssetsTemplate.java similarity index 93% rename from financer-web-client/src/main/java/de/financer/controller/template/GetCurrentAssetsTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetCurrentAssetsTemplate.java index 732bf53..9de97b6 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetCurrentAssetsTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetCurrentAssetsTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/GetExpensesCurrentPeriodTemplate.java b/financer-web-client/src/main/java/de/financer/template/GetExpensesCurrentPeriodTemplate.java similarity index 91% rename from financer-web-client/src/main/java/de/financer/controller/template/GetExpensesCurrentPeriodTemplate.java rename to financer-web-client/src/main/java/de/financer/template/GetExpensesCurrentPeriodTemplate.java index fb2c8b4..4f10b25 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/GetExpensesCurrentPeriodTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/GetExpensesCurrentPeriodTemplate.java @@ -1,8 +1,7 @@ -package de.financer.controller.template; +package de.financer.template; import de.financer.config.FinancerConfig; import de.financer.controller.Function; -import de.financer.model.Transaction; import de.financer.util.ControllerUtils; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.ResponseEntity; diff --git a/financer-web-client/src/main/java/de/financer/controller/template/StringTemplate.java b/financer-web-client/src/main/java/de/financer/template/StringTemplate.java similarity index 91% rename from financer-web-client/src/main/java/de/financer/controller/template/StringTemplate.java rename to financer-web-client/src/main/java/de/financer/template/StringTemplate.java index 96148e0..a0b54d3 100644 --- a/financer-web-client/src/main/java/de/financer/controller/template/StringTemplate.java +++ b/financer-web-client/src/main/java/de/financer/template/StringTemplate.java @@ -1,4 +1,4 @@ -package de.financer.controller.template; +package de.financer.template; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.ResponseEntity; diff --git a/financer-web-client/src/main/resources/i18n/message.properties b/financer-web-client/src/main/resources/i18n/message.properties index b25b0de..8cc88e2 100644 --- a/financer-web-client/src/main/resources/i18n/message.properties +++ b/financer-web-client/src/main/resources/i18n/message.properties @@ -136,6 +136,8 @@ financer.heading.recurring-to-transaction-with-amount=financer\: create transact financer.cancel-back-to-overview=Cancel and back to overview +financer.chart.account-group-expenses-current-period.title=Expenses of the current period grouped by account group + financer.error-message.UNKNOWN_ERROR=An unknown error occurred! financer.error-message.INVALID_ACCOUNT_TYPE=The selected account type is not valid! financer.error-message.FROM_ACCOUNT_NOT_FOUND=The specified from account has not been found! diff --git a/financer-web-client/src/main/resources/i18n/message_de_DE.properties b/financer-web-client/src/main/resources/i18n/message_de_DE.properties index db0c61f..f2c1286 100644 --- a/financer-web-client/src/main/resources/i18n/message_de_DE.properties +++ b/financer-web-client/src/main/resources/i18n/message_de_DE.properties @@ -134,4 +134,6 @@ financer.heading.recurring-transaction-list.active=financer\: aktive wiederkehre financer.heading.recurring-transaction-list.all=financer\: alle wiederkehrende Buchungen financer.heading.recurring-to-transaction-with-amount=financer\: Buchung mit Betrag aus wiederkehrender Buchung erstellen -financer.cancel-back-to-overview=Abbrechen und zur \u00DCbersicht \ No newline at end of file +financer.cancel-back-to-overview=Abbrechen und zur \u00DCbersicht + +financer.chart.account-group-expenses-current-period.title=Ausgaben in der aktuellen Periode gruppiert nach Konto-Gruppe \ No newline at end of file diff --git a/financer-web-client/src/main/resources/templates/account/accountOverview.html b/financer-web-client/src/main/resources/templates/account/accountOverview.html index 19dac24..4a7ee60 100644 --- a/financer-web-client/src/main/resources/templates/account/accountOverview.html +++ b/financer-web-client/src/main/resources/templates/account/accountOverview.html @@ -16,7 +16,9 @@
- + + +