diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java index f5b6d48492a8e251cdf76f552c63c5eff9c66082..492bec1a7e54122b3c1e64824d6b24f5f52c0d51 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/Main.java +++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java @@ -104,7 +104,6 @@ public class Main extends SpringBootServletInitializer implements ApplicationRun args = new String[arguments.size()]; args = arguments.toArray(args); - System.out.println(Arrays.toString(args)); SpringApplication.run(Main.class, args); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java index e0663e0d8459ad9b97c6bc32ec0fdbc2fb780d1c..26756fc2220b040f4c7745569643961d35c069e1 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java @@ -8,13 +8,6 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller public class EmptyPageController extends BaseController { - @RequestMapping("/reports") - public String reports(Model model) - { - model.addAttribute("active", "reports"); - return "comingSoon"; - } - @RequestMapping("/charts") public String charts(Model model) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java new file mode 100644 index 0000000000000000000000000000000000000000..5241ff2c426c34c43776c6ae11816c741a0bec06 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java @@ -0,0 +1,39 @@ +package de.deadlocker8.budgetmaster.controller; + +import de.deadlocker8.budgetmaster.repositories.SettingsRepository; +import de.deadlocker8.budgetmaster.services.HelpersService; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestMapping; + + +@Controller +public class ReportController extends BaseController +{ + @Autowired + private SettingsRepository settingsRepository; + + @Autowired + private HelpersService helpers; + + @RequestMapping("/reports") + public String reports(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) + { + DateTime date = helpers.getDateTimeFromCookie(cookieDate); + + model.addAttribute("currentDate", date); + return "reports/reports"; + } + + @RequestMapping("/reports/generate") + public String generate(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) + { + DateTime date = helpers.getDateTimeFromCookie(cookieDate); + + model.addAttribute("currentDate", date); + return "reports/reports"; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java index 4af15b79dcbf511883059903308ae160705b73e2..67ed4305ee60d1333ecfb046ca50f628e98eb1c8 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/TransactionController.java @@ -59,7 +59,7 @@ public class TransactionController extends BaseController @RequestMapping("/transactions") public String transactions(Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { - DateTime date = getDateTimeFromCookie(cookieDate); + DateTime date = helpers.getDateTimeFromCookie(cookieDate); repeatingTransactionUpdater.updateRepeatingTransactions(date.dayOfMonth().withMaximumValue()); @@ -85,7 +85,7 @@ public class TransactionController extends BaseController return "redirect:/transactions"; } - DateTime date = getDateTimeFromCookie(cookieDate); + DateTime date = helpers.getDateTimeFromCookie(cookieDate); List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(helpers.getCurrentAccount(), date.getMonthOfYear(), date.getYear(), getSettings().isRestActivated()); int incomeSum = helpers.getIncomeSumForTransactionList(transactions); int paymentSum = helpers.getPaymentSumForTransactionList(transactions); @@ -111,7 +111,7 @@ public class TransactionController extends BaseController @RequestMapping("/transactions/newTransaction") public String newTransaction(Model model, @CookieValue("currentDate") String cookieDate) { - DateTime date = getDateTimeFromCookie(cookieDate); + DateTime date = helpers.getDateTimeFromCookie(cookieDate); Transaction emptyTransaction = new Transaction(); model.addAttribute("currentDate", date); model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc()); @@ -131,7 +131,7 @@ public class TransactionController extends BaseController @RequestParam(value = "repeatingEndType", required = false) String repeatingEndType, @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue) { - DateTime date = getDateTimeFromCookie(cookieDate); + DateTime date = helpers.getDateTimeFromCookie(cookieDate); // handle repeating transactions if(transaction.getID() != null && isRepeating) @@ -221,7 +221,7 @@ public class TransactionController extends BaseController transaction = transaction.getRepeatingOption().getReferringTransactions().get(0); } - DateTime date = getDateTimeFromCookie(cookieDate); + DateTime date = helpers.getDateTimeFromCookie(cookieDate); model.addAttribute("currentDate", date); model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc()); model.addAttribute("accounts", accountService.getAllAccountsAsc()); @@ -234,18 +234,6 @@ public class TransactionController extends BaseController return settingsRepository.findOne(0); } - private DateTime getDateTimeFromCookie(String cookieDate) - { - if(cookieDate == null) - { - return DateTime.now(); - } - else - { - return DateTime.parse(cookieDate, DateTimeFormat.forPattern("dd.MM.yy").withLocale(getSettings().getLanguage().getLocale())); - } - } - private Transaction addTagForTransaction(String name, Transaction transaction) { if(tagRepository.findByName(name) == null) diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index dcc66b8805e53cefff6ab985e2e1a22921505efd..af45e2880ace15d3a1cc59364fa8e315fdef4827 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -304,4 +304,16 @@ public class HelpersService { return budgetMasterUpdateService.getAvailableVersionString(); } + + public DateTime getDateTimeFromCookie(String cookieDate) + { + if(cookieDate == null) + { + return DateTime.now(); + } + else + { + return DateTime.parse(cookieDate, DateTimeFormat.forPattern("dd.MM.yy").withLocale(getSettings().getLanguage().getLocale())); + } + } } \ No newline at end of file diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 3142a8b13045613ec74b93f0dfe9a221cd574930..f831bab39b230431a1d76803eeb1eff473c8d11c 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -187,6 +187,8 @@ datepicker.label.month=Monat: datepicker.label.year=Jahr: datepicker.button.confirm=�bernehmen +report.generate=Bericht erzeugen + # ABOUT about=�ber {0} about.roadmap.link=Roadmap �ffnen @@ -201,6 +203,6 @@ about.credits=Credits: home.menu.accounts=Konten erlauben es mehrere Buchungen zu gruppieren. Du kannst so viele Konten erstellen, wie du m�chtest. Zum Erstellen, Aktualisieren oder L�schen von Accounts klicke hier. home.menu.transactions=Buchungen sind das zentrale Element von BudgetMaster. Gib ihnen einen Namen und eine Beschreibung, weise ihnen eine Kategorie und ein Konto zu, konfiguriere sie als wiederholend und markiere sie mit Tags. Um Buchungen zu erstellen, zu bearbeiten oder zu l�schen einfach hier klicken. home.menu.charts=Diese Funktion wird in einer kommenden Version verf�gbar sein. -home.menu.reports=Diese Funktion wird in einer kommenden Version verf�gbar sein. +home.menu.reports=Erstelle konfigurierbare Monatsberichte als PDF zum Ausdrucken und Archivieren. Du kannst den Inhalt der Berichte filtern und zum Beispiel nach Einnahmen und Ausgaben getrennt auflisten lassen. Zum Erstellen eines Reports klicke hier. home.menu.categories=Kategorien k�nnen Buchungen zugeordnet werden, um diese als zusammengeh�rig zu kennzeichnen. Eine Kategorie besteht aus einem Namen und einer Farbe. Letztere kann aus einer vordefinierten Farbpalette oder mit Hilfe eines benutzerdefinierten Farbw�hlers ausgew�hlt werden. Erstelle, aktualisiere und l�sche Kategorien, indem du hier klickst. home.menu.settings=Verwalte allgemeine Einstellungen wie dein Login-Passwort, deine bevorzugte Sprache und wie Updates verwaltet werden sollen. Dieser Bereich bietet zudem die M�glichkeit, deine Daten zu exportieren oder zu l�schen, sowie eine bestehende Datenbank zu importieren. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 3fe7cf86f9f5135835b6c9c935691353edc7e393..45bf57becb9d5ca5bd7a5c2f614297239cb716da 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -188,6 +188,8 @@ datepicker.label.month=Month: datepicker.label.year=Year: datepicker.button.confirm=Apply +report.generate=Create Report + # ABOUT about=About {0} about.roadmap.link=Open Roadmap @@ -202,6 +204,6 @@ about.credits=Credits: home.menu.accounts=Accounts allow you to group multiple transactions. You can create as many accounts as you want. Create, update and delete them by clicking here. home.menu.transactions=Transactions are the key element of BudgetMaster. Give them a name and description, assign a category and account to them, configure them as recurring, and mark them with tags. You can create, edit and delete them by clicking here. home.menu.charts=This feature will be available in an upcoming release. -home.menu.reports=This feature will be available in an upcoming release. +home.menu.reports=Create configurable month reports in PDF format for printing and archiving. You can filter the content of the reports and, for example, list them separately to incomes and expenditures. To create a report click here. home.menu.categories=Categories can be assigned to transactions in order to mark them as belonging together. They consists of a name an a color. Latter can be chosen from a predefined color palette or by using a custom color picker. Create, update and delete categories by clicking here. home.menu.settings=Manage general settings such as login password, your preferred language and how to handle updates. This section also offers the possibility to export or delete your data or importing an existing database. diff --git a/src/main/resources/templates/index.ftl b/src/main/resources/templates/index.ftl index cd917817c11773a7e41b5f2cad69d1da983f951b..e17d5c934553db805ae1f3d5650283c26ded24a9 100644 --- a/src/main/resources/templates/index.ftl +++ b/src/main/resources/templates/index.ftl @@ -52,10 +52,10 @@ <div class="row home-menu-flex"> </div> <div class="col s12 m6 l4 center-align home-menu-cell"> - <a class="home-menu-link budgetmaster-text-black home-menu-disabled"> + <a href="<@s.url '/reports'/>" class="home-menu-link budgetmaster-text-black"> <h1 class="center budgetmaster-green-text"><i class="material-icons icon-budget">description</i></h1> <h3 class="center budget">${locale.getString("menu.reports")}</h3> - <p class="home-menu-disabled ">${locale.getString("home.menu.reports")}</p> + <p class="text-grey">${locale.getString("home.menu.reports")}</p> </a> </div> <div class="hide-on-small-only hide-on-large-only"> diff --git a/src/main/resources/templates/reports/reports.ftl b/src/main/resources/templates/reports/reports.ftl new file mode 100644 index 0000000000000000000000000000000000000000..3463468803377a674abd138405ce7ebb5ea18993 --- /dev/null +++ b/src/main/resources/templates/reports/reports.ftl @@ -0,0 +1,36 @@ +<html> + <head> + <#import "../header.ftl" as header> + <@header.header "BudgetMaster"/> + <#import "/spring.ftl" as s> + </head> + <body class="budgetmaster-blue-light"> + <#import "../navbar.ftl" as navbar> + <@navbar.navbar "reports"/> + + <main> + <div class="card main-card background-color"> + <#import "../datePicker.ftl" as datePicker> + <@datePicker.datePicker currentDate springMacroRequestContext.getRequestUri()/> + <div class="container"> + <div class="row"> + <div class="col s4"> + + </div> + </div> + + <#-- button new --> + <div class="row valign-wrapper"> + <div class="col s12 center-align"><a href="<@s.url '/reports/generate'/>" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">save</i>${locale.getString("report.generate")}</a></div> + </div> + </div> + </div> + </main> + + <!-- Scripts--> + <#import "../scripts.ftl" as scripts> + <@scripts.scripts/> + <script src="<@s.url '/js/datePicker.js'/>"></script> + <script>document.cookie = "currentDate=${helpers.getDateString(currentDate)}";</script> + </body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/transactions/transactions.ftl b/src/main/resources/templates/transactions/transactions.ftl index dd4d57b30d9661c340efd5638fd5f5ffef119fab..b65e11c88e17c74323d8b28fe8a308bb95d50800 100644 --- a/src/main/resources/templates/transactions/transactions.ftl +++ b/src/main/resources/templates/transactions/transactions.ftl @@ -12,7 +12,7 @@ <main> <div class="card main-card background-color"> <#import "../datePicker.ftl" as datePicker> - <@datePicker.datePicker currentDate ""/> + <@datePicker.datePicker currentDate springMacroRequestContext.getRequestUri()/> <div class="container"> <div class="row"> <div class="col s4">