Skip to content
Snippets Groups Projects
Commit 220b5b64 authored by Yoan VALLET's avatar Yoan VALLET
Browse files

creat montly report service

parent b4f41dfa
No related branches found
No related tags found
3 merge requests!103Support,!102Dev,!83Features/113 bilan mensuel
......@@ -22,9 +22,9 @@
}
},
"services": {
"monthlySummary": {
"monthlyReport": {
"type": "node",
"file": "monthlySummary.js",
"file": "monthlyReport.js",
"trigger": "@cron 0 0 * * * *"
}
},
......
import logger from 'cozy-logger'
import { runService } from './service'
const log = logger.namespace('report')
const monthlyReport = async () => {
log('info', 'Fetching data for mail...')
log('info', 'Sneding mail...')
const FEEDBACK_EMAIL = 'ecolyo@grandlyon.com'
const mailContent = 'TEST'
const mailData = {
mode: 'from',
to: [{ name: 'Support', email: FEEDBACK_EMAIL }],
subject: '[Ecolyo] - Votre bilan mensuel',
parts: [{ type: 'text/plain', body: mailContent }],
}
try {
const jobCollection = client.collection('io.cozy.jobs')
await jobCollection.create('sendmail', mailData)
} catch (e) {
// eslint-disable-next-line no-console
console.error(e)
}
}
runService(monthlyReport)
import moment from 'moment-timezone'
import { ENEDIS_DAY_DOCTYPE, GRDF_DAY_DOCTYPE, EGL_DAY_DOCTYPE } from 'doctypes'
// import { ENEDIS_DAY_DOCTYPE, GRDF_DAY_DOCTYPE, EGL_DAY_DOCTYPE } from 'doctypes'
import logger from 'cozy-logger'
import { sumBy } from 'lodash'
// 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 getPeriod = () => {
// const end = moment().startOf('month')
const start = end
.clone()
.subtract(1, 'month')
.startOf('month')
// const start = end
// .clone()
// .subtract(1, 'month')
// .startOf('month')
end = start.clone().endOf('month')
return { start, end }
}
// end = start.clone().endOf('month')
// return { start, end }
// }
const fetchConsumptionsForPeriod = period => {
return ENEDIS_DAY_DOCTYPE.queryAll({
date: {
$gte: period.start,
$lt: period.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 getMeanOnPeriod = (consumptions, period) => {
// const end = moment(period.end)
// const start = moment(period.start)
const nbdays = end.diff(start, 'days')
// const nbdays = end.diff(start, 'days')
const total = Math.abs(
sumBy(consumptions, consumptions => consumptions.value)
)
const mean = total / nbdays
// const total = Math.abs(
// sumBy(consumptions, consumptions => consumptions.value)
// )
// const mean = total / nbdays
return mean
}
// return mean
// }
const monthlySummaryStats = async () => {
log('info', 'Fetching datas...')
const period = getPeriod()
const consumptions = await fetchConsumptionsForPeriod(period)
const meanConsumptions = getMeanOnPeriod(consumptions, period)
const FEEDBACK_EMAIL = 'ecolyo@grandlyon.com'
const mailContent = 'TEST'
const mailData = {
mode: 'from',
to: [{ name: 'Support', email: FEEDBACK_EMAIL }],
subject: '[Ecolyo] - Votre bilan mensuel',
parts: [{ type: 'text/plain', body: mailContent }],
}
try {
const jobCollection = client.collection('io.cozy.jobs')
await jobCollection.create('sendmail', mailData)
} catch (e) {
// eslint-disable-next-line no-console
console.error(e)
setError(t('feedback.error_sending'))
}
log(
'info',
`${consumptions.length} consumptions between ${period.start} and ${period.end}`
)
// const period = getPeriod()
// const consumptions = await fetchConsumptionsForPeriod(period)
// const meanConsumptions = getMeanOnPeriod(consumptions, period)
// const FEEDBACK_EMAIL = 'ecolyo@grandlyon.com'
// const mailContent = 'TEST'
// const mailData = {
// mode: 'from',
// to: [{ name: 'Support', email: FEEDBACK_EMAIL }],
// subject: '[Ecolyo] - Votre bilan mensuel',
// parts: [{ type: 'text/plain', body: mailContent }],
// }
// try {
// const jobCollection = client.collection('io.cozy.jobs')
// await jobCollection.create('sendmail', mailData)
// } catch (e) {
// // eslint-disable-next-line no-console
// console.error(e)
// setError(t('feedback.error_sending'))
// }
// log(
// 'info',
// `${consumptions.length} consumptions between ${period.start} and ${period.end}`
// )
//create doctype ecran stats
}
......
import fetch from 'node-fetch'
global.fetch = fetch
import CozyClient from 'cozy-client'
import { schema } from 'doctypes'
import { Document } from 'cozy-doctypes'
const assertEnvVar = varName => {
if (!process.env[varName]) {
throw new Error(`${varName} environment variable is not set`)
}
}
// TODO Check to use CozyClient.fromEnv
export const runService = service => {
const data = root.dataset
const protocol = window.location ? window.location.protocol : 'https:'
assertEnvVar('COZY_URL')
assertEnvVar('COZY_CREDENTIALS')
const client = new CozyClient({
uri: `${protocol}//${data.cozyDomain}`,
token: data.cozyToken,
uri: process.env.COZY_URL.trim(),
schema,
token: process.env.COZY_CREDENTIALS.trim(),
})
Document.registerClient(client)
return service({ client }).catch(e => {
// eslint-disable-next-line no-console
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment