diff --git a/src/targets/services/monthlySummary.js b/src/targets/services/monthlySummary.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a4d8dd6e556019dd18b804dd5e6e740b9d6f2d3f 100644 --- a/src/targets/services/monthlySummary.js +++ b/src/targets/services/monthlySummary.js @@ -0,0 +1,61 @@ +import moment from 'moment-timezone' +import { ENEDIS_DAY_DOCTYPE, GRDF_DAY_DOCTYPE, EGL_DAY_DOCTYPE } from 'doctypes' +import logger from 'cozy-logger' +import { sumBy } from 'lodash' +import { runService } from './service' + +moment.tz.setDefault('Europe/Paris') +const log = logger.namespace('monthly_summary') + +// Get last month limits +const getPeriod = () => { + const end = moment().startOf('month') + + const start = end + .clone() + .subtract(1, 'month') + .startOf('month') + + end = start.clone().endOf('month') + return { start, end } +} + +const fetchConsumptionsForPeriod = period => { + return ENEDIS_DAY_DOCTYPE.queryAll({ + date: { + $gte: period.start, + $lt: period.end, + }, + }) +} + +const getMeanOnPeriod = (consumptions, period) => { + const end = moment(period.end) + const start = moment(period.start) + + const nbdays = end.diff(start, 'days') + + const total = Math.abs( + sumBy(consumptions, consumptions => consumptions.value) + ) + const mean = total / nbdays + + return mean +} + +const monthlySummaryStats = async () => { + log('info', 'Fetching datas...') + + const period = getPeriod() + const consumptions = await fetchConsumptionsForPeriod(period) + const meanConsumptions = getMeanOnPeriod(consumptions, period) + + log( + 'info', + `${consumptions.length} consumptions between ${period.start} and ${period.end}` + ) + + //create doctype ecran stats +} + +runService(monthlySummaryStats) diff --git a/src/targets/services/service.js b/src/targets/services/service.js new file mode 100644 index 0000000000000000000000000000000000000000..cfc55f898818f5b8bc564db758ec1900d3c1f3b1 --- /dev/null +++ b/src/targets/services/service.js @@ -0,0 +1,22 @@ +import CozyClient from 'cozy-client' +import { schema } from 'doctypes' +import { Document } from 'cozy-doctypes' + +// TODO Check to use CozyClient.fromEnv +export const runService = service => { + const data = root.dataset + const protocol = window.location ? window.location.protocol : 'https:' + + const client = new CozyClient({ + uri: `${protocol}//${data.cozyDomain}`, + token: data.cozyToken, + schema, + }) + Document.registerClient(client) + + return service({ client }).catch(e => { + // eslint-disable-next-line no-console + console.error(e) + process.exit(1) + }) +}