From 11fab679845aef3e2fb936d8e3e68d18057b5ec5 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 12 Feb 2022 16:35:47 +0100
Subject: [PATCH] Fixed #672 - added new chart: average
 income/expenditures/rest per year

---
 .../budgetmaster/charts/DefaultCharts.java    |   5 +
 ...AverageIncomesAndExpendituresPerYearBar.js | 112 ++++++++++++++++++
 .../resources/languages/base_de.properties    |   2 +
 .../resources/languages/base_en.properties    |   2 +
 ...verageIncomesAndExpendituresPerYearBar.png | Bin 0 -> 15994 bytes
 5 files changed, 121 insertions(+)
 create mode 100644 src/main/resources/charts/AverageIncomesAndExpendituresPerYearBar.js
 create mode 100644 src/main/resources/static/images/charts/averageIncomesAndExpendituresPerYearBar.png

diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
index 21e44601e..eb2f9a398 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
@@ -58,6 +58,10 @@ public class DefaultCharts
 			getChartFromFile("charts/AverageTransactionAmountPerCategoryBar.js"),
 			ChartType.DEFAULT, 2, ChartDisplayType.BAR, ChartGroupType.NONE, "averageTransactionAmountPerCategory.png");
 
+	private static final Chart CHART_AVERAGE_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR = new Chart("charts.default.averageIncomesAndExpendituresPerYearBar",
+			getChartFromFile("charts/AverageIncomesAndExpendituresPerYearBar.js"),
+			ChartType.DEFAULT, 4, ChartDisplayType.BAR, ChartGroupType.YEAR, "averageIncomesAndExpendituresPerYearBar.png");
+
 	private DefaultCharts()
 	{
 	}
@@ -75,6 +79,7 @@ public class DefaultCharts
 		charts.add(CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR);
 		charts.add(CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BY_CATEGORIES);
 		charts.add(CHART_AVERAGE_TRANSACTION_AMOUNT_PER_CATEGORY);
+		charts.add(CHART_AVERAGE_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR);
 		return charts;
 	}
 
diff --git a/src/main/resources/charts/AverageIncomesAndExpendituresPerYearBar.js b/src/main/resources/charts/AverageIncomesAndExpendituresPerYearBar.js
new file mode 100644
index 000000000..df534b8ca
--- /dev/null
+++ b/src/main/resources/charts/AverageIncomesAndExpendituresPerYearBar.js
@@ -0,0 +1,112 @@
+/* This list will be dynamically filled with all the transactions between
+ * the start and and date you select on the "Show Chart" page
+ * and filtered according to your specified filter.
+ * An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:
+ * https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts
+ */
+var transactionData = [];
+
+// Note: All variables starting with "localized" are only available inside default charts.
+moment.locale(localizedLocale);
+
+var dates = [];
+var incomes = [];
+var incomeSums = [];
+var numberOfIncomes = [];
+var numberOfExpenditures = [];
+var expenditureSums = [];
+
+transactionData = transactionData.reverse();
+
+for(var i = 0; i < transactionData.length; i++)
+{
+    var transaction = transactionData[i];
+
+    // create new sums if year is not already in list
+    var date = moment(transaction.date).startOf('year').format('YYYY');
+    if(!dates.includes(date))
+    {
+        dates.push(date);
+        incomeSums.push(0);
+        numberOfIncomes.push(0);
+        expenditureSums.push(0);
+        numberOfExpenditures.push(0);
+    }
+
+    // add to income or expenditure sum
+    var amount = transaction.amount;
+    if(amount > 0)
+    {
+        var lastIndex = incomeSums.length - 1;
+        incomeSums[lastIndex] = incomeSums[lastIndex] + amount;
+        numberOfIncomes[lastIndex] = numberOfIncomes[lastIndex] + 1;
+    }
+    else
+    {
+        var lastIndex = expenditureSums.length - 1;
+        expenditureSums[lastIndex] = expenditureSums[lastIndex] + Math.abs(amount);
+        numberOfExpenditures[lastIndex] = numberOfExpenditures[lastIndex] + 1;
+    }
+}
+
+var incomeAverages = [];
+var expenditureAverages = [];
+
+for(let i = 0; i < dates.length; i++)
+{
+    var currentIncomeAverage = (incomeSums[i] / 100) / numberOfIncomes[i];
+    incomeAverages.push(currentIncomeAverage);
+
+    var currentExpenditureAverage = (expenditureSums[i] / 100) / numberOfExpenditures[i];
+    expenditureAverages.push(currentExpenditureAverage);
+}
+
+// Prepare your chart settings here (mandatory)
+var plotlyData = [
+    {
+        x: dates,
+        y: incomeAverages,
+        type: 'bar',
+        name: localizedData['traceName1']
+    },
+    {
+        x: dates,
+        y: expenditureAverages,
+        type: 'bar',
+        name: localizedData['traceName2']
+    }
+];
+
+// Add your Plotly layout settings here (optional)
+var plotlyLayout = {
+    title: {
+        text: localizedTitle
+    },
+    yaxis: {
+        title: localizedData['axisY'] + localizedCurrency,
+        rangemode: 'tozero',
+        tickformat: '.2f',
+        showline: true
+    },
+    xaxis: {
+
+    }
+};
+
+// Add your Plotly configuration settings here (optional)
+var plotlyConfig = {
+    showSendToCloud: false,
+    displaylogo: false,
+    showLink: false,
+    responsive: true,
+    displayModeBar: true,
+    toImageButtonOptions: {
+        format: 'png',
+        filename: 'BudgetMaster_chart_export',
+        height: 1080,
+        width: 1920,
+    }
+};
+
+// Don't touch this line
+Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
\ No newline at end of file
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index 759c10e31..70e0994e2 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -554,6 +554,8 @@ charts.default.incomesAndExpendituresPerYearByCategories=Eingaben/Ausgaben nach
 charts.default.incomesAndExpendituresPerYearByCategories.localization='{"label1": "Ausgaben", "label2": "Einnahmen"'}
 charts.default.averageTransactionAmountPerCategory=Durchschnittlicher Transaktionsbetrag pro Kategorie
 charts.default.averageTransactionAmountPerCategory.localization='{"label1": "Durchschnittlicher Transaktionsbetrag in"'}
+charts.default.averageIncomesAndExpendituresPerYearBar=Durchschnittliche Einnahmen/Ausgaben
+charts.default.averageIncomesAndExpendituresPerYearBar.localization='{"traceName1": "Einnahmen", "traceName2": "Ausgaben"', "axisY": "Durchschnittlicher Betrag in"'}
 
 chart.new.label.name=Name
 chart.new.label.script=Script
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index 668e2ee21..058a4d321 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -554,6 +554,8 @@ charts.default.incomesAndExpendituresPerYearByCategories=Incomes/Expenditures by
 charts.default.incomesAndExpendituresPerYearByCategories.localization='{"label1": "Expenditures", "label2": "Incomes"'}
 charts.default.averageTransactionAmountPerCategory=Average transaction amount per category
 charts.default.averageTransactionAmountPerCategory.localization='{"label1": "Average transaction amount in"'}
+charts.default.averageIncomesAndExpendituresPerYearBar=Average incomes/expenditures
+charts.default.averageIncomesAndExpendituresPerYearBar.localization='{"traceName1": "Incomes", "traceName2": "Expenditures"', "axisY": "Average amount in"'}
 
 chart.new.label.name=Name
 chart.new.label.script=Script
diff --git a/src/main/resources/static/images/charts/averageIncomesAndExpendituresPerYearBar.png b/src/main/resources/static/images/charts/averageIncomesAndExpendituresPerYearBar.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa26b0d9e14df12726e3e7dffef3f82be0a1b568
GIT binary patch
literal 15994
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
U+qHE%0|Nttr>mdKI;Vst05%xgc>n+a

literal 0
HcmV?d00001

-- 
GitLab