From df67f0e6f5339d1d94df47c03ded443d63c8e301 Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Mon, 27 Feb 2023 09:49:05 +0000 Subject: [PATCH] feat(profile): select fioul or other in profile selection --- .vscode/settings.json | 3 +- .../ProfileTypeFormDateSelection.tsx | 18 +++++------ .../ProfileTypeFormMultiChoice.spec.tsx | 2 +- .../ProfileTypeFormMultiChoice.tsx | 18 +++++------ .../ProfileTypeFormNumber.spec.tsx | 2 +- .../ProfileType/ProfileTypeFormNumber.tsx | 14 ++++----- .../ProfileTypeFormNumberSelection.spec.tsx | 2 +- .../ProfileTypeFormNumberSelection.tsx | 14 ++++----- .../ProfileTypeFormSingleChoice.spec.tsx | 2 +- .../ProfileTypeFormSingleChoice.tsx | 16 +++++----- .../ProfileType/ProfileTypeView.tsx | 13 ++++---- src/db/ecogestureData.json | 30 +++++++++---------- src/enum/profileType.enum.ts | 7 +++++ src/locales/fr.json | 8 +++-- src/models/profileType.model.ts | 15 +++++----- src/services/profileType.service.ts | 5 ++-- src/services/profileTypeForm.service.ts | 8 ++++- tests/__mocks__/profileType.mock.ts | 24 +++++++++------ 18 files changed, 114 insertions(+), 87 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b04b7e9e..39ec8baa4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -80,9 +80,9 @@ "konnector", "konnectors", "lastname", + "legalnotice", "llle", "Lugdunum", - "legalnotice", "luxon", "matomo", "Matomo", @@ -98,6 +98,7 @@ "Reinit", "splashscreen", "testid", + "Tétris", "UNSTARTED" ] } diff --git a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx index fcdebab17..d8bd5306f 100644 --- a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx @@ -1,16 +1,16 @@ -import React, { useCallback, useEffect, useState } from 'react' +import { MenuItem, Select } from '@material-ui/core' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' +import { DateTime } from 'luxon' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' -import { DateTime } from 'luxon' -import { MenuItem, Select } from '@material-ui/core' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormDateSelectionProps { step: ProfileTypeStepForm @@ -18,7 +18,7 @@ interface ProfileTypeFormDateSelectionProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -35,7 +35,7 @@ const ProfileTypeFormDateSelection: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormDateSelectionProps) => { const { t } = useI18n() @@ -137,8 +137,8 @@ const ProfileTypeFormDateSelection: React.FC< } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx index fee5fae40..fa0cf9261 100644 --- a/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormMultiChoice.spec.tsx @@ -46,7 +46,7 @@ describe('ProfileTypeFormMultiChoice component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx index 1df12766c..ecfac832d 100644 --- a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx @@ -1,19 +1,19 @@ -import React, { useCallback, useEffect, useState } from 'react' -import 'components/ProfileType/profileTypeForm.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' import classNames from 'classnames' -import FormProgress from 'components/FormGlobal/FormProgress' import FormNavigation from 'components/FormGlobal/FormNavigation' -import { remove } from 'lodash' +import FormProgress from 'components/FormGlobal/FormProgress' +import 'components/ProfileType/profileTypeForm.scss' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { IndividualInsulationWork, ProfileTypeStepForm, } from 'enum/profileType.enum' +import { remove } from 'lodash' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormMultiChoiceProps { step: ProfileTypeStepForm @@ -21,7 +21,7 @@ interface ProfileTypeFormMultiChoiceProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -31,7 +31,7 @@ const ProfileTypeFormMultiChoice: React.FC<ProfileTypeFormMultiChoiceProps> = ({ profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormMultiChoiceProps) => { const { t } = useI18n() @@ -63,8 +63,8 @@ const ProfileTypeFormMultiChoice: React.FC<ProfileTypeFormMultiChoiceProps> = ({ } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer as IndividualInsulationWork[] diff --git a/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx b/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx index 4dd96a015..8ddd81010 100644 --- a/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumber.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormNumber component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormNumber.tsx b/src/components/ProfileType/ProfileTypeFormNumber.tsx index cdb31f505..21ee84d9d 100644 --- a/src/components/ProfileType/ProfileTypeFormNumber.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumber.tsx @@ -1,14 +1,14 @@ -import React, { useCallback, useEffect, useState } from 'react' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormNumberProps { step: ProfileTypeStepForm @@ -16,7 +16,7 @@ interface ProfileTypeFormNumberProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -26,15 +26,15 @@ const ProfileTypeFormNumber: React.FC<ProfileTypeFormNumberProps> = ({ profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormNumberProps) => { const { t } = useI18n() const [answer, setAnswer] = useState<ProfileTypeAnswerChoices>('') const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx index ec9c8ed84..b4182cdff 100644 --- a/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumberSelection.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormNumberSelection component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[3]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx index 8996894ac..2e3dff0c8 100644 --- a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx +++ b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx @@ -1,14 +1,14 @@ -import React, { useCallback, useEffect, useState } from 'react' +import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' import 'components/ProfileType/profileTypeForm.scss' import { useI18n } from 'cozy-ui/transpiled/react/I18n' -import FormProgress from 'components/FormGlobal/FormProgress' -import FormNavigation from 'components/FormGlobal/FormNavigation' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormNumberSelectionProps { step: ProfileTypeStepForm @@ -16,7 +16,7 @@ interface ProfileTypeFormNumberSelectionProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -28,7 +28,7 @@ const ProfileTypeFormNumberSelection: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormNumberSelectionProps) => { const { t } = useI18n() @@ -46,8 +46,8 @@ const ProfileTypeFormNumberSelection: React.FC< } const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx index 97decd124..9cd981c5a 100644 --- a/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx +++ b/src/components/ProfileType/ProfileTypeFormSingleChoice.spec.tsx @@ -45,7 +45,7 @@ describe('ProfileTypeFormSingleChoice component', () => { profileType={mockProfileType} answerType={mockProfileTypeAnswers[1]} setNextStep={mockhandlePrevious} - setPrevioustStep={mockhandleNext} + setPreviousStep={mockhandleNext} isProfileTypeComplete={false} /> </Provider> diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx index f1ddbe33c..a436afe81 100644 --- a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx +++ b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx @@ -1,15 +1,15 @@ -import React, { useCallback, useEffect, useState } from 'react' -import 'components/ProfileType/profileTypeForm.scss' -import { useI18n } from 'cozy-ui/transpiled/react/I18n' import classNames from 'classnames' -import FormProgress from 'components/FormGlobal/FormProgress' import FormNavigation from 'components/FormGlobal/FormNavigation' +import FormProgress from 'components/FormGlobal/FormProgress' +import 'components/ProfileType/profileTypeForm.scss' +import { useI18n } from 'cozy-ui/transpiled/react/I18n' import { ProfileTypeStepForm } from 'enum/profileType.enum' import { ProfileType, ProfileTypeAnswer, ProfileTypeAnswerChoices, } from 'models/profileType.model' +import React, { useCallback, useEffect, useState } from 'react' interface ProfileTypeFormSingleChoiceProps { step: ProfileTypeStepForm @@ -17,7 +17,7 @@ interface ProfileTypeFormSingleChoiceProps { profileType: ProfileType answerType: ProfileTypeAnswer setNextStep: Function - setPrevioustStep: Function + setPreviousStep: Function isProfileTypeComplete: boolean } @@ -29,15 +29,15 @@ const ProfileTypeFormSingleChoice: React.FC< profileType, answerType, setNextStep, - setPrevioustStep, + setPreviousStep, isProfileTypeComplete, }: ProfileTypeFormSingleChoiceProps) => { const { t } = useI18n() const [answer, setAnswer] = useState<ProfileTypeAnswerChoices>('') const handlePrevious = useCallback(() => { - setPrevioustStep(profileType) - }, [profileType, setPrevioustStep]) + setPreviousStep(profileType) + }, [profileType, setPreviousStep]) const handleNext = useCallback(() => { profileType[answerType.attribute] = answer diff --git a/src/components/ProfileType/ProfileTypeView.tsx b/src/components/ProfileType/ProfileTypeView.tsx index 88d58c230..f4f01a7f6 100644 --- a/src/components/ProfileType/ProfileTypeView.tsx +++ b/src/components/ProfileType/ProfileTypeView.tsx @@ -15,6 +15,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -62,7 +63,7 @@ const ProfileTypeView: React.FC = () => { hotWater: IndividualOrCollective.INDIVIDUAL, hotWaterEquipment: HotWaterEquipment.OTHER, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, equipments: [], }) @@ -139,7 +140,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.MULTI_CHOICE) { @@ -150,7 +151,7 @@ const ProfileTypeView: React.FC = () => { profileType={profileType} answerType={answerType} setNextStep={setNextStep} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} isProfileTypeComplete={profile.isProfileTypeCompleted} /> ) @@ -163,7 +164,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.NUMBER_SELECTION) { @@ -175,7 +176,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.DATE_SELECTION) { @@ -187,7 +188,7 @@ const ProfileTypeView: React.FC = () => { answerType={answerType} setNextStep={setNextStep} isProfileTypeComplete={profile.isProfileTypeCompleted} - setPrevioustStep={setPreviousStep} + setPreviousStep={setPreviousStep} /> ) } else if (answerType.type === ProfileTypeFormType.EQUIPMENT_SELECTION) { diff --git a/src/db/ecogestureData.json b/src/db/ecogestureData.json index 6b12e829f..50fe93026 100644 --- a/src/db/ecogestureData.json +++ b/src/db/ecogestureData.json @@ -28,7 +28,7 @@ "fluidTypes": [0], "shortName": "Portique thermique", "longName": "Je ferme mes fenêtres quand la climatisation est en marche", - "longDescription": "Cela permet de garder la fraicheur à l'intérieur. Le climatiseur n'est pas là pour refroidir la rue mais bien la pièce.", + "longDescription": "Cela permet de garder la fraîcheur à l'intérieur. Le climatiseur n'est pas là pour refroidir la rue mais bien la pièce.", "impactLevel": 8, "efficiency": 4, "difficulty": 1, @@ -279,7 +279,7 @@ "_id": "ECOGESTURE0013", "usage": 5, "fluidTypes": [0], - "shortName": "Accelerateur de particules", + "shortName": "Accélérateur de particules", "longName": "J’utilise le plus souvent les cycles courts à basse température pour laver le linge et la vaisselle.", "longDescription": "Utilisez la température la plus basse possible : de nombreux produits nettoyants sont efficaces à froid et un cycle à 90 °C consomme 3 fois plus d'énergie qu'un lavage à 40 °C. En effet, 80 % de l'énergie consommée par un lave-linge ou un lave-vaisselle sert au chauffage de l'eau ! Que ce soit pour la vaisselle ou le linge, les programmes de lavage intensif consomment jusqu'à 40 % de plus. Si possible, rincez à l'eau froide : la température de rinçage n'a pas d'effet sur le nettoyage du linge ou de la vaisselle. Attention cependant avec les tissus qui peuvent rétrécir : ce qui fait rétrécir, c'est le passage d'une température à une autre. Mieux vaut alors faire le cycle complet à l'eau froide pour les premiers lavages de tissus sensibles. Pour du linge ou de la vaisselle peu sales, utilisez la touche \"Eco\". Elle réduit la température de lavage et allonge sa durée (c’est le chauffage de l’eau qui consomme le plus). Vous économiserez jusqu’à 45 % par rapport aux cycles longs. Néanmoins, pour vous prémunir contre les bouchons de graisse dans les canalisations, faites quand même un cycle à chaud une fois par mois environ.", "impactLevel": 2, @@ -465,7 +465,7 @@ "fluidTypes": [0], "shortName": "Boules de linge", "longName": "Si j’ai un sèche linge, je sèche mon linge en petits paquets et j’adapte la durée de séchage de mon sèche-linge.", - "longDescription": "Le sèche-linge représente 5% des consommations moyenne d'électrcité spécifique (d'après EDF). Il est important au préalable d’essorer à une vitesse supérieure, jusqu’à 1 000 tours/minutes, si la nature du linge le permet. Le séchage sera alors plus rapide et vous consommerez moins d’énergie pour le sécher", + "longDescription": "Le sèche-linge représente 5% des consommations moyenne d’électricité spécifique (d'après EDF). Il est important au préalable d’essorer à une vitesse supérieure, jusqu’à 1 000 tours/minutes, si la nature du linge le permet. Le séchage sera alors plus rapide et vous consommerez moins d’énergie pour le sécher", "impactLevel": 1, "efficiency": 0.5, "difficulty": 1, @@ -601,7 +601,7 @@ "_id": "ECOGESTURE0027", "usage": 5, "fluidTypes": [0], - "shortName": "Marionnetiste", + "shortName": "Marionnettiste", "longName": "Je débranche mes chargeurs quand ils ne sont pas en fonctionnement.", "longDescription": "Certains chargeurs continuent de consommer de l’énergie quand ils restent branchés, même si l’appareil n’est pas connecté. De plus, certaines technologies de batteries supportent mal de rester branchées une fois la charge terminée. Les débrancher dès que l’appareil est chargé permet des économies d’énergie et prolonge la durée de vie de votre appareil.", "impactLevel": 1, @@ -672,7 +672,7 @@ "fluidTypes": [0], "shortName": "Roi du Puzzle", "longName": "J’optimise le rangement dans mon réfrigérateur et/ou congélateur.", - "longDescription": "La partie la plus froide ne se situe pas toujours au même endroit selon l’appareil : dans le haut des réfrigérateurs traditionnels, dans le bas des combinés 2 portes. Dans les réfrigérateurs à froid ventilé, les températures sont plus homogènes. Regardez la notice de votre réfrigérateur pour identifier les différentes zones de température et ainsi ranger chaque aliment à sa place. Enlevez les produits de leur emballage d'origine (film plastique, carton, etc.) qui filtrent le froid. Rangez les denrées de façon rationnelle pour y accéder plus rapidement et aussi pour pouvoir refermer plus rapidement la porte. Surtout, n’obstruez pas le thermostat car s’il est recouvert de givre ou de produits, il ne détectera pas la température correctement et l’abaissera plus que nécessaire. Evitez de mettre trop de poids dans les portes. Une porte qui fonctionne mal provoque des pertes d'énergie. Conseils pour ranger votre réfrigérateur : placez les oeufs sur l'étage le plus haut ; les laitages et le beurre sur l'étage du dessous ; puis les plats cuisinés, les pâtisseries fraîches et charcuteries sur l'étage du milieu ; sur les parties basses, placez les poissons ; et réservez le bac à légumes pour les légumes et les fruits.", + "longDescription": "La partie la plus froide ne se situe pas toujours au même endroit selon l’appareil : dans le haut des réfrigérateurs traditionnels, dans le bas des combinés 2 portes. Dans les réfrigérateurs à froid ventilé, les températures sont plus homogènes. Regardez la notice de votre réfrigérateur pour identifier les différentes zones de température et ainsi ranger chaque aliment à sa place. Enlevez les produits de leur emballage d'origine (film plastique, carton, etc.) qui filtrent le froid. Rangez les denrées de façon rationnelle pour y accéder plus rapidement et aussi pour pouvoir refermer plus rapidement la porte. Surtout, n’obstruez pas le thermostat car s’il est recouvert de givre ou de produits, il ne détectera pas la température correctement et l’abaissera plus que nécessaire. Évitez de mettre trop de poids dans les portes. Une porte qui fonctionne mal provoque des pertes d'énergie. Conseils pour ranger votre réfrigérateur : placez les oeufs sur l'étage le plus haut ; les laitages et le beurre sur l'étage du dessous ; puis les plats cuisinés, les pâtisseries fraîches et charcuteries sur l'étage du milieu ; sur les parties basses, placez les poissons ; et réservez le bac à légumes pour les légumes et les fruits.", "impactLevel": 1, "efficiency": 0.5, "difficulty": 1, @@ -764,7 +764,7 @@ "fluidTypes": [0], "shortName": "Bulles-à-part", "longName": "Je ne fais pas fonctionner mon ventilateur ou la climatisation dans les pièces non occupées", - "longDescription": "Cela permet d'évite des consommations inutiles. Le froid ne restera pas dans la pièce. Donc il est préférable d'allumer le ventilateru ou climatiseur seulement quand des personnes sont présentes dans la pièce.", + "longDescription": "Cela permet d'évite des consommations inutiles. Le froid ne restera pas dans la pièce. Donc il est préférable d'allumer le ventilateur ou climatiseur seulement quand des personnes sont présentes dans la pièce.", "impactLevel": 8, "efficiency": 4, "difficulty": 2, @@ -970,7 +970,7 @@ "usage": 1, "fluidTypes": [0, 2], "shortName": "Thermos-Logis", - "longName": "Je conserve au maximum la fraicheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", + "longName": "Je conserve au maximum la fraîcheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", "longDescription": "En laissant les fenêtres ouvertes aux heures chaudes, vous faites entrer la chaleur dans le logement. Une chaleur qui sera difficile à évacuer une fois les pièces réchauffées. L’idéal est de fermer les fenêtres dès que la température extérieure dépasse la température du logement. En revanche, laissez-les bien ouvertes la nuit afin que l’air frais rafraîchisse votre intérieur. ", "impactLevel": 7, "efficiency": 3.5, @@ -982,7 +982,7 @@ "equipmentInstallation": true, "investment": null, "action": true, - "actionName": "Je conserve au maximum la fraicheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", + "actionName": "Je conserve au maximum la fraîcheur de mon logement en fermant les volets et fenêtres quand je m’absente pendant la journée.", "actionDuration": 3, "doing": false, "objective": false, @@ -1086,7 +1086,7 @@ "fluidTypes": [0], "shortName": "Cape d'invisibilité", "longName": "Je branche ma \"box\" internet sur une multi-prise ou sur une minuterie pour l'éteindre quand je n'en n'ai pas besoin.", - "longDescription": "La consommation des box internet est loin d’être négligeable : autour de 200 kWh par an pour un usage moyen et avec des variations du simple au double selon votre fournisseur et votre équipement. Face à cela, une solution s’impose : la débrancher tout simplement ! Pour faciliter les bonnes habitudes nous vous conseillons de la brancher sur une minuterie qui s’éteindra toute seule pendant la nuit par exemple selon les réglages que vous aurez prévus. Sinon, une simple muli-prise fait l'affaire si vous pensez à l'éteindre !", + "longDescription": "La consommation des box internet est loin d’être négligeable : autour de 200 kWh par an pour un usage moyen et avec des variations du simple au double selon votre fournisseur et votre équipement. Face à cela, une solution s’impose : la débrancher tout simplement ! Pour faciliter les bonnes habitudes nous vous conseillons de la brancher sur une minuterie qui s’éteindra toute seule pendant la nuit par exemple selon les réglages que vous aurez prévus. Sinon, une simple multi-prise fait l'affaire si vous pensez à l'éteindre !", "impactLevel": 3, "efficiency": 1.5, "difficulty": 2, @@ -1187,7 +1187,7 @@ "equipment": false, "equipmentType": ["DRYER"], "equipmentInstallation": false, - "investment": "Etendage", + "investment": "Étendage", "action": false, "actionName": null, "actionDuration": 3, @@ -1270,7 +1270,7 @@ "fluidTypes": [1], "shortName": "Pisciniste", "longName": "Si j'ai un grand évier, j'utilise un bac pour faire la vaisselle.", - "longDescription": "C’est mieux que de laisser le robinet ouvert pendant toute la vaisselle : même si celui-ci est équipé d’un \"écomousseur\" ! En plus, ça mousse mieux et vous économisez aussi du liquide vaisselle, astucieux, non ?", + "longDescription": "C’est mieux que de laisser le robinet ouvert pendant toute la vaisselle : même si celui-ci est équipé d’un \"éco-mousseur\" ! En plus, ça mousse mieux et vous économisez aussi du liquide vaisselle, astucieux, non ?", "impactLevel": 3, "efficiency": 1.5, "difficulty": 2, @@ -1279,7 +1279,7 @@ "equipment": false, "equipmentType": [], "equipmentInstallation": false, - "investment": "un bac à vaiselle", + "investment": "un bac à vaisselle", "action": false, "actionName": null, "actionDuration": 3, @@ -1499,7 +1499,7 @@ "usage": 1, "fluidTypes": [2], "shortName": "Brûleur Expert", - "longName": "Je nettoie et je régle la combustion de ma chaudière tous les ans.", + "longName": "Je nettoie et je règle la combustion de ma chaudière tous les ans.", "longDescription": "Le mauvais entretien ou réglage d’une chaudière peut réduire son efficacité. Pour obtenir un rendement maximal, faites vérifier votre équipement de chauffage tous les ans. L’entretien régulier permet d’éviter les sur-consommations.Indispensable pour votre sécurité, la révision annuelle des chaudières à combustion (gaz, fioul, bois) est obligatoire ", "impactLevel": 7, "efficiency": 3.5, @@ -1592,7 +1592,7 @@ "fluidTypes": [2], "shortName": "Passage au stand", "longName": "Si mon circuit de chauffage a plus de 10 ans, je le fait désembouer.", - "longDescription": "Au fil du temps, la tuyauterie s’oxyde, entraînant la formation de boues et autres sédiments dans le circuit. L’embouage de l’installation nuit à la diffusion de chaleur : cela peut entraîner une perte de la performance allant jusqu’à 40 %. Vous pouvez désembouer votre radiateur vous-même ou faire appel à un pro. Etape 1 : Eteindre sa chaudière puis laissez l’eau redescendre à température ambiante. Fermez tous vos radiateurs. Etape 2 : Le désembouage doit commencer par le premier radiateur, c’est-à-dire le plus proche du chauffage central. Fermez les vannes de ce radiateur. Dévissez son purgeur avec la clé à molette puis versez le produit désembouant directement dans le radiateur à l’aide de votre entonnoir. Revissez le purgeur puis remettez le chauffage central en marche. Laissez agir le produit le temps indiqué sur la notice, soit 2 à 5 jours en moyenne, voire davantage (voir notice produit désembouant). Étape n°3 : La vidange du circuit de chauffage. Patientez le temps nécessaire pour bien laisser le temps au produit d’agir en profondeur. Ce temps lui permet de bien décoller les boues et de les mettre en suspension afin de les évacuer plus facilement. Une fois ce délai passé, vous pouvez procéder à la vidange. Pour cela, coupez le chauffage à nouveau. Vidangez la totalité du circuit de chauffage en permettant un débit suffisamment fort pour évacuer les boues en suspension par le robinet de vidange du radiateur. Lorsque la vidange est effectuée, rincez le radiateur et remplissez-le à nouveau. Vous pouvez aussi faire appel à un plombier, comptez 350 à 450 euros HT pour un circuit comprenant moins de 10 radiateurs.", + "longDescription": "Au fil du temps, la tuyauterie s’oxyde, entraînant la formation de boues et autres sédiments dans le circuit. L’embouage de l’installation nuit à la diffusion de chaleur : cela peut entraîner une perte de la performance allant jusqu’à 40 %. Vous pouvez désembouer votre radiateur vous-même ou faire appel à un pro. Etape 1 : Éteindre sa chaudière puis laissez l’eau redescendre à température ambiante. Fermez tous vos radiateurs. Etape 2 : Le désembouage doit commencer par le premier radiateur, c’est-à-dire le plus proche du chauffage central. Fermez les vannes de ce radiateur. Dévissez son purgeur avec la clé à molette puis versez le produit désembouant directement dans le radiateur à l’aide de votre entonnoir. Revissez le purgeur puis remettez le chauffage central en marche. Laissez agir le produit le temps indiqué sur la notice, soit 2 à 5 jours en moyenne, voire davantage (voir notice produit désembouant). Étape n°3 : La vidange du circuit de chauffage. Patientez le temps nécessaire pour bien laisser le temps au produit d’agir en profondeur. Ce temps lui permet de bien décoller les boues et de les mettre en suspension afin de les évacuer plus facilement. Une fois ce délai passé, vous pouvez procéder à la vidange. Pour cela, coupez le chauffage à nouveau. Vidangez la totalité du circuit de chauffage en permettant un débit suffisamment fort pour évacuer les boues en suspension par le robinet de vidange du radiateur. Lorsque la vidange est effectuée, rincez le radiateur et remplissez-le à nouveau. Vous pouvez aussi faire appel à un plombier, comptez 350 à 450 euros HT pour un circuit comprenant moins de 10 radiateurs.", "impactLevel": 6, "efficiency": 3, "difficulty": 3, @@ -1661,7 +1661,7 @@ "fluidTypes": [0, 2], "shortName": "Le Grand Nettoyage", "longName": "Je purge mes radiateurs hydrauliques tous les ans.", - "longDescription": "Lorsque les radiateurs sont froids en haut mais chauds en bas, c'est qu'ils contiennent de l'air qui diminue nettement leur rendement. Ils ont donc besoin d'être purgés : 1. Coupez l'alimentation d'eau au niveau de votre chaudière pour ne pas avoir de l'eau sous pression, fermez les vannes thermostatiques des radiateurs et prévoyez un récipient pour recueillir l'eau ; 2. Commencez par le radiateur situé au plus bas de la maison : ouvrez le purgeur dans le sens inverse des aiguilles d'une montre jusqu'à entendre un sifflement, signe que l'air s'échappe. En général, le purgeur se trouve en partie haute du radiateur, du côté opposé au robinet d'alimentation. Sur certains modèles anciens, une clé spéciale est nécessaire pour le dévisser (trouvable en quincailleries et magasins de bricolage). Attention, ne dévissez jamais la molette complètement, vous risqueriez de ne jamais réussir à la remettre en place ; 3; Quand l'eau se met à couler, refermez la molette ; 4. Resserez la vis de purge. 5 Vérifiez au manomètre de la chaudière que la pression d'eau dans l'installation est suffisante (entre 1,5 et 2 bars). Dans le cas contraire, ajoutez de l'eau.", + "longDescription": "Lorsque les radiateurs sont froids en haut mais chauds en bas, c'est qu'ils contiennent de l'air qui diminue nettement leur rendement. Ils ont donc besoin d'être purgés : 1. Coupez l'alimentation d'eau au niveau de votre chaudière pour ne pas avoir de l'eau sous pression, fermez les vannes thermostatiques des radiateurs et prévoyez un récipient pour recueillir l'eau ; 2. Commencez par le radiateur situé au plus bas de la maison : ouvrez le purgeur dans le sens inverse des aiguilles d'une montre jusqu'à entendre un sifflement, signe que l'air s'échappe. En général, le purgeur se trouve en partie haute du radiateur, du côté opposé au robinet d'alimentation. Sur certains modèles anciens, une clé spéciale est nécessaire pour le dévisser (trouvable en quincailleries et magasins de bricolage). Attention, ne dévissez jamais la molette complètement, vous risqueriez de ne jamais réussir à la remettre en place ; 3; Quand l'eau se met à couler, refermez la molette ; 4. Resserrez la vis de purge. 5 Vérifiez au manomètre de la chaudière que la pression d'eau dans l'installation est suffisante (entre 1,5 et 2 bars). Dans le cas contraire, ajoutez de l'eau.", "impactLevel": 5, "efficiency": 2.5, "difficulty": 3, diff --git a/src/enum/profileType.enum.ts b/src/enum/profileType.enum.ts index 01c2b20a5..942f67244 100644 --- a/src/enum/profileType.enum.ts +++ b/src/enum/profileType.enum.ts @@ -54,6 +54,13 @@ export enum WarmingType { GAS = 2, WOOD = 3, FUEL = 4, + OTHER = 5, +} + +export enum HotWaterFluid { + ELECTRICITY = 0, + GAS = 2, + OTHER = 3, } export enum ProfileTypeStepForm { diff --git a/src/locales/fr.json b/src/locales/fr.json index 17060aa0b..ad282f24b 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1094,20 +1094,24 @@ "2": "Gaz", "3": "Bois", "4": "Fioul", + "5": "Autre", "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" + "4_text": "Produit grâce au fioul", + "5_text": "Produit grâce à un autre moyen" }, "hot_water_fluid": { "title": "Source eau chaude", "question": "Avec quelle source d’énergie votre eau chaude est-elle produite\u00a0?", "0": "Électricité", "2": "Gaz", + "3": "Fioul, bois, autre", "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" + "2_text": "Produite grâce au gaz", + "3_text": "Produite grâce au fioul, bois ou autre" }, "cooking_fluid": { "title": "Source cuisson", diff --git a/src/models/profileType.model.ts b/src/models/profileType.model.ts index a4e6a7fdf..f1f0b9795 100644 --- a/src/models/profileType.model.ts +++ b/src/models/profileType.model.ts @@ -1,18 +1,19 @@ +import { EquipmentType } from 'enum/ecogesture.enum' +import { FluidType } from 'enum/fluid.enum' import { - HousingType, - Floor, ConstructionYear, - IndividualInsulationWork, + Floor, HotWaterEquipment, - OutsideFacingWalls, + HotWaterFluid, + HousingType, + IndividualInsulationWork, IndividualOrCollective, + OutsideFacingWalls, ProfileTypeFormType, ThreeChoicesAnswer, WarmingType, } from 'enum/profileType.enum' -import { FluidType } from 'enum/fluid.enum' import { DateTime } from 'luxon' -import { EquipmentType } from 'enum/ecogesture.enum' interface ProfileTypeIndexableTypes { [key: string]: @@ -47,7 +48,7 @@ export interface ProfileType extends ProfileTypeIndexableTypes { hasReplacedHeater: ThreeChoicesAnswer hotWaterEquipment: HotWaterEquipment warmingFluid: WarmingType | null - hotWaterFluid: FluidType | null + hotWaterFluid: HotWaterFluid | null cookingFluid: FluidType updateDate: DateTime equipments: EquipmentType[] diff --git a/src/services/profileType.service.ts b/src/services/profileType.service.ts index 5dafc811a..3be40613c 100644 --- a/src/services/profileType.service.ts +++ b/src/services/profileType.service.ts @@ -373,7 +373,7 @@ export default class ProfileTypeService { * getDetailsMonthlyForecast * @param {FluidType} fluidType * @param {number} month - * @returns {numeber} DetailsMnthlyForecast + * @returns {number} DetailsMonthlyForecast */ public async getDetailsMonthlyForecast( fluidType: FluidType, @@ -394,7 +394,8 @@ export default class ProfileTypeService { ecsConsumption: this.profileType.heating === IndividualOrCollective.COLLECTIVE ? null - : fluidType === hotWaterFluid + : hotWaterFluid !== null && + (fluidType as number) === (hotWaterFluid as number) ? this.getMonthEcs(month) : null, cookingConsumption: diff --git a/src/services/profileTypeForm.service.ts b/src/services/profileTypeForm.service.ts index 1a4b33395..14e2bcd30 100644 --- a/src/services/profileTypeForm.service.ts +++ b/src/services/profileTypeForm.service.ts @@ -4,6 +4,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -199,6 +200,7 @@ export default class ProfileTypeFormService { WarmingType.GAS, WarmingType.WOOD, WarmingType.FUEL, + WarmingType.OTHER, ], } case ProfileTypeStepForm.INDIVIDUAL_INSULATION_WORK: @@ -241,7 +243,11 @@ export default class ProfileTypeFormService { return { type: ProfileTypeFormType.SINGLE_CHOICE, attribute: 'hotWaterFluid', - choices: [FluidType.ELECTRICITY, FluidType.GAS], + choices: [ + HotWaterFluid.ELECTRICITY, + HotWaterFluid.GAS, + HotWaterFluid.OTHER, + ], } case ProfileTypeStepForm.COOKING_FLUID: return { diff --git a/tests/__mocks__/profileType.mock.ts b/tests/__mocks__/profileType.mock.ts index 053abe45a..45f6ee360 100644 --- a/tests/__mocks__/profileType.mock.ts +++ b/tests/__mocks__/profileType.mock.ts @@ -3,6 +3,7 @@ import { ConstructionYear, Floor, HotWaterEquipment, + HotWaterFluid, HousingType, IndividualInsulationWork, IndividualOrCollective, @@ -60,7 +61,7 @@ export const mockProfileType: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.THERMODYNAMIC, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -69,7 +70,7 @@ export const mockProfileType: ProfileType = { } export const mockEstimatedConsumption = 3182 export const mockCorrectedConsumption = 3500 -//For the month of march +// For the month of march export const mockMonthConsumption = 439 export const mockMonthCookingConsumption = 17 @@ -97,7 +98,7 @@ export const mockProfileType1: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -106,7 +107,7 @@ export const mockProfileType1: ProfileType = { } export const mockEstimatedConsumption1 = 6450 export const mockCorrectedConsumption1 = 6450 -//For the month of February +// For the month of February export const mockMonthConsumption1 = 1174 export const mockMonthEcsConsumption1Solar = 134 @@ -126,7 +127,7 @@ export const mockProfileType2: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.YES, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -135,7 +136,7 @@ export const mockProfileType2: ProfileType = { } export const mockEstimatedConsumption2 = 16560 export const mockCorrectedConsumption2 = 15411 -//For the month of January +// For the month of January export const mockMonthConsumption2 = 3000 export const mockTestProfile1: ProfileType = { @@ -153,7 +154,7 @@ export const mockTestProfile1: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.SOLAR, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.GAS, + hotWaterFluid: HotWaterFluid.GAS, cookingFluid: FluidType.GAS, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -218,7 +219,7 @@ export const mockTestProfile2: ProfileType = { hasReplacedHeater: ThreeChoicesAnswer.NO, hotWaterEquipment: HotWaterEquipment.OTHER, warmingFluid: WarmingType.ELECTRICITY, - hotWaterFluid: FluidType.ELECTRICITY, + hotWaterFluid: HotWaterFluid.ELECTRICITY, cookingFluid: FluidType.ELECTRICITY, updateDate: DateTime.fromISO('2021-01-01T00:00:00.000Z', { zone: 'utc', @@ -379,6 +380,7 @@ export const mockProfileTypeAnswers: ProfileTypeAnswer[] = [ WarmingType.GAS, WarmingType.WOOD, WarmingType.FUEL, + WarmingType.OTHER, ], }, { @@ -409,7 +411,11 @@ export const mockProfileTypeAnswers: ProfileTypeAnswer[] = [ { type: ProfileTypeFormType.SINGLE_CHOICE, attribute: 'hotWaterFluid', - choices: [FluidType.ELECTRICITY, FluidType.GAS], + choices: [ + HotWaterFluid.ELECTRICITY, + HotWaterFluid.GAS, + HotWaterFluid.OTHER, + ], }, { type: ProfileTypeFormType.SINGLE_CHOICE, -- GitLab