Skip to content
Snippets Groups Projects
Commit 0e950806 authored by Hugo SUBTIL's avatar Hugo SUBTIL
Browse files

feat: add dynamical date

parent 6eddeb29
No related branches found
No related tags found
1 merge request!6Feat/get consumption data
Pipeline #28208 passed
......@@ -15,10 +15,10 @@ moment.tz.setDefault('Europe/Paris') // set the timezone
/*** Connector Constants ***/
const manualExecution =
process.env.COZY_JOB_MANUAL_EXECUTION === 'true' ? true : false
const startDailyDate = manualExecution
let startDailyDate = manualExecution
? moment().subtract(12, 'month')
: moment().subtract(6, 'month')
const startDailyDateString = startDailyDate.format('YYYY-MM-DD')
let startDailyDateString = startDailyDate.format('YYYY-MM-DD')
// const startLoadDate = moment().subtract(7, 'day')
// const startLoadDateString = startLoadDate.format('YYYY-MM-DD')
const endDate = moment()
......@@ -33,8 +33,6 @@ module.exports = new BaseKonnector(start)
// secret api key.
async function start(fields, cozyParameters) {
log('info', 'Gathering data ...')
console.log(fields.wso2BaseUrl)
console.log(cozyParameters)
let baseUrl = fields.wso2BaseUrl
let apiAuthKey = fields.apiToken
let loginUtilisateur = fields.loginUtilisateur
......@@ -49,6 +47,13 @@ async function start(fields, cozyParameters) {
log('info', 'Successfully logged in')
//TODO: get compteur start data
await getDataStartDate(
`${baseUrl}/enedis_SGE_ConsultationDonneesTechniquesContractuelles/1.0`,
apiAuthKey,
loginUtilisateur,
fields.pointId
)
await getData(
`${baseUrl}/enedis_SGE_ConsultationMesuresDetaillees/1.0`,
apiAuthKey,
......@@ -57,6 +62,40 @@ async function start(fields, cozyParameters) {
)
log('info', 'Konnector process end')
}
/**
*
* @param {string} url
* @param {string} apiAuthKey
* @param {string} userLogin
* @param {number} pointId
*/
async function getDataStartDate(url, apiAuthKey, userLogin, pointId) {
log('info', 'Fetching data start date')
const sampleHeaders = {
'Content-Type': 'text/xml;charset=UTF-8',
apikey: apiAuthKey,
}
const { response } = await soapRequest({
url: url,
headers: sampleHeaders,
xml: userTechnicalData(pointId, userLogin),
}).catch(err => {
log('error', 'technicalDataResponse')
log('error', err)
return err
})
xml2js.parseString(
response.body,
{
tagNameProcessors: [parseTags],
valueProcessors: [parseValue],
explicitArray: false,
},
processStartDate()
)
}
/**
*
......@@ -71,6 +110,7 @@ async function getData(url, apiAuthKey, userLogin, pointId) {
'Content-Type': 'text/xml;charset=UTF-8',
apikey: apiAuthKey,
}
const { response } = await soapRequest({
url: url,
headers: sampleHeaders,
......@@ -81,6 +121,7 @@ async function getData(url, apiAuthKey, userLogin, pointId) {
endDateString
),
}).catch(err => {
log('error', 'userMesureDetailles')
log('error', err)
return err
})
......@@ -141,9 +182,39 @@ function processData() {
}
}
/**
* Parse data
*/
function processStartDate() {
return async (err, result) => {
if (err) {
log('error', err)
throw err
}
// update start Date with contract openning date
startDailyDate = moment(parseSgeXmlTechnicalData(result), 'YYYY-MM-DD')
startDailyDateString = startDailyDate.format('YYYY-MM-DD')
}
}
/**
* Return start date
* @param {string} result
* @returns {string}
*/
function parseSgeXmlTechnicalData(result) {
log('info', 'Parsing technical data')
let json = JSON.stringify(result)
return JSON.parse(json)['Envelope']['Body'][
'consulterDonneesTechniquesContractuellesResponse'
]['point']['donneesGenerales'][
'dateDerniereModificationFormuleTarifaireAcheminement'
]
}
/**
*
* @param {*} result
* @param {string} result
* @returns {SGEData[]}
*/
function parseSgeXmlData(result) {
......@@ -159,7 +230,7 @@ function parseSgeXmlData(result) {
* @param {EnedisKonnectorData[]} data
* @param {string} doctype
* @param {string[]} filterKeys
* @returns
* @returns {Promise<*>}
*/
async function storeData(data, doctype, filterKeys) {
log('debug', doctype, 'Store into')
......@@ -204,6 +275,30 @@ function userMesureDetailles(pointId, userLogin, startDt, endDt) {
`
}
/**
* Get user technical data
* @param {string} pointId
* @param {string} userLogin
* @returns {string}
*/
function userTechnicalData(pointId, userLogin) {
log('info', `Query userMesureDetailles`)
return `<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v2="http://www.enedis.fr/sge/b2b/services/consulterdonneestechniquescontractuelles/v1.0"
xmlns:v1="http://www.enedis.fr/sge/b2b/technique/v1.0">
<soapenv:Header/>
<soapenv:Body>
<v2:consulterDonneesTechniquesContractuelles>
<pointId>${pointId}</pointId>
<loginUtilisateur>${userLogin}</loginUtilisateur>
<autorisationClient>true</autorisationClient>
</v2:consulterDonneesTechniquesContractuelles>
</soapenv:Body>
</soapenv:Envelope>
`
}
/**
* Format data for DB storage
* @param {SGEData[]} data
......@@ -211,7 +306,6 @@ function userMesureDetailles(pointId, userLogin, startDt, endDt) {
*/
async function formateDataForDoctype(data) {
log('info', 'Formating data')
console.log(data)
// record
return data.map(record => {
let date = moment(record.d, 'YYYY/MM/DD h:mm:ss')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment