diff --git a/2/ecolyo.94c10221ec8ed1131cdb.js b/2/ecolyo.27f1c29c72bafd9d349f.js similarity index 99% rename from 2/ecolyo.94c10221ec8ed1131cdb.js rename to 2/ecolyo.27f1c29c72bafd9d349f.js index cd003cee0581dc65d6eb1fe5b0b6b1f958a1000c..0b08dbd3877862d74d52a93a13012b0ed40aa05e 100644 --- a/2/ecolyo.94c10221ec8ed1131cdb.js +++ b/2/ecolyo.27f1c29c72bafd9d349f.js @@ -3559,8 +3559,6 @@ var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("yXPU")); var _react = _interopRequireWildcard(__webpack_require__("q1tI")); -var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); - var _reactRouterDom = __webpack_require__("55Ip"); var _cozyClient = __webpack_require__("SH7X"); @@ -3583,6 +3581,8 @@ var _utils = __webpack_require__("c+yx"); var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); + (function () { var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined; enterModule && enterModule(module); @@ -3632,10 +3632,8 @@ var DataloadSectionDetail = function DataloadSectionDetail(_ref) { }(), [client]); if (fluidType !== _fluid.FluidType.MULTIFLUID) { - var _classNames; - return /*#__PURE__*/_react.default.createElement("div", { - className: (0, _classnames.default)('dataloadvisualizer-euro text-16-normal', (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(_fluid.FluidType[fluidType].toLowerCase()), dataloadSectionType !== _dataload.DataloadSectionType.LEFT), (0, _defineProperty2.default)(_classNames, "".concat(_fluid.FluidType[fluidType].toLowerCase(), "-compare"), dataloadSectionType === _dataload.DataloadSectionType.LEFT), _classNames)) + className: "dataloadvisualizer-euro ".concat(_fluid.FluidType[fluidType].toLowerCase(), "-compare text-16-normal") }, "".concat((0, _utils.formatNumberValues)(converterService.LoadToEuro(dataload.value, fluidType, dataload.price ? dataload.price : null)), " \u20AC")); } @@ -3649,14 +3647,14 @@ var DataloadSectionDetail = function DataloadSectionDetail(_ref) { return /*#__PURE__*/_react.default.createElement("div", { className: "dataloadvisualizer-euro text-16-normal" }, dataload.valueDetail.map(function (valueDetail, index) { - var _classNames2; + var _classNames; return /*#__PURE__*/_react.default.createElement(_reactRouterDom.NavLink, { key: index, to: "/consumption/".concat(_fluid.FluidType[index].toLowerCase()), className: "dataloadvisualizer-euro-link" }, /*#__PURE__*/_react.default.createElement("div", { - className: (0, _classnames.default)('dataloadvisualizer-euro-fluid', (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, " ".concat(_fluid.FluidType[index].toLowerCase()), valueDetail.state === _dataload.DataloadState.VALID || valueDetail.state === _dataload.DataloadState.UPCOMING || valueDetail.state === _dataload.DataloadState.COMING || valueDetail.state === _dataload.DataloadState.EMPTY || valueDetail.state === _dataload.DataloadState.HOLE), (0, _defineProperty2.default)(_classNames2, " error", valueDetail.state === _dataload.DataloadState.MISSING), _classNames2)), + className: (0, _classnames.default)('dataloadvisualizer-euro-fluid', (_classNames = {}, (0, _defineProperty2.default)(_classNames, " ".concat(_fluid.FluidType[index].toLowerCase()), valueDetail.state === _dataload.DataloadState.VALID || valueDetail.state === _dataload.DataloadState.UPCOMING || valueDetail.state === _dataload.DataloadState.COMING || valueDetail.state === _dataload.DataloadState.EMPTY || valueDetail.state === _dataload.DataloadState.HOLE), (0, _defineProperty2.default)(_classNames, " error", valueDetail.state === _dataload.DataloadState.MISSING), _classNames)), onClick: function onClick() { return emitNavEvent(_fluid.FluidType[index].toLowerCase()); } @@ -6703,8 +6701,12 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; +var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA")); + var _react = _interopRequireDefault(__webpack_require__("q1tI")); +var _classnames = _interopRequireDefault(__webpack_require__("TSYQ")); + var _I18n = __webpack_require__("buk/"); var _fluid = __webpack_require__("5Wkc"); @@ -6733,7 +6735,7 @@ var DataloadSectionValue = function DataloadSectionValue(_ref) { if (fluidType === _fluid.FluidType.MULTIFLUID) { return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _utils.formatNumberValues)(dataload.value), /*#__PURE__*/_react.default.createElement("span", { - className: 'text-18-normal euroUnit' + className: (0, _classnames.default)('text-18-normal', (0, _defineProperty2.default)({}, 'euroUnit', dataloadSectionType !== _dataload.DataloadSectionType.NO_COMPARE)) }, "".concat(t('FLUID.' + _fluid.FluidType[fluidType] + '.UNIT'))), dataloadSectionType === _dataload.DataloadSectionType.NO_COMPARE && /*#__PURE__*/_react.default.createElement("span", { className: "text-14-normal estimated", onClick: toggleEstimationModal @@ -7628,8 +7630,6 @@ var _DeleteGRDFAccountModal = _interopRequireDefault(__webpack_require__("h30T") var _triggers = _interopRequireDefault(__webpack_require__("7d5P")); -var _StyledSpinner = _interopRequireDefault(__webpack_require__("HTwM")); - (function () { var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined; enterModule && enterModule(module); @@ -7663,38 +7663,33 @@ var ConnectionResult = function ConnectionResult(_ref) { var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2.default)(_useState, 2), - deleting = _useState2[0], - setDeleting = _useState2[1]; + updating = _useState2[0], + setUpdating = _useState2[1]; - var _useState3 = (0, _react.useState)(false), + var _useState3 = (0, _react.useState)('-'), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), - updating = _useState4[0], - setUpdating = _useState4[1]; + lastExecutionDate = _useState4[0], + setLastExecutionDate = _useState4[1]; - var _useState5 = (0, _react.useState)('-'), + var _useState5 = (0, _react.useState)(''), _useState6 = (0, _slicedToArray2.default)(_useState5, 2), - lastExecutionDate = _useState6[0], - setLastExecutionDate = _useState6[1]; + konnectorError = _useState6[0], + setKonnectorError = _useState6[1]; var _useState7 = (0, _react.useState)(''), _useState8 = (0, _slicedToArray2.default)(_useState7, 2), - konnectorError = _useState8[0], - setKonnectorError = _useState8[1]; + status = _useState8[0], + setStatus = _useState8[1]; - var _useState9 = (0, _react.useState)(''), + var _useState9 = (0, _react.useState)(null), _useState10 = (0, _slicedToArray2.default)(_useState9, 2), - status = _useState10[0], - setStatus = _useState10[1]; + outDatedDataDays = _useState10[0], + setOutDatedDataDays = _useState10[1]; - var _useState11 = (0, _react.useState)(null), + var _useState11 = (0, _react.useState)(false), _useState12 = (0, _slicedToArray2.default)(_useState11, 2), - outDatedDataDays = _useState12[0], - setOutDatedDataDays = _useState12[1]; - - var _useState13 = (0, _react.useState)(false), - _useState14 = (0, _slicedToArray2.default)(_useState13, 2), - openGRDFDeletionModal = _useState14[0], - setOpenGRDFDeletionModal = _useState14[1]; + openGRDFDeletionModal = _useState12[0], + setOpenGRDFDeletionModal = _useState12[1]; var toggleGRDFDeletionModal = (0, _react.useCallback)(function () { setOpenGRDFDeletionModal(function (prev) { @@ -7740,7 +7735,7 @@ var ConnectionResult = function ConnectionResult(_ref) { while (1) { switch (_context2.prev = _context2.next) { case 0: - setDeleting(true); + setUpdating(true); _context2.prev = 1; if (!account) { @@ -7817,7 +7812,7 @@ var ConnectionResult = function ConnectionResult(_ref) { case 35: _context2.prev = 35; _context2.t1 = _context2["catch"](1); - setDeleting(false); + setUpdating(false); case 38: case "end": @@ -7940,24 +7935,21 @@ var ConnectionResult = function ConnectionResult(_ref) { }, /*#__PURE__*/_react.default.createElement(_Button.default, { "aria-label": t('konnector_form.accessibility.button_delete'), onClick: fluidType === _fluid.FluidType.GAS ? toggleGRDFDeletionModal : deleteAccountsAndTriggers, - disabled: updating || deleting, + disabled: updating, classes: { root: 'btn-secondary-positive', label: 'text-16-normal' } - }, deleting ? /*#__PURE__*/_react.default.createElement(_StyledSpinner.default, { - size: "1rem", - fluidType: fluidType - }) : t('konnector_form.button_delete')), /*#__PURE__*/_react.default.createElement(_Button.default, { + }, t('konnector_form.button_delete')), /*#__PURE__*/_react.default.createElement(_Button.default, { "aria-label": t('konnector_form.accessibility.button_update'), onClick: konnectorError === 'error_update_oauth' ? handleRefreshConsent : updateKonnector, - disabled: updating || deleting, + disabled: updating, classes: { root: 'btn-highlight', label: 'text-16-bold' } }, updating ? /*#__PURE__*/_react.default.createElement(_StyledBlackSpinner.default, { - size: "1rem" + size: "2em" }) : /*#__PURE__*/_react.default.createElement("div", null, konnectorError === 'error_update_oauth' ? t('konnector_form.button_oauth_reload') : t('konnector_form.button_update')))), fluidType === _fluid.FluidType.GAS && /*#__PURE__*/_react.default.createElement(_DeleteGRDFAccountModal.default, { open: openGRDFDeletionModal, handleCloseClick: toggleGRDFDeletionModal, @@ -7965,7 +7957,7 @@ var ConnectionResult = function ConnectionResult(_ref) { })); }; -__signature__(ConnectionResult, "useI18n{{ t }}\nuseClient{client}\nuseDispatch{dispatch}\nuseState{[deleting, setDeleting](false)}\nuseState{[updating, setUpdating](false)}\nuseState{[lastExecutionDate, setLastExecutionDate]('-')}\nuseState{[konnectorError, setKonnectorError]('')}\nuseState{[status, setStatus]('')}\nuseState{[outDatedDataDays, setOutDatedDataDays](null)}\nuseState{[openGRDFDeletionModal, setOpenGRDFDeletionModal](false)}\nuseCallback{toggleGRDFDeletionModal}\nuseCallback{deleteAccountsAndTriggers}\nuseCallback{isOutdated}\nuseCallback{hasUpdatedToday}\nuseCallback{handleRefreshConsent}\nuseEffect{}", function () { +__signature__(ConnectionResult, "useI18n{{ t }}\nuseClient{client}\nuseDispatch{dispatch}\nuseState{[updating, setUpdating](false)}\nuseState{[lastExecutionDate, setLastExecutionDate]('-')}\nuseState{[konnectorError, setKonnectorError]('')}\nuseState{[status, setStatus]('')}\nuseState{[outDatedDataDays, setOutDatedDataDays](null)}\nuseState{[openGRDFDeletionModal, setOpenGRDFDeletionModal](false)}\nuseCallback{toggleGRDFDeletionModal}\nuseCallback{deleteAccountsAndTriggers}\nuseCallback{isOutdated}\nuseCallback{hasUpdatedToday}\nuseCallback{handleRefreshConsent}\nuseEffect{}", function () { return [_I18n.useI18n, _cozyClient.useClient, _reactRedux.useDispatch]; }); diff --git a/app/ecolyo.99d9a2786ac3fa1b2ee9.js b/app/ecolyo.d6c5a397ab6be8a8edc9.js similarity index 99% rename from app/ecolyo.99d9a2786ac3fa1b2ee9.js rename to app/ecolyo.d6c5a397ab6be8a8edc9.js index 423375c1c053bee6dadacd8fe3529f222c74a5ad..3af363e7261bd8ddaca57cfff6cc375e4517fdb0 100644 --- a/app/ecolyo.99d9a2786ac3fa1b2ee9.js +++ b/app/ecolyo.d6c5a397ab6be8a8edc9.js @@ -64,7 +64,7 @@ /******/ /******/ // script path function /******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"3682ef2818edf933f5f5","2":"94c10221ec8ed1131cdb","3":"dd68f7f45709e6f83800","4":"e755c1e9e5663f5d0e97","5":"d69c042c80cd18fd32ea","6":"48bbaed6f6fea238b6d6","8":"91fddbf6c8efc9b0bb41","9":"979400e31e650f8ac788","10":"46c7bb75747478ce4e67","11":"81a44f4753ffd3cfb197","12":"f3454576459cef994ff0"}[chunkId] + ".js" +/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"3682ef2818edf933f5f5","2":"27f1c29c72bafd9d349f","3":"dd68f7f45709e6f83800","4":"e755c1e9e5663f5d0e97","5":"d69c042c80cd18fd32ea","6":"48bbaed6f6fea238b6d6","8":"91fddbf6c8efc9b0bb41","9":"979400e31e650f8ac788","10":"46c7bb75747478ce4e67","11":"81a44f4753ffd3cfb197","12":"f3454576459cef994ff0"}[chunkId] + ".js" /******/ } /******/ /******/ // The require function @@ -1446,7 +1446,7 @@ var SplashRoot = function SplashRoot(_ref) { function _loadData() { _loadData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { - var initializationService, partnersInfoService, ms, migrationsResult, termsStatus, profile, profileType, profileEcogesture, _yield$Promise$all, _yield$Promise$all2, ecogestureHash, duelHash, quizHash, challengeHash, explorationHash, analysisResult, fluidStatus, refDate, lastDataDate, _iterator, _step, fluid, userChallengeList, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _yield$challengeServi, isDone, partnersInfo, today, fluidService, _updatedFluidStatus, isConcernedByPartnerIssue, _iterator2, _step2, _fluid; + var initializationService, partnersInfoService, ms, migrationsResult, termsStatus, profile, profileType, profileEcogesture, _yield$Promise$all, _yield$Promise$all2, ecogestureHash, fluidPricesHash, duelHash, quizHash, challengeHash, explorationHash, analysisResult, fluidStatus, refDate, lastDataDate, _iterator, _step, fluid, userChallengeList, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _yield$challengeServi, isDone, partnersInfo, today, fluidService, _updatedFluidStatus, isConcernedByPartnerIssue, _iterator2, _step2, _fluid; return _regenerator.default.wrap(function _callee$(_context) { while (1) { @@ -1473,26 +1473,22 @@ var SplashRoot = function SplashRoot(_ref) { case 12: termsStatus = _context.sent; - if (subscribed) dispatch((0, _global.updateTermValidation)(termsStatus)); // Init fluidPrices + if (subscribed) dispatch((0, _global.updateTermValidation)(termsStatus)); // Init profile and update ecogestures, challenges, analysis _context.next = 16; - return initializationService.initFluidPrices(); - - case 16: - _context.next = 18; return initializationService.initProfile(); - case 18: + case 16: profile = _context.sent; - _context.next = 21; + _context.next = 19; return initializationService.initProfileType(); - case 21: + case 19: profileType = _context.sent; - _context.next = 24; + _context.next = 22; return initializationService.initProfileEcogesture(); - case 24: + case 22: profileEcogesture = _context.sent; if (!(subscribed && profile)) { @@ -1501,19 +1497,21 @@ var SplashRoot = function SplashRoot(_ref) { } setValidExploration(_userExploration.UserExplorationID.EXPLORATION007); - _context.next = 29; - return Promise.all([initializationService.initEcogesture(profile.ecogestureHash), initializationService.initDuelEntity(profile.duelHash), initializationService.initQuizEntity(profile.quizHash), initializationService.initExplorationEntity(profile.challengeHash), initializationService.initChallengeEntity(profile.explorationHash), initializationService.initAnalysis(profile)]); + _context.next = 27; + return Promise.all([initializationService.initEcogesture(profile.ecogestureHash), initializationService.initFluidPrices(profile.fluidPricesHash), initializationService.initDuelEntity(profile.duelHash), initializationService.initQuizEntity(profile.quizHash), initializationService.initExplorationEntity(profile.challengeHash), initializationService.initChallengeEntity(profile.explorationHash), initializationService.initAnalysis(profile)]); - case 29: + case 27: _yield$Promise$all = _context.sent; - _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 6); + _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 7); ecogestureHash = _yield$Promise$all2[0]; - duelHash = _yield$Promise$all2[1]; - quizHash = _yield$Promise$all2[2]; - challengeHash = _yield$Promise$all2[3]; - explorationHash = _yield$Promise$all2[4]; - analysisResult = _yield$Promise$all2[5]; + fluidPricesHash = _yield$Promise$all2[1]; + duelHash = _yield$Promise$all2[2]; + quizHash = _yield$Promise$all2[3]; + challengeHash = _yield$Promise$all2[4]; + explorationHash = _yield$Promise$all2[5]; + analysisResult = _yield$Promise$all2[6]; profile.ecogestureHash = ecogestureHash; + profile.fluidPricesHash = fluidPricesHash; profile.duelHash = duelHash; profile.quizHash = quizHash; profile.challengeHash = challengeHash; @@ -1719,7 +1717,7 @@ var SplashRoot = function SplashRoot(_ref) { _context.prev = 101; _context.t0 = _context["catch"](3); - if (_context.t0.message === 'Failed to fetch' && !initStepErrors) { + if (_context.t0 instanceof TypeError && !initStepErrors) { setinitStepErrors(_initialisationSteps.InitStepsErrors.UNKNOWN_ERROR); } @@ -6492,39 +6490,6 @@ var migrations = [{ return _run19.apply(this, arguments); } - return run; - }() -}, { - baseSchemaVersion: 19, - targetSchemaVersion: 20, - appVersion: '1.8.0', - description: 'Empty fluidPrices db so it can be fetched with right format from remote doctype', - releaseNotes: null, - docTypes: _doctypes.FLUIDPRICES_DOCTYPE, - run: function () { - var _run20 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20(_client, docs) { - return _regenerator.default.wrap(function _callee20$(_context20) { - while (1) { - switch (_context20.prev = _context20.next) { - case 0: - docs.map(function (doc) { - doc.deleteAction = true; - return doc; - }); - return _context20.abrupt("return", docs); - - case 2: - case "end": - return _context20.stop(); - } - } - }, _callee20); - })); - - function run(_x39, _x40) { - return _run20.apply(this, arguments); - } - return run; }() }]; @@ -7673,7 +7638,7 @@ if(false) {} /***/ "9pOX": /***/ (function(module) { -module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogestures\":\"Écogestes\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_faq\":\"FAQ\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"CGU\",\"accessibility\":{\"loading\":\"Chargement\"}},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Electricité\",\"LABEL\":\"Électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smart_count} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'écogeste\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre écogeste.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"ideal_home\":\"Conso idéale pour votre profil\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"not_connected\":\"Non connecté\",\"no_data_2\":\"Données non disponibles\",\"accessibility\":{\"button_go_to_profil\":\"Aller à la page de profil\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\"},\"no_data\":\"Pas de données\"},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_options\":\"Je connecte mes compteurs\",\"go_back\":\"Retour\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_go_back\":\"Retour\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"month\":\"Au mois de \",\"estimation\":\"Comment sont estimés\",\"estimation2\":\"les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"electricity-info-modal\",\"button_close\":\"close-modal\"},\"title1\":\"Qu’est-ce que la consommation minimum ?\",\"title2\":\"Qu’est-ce que la puissance maximum ?\",\"text1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"text2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\",\"text3\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"text4\":\"Vous avez choisi une puissance maximum dans votre offre d’éléctricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"text5\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\"},\"auth\":{\"enedisgrandlyon\":{\"connect\":{\"label1\":\"Je me connecte à mon\",\"label2\":\"compte Enedis\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte Enedis\",\"subtitle1\":\"Si vous n’avez pas de compte Enedis\",\"button_create_account\":\"Je crée mon compte Enedis\",\"subtitle2\":\"Si vous avez déjà un compte Enedis,\",\"subtitle2_info\":\"votre accord est nécessaire pour connecter Enedis et Ecolyo\",\"info\":\"Enedis est responsable de votre compteur Linky et en charge de relever vos consommations.\"},\"title_with_account\":\"Votre compte Enedis a bien été créé ?\",\"with_account\":{\"title\":\"Votre compte Enedis a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter Enedis et Ecolyo !\",\"subtitle2\":\"Si vous n’avez pas de compte Enedis\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"grdfgrandlyon\":{\"connect\":{\"label1\":\"Je me connecte à mon\",\"label2\":\"compte GRDF\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte GRDF\",\"subtitle1\":\"Si vous n’avez pas de compte GRDF\",\"button_create_account\":\"Je crée mon compte GRDF\",\"subtitle2\":\"Si vous avez déjà un compte GRDF,\",\"subtitle2_info\":\"votre accord est nécessaire pour connecter GRDF et Ecolyo\",\"info\":\"GRDF est responsable de votre compteur Gazpar et en charge de relever vos consommations.\"},\"with_account\":{\"title\":\"Votre compte GRDF a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter GRDF et Ecolyo !\",\"subtitle1_info\":\"Une période de consentement minimale d'un an est recommandée\",\"subtitle2\":\"Si vous n’avez pas de compte GRDF\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"eglgrandlyon\":{\"connect\":{\"login\":\"Identifiant Eau du Grand Lyon (7 chiffres)\",\"password\":\"Mot de passe\",\"label1\":\"Je me connecte à mon\",\"label2\":\"compte Eau du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte Eau du Grand Lyon\",\"subtitle1\":\"Si vous n’avez pas de compte EGL\",\"button_create_account\":\"Je crée mon compte EGL\",\"subtitle2\":\"Si vous avez déjà un compte EGL,\",\"subtitle2_info\":\"renseignez votre identifiant Eau Du Grand Lyon.\"},\"with_account\":{\"title\":\"Votre compte Eau du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter EGL et Ecolyo !\",\"subtitle2\":\"Si vous n’avez pas de compte EGL\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_goto_guide\":\"Voir le guide\"}},\"challenge\":{\"banner\":{\"title\":\"Nouvelle section prochainement\",\"content\":\"Nous traitons actuellement les retours des utilisateurs afin d'améliorer les défis\"},\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le challenge précédent\"}},\"card_done\":{\"day\":\" jour\",\"days\":\" jours\",\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"stars\":\" étoiles\",\"get_in\":\"obtenues en \",\"final_defi\":\"sur le duel final\"},\"card_unlocked\":{\"button_launch\":\"Lancer le challenge\"},\"accessibility\":{\"button_launch\":\"Lancer le challenge\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\"},\"partners_issue_modal\":{\"title\":\"Un problème dans la récupération de vos données\",\"text_1\":\"Ces partenaires nous indiquent qu’ils subissent en ce moment un soucis technique :\",\"text_2\":\"La visualisation de vos consommations peut s’en trouver affectée.\",\"button_validate\":\"J'ai compris\"}},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_data\":\"Dernières données\",\"last_valid_data\":\"Dernières données disponibles\",\"last_valid_data_multi\":\"Dernières données complètes\",\"data_to_come\":\"à venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (tarif réglementé de vente au %{gasPriceStartDate} pour un consommateur soutirant moins de 6 MWh par an)\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte dans Ecolyo.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"Retour\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"sucess\":{\"title\":\"Félicitations !\",\"message1\":\"Vous avez économisé \",\"message2\":\"et gagné le badge \",\"button_validate\":\"Youpi !\"},\"lost\":{\"title\":\"Presque !\",\"message1\":\"Vous avez dépassé de \",\"message2\":\"et manqué le badge \",\"button_validate\":\"Zut alors !\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Tous\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les écogestes les plus adaptés à votre consommation\",\"selection_2\":\"vus sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucun écogeste ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'écogestes adaptés à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d'éco-gestes vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Tous les écogestes\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’écogestes adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_go_to_profil\":\"Aller à la page de profil\",\"button_close\":\"Fermer la fenetre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les écogestes sont des actions qui vous permettent de réduire vos consommations et donc vos factures.\",\"obj1_done\":\"Aucun écogeste n’est indiqué comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucun écogeste n’est indiqué comme déjà appliqué actuellement.\",\"doing1_done\":\"Aucun écogeste n’est indiqué comme déjà appliqué actuellement.\",\"doing2\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir tous les écogestes\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes écogestes\",\"text1\":\"Les écogestes sont des actions qui vous permettent de réduire vos consommations et donc vos factures.\",\"text2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"text3\":\"Afin de savoir quels écogestes correspondent à votre consommation, merci de répondre à quelques rapides questions.\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Écogeste\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Je veux moins d’infos\",\"show_more\":\"Je veux plus d’infos\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre ecogeste\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les écogestes adaptés à mon profil ?\",\"text\":\"Les écogestes adaptés à votre profil sont aujourd'hui choisis en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour votre chauffage ?\"},\"hot_water_type\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"garden\":\"Jardin\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\"}},\"ecogesture_selection\":{\"header\":\"Sélection des écogestes\",\"title\":\"Vous avez parcouru un groupe de %{smart_count} écogestes\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des écogestes adaptés à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas interessé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenetre\",\"button_go_to_ecogesture\":\"Retourner aux ecogestes\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des écogestes correspondants à votre profil ont été trouvés !\",\"text\":\"À vous de choisir ceux que vous souhaitez mettre en objectif et ceux que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'écogeste demandé.\"},\"faq\":{\"title_faq\":\"Foire aux questions\",\"read_faq\":\"Lire la FAQ\",\"accessibility\":{\"button_toggle_detail\":\"Afficher ou masquer le détail de la question\"}},\"feedback\":{\"title\":\"Partagez-nous vos retours\",\"type\":\"Motif du retour :\",\"suggest_faq\":\"Avez-vous pensé à consulter la \",\"description\":\"Description :\",\"description_placeholder\":\"Vos remarques\",\"send\":\"Envoyer\",\"ok\":\"Ok\",\"type_bug\":\"Bug\",\"type_idea\":\"Idée\",\"type_other\":\"Autre\",\"success_sending\":\"Nous vous remercions pour votre retour.\",\"warning\":\"Attention !\",\"error_empty_description\":\"Le champ de description est vide.\",\"error_sending\":\"Erreur lors de l'envoi, veuillez essayer ultérieurement.\",\"upload\":\"Joindre une image\",\"imageLabel\":\"Image :\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"select_type_bug\":\"Sélectionner le motif bug\",\"select_type_idea\":\"Sélectionner le motif idée\",\"select_type_other\":\"Sélectionner le motif autre\",\"button_send\":\"Envoyer le retour\",\"button_ok\":\"Valider\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Pour le bon fonctionnement du service, nous avons besoin de l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu. \",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition. \",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les <span class=\\\"action\\\">Conditions Générales d’Utilisation</span> \",\"validLegal\":\" du service et ai pris connaissance des <span class=\\\"action\\\"> Mentions Légales </span> de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"subtitle\":\"Envie de prendre le temps de relire ces CGU ces Conditions Générales d’Utilisation plus tard ? Vous pourrez les retrouver dans la page Options du service.\",\"version\":\"V2.0 du 20.08.2021\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des éco-gestes vous sont aussi proposés afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Écogestes : Une liste d’écogestes à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des éco-gestes, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez retrouver les connecteurs - services vous permettant d’aller récupérer vos données d’électricité, de gaz et d’eau - , une foire aux questions, et de quoi ajuster votre profil.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines ! Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois ! Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez Enedis, GRDF et Eau du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Grand Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cloud Personnel Grand Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maitrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix. Le service Ecolyo se déploie à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos connecteurs dans la page Options. À ce moment-là, et à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour les données électriques (chez Enedis), elle est par défaut de 6 mois. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale).\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de cette donnée se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la Page Options.\",\"part5_3_list2\":\"Attention : lors de la désinstallation du connecteur qui collecte vos données au sein du cloud, celui-ci ne va plus aller chercher vos données. Par contre, votre consentement chez le partenaire fournisseur est toujours actif jusqu’à votre révocation de consentement auprès de ce dernier. Pour révoquer votre consentement, il vous faudra contacter ou agir directement chez le partenaire en question : Enedis pour l’électricité ou GRDF pour le gaz. Pour l’électricité, vous pouvez peut supprimer votre consentement à partager vos données en écrivant directement à dataconnect(at)enedis.fr. Pour le gaz, il vous faudra vous connecter à <a href=\\\"https://monespace.grdf.fr/monespace/connexion\\\">votre espace GRDF</a> et supprimer le consentement donné à la Métropole de Lyon dans la partie « Suivi de Consommations » puis « Données Consultées ». Au terme de la durée initiale de validité du consentement de 6 mois ou de la durée que vous aurez définie librement, votre consentement sera considéré comme révolu. Tout nouveau transfert de données sera donc soumis à nouveau au recueil préalable de votre consentement.\",\"part5_3_list3\":\"Pour supprimer l’ensemble de vos données ainsi que votre espace personnel Grand Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau du Grand Lyon, un jeton d’identification Enedis et/ou GRDF ainsi que vos numéros de compteurs sont stockés dans votre cloud personnel – sans droit de regard de la Métropole de Lyon.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Grand Lyon.\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n’a accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ présente dans le service (page Options) ou à nous contacter via le formulaire de contact (la petite bulle jaune) présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Grand Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"gcu_option\":{\"title\":\"Conditions générales d’utilisation\",\"read_gcu\":\"Lire les CGU\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_delete\":\"Supprimer\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_delete\":\"Supprimer votre connexion\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"partner_issue\":\"En maintenance\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_update_electricity\":\"Vos données de consommation d'électricité sont maintenant à jour dans Ecolyo.\",\"success_data_update_water\":\"Vos données de consommation d'eau sont maintenant à jour dans Ecolyo.\",\"success_data_update_gas\":\"Vos données de consommation de gaz sont maintenant à jour dans Ecolyo.\",\"error_txt\":\"Aïe !\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_data_gas\":\"Un problème est survenu. Vos données de consommmation de gaz ne seront pas chargées.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Votre autorisation pour afficher vos données de gaz a expiré\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"Veuillez re-donner votre accord pour que GRDF nous transmette vos données de consommation.\"},\"text2\":{\"0\":\"Voulez-vous donner votre accord sur votre compte ENEDIS maintenant ?\",\"2\":\"Voulez-vous donner votre accord sur votre compte GRDF maintenant ?\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\"},\"delete_grdf_modal\":{\"text1\":\"La suppression de la connexion avec GRDF s’accompagne de la suppression de votre consentement à partager vos données gaz avec Ecolyo.\",\"text2\":\"Si vous souhaitez vous reconnecter, il vous faudra re-donner votre accord pour que GRDF nous transmette vos données de consommation.\",\"text3\":\"Voulez-vous supprimer votre connexion et votre consentement à GRDF ?\",\"cancel\":\"Plus tard\",\"go\":\"Oui\"},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales\",\"version\":\"V2.0 du 20.08.2021\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directeur de publication : \",\"p1\":\"Blandine MELAY\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Maria Inés LEAL\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier - <a href=\\\"https://florentdufier.myportfolio.com/\\\">https://florentdufier.myportfolio.com/</a>\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria, Cozy Cloud, Clever Age\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, eslint-config-cozy-app, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-lottie, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les biliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, Sonarqube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service Ecolyo – Enedis, GRDF et Eau du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de l’usager et à leur transmission sur la plateforme de cloud personnel, après consentement de l’usager ;\",\"part2-2\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-2-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-2-2\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-2-3\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-2-4\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact\",\"part2-3\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-4\":\"L’utilisateur est donc le seul à accéder :\",\"part2-4-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-4-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-4-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-5\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-6\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données auprès d’Enedis et de GRDF.\",\"part2-7\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-8\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-9\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Écogestes\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant créer ou vous connecter à votre compte chez le gestionnaire de votre compteur communicant afin de donner votre accord pour relier Ecolyo à l’électricité (Enedis), au gaz (GRDF) ou à l’eau (Eau du Grand Lyon).\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"old_fluid_data_modal\":{\"errorTxt\":\"Aïe !\",\"oldData\":\"Vos données semblent anciennes\",\"verify\":\"Veuillez vérifier l’état de vos connecteurs : \",\"problem\":\"Vos connecteurs semblent bien connectés, il se peut qu’il y ait un problème au niveau du ou des fournisseurs de données :\",\"problem_electricity\":\"pour l'électricité.\",\"problem_water\":\"pour l'eau.\",\"problem_gas\":\"pour le gaz.\",\"contact\":\"Veuillez prendre contact directement avec eux.\",\"accessButton\":\"Accéder aux connecteurs\",\"later\":\"Plus tard\",\"ok\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_ok\":\"Fermer la fenêtre\",\"button_later\":\"Fermer la fenêtre\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"partner_connection_steps\":{\"electricity\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture d’électricité</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Si le contrat d’électricité est à votre nom, privilégiez l’identification <span>France connect.</span>\",\"info2\":\"Sinon, munissez-vous de la <span>pièce d’identité du titulaire du contrat.</span>\"},\"step3\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur Enedis\"},\"water\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture d'eau</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur EGL\"},\"gas\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture de gaz</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur GRDF\"},\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"accessibility\":{\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_validate\":\"Aller sur le site du partenaire.\",\"button_close\":\"Fermer la fenètre.\",\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\"}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_alert\":\"Alerte fuite d'eau\",\"title_bilan\":\"Bilan et conseils\",\"switch_label_bilan\":\"Je reçois la lettre mensuelle contenant un bilan et des conseils sur ma consommation.\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"(Votre consommation quotidienne maximum sur les 6 derniers mois : \",\"activate\":\"Activer\",\"deactivate\":\"Désactiver\"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Profil de consommation\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Votre profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"appartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Etes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage.\",\"label2\":\"Nous pourrons aussi vous proposer des écogestes adaptés à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_validate\":\"Valider\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Rééssayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Rééssayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"ecogesture_error\":\"Chargement de vos écogestes\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Test de la connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"0\":\"Mise à jour de l'application\",\"1\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"2\":\"Chargement de votre profil\",\"3\":\"Chargement de vos écogestes\",\"4\":\"Actualisation de votre progression dans les défis\",\"5\":\"Mise à jour des prix\",\"6\":\"Test de la connexion à vos données de consommation\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"activate\":{\"enedis\":{\"consent_active\":{\"title\":\"La visualisation par 1/2 heure n’est pas activée\",\"info\":\"Pour les visualiser, il vous faut activer l’<span>enregistrement</span> de votre consommation horaire sur votre compte Enedis\",\"label1\":\"Activer sur mon compte Enedis\",\"accessibility\":{\"button_activate\":\"Aller sur mon compte Enedis\"}},\"no_consent_active\":{\"title\":\"La visualisation par 1/2 heure n’est pas activée\",\"info\":\"Il semble que votre consentement ait expiré, il vous faut ré-activer l’enregistrement de votre consommation horaire sur votre compte Enedis\",\"label1\":\"Ré-activer sur mon compte Enedis\",\"accessibility\":{\"button_activate\":\"Aller sur mon compte Enedis\"},\"text_analysis\":\"Pour bénéficier d’une analyse approfondie de votre consommation électrique, il vous faut activer l’enregistrement de votre consommation horaire sur votre compte Enedis\"},\"consent_activated\":{\"title\":\"La récupération de vos données s’effectuera cette nuit.\",\"title_2\":\"À demain !\",\"info\":\"Si vous n’avez pas réussi à activer l'enregistrement de votre consommation horaire, vous pouvez ré-essayer.\"}}},\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"title\":\"Etes-vous sûr de ne plus vouloir recevoir notre email mensuel ?\",\"content\":\"Dans ce cas, vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_text\":\"Oui, je me désabonne\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}"); +module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogestures\":\"Écogestes\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_faq\":\"FAQ\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"CGU\",\"accessibility\":{\"loading\":\"Chargement\"}},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Electricité\",\"LABEL\":\"Électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smart_count} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'écogeste\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre écogeste.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"ideal_home\":\"Conso idéale pour votre profil\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"not_connected\":\"Non connecté\",\"no_data_2\":\"Données non disponibles\",\"accessibility\":{\"button_go_to_profil\":\"Aller à la page de profil\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\"},\"no_data\":\"Pas de données\"},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_options\":\"Je connecte mes compteurs\",\"go_back\":\"Retour\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_go_back\":\"Retour\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"month\":\"Au mois de \",\"estimation\":\"Comment sont estimés\",\"estimation2\":\"les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"electricity-info-modal\",\"button_close\":\"close-modal\"},\"title1\":\"Qu’est-ce que la consommation minimum ?\",\"title2\":\"Qu’est-ce que la puissance maximum ?\",\"text1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"text2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\",\"text3\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"text4\":\"Vous avez choisi une puissance maximum dans votre offre d’éléctricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"text5\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\"},\"auth\":{\"enedisgrandlyon\":{\"connect\":{\"label1\":\"Je me connecte à mon\",\"label2\":\"compte Enedis\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte Enedis\",\"subtitle1\":\"Si vous n’avez pas de compte Enedis\",\"button_create_account\":\"Je crée mon compte Enedis\",\"subtitle2\":\"Si vous avez déjà un compte Enedis,\",\"subtitle2_info\":\"votre accord est nécessaire pour connecter Enedis et Ecolyo\",\"info\":\"Enedis est responsable de votre compteur Linky et en charge de relever vos consommations.\"},\"title_with_account\":\"Votre compte Enedis a bien été créé ?\",\"with_account\":{\"title\":\"Votre compte Enedis a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter Enedis et Ecolyo !\",\"subtitle2\":\"Si vous n’avez pas de compte Enedis\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"grdfgrandlyon\":{\"connect\":{\"label1\":\"Je me connecte à mon\",\"label2\":\"compte GRDF\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte GRDF\",\"subtitle1\":\"Si vous n’avez pas de compte GRDF\",\"button_create_account\":\"Je crée mon compte GRDF\",\"subtitle2\":\"Si vous avez déjà un compte GRDF,\",\"subtitle2_info\":\"votre accord est nécessaire pour connecter GRDF et Ecolyo\",\"info\":\"GRDF est responsable de votre compteur Gazpar et en charge de relever vos consommations.\"},\"with_account\":{\"title\":\"Votre compte GRDF a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter GRDF et Ecolyo !\",\"subtitle1_info\":\"Une période de consentement minimale d'un an est recommandée\",\"subtitle2\":\"Si vous n’avez pas de compte GRDF\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"eglgrandlyon\":{\"connect\":{\"login\":\"Identifiant Eau du Grand Lyon (7 chiffres)\",\"password\":\"Mot de passe\",\"label1\":\"Je me connecte à mon\",\"label2\":\"compte Eau du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à votre compte Eau du Grand Lyon\",\"subtitle1\":\"Si vous n’avez pas de compte EGL\",\"button_create_account\":\"Je crée mon compte EGL\",\"subtitle2\":\"Si vous avez déjà un compte EGL,\",\"subtitle2_info\":\"renseignez votre identifiant Eau Du Grand Lyon.\"},\"with_account\":{\"title\":\"Votre compte Eau du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter EGL et Ecolyo !\",\"subtitle2\":\"Si vous n’avez pas de compte EGL\",\"button_create_account\":\"Je crée mon compte\",\"subtitle2_info\":\"En cas de soucis pour créer votre compte ou pour vous y connecter, un guide en pas-à-pas est disponible pour vous y aider.\",\"button_goto_guide\":\"Voir le guide\"}},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_goto_guide\":\"Voir le guide\"}},\"challenge\":{\"banner\":{\"title\":\"Nouvelle section prochainement\",\"content\":\"Nous traitons actuellement les retours des utilisateurs afin d'améliorer les défis\"},\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le challenge précédent\"}},\"card_done\":{\"day\":\" jour\",\"days\":\" jours\",\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"stars\":\" étoiles\",\"get_in\":\"obtenues en \",\"final_defi\":\"sur le duel final\"},\"card_unlocked\":{\"button_launch\":\"Lancer le challenge\"},\"accessibility\":{\"button_launch\":\"Lancer le challenge\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\"},\"partners_issue_modal\":{\"title\":\"Un problème dans la récupération de vos données\",\"text_1\":\"Ces partenaires nous indiquent qu’ils subissent en ce moment un soucis technique :\",\"text_2\":\"La visualisation de vos consommations peut s’en trouver affectée.\",\"button_validate\":\"J'ai compris\"}},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_data\":\"Dernières données\",\"last_valid_data\":\"Dernières données disponibles\",\"last_valid_data_multi\":\"Dernières données complètes\",\"data_to_come\":\"à venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (tarif réglementé de vente au %{gasPriceStartDate} pour un consommateur soutirant moins de 6 MWh par an)\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte dans Ecolyo.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"Retour\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"sucess\":{\"title\":\"Félicitations !\",\"message1\":\"Vous avez économisé \",\"message2\":\"et gagné le badge \",\"button_validate\":\"Youpi !\"},\"lost\":{\"title\":\"Presque !\",\"message1\":\"Vous avez dépassé de \",\"message2\":\"et manqué le badge \",\"button_validate\":\"Zut alors !\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Tous\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les écogestes les plus adaptés à votre consommation\",\"selection_2\":\"vus sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucun écogeste ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'écogestes adaptés à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d'éco-gestes vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Tous les écogestes\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’écogestes adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_go_to_profil\":\"Aller à la page de profil\",\"button_close\":\"Fermer la fenetre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les écogestes sont des actions qui vous permettent de réduire vos consommations et donc vos factures.\",\"obj1_done\":\"Aucun écogeste n’est indiqué comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucun écogeste n’est indiqué comme déjà appliqué actuellement.\",\"doing1_done\":\"Aucun écogeste n’est indiqué comme déjà appliqué actuellement.\",\"doing2\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter tous les écogestes et ajouter les gestes que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir tous les écogestes\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes écogestes\",\"text1\":\"Les écogestes sont des actions qui vous permettent de réduire vos consommations et donc vos factures.\",\"text2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"text3\":\"Afin de savoir quels écogestes correspondent à votre consommation, merci de répondre à quelques rapides questions.\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Écogeste\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Je veux moins d’infos\",\"show_more\":\"Je veux plus d’infos\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre ecogeste\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les écogestes adaptés à mon profil ?\",\"text\":\"Les écogestes adaptés à votre profil sont aujourd'hui choisis en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour votre chauffage ?\"},\"hot_water_type\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"garden\":\"Jardin\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\"}},\"ecogesture_selection\":{\"header\":\"Sélection des écogestes\",\"title\":\"Vous avez parcouru un groupe de %{smart_count} écogestes\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des écogestes adaptés à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas interessé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenetre\",\"button_go_to_ecogesture\":\"Retourner aux ecogestes\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des écogestes correspondants à votre profil ont été trouvés !\",\"text\":\"À vous de choisir ceux que vous souhaitez mettre en objectif et ceux que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'écogeste demandé.\"},\"faq\":{\"title_faq\":\"Foire aux questions\",\"read_faq\":\"Lire la FAQ\",\"accessibility\":{\"button_toggle_detail\":\"Afficher ou masquer le détail de la question\"}},\"feedback\":{\"title\":\"Partagez-nous vos retours\",\"type\":\"Motif du retour :\",\"suggest_faq\":\"Avez-vous pensé à consulter la \",\"description\":\"Description :\",\"description_placeholder\":\"Vos remarques\",\"send\":\"Envoyer\",\"ok\":\"Ok\",\"type_bug\":\"Bug\",\"type_idea\":\"Idée\",\"type_other\":\"Autre\",\"success_sending\":\"Nous vous remercions pour votre retour.\",\"warning\":\"Attention !\",\"error_empty_description\":\"Le champ de description est vide.\",\"error_sending\":\"Erreur lors de l'envoi, veuillez essayer ultérieurement.\",\"upload\":\"Joindre une image\",\"imageLabel\":\"Image :\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"select_type_bug\":\"Sélectionner le motif bug\",\"select_type_idea\":\"Sélectionner le motif idée\",\"select_type_other\":\"Sélectionner le motif autre\",\"button_send\":\"Envoyer le retour\",\"button_ok\":\"Valider\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Pour le bon fonctionnement du service, nous avons besoin de l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu. \",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition. \",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les <span class=\\\"action\\\">Conditions Générales d’Utilisation</span> \",\"validLegal\":\" du service et ai pris connaissance des <span class=\\\"action\\\"> Mentions Légales </span> de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"subtitle\":\"Envie de prendre le temps de relire ces CGU ces Conditions Générales d’Utilisation plus tard ? Vous pourrez les retrouver dans la page Options du service.\",\"version\":\"V2.0 du 20.08.2021\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des éco-gestes vous sont aussi proposés afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Écogestes : Une liste d’écogestes à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des éco-gestes, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez retrouver les connecteurs - services vous permettant d’aller récupérer vos données d’électricité, de gaz et d’eau - , une foire aux questions, et de quoi ajuster votre profil.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines ! Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois ! Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez Enedis, GRDF et Eau du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Grand Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cloud Personnel Grand Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maitrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix. Le service Ecolyo se déploie à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos connecteurs dans la page Options. À ce moment-là, et à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour les données électriques (chez Enedis), elle est par défaut de 6 mois. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale).\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de cette donnée se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la Page Options.\",\"part5_3_list2\":\"Attention : lors de la désinstallation du connecteur qui collecte vos données au sein du cloud, celui-ci ne va plus aller chercher vos données. Par contre, votre consentement chez le partenaire fournisseur est toujours actif jusqu’à votre révocation de consentement auprès de ce dernier. Pour révoquer votre consentement, il vous faudra contacter ou agir directement chez le partenaire en question : Enedis pour l’électricité ou GRDF pour le gaz. Pour l’électricité, vous pouvez peut supprimer votre consentement à partager vos données en écrivant directement à dataconnect(at)enedis.fr. Pour le gaz, il vous faudra vous connecter à <a href=\\\"https://monespace.grdf.fr/monespace/connexion\\\">votre espace GRDF</a> et supprimer le consentement donné à la Métropole de Lyon dans la partie « Suivi de Consommations » puis « Données Consultées ». Au terme de la durée initiale de validité du consentement de 6 mois ou de la durée que vous aurez définie librement, votre consentement sera considéré comme révolu. Tout nouveau transfert de données sera donc soumis à nouveau au recueil préalable de votre consentement.\",\"part5_3_list3\":\"Pour supprimer l’ensemble de vos données ainsi que votre espace personnel Grand Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau du Grand Lyon, un jeton d’identification Enedis et/ou GRDF ainsi que vos numéros de compteurs sont stockés dans votre cloud personnel – sans droit de regard de la Métropole de Lyon.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Grand Lyon.\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n’a accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Grand Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ présente dans le service (page Options) ou à nous contacter via le formulaire de contact (la petite bulle jaune) présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Grand Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"gcu_option\":{\"title\":\"Conditions générales d’utilisation\",\"read_gcu\":\"Lire les CGU\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_delete\":\"Supprimer\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_delete\":\"Supprimer votre connexion\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"partner_issue\":\"En maintenance\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_update_electricity\":\"Vos données de consommation d'électricité sont maintenant à jour dans Ecolyo.\",\"success_data_update_water\":\"Vos données de consommation d'eau sont maintenant à jour dans Ecolyo.\",\"success_data_update_gas\":\"Vos données de consommation de gaz sont maintenant à jour dans Ecolyo.\",\"error_txt\":\"Aïe !\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_data_gas\":\"Un problème est survenu. Vos données de consommmation de gaz ne seront pas chargées.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Votre autorisation pour afficher vos données de gaz a expiré\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"Veuillez re-donner votre accord pour que GRDF nous transmette vos données de consommation.\"},\"text2\":{\"0\":\"Voulez-vous donner votre accord sur votre compte ENEDIS maintenant ?\",\"2\":\"Voulez-vous donner votre accord sur votre compte GRDF maintenant ?\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\"},\"delete_grdf_modal\":{\"text1\":\"La suppression de la connexion avec GRDF s’accompagne de la suppression de votre consentement à partager vos données gaz avec Ecolyo.\",\"text2\":\"Si vous souhaitez vous reconnecter, il vous faudra re-donner votre accord pour que GRDF nous transmette vos données de consommation.\",\"text3\":\"Voulez-vous supprimer votre connexion et votre consentement à GRDF ?\",\"cancel\":\"Plus tard\",\"go\":\"Oui\"},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales\",\"version\":\"V2.0 du 20.08.2021\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directeur de publication : \",\"p1\":\"Blandine MELAY\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Maria Inés LEAL\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier - <a href=\\\"https://florentdufier.myportfolio.com/\\\">https://florentdufier.myportfolio.com/</a>\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria, Cozy Cloud, Clever Age\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, eslint-config-cozy-app, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-lottie, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les biliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, Sonarqube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service Ecolyo – Enedis, GRDF et Eau du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de l’usager et à leur transmission sur la plateforme de cloud personnel, après consentement de l’usager ;\",\"part2-2\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-2-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-2-2\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-2-3\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-2-4\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact\",\"part2-3\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-4\":\"L’utilisateur est donc le seul à accéder :\",\"part2-4-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-4-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-4-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-5\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-6\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données auprès d’Enedis et de GRDF.\",\"part2-7\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-8\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-9\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Écogestes\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant créer ou vous connecter à votre compte chez le gestionnaire de votre compteur communicant afin de donner votre accord pour relier Ecolyo à l’électricité (Enedis), au gaz (GRDF) ou à l’eau (Eau du Grand Lyon).\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"old_fluid_data_modal\":{\"errorTxt\":\"Aïe !\",\"oldData\":\"Vos données semblent anciennes\",\"verify\":\"Veuillez vérifier l’état de vos connecteurs : \",\"problem\":\"Vos connecteurs semblent bien connectés, il se peut qu’il y ait un problème au niveau du ou des fournisseurs de données :\",\"problem_electricity\":\"pour l'électricité.\",\"problem_water\":\"pour l'eau.\",\"problem_gas\":\"pour le gaz.\",\"contact\":\"Veuillez prendre contact directement avec eux.\",\"accessButton\":\"Accéder aux connecteurs\",\"later\":\"Plus tard\",\"ok\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_ok\":\"Fermer la fenêtre\",\"button_later\":\"Fermer la fenêtre\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"partner_connection_steps\":{\"electricity\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture d’électricité</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Si le contrat d’électricité est à votre nom, privilégiez l’identification <span>France connect.</span>\",\"info2\":\"Sinon, munissez-vous de la <span>pièce d’identité du titulaire du contrat.</span>\"},\"step3\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur Enedis\"},\"water\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture d'eau</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur EGL\"},\"gas\":{\"step1\":{\"info1\":\"Munissez-vous d’une <span>facture de gaz</span> et d’un zeste de patience.\",\"info2\":\"\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>revenez sur Ecolyo</span> pour finaliser la connexion.\",\"info2\":\"\"},\"button_validate\":\"Aller sur GRDF\"},\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"accessibility\":{\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_validate\":\"Aller sur le site du partenaire.\",\"button_close\":\"Fermer la fenètre.\",\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\"}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_alert\":\"Alerte fuite d'eau\",\"title_bilan\":\"Bilan et conseils\",\"switch_label_bilan\":\"Je reçois la lettre mensuelle contenant un bilan et des conseils sur ma consommation.\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"(Votre consommation quotidienne maximum sur les 6 derniers mois : \",\"activate\":\"Activer\",\"deactivate\":\"Désactiver\"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Profil de consommation\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Votre profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"appartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Etes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage.\",\"label2\":\"Nous pourrons aussi vous proposer des écogestes adaptés à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_validate\":\"Valider\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Rééssayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Rééssayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"ecogesture_error\":\"Chargement de vos écogestes\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Test de la connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Erreur inconnue\",\"network_error\":\"Erreur de réseau\",\"step\":{\"0\":\"Mise à jour de l'application\",\"1\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"2\":\"Chargement de votre profil\",\"3\":\"Chargement de vos écogestes\",\"4\":\"Actualisation de votre progression dans les défis\",\"5\":\"Mise à jour des prix\",\"6\":\"Test de la connexion à vos données de consommation\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"activate\":{\"enedis\":{\"consent_active\":{\"title\":\"La visualisation par 1/2 heure n’est pas activée\",\"info\":\"Pour les visualiser, il vous faut activer l’<span>enregistrement</span> de votre consommation horaire sur votre compte Enedis\",\"label1\":\"Activer sur mon compte Enedis\",\"accessibility\":{\"button_activate\":\"Aller sur mon compte Enedis\"}},\"no_consent_active\":{\"title\":\"La visualisation par 1/2 heure n’est pas activée\",\"info\":\"Il semble que votre consentement ait expiré, il vous faut ré-activer l’enregistrement de votre consommation horaire sur votre compte Enedis\",\"label1\":\"Ré-activer sur mon compte Enedis\",\"accessibility\":{\"button_activate\":\"Aller sur mon compte Enedis\"},\"text_analysis\":\"Pour bénéficier d’une analyse approfondie de votre consommation électrique, il vous faut activer l’enregistrement de votre consommation horaire sur votre compte Enedis\"},\"consent_activated\":{\"title\":\"La récupération de vos données s’effectuera cette nuit.\",\"title_2\":\"À demain !\",\"info\":\"Si vous n’avez pas réussi à activer l'enregistrement de votre consommation horaire, vous pouvez ré-essayer.\"}}},\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"title\":\"Etes-vous sûr de ne plus vouloir recevoir notre email mensuel ?\",\"content\":\"Dans ce cas, vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_text\":\"Oui, je me désabonne\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}"); /***/ }), @@ -16063,6 +16028,7 @@ var initialState = { duelHash: '', quizHash: '', explorationHash: '', + fluidPricesHash: '', isFirstConnection: false, partnersIssueDate: _luxon.DateTime.fromISO('0000-01-01T00:00:00.000Z'), lastConnectionDate: _luxon.DateTime.fromISO('0000-01-01T00:00:00.000Z'), @@ -17298,7 +17264,7 @@ var QueryRunner = /*#__PURE__*/function () { break; } - return _context5.abrupt("return", _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _context5.abrupt("return", _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true })); @@ -17340,7 +17306,7 @@ var QueryRunner = /*#__PURE__*/function () { break; } - return _context6.abrupt("return", _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _context6.abrupt("return", _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true })); @@ -19599,7 +19565,7 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE var Handlebars = __webpack_require__("3O+N"); function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); } module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px !important;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; + return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; },"useData":true}); /***/ }), @@ -20266,10 +20232,6 @@ exports.default = void 0; var _regenerator = _interopRequireDefault(__webpack_require__("o0o1")); -var _objectSpread2 = _interopRequireDefault(__webpack_require__("MVZn")); - -var _slicedToArray2 = _interopRequireDefault(__webpack_require__("J4zp")); - var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("yXPU")); var _classCallCheck2 = _interopRequireDefault(__webpack_require__("lwsE")); @@ -20362,11 +20324,9 @@ var FluidPricesService = /*#__PURE__*/function () { while (1) { switch (_context2.prev = _context2.next) { case 0: - query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).indexFields(['startDate']).where({ + query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ startDate: { - $lte: date.toISO({ - suppressMilliseconds: true - }).toString() + $lt: date.toString() }, fluidType: fluidType }).sortBy([{ @@ -20409,7 +20369,7 @@ var FluidPricesService = /*#__PURE__*/function () { while (1) { switch (_context3.prev = _context3.next) { case 0: - query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).indexFields(['fluidType']).where({ + query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ endDate: { $eq: null } @@ -20544,155 +20504,6 @@ var FluidPricesService = /*#__PURE__*/function () { return deleteAllFluidsPrices; }() - /** - * Check if a fluidprice exists in db - * @param {FluidPrice} fluidPrice - * @returns {FluidPrice | null} price or null - */ - - }, { - key: "checkIfPriceExists", - value: function () { - var _checkIfPriceExists = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(fluidPrice) { - var query, _yield$this$_client$q4, _yield$this$_client$q5, price; - - return _regenerator.default.wrap(function _callee5$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ - startDate: { - $eq: fluidPrice.startDate - }, - fluidType: { - $eq: fluidPrice.fluidType - } - }); - _context5.next = 3; - return this._client.query(query); - - case 3: - _yield$this$_client$q4 = _context5.sent; - _yield$this$_client$q5 = (0, _slicedToArray2.default)(_yield$this$_client$q4.data, 1); - price = _yield$this$_client$q5[0]; - - if (!price) { - _context5.next = 10; - break; - } - - return _context5.abrupt("return", price); - - case 10: - return _context5.abrupt("return", null); - - case 11: - case "end": - return _context5.stop(); - } - } - }, _callee5, this); - })); - - function checkIfPriceExists(_x3) { - return _checkIfPriceExists.apply(this, arguments); - } - - return checkIfPriceExists; - }() - /** - * Creates a new fluidPrice - * @param {FluidPrice} fluidPrice - * @returns {FluidPrice | null} price or null - */ - - }, { - key: "createPrice", - value: function () { - var _createPrice = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(newPrice) { - var _yield$this$_client$c, createdPrice; - - return _regenerator.default.wrap(function _callee6$(_context6) { - while (1) { - switch (_context6.prev = _context6.next) { - case 0: - _context6.prev = 0; - _context6.next = 3; - return this._client.create(_doctypes.FLUIDPRICES_DOCTYPE, newPrice); - - case 3: - _yield$this$_client$c = _context6.sent; - createdPrice = _yield$this$_client$c.data; - return _context6.abrupt("return", createdPrice); - - case 8: - _context6.prev = 8; - _context6.t0 = _context6["catch"](0); - console.log('Error creating new createdPrice: ', _context6.t0); - throw _context6.t0; - - case 12: - case "end": - return _context6.stop(); - } - } - }, _callee6, this, [[0, 8]]); - })); - - function createPrice(_x4) { - return _createPrice.apply(this, arguments); - } - - return createPrice; - }() - /** - * Updates a price in db - * @param {FluidPrice} doc - * @param {Partial<FluidPrice>} attributes - * @returns {FluidPrice | null} - */ - - }, { - key: "updatePrice", - value: function () { - var _updatePrice = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(doc, attributes) { - var _yield$this$_client$s, fluidPrice; - - return _regenerator.default.wrap(function _callee7$(_context7) { - while (1) { - switch (_context7.prev = _context7.next) { - case 0: - _context7.next = 2; - return this._client.save((0, _objectSpread2.default)({}, doc, attributes)); - - case 2: - _yield$this$_client$s = _context7.sent; - fluidPrice = _yield$this$_client$s.data; - - if (!fluidPrice) { - _context7.next = 6; - break; - } - - return _context7.abrupt("return", fluidPrice); - - case 6: - return _context7.abrupt("return", null); - - case 7: - case "end": - return _context7.stop(); - } - } - }, _callee7, this); - })); - - function updatePrice(_x5, _x6) { - return _updatePrice.apply(this, arguments); - } - - return updatePrice; - }() }, { key: "__reactstandin__regenerateByEval", value: // @ts-ignore @@ -28361,6 +28172,13 @@ exports.decoreText = decoreText; /***/ }), +/***/ "j6C6": +/***/ (function(module) { + +module.exports = JSON.parse("[{\"fluidType\":0,\"price\":0.1256,\"startDate\":\"2012-07-23T00:00:00.000Z\",\"endDate\":\"2013-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1329,\"startDate\":\"2013-08-01T00:00:00.000Z\",\"endDate\":\"2014-10-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1401,\"startDate\":\"2014-01-11T00:00:00.000Z\",\"endDate\":\"2015-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1437,\"startDate\":\"2015-08-01T00:00:00.000Z\",\"endDate\":\"2016-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1503,\"startDate\":\"2016-08-01T00:00:00.000Z\",\"endDate\":\"2017-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1546,\"startDate\":\"2017-08-01T00:00:00.000Z\",\"endDate\":\"2018-01-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1555,\"startDate\":\"2018-02-01T00:00:00.000Z\",\"endDate\":\"2018-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.145,\"startDate\":\"2018-08-01T00:00:00.000Z\",\"endDate\":\"2019-05-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1531,\"startDate\":\"2019-06-01T00:00:00.000Z\",\"endDate\":\"2019-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1524,\"startDate\":\"2019-08-01T00:00:00.000Z\",\"endDate\":\"2020-01-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1546,\"startDate\":\"2020-02-01T00:00:00.000Z\",\"endDate\":\"2020-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1557,\"startDate\":\"2020-08-01T00:00:00.000Z\",\"endDate\":\"2021-01-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1582,\"startDate\":\"2021-02-01T00:00:00.000Z\",\"endDate\":\"2021-07-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.1558,\"startDate\":\"2021-08-01T00:00:00.000Z\",\"endDate\":\"2022-01-31T23:59:59.000Z\"},{\"fluidType\":0,\"price\":0.174,\"startDate\":\"2022-02-01T00:00:00.000Z\",\"endDate\":null},{\"fluidType\":1,\"price\":0.0030735,\"startDate\":\"2012-01-01T00:00:00.000Z\",\"endDate\":\"2012-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.0031483,\"startDate\":\"2013-01-01T00:00:00.000Z\",\"endDate\":\"2013-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.0031381,\"startDate\":\"2014-01-01T00:00:00.000Z\",\"endDate\":\"2014-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00307,\"startDate\":\"2015-01-01T00:00:00.000Z\",\"endDate\":\"2015-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.0031,\"startDate\":\"2016-01-01T00:00:00.000Z\",\"endDate\":\"2016-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00311,\"startDate\":\"2017-01-01T00:00:00.000Z\",\"endDate\":\"2017-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00313,\"startDate\":\"2018-01-01T00:00:00.000Z\",\"endDate\":\"2018-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00313,\"startDate\":\"2019-01-01T00:00:00.000Z\",\"endDate\":\"2019-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00315,\"startDate\":\"2020-01-01T00:00:00.000Z\",\"endDate\":\"2020-12-31T23:59:59.000Z\"},{\"fluidType\":1,\"price\":0.00319,\"startDate\":\"2021-01-01T00:00:00.000Z\",\"endDate\":null},{\"fluidType\":2,\"price\":0.0919,\"startDate\":\"2017-01-01T00:00:00.000Z\",\"endDate\":\"2017-01-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0915,\"startDate\":\"2017-02-01T00:00:00.000Z\",\"endDate\":\"2017-02-28T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0932,\"startDate\":\"2017-03-01T00:00:00.000Z\",\"endDate\":\"2017-03-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0927,\"startDate\":\"2017-04-01T00:00:00.000Z\",\"endDate\":\"2017-04-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0906,\"startDate\":\"2017-05-01T00:00:00.000Z\",\"endDate\":\"2017-05-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0906,\"startDate\":\"2017-06-01T00:00:00.000Z\",\"endDate\":\"2017-06-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0788,\"startDate\":\"2017-07-01T00:00:00.000Z\",\"endDate\":\"2017-07-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0783,\"startDate\":\"2017-08-01T00:00:00.000Z\",\"endDate\":\"2017-08-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0783,\"startDate\":\"2017-09-01T00:00:00.000Z\",\"endDate\":\"2017-09-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0791,\"startDate\":\"2017-10-01T00:00:00.000Z\",\"endDate\":\"2017-10-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0806,\"startDate\":\"2017-11-01T00:00:00.000Z\",\"endDate\":\"2017-11-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0812,\"startDate\":\"2017-12-01T00:00:00.000Z\",\"endDate\":\"2017-12-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0857,\"startDate\":\"2018-01-01T00:00:00.000Z\",\"endDate\":\"2018-01-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0866,\"startDate\":\"2018-02-01T00:00:00.000Z\",\"endDate\":\"2018-02-28T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0847,\"startDate\":\"2018-03-01T00:00:00.000Z\",\"endDate\":\"2018-03-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0839,\"startDate\":\"2018-04-01T00:00:00.000Z\",\"endDate\":\"2018-04-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0842,\"startDate\":\"2018-05-01T00:00:00.000Z\",\"endDate\":\"2018-05-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0855,\"startDate\":\"2018-06-01T00:00:00.000Z\",\"endDate\":\"2018-06-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0959,\"startDate\":\"2018-07-01T00:00:00.000Z\",\"endDate\":\"2018-07-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0961,\"startDate\":\"2018-08-01T00:00:00.000Z\",\"endDate\":\"2018-08-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0967,\"startDate\":\"2018-09-01T00:00:00.000Z\",\"endDate\":\"2018-09-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0989,\"startDate\":\"2018-10-01T00:00:00.000Z\",\"endDate\":\"2018-10-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.1031,\"startDate\":\"2018-11-01T00:00:00.000Z\",\"endDate\":\"2018-11-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.1013,\"startDate\":\"2018-12-01T00:00:00.000Z\",\"endDate\":\"2018-12-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0999,\"startDate\":\"2019-01-01T00:00:00.000Z\",\"endDate\":\"2019-01-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0993,\"startDate\":\"2019-02-01T00:00:00.000Z\",\"endDate\":\"2019-02-28T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0993,\"startDate\":\"2019-03-01T00:00:00.000Z\",\"endDate\":\"2019-03-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0977,\"startDate\":\"2019-04-01T00:00:00.000Z\",\"endDate\":\"2019-04-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0973,\"startDate\":\"2019-05-01T00:00:00.000Z\",\"endDate\":\"2019-05-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0969,\"startDate\":\"2019-06-01T00:00:00.000Z\",\"endDate\":\"2019-06-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0795,\"startDate\":\"2019-07-01T00:00:00.000Z\",\"endDate\":\"2019-07-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0791,\"startDate\":\"2019-08-01T00:00:00.000Z\",\"endDate\":\"2019-08-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0785,\"startDate\":\"2019-09-01T00:00:00.000Z\",\"endDate\":\"2019-09-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.077,\"startDate\":\"2019-10-01T00:00:00.000Z\",\"endDate\":\"2019-10-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0789,\"startDate\":\"2019-11-01T00:00:00.000Z\",\"endDate\":\"2019-11-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0793,\"startDate\":\"2019-12-01T00:00:00.000Z\",\"endDate\":\"2019-12-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0787,\"startDate\":\"2020-01-01T00:00:00.000Z\",\"endDate\":\"2020-01-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0765,\"startDate\":\"2020-02-01T00:00:00.000Z\",\"endDate\":\"2020-02-29T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0736,\"startDate\":\"2020-03-01T00:00:00.000Z\",\"endDate\":\"2020-03-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.071,\"startDate\":\"2020-04-01T00:00:00.000Z\",\"endDate\":\"2020-04-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0703,\"startDate\":\"2020-05-01T00:00:00.000Z\",\"endDate\":\"2020-05-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0687,\"startDate\":\"2020-06-01T00:00:00.000Z\",\"endDate\":\"2020-06-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0698,\"startDate\":\"2020-07-01T00:00:00.000Z\",\"endDate\":\"2020-07-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0705,\"startDate\":\"2020-08-01T00:00:00.000Z\",\"endDate\":\"2020-08-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0709,\"startDate\":\"2020-09-01T00:00:00.000Z\",\"endDate\":\"2020-09-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0735,\"startDate\":\"2020-10-01T00:00:00.000Z\",\"endDate\":\"2020-10-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0745,\"startDate\":\"2020-11-01T00:00:00.000Z\",\"endDate\":\"2020-11-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0759,\"startDate\":\"2020-12-01T00:00:00.000Z\",\"endDate\":\"2020-12-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.076,\"startDate\":\"2021-01-01T00:00:00.000Z\",\"endDate\":\"2021-01-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0782,\"startDate\":\"2021-02-01T00:00:00.000Z\",\"endDate\":\"2021-02-28T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0818,\"startDate\":\"2021-03-01T00:00:00.000Z\",\"endDate\":\"2021-03-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.079,\"startDate\":\"2021-04-01T00:00:00.000Z\",\"endDate\":\"2021-04-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0797,\"startDate\":\"2021-05-01T00:00:00.000Z\",\"endDate\":\"2021-05-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0826,\"startDate\":\"2021-06-01T00:00:00.000Z\",\"endDate\":\"2021-06-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0895,\"startDate\":\"2021-07-01T00:00:00.000Z\",\"endDate\":\"2021-07-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.0934,\"startDate\":\"2021-08-01T00:00:00.000Z\",\"endDate\":\"2021-08-31T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.1002,\"startDate\":\"2021-09-01T00:00:00.000Z\",\"endDate\":\"2021-09-30T23:59:59.000Z\"},{\"fluidType\":2,\"price\":0.1121,\"startDate\":\"2021-10-01T00:00:00.000Z\",\"endDate\":null}]"); + +/***/ }), + /***/ "jPH6": /***/ (function(module, exports, __webpack_require__) { @@ -29659,7 +29477,7 @@ var ChallengeService = /*#__PURE__*/function () { if (challenge.state != _userChallenge3.UserChallengeState.LOCKED) isAllLocked = false; if (challenge.state === _userChallenge3.UserChallengeState.DONE) { - if (userChallenges[i + 1] && userChallenges[i + 1].state === _userChallenge3.UserChallengeState.LOCKED) { + if (userChallenges[i + 1].state === _userChallenge3.UserChallengeState.LOCKED) { userChallenges[i + 1].state = _userChallenge3.UserChallengeState.UNLOCKED; } } @@ -32922,7 +32740,7 @@ exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React compo /***/ "pZg0": /***/ (function(module, exports) { -module.exports = {"name":"Ecolyo","slug":"ecolyo","icon":"icon.svg","categories":["energy"],"version":"1.8.3","licence":"AGPL-3.0","editor":"Métropole de Lyon","default_locale":"fr","locales":{"fr":{"short_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer.","long_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer afin de vous accompagner dans la gestion quotidienne de ces consommations et ce, de façon ludique en vous lançant des défis personnalisés.","permissions":{"ecolyo":{"description":"Requises pour le fonctionnement des différentes parties de l’application (Analyse, liste d’écogestes personnalisée, …)."},"enedis":{"description":"Requises pour l’affichage et l’analyse de vos consommations électriques dans Ecolyo. Issues du connecteur Enedis."},"grdf":{"description":"Requises pour l’affichage et l’analyse de vos consommations de gaz dans Ecolyo. Issues du connecteur GRDF."},"egl":{"description":"Requises pour l’affichage et l’analyse de vos consommations d’eau dans Ecolyo. Issues du connecteur Eau du Grand Lyon."},"konnectors":{"description":"Requis pour vérifier la présence des connecteurs Enedis, GRDF et Eau du Grand Lyon ainsi que pour pouvoir les configurer à partir de l’application Ecolyo."},"accounts":{"description":"Requis pour stocker des informations propres aux comptes énergie et eau (Enedis, GRDF, Eau du Grand Lyon). Sont stockés votre numéro de PDL pour Enedis, votre numéro de PCE pour GRDF, vos logins et mots de passe pour Eau du Grand Lyon."},"triggers":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"jobs":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"terms":{"description":"Nécessaire pour la gestion des consentements de l'application"},"apps":{"description":"Requis par Cozy pour afficher les icônes des applications installées dans la barre Cozy."},"settings":{"description":"Requis pour afficher les paramètres Cozy dans la barre Cozy."},"ecolyo-dju":{"description":"Requis pour la récupération des DJU (Degrés Jours Unifiés), informations météorologiques permettant d’ajuster le modèle de comparaison des consommations énergétiques."},"dacc-dev":{"description":"Requis pour la récupération et l’envoi de statistiques d’utilisation anonymisées dans un environnement de test."},"dacc":{"description":"Requis pour envoyer des statistiques d'utilisation anonymisées."},"backoffice-rec":{"description":"Requis pour la récupération des données de la newsletter dans un environment de test."},"backoffice":{"description":"Requis pour la récupération des données de la newsletter."},"backoffice-partners-info-rec":{"description":"Requis pour la récupération du status des services partenaires dans un environment de test."},"backoffice-partners-info":{"description":"Requis pour la récupération du status des services partenaires"},"backoffice-prices-rec":{"description":"Requis pour la récupération du prix des fluides dans un environnement de test."},"backoffice-prices":{"description":"Requis pour la récupération du prix des fluides."}}},"en":{"short_description":"Ecolyo a free service developed by Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home.","long_description":"Ecolyo a free service developed by the Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home. To help you in reducing your daily consumption it gives you best energy consumption practices, consumption analysis and challenges to take up. At least one Smartmeter is needed among Linky (for electricity), Gazpar (for gas) or Téléo (for water).","permissions":{"ecolyo":{"description":"Required for the operation of the different parts of the application (Analysis, customized eco-gesture lists, etc...)."},"enedis":{"description":"Required for the display and analysis of your electricity consumption in Ecolyo. Retrieved by the Enedis connector."},"grdf":{"description":"Required for the display and analysis of your gas consumption in Ecolyo. Retrieved by the GRDF connector."},"egl":{"description":"Required for the display and analysis of your water consumption in Ecolyo. Retrieved by the Eau du Grand Lyon connector."},"konnectors":{"description":"Required to verify the presence of the Enedis, GRDF and Eau du Grand Lyon connectors as well as to be able to configure them from the Ecolyo application."},"accounts":{"description":"Required to store information specific to energy and water accounts (Enedis, GRDF, Eau du Grand Lyon). Your PDL number for Enedis, your PCE number for GRDF, your logins and passwords for Eau du Grand Lyon are stored."},"triggers":{"description":"Required for the correct functioning of the energy and water connectors."},"jobs":{"description":"Required for the correct functioning of the energy and water connectors."},"terms":{"description":"Required for the correct managment of CGU."},"apps":{"description":"Required to display the icons of installed applications in the Cozy bar."},"settings":{"description":"Required for the application's consents managment"},"ecolyo-dju":{"description":"Required to gather udd data (Unified Degree Days), a meteorological data allowing the app to adjust our energical consumption model. "},"dacc-dev":{"description":"Required for gathering and sending anonymous usage statistics for test environment."},"dacc":{"description":"Required for sending cozy anonymized stats."},"backoffice-rec":{"description":"Required for retrieving newsletter informations from backoffice rec."},"backoffice":{"description":"Required for retrieving newsletter informations from backoffice prod."},"backoffice-partners-info-rec":{"description":"Required for getting the status of partners' services in test environment."},"backoffice-partners-info":{"description":"Required for getting the status of partners' services"},"backoffice-prices-rec":{"description":"Required for getting fluid prices form backoffice rec."},"backoffice-prices":{"description":"Required for getting fluid prices form backoffice prod"}}}},"langs":["fr"],"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"routes":{"/":{"folder":"/","index":"index.html","public":false}},"services":{"enedisHalfHourMonthlyAnalysis":{"type":"node","file":"services/enedisHalfHourMonthlyAnalysis/ecolyo.js","trigger":"@cron 0 0 8 3 * *"},"monthlyReportNotification":{"type":"node","file":"services/monthlyReportNotification/ecolyo.js","trigger":"@cron 0 0 10 3 * *"},"consumptionAlert":{"type":"node","file":"services/consumptionAlert/ecolyo.js","trigger":"@cron 0 3 * * *"},"aggregatorUsageEvents":{"type":"node","file":"services/aggregatorUsageEvents/ecolyo.js","trigger":"@cron 0 1 * * *"},"fluidsPrices":{"type":"node","file":"services/fluidsPrices/ecolyo.js","trigger":"@cron 0 2 * * *"}},"permissions":{"ecolyo":{"type":"com.grandlyon.ecolyo.*"},"enedis":{"type":"com.grandlyon.enedis.*"},"grdf":{"type":"com.grandlyon.grdf.*"},"egl":{"type":"com.grandlyon.egl.*"},"konnectors":{"type":"io.cozy.konnectors"},"accounts":{"type":"io.cozy.accounts"},"triggers":{"type":"io.cozy.triggers"},"jobs":{"type":"io.cozy.jobs"},"terms":{"type":"io.cozy.terms"},"apps":{"type":"io.cozy.apps","verbs":["GET"]},"settings":{"type":"io.cozy.settings","verbs":["GET"]},"ecolyo-dju":{"type":"org.ecolyo.dju","verbs":["GET"]},"dacc":{"type":"cc.cozycloud.dacc","verbs":["ALL"]},"dacc-dev":{"type":"cc.cozycloud.dacc.dev","verbs":["ALL"]},"backoffice-rec":{"type":"org.ecolyo.backoffice.rec","verbs":["ALL"]},"backoffice-prod":{"type":"org.ecolyo.backoffice","verbs":["ALL"]},"backoffice-partners-info-rec":{"type":"org.ecolyo.backoffice.partners.info.rec","verbs":["ALL"]},"backoffice-partners-info":{"type":"org.ecolyo.backoffice.partners.info","verbs":["ALL"]},"backoffice-prices-rec":{"type":"org.ecolyo.backoffice.prices.rec","verbs":["ALL"]},"backoffice-prices":{"type":"org.ecolyo.backoffice.prices","verbs":["ALL"]}}} +module.exports = {"name":"Ecolyo","slug":"ecolyo","icon":"icon.svg","categories":["energy"],"version":"1.8.0","licence":"AGPL-3.0","editor":"Métropole de Lyon","default_locale":"fr","locales":{"fr":{"short_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer.","long_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer afin de vous accompagner dans la gestion quotidienne de ces consommations et ce, de façon ludique en vous lançant des défis personnalisés.","permissions":{"ecolyo":{"description":"Requises pour le fonctionnement des différentes parties de l’application (Analyse, liste d’écogestes personnalisée, …)."},"enedis":{"description":"Requises pour l’affichage et l’analyse de vos consommations électriques dans Ecolyo. Issues du connecteur Enedis."},"grdf":{"description":"Requises pour l’affichage et l’analyse de vos consommations de gaz dans Ecolyo. Issues du connecteur GRDF."},"egl":{"description":"Requises pour l’affichage et l’analyse de vos consommations d’eau dans Ecolyo. Issues du connecteur Eau du Grand Lyon."},"konnectors":{"description":"Requis pour vérifier la présence des connecteurs Enedis, GRDF et Eau du Grand Lyon ainsi que pour pouvoir les configurer à partir de l’application Ecolyo."},"accounts":{"description":"Requis pour stocker des informations propres aux comptes énergie et eau (Enedis, GRDF, Eau du Grand Lyon). Sont stockés votre numéro de PDL pour Enedis, votre numéro de PCE pour GRDF, vos logins et mots de passe pour Eau du Grand Lyon."},"triggers":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"jobs":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"terms":{"description":"Nécessaire pour la gestion des consentements de l'application"},"apps":{"description":"Requis par Cozy pour afficher les icônes des applications installées dans la barre Cozy."},"settings":{"description":"Requis pour afficher les paramètres Cozy dans la barre Cozy."},"ecolyo-dju":{"description":"Requis pour la récupération des DJU (Degrés Jours Unifiés), informations météorologiques permettant d’ajuster le modèle de comparaison des consommations énergétiques."},"dacc-dev":{"description":"Requis pour la récupération et l’envoi de statistiques d’utilisation anonymisées dans un environnement de test."},"dacc":{"description":"Requis pour envoyer des statistiques d'utilisation anonymisées."},"backoffice-rec":{"description":"Requis pour la récupération des données de la newsletter dans un environment de test."},"backoffice":{"description":"Requis pour la récupération des données de la newsletter."},"backoffice-partners-info-rec":{"description":"Requis pour la récupération du status des services partenaires dans un environment de test."},"backoffice-partners-info":{"description":"Requis pour la récupération du status des services partenaires"}}},"en":{"short_description":"Ecolyo a free service developed by Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home.","long_description":"Ecolyo a free service developed by the Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home. To help you in reducing your daily consumption it gives you best energy consumption practices, consumption analysis and challenges to take up. At least one Smartmeter is needed among Linky (for electricity), Gazpar (for gas) or Téléo (for water).","permissions":{"ecolyo":{"description":"Required for the operation of the different parts of the application (Analysis, customized eco-gesture lists, etc...)."},"enedis":{"description":"Required for the display and analysis of your electricity consumption in Ecolyo. Retrieved by the Enedis connector."},"grdf":{"description":"Required for the display and analysis of your gas consumption in Ecolyo. Retrieved by the GRDF connector."},"egl":{"description":"Required for the display and analysis of your water consumption in Ecolyo. Retrieved by the Eau du Grand Lyon connector."},"konnectors":{"description":"Required to verify the presence of the Enedis, GRDF and Eau du Grand Lyon connectors as well as to be able to configure them from the Ecolyo application."},"accounts":{"description":"Required to store information specific to energy and water accounts (Enedis, GRDF, Eau du Grand Lyon). Your PDL number for Enedis, your PCE number for GRDF, your logins and passwords for Eau du Grand Lyon are stored."},"triggers":{"description":"Required for the correct functioning of the energy and water connectors."},"jobs":{"description":"Required for the correct functioning of the energy and water connectors."},"terms":{"description":"Required for the correct managment of CGU."},"apps":{"description":"Required to display the icons of installed applications in the Cozy bar."},"settings":{"description":"Required for the application's consents managment"},"ecolyo-dju":{"description":"Required to gather udd data (Unified Degree Days), a meteorological data allowing the app to adjust our energical consumption model. "},"dacc-dev":{"description":"Required for gathering and sending anonymous usage statistics for test environment."},"dacc":{"description":"Required for sending cozy anonymized stats."},"backoffice-rec":{"description":"Required for retrieving newsletter informations from backoffice rec."},"backoffice":{"description":"Required for retrieving newsletter informations from backoffice prod."},"backoffice-partners-info-rec":{"description":"Required for getting the status of partners' services in test environment."},"backoffice-partners-info":{"description":"Required for getting the status of partners' services"}}}},"langs":["fr"],"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"routes":{"/":{"folder":"/","index":"index.html","public":false}},"services":{"enedisHalfHourMonthlyAnalysis":{"type":"node","file":"services/enedisHalfHourMonthlyAnalysis/ecolyo.js","trigger":"@cron 0 0 8 3 * *"},"monthlyReportNotification":{"type":"node","file":"services/monthlyReportNotification/ecolyo.js","trigger":"@cron 0 0 10 3 * *"},"consumptionAlert":{"type":"node","file":"services/consumptionAlert/ecolyo.js","trigger":"@cron 0 3 * * *"},"aggregatorUsageEvents":{"type":"node","file":"services/aggregatorUsageEvents/ecolyo.js","trigger":"@cron 0 1 * * *"},"fluidsPrices":{"type":"node","file":"services/fluidsPrices/ecolyo.js","trigger":"@cron 0 2 * * *"}},"permissions":{"ecolyo":{"type":"com.grandlyon.ecolyo.*"},"enedis":{"type":"com.grandlyon.enedis.*"},"grdf":{"type":"com.grandlyon.grdf.*"},"egl":{"type":"com.grandlyon.egl.*"},"konnectors":{"type":"io.cozy.konnectors"},"accounts":{"type":"io.cozy.accounts"},"triggers":{"type":"io.cozy.triggers"},"jobs":{"type":"io.cozy.jobs"},"terms":{"type":"io.cozy.terms"},"apps":{"type":"io.cozy.apps","verbs":["GET"]},"settings":{"type":"io.cozy.settings","verbs":["GET"]},"ecolyo-dju":{"type":"org.ecolyo.dju","verbs":["GET"]},"dacc":{"type":"cc.cozycloud.dacc","verbs":["ALL"]},"dacc-dev":{"type":"cc.cozycloud.dacc.dev","verbs":["ALL"]},"backoffice-rec":{"type":"org.ecolyo.backoffice.rec","verbs":["ALL"]},"backoffice-prod":{"type":"org.ecolyo.backoffice","verbs":["ALL"]},"backoffice-partners-info-rec":{"type":"org.ecolyo.backoffice.partners.info.rec","verbs":["ALL"]},"backoffice-partners-info":{"type":"org.ecolyo.backoffice.partners.info","verbs":["ALL"]}}} /***/ }), @@ -36612,7 +36430,7 @@ var ConsumptionFormatterService = /*#__PURE__*/function () { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -36621,7 +36439,7 @@ var ConsumptionFormatterService = /*#__PURE__*/function () { } }, { key: "defineDataloadState", - value: function defineDataloadState(data, fluidType, timeStep, fluidStatus) { + value: function defineDataloadState(data, fluidType, fluidStatus) { var today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -36638,19 +36456,7 @@ var ConsumptionFormatterService = /*#__PURE__*/function () { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -37283,7 +37089,7 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE /***/ "xJBY": /***/ (function(module) { -module.exports = JSON.parse("[{\"ecogestureHash\":\"\",\"challengeHash\":\"\",\"mailToken\":\"\",\"duelHash\":\"\",\"quizHash\":\"\",\"isFirstConnection\":true,\"lastConnectionDate\":\"0000-01-01T00:00:00.000Z\",\"haveSeenLastAnalysis\":true,\"sendAnalysisNotification\":true,\"monthlyAnalysisDate\":\"0000-01-01T00:00:00.000Z\",\"sendConsumptionAlert\":false,\"waterDailyConsumptionLimit\":0,\"isProfileTypeCompleted\":false,\"isProfileEcogestureCompleted\":false,\"onboarding\":{\"isWelcomeSeen\":false},\"haveSeenEcogestureModal\":false}]"); +module.exports = JSON.parse("[{\"ecogestureHash\":\"\",\"challengeHash\":\"\",\"mailToken\":\"\",\"duelHash\":\"\",\"quizHash\":\"\",\"fluidPricesHash\":\"\",\"isFirstConnection\":true,\"lastConnectionDate\":\"0000-01-01T00:00:00.000Z\",\"haveSeenLastAnalysis\":true,\"sendAnalysisNotification\":true,\"monthlyAnalysisDate\":\"0000-01-01T00:00:00.000Z\",\"sendConsumptionAlert\":false,\"waterDailyConsumptionLimit\":0,\"isProfileTypeCompleted\":false,\"isProfileEcogestureCompleted\":false,\"onboarding\":{\"isWelcomeSeen\":false},\"haveSeenEcogestureModal\":false}]"); /***/ }), @@ -38608,8 +38414,6 @@ exports.default = void 0; var _regenerator = _interopRequireDefault(__webpack_require__("o0o1")); -var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("RIqP")); - var _objectSpread2 = _interopRequireDefault(__webpack_require__("MVZn")); var _slicedToArray2 = _interopRequireDefault(__webpack_require__("J4zp")); @@ -38626,8 +38430,6 @@ var _cozyClient = __webpack_require__("SH7X"); var _doctypes = __webpack_require__("D2hQ"); -var _fluid = __webpack_require__("5Wkc"); - var _ecogesture2 = _interopRequireDefault(__webpack_require__("w4u3")); var _challenge = _interopRequireDefault(__webpack_require__("kdea")); @@ -38642,6 +38444,8 @@ var _quizEntity2 = _interopRequireDefault(__webpack_require__("lMoa")); var _explorationEntity2 = _interopRequireDefault(__webpack_require__("66aa")); +var _fluidPrices = _interopRequireDefault(__webpack_require__("j6C6")); + var _profile = _interopRequireDefault(__webpack_require__("2l2O")); var _profileData = _interopRequireDefault(__webpack_require__("xJBY")); @@ -38652,7 +38456,7 @@ var _konnector = _interopRequireDefault(__webpack_require__("kFhK")); var _account = _interopRequireDefault(__webpack_require__("gucQ")); -var _fluid2 = _interopRequireDefault(__webpack_require__("z34f")); +var _fluid = _interopRequireDefault(__webpack_require__("z34f")); var _duel = _interopRequireDefault(__webpack_require__("Vpb/")); @@ -38678,8 +38482,6 @@ var _profileEcogesture = _interopRequireDefault(__webpack_require__("4iQs")); var _fluidsPrices = _interopRequireDefault(__webpack_require__("VjcQ")); -var _environment = _interopRequireDefault(__webpack_require__("X6DI")); - var _initialisationSteps = __webpack_require__("3HG6"); (function () { @@ -39232,99 +39034,195 @@ var InitializationService = /*#__PURE__*/function () { }, { key: "initFluidPrices", value: function () { - var _initFluidPrices = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() { - var fpService, loadedPrices, fluidTypes, allPrices, env, remoteUrl, _i, _fluidTypes, fluid, prices, _i2, _allPrices, price; + var _initFluidPrices = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(hash) { + var hashFluidPricesType, fpService, loadedPrices, _iterator3, _step3, price, checkCount, _iterator4, _step4, _price, _checkCount2; return _regenerator.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: + this._setinitStep(_initialisationSteps.InitSteps.PRICES); + + hashFluidPricesType = (0, _hash.hashFile)(_fluidPrices.default); fpService = new _fluidsPrices.default(this._client); // Populate data if none ecogesture exists - _context7.next = 3; + _context7.next = 5; return fpService.getAllPrices(); - case 3: + case 5: loadedPrices = _context7.sent; - if (!(loadedPrices && loadedPrices.length)) { - _context7.next = 9; + if (!(!loadedPrices || loadedPrices && loadedPrices.length === 0)) { + _context7.next = 40; break; } - _logger.default.info('[Initialization] FluidPrices db already created'); - - return _context7.abrupt("return", true); - - case 9: + _context7.prev = 7; + _iterator3 = _createForOfIteratorHelper(_fluidPrices.default); _context7.prev = 9; - fluidTypes = [_fluid.FluidType.ELECTRICITY, _fluid.FluidType.WATER, _fluid.FluidType.GAS]; - allPrices = []; - env = new _environment.default(); - remoteUrl = env.isProduction() ? "/remote/org.ecolyo.backoffice.prices" : "/remote/org.ecolyo.backoffice.prices.rec"; - _i = 0, _fluidTypes = fluidTypes; - case 15: - if (!(_i < _fluidTypes.length)) { - _context7.next = 24; + _iterator3.s(); + + case 11: + if ((_step3 = _iterator3.n()).done) { + _context7.next = 17; break; } - fluid = _fluidTypes[_i]; - _context7.next = 19; - return this._client.getStackClient().fetchJSON('GET', "".concat(remoteUrl, "?fluidtype=").concat(fluid)); + price = _step3.value; + _context7.next = 15; + return this._client.create(_doctypes.FLUIDPRICES_DOCTYPE, price); - case 19: - prices = _context7.sent; - allPrices.push.apply(allPrices, (0, _toConsumableArray2.default)(prices)); + case 15: + _context7.next = 11; + break; - case 21: - _i++; - _context7.next = 15; + case 17: + _context7.next = 22; break; - case 24: - _i2 = 0, _allPrices = allPrices; + case 19: + _context7.prev = 19; + _context7.t0 = _context7["catch"](9); + + _iterator3.e(_context7.t0); + + case 22: + _context7.prev = 22; + + _iterator3.f(); + + return _context7.finish(22); case 25: - if (!(_i2 < _allPrices.length)) { - _context7.next = 32; + _context7.next = 27; + return fpService.getAllPrices(); + + case 27: + checkCount = _context7.sent; + + if (!(!checkCount || checkCount && checkCount.length !== _fluidPrices.default.length)) { + _context7.next = 31; break; } - price = _allPrices[_i2]; - _context7.next = 29; - return fpService.createPrice(price); + this._setinitStepError(_initialisationSteps.InitStepsErrors.PRICES_ERROR); - case 29: - _i2++; - _context7.next = 25; + throw new Error('initFluidPrices: Created fluidPrices type entities does not match'); + + case 31: + _logger.default.info('[Initialization] FluidPrices list created'); + + return _context7.abrupt("return", hashFluidPricesType); + + case 35: + _context7.prev = 35; + _context7.t1 = _context7["catch"](7); + + this._setinitStepError(_initialisationSteps.InitStepsErrors.PRICES_ERROR); + + _logger.default.error('Initialization error - initFluidPrices: ', _context7.t1); + + throw _context7.t1; + + case 40: + if (!(hash !== hashFluidPricesType)) { + _context7.next = 78; + break; + } + + _context7.prev = 41; + _context7.next = 44; + return fpService.deleteAllFluidsPrices(); + + case 44: + // Population with the data + _iterator4 = _createForOfIteratorHelper(_fluidPrices.default); + _context7.prev = 45; + + _iterator4.s(); + + case 47: + if ((_step4 = _iterator4.n()).done) { + _context7.next = 53; + break; + } + + _price = _step4.value; + _context7.next = 51; + return this._client.create(_doctypes.FLUIDPRICES_DOCTYPE, _price); + + case 51: + _context7.next = 47; break; - case 32: - _logger.default.info('[Initialization] FluidPrices db created successfully'); + case 53: + _context7.next = 58; + break; - return _context7.abrupt("return", true); + case 55: + _context7.prev = 55; + _context7.t2 = _context7["catch"](45); - case 36: - _context7.prev = 36; - _context7.t0 = _context7["catch"](9); + _iterator4.e(_context7.t2); + + case 58: + _context7.prev = 58; + + _iterator4.f(); + + return _context7.finish(58); + + case 61: + _context7.next = 63; + return fpService.getAllPrices(); + + case 63: + _checkCount2 = _context7.sent; + + if (!(!_checkCount2 || _checkCount2 && _checkCount2.length !== _fluidPrices.default.length)) { + _context7.next = 67; + break; + } this._setinitStepError(_initialisationSteps.InitStepsErrors.PRICES_ERROR); - _logger.default.error('Initialization error - initFluidPrices: ', _context7.t0); + throw new Error('initFluidPrices: Created fluidPrices type entities does not match'); - return _context7.abrupt("return", false); + case 67: + _logger.default.info('[Initialization] FluidPrices updated'); - case 41: + return _context7.abrupt("return", hashFluidPricesType); + + case 71: + _context7.prev = 71; + _context7.t3 = _context7["catch"](41); + + this._setinitStepError(_initialisationSteps.InitStepsErrors.PRICES_ERROR); + + _logger.default.error('Initialization error - initFluidPrices: ', _context7.t3); + + throw _context7.t3; + + case 76: + _context7.next = 80; + break; + + case 78: + // Doctype already up to date + _logger.default.info('[Initialization] FluidPrices already up-to-date'); + + return _context7.abrupt("return", hashFluidPricesType); + + case 80: case "end": return _context7.stop(); } } - }, _callee7, this, [[9, 36]]); + }, _callee7, this, [[7, 35], [9, 19, 22, 25], [41, 71], [45, 55, 58, 61]]); })); - function initFluidPrices() { + function initFluidPrices(_x4) { return _initFluidPrices.apply(this, arguments); } @@ -39334,7 +39232,7 @@ var InitializationService = /*#__PURE__*/function () { key: "initChallengeEntity", value: function () { var _initChallengeEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(hash) { - var challengeHash, challengeService, loadedChallengeEntity, _iterator3, _step3, challengeEntity, checkCount, _iterator4, _step4, _challengeEntity, _checkCount2; + var challengeHash, challengeService, loadedChallengeEntity, _iterator5, _step5, challengeEntity, checkCount, _iterator6, _step6, _challengeEntity, _checkCount3; return _regenerator.default.wrap(function _callee8$(_context8) { while (1) { @@ -39357,18 +39255,18 @@ var InitializationService = /*#__PURE__*/function () { } _context8.prev = 7; - _iterator3 = _createForOfIteratorHelper(_challengeEntity2.default); + _iterator5 = _createForOfIteratorHelper(_challengeEntity2.default); _context8.prev = 9; - _iterator3.s(); + _iterator5.s(); case 11: - if ((_step3 = _iterator3.n()).done) { + if ((_step5 = _iterator5.n()).done) { _context8.next = 17; break; } - challengeEntity = _step3.value; + challengeEntity = _step5.value; _context8.next = 15; return this._client.create(_doctypes.CHALLENGE_DOCTYPE, challengeEntity); @@ -39384,12 +39282,12 @@ var InitializationService = /*#__PURE__*/function () { _context8.prev = 19; _context8.t0 = _context8["catch"](9); - _iterator3.e(_context8.t0); + _iterator5.e(_context8.t0); case 22: _context8.prev = 22; - _iterator3.f(); + _iterator5.f(); return _context8.finish(22); @@ -39436,18 +39334,18 @@ var InitializationService = /*#__PURE__*/function () { case 44: // Population with the data - _iterator4 = _createForOfIteratorHelper(_challengeEntity2.default); + _iterator6 = _createForOfIteratorHelper(_challengeEntity2.default); _context8.prev = 45; - _iterator4.s(); + _iterator6.s(); case 47: - if ((_step4 = _iterator4.n()).done) { + if ((_step6 = _iterator6.n()).done) { _context8.next = 53; break; } - _challengeEntity = _step4.value; + _challengeEntity = _step6.value; _context8.next = 51; return this._client.create(_doctypes.CHALLENGE_DOCTYPE, _challengeEntity); @@ -39463,12 +39361,12 @@ var InitializationService = /*#__PURE__*/function () { _context8.prev = 55; _context8.t2 = _context8["catch"](45); - _iterator4.e(_context8.t2); + _iterator6.e(_context8.t2); case 58: _context8.prev = 58; - _iterator4.f(); + _iterator6.f(); return _context8.finish(58); @@ -39477,9 +39375,9 @@ var InitializationService = /*#__PURE__*/function () { return challengeService.getAllChallengeEntities(); case 63: - _checkCount2 = _context8.sent; + _checkCount3 = _context8.sent; - if (!(!_checkCount2 || _checkCount2 && _checkCount2.length !== _challengeEntity2.default.length)) { + if (!(!_checkCount3 || _checkCount3 && _checkCount3.length !== _challengeEntity2.default.length)) { _context8.next = 67; break; } @@ -39521,7 +39419,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee8, this, [[7, 35], [9, 19, 22, 25], [41, 71], [45, 55, 58, 61]]); })); - function initChallengeEntity(_x4) { + function initChallengeEntity(_x5) { return _initChallengeEntity.apply(this, arguments); } @@ -39531,7 +39429,7 @@ var InitializationService = /*#__PURE__*/function () { key: "initDuelEntity", value: function () { var _initDuelEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(hash) { - var hashDuelEntity, duelService, loadedDuelTypes, _iterator5, _step5, duelEntity, checkCount, _iterator6, _step6, _duelEntity, _checkCount3; + var hashDuelEntity, duelService, loadedDuelTypes, _iterator7, _step7, duelEntity, checkCount, _iterator8, _step8, _duelEntity, _checkCount4; return _regenerator.default.wrap(function _callee9$(_context9) { while (1) { @@ -39552,18 +39450,18 @@ var InitializationService = /*#__PURE__*/function () { } _context9.prev = 6; - _iterator5 = _createForOfIteratorHelper(_duelEntity2.default); + _iterator7 = _createForOfIteratorHelper(_duelEntity2.default); _context9.prev = 8; - _iterator5.s(); + _iterator7.s(); case 10: - if ((_step5 = _iterator5.n()).done) { + if ((_step7 = _iterator7.n()).done) { _context9.next = 16; break; } - duelEntity = _step5.value; + duelEntity = _step7.value; _context9.next = 14; return this._client.create(_doctypes.DUEL_DOCTYPE, duelEntity); @@ -39579,12 +39477,12 @@ var InitializationService = /*#__PURE__*/function () { _context9.prev = 18; _context9.t0 = _context9["catch"](8); - _iterator5.e(_context9.t0); + _iterator7.e(_context9.t0); case 21: _context9.prev = 21; - _iterator5.f(); + _iterator7.f(); return _context9.finish(21); @@ -39631,18 +39529,18 @@ var InitializationService = /*#__PURE__*/function () { case 43: // Population with the data - _iterator6 = _createForOfIteratorHelper(_duelEntity2.default); + _iterator8 = _createForOfIteratorHelper(_duelEntity2.default); _context9.prev = 44; - _iterator6.s(); + _iterator8.s(); case 46: - if ((_step6 = _iterator6.n()).done) { + if ((_step8 = _iterator8.n()).done) { _context9.next = 52; break; } - _duelEntity = _step6.value; + _duelEntity = _step8.value; _context9.next = 50; return this._client.create(_doctypes.DUEL_DOCTYPE, _duelEntity); @@ -39658,12 +39556,12 @@ var InitializationService = /*#__PURE__*/function () { _context9.prev = 54; _context9.t2 = _context9["catch"](44); - _iterator6.e(_context9.t2); + _iterator8.e(_context9.t2); case 57: _context9.prev = 57; - _iterator6.f(); + _iterator8.f(); return _context9.finish(57); @@ -39672,9 +39570,9 @@ var InitializationService = /*#__PURE__*/function () { return duelService.getAllDuelEntities(); case 62: - _checkCount3 = _context9.sent; + _checkCount4 = _context9.sent; - if (!(!_checkCount3 || _checkCount3 && _checkCount3.length !== _duelEntity2.default.length)) { + if (!(!_checkCount4 || _checkCount4 && _checkCount4.length !== _duelEntity2.default.length)) { _context9.next = 66; break; } @@ -39716,7 +39614,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee9, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]); })); - function initDuelEntity(_x5) { + function initDuelEntity(_x6) { return _initDuelEntity.apply(this, arguments); } @@ -39726,7 +39624,7 @@ var InitializationService = /*#__PURE__*/function () { key: "initQuizEntity", value: function () { var _initQuizEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(hash) { - var quizHash, quizService, loadedQuizEntity, _iterator7, _step7, quizEntity, checkCount, _iterator8, _step8, _quizEntity, _checkCount4; + var quizHash, quizService, loadedQuizEntity, _iterator9, _step9, quizEntity, checkCount, _iterator10, _step10, _quizEntity, _checkCount5; return _regenerator.default.wrap(function _callee10$(_context10) { while (1) { @@ -39747,18 +39645,18 @@ var InitializationService = /*#__PURE__*/function () { } _context10.prev = 6; - _iterator7 = _createForOfIteratorHelper(_quizEntity2.default); + _iterator9 = _createForOfIteratorHelper(_quizEntity2.default); _context10.prev = 8; - _iterator7.s(); + _iterator9.s(); case 10: - if ((_step7 = _iterator7.n()).done) { + if ((_step9 = _iterator9.n()).done) { _context10.next = 16; break; } - quizEntity = _step7.value; + quizEntity = _step9.value; _context10.next = 14; return this._client.create(_doctypes.QUIZ_DOCTYPE, quizEntity); @@ -39774,12 +39672,12 @@ var InitializationService = /*#__PURE__*/function () { _context10.prev = 18; _context10.t0 = _context10["catch"](8); - _iterator7.e(_context10.t0); + _iterator9.e(_context10.t0); case 21: _context10.prev = 21; - _iterator7.f(); + _iterator9.f(); return _context10.finish(21); @@ -39826,18 +39724,18 @@ var InitializationService = /*#__PURE__*/function () { case 43: // Population with the data - _iterator8 = _createForOfIteratorHelper(_quizEntity2.default); + _iterator10 = _createForOfIteratorHelper(_quizEntity2.default); _context10.prev = 44; - _iterator8.s(); + _iterator10.s(); case 46: - if ((_step8 = _iterator8.n()).done) { + if ((_step10 = _iterator10.n()).done) { _context10.next = 52; break; } - _quizEntity = _step8.value; + _quizEntity = _step10.value; _context10.next = 50; return this._client.create(_doctypes.QUIZ_DOCTYPE, _quizEntity); @@ -39853,12 +39751,12 @@ var InitializationService = /*#__PURE__*/function () { _context10.prev = 54; _context10.t2 = _context10["catch"](44); - _iterator8.e(_context10.t2); + _iterator10.e(_context10.t2); case 57: _context10.prev = 57; - _iterator8.f(); + _iterator10.f(); return _context10.finish(57); @@ -39867,9 +39765,9 @@ var InitializationService = /*#__PURE__*/function () { return quizService.getAllQuizEntities(); case 62: - _checkCount4 = _context10.sent; + _checkCount5 = _context10.sent; - if (!(!_checkCount4 || _checkCount4 && _checkCount4.length !== _quizEntity2.default.length)) { + if (!(!_checkCount5 || _checkCount5 && _checkCount5.length !== _quizEntity2.default.length)) { _context10.next = 66; break; } @@ -39911,7 +39809,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee10, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]); })); - function initQuizEntity(_x6) { + function initQuizEntity(_x7) { return _initQuizEntity.apply(this, arguments); } @@ -39921,7 +39819,7 @@ var InitializationService = /*#__PURE__*/function () { key: "initExplorationEntity", value: function () { var _initExplorationEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(hash) { - var explorationHash, explorationService, loadedExplorationEntity, _iterator9, _step9, explorationEntity, checkCount, _iterator10, _step10, _explorationEntity, _checkCount5; + var explorationHash, explorationService, loadedExplorationEntity, _iterator11, _step11, explorationEntity, checkCount, _iterator12, _step12, _explorationEntity, _checkCount6; return _regenerator.default.wrap(function _callee11$(_context11) { while (1) { @@ -39942,18 +39840,18 @@ var InitializationService = /*#__PURE__*/function () { } _context11.prev = 6; - _iterator9 = _createForOfIteratorHelper(_explorationEntity2.default); + _iterator11 = _createForOfIteratorHelper(_explorationEntity2.default); _context11.prev = 8; - _iterator9.s(); + _iterator11.s(); case 10: - if ((_step9 = _iterator9.n()).done) { + if ((_step11 = _iterator11.n()).done) { _context11.next = 16; break; } - explorationEntity = _step9.value; + explorationEntity = _step11.value; _context11.next = 14; return this._client.create(_doctypes.EXPLORATION_DOCTYPE, explorationEntity); @@ -39969,12 +39867,12 @@ var InitializationService = /*#__PURE__*/function () { _context11.prev = 18; _context11.t0 = _context11["catch"](8); - _iterator9.e(_context11.t0); + _iterator11.e(_context11.t0); case 21: _context11.prev = 21; - _iterator9.f(); + _iterator11.f(); return _context11.finish(21); @@ -40021,18 +39919,18 @@ var InitializationService = /*#__PURE__*/function () { case 43: // Population with the data - _iterator10 = _createForOfIteratorHelper(_explorationEntity2.default); + _iterator12 = _createForOfIteratorHelper(_explorationEntity2.default); _context11.prev = 44; - _iterator10.s(); + _iterator12.s(); case 46: - if ((_step10 = _iterator10.n()).done) { + if ((_step12 = _iterator12.n()).done) { _context11.next = 52; break; } - _explorationEntity = _step10.value; + _explorationEntity = _step12.value; _context11.next = 50; return this._client.create(_doctypes.EXPLORATION_DOCTYPE, _explorationEntity); @@ -40048,12 +39946,12 @@ var InitializationService = /*#__PURE__*/function () { _context11.prev = 54; _context11.t2 = _context11["catch"](44); - _iterator10.e(_context11.t2); + _iterator12.e(_context11.t2); case 57: _context11.prev = 57; - _iterator10.f(); + _iterator12.f(); return _context11.finish(57); @@ -40062,9 +39960,9 @@ var InitializationService = /*#__PURE__*/function () { return explorationService.getAllExplorationEntities(); case 62: - _checkCount5 = _context11.sent; + _checkCount6 = _context11.sent; - if (!(!_checkCount5 || _checkCount5 && _checkCount5.length !== _explorationEntity2.default.length)) { + if (!(!_checkCount6 || _checkCount6 && _checkCount6.length !== _explorationEntity2.default.length)) { _context11.next = 66; break; } @@ -40106,7 +40004,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee11, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]); })); - function initExplorationEntity(_x7) { + function initExplorationEntity(_x8) { return _initExplorationEntity.apply(this, arguments); } @@ -40164,7 +40062,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee12, this, [[0, 10]]); })); - function initAnalysis(_x8) { + function initAnalysis(_x9) { return _initAnalysis.apply(this, arguments); } @@ -40250,7 +40148,7 @@ var InitializationService = /*#__PURE__*/function () { while (1) { switch (_context14.prev = _context14.next) { case 0: - fs = new _fluid2.default(this._client); + fs = new _fluid.default(this._client); _context14.prev = 1; this._setinitStep(_initialisationSteps.InitSteps.CONSOS); @@ -40362,7 +40260,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee15, this, [[1, 14]]); })); - function initUserChallenges(_x9) { + function initUserChallenges(_x10) { return _initUserChallenges.apply(this, arguments); } @@ -40416,7 +40314,7 @@ var InitializationService = /*#__PURE__*/function () { }, _callee16, this, [[1, 10]]); })); - function initDuelProgress(_x10) { + function initDuelProgress(_x11) { return _initDuelProgress.apply(this, arguments); } diff --git a/index.html b/index.html index 65e430a2e189bc1a67b1e038e087e6b9f14b4a5c..ebfc3d17433d7a06239eb0b0265f359cd82c6a3b 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black">{{.ThemeCSS}} {{.CozyBar}}</head><body><div role="application" class="application" data-cozy-token="{{.Token}}" data-cozy-domain="{{.Domain}}" data-cozy-locale="{{.Locale}}" data-cozy-app-name="{{.AppName}}" data-cozy-app-slug="{{.AppSlug}}" data-cozy-app-name-prefix="{{.AppNamePrefix}}" data-cozy-app-editor="{{.AppEditor}}" data-cozy-icon-path="{{.IconPath}}"><script src="vendors/ecolyo.bce3a3ca54818ecca6eb.js"></script><script src="app/ecolyo.99d9a2786ac3fa1b2ee9.js"></script></div></body></html> \ No newline at end of file +<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black">{{.ThemeCSS}} {{.CozyBar}}</head><body><div role="application" class="application" data-cozy-token="{{.Token}}" data-cozy-domain="{{.Domain}}" data-cozy-locale="{{.Locale}}" data-cozy-app-name="{{.AppName}}" data-cozy-app-slug="{{.AppSlug}}" data-cozy-app-name-prefix="{{.AppNamePrefix}}" data-cozy-app-editor="{{.AppEditor}}" data-cozy-icon-path="{{.IconPath}}"><script src="vendors/ecolyo.bce3a3ca54818ecca6eb.js"></script><script src="app/ecolyo.d6c5a397ab6be8a8edc9.js"></script></div></body></html> \ No newline at end of file diff --git a/manifest.webapp b/manifest.webapp index cd9a8865aab28359bf30b20378d2aaadf5737480..c17391cf8b21b9ffdfb044ba1f60bdb5b8893f04 100644 --- a/manifest.webapp +++ b/manifest.webapp @@ -5,7 +5,7 @@ "categories": [ "energy" ], - "version": "1.8.3", + "version": "1.8.0", "licence": "AGPL-3.0", "editor": "Métropole de Lyon", "default_locale": "fr", @@ -67,12 +67,6 @@ }, "backoffice-partners-info": { "description": "Requis pour la récupération du status des services partenaires" - }, - "backoffice-prices-rec": { - "description": "Requis pour la récupération du prix des fluides dans un environnement de test." - }, - "backoffice-prices": { - "description": "Requis pour la récupération du prix des fluides." } } }, @@ -133,12 +127,6 @@ }, "backoffice-partners-info": { "description": "Required for getting the status of partners' services" - }, - "backoffice-prices-rec": { - "description": "Required for getting fluid prices form backoffice rec." - }, - "backoffice-prices": { - "description": "Required for getting fluid prices form backoffice prod" } } } @@ -265,18 +253,6 @@ "verbs": [ "ALL" ] - }, - "backoffice-prices-rec": { - "type": "org.ecolyo.backoffice.prices.rec", - "verbs": [ - "ALL" - ] - }, - "backoffice-prices": { - "type": "org.ecolyo.backoffice.prices", - "verbs": [ - "ALL" - ] } } } \ No newline at end of file diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js index 378c21c4b56877b9bd938af16566d1a5881c0e9b..08f118fb6d5aaf9c0a70e204064c0852b1e3dd98 100644 --- a/services/aggregatorUsageEvents/ecolyo.js +++ b/services/aggregatorUsageEvents/ecolyo.js @@ -74768,7 +74768,7 @@ class ConsumptionFormatterService { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -74776,7 +74776,7 @@ class ConsumptionFormatterService { return filledData; } - defineDataloadState(data, fluidType, timeStep, fluidStatus) { + defineDataloadState(data, fluidType, fluidStatus) { const today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -74793,19 +74793,7 @@ class ConsumptionFormatterService { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -76036,7 +76024,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -76049,7 +76037,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -94650,7 +94638,7 @@ class ChallengeService { if (challenge.state != _userChallenge2.UserChallengeState.LOCKED) isAllLocked = false; if (challenge.state === _userChallenge2.UserChallengeState.DONE) { - if (userChallenges[i + 1] && userChallenges[i + 1].state === _userChallenge2.UserChallengeState.LOCKED) { + if (userChallenges[i + 1].state === _userChallenge2.UserChallengeState.LOCKED) { userChallenges[i + 1].state = _userChallenge2.UserChallengeState.UNLOCKED; } } diff --git a/services/consumptionAlert/ecolyo.js b/services/consumptionAlert/ecolyo.js index cf224d858b2d8c673e2148cd567227bc5b0be0f3..58ba2bac617e7f325f7761647e521561afda3d61 100644 --- a/services/consumptionAlert/ecolyo.js +++ b/services/consumptionAlert/ecolyo.js @@ -73470,7 +73470,7 @@ class ConsumptionFormatterService { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -73478,7 +73478,7 @@ class ConsumptionFormatterService { return filledData; } - defineDataloadState(data, fluidType, timeStep, fluidStatus) { + defineDataloadState(data, fluidType, fluidStatus) { const today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -73495,19 +73495,7 @@ class ConsumptionFormatterService { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -74738,7 +74726,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -74751,7 +74739,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -142761,19 +142749,19 @@ module.exports = (Handlebars["default"] || Handlebars).template({"1":function(co + ((stack1 = container.invokePartial(__webpack_require__(1464),depth0,{"name":"style","fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") + " </mj-head>\n <mj-body background-color=\"#121212\" css-class=\"main\">\n" + ((stack1 = container.invokePartial(__webpack_require__(1465),depth0,{"name":"base/header","fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") - + "\n <mj-section background-color=\"#121212\">\n <mj-column width=\"60%\" vertical-align=\"middle\">\n <mj-text color=\"white\" font-weight=\"900\" font-size=\"24px\">\n Bonjour " + + "\n <mj-section background-color=\"#121212\">\n <mj-column width=\"60%\" vertical-align=\"middle\">\n <mj-text color=\"white\" font-weight=\"900\" font-size=\"24px\" font-family=\"Lato\">\n Bonjour " + alias2(alias1((depth0 != null ? lookupProperty(depth0,"username") : depth0), depth0)) - + ",\n </mj-text>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\">\n La limite de consommation d'eau journalière que vous avez fixée à " + + ",\n </mj-text>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\" font-family=\"Lato\">\n La limite de consommation d'eau journalière que vous avez fixée à " + alias2(alias1((depth0 != null ? lookupProperty(depth0,"userLimit") : depth0), depth0)) + " L a été dépassée le " + alias2(alias1((depth0 != null ? lookupProperty(depth0,"limitDate") : depth0), depth0)) + ".<br />\n Pour comprendre ce qu’il s’est passé, rendez-vous dans Ecolyo.\n </mj-text>\n\n </mj-column>\n <mj-column width=\"40%\" vertical-align=\"middle\">\n <mj-image src=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"baseUrl") : depth0), depth0)) - + "/assets/baignoire.png\" width=\"132px\" align=\"center\"></mj-image>\n </mj-column>\n </mj-section>\n\n <mj-section background-color=\"#121212\">\n <mj-column>\n <mj-social css-class=\"button-with-icon\" icon-size=\"36px\" mode=\"horizontal\" font-size=\"20px\" font-weight=\"700\">\n <mj-social-element src=\"" + + "/assets/baignoire.png\" width=\"132px\" align=\"center\"></mj-image>\n </mj-column>\n </mj-section>\n\n <mj-section background-color=\"#121212\">\n <mj-column>\n <mj-social css-class=\"button-with-icon\" icon-size=\"36px\" mode=\"horizontal\" font-size=\"20px\" font-weight=\"700\" font-family=\"Lato\">\n <mj-social-element src=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"baseUrl") : depth0), depth0)) - + "/assets/ecolyo-icon.png\" name=\"ecolyo\" padding=\"0 10px 0 0\" href=\"" + + "/assets/ecolyo-icon.png\" name=\"ecolyo\" font-family=\"Lato\" padding=\"0 10px 0 0\" href=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"clientUrl") : depth0), depth0)) - + "\">\n Voir dans Ecolyo\n </mj-social-element>\n </mj-social>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\" align=\"center\">\n Vous souhaitez modifier votre seuil d'alerte ou supprimer cette notification ? <a href=\"" + + "\">\n Voir dans Ecolyo\n </mj-social-element>\n </mj-social>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\" align=\"center\" font-family=\"Lato\">\n Vous souhaitez modifier votre seuil d'alerte ou supprimer cette notification ? <a href=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"unsubscribeUrl") : depth0), depth0)) + "\" style=\"color: #E3B82A; font-weight: 900 !important;\">C'est ici</a>\n </mj-text>\n </mj-column>\n </mj-section>\n" + ((stack1 = container.invokePartial(__webpack_require__(1466),depth0,{"name":"base/footer","fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "") @@ -144280,7 +144268,7 @@ module.exports = exports['default']; var Handlebars = __webpack_require__(1442); function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); } module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px !important;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; + return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; },"useData":true}); /***/ }), diff --git a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js index 701bd145134bd44849443e78337510df0ec43e35..784e15c2934e9ed661aa4b712e85f18f818b4e57 100644 --- a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js +++ b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js @@ -73349,7 +73349,7 @@ class ConsumptionFormatterService { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -73357,7 +73357,7 @@ class ConsumptionFormatterService { return filledData; } - defineDataloadState(data, fluidType, timeStep, fluidStatus) { + defineDataloadState(data, fluidType, fluidStatus) { const today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -73374,19 +73374,7 @@ class ConsumptionFormatterService { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -74617,7 +74605,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -74630,7 +74618,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } diff --git a/services/fluidsPrices/ecolyo.js b/services/fluidsPrices/ecolyo.js index 1040a7471e0b760c98e1cfa07794c74e418da37c..a43d2224be25c7b40cb5bbc774be825571896b42 100644 --- a/services/fluidsPrices/ecolyo.js +++ b/services/fluidsPrices/ecolyo.js @@ -73349,7 +73349,7 @@ class ConsumptionFormatterService { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -73357,7 +73357,7 @@ class ConsumptionFormatterService { return filledData; } - defineDataloadState(data, fluidType, timeStep, fluidStatus) { + defineDataloadState(data, fluidType, fluidStatus) { const today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -73374,19 +73374,7 @@ class ConsumptionFormatterService { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -74617,7 +74605,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -74630,7 +74618,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -75334,81 +75322,7 @@ exports.default = ConverterService; /* 998 */, /* 999 */, /* 1000 */, -/* 1001 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(module) { - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -(function () { - var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined; - enterModule && enterModule(module); -})(); - -var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { - return a; -}; - -class EnvironmentService { - isAlpha() { - if (true) { - return true; - } - - return false; - } - - isProduction() { - if (!this.isAlpha()) { - return true; - } - - return false; - } - - getPublicURL() { - if (!this.isAlpha()) { - return 'https://ecolyo-agent.grandlyon.com'; - } else { - return 'https://ecolyo-agent-rec.grandlyon.com'; - } - } - - // @ts-ignore - __reactstandin__regenerateByEval(key, code) { - // @ts-ignore - this[key] = eval(code); - } - -} - -exports.default = EnvironmentService; -; - -(function () { - var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined; - - if (!reactHotLoader) { - return; - } - - reactHotLoader.register(EnvironmentService, "EnvironmentService", "/home/gcarron/dev/ecolyo/src/services/environment.service.ts"); -})(); - -; - -(function () { - var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined; - leaveModule && leaveModule(module); -})(); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)(module))) - -/***/ }), +/* 1001 */, /* 1002 */, /* 1003 */, /* 1004 */, @@ -75902,8 +75816,6 @@ var _fluid = __webpack_require__(541); var _queryRunner = _interopRequireDefault(__webpack_require__(549)); -var _environment = _interopRequireDefault(__webpack_require__(1001)); - (function () { var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined; enterModule && enterModule(module); @@ -75915,84 +75827,8 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader const log = _cozyLogger.default.namespace('fluidPrices'); -const getRemotePricesByfluid = async (client, fluidType) => { - const env = new _environment.default(); - const remoteUrl = env.isProduction() ? `/remote/org.ecolyo.backoffice.prices` : `/remote/org.ecolyo.backoffice.prices.rec`; - const prices = await client.getStackClient().fetchJSON('GET', `${remoteUrl}?fluidtype=${fluidType}`); - return prices; -}; -/** - * Synchro the remote prices with database and returns a date where we have to relaunch aggregation if a price has been edited in backoffice - * @param {Client} client - * @param {FluidType} fluidType - * @returns {string | null} the oldest startDate - */ - - -const synchroPricesToUpdate = async (client, fluidType) => { - const fps = new _fluidsPrices.default(client); - const remotePrices = await getRemotePricesByfluid(client, fluidType); - let firstEditedPrice = null; - await Promise.all(remotePrices.map(async remotePrice => { - return new Promise(async resolve => { - try { - //Check if price exist in database - const existingPrice = await fps.checkIfPriceExists(remotePrice); - - if (existingPrice) { - //Check if the remote price is more recent - if (existingPrice.UpdatedAt && remotePrice.UpdatedAt && existingPrice.UpdatedAt < remotePrice.UpdatedAt) { - log('debug', `Price exist in db but not up to date, updating it`); //If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation - - if (firstEditedPrice === null) { - firstEditedPrice = remotePrice.startDate; - } - - if (firstEditedPrice >= remotePrice.startDate) { - firstEditedPrice = remotePrice.startDate; - } //update this price in db - - - await fps.updatePrice(existingPrice, { - price: remotePrice.price, - UpdatedAt: remotePrice.UpdatedAt, - startDate: remotePrice.startDate, - endDate: remotePrice.endDate - }); - } else if (!existingPrice.UpdatedAt && remotePrice.UpdatedAt) { - //updatedAt key doesn't exist in db - await fps.updatePrice(existingPrice, { - UpdatedAt: remotePrice.UpdatedAt - }); - } else { - log('debug', `Price up to date`); - } - } else { - log('debug', `Price doesn't exist in db, creating new price`); //If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation - - if (firstEditedPrice === null) { - firstEditedPrice = remotePrice.startDate; - } - - if (firstEditedPrice >= remotePrice.startDate) { - firstEditedPrice = remotePrice.startDate; - } //create price in db - - - await fps.createPrice(remotePrice); - } - } catch (err) { - log('error', `Error: ${err}`); - } finally { - resolve(); - } - }); - })); - return firstEditedPrice; -}; - const price = item => { - return item.price ? item.price : 0; + return item.price ? item.price : null; }; const sum = (prev, next) => { @@ -76028,47 +75864,45 @@ const getTimePeriod = async (timeStep, date) => { } }; -const aggregatePrices = async (qr, cdm, firstDate, today, fluidType) => { +const aggregatePrices = async (client, qr, cdm, firstDate, today, fluidType) => { const tsa = [_timeStep.TimeStep.MONTH, _timeStep.TimeStep.YEAR]; - log('debug', `Aggregation started for fluid: ${fluidType}, from ${firstDate} `); - await Promise.all(tsa.map(async ts => { + log('debug', `Aggregation...`); + const aggregatePromises = tsa.map(async ts => { return new Promise(async resolve => { let date = _luxon.DateTime.local(); Object.assign(date, firstDate); - try { - do { - const tp = await getTimePeriod(ts, date); // Get doc for aggregation + do { + log('debug', `Step: ${ts} | Fluid: ${fluidType} | Date: ${date.day}/${date.month}/${date.year}`); + const tp = await getTimePeriod(ts, date); // Get doc for aggregation - const data = await qr.fetchFluidRawDoctype(tp, _timeStep.TimeStep.DAY, fluidType); // Get doc to update + const data = await qr.fetchFluidRawDoctype(tp, _timeStep.TimeStep.DAY, fluidType); // Get doc to update - const docToUpdate = await qr.fetchFluidRawDoctype(tp, ts, fluidType); + const docToUpdate = await qr.fetchFluidRawDoctype(tp, ts, fluidType); - if (docToUpdate && data && docToUpdate.data && data.data) { - docToUpdate.data[0].price = data.data.map(price).reduce(sum); - } // Save updated docs + if (docToUpdate && data && docToUpdate.data && data.data) { + docToUpdate.data[0].price = data.data.map(price).reduce(sum); + } // Save updated docs - await cdm.saveDocs(docToUpdate.data); // Update date according to timestep + await cdm.saveDocs(docToUpdate.data); // Update date according to timestep - if (ts === _timeStep.TimeStep.YEAR) { - date = date.plus({ - year: 1 - }).startOf('month'); - } else { - date = date.plus({ - month: 1 - }).startOf('month'); - } - } while (date < today); - } catch (err) { - log('info', `Error : ${err}`); - } finally { - resolve(); - } + if (ts === _timeStep.TimeStep.YEAR) { + date = date.plus({ + year: 1 + }).startOf('month'); + } else { + date = date.plus({ + month: 1 + }).startOf('month'); + } + } while (date < today); + + resolve(); }); - })); + }); + await Promise.all(aggregatePromises); log('debug', `Aggregation done`); }; @@ -76106,103 +75940,70 @@ const applyPrices = async (client, fluidType) => { // If no doctypes exists, do nothing const fluidsPricesService = new _fluidsPrices.default(client); const cdm = new _consumption.default(client); - const qr = new _queryRunner.default(client); //Synchro dbprices with remote prices - - const firstEditedPriceDate = await synchroPricesToUpdate(client, fluidType); - const firstDataDate = await cdm.fetchAllFirstDateData([fluidType]); + const qr = new _queryRunner.default(client); const prices = await fluidsPricesService.getAllPrices(); // Prices data exsit if (prices.length > 0) { log('debug', 'fluidPrices data found'); - const firstMinuteData = await cdm.getFirstDataDateFromDoctypeWithPrice(getDoctypeTypeByFluid(fluidType)); // const firstDoctypeData = await cdm.getFirsDataDateFromDoctype() - // If there is data, update hourly data and daily data + const firstMinuteData = await cdm.getFirstDataDateFromDoctypeWithPrice(getDoctypeTypeByFluid(fluidType)); // If there is data, update hourly data and daily data + + if (firstMinuteData) { + // Format first date + const firstDate = _luxon.DateTime.fromObject({ + year: firstMinuteData.year, + month: firstMinuteData.month, + day: firstMinuteData.day + }); - if (firstDataDate && firstDataDate[0] && (firstMinuteData || firstEditedPriceDate !== null)) { const today = _luxon.DateTime.now(); - const tsa = getTimeSetByFluid(fluidType); - let firstDate; - - if (firstMinuteData && firstEditedPriceDate) { - // If there is first data without price and a price edited, set the smallest date - const firstMinuteDataDate = _luxon.DateTime.fromObject({ - year: firstMinuteData.year, - month: firstMinuteData.month, - day: firstMinuteData.day - }).setZone('utc', { - keepLocalTime: true - }); - - const formattedFirstEditedPrice = _luxon.DateTime.fromISO(firstEditedPriceDate).setZone('utc', { - keepLocalTime: true - }); // we want to exclude the period with no data if the edited date is smaller than the first data date - - - firstDate = _luxon.DateTime.min(_luxon.DateTime.max(formattedFirstEditedPrice, firstDataDate[0]), firstMinuteDataDate); - } else if (firstMinuteData) { - firstDate = _luxon.DateTime.fromObject({ - year: firstMinuteData.year, - month: firstMinuteData.month, - day: firstMinuteData.day - }).setZone('utc', { - keepLocalTime: true - }); - } else if (firstEditedPriceDate) { - firstDate = _luxon.DateTime.max(_luxon.DateTime.fromISO(firstEditedPriceDate).setZone('utc', { - keepLocalTime: true - }), firstDataDate[0]); - } else { - firstDate = today; - } // Hourly and daily prices - + const tsa = getTimeSetByFluid(fluidType); // Hourly and daily prices - await Promise.all(tsa.map(async timeStep => { + const promises = tsa.map(async timeStep => { return new Promise(async resolve => { - let date = _luxon.DateTime.local().setZone('utc', { - keepLocalTime: true - }); + let date = _luxon.DateTime.local(); Object.assign(date, firstDate); - try { - do { - // Get price - const priceData = await fluidsPricesService.getPrices(fluidType, date); - const tp = await getTimePeriod(timeStep, date); // Get doc to update + do { + // Get price + const priceData = await fluidsPricesService.getPrices(fluidType, date); // log( + // 'debug', + // `Step: ${timeStep} | Fluid : ${fluidType} | Date: ${date.day}/${date.month}/${date.year} | Price: ${priceData.price}` + // ) - const data = await qr.fetchFluidRawDoctype(tp, timeStep, fluidType); // If lastItem has a price, skip this day (in order to save perf) + const tp = await getTimePeriod(timeStep, date); // Get doc to update - const lastItem = data && data.data && data.data[data.data.length - 1]; + const data = await qr.fetchFluidRawDoctype(tp, timeStep, fluidType); // If lastItem has a price, skip this day (in order to save perf) - if (lastItem && priceData) { - //if a price has been updated in backoffice re-calculates all price from the firstEditedPriceDate - data && data.data.forEach(element => { - element.price = element.load * priceData.price; - }); // Save updated docs + const lastItem = data.data[data.data.length - 1]; - await cdm.saveDocs(data.data); - } // Update date + if (lastItem && !lastItem.price && priceData) { + data && data.data.forEach(element => { + element.price = element.load * priceData.price; + }); // Save updated docs + await cdm.saveDocs(data.data); + } // Update date - if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR) { - date = date.plus({ - days: 1 - }); - } else { - date = date.plus({ - month: 1 - }).startOf('month'); - } - } while (date < today); - } catch (err) { - log('error', `ERROR : ${err} `); - } finally { - resolve(); - } + + if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR) { + date = date.plus({ + days: 1 + }); + } else { + date = date.plus({ + month: 1 + }).startOf('month'); + } + } while (date < today); + + resolve(); }); - })); // Call aggregation method + }); + await Promise.all(promises); // Call aggregation method - await aggregatePrices(qr, cdm, firstDate, today, fluidType); + await aggregatePrices(client, qr, cdm, firstDate, today, fluidType); } else log('info', `No data found for fluid ${fluidType}`); } else log('info', 'No fluidesPrices data'); }; @@ -76234,8 +76035,6 @@ const processPrices = async ({ } reactHotLoader.register(log, "log", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); - reactHotLoader.register(getRemotePricesByfluid, "getRemotePricesByfluid", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); - reactHotLoader.register(synchroPricesToUpdate, "synchroPricesToUpdate", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); reactHotLoader.register(price, "price", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); reactHotLoader.register(sum, "sum", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); reactHotLoader.register(getTimePeriod, "getTimePeriod", "/home/gcarron/dev/ecolyo/src/targets/services/fluidsPrices.ts"); @@ -76268,8 +76067,6 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _objectSpread2 = _interopRequireDefault(__webpack_require__(3)); - var _defineProperty2 = _interopRequireDefault(__webpack_require__(4)); var _cozyClient = __webpack_require__(40); @@ -76315,11 +76112,9 @@ class FluidPricesService { async getPrices(fluidType, date) { - const query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).indexFields(['startDate']).where({ + const query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ startDate: { - $lte: date.toISO({ - suppressMilliseconds: true - }).toString() + $lt: date.toString() }, fluidType }).sortBy([{ @@ -76337,7 +76132,7 @@ class FluidPricesService { async getAllLastPrices() { - const query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).indexFields(['fluidType']).where({ + const query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ endDate: { $eq: null } @@ -76391,64 +76186,6 @@ class FluidPricesService { return false; } } - /** - * Check if a fluidprice exists in db - * @param {FluidPrice} fluidPrice - * @returns {FluidPrice | null} price or null - */ - - - async checkIfPriceExists(fluidPrice) { - const query = (0, _cozyClient.Q)(_doctypes.FLUIDPRICES_DOCTYPE).where({ - startDate: { - $eq: fluidPrice.startDate - }, - fluidType: { - $eq: fluidPrice.fluidType - } - }); - const { - data: [price] - } = await this._client.query(query); - if (price) return price;else return null; - } - /** - * Creates a new fluidPrice - * @param {FluidPrice} fluidPrice - * @returns {FluidPrice | null} price or null - */ - - - async createPrice(newPrice) { - try { - const { - data: createdPrice - } = await this._client.create(_doctypes.FLUIDPRICES_DOCTYPE, newPrice); - return createdPrice; - } catch (error) { - console.log('Error creating new createdPrice: ', error); - throw error; - } - } - /** - * Updates a price in db - * @param {FluidPrice} doc - * @param {Partial<FluidPrice>} attributes - * @returns {FluidPrice | null} - */ - - - async updatePrice(doc, attributes) { - const { - data: fluidPrice - } = await this._client.save((0, _objectSpread2.default)({}, doc, attributes)); - - if (fluidPrice) { - return fluidPrice; - } - - return null; - } // @ts-ignore __reactstandin__regenerateByEval(key, code) { diff --git a/services/monthlyReportNotification/ecolyo.js b/services/monthlyReportNotification/ecolyo.js index 1017dcf5e4a766fc017b1229774c663e7c88cddd..1dcadd434a9ab1da77ccad1b74ddebaddc11d348 100644 --- a/services/monthlyReportNotification/ecolyo.js +++ b/services/monthlyReportNotification/ecolyo.js @@ -73470,7 +73470,7 @@ class ConsumptionFormatterService { value: -1, state: _dataload.DataloadState.EMPTY, valueDetail: null - }, fluidType, timeStep, fluidStatus); + }, fluidType, fluidStatus); filledData.push((0, _objectSpread2.default)({}, newElement)); parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep)); } @@ -73478,7 +73478,7 @@ class ConsumptionFormatterService { return filledData; } - defineDataloadState(data, fluidType, timeStep, fluidStatus) { + defineDataloadState(data, fluidType, fluidStatus) { const today = _luxon.DateTime.local().setZone('utc', { keepLocalTime: true }); // Return coming state if data data is >= today @@ -73495,19 +73495,7 @@ class ConsumptionFormatterService { } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && timeStep !== _timeStep.TimeStep.MONTH && timeStep !== _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.MONTH && data.date < fluidStatus.firstDataDate.startOf('month')) { - return (0, _objectSpread2.default)({}, data, { - state: _dataload.DataloadState.EMPTY - }); - } - - if (fluidStatus.firstDataDate && timeStep === _timeStep.TimeStep.YEAR && data.date < fluidStatus.firstDataDate.startOf('year')) { + if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { return (0, _objectSpread2.default)({}, data, { state: _dataload.DataloadState.EMPTY }); @@ -74738,7 +74726,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -74751,7 +74739,7 @@ class QueryRunner { const result = await this.fetchData(query); if (result && result.data && result.data[0] && result.data[0].year && result.data[0].month && result.data[0].day) { - return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day, result.data[0].hour ? result.data[0].hour : 0, result.data[0].minute ? result.data[0].minute : 0).setZone('utc', { + return _luxon.DateTime.local(result.data[0].year, result.data[0].month, result.data[0].day).setZone('utc', { keepLocalTime: true }); } @@ -144101,7 +144089,7 @@ module.exports = exports['default']; var Handlebars = __webpack_require__(1442); function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); } module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { - return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px !important;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; + return "<mj-style>\n .main div{ line-height: 23.4px !important; font-family: 'Lato', sans-serif !important; }\n .main .background{ background: radial-gradient(96.2% 96.2% at 50% 3.8%,\n #343641 0%, #1B1C22 100%) !important; }\n</mj-style>\n<mj-style>\n .small div{ font-weight: 400 !important; font-size: 13px !important;\n line-height: 23.4px !important; }\n</mj-style>\n<mj-style>\n .header-title div{ font-weight: normal !important; font-size: 24px !important;\n line-height: 29px !important; }\n</mj-style>\n<mj-style>\n .m-divider p { margin: 60px 0 54px 0 !important; }\n</mj-style>\n<mj-style>\n .button table { background-color: #F1C017 !important; margin: 10px !important;\n } .button-with-icon td { padding-right: 1px !important; } .button-with-icon\n table { background-color: #F1C017 !important; margin-left: 10px !important; margin-right: 10px !important; }\n .button-with-icon span { vertical-align: middle !important; }\n .button-with-icon a { vertical-align: middle !important; padding-right: 10px !important;}\n .button-with-icon a img { padding-top: 20px;}\n</mj-style>\n<mj-style>\n .custom-link a { color: #F1C017 !important; text-decoration: none !important;\n } .custom-link a:visited { color: #F1C017 !important; text-decoration: none\n !important; }\n</mj-style>\n<mj-style>\n .text-and-image img { vertical-align: middle!important; margin-right:\n 12px!important }\n</mj-style>\n<mj-attributes>\n <mj-all font-family=\"Lato, sans-serif\" font-size=\"16px\" />\n</mj-attributes>\n<mj-font name=\"Lato\" href=\"https://fonts.googleapis.com/css?family=Lato\" />\n<mj-style>\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n }\n @font-face {\n font-family: 'Lato';\n font-style: normal;\n font-weight: 400;\n src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v13/MDadn8DQ_3oT6kvnUq_2r_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n }\n @font-face {\n font-family: 'Lato-Bold';\n font-style: normal;\n font-weight: 800;\n src: asset-url('Lato-Bold.woff2') format('woff2');\n }\n</mj-style>"; },"useData":true}); /***/ }), @@ -144520,7 +144508,7 @@ module.exports = (Handlebars["default"] || Handlebars).template({"1":function(co + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"consumptionTextExist") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":29,"column":8},"end":{"line":31,"column":15}}})) != null ? stack1 : "") + " </mj-column>\n <mj-column width=\"45%\" vertical-align=\"middle\">\n <mj-image src=" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"consoImageUrl") : depth0), depth0)) - + " width=\"132px\" align=\"center\" alt=\"consomation\"></mj-image>\n </mj-column>\n </mj-section>\n <mj-section background-color=\"#121212\">\n <mj-column>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\">Retrouvez le détail de vos consommations et plus d'informations dans votre bilan Ecolyo.<br /><br /></mj-text>\n <mj-social css-class=\"button-with-icon\" icon-size=\"36px\" mode=\"horizontal\" font-size=\"20px\" font-weight=\"700\">\n <mj-social-element src=\"" + + " width=\"132px\" align=\"center\" alt=\"consomation\"></mj-image>\n </mj-column>\n </mj-section>\n <mj-section background-color=\"#121212\">\n <mj-column>\n <mj-text color=\"white\" font-weight=\"400\" font-size=\"18px\">Retrouvez le détail de vos consommations et plus d'informations dans votre bilan Ecolyo.<br /><br /></mj-text>\n <mj-social css-class=\"button-with-icon\" icon-size=\"36px\" mode=\"horizontal\" font-size=\"20px\" font-weight=\"700\" >\n <mj-social-element src=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"baseUrl") : depth0), depth0)) + "/assets/ecolyo-icon.png\" name=\"ecolyo\" padding=\"0 10px 0 0\" href=\"" + alias2(alias1((depth0 != null ? lookupProperty(depth0,"clientUrl") : depth0), depth0))