From b0596cefffb4ee32bb5934f0c5d42a80a60cd023 Mon Sep 17 00:00:00 2001 From: frodehansen2 Date: Fri, 1 Jul 2022 09:36:27 +0200 Subject: [PATCH] =?UTF-8?q?Varsel=20ved=20ingen=20frav=C3=A6r=20(#1141)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 1 + .../integration-utils/steps/arbeidIPeriode.js | 2 +- "src/app/hooks/useLogS\303\270knadInfo.ts" | 23 +- .../s\303\270knad/S\303\270knadContent.tsx" | 339 ++++++++++-------- .../utils/__tests__/arbeidstidUtils.tests.ts" | 62 ++++ .../arbeidstid-step/utils/arbeidstidUtils.ts" | 86 +++++ .../ingenFrav\303\246rConfirmation.tsx" | 22 ++ .../oppsummering-step/OppsummeringStep.tsx" | 17 +- src/app/types/ConfirmationDialog.ts | 8 + 9 files changed, 406 insertions(+), 154 deletions(-) create mode 100644 "src/app/s\303\270knad/arbeidstid-step/utils/__tests__/arbeidstidUtils.tests.ts" create mode 100644 "src/app/s\303\270knad/confirmation-dialogs/ingenFrav\303\246rConfirmation.tsx" create mode 100644 src/app/types/ConfirmationDialog.ts diff --git a/.eslintrc.js b/.eslintrc.js index 62c4c6fd5..a8e17596d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,6 +22,7 @@ module.exports = { 'react-hooks/exhaustive-deps': 'warn', 'react/display-name': 'off', 'react/prop-types': 'off', + 'no-fallthrough': 'error', }, plugins: ['jsx-a11y', 'react-hooks'], settings: { diff --git a/e2e/cypress/integration-utils/steps/arbeidIPeriode.js b/e2e/cypress/integration-utils/steps/arbeidIPeriode.js index e0f6c68d4..514b07ded 100644 --- a/e2e/cypress/integration-utils/steps/arbeidIPeriode.js +++ b/e2e/cypress/integration-utils/steps/arbeidIPeriode.js @@ -3,7 +3,7 @@ const { selectRadio, selectRadioYes, setInputTime } = require('../utils'); export const fyllUtArbeidIPeriode = () => { selectRadio('jobberRedusert'); selectRadioYes('er-likt-hver-uke'); - setInputTime('arbeidstid-faste-ukedager__monday', '2', '0'); + setInputTime('arbeidstid-faste-ukedager__monday', '1', '0'); setInputTime('arbeidstid-faste-ukedager__tuesday', '2', '0'); setInputTime('arbeidstid-faste-ukedager__wednesday', '2', '0'); setInputTime('arbeidstid-faste-ukedager__friday', '0', '0'); diff --git "a/src/app/hooks/useLogS\303\270knadInfo.ts" "b/src/app/hooks/useLogS\303\270knadInfo.ts" index 7bdf41acc..3a3d768ea 100644 --- "a/src/app/hooks/useLogS\303\270knadInfo.ts" +++ "b/src/app/hooks/useLogS\303\270knadInfo.ts" @@ -1,6 +1,9 @@ export enum LogSøknadInfoType { 'arbeidPeriodeRegistrert' = 'arbeidPeriodeRegistrert', 'arbeidEnkeltdagRegistrert' = 'arbeidEnkeltdagRegistrert', + 'bekrefterIngenFraværFraArbeid' = 'bekrefterIngenFraværFraArbeid', + 'avkrefterIngenFraværFraArbeid' = 'avkrefterIngenFraværFraArbeid', + 'senderInnSøknadMedIngenFravær' = 'senderInnSøknadMedIngenFravær', } import { useAmplitudeInstance } from '@navikt/sif-common-amplitude/lib'; @@ -22,7 +25,25 @@ function useLogSøknadInfo() { }); }; - return { logArbeidPeriodeRegistrert, logArbeidEnkeltdagRegistrert }; + const logBekreftIngenFraværFraJobb = (bekrefterIngenFravær: boolean) => { + logInfo({ + hendelse: bekrefterIngenFravær + ? LogSøknadInfoType.bekrefterIngenFraværFraArbeid + : LogSøknadInfoType.avkrefterIngenFraværFraArbeid, + }); + }; + const logSenderInnSøknadMedIngenFravær = () => { + logInfo({ + hendelse: LogSøknadInfoType.senderInnSøknadMedIngenFravær, + }); + }; + + return { + logArbeidPeriodeRegistrert, + logArbeidEnkeltdagRegistrert, + logBekreftIngenFraværFraJobb, + logSenderInnSøknadMedIngenFravær, + }; } export default useLogSøknadInfo; diff --git "a/src/app/s\303\270knad/S\303\270knadContent.tsx" "b/src/app/s\303\270knad/S\303\270knadContent.tsx" index 2378c5136..60edac067 100644 --- "a/src/app/s\303\270knad/S\303\270knadContent.tsx" +++ "b/src/app/s\303\270knad/S\303\270knadContent.tsx" @@ -1,26 +1,31 @@ -import React, { useCallback, useEffect } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { Redirect, Route, Switch, useHistory, useLocation } from 'react-router-dom'; import { ApiError, ApplikasjonHendelse, useAmplitudeInstance } from '@navikt/sif-common-amplitude'; +import BekreftDialog from '@navikt/sif-common-core/lib/components/dialogs/bekreft-dialog/BekreftDialog'; import apiUtils from '@navikt/sif-common-core/lib/utils/apiUtils'; import { dateToday } from '@navikt/sif-common-core/lib/utils/dateUtils'; import { useFormikContext } from 'formik'; import { persist, purge } from '../api/api'; import { SKJEMANAVN } from '../App'; import RouteConfig from '../config/routeConfig'; +import useLogSøknadInfo from '../hooks/useLogSøknadInfo'; import ConfirmationPage from '../pages/confirmation-page/ConfirmationPage'; import GeneralErrorPage from '../pages/general-error-page/GeneralErrorPage'; import WelcomingPage from '../pages/welcoming-page/WelcomingPage'; +import { ConfirmationDialog } from '../types/ConfirmationDialog'; import { KvitteringInfo } from '../types/KvitteringInfo'; import { Søkerdata } from '../types/Søkerdata'; import { SøknadApiData } from '../types/søknad-api-data/SøknadApiData'; import { SøknadFormData } from '../types/SøknadFormData'; -import { getSøknadsdataFromFormValues } from '../utils/formValuesToSøknadsdata/getSøknadsdataFromFormValues'; import { getSøknadsperiodeFromFormData } from '../utils/formDataUtils'; +import { getSøknadsdataFromFormValues } from '../utils/formValuesToSøknadsdata/getSøknadsdataFromFormValues'; import { getKvitteringInfoFromApiData } from '../utils/kvitteringUtils'; import { navigateTo, navigateToErrorPage, relocateToLoginPage } from '../utils/navigationUtils'; import { getNextStepRoute, getSøknadRoute, isAvailable } from '../utils/routeUtils'; import ArbeidssituasjonStep from './arbeidssituasjon-step/ArbeidssituasjonStep'; import ArbeidstidStep from './arbeidstid-step/ArbeidstidStep'; +import { getArbeidsforhold, harFraværIPerioden } from './arbeidstid-step/utils/arbeidstidUtils'; +import { getIngenFraværConfirmationDialog } from './confirmation-dialogs/ingenFraværConfirmation'; import LegeerklæringStep from './legeerklæring-step/LegeerklæringStep'; import MedlemsskapStep from './medlemskap-step/MedlemsskapStep'; import NattevåkOgBeredskapStep from './nattevåk-og-beredskap-step/NattevåkOgBeredskapStep'; @@ -40,10 +45,12 @@ const SøknadContent = ({ lastStepID, harMellomlagring }: PleiepengesøknadConte const location = useLocation(); const [søknadHasBeenSent, setSøknadHasBeenSent] = React.useState(false); const [kvitteringInfo, setKvitteringInfo] = React.useState(undefined); + const [confirmationDialog, setConfirmationDialog] = useState(undefined); const { values, resetForm } = useFormikContext(); const history = useHistory(); const { logHendelse, logUserLoggedOut, logSoknadStartet, logApiError } = useAmplitudeInstance(); const { setSøknadsdata } = useSøknadsdataContext(); + const { logBekreftIngenFraværFraJobb } = useLogSøknadInfo(); const sendUserToStep = useCallback( async (route: string) => { @@ -112,177 +119,211 @@ const SøknadContent = ({ lastStepID, harMellomlagring }: PleiepengesøknadConte const søknadsdato = dateToday; return ( - - } - /> - - {isAvailable(StepID.OPPLYSNINGER_OM_BARNET, values) && ( - ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.OPPLYSNINGER_OM_BARNET); - }); - }} - /> - )} - /> + <> + {confirmationDialog && ( + + {confirmationDialog.content} + )} - - {isAvailable(StepID.TIDSROM, values) && ( + ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.TIDSROM); - }); - }} - /> - )} + path={RouteConfig.WELCOMING_PAGE_ROUTE} + render={() => } /> - )} - {isAvailable(StepID.ARBEIDSSITUASJON, values) && søknadsperiode && ( - ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.ARBEIDSSITUASJON); - }); - }} - søknadsdato={søknadsdato} - søknadsperiode={søknadsperiode} - /> - )} - /> - )} + {isAvailable(StepID.OPPLYSNINGER_OM_BARNET, values) && ( + ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.OPPLYSNINGER_OM_BARNET); + }); + }} + /> + )} + /> + )} - {isAvailable(StepID.ARBEIDSTID, values) && søknadsperiode && ( - ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.ARBEIDSTID); - }); - }} - /> - )} - /> - )} + {isAvailable(StepID.TIDSROM, values) && ( + ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.TIDSROM); + }); + }} + /> + )} + /> + )} - {isAvailable(StepID.OMSORGSTILBUD, values) && søknadsperiode && ( - { - return ( - ( + { setTimeout(() => { setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.OMSORGSTILBUD); + navigateToNextStepFrom(StepID.ARBEIDSSITUASJON); }); }} + søknadsdato={søknadsdato} søknadsperiode={søknadsperiode} /> - ); - }} - /> - )} + )} + /> + )} - {isAvailable(StepID.NATTEVÅK_OG_BEREDSKAP, values) && søknadsperiode && ( - { - return ( - ( + { setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.NATTEVÅK_OG_BEREDSKAP); + const søknadsdata = getSøknadsdataFromFormValues(values); + setSøknadsdata(søknadsdata); + if ( + søknadsdata.arbeid && + harFraværIPerioden(getArbeidsforhold(søknadsdata.arbeid)) === false + ) { + setConfirmationDialog( + getIngenFraværConfirmationDialog({ + onCancel: () => { + logBekreftIngenFraværFraJobb(false); + setConfirmationDialog(undefined); + }, + onConfirm: () => { + logBekreftIngenFraværFraJobb(true); + setConfirmationDialog(undefined); + navigateToNextStepFrom(StepID.ARBEIDSTID); + }, + }) + ); + } else { + navigateToNextStepFrom(StepID.ARBEIDSTID); + } }); }} /> - ); - }} - /> - )} + )} + /> + )} - {isAvailable(StepID.MEDLEMSKAP, values) && ( - ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.MEDLEMSKAP); - }); - }} - søknadsdato={søknadsdato} - /> - )} - /> - )} + {isAvailable(StepID.OMSORGSTILBUD, values) && søknadsperiode && ( + { + return ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.OMSORGSTILBUD); + }); + }} + søknadsperiode={søknadsperiode} + /> + ); + }} + /> + )} - {isAvailable(StepID.LEGEERKLÆRING, values) && ( - ( - { - setTimeout(() => { - setSøknadsdata(getSøknadsdataFromFormValues(values)); - navigateToNextStepFrom(StepID.LEGEERKLÆRING); - }); - }} - /> - )} - /> - )} + {isAvailable(StepID.NATTEVÅK_OG_BEREDSKAP, values) && søknadsperiode && ( + { + return ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.NATTEVÅK_OG_BEREDSKAP); + }); + }} + /> + ); + }} + /> + )} - {isAvailable(StepID.SUMMARY, values) && søknadsperiode && ( - ( - { - setKvitteringInfo(getKvitteringInfoFromApiData(apiData, søkerdata)); - setSøknadHasBeenSent(true); - resetForm(); - navigateTo(RouteConfig.SØKNAD_SENDT_ROUTE, history); - }} - /> - )} - /> - )} + {isAvailable(StepID.MEDLEMSKAP, values) && ( + ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.MEDLEMSKAP); + }); + }} + søknadsdato={søknadsdato} + /> + )} + /> + )} - {isAvailable(RouteConfig.SØKNAD_SENDT_ROUTE, values, søknadHasBeenSent) && ( - } - /> - )} + {isAvailable(StepID.LEGEERKLÆRING, values) && ( + ( + { + setTimeout(() => { + setSøknadsdata(getSøknadsdataFromFormValues(values)); + navigateToNextStepFrom(StepID.LEGEERKLÆRING); + }); + }} + /> + )} + /> + )} + + {isAvailable(StepID.SUMMARY, values) && søknadsperiode && ( + ( + { + setKvitteringInfo(getKvitteringInfoFromApiData(apiData, søkerdata)); + setSøknadHasBeenSent(true); + resetForm(); + navigateTo(RouteConfig.SØKNAD_SENDT_ROUTE, history); + }} + /> + )} + /> + )} + + {isAvailable(RouteConfig.SØKNAD_SENDT_ROUTE, values, søknadHasBeenSent) && ( + } + /> + )} - - - + + + + ); }; diff --git "a/src/app/s\303\270knad/arbeidstid-step/utils/__tests__/arbeidstidUtils.tests.ts" "b/src/app/s\303\270knad/arbeidstid-step/utils/__tests__/arbeidstidUtils.tests.ts" new file mode 100644 index 000000000..33516c6a6 --- /dev/null +++ "b/src/app/s\303\270knad/arbeidstid-step/utils/__tests__/arbeidstidUtils.tests.ts" @@ -0,0 +1,62 @@ +import { ArbeidIPeriodeSøknadsdata, ArbeidIPeriodeType } from '../../../../types/søknadsdata/arbeidIPeriodeSøknadsdata'; +import { + NormalarbeidstidSøknadsdata, + NormalarbeidstidType, +} from '../../../../types/søknadsdata/normalarbeidstidSøknadsdata'; +import { erArbeidsforholdMedFravær } from '../arbeidstidUtils'; + +const normalarbeidstid: NormalarbeidstidSøknadsdata = { + type: NormalarbeidstidType.likeUkerOgDager, + erFasteUkedager: true, + erLiktHverUke: true, + timerFasteUkedager: { + friday: { hours: '1', minutes: '0' }, + }, +}; + +const arbeiderIkke: ArbeidIPeriodeSøknadsdata = { + type: ArbeidIPeriodeType.arbeiderIkke, + arbeiderIPerioden: false, +}; + +const arbeiderVanlig: ArbeidIPeriodeSøknadsdata = { + type: ArbeidIPeriodeType.arbeiderVanlig, + arbeiderIPerioden: true, + arbeiderRedusert: false, +}; + +const arbeiderRedusertEnkeltdager: ArbeidIPeriodeSøknadsdata = { + type: ArbeidIPeriodeType.arbeiderEnkeltdager, + arbeiderIPerioden: true, + arbeiderRedusert: true, + enkeltdager: { '123123': { hours: '1', minutes: '0' } }, +}; + +describe('arbeidstidUtils', () => { + describe('erArbeidsforholdMedFravær', () => { + it('returner true når en ikke arbeiderer i perioden', () => { + expect( + erArbeidsforholdMedFravær({ + normalarbeidstid, + arbeidISøknadsperiode: arbeiderIkke, + }) + ).toBeTruthy(); + }); + it('returner true når en arbeider redusert i perioden', () => { + expect( + erArbeidsforholdMedFravær({ + normalarbeidstid, + arbeidISøknadsperiode: arbeiderRedusertEnkeltdager, + }) + ).toBeTruthy(); + }); + it('returner false når en arbeider som vanlig', () => { + expect( + erArbeidsforholdMedFravær({ + normalarbeidstid, + arbeidISøknadsperiode: arbeiderVanlig, + }) + ).toBeFalsy(); + }); + }); +}); diff --git "a/src/app/s\303\270knad/arbeidstid-step/utils/arbeidstidUtils.ts" "b/src/app/s\303\270knad/arbeidstid-step/utils/arbeidstidUtils.ts" index 6849a7c09..f46015157 100644 --- "a/src/app/s\303\270knad/arbeidstid-step/utils/arbeidstidUtils.ts" +++ "b/src/app/s\303\270knad/arbeidstid-step/utils/arbeidstidUtils.ts" @@ -6,8 +6,16 @@ import { getWeekdayFromDate, getWeekdaysWithDuration, ISODateToDate, + summarizeDurationInDurationWeekdays, Weekday, } from '@navikt/sif-common-utils/lib'; +import { ArbeidIPeriodeType } from '../../../types/søknadsdata/arbeidIPeriodeSøknadsdata'; +import { ArbeidsforholdSøknadsdata } from '../../../types/søknadsdata/arbeidsforholdSøknadsdata'; +import { ArbeidSøknadsdata } from '../../../types/søknadsdata/arbeidSøknadsdata'; +import { + NormalarbeidstidSøknadsdata, + NormalarbeidstidType, +} from '../../../types/søknadsdata/normalarbeidstidSøknadsdata'; export const getDurationWeekdaysNotInDurationWeekdays = ( weekdays1: DurationWeekdays, @@ -41,3 +49,81 @@ export const arbeiderAndreEnkeltdagerEnnNormalt = ( }); return harDagerPåAndreDager; }; + +const getTimerPerUkeFraFasteUkedager = (timerFasteUkedager: DurationWeekdays): number => { + return durationToDecimalDuration(summarizeDurationInDurationWeekdays(timerFasteUkedager)); +}; + +export const arbeiderMindreEnnNormaltISnittPerUke = ( + timerISnitt: number, + normalarbeidstid: NormalarbeidstidSøknadsdata +): boolean => { + switch (normalarbeidstid.type) { + case NormalarbeidstidType.ulikeUker: + case NormalarbeidstidType.likeUkerVarierendeDager: + case NormalarbeidstidType.arbeiderHelg: + case NormalarbeidstidType.arbeiderDeltid: + return timerISnitt < normalarbeidstid.timerPerUkeISnitt; + case NormalarbeidstidType.likeUkerOgDager: + return timerISnitt < getTimerPerUkeFraFasteUkedager(normalarbeidstid.timerFasteUkedager); + } +}; + +export const arbeiderMindreEnnNormaltFasteUkedager = ( + timerFasteUkedager: DurationWeekdays, + normalarbeidstidFasteUkedager: DurationWeekdays +): boolean => { + return ( + getTimerPerUkeFraFasteUkedager(timerFasteUkedager) < + getTimerPerUkeFraFasteUkedager(normalarbeidstidFasteUkedager) + ); +}; + +export const erArbeidsforholdMedFravær = ({ + arbeidISøknadsperiode, + normalarbeidstid, +}: ArbeidsforholdSøknadsdata): boolean => { + if (!arbeidISøknadsperiode) { + return false; + } + switch (arbeidISøknadsperiode.type) { + case ArbeidIPeriodeType.arbeiderIkke: + return true; + case ArbeidIPeriodeType.arbeiderVanlig: + return false; + case ArbeidIPeriodeType.arbeiderProsentAvNormalt: + return arbeidISøknadsperiode.prosentAvNormalt < 100; + case ArbeidIPeriodeType.arbeiderEnkeltdager: + /** Ingen sjekk implementert */ + return true; + case ArbeidIPeriodeType.arbeiderFasteUkedager: + if (normalarbeidstid.erFasteUkedager) { + return arbeiderMindreEnnNormaltFasteUkedager( + arbeidISøknadsperiode.fasteDager, + normalarbeidstid.timerFasteUkedager + ); + } + /** Skal ikke skje pga validering i søknadsdialogen*/ + return false; + case ArbeidIPeriodeType.arbeiderTimerISnittPerUke: + return arbeiderMindreEnnNormaltISnittPerUke(arbeidISøknadsperiode.timerISnittPerUke, normalarbeidstid); + } +}; + +export const harFraværIPerioden = (arbeidsforhold: ArbeidsforholdSøknadsdata[]): boolean => { + return arbeidsforhold.some(erArbeidsforholdMedFravær); +}; + +export const getArbeidsforhold = (arbeid: ArbeidSøknadsdata): ArbeidsforholdSøknadsdata[] => { + const arbeidsgivere: ArbeidsforholdSøknadsdata[] = []; + arbeid.arbeidsgivere?.forEach((a) => { + if (a.erAnsattISøknadsperiode) { + arbeidsgivere.push(a.arbeidsforhold); + } + }); + const frilans: ArbeidsforholdSøknadsdata[] = arbeid.frilans?.erFrilanser ? [arbeid.frilans.arbeidsforhold] : []; + const selvstendig: ArbeidsforholdSøknadsdata[] = arbeid.selvstendig?.erSN + ? [arbeid.selvstendig.arbeidsforhold] + : []; + return [...arbeidsgivere, ...frilans, ...selvstendig]; +}; diff --git "a/src/app/s\303\270knad/confirmation-dialogs/ingenFrav\303\246rConfirmation.tsx" "b/src/app/s\303\270knad/confirmation-dialogs/ingenFrav\303\246rConfirmation.tsx" new file mode 100644 index 000000000..6d49316a7 --- /dev/null +++ "b/src/app/s\303\270knad/confirmation-dialogs/ingenFrav\303\246rConfirmation.tsx" @@ -0,0 +1,22 @@ +import React from 'react'; +import { Undertittel } from 'nav-frontend-typografi'; +import { ConfirmationDialog } from '../../types/ConfirmationDialog'; + +type Props = Pick; + +export const getIngenFraværConfirmationDialog = (props: Props): ConfirmationDialog => ({ + ...props, + title: 'Ingen fravær registrert', + okLabel: 'Ja, det stemmer', + cancelLabel: 'Nei, det stemmer ikke', + content: ( +
+ Fravær fra jobb +

+ Du har oppgitt at du jobber som normalt og ikke har fravær i perioden du søker for. For å ha rett til + pleiepenger må du ha fravær fra jobb fordi du tar vare på og pleier barn. Stemmer det at du ikke har + fravær fra jobb i perioden du søker for? +

+
+ ), +}); diff --git "a/src/app/s\303\270knad/oppsummering-step/OppsummeringStep.tsx" "b/src/app/s\303\270knad/oppsummering-step/OppsummeringStep.tsx" index 610414ad5..cd66f2881 100644 --- "a/src/app/s\303\270knad/oppsummering-step/OppsummeringStep.tsx" +++ "b/src/app/s\303\270knad/oppsummering-step/OppsummeringStep.tsx" @@ -23,13 +23,15 @@ import { SKJEMANAVN } from '../../App'; import LegeerklæringAttachmentList from '../../components/legeerklæring-file-list/LegeerklæringFileList'; import routeConfig from '../../config/routeConfig'; import { SøkerdataContextConsumer } from '../../context/SøkerdataContext'; +import useLogSøknadInfo from '../../hooks/useLogSøknadInfo'; import { Søkerdata } from '../../types/Søkerdata'; import { SøknadApiData } from '../../types/søknad-api-data/SøknadApiData'; import { SøknadFormData, SøknadFormField } from '../../types/SøknadFormData'; import appSentryLogger from '../../utils/appSentryLogger'; -import { getApiDataFromSøknadsdata } from '../../utils/søknadsdataToApiData/getApiDataFromSøknadsdata'; import { navigateTo, relocateToLoginPage } from '../../utils/navigationUtils'; +import { getApiDataFromSøknadsdata } from '../../utils/søknadsdataToApiData/getApiDataFromSøknadsdata'; import { validateApiValues } from '../../validation/apiValuesValidation'; +import { getArbeidsforhold, harFraværIPerioden } from '../arbeidstid-step/utils/arbeidstidUtils'; import SøknadFormComponents from '../SøknadFormComponents'; import SøknadFormStep from '../SøknadFormStep'; import { useSøknadsdataContext } from '../SøknadsdataContext'; @@ -63,12 +65,16 @@ const OppsummeringStep = ({ onApplicationSent, values, søknadsdato }: Props) => const søknadStepConfig = getSøknadStepConfig(values); const { logSoknadSent, logSoknadFailed, logUserLoggedOut } = useAmplitudeInstance(); + const { logSenderInnSøknadMedIngenFravær } = useLogSøknadInfo(); - const sendSoknad = async (apiValues: SøknadApiData, søkerdata: Søkerdata) => { + const sendSoknad = async (apiValues: SøknadApiData, søkerdata: Søkerdata, harArbeidMenIngenFravær: boolean) => { setSendingInProgress(true); try { await sendApplication(apiValues); await logSoknadSent(SKJEMANAVN); + if (harArbeidMenIngenFravær) { + await logSenderInnSøknadMedIngenFravær(); + } await purge(); setSoknadSent(true); onApplicationSent(apiValues, søkerdata); @@ -98,6 +104,11 @@ const OppsummeringStep = ({ onApplicationSent, values, søknadsdato }: Props) => if (søknadsdata === undefined) { return
Det oppstod en feil - søknadsdata mangler
; } + + const harArbeidMenIngenFravær: boolean = + søknadsdata.arbeid !== undefined && + harFraværIPerioden(getArbeidsforhold(søknadsdata.arbeid)) === false; + const { søker: { fornavn, mellomnavn, etternavn, fødselsnummer }, barn, @@ -130,7 +141,7 @@ const OppsummeringStep = ({ onApplicationSent, values, søknadsdato }: Props) => if (apiValuesValidationErrors === undefined) { setTimeout(() => { // La view oppdatere seg først - sendSoknad(apiValues, søkerdata); + sendSoknad(apiValues, søkerdata, harArbeidMenIngenFravær); }); } else { document.getElementsByClassName('validationErrorSummary'); diff --git a/src/app/types/ConfirmationDialog.ts b/src/app/types/ConfirmationDialog.ts new file mode 100644 index 000000000..7649f9c2c --- /dev/null +++ b/src/app/types/ConfirmationDialog.ts @@ -0,0 +1,8 @@ +export interface ConfirmationDialog { + onConfirm: () => void; + onCancel: () => void; + title: string; + content: React.ReactNode; + okLabel: string; + cancelLabel: string; +}