From 4749e1d274dee3cd85b7b3a235d2e4d903be7985 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 18 Jul 2021 14:05:43 +0200
Subject: [PATCH] #585 - send selected display type, group type and chart to
 server

---
 .../budgetmaster/charts/ChartSettings.java    |  33 ++++-
 src/main/resources/static/js/charts.js        |   7 +-
 .../resources/templates/charts/charts.ftl     | 127 +++++++++---------
 3 files changed, 99 insertions(+), 68 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java
index e5ef9a4ce..16ed2f4f1 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java
@@ -7,6 +7,9 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 public class ChartSettings
 {
+	private ChartDisplayType displayType;
+	private ChartGroupType groupType;
+
 	private int chartID;
 	@DateTimeFormat(pattern = "dd.MM.yyyy")
 	private DateTime startDate;
@@ -16,21 +19,43 @@ public class ChartSettings
 
 	public static ChartSettings getDefault(int chartID, FilterConfiguration filterConfiguration)
 	{
-		return new ChartSettings(chartID, DateTime.now().withDayOfMonth(1), DateTime.now().dayOfMonth().withMaximumValue(), filterConfiguration);
+		return new ChartSettings(ChartDisplayType.BAR, ChartGroupType.MONTH, chartID, DateTime.now().withDayOfMonth(1), DateTime.now().dayOfMonth().withMaximumValue(), filterConfiguration);
 	}
 
 	public ChartSettings()
 	{
 	}
 
-	public ChartSettings(int chartID, DateTime startDate, DateTime endDate, FilterConfiguration filterConfiguration)
+	public ChartSettings(ChartDisplayType displayType, ChartGroupType groupType, int chartID, DateTime startDate, DateTime endDate, FilterConfiguration filterConfiguration)
 	{
+		this.displayType = displayType;
+		this.groupType = groupType;
 		this.chartID = chartID;
 		this.startDate = startDate;
 		this.endDate = endDate;
 		this.filterConfiguration = filterConfiguration;
 	}
 
+	public ChartDisplayType getDisplayType()
+	{
+		return displayType;
+	}
+
+	public void setDisplayType(ChartDisplayType displayType)
+	{
+		this.displayType = displayType;
+	}
+
+	public ChartGroupType getGroupType()
+	{
+		return groupType;
+	}
+
+	public void setGroupType(ChartGroupType groupType)
+	{
+		this.groupType = groupType;
+	}
+
 	public int getChartID()
 	{
 		return chartID;
@@ -75,7 +100,9 @@ public class ChartSettings
 	public String toString()
 	{
 		return "ChartSettings{" +
-				"chartID=" + chartID +
+				"displayType=" + displayType +
+				", groupType=" + groupType +
+				", chartID=" + chartID +
 				", startDate=" + startDate +
 				", endDate=" + endDate +
 				", filterConfiguration=" + filterConfiguration +
diff --git a/src/main/resources/static/js/charts.js b/src/main/resources/static/js/charts.js
index 6a25b214b..50c563859 100644
--- a/src/main/resources/static/js/charts.js
+++ b/src/main/resources/static/js/charts.js
@@ -91,20 +91,23 @@ $(document).ready(function()
     $('.button-display-type').click(function()
     {
         toggleChartTypeButtons('button-display-type', this);
+        document.getElementsByName('displayType')[0].value = this.dataset.value;
         filterChartPreviews();
     });
 
     $('.button-group-type').click(function()
     {
         toggleChartTypeButtons('button-group-type', this);
+        document.getElementsByName('groupType')[0].value = this.dataset.value;
         filterChartPreviews();
     });
 
-    $('.chart-preview').click(function()
+    $('.chart-preview-column').click(function()
     {
         unsetActiveChartPreview();
 
-        this.classList.toggle('active', true);
+        this.querySelector('.chart-preview').classList.toggle('active', true);
+        document.getElementsByName('chartID')[0].value = this.dataset.id;
     });
 
     filterChartPreviews();
diff --git a/src/main/resources/templates/charts/charts.ftl b/src/main/resources/templates/charts/charts.ftl
index 0dd1280b3..079e23895 100644
--- a/src/main/resources/templates/charts/charts.ftl
+++ b/src/main/resources/templates/charts/charts.ftl
@@ -29,40 +29,46 @@
 <#--                    <div class="center-align"><@header.buttonLink url='/charts/manage' icon='edit' localizationKey='home.menu.charts.action.manage'/></div>-->
 <#--                    <br>-->
 
-                    <div class="container">
-                        <div class="row hide-on-small-and-down">
-                            <div class="col s12 center-align">
-                                <#list displayTypes as displayType>
-                                    <@chartTypeButton item=displayType buttonClass="button-display-type" initialItem=initialDisplayType/>
-                                </#list>
+                    <form name="NewChartSettings" action="<@s.url '/charts'/>" method="post">
+                        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
+
+                        <div class="container">
+                            <div class="row hide-on-small-and-down">
+                                <div class="col s12 center-align">
+                                    <#list displayTypes as displayType>
+                                        <@chartTypeButton item=displayType buttonClass="button-display-type" initialItem=initialDisplayType/>
+                                    </#list>
+                                </div>
                             </div>
                         </div>
-                    </div>
+                        <input type="hidden" name="displayType" value="${initialDisplayType.name()}">
 
-                    <div class="container">
-                        <div class="row hide-on-small-and-down">
-                            <div class="col s12 center-align">
-                                <#list groupTypes as groupType>
-                                    <@chartTypeButton item=groupType buttonClass="button-group-type" initialItem=initialGroupType/>
-                                </#list>
+                        <div class="container">
+                            <div class="row hide-on-small-and-down">
+                                <div class="col s12 center-align">
+                                    <#list groupTypes as groupType>
+                                        <@chartTypeButton item=groupType buttonClass="button-group-type" initialItem=initialGroupType/>
+                                    </#list>
+                                </div>
                             </div>
                         </div>
-                    </div>
+                        <input type="hidden" name="groupType" value="${initialGroupType.name()}">
 
-                    <div class="container">
-                        <div class="row">
-                            <#list charts as chart>
-                                <@chartPreview chart/>
-                            </#list>
+                        <div class="container">
+                            <div class="row">
+                                <#list charts as chart>
+                                    <@chartPreview chart/>
+                                </#list>
+                            </div>
                         </div>
-                    </div>
+                        <input type="hidden" name="chartID" value="">
 
-                    <div class="container">
-                        <div class="row">
-                            <div class="col s12">
-                                <div class="card" id="chart-date-card">
-                                    <div class="card-content">
-                                           <div class="row">
+                        <div class="container">
+                            <div class="row">
+                                <div class="col s12">
+                                    <div class="card" id="chart-date-card">
+                                        <div class="card-content">
+                                            <div class="row">
                                                 <div class="input-field col s6 m6 l4 offset-l2">
                                                     <#assign startDate = dateService.getLongDateString(chartSettings.getStartDate())/>
 
@@ -86,7 +92,7 @@
                                                             <td class="quick-date" data-quick="2">${locale.getString("chart.quick.this.year")}</td>
                                                             <td class="quick-date" data-quick="3">${locale.getString("chart.quick.all")}</td>
                                                         </tr>
-                                                         <tr>
+                                                        <tr>
                                                             <td class="quick-date" data-quick="4">${locale.getString("chart.quick.last.week")}</td>
                                                             <td class="quick-date" data-quick="5">${locale.getString("chart.quick.last.month")}</td>
                                                             <td class="quick-date" data-quick="6">${locale.getString("chart.quick.last.year")}</td>
@@ -99,53 +105,48 @@
                                                             <td class="quick-date" data-quick="11">${locale.getString("chart.quick.until.today")}</td>
                                                         </tr>
                                                     </table>
-                                                 </div>
-                                            <div class="col s12 m12 l8 offset-l2 no-margin-top quick-date-container">
-                                            </div>
+                                                </div>
+                                                <div class="col s12 m12 l8 offset-l2 no-margin-top quick-date-container">
+                                                </div>
 
-                                            <script>
-                                                startDate = "${startDate}".split(".");
-                                                startDate = new Date(startDate[2], startDate[1] - 1, startDate[0]);
-                                                endDate = "${endDate}".split(".");
-                                                endDate = new Date(endDate[2], endDate[1] - 1, endDate[0]);
-                                            </script>
+                                                <script>
+                                                    startDate = "${startDate}".split(".");
+                                                    startDate = new Date(startDate[2], startDate[1] - 1, startDate[0]);
+                                                    endDate = "${endDate}".split(".");
+                                                    endDate = new Date(endDate[2], endDate[1] - 1, endDate[0]);
+                                                </script>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
                             </div>
                         </div>
-                    </div>
 
-                    <div class="container">
-                        <div class="row">
-                             <div class="col s12 no-margin-top center-align">
-                                 <ul class="collapsible">
-                                    <li>
-                                      <div class="collapsible-header"><i class="fas fa-filter"></i>Filter</div>
-                                      <div class="collapsible-body"><@filterMacros.filterModalContent chartSettings.getFilterConfiguration() "filterConfiguration"/></div>
-                                    </li>
-                                </ul>
+                        <div class="container">
+                            <div class="row">
+                                <div class="col s12 no-margin-top center-align">
+                                    <ul class="collapsible">
+                                        <li>
+                                            <div class="collapsible-header"><i class="fas fa-filter"></i>Filter</div>
+                                            <div class="collapsible-body"><@filterMacros.filterModalContent chartSettings.getFilterConfiguration() "filterConfiguration"/></div>
+                                        </li>
+                                    </ul>
+                                </div>
                             </div>
                         </div>
-                    </div>
 
-                    <div class="container">
-                        <form name="NewChartSettings" action="<@s.url '/charts'/>" method="post">
-                            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
+                        <@filterMacros.filterModalCharts chartSettings.getFilterConfiguration()/>
 
-                            <@filterMacros.filterModalCharts chartSettings.getFilterConfiguration()/>
-
-                            <#-- buttons -->
-                            <div class="row center-align">
-                                <div class="col s12">
-                                    <button class="btn waves-effect waves-light background-blue" type="submit"
-                                            name="buttonSave">
-                                        <i class="material-icons left">show_chart</i>${locale.getString("chart.show")}
-                                    </button>
-                                </div>
+                        <#-- buttons -->
+                        <div class="row center-align">
+                            <div class="col s12">
+                                <button class="btn waves-effect waves-light background-blue" type="submit"
+                                        name="buttonSave">
+                                    <i class="material-icons left">show_chart</i>${locale.getString("chart.show")}
+                                </button>
                             </div>
-                        </form>
-                    </div>
+                        </div>
+                    </form>
 
                     <div class="container-chart">
                         <#if containerID??>
@@ -276,7 +277,7 @@
 </#macro>
 
 <#macro chartPreview chart>
-    <div class="col s6 m4 l3 center-align chart-preview-column" data-display-type="${chart.getDisplayType()}" data-group-type="${chart.getGroupType()}">
+    <div class="col s6 m4 l3 center-align chart-preview-column" data-display-type="${chart.getDisplayType()}" data-group-type="${chart.getGroupType()}" data-id="${chart.getID()?c}">
         <div class="card chart-preview background-grey-dark">
             <div class="card-image">
                 <img src="<@s.url '/images/charts/' + chart.getPreviewImageFileName()!"placeholder.png"/>">
-- 
GitLab