import React from 'react'; import { AKTORTYPE_ANSVARSHAVENDE, AKTORTYPE_BYGGHERRE, AKTORTYPE_STEDSANSVARLIG, AKTORTYPE_UTFOERENDE_ENTREPRENOER, AKTORTYPE_UTFOERENDE_ENTREPRENOER_VARSLING, GyldighetsRegistrerer, KompetansebevisSomObjektUtlopsvisning, ledetekst, OppsummeringBlokk, OppsummeringPunkt, OppsummeringTabell, useOppsummering, VerdiEllerInfoMangler, } from '..'; import { validerKontaktinformasjon } from '../validering/KontaktinformasjonValidering'; import { TilbakemeldingForSteg } from './tilbakemelding/TilbakemeldingForSteg'; import { erLikeReactElementer } from './utils'; import { SlettetInformasjonsboks } from './SlettetInformasjonsboks'; const ANSVARLIG_VARSLING_EPOSTADRESSE_INTRODUSERT_VERSJON = 30; function UtforerOppsummering(props) { let { utforer, utforerVarsling, forrigeSoknad } = props; utforer = utforer || {}; utforerVarsling = utforerVarsling || {}; const { soknad } = useOppsummering(); const forsendelsesversjon = parseInt(soknad.forsendelsesversjon, 10); const overskrifter = [ ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.entrepenoerer.utfoerende' ), ' ', ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.entrepenoerer.arbeidsvarsling' ), skalHaEpostadresseAnsvarligVarsling(forsendelsesversjon) ? ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.entrepenoerer.arbeidsvarsling.epostadresse' ) : ' ', ]; const kolonner = hentUtforerInformasjon( utforer, utforerVarsling, forsendelsesversjon ); const data = [ { kolonner: kolonner, markerEndring: !!forrigeSoknad && erUtforerEndret( kolonner, forsendelsesversjon, forrigeSoknad?.vegarbeid?.kontakter ), }, ]; return ( ); } function hentUtforerInformasjon( utforer: any, utforerVarsling: any, forsendelsesversjon: number ): string[] { const utforerTekst = utforer.navn || utforer.organisasjonsnummer ? `${utforer.navn} (${utforer.organisasjonsnummer?.identifikator})` : ''; const utforerVarslingTekst = utforerVarsling.navn || utforerVarsling.organisasjonsnummer ? `${utforerVarsling.navn} (${utforerVarsling.organisasjonsnummer?.identifikator})` : ''; const utforerVarslingEpostadresse = skalHaEpostadresseAnsvarligVarsling( forsendelsesversjon ) ? getEpostadresseAnsvarligVarsling(utforerVarsling) : ' '; // Streng med mellomrom slik at vi ikke får "Mangler" i oppsummeringen return [ utforerTekst, ' ', utforerVarslingTekst, utforerVarslingEpostadresse, ]; } function erUtforerEndret( kolonner: string[], forsendelsesversjon: number, kontakter?: any[] ): boolean { const utforerForrigeSoknad = getEnAktorEtterType(kontakter, AKTORTYPE_UTFOERENDE_ENTREPRENOER) || {}; const utforerVarslingForrigeSoknad = getEnAktorEtterType( kontakter, AKTORTYPE_UTFOERENDE_ENTREPRENOER_VARSLING ) || {}; const kolonnerForrigeSoknad = hentUtforerInformasjon( utforerForrigeSoknad, utforerVarslingForrigeSoknad, forsendelsesversjon ); return !kolonnerForrigeSoknad.every( (value, indeks) => value === kolonner[indeks] ); } function erAnsvarligPersonEndret( kolonner: any[], lastNedVedleggUrl: (id: string) => string, lastNedVedlegg: (vedleggId: string, lastNedAutomatisk: boolean) => void, kontakter?: any[], aktortype?: any ): boolean { if (!kontakter) return true; const kontakterForrigeSoknad = getAlleAktorerEtterType( kontakter, aktortype ); return !kontakterForrigeSoknad?.some((person) => { person = person || {}; const kontaktinformasjon = person.kontaktinformasjon || {}; const kompetansebevis = person.kompetansebevis; const kolonnerForrigeSoknad = [ person.navn, kontaktinformasjon.mobiltelefonnummer, kontaktinformasjon.epostadresse, , ]; return kolonnerForrigeSoknad.every((value, indeks) => { if ( indeks === 3 && React.isValidElement(value) && React.isValidElement(kolonner[indeks]) ) { return erLikeReactElementer(value, kolonner[indeks]); } return value === kolonner[indeks]; }); }); } function BekreftelsePaKompetanseForStedsansvarlig(props) { const { kunLesbar, erKompetanseBekreftet } = props; // Viser alltid bekreftelsesmelding i lesemodus (for å støtte eldre søknader uten erKompetanseBekreftet feltet) const skalViseBekreftelsesTekst = erKompetanseBekreftet || kunLesbar; return ( {skalViseBekreftelsesTekst ? ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.stedsansvarlige.kompetansebevis.bekreftelse.tekst.lesemodus' ) : undefined} ); } function AnsvarligePersonerOppsummering(props) { const { personer, tittel, lastNedVedleggUrl, lastNedVedlegg, forrigeSoknad, aktortype, } = props; const overskrifter = [ ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.navn' ), ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.mobiltelefon' ), ...(aktortype !== AKTORTYPE_STEDSANSVARLIG ? [ ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.epost' ), ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.kompetansebevis' ), ] : []), ]; let data = personer.map((person) => { person = person || {}; const kontaktinformasjon = person.kontaktinformasjon || {}; const kompetansebevis = person.kompetansebevis; const kolonner = aktortype === AKTORTYPE_STEDSANSVARLIG ? [person.navn, kontaktinformasjon.mobiltelefonnummer] : [ person.navn, kontaktinformasjon.mobiltelefonnummer, kontaktinformasjon.epostadresse, , ]; return { kolonner: kolonner, markerEndring: !!forrigeSoknad && erAnsvarligPersonEndret( kolonner, lastNedVedleggUrl, lastNedVedlegg, forrigeSoknad.vegarbeid?.kontakter, aktortype ), }; }); if (data.length === 0) { data = [ { kolonner: aktortype === AKTORTYPE_STEDSANSVARLIG ? ['', ''] : ['', '', '', ''], markerEndring: false, }, ]; } const harSlettetRader = !!forrigeSoknad && getAlleAktorerEtterType(forrigeSoknad.vegarbeid?.kontakter, aktortype) ?.length > personer.length; return ( ); } function ByggherreOppsummering(props) { let { byggherre, forrigeSoknad } = props; byggherre = byggherre || {}; const erByggherrePrivatperson = byggherre.type !== 'Enhet'; const kontaktperson = erByggherrePrivatperson ? byggherre : byggherre.kontaktperson || {}; const kontaktinfo = kontaktperson.kontaktinformasjon || {}; const bedriftprivat = ledetekst.getTekst( 'arbeidsvarsling.soknad.Oppsummering.Kontaktinformasjon.byggherre.' + (erByggherrePrivatperson ? 'privat' : 'bedrift') ); const overskrifter = [ bedriftprivat, ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.byggherre.kontaktperson' ), ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.mobiltelefon' ), ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.aktor.epost' ), ]; const kolonner = [ erByggherrePrivatperson ? bedriftprivat : byggherre.navn || bedriftprivat, kontaktperson.navn, kontaktinfo.mobiltelefonnummer, kontaktinfo.epostadresse, ]; const data = [ { kolonner: kolonner, markerEndring: !!forrigeSoknad && erByggherreEndret(kolonner, forrigeSoknad.vegarbeid?.kontakter), }, ]; return ( ); } function erByggherreEndret(kolonner: any[], kontakter?: any[]): boolean { const byggherre = getEnAktorEtterType(kontakter, AKTORTYPE_BYGGHERRE) || {}; const erByggherrePrivatperson = byggherre.type !== 'Enhet'; const kontaktperson = erByggherrePrivatperson ? byggherre : byggherre.kontaktperson || {}; const kontaktinfo = kontaktperson.kontaktinformasjon || {}; const bedriftprivat = ledetekst.getTekst( 'arbeidsvarsling.soknad.Oppsummering.Kontaktinformasjon.byggherre.' + (erByggherrePrivatperson ? 'privat' : 'bedrift') ); const kolonnerForrigeSoknad = [ erByggherrePrivatperson ? bedriftprivat : byggherre.navn || bedriftprivat, kontaktperson.navn, kontaktinfo.mobiltelefonnummer, kontaktinfo.epostadresse, ]; return !kolonnerForrigeSoknad.every( (value, indeks) => value === kolonner[indeks] ); } function getEnAktorEtterType(kontakter, aktortype) { const aktorer = kontakter?.filter((aktor) => aktor.aktortype === aktortype); if (aktorer?.length > 0) { return aktorer[0]; } return undefined; } const getAlleAktorerEtterType = (kontakter, aktortype) => { return kontakter?.filter((aktor) => aktor.aktortype === aktortype) || null; }; export function skalHaEpostadresseAnsvarligVarsling( forsendelsesversjon: number ) { return ( ANSVARLIG_VARSLING_EPOSTADRESSE_INTRODUSERT_VERSJON <= forsendelsesversjon ); } export function getEpostadresseAnsvarligVarsling(aktor) { return ( aktor && aktor.kontaktperson && aktor.kontaktperson.kontaktinformasjon && aktor.kontaktperson.kontaktinformasjon.epostadresse ); } export function KontaktinformasjonOppsummering() { const { kunLesbar, id: soknadId, soknad, forrigeSoknad, vegarbeid, gyldighet, lastNedVedleggUrl, lastNedVedlegg, } = useOppsummering(); const kontaktinformasjon = vegarbeid.kontakter || []; const redigeringsLenke = !kunLesbar && `#/${soknadId}/kontaktinformasjon`; const valideringsfeil = !kunLesbar && validerKontaktinformasjon(soknad); return ( <> person.aktortype === AKTORTYPE_ANSVARSHAVENDE )} tittel={ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.ansvarshavende.overskrift' )} lastNedVedleggUrl={lastNedVedleggUrl} lastNedVedlegg={lastNedVedlegg} forrigeSoknad={forrigeSoknad} aktortype={AKTORTYPE_ANSVARSHAVENDE} /> person.aktortype === AKTORTYPE_STEDSANSVARLIG )} tittel={ledetekst.getTekst( 'arbeidsvarsling.soknad.Kontaktinformasjon.stedsansvarlig.overskrift' )} lastNedVedleggUrl={lastNedVedleggUrl} lastNedVedlegg={lastNedVedlegg} forrigeSoknad={forrigeSoknad} aktortype={AKTORTYPE_STEDSANSVARLIG} /> ); }