Skip to content
Snippets Groups Projects
Commit 4490ff47 authored by Yoan VALLET's avatar Yoan VALLET
Browse files

feat: review time period service

parent 128b3479
Branches
Tags
3 merge requests!103Support,!102Dev,!91Features/review services
...@@ -8,7 +8,7 @@ import { ...@@ -8,7 +8,7 @@ import {
import { withClient, Client } from 'cozy-client' import { withClient, Client } from 'cozy-client'
import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator'
import IndicatorContainerSwitcher from 'components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher' import IndicatorContainerSwitcher from 'components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher'
import ConsumptionPeriodSelector from 'services/consumptionPeriodSelectorService' import TimePeriodService from 'services/timePeriod.service'
import ConsumptionDataManager from 'services/consumptionDataManagerService' import ConsumptionDataManager from 'services/consumptionDataManagerService'
import PerformanceIndicatorService from 'services/performanceIndicator.service' import PerformanceIndicatorService from 'services/performanceIndicator.service'
import { translate } from 'cozy-ui/react/I18n' import { translate } from 'cozy-ui/react/I18n'
...@@ -49,8 +49,8 @@ const MultiFluidIndicatorsContainer: React.FC<MultiFluidIndicatorsContainerProps ...@@ -49,8 +49,8 @@ const MultiFluidIndicatorsContainer: React.FC<MultiFluidIndicatorsContainerProps
const lastDate = await cdm.fetchLastDateData(fluidTypes) const lastDate = await cdm.fetchLastDateData(fluidTypes)
if (subscribed && lastDate) { if (subscribed && lastDate) {
const consumptionPeriodSelector = new ConsumptionPeriodSelector() const timePeriodService = new TimePeriodService()
const periods = consumptionPeriodSelector.getTimePeriods( const periods = timePeriodService.getTimePeriods(
lastDate, lastDate,
fluidTypes, fluidTypes,
timeStep timeStep
......
...@@ -8,7 +8,7 @@ import { ...@@ -8,7 +8,7 @@ import {
import { FluidType } from 'enum/fluid.enum' import { FluidType } from 'enum/fluid.enum'
import { withClient, Client } from 'cozy-client' import { withClient, Client } from 'cozy-client'
import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator'
import ConsumptionPeriodSelector from 'services/consumptionPeriodSelectorService' import TimePeriodService from 'services/timePeriod.service'
import ConsumptionDataManager from 'services/consumptionDataManagerService' import ConsumptionDataManager from 'services/consumptionDataManagerService'
import PerformanceIndicatorService from 'services/performanceIndicator.service' import PerformanceIndicatorService from 'services/performanceIndicator.service'
import { translate } from 'cozy-ui/react/I18n' import { translate } from 'cozy-ui/react/I18n'
...@@ -55,8 +55,8 @@ const SingleFluidIndicatorsContainer: React.FC<SingleFluidIndicatorsContainerPro ...@@ -55,8 +55,8 @@ const SingleFluidIndicatorsContainer: React.FC<SingleFluidIndicatorsContainerPro
const lastDate = await cdm.fetchLastDateData(fluidTypes) const lastDate = await cdm.fetchLastDateData(fluidTypes)
if (lastDate) { if (lastDate) {
const consumptionPeriodSelector = new ConsumptionPeriodSelector() const timePeriodService = new TimePeriodService()
const periods = consumptionPeriodSelector.getTimePeriods( const periods = timePeriodService.getTimePeriods(
lastDate, lastDate,
fluidTypes, fluidTypes,
timeStep timeStep
......
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
import { FluidType } from 'enum/fluid.enum' import { FluidType } from 'enum/fluid.enum'
import { ITimePeriod, TimeStep } from './dataConsumptionContracts' import { ITimePeriod, TimeStep } from './dataConsumptionContracts'
import Config from '../../config.json' import ConfigService from 'services/fluidConfig.service'
import { FluidConfig } from 'models'
export default class ConsumptionPeriodSelector {
private readonly _dataDelayOffsetConfig: FluidConfig[]
constructor() {
this._dataDelayOffsetConfig = Config.fluidConfig
}
export default class TimePeriodService {
public getTimePeriods( public getTimePeriods(
date: DateTime, date: DateTime,
fluidTypes: FluidType[], fluidTypes: FluidType[],
timeStep: TimeStep timeStep: TimeStep
): any { ): {
timePeriod: ITimePeriod
comparisonTimePeriod: ITimePeriod
} {
const endOfOffsetDate = this.applyOffsetToDate( const endOfOffsetDate = this.applyOffsetToDate(
date, date,
this.calculateFluidTypesOffset(fluidTypes) this.calculateFluidTypesOffset(fluidTypes)
...@@ -48,8 +44,10 @@ export default class ConsumptionPeriodSelector { ...@@ -48,8 +44,10 @@ export default class ConsumptionPeriodSelector {
public calculateFluidTypesOffset(fluidTypes: FluidType[]): number { public calculateFluidTypesOffset(fluidTypes: FluidType[]): number {
const allOffsets: number[] = [] const allOffsets: number[] = []
const configService = new ConfigService()
const fluidConfig = configService.getFluidConfig()
fluidTypes.forEach(fluidType => fluidTypes.forEach(fluidType =>
allOffsets.push(this._dataDelayOffsetConfig[fluidType].dataDelayOffset) allOffsets.push(fluidConfig[fluidType].dataDelayOffset)
) )
// eslint-disable-next-line prefer-spread // eslint-disable-next-line prefer-spread
...@@ -73,24 +71,21 @@ export default class ConsumptionPeriodSelector { ...@@ -73,24 +71,21 @@ export default class ConsumptionPeriodSelector {
public getLastDayOfTimePeriod(date: DateTime, timeStep: TimeStep): DateTime { public getLastDayOfTimePeriod(date: DateTime, timeStep: TimeStep): DateTime {
switch (timeStep) { switch (timeStep) {
case TimeStep.HALF_AN_HOUR || TimeStep.HOUR: case TimeStep.HALF_AN_HOUR:
case TimeStep.HOUR:
return DateTime.local(date.year, date.month, date.day) return DateTime.local(date.year, date.month, date.day)
case TimeStep.DAY: case TimeStep.DAY:
return DateTime.local(date.year, date.month, date.day) return DateTime.local(date.year, date.month, date.day)
.setLocale('fr-CA') .setLocale('fr-CA')
.endOf('week') .endOf('week')
case TimeStep.MONTH: case TimeStep.MONTH:
return DateTime.local(date.year, date.month, 1) return DateTime.local(date.year, date.month, 1)
.plus({ months: 1 }) .plus({ months: 1 })
.minus({ days: 1 }) .minus({ days: 1 })
case TimeStep.YEAR: case TimeStep.YEAR:
return DateTime.local(date.year, 1, 1) return DateTime.local(date.year, 1, 1)
.plus({ years: 1 }) .plus({ years: 1 })
.minus({ days: 1 }) .minus({ days: 1 })
default: default:
return date return date
} }
...@@ -98,23 +93,20 @@ export default class ConsumptionPeriodSelector { ...@@ -98,23 +93,20 @@ export default class ConsumptionPeriodSelector {
public getLastDayOfCompletePeriod(date: DateTime, timeStep: TimeStep) { public getLastDayOfCompletePeriod(date: DateTime, timeStep: TimeStep) {
switch (timeStep) { switch (timeStep) {
case TimeStep.HALF_AN_HOUR || TimeStep.HOUR: case TimeStep.HALF_AN_HOUR:
case TimeStep.HOUR:
return DateTime.local(date.year, date.month, date.day) return DateTime.local(date.year, date.month, date.day)
case TimeStep.DAY: case TimeStep.DAY:
return DateTime.local(date.year, date.month, date.day) return DateTime.local(date.year, date.month, date.day)
.setLocale('fr-CA') .setLocale('fr-CA')
.startOf('week') .startOf('week')
.minus({ days: 1 }) .minus({ days: 1 })
case TimeStep.MONTH: case TimeStep.MONTH:
return DateTime.local(date.year, date.month, 1).minus({ return DateTime.local(date.year, date.month, 1).minus({
days: 1, days: 1,
}) })
case TimeStep.YEAR: case TimeStep.YEAR:
return DateTime.local(date.year, 1, 1).minus({ days: 1 }) return DateTime.local(date.year, 1, 1).minus({ days: 1 })
default: default:
return date return date
} }
...@@ -125,20 +117,17 @@ export default class ConsumptionPeriodSelector { ...@@ -125,20 +117,17 @@ export default class ConsumptionPeriodSelector {
timeStep: TimeStep timeStep: TimeStep
) { ) {
switch (timeStep) { switch (timeStep) {
case TimeStep.HALF_AN_HOUR || TimeStep.HOUR: case TimeStep.HALF_AN_HOUR:
case TimeStep.HOUR:
return DateTime.local(startDate.year, startDate.month, startDate.day) return DateTime.local(startDate.year, startDate.month, startDate.day)
case TimeStep.DAY: case TimeStep.DAY:
return DateTime.local(startDate.year, startDate.month, startDate.day) return DateTime.local(startDate.year, startDate.month, startDate.day)
.setLocale('fr-CA') .setLocale('fr-CA')
.startOf('week') .startOf('week')
case TimeStep.MONTH: case TimeStep.MONTH:
return DateTime.local(startDate.year, startDate.month, 1) return DateTime.local(startDate.year, startDate.month, 1)
case TimeStep.YEAR: case TimeStep.YEAR:
return DateTime.local(startDate.year, 1, 1) return DateTime.local(startDate.year, 1, 1)
default: default:
return startDate return startDate
} }
...@@ -149,12 +138,10 @@ export default class ConsumptionPeriodSelector { ...@@ -149,12 +138,10 @@ export default class ConsumptionPeriodSelector {
timeStep: TimeStep timeStep: TimeStep
): ITimePeriod { ): ITimePeriod {
// calculate last day of the tobe coimpleted period // calculate last day of the tobe coimpleted period
const lastCompleteTimePeriod = { const lastCompleteTimePeriod = {
startDate: this.getStartDateFromEndDateByTimeStep(lastDay, timeStep), startDate: this.getStartDateFromEndDateByTimeStep(lastDay, timeStep),
endDate: lastDay, endDate: lastDay,
} }
return lastCompleteTimePeriod return lastCompleteTimePeriod
} }
...@@ -166,13 +153,13 @@ export default class ConsumptionPeriodSelector { ...@@ -166,13 +153,13 @@ export default class ConsumptionPeriodSelector {
let comparisonTimePeriodEndDate: DateTime let comparisonTimePeriodEndDate: DateTime
switch (timeStep) { switch (timeStep) {
case TimeStep.HALF_AN_HOUR || TimeStep.HOUR: case TimeStep.HALF_AN_HOUR:
case TimeStep.HOUR:
comparisonTimePeriodStartDate = timePeriod.startDate.minus({ days: 1 }) comparisonTimePeriodStartDate = timePeriod.startDate.minus({ days: 1 })
comparisonTimePeriodEndDate = timePeriod.endDate.minus({ comparisonTimePeriodEndDate = timePeriod.endDate.minus({
days: 1, days: 1,
}) })
break break
case TimeStep.DAY: case TimeStep.DAY:
comparisonTimePeriodStartDate = timePeriod.startDate comparisonTimePeriodStartDate = timePeriod.startDate
.minus({ days: 1 }) .minus({ days: 1 })
...@@ -180,7 +167,6 @@ export default class ConsumptionPeriodSelector { ...@@ -180,7 +167,6 @@ export default class ConsumptionPeriodSelector {
.startOf('week') .startOf('week')
comparisonTimePeriodEndDate = timePeriod.startDate.minus({ days: 1 }) comparisonTimePeriodEndDate = timePeriod.startDate.minus({ days: 1 })
break break
case TimeStep.MONTH: case TimeStep.MONTH:
comparisonTimePeriodStartDate = DateTime.local( comparisonTimePeriodStartDate = DateTime.local(
timePeriod.startDate.year - 1, timePeriod.startDate.year - 1,
...@@ -193,7 +179,6 @@ export default class ConsumptionPeriodSelector { ...@@ -193,7 +179,6 @@ export default class ConsumptionPeriodSelector {
1 1
).endOf('month') ).endOf('month')
break break
case TimeStep.YEAR: case TimeStep.YEAR:
comparisonTimePeriodStartDate = DateTime.local( comparisonTimePeriodStartDate = DateTime.local(
timePeriod.startDate.year - 1, timePeriod.startDate.year - 1,
...@@ -206,7 +191,6 @@ export default class ConsumptionPeriodSelector { ...@@ -206,7 +191,6 @@ export default class ConsumptionPeriodSelector {
timePeriod.endDate.day timePeriod.endDate.day
).endOf('year') ).endOf('year')
break break
default: default:
comparisonTimePeriodStartDate = timePeriod.startDate comparisonTimePeriodStartDate = timePeriod.startDate
comparisonTimePeriodEndDate = timePeriod.endDate comparisonTimePeriodEndDate = timePeriod.endDate
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment