From 73767adddc512635ee12aff02f4e3ce2e3102fcb Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 26 Apr 2019 22:34:42 +0200
Subject: [PATCH] refactoring

---
 .../deadlocker8/budgetmaster/MonthNames.java  | 48 ++++++++++++++
 .../de/deadlocker8/budgetmaster/WeekDay.java  | 45 +++++++++++++
 .../budgetmaster/advices/CalendarAdvice.java  | 26 ++++++++
 ...{HelpersAdvice.java => ServiceAdvice.java} | 12 +++-
 .../controller/DatePickerController.java      | 12 ++--
 .../services/DateFormatStyle.java             | 21 +++++++
 .../budgetmaster/services/DateService.java    | 44 +++++++++++++
 .../budgetmaster/services/HelpersService.java | 63 -------------------
 .../budgetmaster/utils/Strings.java           |  9 ---
 .../templates/helpers/globalDatePicker.ftl    | 10 +--
 .../resources/templates/helpers/navbar.ftl    |  2 +-
 src/main/resources/templates/login.ftl        |  2 +-
 .../resources/templates/reports/reports.ftl   |  4 +-
 .../resources/templates/settings/settings.ftl |  2 +-
 .../transactions/newTransactionMacros.ftl     |  8 +--
 .../templates/transactions/transactions.ftl   |  6 +-
 16 files changed, 220 insertions(+), 94 deletions(-)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/MonthNames.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/WeekDay.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/advices/CalendarAdvice.java
 rename src/main/java/de/deadlocker8/budgetmaster/advices/{HelpersAdvice.java => ServiceAdvice.java} (66%)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/services/DateService.java

diff --git a/src/main/java/de/deadlocker8/budgetmaster/MonthNames.java b/src/main/java/de/deadlocker8/budgetmaster/MonthNames.java
new file mode 100644
index 000000000..572c42e58
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/MonthNames.java
@@ -0,0 +1,48 @@
+package de.deadlocker8.budgetmaster;
+
+import de.thecodelabs.utils.util.Localization;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public enum MonthNames
+{
+	MONTH_JANUARY("month.january"),
+	MONTH_FEBRUARY("month.february"),
+	MONTH_MARCH("month.march"),
+	MONTH_APRIL("month.april"),
+	MONTH_MAY("month.may"),
+	MONTH_JUNE("month.june"),
+	MONTH_JULY("month.july"),
+	MONTH_AUGUST("month.august"),
+	MONTH_SEPTEMBER("month.september"),
+	MONTH_OCTOBER("month.october"),
+	MONTH_NOVEMBER("month.november"),
+	MONTH_DECEMBER("month.december");
+
+	private static List<String> localized;
+	private String key;
+
+	MonthNames(String key)
+	{
+		this.key = key;
+	}
+
+	public String getKey()
+	{
+		return key;
+	}
+
+	public static List<String> getLocalizedStrings()
+	{
+		if(localized == null)
+		{
+			localized = Stream.of(MonthNames.values())
+					.map(monthName -> Localization.getString(monthName.getKey()))
+					.collect(Collectors.toList());
+		}
+
+		return localized;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/WeekDay.java b/src/main/java/de/deadlocker8/budgetmaster/WeekDay.java
new file mode 100644
index 000000000..5156d5fa0
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/WeekDay.java
@@ -0,0 +1,45 @@
+package de.deadlocker8.budgetmaster;
+
+import de.deadlocker8.budgetmaster.utils.Strings;
+import de.thecodelabs.utils.util.Localization;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public enum WeekDay
+{
+	SUNDAY("sunday"),
+	MONDAY("monday"),
+	TUESDAY("tuesday"),
+	WEDNESDAY("wednesday"),
+	THURSDAY("thursday"),
+	FRIDAY("friday"),
+	SATURDAY("saturday");
+
+	private static List<String> localized;
+	private String key;
+
+	WeekDay(String key)
+	{
+		this.key = key;
+	}
+
+	public String getKey()
+	{
+		return key;
+	}
+
+	public static List<String> getLocalizedStrings()
+	{
+		if(localized == null)
+		{
+			localized = Stream.of(WeekDay.values())
+					.map(weekDay -> Localization.getString(weekDay.getKey()))
+					.collect(Collectors.toList());
+		}
+
+		return localized;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/advices/CalendarAdvice.java b/src/main/java/de/deadlocker8/budgetmaster/advices/CalendarAdvice.java
new file mode 100644
index 000000000..cda9cd308
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/advices/CalendarAdvice.java
@@ -0,0 +1,26 @@
+package de.deadlocker8.budgetmaster.advices;
+
+import de.deadlocker8.budgetmaster.MonthNames;
+import de.deadlocker8.budgetmaster.WeekDay;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+@ControllerAdvice
+public class CalendarAdvice
+{
+	@ModelAttribute("localizedWeekdays")
+	public List<String> getWeekDays()
+	{
+		return WeekDay.getLocalizedStrings();
+	}
+
+	@ModelAttribute("localizesMonthNames")
+	public List<String> getMonthNames()
+	{
+		return MonthNames.getLocalizedStrings();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/advices/HelpersAdvice.java b/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java
similarity index 66%
rename from src/main/java/de/deadlocker8/budgetmaster/advices/HelpersAdvice.java
rename to src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java
index ace7c5742..138511368 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/advices/HelpersAdvice.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java
@@ -1,19 +1,29 @@
 package de.deadlocker8.budgetmaster.advices;
 
+import de.deadlocker8.budgetmaster.services.DateService;
 import de.deadlocker8.budgetmaster.services.HelpersService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ModelAttribute;
 
 @ControllerAdvice
-public class HelpersAdvice
+public class ServiceAdvice
 {
 	@Autowired
 	HelpersService helpers;
 
+	@Autowired
+	DateService dateService;
+
 	@ModelAttribute("helpers")
 	public HelpersService getHelpers()
 	{
 		return helpers;
 	}
+
+	@ModelAttribute("dateService")
+	public DateService getDateService()
+	{
+		return dateService;
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
index 95300f7dc..3c1bbc79a 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
@@ -1,5 +1,6 @@
 package de.deadlocker8.budgetmaster.controller;
 
+import de.deadlocker8.budgetmaster.services.DateService;
 import de.deadlocker8.budgetmaster.settings.Settings;
 import de.deadlocker8.budgetmaster.settings.SettingsRepository;
 import de.deadlocker8.budgetmaster.services.HelpersService;
@@ -24,6 +25,9 @@ public class DatePickerController extends BaseController
 	@Autowired
 	private HelpersService helpers;
 
+	@Autowired
+	private DateService dateService;
+
 	@RequestMapping(value = "/previousMonth")
 	public String previousMonth(HttpServletResponse response, @CookieValue("currentDate") String date, @RequestParam("target") String target)
 	{
@@ -31,7 +35,7 @@ public class DatePickerController extends BaseController
 		DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern("dd.MM.yy").withLocale(settings.getLanguage().getLocale()));
 		currentDate = currentDate.minusMonths(1);
 
-		response.addCookie(new Cookie("currentDate", helpers.getDateString(currentDate)));
+		response.addCookie(new Cookie("currentDate", dateService.getDateStringNormal(currentDate)));
 		return "redirect:" + target;
 	}
 
@@ -42,7 +46,7 @@ public class DatePickerController extends BaseController
 		DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern("dd.MM.yy").withLocale(settings.getLanguage().getLocale()));
 		currentDate = currentDate.plusMonths(1);
 
-		response.addCookie(new Cookie("currentDate", helpers.getDateString(currentDate)));
+		response.addCookie(new Cookie("currentDate", dateService.getDateStringNormal(currentDate)));
 		return "redirect:" + target;
 	}
 
@@ -52,7 +56,7 @@ public class DatePickerController extends BaseController
 		Settings settings = settingsRepository.findOne(0);
 		DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern("dd.MM.yy").withLocale(settings.getLanguage().getLocale()));
 
-		response.addCookie(new Cookie("currentDate", helpers.getDateString(currentDate)));
+		response.addCookie(new Cookie("currentDate", dateService.getDateStringNormal(currentDate)));
 		return "redirect:" + target;
 	}
 
@@ -60,7 +64,7 @@ public class DatePickerController extends BaseController
 	public String today(HttpServletResponse response, @RequestParam("target") String target)
 	{
 		DateTime currentDate = DateTime.now();
-		response.addCookie(new Cookie("currentDate", helpers.getDateString(currentDate)));
+		response.addCookie(new Cookie("currentDate", dateService.getDateStringNormal(currentDate)));
 		return "redirect:" + target;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java b/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java
new file mode 100644
index 000000000..1ff6cad49
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java
@@ -0,0 +1,21 @@
+package de.deadlocker8.budgetmaster.services;
+
+public enum DateFormatStyle
+{
+	NORMAL("dd.MM.yy"),
+	NO_YEAR("dd.MM."),
+	LONG("dd.MM.yyyy"),
+	LONG_MONTH_AND_YEAR("MMMM yyyy");
+
+	private String key;
+
+	DateFormatStyle(String key)
+	{
+		this.key = key;
+	}
+
+	public String getKey()
+	{
+		return key;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java
new file mode 100644
index 000000000..16b10da08
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java
@@ -0,0 +1,44 @@
+package de.deadlocker8.budgetmaster.services;
+
+import de.deadlocker8.budgetmaster.settings.SettingsService;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DateService
+{
+	private final SettingsService settingsService;
+
+	@Autowired
+	public DateService(SettingsService settingsService)
+	{
+		this.settingsService = settingsService;
+	}
+
+	public String getDateStringNormal(DateTime date)
+	{
+		return getDateString(date, DateFormatStyle.NORMAL);
+	}
+
+	public String getDateStringWithoutYear(DateTime date)
+	{
+		return getDateString(date, DateFormatStyle.NO_YEAR);
+	}
+
+	public String getLongDateString(DateTime date)
+	{
+		return getDateString(date, DateFormatStyle.LONG);
+	}
+
+	public String getDateStringWithMonthAndYear(DateTime date)
+	{
+		return getDateString(date, DateFormatStyle.LONG_MONTH_AND_YEAR);
+	}
+
+	private String getDateString(DateTime date, DateFormatStyle formatStyle)
+	{
+		return date.toString(DateTimeFormat.forPattern(formatStyle.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale()));
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
index d70e0de9b..18ede5afb 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
@@ -20,9 +20,7 @@ import de.deadlocker8.budgetmaster.transactions.TransactionService;
 import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService;
 import de.deadlocker8.budgetmaster.utils.Colors;
 import de.deadlocker8.budgetmaster.utils.LanguageType;
-import de.deadlocker8.budgetmaster.utils.Strings;
 import de.thecodelabs.utils.util.ColorUtils;
-import de.thecodelabs.utils.util.Localization;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -106,67 +104,6 @@ public class HelpersService
 		return Arrays.asList(LanguageType.values());
 	}
 
-	public String getDateString(DateTime date)
-	{
-		return date.toString(DateTimeFormat.forPattern("dd.MM.yy").withLocale(settingsRepository.findOne(0).getLanguage().getLocale()));
-	}
-
-	public String getDateStringWithoutYear(DateTime date)
-	{
-		return date.toString(DateTimeFormat.forPattern("dd.MM.").withLocale(settingsRepository.findOne(0).getLanguage().getLocale()));
-	}
-
-	public String getLongDateString(DateTime date)
-	{
-		return date.toString(DateTimeFormat.forPattern("dd.MM.yyyy").withLocale(settingsRepository.findOne(0).getLanguage().getLocale()));
-	}
-
-	public String getDateStringWithMonthAndYear(DateTime date)
-	{
-		return date.toString(DateTimeFormat.forPattern("MMMM yyyy").withLocale(settingsRepository.findOne(0).getLanguage().getLocale()));
-	}
-
-	public ArrayList<String> getWeekDays()
-	{
-		ArrayList<String> weekDays = new ArrayList<>();
-		weekDays.add(Localization.getString(Strings.SUNDAY));
-		weekDays.add(Localization.getString(Strings.MONDAY));
-		weekDays.add(Localization.getString(Strings.TUESDAY));
-		weekDays.add(Localization.getString(Strings.WEDNESDAY));
-		weekDays.add(Localization.getString(Strings.THURSDAY));
-		weekDays.add(Localization.getString(Strings.FRIDAY));
-		weekDays.add(Localization.getString(Strings.SATURDAY));
-		return weekDays;
-	}
-
-	public ArrayList<String> getMonthList()
-	{
-		ArrayList<String> monthNames = new ArrayList<>();
-		monthNames.add(Localization.getString(Strings.MONTH_JANUARY));
-		monthNames.add(Localization.getString(Strings.MONTH_FEBRUARY));
-		monthNames.add(Localization.getString(Strings.MONTH_MARCH));
-		monthNames.add(Localization.getString(Strings.MONTH_APRIL));
-		monthNames.add(Localization.getString(Strings.MONTH_MAY));
-		monthNames.add(Localization.getString(Strings.MONTH_JUNE));
-		monthNames.add(Localization.getString(Strings.MONTH_JULY));
-		monthNames.add(Localization.getString(Strings.MONTH_AUGUST));
-		monthNames.add(Localization.getString(Strings.MONTH_SEPTEMBER));
-		monthNames.add(Localization.getString(Strings.MONTH_OCTOBER));
-		monthNames.add(Localization.getString(Strings.MONTH_NOVEMBER));
-		monthNames.add(Localization.getString(Strings.MONTH_DECEMBER));
-		return monthNames;
-	}
-
-	public ArrayList<Integer> getYearList()
-	{
-		ArrayList<Integer> years = new ArrayList<>();
-		for(int i = 2000; i < 2100; i++)
-		{
-			years.add(i);
-		}
-		return years;
-	}
-
 	 // Replaces line breaks and tabs with spaces
 	public String getFlatText(String text)
 	{
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
index 9e9aa3f3d..0b7736c9b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
@@ -13,15 +13,6 @@ public class Strings
     //ACCOUNT
     public static final String ACCOUNT_DEFAULT_NAME = "account.default.name";
 
-    //WEEK_DAYS
-    public static final String MONDAY ="monday";
-    public static final String TUESDAY ="tuesday";
-    public static final String WEDNESDAY ="wednesday";
-    public static final String THURSDAY ="thursday";
-    public static final String FRIDAY ="friday";
-    public static final String SATURDAY ="saturday";
-    public static final String SUNDAY ="sunday";
-
     //MONTH_NAMES
     public static final String MONTH_JANUARY ="month.january";
     public static final String MONTH_FEBRUARY ="month.february";
diff --git a/src/main/resources/templates/helpers/globalDatePicker.ftl b/src/main/resources/templates/helpers/globalDatePicker.ftl
index d60a4b6d4..f6e20ae25 100644
--- a/src/main/resources/templates/helpers/globalDatePicker.ftl
+++ b/src/main/resources/templates/helpers/globalDatePicker.ftl
@@ -3,7 +3,7 @@
      <div class="container">
          <div class="section center-align">
              <a href="<@s.url '/previousMonth?target=${target}'/>" class="waves-effect text-color"><i class="material-icons icon-chevron">chevron_left</i></a>
-             <a href="#modalDate" class="waves-effect headline-date modal-trigger text-color datePicker-fixed-width">${helpers.getDateStringWithMonthAndYear(fullDate)}</a>
+             <a href="#modalDate" class="waves-effect headline-date modal-trigger text-color datePicker-fixed-width">${dateService.getDateStringWithMonthAndYear(fullDate)}</a>
              <a href="<@s.url '/nextMonth?target=${target}'/>" class="waves-effect text-color"><i class="material-icons icon-chevron">chevron_right</i></a>
              <a href="<@s.url '/today?target=${target}'/>" class="waves-effect text-color"><i class="material-icons icon-today">event</i></a>
          </div>
@@ -19,7 +19,7 @@
 
             <div id="global-datepicker-select-month">
                 <h4>${locale.getString("title.datepicker.month")}</h4>
-                <#assign montList = helpers.getMonthList()/>
+                <#assign montList = localizesMonthNames/>
                 <#assign currentMonth = montList[currentDate.getMonthOfYear() - 1]/>
                 <@datepickerGrid montList currentMonth/>
             </div>
@@ -68,7 +68,7 @@
     <script>
         <#assign monthNames = "">
         <#assign monthNamesShort = "">
-        <#list helpers.getMonthList() as monthName>
+        <#list localizesMonthNames as monthName>
             <#assign monthNames += "'" + monthName + "', ">
             <#assign monthNamesShort += "'" + monthName[0..2] + "', ">
         </#list>
@@ -76,13 +76,13 @@
         <#assign weekDays = "">
         <#assign weekDaysShort = "">
         <#assign weekDaysLetters = "">
-        <#list helpers.getWeekDays() as weekDay>
+        <#list localizedWeekdays as weekDay>
             <#assign weekDays += "'" + weekDay + "', ">
             <#assign weekDaysShort += "'" + weekDay[0..1] + "', ">
             <#assign weekDaysLetters += "'" + weekDay[0] + "', ">
         </#list>
 
-        monthNames = [${monthNames}];
+        monthNames = [${localizedMonthNames}];
         monthNamesShort = [${monthNamesShort}];
         weekDays = [${weekDays}];
         weekDaysShort = [${weekDaysShort}];
diff --git a/src/main/resources/templates/helpers/navbar.ftl b/src/main/resources/templates/helpers/navbar.ftl
index 97bc4a6d0..e1cc38334 100644
--- a/src/main/resources/templates/helpers/navbar.ftl
+++ b/src/main/resources/templates/helpers/navbar.ftl
@@ -98,7 +98,7 @@
     <#else>
         <div class="account-budget ${greenTextColor}">${helpers.getCurrencyString(accountBudget)}</div>
     </#if>
-    <div class="account-budget-date text-color">(${locale.getString("account.budget.asof")}: ${helpers.getDateString(helpers.getCurrentDate())})</div>
+    <div class="account-budget-date text-color">(${locale.getString("account.budget.asof")}: ${dateService.getDateStringNormal(helpers.getCurrentDate())})</div>
 </div>
 </#macro>
 
diff --git a/src/main/resources/templates/login.ftl b/src/main/resources/templates/login.ftl
index ba0be4d76..37122ac9e 100644
--- a/src/main/resources/templates/login.ftl
+++ b/src/main/resources/templates/login.ftl
@@ -68,6 +68,6 @@
         <!--  Scripts-->
         <#import "helpers/scripts.ftl" as scripts>
         <@scripts.scripts/>
-        <script>document.cookie = "currentDate=${helpers.getDateString(currentDate)}";</script>
+        <script>document.cookie = "currentDate=${dateService.getDateStringNormal(currentDate)}";</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/src/main/resources/templates/reports/reports.ftl b/src/main/resources/templates/reports/reports.ftl
index 91e073dae..84ce11ad1 100644
--- a/src/main/resources/templates/reports/reports.ftl
+++ b/src/main/resources/templates/reports/reports.ftl
@@ -25,7 +25,7 @@
                     <form name="NewReportSettings" action="<@s.url '/reports/generate'/>" method="post" onsubmit="return validateForm()">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                         <input type="hidden" name="ID" value="${reportSettings.getID()?c}"/>
-                        <input type="hidden" name="date" value="${helpers.getLongDateString(currentDate)}"/>
+                        <input type="hidden" name="date" value="${dateService.getLongDateString(currentDate)}"/>
 
                         <div class="row">
                             <div class="col s12 center-align">
@@ -115,6 +115,6 @@
         <script src="<@s.url '/js/reports.js'/>"></script>
         <script src="<@s.url '/js/globalDatePicker.js'/>"></script>
         <script src="<@s.url '/js/filter.js'/>"></script>
-        <script>document.cookie = "currentDate=${helpers.getDateString(currentDate)}";</script>
+        <script>document.cookie = "currentDate=${dateService.getDateStringNormal(currentDate)}";</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl
index 31910ed3f..faaf8c818 100644
--- a/src/main/resources/templates/settings/settings.ftl
+++ b/src/main/resources/templates/settings/settings.ftl
@@ -22,7 +22,7 @@
                     <form name="Settings" action="<@s.url '/settings/save'/>" method="post">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                         <input type="hidden" name="ID" value="${settings.getID()?c}">
-                        <input type="hidden" name="lastBackupReminderDate" value="${helpers.getLongDateString(settings.getLastBackupReminderDate())}">
+                        <input type="hidden" name="lastBackupReminderDate" value="${dateService.getLongDateString(settings.getLastBackupReminderDate())}">
 
                         <#-- password -->
                         <div class="row">
diff --git a/src/main/resources/templates/transactions/newTransactionMacros.ftl b/src/main/resources/templates/transactions/newTransactionMacros.ftl
index 5063e33db..9bf9976e1 100644
--- a/src/main/resources/templates/transactions/newTransactionMacros.ftl
+++ b/src/main/resources/templates/transactions/newTransactionMacros.ftl
@@ -120,9 +120,9 @@
     <div class="row">
         <div class="input-field col s12 m12 l8 offset-l2">
             <#if transaction.getDate()??>
-                <#assign startDate = helpers.getLongDateString(transaction.getDate())/>
+                <#assign startDate = dateService.getLongDateString(transaction.getDate())/>
             <#else>
-                <#assign startDate = helpers.getLongDateString(currentDate)/>
+                <#assign startDate = dateService.getLongDateString(currentDate)/>
             </#if>
 
             <input id="transaction-datepicker" type="text" class="datepicker" name="date" value="${startDate}">
@@ -293,9 +293,9 @@
 
 <#macro repeatingEndDate checked transaction currentDate>
     <#if checked>
-        <#global endDate = helpers.getLongDateString(transaction.getRepeatingOption().getEndOption().getValue())/>
+        <#global endDate = dateService.getLongDateString(transaction.getRepeatingOption().getEndOption().getValue())/>
     <#else>
-        <#global endDate = helpers.getLongDateString(currentDate)/>
+        <#global endDate = dateService.getLongDateString(currentDate)/>
     </#if>
 
     <script>
diff --git a/src/main/resources/templates/transactions/transactions.ftl b/src/main/resources/templates/transactions/transactions.ftl
index 35046e30a..8390f9bf8 100644
--- a/src/main/resources/templates/transactions/transactions.ftl
+++ b/src/main/resources/templates/transactions/transactions.ftl
@@ -53,7 +53,7 @@
                         <div class="hide-on-large-only">
                             <div class="row valign-wrapper transaction-row">
                                 <div class="col s3 center-align bold transaction-text">
-                                    ${helpers.getDateStringWithoutYear(transaction.date)}
+                                    ${dateService.getDateStringWithoutYear(transaction.date)}
                                 </div>
                                 <@transactionsMacros.transactionType transaction/>
                                 <@transactionsMacros.transactionButtons transaction/>
@@ -67,7 +67,7 @@
                         <div class="hide-on-med-and-down">
                             <div class="row valign-wrapper transaction-row">
                                 <div class="col l1 xl1 bold transaction-text">
-                                    ${helpers.getDateStringWithoutYear(transaction.date)}
+                                    ${dateService.getDateStringWithoutYear(transaction.date)}
                                 </div>
                                 <@transactionsMacros.transactionCategory transaction "left-align"/>
                                 <@transactionsMacros.transactionType transaction/>
@@ -97,6 +97,6 @@
         <script src="<@s.url '/js/transactions.js'/>"></script>
         <script src="<@s.url '/js/globalDatePicker.js'/>"></script>
         <script src="<@s.url '/js/filter.js'/>"></script>
-        <script>document.cookie = "currentDate=${helpers.getDateString(currentDate)}";</script>
+        <script>document.cookie = "currentDate=${dateService.getDateStringNormal(currentDate)}";</script>
     </body>
 </html>
-- 
GitLab