From 686fa3edf94d1f8e79b95fe2f34e464f4d5bb6b9 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 12 Jun 2021 18:31:57 +0200
Subject: [PATCH] #602 - new page for tags

---
 .../budgetmaster/services/EntityType.java     |  1 +
 .../budgetmaster/tags/TagController.java      | 30 ++++++++++
 .../budgetmaster/utils/Mappings.java          |  1 +
 .../resources/languages/base_de.properties    |  1 +
 .../resources/languages/base_en.properties    |  1 +
 .../resources/templates/helpers/navbar.ftl    |  1 +
 src/main/resources/templates/tags/tags.ftl    | 55 +++++++++++++++++++
 7 files changed, 90 insertions(+)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/tags/TagController.java
 create mode 100644 src/main/resources/templates/tags/tags.ftl

diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/EntityType.java b/src/main/java/de/deadlocker8/budgetmaster/services/EntityType.java
index 867f77f67..e1f3d8e8e 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/EntityType.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/EntityType.java
@@ -9,6 +9,7 @@ public enum EntityType
 	CHART("show_chart", "background-purple", ImportRequired.OPTIONAL),
 	REPORT("description", "background-green", ImportRequired.NONE),
 	CATEGORY("label", "background-orange", ImportRequired.REQUIRED),
+	TAGS("local_offer", "background-grey", ImportRequired.NONE),
 	STATISTICS("insert_chart", "background-grey", ImportRequired.NONE),
 	SETTINGS("settings", "background-red", ImportRequired.NONE),
 	IMAGE("image", "background-grey", ImportRequired.REQUIRED),
diff --git a/src/main/java/de/deadlocker8/budgetmaster/tags/TagController.java b/src/main/java/de/deadlocker8/budgetmaster/tags/TagController.java
new file mode 100644
index 000000000..a8fd65ab6
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/tags/TagController.java
@@ -0,0 +1,30 @@
+package de.deadlocker8.budgetmaster.tags;
+
+import de.deadlocker8.budgetmaster.controller.BaseController;
+import de.deadlocker8.budgetmaster.utils.Mappings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+
+@Controller
+@RequestMapping(Mappings.TAGS)
+public class TagController extends BaseController
+{
+	private final TagService tagService;
+
+	@Autowired
+	public TagController(TagService tagService)
+	{
+		this.tagService = tagService;
+	}
+
+	@GetMapping
+	public String tags(Model model)
+	{
+		model.addAttribute("tags", tagService.getAllEntitiesAsc());
+		return "tags/tags";
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java
index 10985ab6a..a2b8c9c05 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java
@@ -22,4 +22,5 @@ public final class Mappings
 	public static final String TEAPOT = "/418";
 	public static final String TEMPLATES = "/templates";
 	public static final String TRANSACTIONS = "/transactions";
+	public static final String TAGS = "/tags";
 }
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index 7df775cfb..ac5cf554d 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -189,6 +189,7 @@ menu.templates=Vorlagen
 menu.categories=Kategorien
 menu.charts=Diagramme
 menu.reports=Berichte
+menu.tags=Tags
 menu.statistics=Statistiken
 menu.settings=Einstellungen
 menu.settings.database=Datenbank
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index 29b9d04ac..7613b905a 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -190,6 +190,7 @@ menu.templates=Templates
 menu.categories=Categories
 menu.charts=Charts
 menu.reports=Reports
+menu.tags=Tags
 menu.statistics=Statistics
 menu.settings=Settings
 menu.settings.database=Database
diff --git a/src/main/resources/templates/helpers/navbar.ftl b/src/main/resources/templates/helpers/navbar.ftl
index 46562f0e3..8a70e5106 100644
--- a/src/main/resources/templates/helpers/navbar.ftl
+++ b/src/main/resources/templates/helpers/navbar.ftl
@@ -15,6 +15,7 @@
         <@itemWithIcon "charts" "/charts" locale.getString("menu.charts"), entityType.CHART.getIcon(), entityType.CHART.getColor(), activeID/>
         <@itemWithIcon "reports", "/reports", locale.getString("menu.reports"), entityType.REPORT.getIcon(), entityType.REPORT.getColor(), activeID/>
         <@itemWithIcon "categories", "/categories", locale.getString("menu.categories"), entityType.CATEGORY.getIcon(), entityType.CATEGORY.getColor(), activeID/>
+        <@itemWithIcon "tags", "/tags", locale.getString("menu.tags"), entityType.TAGS.getIcon(), entityType.TAGS.getColor(), activeID/>
         <@itemWithIcon "statistics", "/statistics", locale.getString("menu.statistics"), entityType.STATISTICS.getIcon(), entityType.STATISTICS.getColor(), activeID/>
         <@itemWithIcon "settings", "/settings", locale.getString("menu.settings"), entityType.SETTINGS.getIcon(), entityType.SETTINGS.getColor(), activeID/>
 
diff --git a/src/main/resources/templates/tags/tags.ftl b/src/main/resources/templates/tags/tags.ftl
new file mode 100644
index 000000000..f3553d6ce
--- /dev/null
+++ b/src/main/resources/templates/tags/tags.ftl
@@ -0,0 +1,55 @@
+<html>
+    <head>
+        <#import "../helpers/header.ftl" as header>
+        <@header.globals/>
+        <@header.header "BudgetMaster - ${locale.getString('menu.tags')}"/>
+        <#import "/spring.ftl" as s>
+    </head>
+    <@header.body>
+        <#import "../helpers/navbar.ftl" as navbar>
+        <@navbar.navbar "tags" settings/>
+
+        <main>
+            <div class="card main-card background-color">
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline"><i class="material-icons">local_offer</i> ${locale.getString("menu.tags")}</div>
+                    </div>
+                </div>
+
+                <@header.content>
+                    <div class="container">
+                        <#if tags?size == 0>
+                            <div class="headline center-align">${locale.getString("placeholder")}</div>
+                        <#else>
+                            <table class="bordered">
+                                <thead>
+                                    <tr>
+                                        <th>${locale.getString("category.new.label.name")}</th>
+                                        <th>${locale.getString("categories.usages")}</th>
+                                        <th>${locale.getString("categories.actions")}</th>
+                                    </tr>
+                                </thead>
+                                <#list tags as tag>
+                                    <tr>
+                                        <td>${tag.getName()} </td>
+                                        <td>
+                                            <a href="<@s.url '/search?searchCategory=true&searchText=' + tag.getName()/>" class="waves-effect waves-light text-default">?</a>
+                                        </td>
+                                        <td>
+                                            <@header.buttonFlat url='/search?searchCategory=true&searchText=' + tag.getName() icon='search' localizationKey='' classes="no-padding text-default"/>
+                                        </td>
+                                    </tr>
+                                </#list>
+                            </table>
+                        </#if>
+                    </div>
+                </@header.content>
+            </div>
+        </main>
+
+        <!--  Scripts-->
+        <#import "../helpers/scripts.ftl" as scripts>
+        <@scripts.scripts/>
+    </@header.body>
+</html>
-- 
GitLab