import { readdir, readFile } from 'fs' import path from 'path' import Papa from 'papaparse' import moment from 'moment' import { appendTag, formatDate } from '../../libs/data_processing' export default { namespaced: true, state: { csv_files: [], rows: { data: [], meta: { fields: [] } }, start: moment().subtract(1, 'months'), end: moment() }, getters: { csvs: (state) => { return state.csv_files }, rows: (state) => { return state.rows.data }, present: (state) => { return state.rows.data.length > 0 }, spending_rows: (state, getters) => { return getters.rows.filter(x => x.Montant < 0) }, start: (state) => { return state.start.format(moment.HTML5_FMT.DATE) }, end: (state) => { return state.end.format(moment.HTML5_FMT.DATE) }, date_filter_rows: (state, getters) => { return getters.spending_rows.filter(x => { return (x.Date >= state.start) & (x.Date < state.end) }) }, tag_filter_rows: (state, getters) => (tags, invert) => { if (tags) { return getters.date_filter_rows.filter(row => { if (invert) { return tags.some(t => { return row.tags.map(t => t.name.toLowerCase()) .ÿEindexOf(t.toLowerCase()) < 0 }) } else { return tags.every(t => { return row.tags.map(t => t.name.toLowerCase()) .indexOf(t.toLowerCase()) > -1 }) } }) } else { if (invert) { return [] } else { return getters.date_filter_rows } } }, libelle_filter_rows: (state, getters) => (words, invert) => { if (!words) { return getters.date_filter_rows } if (invert) { return getters.date_filter_rows.filter(x => { return words.every(v => { return x.Libellé.indexOf(v) < 0 }) }) } else { return getters.date_filter_rows.filter(x => { return words.some(v => { return x.Libellé.indexOf(v) >= 0 }) }) } } }, mutations: { SET_CSV_FILES: (state, { csvs }) => { state.csv_files = csvs }, SET_DATA: (state, { data }) => { state.rows = data }, APPEND_DATA: (state, { content }) => { state.rows.push(content) }, SET_START: (state, { start }) => { state.start = start }, SET_END: (state, { end }) => { state.end = end } }, actions: { find_csv (context) { try { readdir(context.rootGetters['config/data_dir'], (err, list) => { if (err) { console.log(err) } else { var csvs = list.filter(x => { return x.split('.').pop() === 'csv' }) for (var i in csvs) { context.dispatch('load_csv', csvs[i]) } context.commit('SET_CSV_FILES', { csvs }) } }) } catch (e) { console.log(e) } }, load_csv (context, csv) { readFile(path.join(context.rootGetters['config/data_dir'], csv), 'Latin1', (err, content) => { if (err) { console.log(err) } else { var parseConfig = { header: true } var parsed = Papa.parse(content, parseConfig) context.dispatch('clean_store_data', parsed) } }) }, clean_store_data (context, parsed) { var tags = Object.values(context.rootGetters['config/tags']) parsed.data = parsed.data.filter(x => x.Libellé !== undefined) parsed.data.forEach(row => { appendTag(row, tags, 'Libellé') formatDate(row, 'Date') }) context.commit('SET_DATA', { data: parsed }) }, set_start (context, start) { context.commit('SET_START', { start: moment(start)}) }, set_end (context, end) { context.commit('SET_END', { end: moment(end)}) } } }