From e019ebd3295366a7bc8c58c4f885eb97d4bf45ba Mon Sep 17 00:00:00 2001 From: "guilhem.carron" <gcarron@grandlyon.com> Date: Tue, 23 Nov 2021 17:37:16 +0100 Subject: [PATCH] Add maxPower doctype --- src/assets/icons/ico/maxPower.svg | 6 ++++ .../Analysis/ElecHalfHourMonthlyAnalysis.tsx | 34 ++++++++++++++++--- .../Analysis/elecHalfHourMonthlyAnalysis.scss | 3 ++ src/doctypes/com-grandlyon-enedis-maxpower.ts | 1 + src/doctypes/index.ts | 7 ++++ src/locales/fr.json | 3 +- src/models/maxPower.model.ts | 4 +++ .../enedisMonthlyAnalysisData.service.ts | 20 +++++++++-- .../services/enedisHalfHourMonthlyAnalysis.ts | 15 +++++++- 9 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 src/assets/icons/ico/maxPower.svg create mode 100644 src/doctypes/com-grandlyon-enedis-maxpower.ts create mode 100644 src/models/maxPower.model.ts diff --git a/src/assets/icons/ico/maxPower.svg b/src/assets/icons/ico/maxPower.svg new file mode 100644 index 000000000..15c86fcec --- /dev/null +++ b/src/assets/icons/ico/maxPower.svg @@ -0,0 +1,6 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="7" y="6" width="25" height="2" rx="1" fill="white"/> +<path d="M17 14C17 12.8954 17.8954 12 19 12H20C21.1046 12 22 12.8954 22 14V33H17V14Z" fill="#D87B39"/> +<path d="M9 24C9 22.8954 9.89543 22 11 22H12C13.1046 22 14 22.8954 14 24V33H9V24Z" fill="#D87B39"/> +<path d="M25 28C25 26.8954 25.8954 26 27 26H28C29.1046 26 30 26.8954 30 28V33H25V28Z" fill="#D87B39"/> +</svg> diff --git a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx index 0e14a6368..8c949ae0f 100644 --- a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx +++ b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx @@ -3,6 +3,7 @@ import { useI18n } from 'cozy-ui/transpiled/react/I18n' import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg' import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg' import MinIcon from 'assets/icons/ico/minimum.svg' +import MaxPowerIcon from 'assets/icons/ico/maxPower.svg' import IconButton from '@material-ui/core/IconButton' import Icon from 'cozy-ui/transpiled/react/Icon' import { FluidType } from 'enum/fluid.enum' @@ -83,7 +84,7 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> = return () => { subscribed = false } - }, [analysisDate.month, analysisDate.year, client]) + }, [analysisDate, client]) return ( <div className="special-elec-container"> @@ -141,10 +142,33 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> = {t('special_elec.min')} </div> <div className="value text-18-bold"> - {isWeekend - ? enedisAnalysisValues.weekEndDays.minLoad - : enedisAnalysisValues.weekDays.minLoad} - <span> kWh</span> + {enedisAnalysisValues.minLoad !== 0 && + enedisAnalysisValues.minLoad !== null ? ( + <> + {enedisAnalysisValues.minLoad} <span> kWh</span> + </> + ) : ( + <span>----</span> + )} + </div> + </div> + </div> + <div className="container"> + <Icon icon={MaxPowerIcon} size={40} className="minIcon" /> + <div className="text"> + <div className="min text-18-normal"> + {t('special_elec.maxPower')} + </div> + <div className="value text-18-bold"> + {enedisAnalysisValues.maxPower !== 0 && + enedisAnalysisValues.maxPower !== null ? ( + <> + {enedisAnalysisValues.maxPower / 1000} + <span> kVA</span> + </> + ) : ( + <span>----</span> + )} </div> </div> </div> diff --git a/src/components/Analysis/elecHalfHourMonthlyAnalysis.scss b/src/components/Analysis/elecHalfHourMonthlyAnalysis.scss index a7c1a39d2..d726e13c3 100644 --- a/src/components/Analysis/elecHalfHourMonthlyAnalysis.scss +++ b/src/components/Analysis/elecHalfHourMonthlyAnalysis.scss @@ -42,6 +42,9 @@ text-align: left; margin-left: 1rem; } + .container { + margin-bottom: 1rem; + } } .graph-elec-half-hour { height: 13rem; diff --git a/src/doctypes/com-grandlyon-enedis-maxpower.ts b/src/doctypes/com-grandlyon-enedis-maxpower.ts new file mode 100644 index 000000000..f242f45ba --- /dev/null +++ b/src/doctypes/com-grandlyon-enedis-maxpower.ts @@ -0,0 +1 @@ +export const ENEDIS_MAXPOWER_DOCTYPE = 'com.grandlyon.enedis.maxpower' diff --git a/src/doctypes/index.ts b/src/doctypes/index.ts index 5bdbd9ebe..dc84679b3 100644 --- a/src/doctypes/index.ts +++ b/src/doctypes/index.ts @@ -26,6 +26,7 @@ import { GRDF_MONTH_DOCTYPE } from './com-grandlyon-grdf-month' import { EGL_YEAR_DOCTYPE } from './com-grandlyon-egl-year' import { EGL_MONTH_DOCTYPE } from './com-grandlyon-egl-month' import { ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE } from './com-grandlyon-enedis-monthly-analysis-data' +import { ENEDIS_MAXPOWER_DOCTYPE } from './com-grandlyon-enedis-maxpower' // the documents schema, necessary for CozyClient const doctypes = { @@ -167,6 +168,11 @@ const doctypes = { attributes: {}, relationships: {}, }, + enedismaxpower: { + doctype: ENEDIS_MAXPOWER_DOCTYPE, + attributes: {}, + relationships: {}, + }, } export default doctypes @@ -177,6 +183,7 @@ export * from './com-grandlyon-enedis-day' export * from './com-grandlyon-enedis-month' export * from './com-grandlyon-enedis-year' export * from './com-grandlyon-enedis-monthly-analysis-data' +export * from './com-grandlyon-enedis-maxpower' export * from './com-grandlyon-grdf-day' export * from './com-grandlyon-grdf-month' diff --git a/src/locales/fr.json b/src/locales/fr.json index 795a2d465..02643e7e9 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -112,7 +112,8 @@ "weektype": "un jour de ", "week": "semaine", "weekend": "week-end", - "min": "Consommation minimum" + "min": "Consommation minimum", + "maxPower": "Puissance maximum atteinte" }, "auth": { "enedisgrandlyon": { diff --git a/src/models/maxPower.model.ts b/src/models/maxPower.model.ts new file mode 100644 index 000000000..8c3b4fad5 --- /dev/null +++ b/src/models/maxPower.model.ts @@ -0,0 +1,4 @@ +export interface MaxPowerEntity { + value: number + date: string +} diff --git a/src/services/enedisMonthlyAnalysisData.service.ts b/src/services/enedisMonthlyAnalysisData.service.ts index 0b1454427..381c7682d 100644 --- a/src/services/enedisMonthlyAnalysisData.service.ts +++ b/src/services/enedisMonthlyAnalysisData.service.ts @@ -1,12 +1,16 @@ import { Client, QueryDefinition, QueryResult, Q } from 'cozy-client' -import { ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE } from 'doctypes' +import { + ENEDIS_MAXPOWER_DOCTYPE, + ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE, +} from 'doctypes' import { DateTime } from 'luxon' -import { Dataload } from 'models' +import { Dataload, TimePeriod } from 'models' import { AggregatedEnedisMonthlyDataloads, EnedisMonthlyAnalysisData, } from 'models/enedisMonthlyAnalysis' +import { MaxPowerEntity } from 'models/maxPower.model' export default class EnedisMonthlyAnalysisDataService { private readonly _client: Client @@ -122,4 +126,16 @@ export default class EnedisMonthlyAnalysisDataService { throw error } } + + public async getMaxPowerByDate( + year: number, + month: number + ): Promise<MaxPowerEntity[]> { + const query: QueryDefinition = Q(ENEDIS_MAXPOWER_DOCTYPE) + .where({ year: year, month: month }) + .sortBy([{ year: 'desc' }, { month: 'desc' }]) + const data = await this._client.query(query) + + return data.data + } } diff --git a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts index f243e8acb..e9d30567b 100644 --- a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts +++ b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts @@ -82,6 +82,19 @@ const populateArrayWithTotalData = ( }) } } +const getMonthMaxPower = async ( + month: number, + year: number, + client: Client +) => { + const emas = new EnedisMonthlyAnalysisDataService(client) + const data = await emas.getMaxPowerByDate(year, month) + const maxPowerArray: number[] = [] + if (data && data.length) { + data.forEach(day => maxPowerArray.push(day.value)) + } + return Math.max(...maxPowerArray) +} /** * Get the average arrays of half-hour value on a given month * @param client @@ -150,7 +163,7 @@ const getEnedisMonthAnalysisData = async ( ) monthlyAveragesLoads.weekDaysHalfHourAverageValues = weekAverages monthlyAveragesLoads.weekEndDaysHalfHourAverageValues = weekEndAverages - + monthlyAveragesLoads.maxPower = await getMonthMaxPower(month, year, client) return monthlyAveragesLoads } } -- GitLab