diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/alderspensjon/form/Form.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/alderspensjon/form/Form.tsx index 87f5d5b75c7..a0e130e77f1 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/alderspensjon/form/Form.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/alderspensjon/form/Form.tsx @@ -8,7 +8,7 @@ import { Alert } from '@navikt/ds-react' import styled from 'styled-components' import _has from 'lodash/has' import _get from 'lodash/get' -import { add, addMonths, getYear, isAfter, isDate, setDate } from 'date-fns' +import { add, addMonths, getYear, isAfter, isDate, parseISO, setDate } from 'date-fns' import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext' import { validation } from '@/components/fagsystem/alderspensjon/form/validation' import { Monthpicker } from '@/components/ui/form/inputs/monthpicker/Monthpicker' @@ -73,7 +73,7 @@ export const AlderspensjonForm = ({ formikBag }) => { if (foedsel) { const foedselsaar = foedsel[foedsel.length - 1]?.foedselsaar || - getYear(foedsel[foedsel.length - 1]?.foedselsdato) + getYear(parseISO(foedsel[foedsel.length - 1]?.foedselsdato)) if (foedselsaar < 1944) { ugyldigFoedselsaar = true } else if (foedselsaar >= 1944) { diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/alder/Alder.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/alder/Alder.tsx index 265033497ff..cd844c0e191 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/alder/Alder.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/alder/Alder.tsx @@ -2,14 +2,17 @@ import * as _ from 'lodash-es' import { FormikTextInput } from '@/components/ui/form/inputs/textInput/TextInput' import { FormikDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker' import { FormikProps } from 'formik' -import React from 'react' +import React, { useContext } from 'react' import _get from 'lodash/get' +import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext' interface AlderForm { formikBag: FormikProps<{}> } export const Alder = ({ formikBag }: AlderForm) => { + const opts = useContext(BestillingsveilederContext) + const paths = { alder: 'pdldata.opprettNyPerson.alder', foedtEtter: 'pdldata.opprettNyPerson.foedtEtter', @@ -34,6 +37,8 @@ export const Alder = ({ formikBag }: AlderForm) => { const onlyNumberKeyPressHandler = (event: React.KeyboardEvent) => !/\d/.test(event.key) && event.preventDefault() + const minDateAlder = opts?.identtype === 'NPID' ? new Date('01.01.1870') : new Date('01.01.1900') + return (
{ label="Født etter" disabled={disableFoedtDato} maxDate={new Date()} + minDate={minDateAlder} fastfield={false} /> { label="Født før" disabled={disableFoedtDato} maxDate={new Date()} + minDate={minDateAlder} fastfield={false} />
diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/foedsel/Foedsel.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/foedsel/Foedsel.tsx index 95dbaf18766..c05fd761659 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/foedsel/Foedsel.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/partials/foedsel/Foedsel.tsx @@ -10,7 +10,8 @@ import { FormikSelect } from '@/components/ui/form/inputs/select/Select' import { FormikProps } from 'formik' import { SelectedValue } from '@/components/fagsystem/pdlf/PdlTypes' import { DatepickerWrapper } from '@/components/ui/form/inputs/datepicker/DatepickerStyled' -import _get from 'lodash/get' +import { useContext } from 'react' +import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext' type FoedselTypes = { formikBag: FormikProps<{}> @@ -18,6 +19,8 @@ type FoedselTypes = { } export const FoedselForm = ({ formikBag, path }: FoedselTypes) => { + const opts = useContext(BestillingsveilederContext) + const handleLandChange = (selected: SelectedValue, foedselPath: string) => { formikBag.setFieldValue(`${foedselPath}.foedeland`, selected?.value || null) if (selected?.value !== 'NOR') { @@ -28,11 +31,14 @@ export const FoedselForm = ({ formikBag, path }: FoedselTypes) => { const foedselsaar = _.get(formikBag.values, `${path}.foedselsaar`) const foedselsdato = _.get(formikBag.values, `${path}.foedselsdato`) + const minDateFoedsel = + opts?.identtype === 'NPID' ? new Date('01.01.1870') : new Date('01.01.1900') + const harAlder = () => { return ( - _get(formikBag.values, 'pdldata.opprettNyPerson.alder') || - _get(formikBag.values, 'pdldata.opprettNyPerson.foedtEtter') || - _get(formikBag.values, 'pdldata.opprettNyPerson.foedtFoer') + _.get(formikBag.values, 'pdldata.opprettNyPerson.alder') || + _.get(formikBag.values, 'pdldata.opprettNyPerson.foedtEtter') || + _.get(formikBag.values, 'pdldata.opprettNyPerson.foedtFoer') ) } @@ -44,6 +50,7 @@ export const FoedselForm = ({ formikBag, path }: FoedselTypes) => { label="Fødselsdato" disabled={(foedselsaar !== null && foedselsdato === null) || harAlder()} maxDate={new Date()} + minDate={minDateFoedsel} fastfield={false} /> { formikBag.setFieldValue(`${path}.foedselsaar`, val ? new Date(val).getFullYear() : null) } maxDate={new Date()} + minDate={minDateFoedsel} // @ts-ignore disabled={(foedselsdato !== null && foedselsaar === null) || harAlder()} /> diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/validation/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/validation/validation.tsx index 2769934d484..e55a57d6ff8 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/validation/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/pdlf/form/validation/validation.tsx @@ -46,6 +46,25 @@ const testGyldigFom = (val) => { }) } +const testGyldigAlder = (val) => { + return val.test('is-valid', function alderErGyldig(alder: string) { + if (alder === null || alder === '') { + return true + } + if (parseInt(alder) < 0) { + return this.createError({ message: 'Alder må være minst 0 år' }) + } + const identtype = this?.options?.parent?.identtype + const minYear = identtype === 'NPID' ? 1870 : 1900 + if (new Date().getFullYear() - parseInt(alder) < minYear) { + return this.createError({ + message: `Alder må være mindre enn ${new Date().getFullYear() - (minYear - 1)} år`, + }) + } + return true + }) +} + export const doedsfall = Yup.object({ doedsdato: requiredDate.nullable(), }) @@ -70,7 +89,7 @@ export const navn = Yup.object().shape( hasMellomnavn: Yup.boolean().nullable(), gyldigFraOgMed: testGyldigFom(Yup.mixed().nullable()), }, - ['fornavn', 'etternavn'] + ['fornavn', 'etternavn'], ) export const folkeregisterpersonstatus = Yup.object({ @@ -82,43 +101,36 @@ export const folkeregisterpersonstatus = Yup.object({ export const validation = { pdldata: Yup.object({ opprettNyPerson: Yup.object({ - alder: Yup.mixed() - .test( - 'max', - `Alder må være mindre enn ${new Date().getFullYear() - 1899} år`, - (val) => !val || new Date().getFullYear() - parseInt(val) >= 1900 - ) - .test('min', 'Alder må være minst 0 år', (val) => !val || parseInt(val) >= 0) - .nullable(), + alder: testGyldigAlder(Yup.string().nullable()), foedtEtter: testDatoFom(Yup.date().nullable(), 'foedtFoer', 'Dato må være før født før-dato'), foedtFoer: testDatoTom( Yup.date().nullable(), 'foedtEtter', - 'Dato må være etter født etter-dato' + 'Dato må være etter født etter-dato', ), }).nullable(), person: Yup.object({ bostedsadresse: ifPresent('$pdldata.person.bostedsadresse', Yup.array().of(bostedsadresse)), oppholdsadresse: ifPresent( '$pdldata.person.oppholdsadresse', - Yup.array().of(oppholdsadresse) + Yup.array().of(oppholdsadresse), ), kontaktadresse: ifPresent('$pdldata.person.kontaktadresse', Yup.array().of(kontaktadresse)), adressebeskyttelse: ifPresent( '$pdldata.person.adressebeskyttelse', - Yup.array().of(adressebeskyttelse) + Yup.array().of(adressebeskyttelse), ), fullmakt: ifPresent('$pdldata.person.fullmakt', Yup.array().of(fullmakt)), sikkerhetstiltak: ifPresent('$pdldata.person.sikkerhetstiltak', sikkerhetstiltak), tilrettelagtKommunikasjon: ifPresent( '$pdldata.person.tilrettelagtKommunikasjon', - tilrettelagtKommunikasjon + tilrettelagtKommunikasjon, ), falskIdentitet: ifPresent('$pdldata.person.falskIdentitet', falskIdentitet), telefonnummer: ifPresent('$pdldata.person.telefonnummer', Yup.array().of(telefonnummer)), statsborgerskap: ifPresent( '$pdldata.person.statsborgerskap', - Yup.array().of(statsborgerskap) + Yup.array().of(statsborgerskap), ), doedsfall: ifPresent('$pdldata.person.doedsfall', Yup.array().of(doedsfall)), doedfoedtBarn: ifPresent('$pdldata.person.doedfoedtBarn', Yup.array().of(doedfoedtBarn)), @@ -126,15 +138,15 @@ export const validation = { utflytting: ifPresent('$pdldata.person.utflytting', Yup.array().of(utflytting)), utenlandskIdentifikasjonsnummer: ifPresent( '$pdldata.person.utenlandskIdentifikasjonsnummer', - Yup.array().of(utenlandskId) + Yup.array().of(utenlandskId), ), kontaktinformasjonForDoedsbo: ifPresent( '$pdldata.person.kontaktinformasjonForDoedsbo', - Yup.array().of(kontaktDoedsbo) + Yup.array().of(kontaktDoedsbo), ), forelderBarnRelasjon: ifPresent( '$pdldata.person.forelderBarnRelasjon', - Yup.array().of(forelderBarnRelasjon) + Yup.array().of(forelderBarnRelasjon), ), sivilstand: ifPresent('$pdldata.person.sivilstand', Yup.array().of(sivilstand)), kjoenn: ifPresent('$pdldata.person.kjoenn', Yup.array().of(kjoenn)), diff --git a/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/yearpicker/Yearpicker.tsx b/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/yearpicker/Yearpicker.tsx index dd5316e65ab..16d94c361e2 100644 --- a/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/yearpicker/Yearpicker.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/yearpicker/Yearpicker.tsx @@ -22,6 +22,7 @@ export const Yearpicker = ({ date, handleDateChange, maxDate = null, + minDate = null, disabled = false, }: YearpickerProps) => { const getFeilmelding = (formikProps: FormikProps, formikPath: string) => { @@ -41,6 +42,7 @@ export const Yearpicker = ({ showYearPicker customInput={} maxDate={maxDate} + minDate={minDate} disabled={disabled} />