From aac7228bd91d3adfc953d9c0ac2482d9aeb878b1 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 16 Apr 2018 20:02:10 +0200
Subject: [PATCH] #297 - added basic account select to navbar; added account
 page (empty) and item to navbar

---
 .../controller/DatePickerController.java      |  6 -----
 .../controller/EmptyPageController.java       |  7 ++++++
 .../budgetmaster/entities/Account.java        | 14 +++++++++++
 .../repositories/AccountRepository.java       |  2 ++
 .../budgetmaster/services/HelpersService.java | 24 +++++++++++++++----
 src/main/resources/languages/_de.properties   |  2 ++
 src/main/resources/languages/_en.properties   |  2 ++
 src/main/resources/static/css/style.css       |  8 +++++++
 src/main/resources/static/js/datePicker.js    |  2 --
 src/main/resources/static/js/main.js          |  2 ++
 src/main/resources/static/js/payments.js      |  2 --
 src/main/resources/templates/emptyPage.ftl    |  1 +
 src/main/resources/templates/navbar.ftl       | 13 ++++++++++
 13 files changed, 71 insertions(+), 14 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
index 822645d31..c7cdfb79b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java
@@ -1,24 +1,18 @@
 package de.deadlocker8.budgetmaster.controller;
 
-import de.deadlocker8.budgetmaster.entities.CategoryType;
-import de.deadlocker8.budgetmaster.entities.Payment;
 import de.deadlocker8.budgetmaster.entities.Settings;
-import de.deadlocker8.budgetmaster.repositories.PaymentRepository;
 import de.deadlocker8.budgetmaster.repositories.SettingsRepository;
 import de.deadlocker8.budgetmaster.services.HelpersService;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 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.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
-import java.util.List;
 
 
 @Controller
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java
index da1b03012..178217dee 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java
@@ -8,6 +8,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
 @Controller
 public class EmptyPageController extends BaseController
 {
+	@RequestMapping("/accounts")
+	public String accounts(Model model)
+	{
+		model.addAttribute("active", "accounts");
+		return "emptyPage";
+	}
+
 	@RequestMapping("/reports")
 	public String reports(Model model)
 	{
diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
index 6610067be..9a5cad67b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Account.java
@@ -19,9 +19,12 @@ public class Account
 	@OneToMany(mappedBy = "account", fetch = FetchType.LAZY)
 	private List<Payment> referringPayments;
 
+	private boolean isSelected;
+
 	public Account(String name)
 	{
 		this.name = name;
+		this.isSelected = false;
 	}
 
 	public Account()
@@ -58,6 +61,16 @@ public class Account
 		this.referringPayments = referringPayments;
 	}
 
+	public boolean isSelected()
+	{
+		return isSelected;
+	}
+
+	public void setSelected(boolean selected)
+	{
+		isSelected = selected;
+	}
+
 	@Override
 	public String toString()
 	{
@@ -65,6 +78,7 @@ public class Account
 				"ID=" + ID +
 				", name='" + name + '\'' +
 				", referringPayments=" + referringPayments +
+				", isSelected=" + isSelected +
 				'}';
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java b/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java
index 01cba0e31..a04028294 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/repositories/AccountRepository.java
@@ -11,4 +11,6 @@ public interface AccountRepository extends JpaRepository<Account, Integer>
 	List<Account> findAllByOrderByNameAsc();
 
 	Account findByName(String name);
+
+	Account findByIsSelected(boolean isSelected);
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
index 8af33d685..ebf22fe0c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
@@ -1,7 +1,9 @@
 package de.deadlocker8.budgetmaster.services;
 
+import de.deadlocker8.budgetmaster.entities.Account;
 import de.deadlocker8.budgetmaster.entities.Settings;
 import de.deadlocker8.budgetmaster.entities.Tag;
+import de.deadlocker8.budgetmaster.repositories.AccountRepository;
 import de.deadlocker8.budgetmaster.repositories.SettingsRepository;
 import de.deadlocker8.budgetmaster.repositories.TagRepository;
 import de.deadlocker8.budgetmaster.utils.Colors;
@@ -29,10 +31,13 @@ public class HelpersService
 
 	@Autowired
 	private TagRepository tagRepository;
-	
+
+	@Autowired
+	private AccountRepository accountRepository;
+
 	public String getCurrencyString(int amount)
 	{
-		return getCurrencyString(amount/100.0);
+		return getCurrencyString(amount / 100.0);
 	}
 
 	public String getCurrencyString(double amount)
@@ -43,7 +48,7 @@ public class HelpersService
 		format.setMinimumFractionDigits(2);
 		return String.valueOf(format.format(amount)) + " " + settingsRepository.findOne(0).getCurrency();
 	}
-	
+
 	public String getURLEncodedString(String input)
 	{
 		try
@@ -111,9 +116,10 @@ public class HelpersService
 		}
 		return years;
 	}
-	
+
 	/**
 	 * Replaces line breaks and tabs with spaces
+	 *
 	 * @param text
 	 * @return String
 	 */
@@ -152,4 +158,14 @@ public class HelpersService
 	{
 		return tagRepository.findAllByOrderByNameAsc();
 	}
+
+	public List<Account> getAllAccounts()
+	{
+		return accountRepository.findAllByOrderByNameAsc();
+	}
+
+	public Account getCurrentAccount()
+	{
+		return accountRepository.findByIsSelected(true);
+	}
 }
\ No newline at end of file
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index 89eed348f..26afbed66 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -42,6 +42,7 @@ title.database.export=Datenbank exportieren
 title.database.import=Datenbank importieren
 title.datepicker=Datum w�hlen
 title.tags=Das Tag-Eingabefeld
+title.account=Konto
 
 # LOAD
 load.charts=Lade Diagramme...
@@ -299,6 +300,7 @@ menu.reports=Berichte
 menu.settings=Einstellungen
 menu.about=�ber
 menu.logout=Logout
+menu.accounts=Konten
 
 category.new.label.name=Name
 
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index a5afdd46a..e49c5c03d 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -42,6 +42,7 @@ title.database.export=Export Database
 title.database.import=Import Database
 title.datepicker=Choose date
 title.tags=The Tag-Inputfield
+title.account=Account
 
 # LOAD
 load.charts=Loading Charts...
@@ -299,6 +300,7 @@ menu.reports=Reports
 menu.settings=Settings
 menu.about=About
 menu.logout=Logout
+menu.accounts=Accounts
 
 category.new.label.name=Name
 
diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css
index d17367662..fb6d43f2b 100644
--- a/src/main/resources/static/css/style.css
+++ b/src/main/resources/static/css/style.css
@@ -34,6 +34,10 @@ main {
     background-color: #5cb85c;
 }
 
+.budgetmaster-dark-green {
+    background-color: #468C46;
+}
+
 .budgetmaster-red {
     background-color: #D82C29;
 }
@@ -164,6 +168,10 @@ main {
     margin: 0 0 0 32px !important;
 }
 
+.account-select-padding {
+    padding: 0 32px;
+}
+
 .no-padding {
     padding: 0;
 }
diff --git a/src/main/resources/static/js/datePicker.js b/src/main/resources/static/js/datePicker.js
index 78044a363..ff6341411 100644
--- a/src/main/resources/static/js/datePicker.js
+++ b/src/main/resources/static/js/datePicker.js
@@ -1,6 +1,4 @@
 $(document).ready(function () {
-    $('select').material_select();
-
     $("#buttonChooseDate").click(function () {
         var month = $("#selectMonth").val();
         var year = $("#selectYear").val();
diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js
index 1b57dd9bb..e7293bc16 100644
--- a/src/main/resources/static/js/main.js
+++ b/src/main/resources/static/js/main.js
@@ -4,6 +4,8 @@ $( document ).ready(function() {
     });
 
     $('.modal').modal();
+
+    $('select').material_select();
 });
 
 function addClass(element, className)
diff --git a/src/main/resources/static/js/payments.js b/src/main/resources/static/js/payments.js
index 7f3ac3864..78a7cea6c 100644
--- a/src/main/resources/static/js/payments.js
+++ b/src/main/resources/static/js/payments.js
@@ -1,8 +1,6 @@
 $( document ).ready(function() {
     $('#modalConfirmDelete').modal('open');
 
-    $('select').material_select();
-
     if($(".datepicker").length)
     {
         $('.datepicker').pickadate({
diff --git a/src/main/resources/templates/emptyPage.ftl b/src/main/resources/templates/emptyPage.ftl
index 8ef6c707a..76c4182eb 100644
--- a/src/main/resources/templates/emptyPage.ftl
+++ b/src/main/resources/templates/emptyPage.ftl
@@ -13,5 +13,6 @@
         <!--  Scripts-->
         <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
         <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
+        <script src="/js/main.js"></script>
     </body>
 </html>
\ No newline at end of file
diff --git a/src/main/resources/templates/navbar.ftl b/src/main/resources/templates/navbar.ftl
index 8ad8893a7..9e825a694 100644
--- a/src/main/resources/templates/navbar.ftl
+++ b/src/main/resources/templates/navbar.ftl
@@ -3,7 +3,10 @@
     <ul id="slide-out" class="side-nav fixed">
         <@itemLogo/>
         <@itemDivider/>
+        <@itemAccountSelect/>
+        <@itemDivider/>
         <@itemWithIcon "home", "/", locale.getString("menu.home"), "home", "budgetmaster-blue", activeID/>
+        <@itemWithIcon "accounts", "/accounts", locale.getString("menu.accounts"), "account_balance", "budgetmaster-dark-green", activeID/>
         <@itemWithIcon "payments", "/payments", locale.getString("menu.payments"), "list", "budgetmaster-baby-blue", activeID/>
         <@subListStart "chart" locale.getString("menu.charts"), "show_chart" "budgetmaster-purple", activeID/>
             <@itemPlain "chartCategories", "", locale.getString("menu.charts.chartCategories"), activeID/>
@@ -35,6 +38,16 @@
     <li><div class="divider no-margin"></div></li>
 </#macro>
 
+<#macro itemAccountSelect>
+<div class="input-field account-select-padding">
+    <select id="selectAccount">
+        <#list helpers.getAllAccounts() as account>
+            <option <#if account.isSelected()>selected</#if> value="${account.getName()}">${account.getName()}</option>
+        </#list>
+    </select>
+</div>
+</#macro>
+
 <#macro itemPlain ID link text activeID>
     <li <#if activeID == ID>class="active"</#if>><a href="${link}" class="waves-effect"><span class="nav-margin">${text}</span></a></li>
 </#macro>
-- 
GitLab