From 28198b5a363fefa4e6802246bf58a0d5c8016481 Mon Sep 17 00:00:00 2001 From: Betsy Carina Traran Date: Fri, 9 Feb 2024 10:18:38 +0100 Subject: [PATCH 1/4] Validering personnr forste utkast --- .../aareg/form/partials/arbeidsgiverIdent.tsx | 78 +++++++++++-------- .../fagsystem/aareg/form/validation.tsx | 37 ++++----- 2 files changed, 63 insertions(+), 52 deletions(-) diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx index b5f3700760c..7efe8634fe3 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import { useBoolean } from 'react-use' import * as _ from 'lodash-es' import Icon from '@/components/ui/icon/Icon' @@ -6,6 +6,7 @@ import Loading from '@/components/ui/loading/Loading' import { DollyTextInput } from '@/components/ui/form/inputs/textInput/TextInput' import { PdlforvalterApi } from '@/service/Api' import { useFormikContext } from 'formik' +import { useNaviger } from '@/utils/hooks/useNaviger' type ArbeidsgiverIdentProps = { path: string @@ -15,48 +16,61 @@ type ArbeidsgiverIdentProps = { export const ArbeidsgiverIdent = ({ path, isDisabled }: ArbeidsgiverIdentProps) => { const formikBag = useFormikContext() const [error, setError] = useState(null) + // const [success, setSuccess] = useBoolean(false) const [personnummer, setPersonnummer] = useState(_.get(formikBag.values, path)) - const [success, setSuccess] = useBoolean(false) - const [loading, setLoading] = useBoolean(false) + const [success, setSuccess] = useBoolean(personnummer && !error) + const { result, loading: loadingNaviger, error: errorNaviger, mutate } = useNaviger(personnummer) + + useEffect(() => { + if (personnummer) { + if (result?.identNavigerTil) { + setSuccess(true) + setError(null) + } else { + setError('Fant ikke arbeidsgiver-ident') + } + } + }, [result, errorNaviger]) + + useEffect(() => { + if (error) { + formikBag.setFieldError(path, error) + } else { + formikBag.setFieldError(path, undefined) + } + }, [error, formikBag.errors, personnummer]) const handleChange = (event: React.ChangeEvent) => { - event.preventDefault() + // event.preventDefault() setError(null) setSuccess(false) const personnr = event.target.value + formikBag.setFieldValue(`${path}`, personnr) - // TODO: move to frontend validation if (personnr.match(/^\d{11}$/) != null) { - handleManualPersonnrChange(personnr) + setPersonnummer(personnr) + // formikBag.setFieldValue(`${path}`, personnr) + // setValgtIdent(personnr) } else { setError('Ident må være et tall med 11 siffer') - formikBag.setFieldValue(`${path}`, '') + // formikBag.setFieldValue(path, '') } } - const handleManualPersonnrChange = (personnr: string) => { - setLoading(true) - - PdlforvalterApi.getPersoner([personnr]) - .then((response: any) => { - if (!response?.data || response?.data?.length < 1) { - setError('Fant ikke arbeidsgiver-ident') - setLoading(false) - formikBag.setFieldValue(`${path}`, '') - return - } - - setError(null) - setSuccess(true) - setLoading(false) - setPersonnummer(personnr) - - formikBag.setFieldValue(`${path}`, personnr) - }) - .catch(() => setError('Fant ikke arbeidsgiver-ident')) + const getFeilmelding = () => { + if (error) { + return { + feilmelding: error, + } + } else if (!_.get(formikBag.values, path)) { + return { feilmelding: 'Feltet er påkrevd' } + } + return null } + const feilmelding = getFeilmelding() + return (
{success && (
@@ -78,7 +88,7 @@ export const ArbeidsgiverIdent = ({ path, isDisabled }: ArbeidsgiverIdentProps) funnet
)} - {loading && } + {loadingNaviger && }
) } diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx index 50f1133986e..5d19104b01c 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx @@ -45,7 +45,7 @@ const innenforAnsettelsesforholdTest = (periodeValidation, validateFomMonth) => start: new Date(ansattFom), end: _.isNil(ansattTom) ? new Date() : new Date(ansattTom), }) - } + }, ) } @@ -63,7 +63,7 @@ const fullArbeidsforholdTest = (arbeidsforholdValidation) => { gyldig = false } return gyldig - } + }, ) } @@ -85,7 +85,8 @@ const arbeidsgiver = Yup.object({ ident: Yup.string().when('aktoertype', { is: 'PERS', then: () => - Yup.string() + // Yup.string() + requiredString .matches(/^\d*$/, 'Ident må være et tall med 11 sifre') .test('len', 'Ident må være et tall med 11 sifre', (val) => val && val.length === 11), }), @@ -102,7 +103,7 @@ const arbeidsavtale = Yup.object({ Yup.number() .min(1, 'Kan ikke være mindre enn ${min}') .max(75, 'Kan ikke være større enn ${max}') - .typeError(messages.required) + .typeError(messages.required), ).nullable(), }) @@ -112,7 +113,7 @@ const fartoy = Yup.array() skipsregister: requiredString, skipstype: requiredString, fartsomraade: requiredString, - }) + }), ) .nullable() @@ -152,7 +153,7 @@ export const validation = { antallTimer: Yup.number() .min(1, 'Kan ikke være mindre enn ${min}') .typeError(messages.required), - }) + }), ), utenlandsopphold: Yup.array().of( Yup.object({ @@ -161,7 +162,7 @@ export const validation = { tom: innenforAnsettelsesforholdTest(requiredDate, true), }), land: requiredString, - }) + }), ), permisjon: Yup.array().of( Yup.object({ @@ -174,7 +175,7 @@ export const validation = { .max(100, 'Kan ikke være større enn ${max}') .typeError(messages.required), permisjon: requiredString, - }) + }), ), permittering: Yup.array().of( Yup.object({ @@ -186,7 +187,7 @@ export const validation = { .min(1, 'Kan ikke være mindre enn ${min}') .max(100, 'Kan ikke være større enn ${max}') .typeError(messages.required), - }) + }), ), amelding: ifPresent( '$aareg[0].amelding', @@ -208,7 +209,7 @@ export const validation = { antallTimer: Yup.number() .min(1, 'Kan ikke være mindre enn ${min}') .typeError(messages.required), - }) + }), ), utenlandsopphold: Yup.array().of( Yup.object({ @@ -217,7 +218,7 @@ export const validation = { tom: requiredDate, }), land: requiredString, - }) + }), ), permisjon: Yup.array().of( Yup.object({ @@ -230,7 +231,7 @@ export const validation = { .max(100, 'Kan ikke være større enn ${max}') .typeError(messages.required), permisjon: requiredString, - }) + }), ), permittering: Yup.array().of( Yup.object({ @@ -242,20 +243,20 @@ export const validation = { .min(1, 'Kan ikke være mindre enn ${min}') .max(100, 'Kan ikke være større enn ${max}') .typeError(messages.required), - }) + }), ), - }) + }), ), - }) - ) + }), + ), ), genererPeriode: ifPresent( '$aareg[0].amelding[0]', Yup.object({ fom: testDatoFom(requiredPeriode, 'tom'), tom: testDatoTom(requiredPeriode, 'fom'), - }) + }), ), - }) + }), ), } From 569ac4b1e16a322787218f8c1d254420c1cc84f1 Mon Sep 17 00:00:00 2001 From: Betsy Carina Traran Date: Fri, 9 Feb 2024 10:29:08 +0100 Subject: [PATCH 2/4] Fix visning av inntektsmelding --- .../kriterier/BestillingKriterieMapper.tsx | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx index 7cce057cf3a..764181e391b 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx @@ -1228,23 +1228,23 @@ const mapInntektStub = (bestillingData, data) => { obj('Opplysningspliktig (orgnr/id)', inntektsinfo.opplysningspliktig), obj( 'Antall registrerte inntekter', - inntektsinfo.inntektsliste && inntektsinfo.inntektsliste.length, + inntektsinfo.inntektsliste && inntektsinfo.inntektsliste?.length, ), obj( 'Antall registrerte fradrag', - inntektsinfo.fradragsliste && inntektsinfo.fradragsliste.length, + inntektsinfo.fradragsliste && inntektsinfo.fradragsliste?.length, ), obj( 'Antall registrerte forskuddstrekk', - inntektsinfo.forskuddstrekksliste && inntektsinfo.forskuddstrekksliste.length, + inntektsinfo.forskuddstrekksliste && inntektsinfo.forskuddstrekksliste?.length, ), obj( 'Antall registrerte arbeidsforhold', - inntektsinfo.arbeidsforholdsliste && inntektsinfo.arbeidsforholdsliste.length, + inntektsinfo.arbeidsforholdsliste && inntektsinfo.arbeidsforholdsliste?.length, ), obj( 'Antall registrerte inntektsendringer (historikk)', - inntektsinfo.historikk && inntektsinfo.historikk.length, + inntektsinfo.historikk && inntektsinfo.historikk?.length, ), ]) }) @@ -1467,7 +1467,7 @@ const mapSykemelding = (bestillingData, data) => { obj( 'Antall registrerte bidiagnoser', sykemeldingKriterier.detaljertSykemelding.biDiagnoser && - sykemeldingKriterier.detaljertSykemelding.biDiagnoser.length, + sykemeldingKriterier.detaljertSykemelding.biDiagnoser?.length, ), obj( 'Helsepersonell navn', @@ -1497,7 +1497,7 @@ const mapSykemelding = (bestillingData, data) => { ), obj( 'Antall registrerte perioder', - sykemeldingKriterier.detaljertSykemelding.perioder.length, + sykemeldingKriterier.detaljertSykemelding.perioder?.length, ), obj( 'Tiltak fra NAV', @@ -1540,7 +1540,7 @@ const mapBrregstub = (bestillingData, data) => { obj('Registreringsdato', formatDate(enhet.registreringsdato)), obj('Organisasjonsnummer', enhet.orgNr), obj('Foretaksnavn', enhet.foretaksNavn.navn1), - obj('Antall registrerte personroller', enhet.personroller && enhet.personroller.length), + obj('Antall registrerte personroller', enhet.personroller && enhet.personroller?.length), ]) }) @@ -1825,7 +1825,7 @@ const mapUdiStub = (bestillingData, data) => { obj('Arbeidsadgang til dato', formatDate(_.get(arbeidsadgangKriterier, 'periode.til'))), obj('Hjemmel', _.get(arbeidsadgangKriterier, 'hjemmel')), obj('Forklaring', _.get(arbeidsadgangKriterier, 'forklaring')), - obj('Alias', aliaserListe.length > 0 && aliaserListe), + obj('Alias', aliaserListe?.length > 0 && aliaserListe), obj('Flyktningstatus', oversettBoolean(udiStubKriterier.flyktning)), obj( 'Asylsøker', @@ -1858,9 +1858,9 @@ const mapPensjon = (bestillingData, data, navEnheter) => { data.push(pensjonforvalterPopp) } - if (pensjonKriterier.tp && pensjonKriterier.tp.length > 0) { + if (pensjonKriterier.tp && pensjonKriterier.tp?.length > 0) { const hentTpOrdningNavn = (tpnr) => { - if (Options('tpOrdninger').length) { + if (Options('tpOrdninger')?.length) { return Options('tpOrdninger').find((ordning) => ordning.value === tpnr)?.label } return tpnr @@ -1983,7 +1983,7 @@ const mapInntektsmelding = (bestillingData, data) => { obj('Første fraværsdag', formatDate(inntekt.arbeidsforhold.foersteFravaersdag)), obj( 'Avtalte ferier', - inntekt.arbeidsforhold.avtaltFerieListe && inntekt.arbeidsforhold.avtaltFerieListe.length, + inntekt.arbeidsforhold.avtaltFerieListe && inntekt.arbeidsforhold.avtaltFerieListe?.length, ), //Refusjon obj('Refusjonsbeløp per måned', inntekt.refusjon.refusjonsbeloepPrMnd), @@ -1991,19 +1991,19 @@ const mapInntektsmelding = (bestillingData, data) => { obj( 'Endringer i refusjon', _.has(inntekt, 'refusjon.endringIRefusjonListe') && - inntekt.refusjon.endringIRefusjonListe.length, + inntekt.refusjon.endringIRefusjonListe?.length, ), //Omsorg obj('Har utbetalt pliktige dager', _.get(inntekt, 'omsorgspenger.harUtbetaltPliktigeDager')), obj( 'Fraværsperioder', _.has(inntekt, 'omsorgspenger.fravaersPerioder') && - inntekt.omsorgspenger.fravaersPerioder.length, + inntekt.omsorgspenger.fravaersPerioder?.length, ), obj( 'Delvis fravær', _.has(inntekt, 'omsorgspenger.delvisFravaersListe') && - inntekt.omsorgspenger.delvisFravaersListe.length, + inntekt.omsorgspenger.delvisFravaersListe?.length, ), //Sykepenger obj('Brutto utbetalt', _.get(inntekt, 'sykepengerIArbeidsgiverperioden.bruttoUtbetalt')), @@ -2019,20 +2019,24 @@ const mapInntektsmelding = (bestillingData, data) => { obj( 'Arbeidsgiverperioder', _.has(inntekt, 'sykepengerIArbeidsgiverperioden.arbeidsgiverperiodeListe') && - inntekt.sykepengerIArbeidsgiverperioden.arbeidsgiverperiodeListe.length, + inntekt.sykepengerIArbeidsgiverperioden.arbeidsgiverperiodeListe?.length, ), //Foreldrepenger obj('Startdato foreldrepenger', formatDate(inntekt.startdatoForeldrepengeperiode)), //Pleiepenger - obj('Pleiepengerperioder', inntekt.pleiepengerPerioder && inntekt.pleiepengerPerioder.length), + obj( + 'Pleiepengerperioder', + inntekt.pleiepengerPerioder && inntekt.pleiepengerPerioder?.length, + ), //Naturalytelse obj( 'Gjenopptagelse Naturalytelse', - inntekt.gjenopptakelseNaturalytelseListe && inntekt.gjenopptakelseNaturalytelseListe.length, + inntekt.gjenopptakelseNaturalytelseListe && + inntekt.gjenopptakelseNaturalytelseListe?.length, ), obj( 'Opphør av Naturalytelse', - inntekt.opphoerAvNaturalytelseListe && inntekt.opphoerAvNaturalytelseListe.length, + inntekt.opphoerAvNaturalytelseListe && inntekt.opphoerAvNaturalytelseListe?.length, ), ]), }) @@ -2067,7 +2071,7 @@ const mapDokarkiv = (bestillingData, data) => { obj('Sakstype', showLabel('sakstype', dokarkivKriterier.sak?.sakstype)), obj('Fagsaksystem', showLabel('fagsaksystem', dokarkivKriterier.sak?.fagsaksystem)), obj('Fagsak-ID', dokarkivKriterier.sak?.fagsakId), - obj('Antall vedlegg', dokarkivKriterier.dokumenter.length), + obj('Antall vedlegg', dokarkivKriterier.dokumenter?.length), ], } From 0edd605d5fc4898d2a1da4b729fc248d937cff66 Mon Sep 17 00:00:00 2001 From: Betsy Carina Traran Date: Fri, 9 Feb 2024 12:00:50 +0100 Subject: [PATCH 3/4] Siste fix validering --- .../aareg/form/partials/arbeidsgiverIdent.tsx | 14 +++----------- .../src/main/js/src/utils/hooks/useNaviger.tsx | 4 +++- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx index 7efe8634fe3..3d444eb62ed 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsgiverIdent.tsx @@ -4,7 +4,6 @@ import * as _ from 'lodash-es' import Icon from '@/components/ui/icon/Icon' import Loading from '@/components/ui/loading/Loading' import { DollyTextInput } from '@/components/ui/form/inputs/textInput/TextInput' -import { PdlforvalterApi } from '@/service/Api' import { useFormikContext } from 'formik' import { useNaviger } from '@/utils/hooks/useNaviger' @@ -16,10 +15,9 @@ type ArbeidsgiverIdentProps = { export const ArbeidsgiverIdent = ({ path, isDisabled }: ArbeidsgiverIdentProps) => { const formikBag = useFormikContext() const [error, setError] = useState(null) - // const [success, setSuccess] = useBoolean(false) + const [success, setSuccess] = useBoolean(false) const [personnummer, setPersonnummer] = useState(_.get(formikBag.values, path)) - const [success, setSuccess] = useBoolean(personnummer && !error) - const { result, loading: loadingNaviger, error: errorNaviger, mutate } = useNaviger(personnummer) + const { result, loading: loadingNaviger, error: errorNaviger } = useNaviger(personnummer) useEffect(() => { if (personnummer) { @@ -41,20 +39,14 @@ export const ArbeidsgiverIdent = ({ path, isDisabled }: ArbeidsgiverIdentProps) }, [error, formikBag.errors, personnummer]) const handleChange = (event: React.ChangeEvent) => { - // event.preventDefault() setError(null) setSuccess(false) - const personnr = event.target.value formikBag.setFieldValue(`${path}`, personnr) - if (personnr.match(/^\d{11}$/) != null) { setPersonnummer(personnr) - // formikBag.setFieldValue(`${path}`, personnr) - // setValgtIdent(personnr) } else { setError('Ident må være et tall med 11 siffer') - // formikBag.setFieldValue(path, '') } } @@ -88,7 +80,7 @@ export const ArbeidsgiverIdent = ({ path, isDisabled }: ArbeidsgiverIdentProps) funnet )} - {loadingNaviger && } + {loadingNaviger && } ) } diff --git a/apps/dolly-frontend/src/main/js/src/utils/hooks/useNaviger.tsx b/apps/dolly-frontend/src/main/js/src/utils/hooks/useNaviger.tsx index e1b104d39da..9a46da355cc 100644 --- a/apps/dolly-frontend/src/main/js/src/utils/hooks/useNaviger.tsx +++ b/apps/dolly-frontend/src/main/js/src/utils/hooks/useNaviger.tsx @@ -4,7 +4,9 @@ import { fetcher } from '@/api' const getNavigerUrl = (ident) => `/dolly-backend/api/v1/ident/naviger/${ident}` export const useNaviger = (ident) => { - const { data, isLoading, error, mutate } = useSWR(ident ? getNavigerUrl(ident) : null, fetcher) + const { data, isLoading, error, mutate } = useSWR(ident ? getNavigerUrl(ident) : null, fetcher, { + shouldRetryOnError: false, + }) return { result: data, From 04c4f4e400a644e1da403c8cff0527f22b55ef44 Mon Sep 17 00:00:00 2001 From: Betsy Carina Traran Date: Fri, 9 Feb 2024 13:20:32 +0100 Subject: [PATCH 4/4] Fix --- .../main/js/src/components/fagsystem/aareg/form/validation.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx index 5d19104b01c..512a4a32724 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/validation.tsx @@ -85,7 +85,6 @@ const arbeidsgiver = Yup.object({ ident: Yup.string().when('aktoertype', { is: 'PERS', then: () => - // Yup.string() requiredString .matches(/^\d*$/, 'Ident må være et tall med 11 sifre') .test('len', 'Ident må være et tall med 11 sifre', (val) => val && val.length === 11),