From 6c363ecc12e38c112545d72d9e434a18a81715f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikko=20Haapam=C3=A4ki?= Date: Wed, 10 Aug 2022 16:30:00 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20BE:=20Hyv=C3=A4ksymisp=C3=A4=C3=A4t?= =?UTF-8?q?=C3=B6ksen=20kuulutusaikalaskuri=20(#313)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../endDateCalculatorHandler.ts | 21 +++++++++++++------ .../endDateCalculator.test.ts | 6 ++++++ graphql/types.graphql | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/backend/src/endDateCalculator/endDateCalculatorHandler.ts b/backend/src/endDateCalculator/endDateCalculatorHandler.ts index 3d8ff6dee..78ed0d2e6 100644 --- a/backend/src/endDateCalculator/endDateCalculatorHandler.ts +++ b/backend/src/endDateCalculator/endDateCalculatorHandler.ts @@ -1,14 +1,23 @@ -import { LaskePaattymisPaivaQueryVariables } from "../../../common/graphql/apiModel"; +import { LaskePaattymisPaivaQueryVariables, LaskuriTyyppi } from "../../../common/graphql/apiModel"; import { dateTimeToString, dateToString, ISO_DATE_FORMAT, parseDate } from "../util/dateUtil"; import { Dayjs } from "dayjs"; import { bankHolidaysClient } from "./bankHolidaysClient"; import { config } from "../config"; export async function calculateEndDate({ - alkupaiva, - tyyppi: _tyyppi, -}: LaskePaattymisPaivaQueryVariables): Promise { - // Calculator currectly has only two types (KUULUTUKSEN_PAATTYMISPAIVA, NAHTAVILLAOLON_KUULUTUKSEN_PAATTYMISPAIVA) and they are calculated with equal formula + alkupaiva, + tyyppi, + }: LaskePaattymisPaivaQueryVariables): Promise { + switch (tyyppi) { + case LaskuriTyyppi.KUULUTUKSEN_PAATTYMISPAIVA: + case LaskuriTyyppi.NAHTAVILLAOLON_KUULUTUKSEN_PAATTYMISPAIVA: + return calculateOnePlusGivenDaysSkipHolidays(alkupaiva, 30); + case LaskuriTyyppi.HYVAKSYMISPAATOKSEN_KUULUTUSAIKA: + return calculateOnePlusGivenDaysSkipHolidays(alkupaiva, 7 + 30); // julkaisupäivä + 7 päivän tiedoksisaantiaika + 30 päivän muutoksenhakuaika + } +} + +async function calculateOnePlusGivenDaysSkipHolidays(alkupaiva: string, days: number) { let start: Dayjs; // Only accept dates in prod, but allow datetimes in other environments const isDateOnly = config.isProd() || alkupaiva.length == ISO_DATE_FORMAT.length; @@ -23,7 +32,7 @@ export async function calculateEndDate({ throw new Error("Alkupäivän pitää olla muotoa YYYY-MM-DDTHH:mm"); } } - let endDate: Dayjs = start.add(30, "day"); + let endDate: Dayjs = start.add(days, "day"); const bankHolidays = await bankHolidaysClient.getBankHolidays(); while (bankHolidays.isBankHoliday(endDate)) { endDate = endDate.add(1, "day"); diff --git a/backend/test/endDateCalculator/endDateCalculator.test.ts b/backend/test/endDateCalculator/endDateCalculator.test.ts index e790478c5..64ec321e4 100644 --- a/backend/test/endDateCalculator/endDateCalculator.test.ts +++ b/backend/test/endDateCalculator/endDateCalculator.test.ts @@ -55,6 +55,12 @@ describe("Api", () => { ).to.be.equal("2022-12-05"); }); + it("should calculate correct Hyväksymispäätöksen kuulutusaika end date over weekend", async () => { + expect( + await calculateEndDate({ alkupaiva: "2022-11-03", tyyppi: LaskuriTyyppi.HYVAKSYMISPAATOKSEN_KUULUTUSAIKA }) + ).to.be.equal("2022-12-12"); + }); + it("should manage list of bank holidays correctly", () => { const bankHolidays = new BankHolidays(["2022-12-24", "2022-12-25"]); expect(bankHolidays.isBankHoliday(parseDate("2022-12-24"))).to.be.true; diff --git a/graphql/types.graphql b/graphql/types.graphql index b6a6aad51..6c5bc304b 100644 --- a/graphql/types.graphql +++ b/graphql/types.graphql @@ -583,6 +583,7 @@ type LatausTiedot { enum LaskuriTyyppi { KUULUTUKSEN_PAATTYMISPAIVA NAHTAVILLAOLON_KUULUTUKSEN_PAATTYMISPAIVA + HYVAKSYMISPAATOKSEN_KUULUTUSAIKA } enum Kieli {