From fe6fd70fd831cb1923d29b29586be157dc92ae79 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 23 Jun 2019 15:11:26 +0200
Subject: [PATCH] #436 - functionality for editing existing charts

---
 .../budgetmaster/charts/ChartController.java  | 32 ++++++++++++++++++-
 src/main/resources/languages/_de.properties   |  2 ++
 src/main/resources/languages/_en.properties   |  2 ++
 src/main/resources/static/js/charts.js        |  6 ++++
 .../resources/templates/charts/manage.ftl     | 21 ++++--------
 5 files changed, 48 insertions(+), 15 deletions(-)
 create mode 100644 src/main/resources/static/js/charts.js

diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
index a77046be3..3d1445633 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
@@ -1,6 +1,5 @@
 package de.deadlocker8.budgetmaster.charts;
 
-import de.deadlocker8.budgetmaster.categories.Category;
 import de.deadlocker8.budgetmaster.controller.BaseController;
 import de.deadlocker8.budgetmaster.services.HelpersService;
 import de.deadlocker8.budgetmaster.settings.SettingsService;
@@ -84,4 +83,35 @@ public class ChartController extends BaseController
 
 		return "redirect:/charts/manage";
 	}
+
+	@RequestMapping("/charts/{ID}/requestDelete")
+	public String requestDeleteChart(Model model, @PathVariable("ID") Integer ID)
+	{
+		if(!isDeletable(ID))
+		{
+			return "redirect:/charts/manage";
+		}
+
+		model.addAttribute("charts", chartService.getRepository().findAllByOrderByNameAsc());
+		model.addAttribute("currentChart", chartService.getRepository().getOne(ID));
+		model.addAttribute("settings", settingsService.getSettings());
+		return "charts/manage";
+	}
+
+	@RequestMapping(value = "/charts/{ID}/delete")
+	public String deleteChart(Model model, @PathVariable("ID") Integer ID)
+	{
+		if(isDeletable(ID))
+		{
+			chartService.getRepository().delete(ID);
+		}
+
+		return "redirect:/charts/manage";
+	}
+
+	private boolean isDeletable(Integer ID)
+	{
+		Chart chartToDelete = chartService.getRepository().getOne(ID);
+		return chartToDelete != null && chartToDelete.getType() == ChartType.CUSTOM;
+	}
 }
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index 80bd5ba2b..a3c483b4a 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -93,6 +93,8 @@ info.button.account.delete=Konto und Buchungen l
 info.title.transaction.delete=Buchung l�schen
 info.text.transaction.delete=M�chtest du die Buchung "{0}" wirklich unwiderruflich l�schen?
 info.text.transaction.repeating.delete=M�chtest du die Buchung "{0}" wirklich unwiderruflich l�schen? <br>Hinweis: Es handelt sich um eine wiederholende Buchung. Beim L�schen dieser Buchung werden alle zugeh�rigen Wiederholungen ebenfalls gel�scht!
+info.title.chart.delete=Diagramm l�schen
+info.text.chart.delete=M�chtest du das Diagramm "{0}" wirklich unwiderruflich l�schen?
 
 info.title.database.delete=Datenbank l�schen
 info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gel�scht werden?<br>Hinweis: Beim L�schen der Datenbank werden alle Buchungen, Kategorien und Konten unwiderruflich gel�scht.
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index 61f06b1a5..a0778df47 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -93,6 +93,8 @@ info.button.account.delete=Delete Account and Transactions
 info.title.transaction.delete=Delete Entry
 info.text.transaction.delete=Do you really want to delete the entry "{0}"? This can''t be undone.
 info.text.transaction.repeating.delete=Do you really want to delete the entry "{0}"? This can''t be undone.<br>Note: This transaction is a repeating transaction. Deleting this transaction will delete all related occurrences too!
+info.title.chart.delete=Delete Chart
+info.text.chart.delete=Do you really want to delete the chart "{0}"?
 
 info.title.database.delete=Delete Database
 info.header.text.database.delete=Do you really want to delete the database? This can''t be undone.<br>Note: Deleting the database will delete all transactions, categories and accounts permanently.
diff --git a/src/main/resources/static/js/charts.js b/src/main/resources/static/js/charts.js
new file mode 100644
index 000000000..e9b6a1063
--- /dev/null
+++ b/src/main/resources/static/js/charts.js
@@ -0,0 +1,6 @@
+$( document ).ready(function() {
+    if($("#modalConfirmDelete").length)
+    {
+        $('#modalConfirmDelete').modal('open');
+    }
+});
\ No newline at end of file
diff --git a/src/main/resources/templates/charts/manage.ftl b/src/main/resources/templates/charts/manage.ftl
index 95bd0bc3a..a446156c4 100644
--- a/src/main/resources/templates/charts/manage.ftl
+++ b/src/main/resources/templates/charts/manage.ftl
@@ -55,24 +55,16 @@
                 </div>
             </div>
 
-            <#if currentCategory??>
+            <#if currentChart??>
                 <!-- confirm delete modal -->
-                <div id="modalConfirmDelete" class="modal categoryDeleteModal background-color">
+                <div id="modalConfirmDelete" class="modal background-color">
                     <div class="modal-content">
-                        <h4>${locale.getString("info.title.category.delete")}</h4>
-                        <p>${locale.getString("info.text.category.delete", currentCategory.name)}</p>
-                        <p>${locale.getString("info.text.category.delete.move")}</p>
-
-                        <form name="DestinationCategory" id="formDestinationCategory" action="<@s.url '/categories/${currentCategory.ID?c}/delete'/>" method="post">
-                            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-                            <#import "../helpers/validation.ftl" as validation>
-                            <@newTransactionMacros.categorySelect availableCategories preselectedCategory "col s12 m12 l8 offset-l2" locale.getString("info.title.category.delete.move")/>
-                        </form>
+                        <h4>${locale.getString("info.title.chart.delete")}</h4>
+                        <p>${locale.getString("info.text.chart.delete", currentChart.getName())}</p>
                     </div>
-
                     <div class="modal-footer background-color">
-                        <a href="<@s.url '/categories'/>" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a>
-                        <a id="buttonDeleteCategory" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("delete")}</a>
+                        <a href="<@s.url '/charts/manage'/>" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a>
+                        <a href="<@s.url '/charts/${currentChart.getID()?c}/delete'/>" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("info.title.chart.delete")}</a>
                     </div>
                 </div>
             </#if>
@@ -80,5 +72,6 @@
 
         <#import "../helpers/scripts.ftl" as scripts>
         <@scripts.scripts/>
+        <script src="<@s.url '/js/charts.js'/>"></script>
     </body>
 </html>
\ No newline at end of file
-- 
GitLab