Skip to content

Commit

Permalink
Add support for Pensjonsavtale data
Browse files Browse the repository at this point in the history
Enhanced the application to handle Pensjonsavtale data by adding new components and necessary validation logic. Updated existing components and services to integrate the new functionality seamlessly.
  • Loading branch information
krharum committed Aug 8, 2024
1 parent f111286 commit 663bfd2
Show file tree
Hide file tree
Showing 14 changed files with 523 additions and 113 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { FormDollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray'
import * as React from 'react'
import { Vis } from '@/components/bestillingsveileder/VisAttributt'
import { EraseFillButtons } from '@/components/fagsystem/arbeidsplassen/form/partials/EraseFillButtons'
import {
initialNyPensjonsavtale,
initialNyPensjonsavtaleVerdier,
} from '@/components/fagsystem/pensjonsavtale/initalValues'
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'

export const PensjonsavtalerForm = ({ formMethods }) => {
const avtalePath = 'pensjonforvalter.pensjonsavtale'

return (
<Vis attributt={avtalePath}>
<FormDollyFieldArray
name={avtalePath}
header="Pensjonsavtale"
newEntry={initialNyPensjonsavtaleVerdier}
buttonText="Utbetalingsperiode"
nested
>
{(avtalePath) => (
<>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.startAlderAar`}
label="Startalder År"
type="number"
/>
</div>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.startAlderMaaneder`}
label="Startalder Måneder"
type="number"
/>
</div>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.sluttAlderAar`}
label="Sluttalder År"
type="number"
/>
</div>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.sluttAlderMaaneder`}
label="Sluttalder Måneder"
type="number"
/>
</div>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.aarligUtbetaling`}
label="Årlig utbetaling"
type="number"
/>
</div>
<div className="flexbox--flex-wrap">
<FormTextInput name={`${avtalePath}.grad`} label="Grad" type="number" />
</div>
<EraseFillButtons
formMethods={formMethods}
path={avtalePath}
initialFill={initialNyPensjonsavtaleVerdier}
initialErase={initialNyPensjonsavtale}
/>
</>
)}
</FormDollyFieldArray>
</Vis>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import SubOverskrift from '@/components/ui/subOverskrift/SubOverskrift'
import { TitleValue } from '@/components/ui/titleValue/TitleValue'
import React from 'react'
import { formatDate } from '@/utils/DataFormatter'
import Loading from '@/components/ui/loading/Loading'
import { useBestilteMiljoer } from '@/utils/hooks/useBestilling'
import { ErrorBoundary } from '@/components/ui/appError/ErrorBoundary'
import { Alert } from '@navikt/ds-react'
import { MiljoTabs } from '@/components/ui/miljoTabs/MiljoTabs'
import { useNavEnheter } from '@/utils/hooks/useNorg2'
import { usePensjonVedtak } from '@/utils/hooks/usePensjon'

export const sjekkManglerPensjonsavtaleData = (pensjonsavtaleData) => {
return pensjonsavtaleData?.length < 1 || pensjonsavtaleData?.every((miljoData) => !miljoData.data)
}

const DataVisning = ({ data, miljo }) => {
const { navEnheter } = useNavEnheter()
const navEnhetLabel = navEnheter?.find(
(enhet) => enhet.value === data?.navEnhetId?.toString(),
)?.label

const { vedtakData } = usePensjonVedtak(data?.fnr, miljo)

return (
<>
<div className="person-visning_content">
<TitleValue title="Vedtaksstatus" value={vedtakData?.[0]?.vedtakStatus} />
<TitleValue title="Krav fremsatt dato" value={formatDate(data?.kravFremsattDato)} />
<TitleValue title="Iverksettelsesdato" value={formatDate(data?.iverksettelsesdato)} />
<TitleValue title="Saksbehandler" value={data?.saksbehandler} />
<TitleValue title="Attesterer" value={data?.attesterer} />
<TitleValue title="Uttaksgrad" value={`${data?.uttaksgrad}%`} />
<TitleValue title="NAV-kontor" value={navEnhetLabel || data?.navEnhetId} />

<TitleValue
title="Ektefelle/partners inntekt"
value={data?.relasjonListe?.[0]?.sumAvForventetArbeidKapitalPensjonInntekt}
/>
</div>
</>
)
}

export const PensjonsavtaleVisning = ({ data, loading, bestillingIdListe, tilgjengeligMiljoe }) => {
const { bestilteMiljoer } = useBestilteMiljoer(bestillingIdListe, 'PEN_PENSJONSAVTALE')

if (loading) {
return <Loading label="Laster pensjonsavtale-data" />
}

if (!data) {
return null
}

const manglerFagsystemdata = sjekkManglerPensjonsavtaleData(data)

const miljoerMedData = data?.map((miljoData) => miljoData.data && miljoData.miljo)
const errorMiljoer = bestilteMiljoer?.filter((miljo) => !miljoerMedData?.includes(miljo))

const forsteMiljo = data.find((miljoData) => miljoData?.data)?.miljo

const filteredData =
tilgjengeligMiljoe && data.filter((item) => tilgjengeligMiljoe.includes(item.miljo))

return (
<ErrorBoundary>
<SubOverskrift label="Pensjonsavtale" iconKind="pensjon" isWarning={manglerFagsystemdata} />
{manglerFagsystemdata ? (
<Alert variant={'warning'} size={'small'} inline style={{ marginBottom: '20px' }}>
Fant ikke pensjonsavtale-data på person
</Alert>
) : (
<MiljoTabs
bestilteMiljoer={bestilteMiljoer}
errorMiljoer={errorMiljoer}
forsteMiljo={forsteMiljo}
data={filteredData ? filteredData : data}
>
<DataVisning />
</MiljoTabs>
)}
</ErrorBoundary>
)
}
5 changes: 5 additions & 0 deletions apps/dolly-frontend/src/main/js/playwright/globalSetup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
organisasjonFraMiljoeMock,
paginerteGrupperMock,
pensjonMock,
pensjonPensjonsavtaleMock,
pensjonTpMock,
personFragmentNavigerMock,
personFragmentSearchMock,
Expand Down Expand Up @@ -82,6 +83,9 @@ const skjerming = new RegExp(/dolly-backend\/api\/v1\/skjerming/)
const pensjon = new RegExp(/testnav-pensjon-testdata-facade-proxy\/api\/v1\/inntekt/)
const pensjonMiljoer = new RegExp(/testnav-pensjon-testdata-facade-proxy\/api\/v1\/miljo/)
const pensjonTp = new RegExp(/testnav-pensjon-testdata-facade-proxy\/api\/v1\/tp(.*?)q1/)
const pensjonPensjonsavtale = new RegExp(
/testnav-pensjon-testdata-facade-proxy\/api\/v1\/pensjonsavtale\/hent/,
)
const krrstub = new RegExp(/testnav-krrstub-proxy\/api\/v2/)
const udistub = new RegExp(/testnav-udistub-proxy\/api\/v1/)
const brregstub = new RegExp(/testnav-brregstub/)
Expand Down Expand Up @@ -142,6 +146,7 @@ const mockRoutes: RouteInfo[] = [
{ url: inst, response: instMock },
{ url: pensjon, response: pensjonMock },
{ url: pensjonTp, response: pensjonTpMock },
{ url: pensjonPensjonsavtale, response: pensjonPensjonsavtaleMock },
{ url: sigrunstub, response: sigrunstubMock },
{ url: udistub, response: udistubMock },
{ url: kodeverk, response: kodeverkMock },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -881,6 +881,8 @@ export const pensjonMock = [

export const pensjonTpMock = [{ ordning: '4095' }, { ordning: '3010' }]

export const pensjonPensjonsavtaleMock = [{}, {}]

export const tagsMock = [{ tag: 'DUMMY', beskrivelse: 'Dummy' }]

export const kontoregisterMock = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1903,29 +1903,32 @@ const mapPensjon = (bestillingData, data, navEnheter) => {
data.push(pensjonforvalterPopp)
}

if (pensjonKriterier.pensjonsavtale) {
const avtale = pensjonKriterier.pensjonsavtale

if (pensjonKriterier.pensjonsavtale && pensjonKriterier.pensjonsavtale.length > 0) {
const penPensjonsavtale = {
header: 'Pensjonsavtale (PEN)',
items: [
obj('Produktbetegnelse', avtale.produktBetegnelse),
obj('Avtalekategori', avtale.avtaleKategori),
obj('Startalder År', avtale.startAlderAar),
obj('Sluttalder År', avtale.sluttAlderAar),
],
itemRows: [],
}
avtale.utbetalingsperioder.forEach((periode, i) => {

pensjonKriterier.pensjonsavtale.forEach((pensjonsavtale, i) => {
penPensjonsavtale.itemRows.push([
{ numberHeader: `Utbetalingsperiode ${i + 1}` },
obj('Startalder År', periode.startAlderAar),
obj('StartAlderMaaneder', periode.startAlderMaaneder),
obj('Sluttalder År', periode.sluttAlderAar),
obj('Sluttalder Måneder', periode.sluttAlderMaaneder),
obj('Årlig Utbetaling', periode.aarligUtbetaling),
obj('Grad', periode.grad),
{ numberHeader: `Pensjonsavtale ${i + 1}` },
obj('Produktbetegnelse', pensjonsavtale.produktBetegnelse),
obj('Avtalekategori', pensjonsavtale.avtaleKategori),
obj('Startalder År', pensjonsavtale.startAlderAar),
obj('Sluttalder År', pensjonsavtale.sluttAlderAar),
])

pensjonsavtale.utbetalingsPerioder.forEach((periode, j) => {
penPensjonsavtale.itemRows.push([
{ numberHeader: `Utbetalingsperiode ${j + 1}` },
obj('Startalder År', periode.startAlderAar),
obj('Startalder Måned', periode.startAlderMaaneder),
obj('Sluttalder År', periode.sluttAlderAar),
obj('Sluttalder Måned', periode.sluttAlderMaaneder),
obj('Årlig Utbetaling', periode.aarligUtbetaling),
obj('Grad', periode.grad),
])
})
})

data.push(penPensjonsavtale)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import React from 'react'
import { validation } from '@/components/fagsystem/pensjonsavtale/form/validation'
import { useFormContext } from 'react-hook-form'
import { Vis } from '@/components/bestillingsveileder/VisAttributt'
import Panel from '@/components/ui/panel/Panel'
import { erForsteEllerTest, panelError } from '@/components/ui/form/formUtils'
import { validation } from '@/components/fagsystem/tjenestepensjon/form/validation'
import { SelectOptionsManager as Options } from '@/service/SelectOptions'
import { FormSelect } from '@/components/ui/form/inputs/select/Select'
import { useFormContext } from 'react-hook-form'
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
import { UtbetalingsperioderForm } from '@/components/fagsystem/pensjonsavtale/form/partials/Utbetalingsperioder' // import './TPForm.less'
import { FormSelect } from '@/components/ui/form/inputs/select/Select'
import { SelectOptionsManager as Options } from '@/service/SelectOptions'
import { UtbetalingsperioderForm } from '@/components/fagsystem/pensjonsavtale/form/partials/Utbetalingsperioder'
import { FormDollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray'
import { initialNyPensjonsavtaleVerdier } from '@/components/fagsystem/pensjonsavtale/initalValues' // import './TPForm.less'
// import './TPForm.less'

export const avtalePath = 'pensjonforvalter.pensjonsavtale'
Expand All @@ -26,26 +28,46 @@ export const PensjonsavtaleForm = () => {
startOpen={erForsteEllerTest(formMethods.getValues(), [avtalePath])}
informasjonstekst={hjelpetekst}
>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${avtalePath}.produktBetegnelse`}
label="Produktbetegnelse"
type="string"
/>

<FormSelect
name={`${avtalePath}.avtaleKategori`}
label="Avtalekategori"
size={'medium'}
options={Options('avtaleKategori')}
/>

<FormTextInput name={`${avtalePath}.startAlderAar`} label="Startalder År" type="number" />

<FormTextInput name={`${avtalePath}.sluttAlderAar`} label="Sluttalder År" type="number" />

<UtbetalingsperioderForm formMethods={formMethods} />
</div>
<FormDollyFieldArray
name={avtalePath}
header="Pensjonsavtale"
newEntry={initialNyPensjonsavtaleVerdier}
>
{(formPath, idx) => (
<React.Fragment key={idx}>
<React.Fragment>
<div className="flexbox--flex-wrap">
<FormTextInput
name={`${formPath}.produktBetegnelse`}
label="Produktbetegnelse"
type="string"
/>

<FormSelect
name={`${formPath}.avtaleKategori`}
label="Avtalekategori"
size={'medium'}
options={Options('avtaleKategori')}
/>

<FormTextInput
name={`${formPath}.startAlderAar`}
label="Startalder År"
type="number"
/>

<FormTextInput
name={`${formPath}.sluttAlderAar`}
label="Sluttalder År"
type="number"
/>

<UtbetalingsperioderForm path={`${formPath}.utbetalingsPerioder`} />
</div>
</React.Fragment>
</React.Fragment>
)}
</FormDollyFieldArray>
</Panel>
</Vis>
)
Expand Down
Loading

0 comments on commit 663bfd2

Please sign in to comment.