diff --git a/src/assets/icons/ico/maxPower.svg b/src/assets/icons/ico/maxPower.svg new file mode 100644 index 0000000000000000000000000000000000000000..15c86fcecffc7abdf730bb6cc66b0bd59560ee85 --- /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 0e14a636871535aef1fba019a8b9f6437a865954..8c949ae0f06da23d18af9dfb42dbeceb32f8d99e 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 a7c1a39d2d0173aeedde9d393c286544aeb9bda3..d726e13c371730f5b6de84c324c6c20f890a6fa7 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 0000000000000000000000000000000000000000..f242f45badfa7b9be2edfcd61e9da0c285dacc7a --- /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 5bdbd9ebee4c806dab44ff78fb4c533b39464285..dc84679b337b1620dcb90e4ba92997980eddedb8 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 795a2d4653fd96b5e0f82f371eca9c6ce54d2ca1..02643e7e9f1a77d2f689d02f3aa07e530bb7c55d 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 0000000000000000000000000000000000000000..8c3b4fad5f3afdc94ec3ff1e9b15aa07d2bdd85b --- /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 0b14544277d02fc62175cc23321292c6c80309c0..381c7682dea9facb46fa616ac0f636ae870f2a60 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 f243e8acbb4711cf28d47a8a518c08d3a78c961c..e9d30567b541986ed71f945b02391b5ced6d6b83 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 } }