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}
/>
>
);
}