diff --git a/src/services/consumptionFormatter.service.spec.ts b/src/services/consumptionFormatter.service.spec.ts index 2c5a80f5def0cf78327e1cb2144ead7b86fb9d44..2a27a7681dbc113401dd445e7a8bfb16bc103d22 100644 --- a/src/services/consumptionFormatter.service.spec.ts +++ b/src/services/consumptionFormatter.service.spec.ts @@ -288,6 +288,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( mockData, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -303,11 +304,12 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( mockData, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) }) - it('sould return EMPTY state because data.date < firstFluidDataDate', () => { + it('sould return EMPTY state because data.date < firstFluidDataDate for day timestep', () => { fluidStatus[FluidType.ELECTRICITY].firstDataDate = DateTime.fromISO( '2020-10-20T00:00:00.000Z', { @@ -321,6 +323,83 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( mockData, FluidType.ELECTRICITY, + TimeStep.DAY, + fluidStatus[FluidType.ELECTRICITY] + ) + expect(result).toEqual(expectedResult) + }) + it('sould return EMPTY state because data.date < start of month of firstFluidDataDate for month timestep', () => { + fluidStatus[FluidType.ELECTRICITY].firstDataDate = DateTime.fromISO( + '2020-11-01T00:00:00.000Z', + { + zone: 'utc', + } + ) + const expectedResult: Dataload = { + ...mockData, + state: DataloadState.EMPTY, + } + const result: Dataload = consumptionFormatterService.defineDataloadState( + mockData, + FluidType.ELECTRICITY, + TimeStep.MONTH, + fluidStatus[FluidType.ELECTRICITY] + ) + expect(result).toEqual(expectedResult) + }) + it('sould return EMPTY state because data.date < start of year firstFluidDataDate for year timestep', () => { + fluidStatus[FluidType.ELECTRICITY].firstDataDate = DateTime.fromISO( + '2021-10-20T00:00:00.000Z', + { + zone: 'utc', + } + ) + const expectedResult: Dataload = { + ...mockData, + state: DataloadState.EMPTY, + } + const result: Dataload = consumptionFormatterService.defineDataloadState( + mockData, + FluidType.ELECTRICITY, + TimeStep.YEAR, + fluidStatus[FluidType.ELECTRICITY] + ) + expect(result).toEqual(expectedResult) + }) + it('sould return VALID state because data.date < firstFluidDataDate for month timestep', () => { + fluidStatus[FluidType.ELECTRICITY].firstDataDate = DateTime.fromISO( + '2020-10-20T00:00:00.000Z', + { + zone: 'utc', + } + ) + const expectedResult: Dataload = { + ...mockData, + state: DataloadState.VALID, + } + const result: Dataload = consumptionFormatterService.defineDataloadState( + mockData, + FluidType.ELECTRICITY, + TimeStep.MONTH, + fluidStatus[FluidType.ELECTRICITY] + ) + expect(result).toEqual(expectedResult) + }) + it('sould return VALID state because data.date < firstFluidDataDate for year timestep', () => { + fluidStatus[FluidType.ELECTRICITY].firstDataDate = DateTime.fromISO( + '2020-12-20T00:00:00.000Z', + { + zone: 'utc', + } + ) + const expectedResult: Dataload = { + ...mockData, + state: DataloadState.VALID, + } + const result: Dataload = consumptionFormatterService.defineDataloadState( + mockData, + FluidType.ELECTRICITY, + TimeStep.YEAR, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -345,6 +424,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( mockEmptyData, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -369,6 +449,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( mockData, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -428,6 +509,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -444,6 +526,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.GAS, + TimeStep.DAY, fluidStatus[FluidType.GAS] ) expect(result).toEqual(expectedResult) @@ -460,6 +543,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.WATER, + TimeStep.DAY, fluidStatus[FluidType.WATER] ) expect(result).toEqual(expectedResult) @@ -520,6 +604,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.ELECTRICITY, + TimeStep.DAY, fluidStatus[FluidType.ELECTRICITY] ) expect(result).toEqual(expectedResult) @@ -536,6 +621,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.GAS, + TimeStep.DAY, fluidStatus[FluidType.GAS] ) expect(result).toEqual(expectedResult) @@ -552,6 +638,7 @@ describe('ConsumptionFormatter service', () => { const result: Dataload = consumptionFormatterService.defineDataloadState( data, FluidType.WATER, + TimeStep.DAY, fluidStatus[FluidType.WATER] ) expect(result).toEqual(expectedResult) diff --git a/src/services/consumptionFormatter.service.ts b/src/services/consumptionFormatter.service.ts index ce3f9e43800e843cca0eb197de8c45a219a5a3d0..1ca49c7e29637e2c516d7a80aad990348fb6a63d 100644 --- a/src/services/consumptionFormatter.service.ts +++ b/src/services/consumptionFormatter.service.ts @@ -38,6 +38,7 @@ export default class ConsumptionFormatterService { valueDetail: null, }, fluidType, + timeStep, fluidStatus ) filledData.push({ ...newElement }) @@ -50,6 +51,7 @@ export default class ConsumptionFormatterService { public defineDataloadState( data: Dataload, fluidType: FluidType, + timeStep: TimeStep, fluidStatus?: FluidStatus ): Dataload { const today = DateTime.local().setZone('utc', { @@ -63,7 +65,26 @@ export default class ConsumptionFormatterService { return data } // Define state in function of first and last fluid data date - if (fluidStatus.firstDataDate && data.date < fluidStatus.firstDataDate) { + if ( + fluidStatus.firstDataDate && + timeStep !== TimeStep.MONTH && + timeStep !== TimeStep.YEAR && + data.date < fluidStatus.firstDataDate + ) { + return { ...data, state: DataloadState.EMPTY } + } + if ( + fluidStatus.firstDataDate && + timeStep === TimeStep.MONTH && + data.date < fluidStatus.firstDataDate.startOf('month') + ) { + return { ...data, state: DataloadState.EMPTY } + } + if ( + fluidStatus.firstDataDate && + timeStep === TimeStep.YEAR && + data.date < fluidStatus.firstDataDate.startOf('year') + ) { return { ...data, state: DataloadState.EMPTY } } if (fluidStatus.lastDataDate && data.date > fluidStatus.lastDataDate) { diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts index dad1cf33881518487332439aef9b5eba76da18ce..1fae7902ebd897dd3a8f10ddc5d88faa75e9c8b2 100644 --- a/src/services/queryRunner.service.ts +++ b/src/services/queryRunner.service.ts @@ -429,7 +429,9 @@ export default class QueryRunner { return DateTime.local( result.data[0].year, result.data[0].month, - result.data[0].day + result.data[0].day, + result.data[0].hour ? result.data[0].hour : 0, + result.data[0].minute ? result.data[0].minute : 0 ).setZone('utc', { keepLocalTime: true, }) @@ -451,7 +453,9 @@ export default class QueryRunner { return DateTime.local( result.data[0].year, result.data[0].month, - result.data[0].day + result.data[0].day, + result.data[0].hour ? result.data[0].hour : 0, + result.data[0].minute ? result.data[0].minute : 0 ).setZone('utc', { keepLocalTime: true, })