import { erTrafikantgrupperGyldig, ledetekst, minstEtTiltakErHuketAv, PLANTYPE_GENERELL, sjekkGyldighetForTiltaksalternativer, tiltakHarAlternativerSomIkkeErValgt, } from '..'; import { Soknad } from '../domene/Soknad'; import { validerArbeidstype } from '../oppsummering/arbeidsbeskrivelse/Arbeidstypeoppsummering'; export function validerArbeidsbeskrivelse(soknad: Soknad) { const forsendelsesversjon = soknad?.forsendelsesversjon ?? 0; const vegarbeidsbeskrivelse = soknad?.vegarbeid?.vegarbeidsbeskrivelse; const plantype = soknad?.vegarbeid?.plantype; const arbeidsbeskrivelseErIkkeFerdigUtfylt = ledetekst.getTekst( 'arbeidsvarsling.soknad.Oppsummering.ufullstendig.Vegarbeidsbeskrivelse' ); if (!plantype) { return ledetekst.getTekst( 'arbeidsvarsling.soknad.Oppsummering.ufullstendig.plantype' ); } const trafikantgrupperData = vegarbeidsbeskrivelse?.trafikantgrupper; const trafikantgrupper = plantype === PLANTYPE_GENERELL ? trafikantgrupperData?.generellPlan : trafikantgrupperData?.spesiellPlan; const beredskapsplanErGyldig = plantype !== PLANTYPE_GENERELL || vegarbeidsbeskrivelse?.beredskapsplan !== undefined; const arbeidIBevegelseErGyldig = plantype !== PLANTYPE_GENERELL || vegarbeidsbeskrivelse?.arbeidIBevegelse !== undefined; const trafikantgrupperErGyldig = erTrafikantgrupperGyldig(trafikantgrupper); if (!trafikantgrupperErGyldig) { return arbeidsbeskrivelseErIkkeFerdigUtfylt; } const tiltak = plantype === PLANTYPE_GENERELL ? vegarbeidsbeskrivelse?.generelleTiltak : vegarbeidsbeskrivelse?.spesielleTiltak; const arbeidstypeErGyldig = validerArbeidstype(soknad); const tiltakErGyldig = validerTiltak( tiltak, parseInt(forsendelsesversjon, 10) ); if ( !arbeidstypeErGyldig || !tiltakErGyldig || !beredskapsplanErGyldig || !arbeidIBevegelseErGyldig ) { return arbeidsbeskrivelseErIkkeFerdigUtfylt; } return ''; } function validerTiltak(tiltak, forsendelsesversjon: number) { const minstEtTiltakErValgt = minstEtTiltakErHuketAv(tiltak); const alternativerErGyldige = sjekkGyldighetForTiltaksalternativer( tiltak, forsendelsesversjon ); const tiltakErValgtMenUtenAlternativer = tiltakHarAlternativerSomIkkeErValgt( tiltak ); if (minstEtTiltakErValgt && !alternativerErGyldige) { return false; } if (!minstEtTiltakErValgt) { return false; } if (tiltakErValgtMenUtenAlternativer) { return false; } return true; }