From 571e3a5c52d3c157496fa3871717a5f3233e8922 Mon Sep 17 00:00:00 2001
From: "ext.sopra.yvallet@grandlyon.com" <ext.sopra.yvallet@grandlyon.com>
Date: Fri, 19 Feb 2021 14:55:45 +0100
Subject: [PATCH] publish: fix

generated from commit 20bad20aa3898be0c01702d4d6c5c5fe90109fb5
---
 index.js | 257 ++++++++++++++++++++++++++-----------------------------
 1 file changed, 122 insertions(+), 135 deletions(-)

diff --git a/index.js b/index.js
index f26b325..7fd1705 100644
--- a/index.js
+++ b/index.js
@@ -128,38 +128,38 @@ const {
   addData,
   hydrateAndFilter,
   cozyClient
-} = __webpack_require__(1)
-const rp = __webpack_require__(22)
-const moment = __webpack_require__(1045)
-__webpack_require__(1174)
+} = __webpack_require__(1);
+const rp = __webpack_require__(22);
+const moment = __webpack_require__(1045);
+__webpack_require__(1174);
 
-moment.locale('fr') // set the language
-moment.tz.setDefault('Europe/Paris') // set the timezone
+moment.locale("fr"); // set the language
+moment.tz.setDefault("Europe/Paris"); // set the timezone
 
 const startDate = moment()
-  .startOf('year')
+  .startOf("year")
   // .subtract(3, 'year') TODO PUT TERNARY EXPRESSION FOR MANUAL LAUNCH
-  .subtract(1, 'year')
-  .subtract(1, 'day')
-  .format('MM/DD/YYYY')
-const endDate = moment().format('MM/DD/YYYY')
-const timeRange = ['day', 'month', 'year']
+  .subtract(1, "year")
+  .subtract(1, "day")
+  .format("MM/DD/YYYY");
+const endDate = moment().format("MM/DD/YYYY");
+const timeRange = ["day", "month", "year"];
 const rangeDate = {
   day: {
-    doctype: 'com.grandlyon.egl.day',
-    keys: ['year', 'month', 'day']
+    doctype: "com.grandlyon.egl.day",
+    keys: ["year", "month", "day"]
   },
   month: {
-    doctype: 'com.grandlyon.egl.month',
-    keys: ['year', 'month']
+    doctype: "com.grandlyon.egl.month",
+    keys: ["year", "month"]
   },
   year: {
-    doctype: 'com.grandlyon.egl.year',
-    keys: ['year']
+    doctype: "com.grandlyon.egl.year",
+    keys: ["year"]
   }
-}
+};
 
-module.exports = new BaseKonnector(start)
+module.exports = new BaseKonnector(start);
 
 // The start function is run by the BaseKonnector instance only when it got all the account
 // information (fields). When you run this connector yourself in "standalone" mode or "dev" mode,
@@ -168,82 +168,83 @@ async function start(fields, cozyParameters) {
   try {
     // resetting data for demo only
     // await resetData()
-    const baseUrl = cozyParameters.secret.eglBaseURL
-    const apiAuthKey = cozyParameters.secret.eglAPIAuthKey
-    log('info', 'Authenticating ...')
+    const baseUrl = cozyParameters.secret.eglBaseURL;
+    const apiAuthKey = cozyParameters.secret.eglAPIAuthKey;
+    log("info", "Authenticating ...");
     const response = await authenticate(
       fields.login,
       fields.password,
       baseUrl,
       apiAuthKey
-    )
-    log('info', 'Successfully logged in')
+    );
+    log("info", "Successfully logged in");
     Promise.all(
       timeRange.map(timeStep =>
         processData(timeStep, response, baseUrl, apiAuthKey)
       )
-    )
+    );
   } catch (error) {
-    throw new Error(error.message)
+    throw new Error(error.message);
   }
 }
 async function processData(timeStep, response, baseUrl, apiAuthKey) {
-  const doctype = rangeDate[timeStep].doctype
-  log('info', 'Getting data TIMESTEP : ' + timeStep)
-  const loadProfile = await getData(response, baseUrl, apiAuthKey)
-  log('info', 'Saving data to Cozy')
+  const doctype = rangeDate[timeStep].doctype;
+  log("info", "Getting data TIMESTEP : " + timeStep);
+  const loadProfile = await getData(response, baseUrl, apiAuthKey);
+  log("info", "Saving data to Cozy");
+  log("info", "Response length : " + loadProfile.length);
   if (doctype === rangeDate.day.doctype) {
-    log('info', 'Saving daily data' + loadProfile)
-    await storeData(loadProfile, rangeDate.day.doctype, rangeDate.day.keys)
+    log("info", "Saving daily data" + loadProfile);
+    await storeData(loadProfile, rangeDate.day.doctype, rangeDate.day.keys);
   } else if (doctype === rangeDate.month.doctype) {
-    await resetInProgressAggregatedData(rangeDate.month.doctype)
-    const monthlyData = processMonthlyAggregation(loadProfile, rangeDate.month)
-    log('info', 'Saving monthly data' + monthlyData)
-    await storeData(monthlyData, rangeDate.month.doctype, rangeDate.month.keys)
+    await resetInProgressAggregatedData(rangeDate.month.doctype);
+    const monthlyData = processMonthlyAggregation(loadProfile, rangeDate.month);
+    log("info", "Saving monthly data" + monthlyData);
+    await storeData(monthlyData, rangeDate.month.doctype, rangeDate.month.keys);
   } else if (doctype === rangeDate.year.doctype) {
-    await resetInProgressAggregatedData(rangeDate.year.doctype)
+    await resetInProgressAggregatedData(rangeDate.year.doctype);
     const yearlyData = processYearAggregation(
       loadProfile,
       rangeDate.year.doctype
-    )
-    log('info', 'Saving yearly data' + yearlyData)
-    await storeData(yearlyData, rangeDate.year.doctype, rangeDate.year.keys)
+    );
+    log("info", "Saving yearly data" + yearlyData);
+    await storeData(yearlyData, rangeDate.year.doctype, rangeDate.year.keys);
   } else {
-    throw new Error('Unkonw range type: ' + doctype)
+    throw new Error("Unkonw range type: " + doctype);
   }
 }
 
 async function authenticate(login, password, baseUrl, apiAuthKey) {
   const authRequest = {
-    method: 'POST',
-    uri: baseUrl + '/connect.aspx',
+    method: "POST",
+    uri: baseUrl + "/connect.aspx",
     headers: {
       AuthKey: apiAuthKey,
-      'Content-Type': 'application/x-www-form-urlencoded'
+      "Content-Type": "application/x-www-form-urlencoded"
     },
     form: {
       login: login,
       pass: password
     },
     json: true
-  }
-  const response = await rp(authRequest)
+  };
+  const response = await rp(authRequest);
   if (response.codeRetour === 100) {
-    return response
+    return response;
   } else {
-    throw new Error(errors.LOGIN_FAILED)
+    throw new Error(errors.LOGIN_FAILED);
   }
 }
 
 async function getData(response, baseUrl, apiAuthKey) {
-  log('debug', 'Start date : ' + startDate)
-  log('debug', 'End date : ' + endDate)
+  log("debug", "Start date : " + startDate);
+  log("debug", "End date : " + endDate);
   const dataRequest = {
-    method: 'POST',
-    uri: baseUrl + '/getAllAgregatsByAbonnement.aspx',
+    method: "POST",
+    uri: baseUrl + "/getAllAgregatsByAbonnement.aspx",
     headers: {
       AuthKey: apiAuthKey,
-      'Content-Type': 'application/x-www-form-urlencoded'
+      "Content-Type": "application/x-www-form-urlencoded"
     },
     form: {
       token: response.resultatRetour.token,
@@ -252,139 +253,125 @@ async function getData(response, baseUrl, apiAuthKey) {
       date_fin: endDate
     },
     json: true
-  }
+  };
   try {
-    const responseEgl = await rp(dataRequest)
+    const responseEgl = await rp(dataRequest);
     switch (responseEgl.codeRetour) {
       case 100:
-        return format(responseEgl)
+        return format(responseEgl);
       case -2:
-        throw new Error(errors.LOGIN_FAILED)
+        throw new Error(errors.LOGIN_FAILED);
       case -1:
-        throw new Error(errors.VENDOR_DOWN)
+        throw new Error(errors.VENDOR_DOWN);
       default:
-        throw new Error(errors.UNKNOWN_ERROR)
+        throw new Error(errors.UNKNOWN_ERROR);
     }
   } catch (error) {
-    throw new Error(errors.VENDOR_DOWN)
+    throw new Error(errors.VENDOR_DOWN);
   }
 }
 
 function format(response) {
   const data = response.resultatRetour
     .slice(1)
-    .filter(value => value.ValeurIndex)
-  const dataLen = data.length
-  data.map((value, index) => {
-    const time = moment(value.DateReleve, moment.ISO_8601)
+    .filter(value => value.ValeurIndex);
+  const dataLen = data.length;
+  const mapData = data.map((value, index) => {
+    const time = moment(value.DateReleve, moment.ISO_8601);
     if (index + 1 < dataLen) {
       log(
-        'info',
-        'date -> ' +
+        "info",
+        "date -> " +
           value.DateReleve +
-          ' SUBSTRACTING : ' +
-          value.ValeurIndex +
-          ' - ' +
-          response.resultatRetour[index].ValeurIndex +
-          '\n'
-      )
+          " SUBSTRACTING : " +
+          data[index + 1].ValeurIndex +
+          " - " +
+          value.ValeurIndex + ' == ' + data[index + 1].ValeurIndex - value.ValeurIndex +
+          "\n"
+      );
       return {
         load: data[index + 1].ValeurIndex - value.ValeurIndex,
-        year: parseInt(time.format('YYYY')),
-        month: parseInt(time.format('M')),
-        day: parseInt(time.format('D')),
+        year: parseInt(time.format("YYYY")),
+        month: parseInt(time.format("M")),
+        day: parseInt(time.format("D")),
         hour: 0,
         minute: 0,
         type: value.TypeAgregat
-      }
+      };
     } else {
       return {
         load: null,
-        year: parseInt(time.format('YYYY')),
-        month: parseInt(time.format('M')),
-        day: parseInt(time.format('D')),
+        year: parseInt(time.format("YYYY")),
+        month: parseInt(time.format("M")),
+        day: parseInt(time.format("D")),
         hour: 0,
         minute: 0,
         type: value.TypeAgregat
-      }
+      };
     }
-  })
-  log('info', 'DATALOAD LIST\n')
-  data.map(value => {
-    log(
-      'info',
-      value.month +
-        '-' +
-        value.day +
-        '-' +
-        value.year +
-        ' : ' +
-        value.load +
-        '\n'
-    )
-  })
-  return data
+  });
+  return mapData;
 }
 
 function processYearAggregation(data, doctype) {
-  log('info', 'Start aggregation for : ' + doctype)
-  const grouped = data.reduce(reduceYearFunction, {})
-  return Object.values(grouped)
+  log("info", "Start aggregation for : " + doctype);
+  const grouped = data.reduce(reduceYearFunction, {});
+  return Object.values(grouped);
 }
 
 function processMonthlyAggregation(data, range) {
-  log('info', 'Start aggregation for : ' + range.doctype)
+  log("info", "Start aggregation for : " + range.doctype);
   // Filter by year
-  const tmpData = groupBy(data, 'year')
-  const keys = Object.keys(tmpData)
-  var dataToStore = []
+  const tmpData = groupBy(data, "year");
+  const keys = Object.keys(tmpData);
+  var dataToStore = [];
   // Monthly aggregation
   for (const index in keys) {
     // Get daily data of a year
-    var monthlyData = tmpData[keys[index]]
+    var monthlyData = tmpData[keys[index]];
     // Monthly aggregation
-    var aggregatedData = monthlyData.reduce(reduceMonthFunction, {})
+    var aggregatedData = monthlyData.reduce(reduceMonthFunction, {});
     // Store it
-    dataToStore = dataToStore.concat(Object.values(aggregatedData))
+    dataToStore = dataToStore.concat(Object.values(aggregatedData));
   }
-  return dataToStore
+  return dataToStore;
 }
 
 function groupBy(xs, key) {
   return xs.reduce(function(rv, x) {
-    ;(rv[x[key]] = rv[x[key]] || []).push(x)
-    return rv
-  }, {})
+    (rv[x[key]] = rv[x[key]] || []).push(x);
+    return rv;
+  }, {});
 }
 
 function reduceYearFunction(acc, x) {
-  var id = acc[x.year]
+  var id = acc[x.year];
   if (id) {
-    id.load += x.load
+    id.load += x.load;
   } else {
-    acc[x.year] = x
+    acc[x.year] = x;
   }
-  return acc
+  return acc;
 }
 
 function reduceMonthFunction(acc, x) {
-  var id = acc[x.month]
+  var id = acc[x.month];
   if (id) {
-    id.load += x.load
+    id.load += x.load;
   } else {
-    acc[x.month] = x
+    acc[x.month] = x;
   }
-  return acc
+  return acc;
 }
 
 async function storeData(data, doctype, keys) {
-  log('debug', 'Store into ' + doctype)
-  log('debug', keys, 'Store into keys ')
+  log("debug", "Store into " + doctype);
+  log("debug", keys, "Store into keys ");
   return hydrateAndFilter(data, doctype, {
     keys: keys
   }).then(filteredDocuments => {
-    addData(filteredDocuments, doctype)
-  })
+    addData(filteredDocuments, doctype);
+  });
 }
 
 /**
@@ -396,33 +383,33 @@ async function storeData(data, doctype, keys) {
  */
 async function resetInProgressAggregatedData(doctype) {
   // /!\ Warning: cannot use mongo queries because not supported for dev by cozy-konnectors-libs
-  log('debug', doctype, 'Remove aggregated data for')
-  const result = await cozyClient.data.findAll(doctype)
+  log("debug", doctype, "Remove aggregated data for");
+  const result = await cozyClient.data.findAll(doctype);
   if (result.error || result.length <= 0) {
     // eslint-disable-next-line no-console
-    console.warn('Error while fetching loads, doctype not found ')
+    console.warn("Error while fetching loads, doctype not found ");
   } else {
-    const currentDate = moment()
+    const currentDate = moment();
     // Filter data to remove
-    var filtered = []
+    var filtered = [];
     if (doctype === rangeDate.year.doctype) {
       // Yearly case
       filtered = result.filter(function(el) {
-        return el.year == currentDate.year()
-      })
+        return el.year == currentDate.year();
+      });
     } else {
       // Monthly case
       filtered = result.filter(function(el) {
         return (
           el.year == currentDate.year() &&
-          el.month == parseInt(moment().format('M'))
-        )
-      })
+          el.month == parseInt(moment().format("M"))
+        );
+      });
     }
     // Remove data
     for (const doc of filtered) {
-      log('debug', doc, 'Removing this entry for ' + doctype)
-      await cozyClient.data.delete(doctype, doc)
+      log("debug", doc, "Removing this entry for " + doctype);
+      await cozyClient.data.delete(doctype, doc);
     }
   }
 }
-- 
GitLab