From 46074ad40278eb9c777a9e6061c5f2b428fe10fc Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 13 Jan 2019 11:39:22 +0100 Subject: [PATCH] #268 - added basic page; added text for home page; Fixed datepicker target --- .../de/deadlocker8/budgetmaster/Main.java | 1 - .../controller/EmptyPageController.java | 7 ---- .../controller/ReportController.java | 39 +++++++++++++++++++ .../controller/TransactionController.java | 22 +++-------- .../budgetmaster/services/HelpersService.java | 12 ++++++ src/main/resources/languages/_de.properties | 4 +- src/main/resources/languages/_en.properties | 4 +- src/main/resources/templates/index.ftl | 4 +- .../resources/templates/reports/reports.ftl | 36 +++++++++++++++++ .../templates/transactions/transactions.ftl | 2 +- 10 files changed, 101 insertions(+), 30 deletions(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/controller/ReportController.java create mode 100644 src/main/resources/templates/reports/reports.ftl diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java index f5b6d4849..492bec1a7 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 e0663e0d8..26756fc22 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 000000000..5241ff2c4 --- /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 4af15b79d..67ed4305e 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 dcc66b880..af45e2880 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 3142a8b13..f831bab39 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 3fe7cf86f..45bf57bec 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 cd917817c..e17d5c934 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 000000000..346346880 --- /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 dd4d57b30..b65e11c88 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"> -- GitLab