From a5092f9064c08f83a3cee64a12b3fd892a7b4d20 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 9 Feb 2025 19:53:59 +0100 Subject: [PATCH] fix CategoriesStats: compute mensuel average --- frontend/js/chart/debitAverage.js | 27 +++++++++++++++++++ frontend/js/chart/diffCreditDebit.js | 2 +- .../components/dashboard/CategoriesStats.vue | 13 ++++++--- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/frontend/js/chart/debitAverage.js b/frontend/js/chart/debitAverage.js index e984cb5..f1a2848 100644 --- a/frontend/js/chart/debitAverage.js +++ b/frontend/js/chart/debitAverage.js @@ -1,5 +1,18 @@ import {isInRange} from '../lib/dateFilter' +const getDate = (value) => { + const d = new Date(value) + + let month = d.getUTCMonth() + 1 + const year = d.getUTCFullYear() + + if (month < 10) { + month = `0${month}` + } + + return `${month}/${year}` +} + const compute = (transactions, dateFrom, dateTo, order) => { const emptyCategory = { id: -1, @@ -27,6 +40,8 @@ const compute = (transactions, dateFrom, dateTo, order) => { data[category.label] = { category: category, average: 0, + monthAverage: 0, + months: {}, count: 0, sum: 0, } @@ -34,10 +49,22 @@ const compute = (transactions, dateFrom, dateTo, order) => { ++data[category.label].count data[category.label].sum += transaction.debit + + const date = getDate(transaction.date) + + if (!Object.prototype.hasOwnProperty.call(data[category.label].months, date)) { + data[category.label].months[date] = 0 + } + + data[category.label].months[date] += transaction.debit }) for (let i in data) { data[i].average = data[i].sum / data[i].count + + const monthsValues = Object.values(data[i].months) + + data[i].monthAverage = monthsValues.reduce((a, b) => a + b, 0) / monthsValues.length } data = Object.values(data).sort((a, b) => { diff --git a/frontend/js/chart/diffCreditDebit.js b/frontend/js/chart/diffCreditDebit.js index 453fbb1..16e2745 100644 --- a/frontend/js/chart/diffCreditDebit.js +++ b/frontend/js/chart/diffCreditDebit.js @@ -37,7 +37,7 @@ const compute = (transactions, dateFrom, dateTo) => { return } - let date = getDate(transaction.date) + const date = getDate(transaction.date) if (!Object.prototype.hasOwnProperty.call(indexes, date)) { indexes[date] = labels.length diff --git a/frontend/js/components/dashboard/CategoriesStats.vue b/frontend/js/components/dashboard/CategoriesStats.vue index b14a0fd..9614461 100644 --- a/frontend/js/components/dashboard/CategoriesStats.vue +++ b/frontend/js/components/dashboard/CategoriesStats.vue @@ -21,6 +21,11 @@ class="text-end" >Somme totale + Montant moyen QuantitéTransactions @@ -44,6 +49,7 @@ > {{ renderEuro(item.sum) }} {{ renderEuro(item.average) }} + {{ renderEuro(item.monthAverage) }} {{ item.count }} @@ -75,8 +81,9 @@ import {renderCategory, renderEuro} from '../../lib/renderers' const order = ref(getStorage('dashboard:debitAverage:order', 'sum')) const orders = [ {value: 'sum', text: 'Somme total'}, - {value: 'average', text: 'Moyenne mensuelle'}, - {value: 'count', text: 'Quantité'}, + {value: 'average', text: 'Montant moyen'}, + {value: 'monthAverage', text: 'Moyenne mensuelle'}, + {value: 'count', text: 'Transactions'}, ] watch(order, (v) => saveStorage('dashboard:debitAverage:order', v))