From 7465345141c6d7079e3ebafbb025bcdd56054f96 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 27 Jul 2019 14:30:46 +0200
Subject: [PATCH] #437 - fixed duplicated legend entries

---
 .../budgetmaster/charts/DefaultCharts.java           |  2 +-
 .../IncomesAndExpendituresPerMonthByCategories.js    | 12 ++++++++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
index 684c1862f..3ea353f74 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
@@ -35,7 +35,7 @@ public class DefaultCharts
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BY_CATEGORIES = new Chart("charts.default.incomesAndExpendituresPerMonthByCategories",
 		getChartFromFile("charts/IncomesAndExpendituresPerMonthByCategories.js"),
-		ChartType.DEFAULT, 3);
+		ChartType.DEFAULT, 4);
 
 
 	public static List<Chart> getDefaultCharts()
diff --git a/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js b/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
index 0e0066378..e83cd0452 100644
--- a/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
+++ b/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
@@ -12,12 +12,14 @@ transactionData = transactionData.reverse();
 
 moment.locale('de');
 
-
 const NAME = 0;
 const COLOR = 1;
 const INCOME = 2;
 const EXPENDITURE = 3;
 
+var categoryNames = Array.from(new Set(transactionData.map(t => t.category.name)));
+var categoryColors = Array.from(new Set(transactionData.map(t => t.category.color)));
+
 var dates = [];
 var values = [];
 
@@ -25,12 +27,16 @@ for(var i = 0; i < transactionData.length; i++)
 {
     var transaction = transactionData[i];
 
+    var date = moment(transaction.date).startOf('month').format('MMM YY');
     var date = moment(transaction.date).startOf('month').format('MMM YY');
     if(!dates.includes(date))
     {
         dates.push(date);
         values.push([
-            [], [], [], []  // NAME, COLOR, INCOME, EXPENDITURE
+            categoryNames, // NAME
+            categoryColors, // COLOR
+            new Array(categoryNames.length).fill(0), // INCOME
+            new Array(categoryNames.length).fill(0)  // EXPENDITURE
         ]);
     }
 
@@ -122,6 +128,8 @@ for(var i = 0; i < dates.length; i++)
             name: currentValues[NAME][j],
             xaxis: 'x' + (i + 1),  // for grouping incomes and expenditure bar by month
             barmode: 'stack',
+            showlegend: i === 0,
+            legendgroup: currentValues[NAME][j],
             marker: {
                 color: currentValues[COLOR][j]  // use the category's color
             }
-- 
GitLab