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, label: 'Sans catégorie', color: '#cccccc', } let data = {} if (!order) { order = 'sum' } transactions.forEach((transaction) => { if (transaction.debit === 0) { return } if (!isInRange(transaction.date, dateFrom, dateTo)) { return } let category = transaction.category ?? emptyCategory if (!Object.hasOwn(data, category.label)) { data[category.label] = { category: category, average: 0, monthAverage: 0, months: {}, count: 0, sum: 0, } } ++data[category.label].count data[category.label].sum += transaction.debit const date = getDate(transaction.date) if (!Object.hasOwn(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) => { if (a[order] < b[order]) { return 1 } if (a[order] > b[order]) { return -1 } return 0 }) return data } export { compute }