Skip to content

Commit

Permalink
Legg til visning av kontonummer
Browse files Browse the repository at this point in the history
  • Loading branch information
anderslysne committed Jan 7, 2025
1 parent 6c9c692 commit 577fafb
Show file tree
Hide file tree
Showing 6 changed files with 181 additions and 75 deletions.
14 changes: 14 additions & 0 deletions src/Pages/OmVirksomheten/Kontonummer.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
.kontonummer {
background: var(--a-gray-100);
padding: 16px;
border-radius: 8px;
gap: 8px;
display: grid;
flex-grow: 1;
}

.kontonummer-tittel{
display: flex;
align-items: center;
gap: 8px;
}
180 changes: 114 additions & 66 deletions src/Pages/OmVirksomheten/Kontonummer.tsx
Original file line number Diff line number Diff line change
@@ -1,40 +1,74 @@
import { Alert, BodyShort, Heading, HelpText, Label } from '@navikt/ds-react';
import React from 'react';
import Tekstboks from './Tekstboks';
import { Alert, BodyShort, Heading, HelpText } from '@navikt/ds-react';
import React, { useState } from 'react';
import './Kontonummer.css';
import { LenkeMedLogging } from '../../GeneriskeElementer/LenkeMedLogging';
import Underenhet from './Underenhet';
import { Hovedenhet } from '../../api/enhetsregisteretApi';
import { Hovedenhet, Underenhet as UnderenhetType } from '../../api/enhetsregisteretApi';
import useSWR from 'swr';
import { z } from 'zod';

export const KontonummerUnderenhet = ({ underenhet }: { underenhet: Underenhet }) => {
const { kontonummer, orgnummer } = { kontonummer: undefined, orgnummer: undefined }; //TODO Hente kontonummer og tilhørende orgnummer
const KontonummerInfo = z.object({
status: z.string(),
orgnr: z.string().nullable(),
kontonummer: z.string().nullable(),
});

if (kontonummer === undefined) return null;
type KontonummerInfo = z.infer<typeof KontonummerInfo>;

return (
<Tekstboks>
<div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}>
<Heading size="small" level="3">
Kontonummer for underenhet
</Heading>
<HelpText>
Kontonumret benyttes av NAV ved refusjoner av sykepenger, foreldrepenger,
stønader ved barns sykdom, pleie-, opplærings- og omsorgspenger, tilskudd til
sommerjobb og lønnstilskudd.
</HelpText>
</div>
{orgnummer !== underenhet.organisasjonsnummer && (
<BodyShort> Hentet fra overordnet enhet</BodyShort>
)}
<Kontonummer kontonummer={kontonummer} />
<LenkeMedLogging
loggLenketekst={'Endre kontonummer i Altinn'}
href={
'https://www.altinn.no/skjemaoversikt/arbeids--og-velferdsetaten-nav/bankkontonummer-for-refusjoner-fra-nav-til-arbeidsgiver/'
const kontonummerFetcher = async ({ url, orgnr }: { url: string; orgnr: string }) => {
const body = { virksomhetsnummer: orgnr };
const response = await fetch(url, {
body: JSON.stringify(body),
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
if (response.status != 200) {
throw response;
}
return KontonummerInfo.parse(await response.json());
};
const useKontonummer = (orgnr: String) => {
const [retries, setRetries] = useState(0);

const { data: kontonummerInfo } = useSWR(
orgnr === undefined ? null : { url: `${__BASE_PATH__}/api/kontonummer/v1`, orgnr },
kontonummerFetcher,
{
onSuccess: () => setRetries(0),
onError: (error) => {
if (retries === 5) {
console.error(
`#MSA: hent kontonummer fra min-side-arbeidsgiver-api feilet med ${
error.status !== undefined
? `${error.status} ${error.statusText}`
: error
}\``
);
}
>
Endre kontonummer i Altinn
</LenkeMedLogging>
</Tekstboks>
setRetries((x) => x + 1);
},
errorRetryInterval: 300,
}
);

return kontonummerInfo;
};

export const KontonummerUnderenhet = ({ underenhet }: { underenhet: UnderenhetType }) => {
const kontonummerInfo = useKontonummer(underenhet.organisasjonsnummer);

if (kontonummerInfo === undefined || kontonummerInfo.kontonummer == null) return null;

return (
<div className={'kontonummer'}>
<KontonummerTittel enhetsType={'underenhet'} />
<KontonummerVisning
kontonummerInfo={kontonummerInfo}
organisasjonsnummer={underenhet.organisasjonsnummer}
/>
<EndreKontonummer />
</div>
);
};

Expand All @@ -46,57 +80,71 @@ export const KontonummerOverordnetEnhet = ({
const enhetstype =
overordnetEnhet.organisasjonsform?.kode === 'ORGL' ? 'organisasjonsledd' : 'hovedenhet';

const { kontonummer, orgnummer } = { kontonummer: undefined, orgnummer: undefined }; //TODO Hente kontonummer og tilhørende orgnummer
const kontonummerInfo = useKontonummer(overordnetEnhet.organisasjonsnummer);

return (
<Tekstboks>
<div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}>
<Heading size="small" level="3">
Kontonummer for {enhetstype}
</Heading>
<HelpText>
Kontonumret benyttes av NAV ved refusjoner av sykepenger, foreldrepenger,
stønader ved barns sykdom, pleie-, opplærings- og omsorgspenger, tilskudd til
sommerjobb og lønnstilskudd.
</HelpText>
</div>
if (kontonummerInfo === undefined) return null;

{kontonummer === undefined ? (
return (
<div className={'kontonummer'}>
<KontonummerTittel enhetsType={enhetstype} />
{kontonummerInfo.kontonummer === null ? (
<Alert variant="warning">
<Heading spacing size="small" level="3">
Kontonummer mangler
</Heading>
For at NAV skal kunne utbetale refusjoner trenger vi et kontonummer.
</Alert>
) : (
<>
{orgnummer !== overordnetEnhet.organisasjonsnummer && (
<BodyShort> Hentet fra overordnet enhet</BodyShort>
)}
<Kontonummer kontonummer={kontonummer} />
</>
<KontonummerVisning
kontonummerInfo={kontonummerInfo}
organisasjonsnummer={overordnetEnhet.organisasjonsnummer}
/>
)}
<LenkeMedLogging
loggLenketekst={'Endre kontonummer i Altinn'}
href={
'https://www.altinn.no/skjemaoversikt/arbeids--og-velferdsetaten-nav/bankkontonummer-for-refusjoner-fra-nav-til-arbeidsgiver/'
}
>
Endre kontonummer i Altinn
</LenkeMedLogging>
</Tekstboks>
<EndreKontonummer />
</div>
);
};

const Kontonummer = ({ kontonummer }: { kontonummer: string }) => (
const EndreKontonummer = () => (
<LenkeMedLogging
loggLenketekst={'Endre kontonummer i Altinn'}
href="https://www.altinn.no/skjemaoversikt/arbeids--og-velferdsetaten-nav/bankkontonummer-for-refusjoner-fra-nav-til-arbeidsgiver/"
>
Endre kontonummer i Altinn
</LenkeMedLogging>
);

const KontonummerTittel = ({ enhetsType }: { enhetsType: string }) => (
<div className={'kontonummer-tittel'}>
<Heading size="small" level="3">
Kontonummer for {enhetsType}
</Heading>
<HelpText>
Kontonumret benyttes av NAV ved refusjoner av sykepenger, foreldrepenger, stønader ved
barns sykdom, pleie-, opplærings- og omsorgspenger, tilskudd til sommerjobb og
lønnstilskudd.
</HelpText>
</div>
);

const KontonummerVisning = ({
organisasjonsnummer,
kontonummerInfo,
}: {
organisasjonsnummer: string;
kontonummerInfo: KontonummerInfo;
}) => (
<>
<BodyShort style={{ fontSize: '32px', margin: '8px 0' }}>
{kontonummerInfo.orgnr !== organisasjonsnummer && (
<BodyShort size={'small'}> Hentet fra overordnet enhet</BodyShort>
)}
<BodyShort style={{ fontSize: '18px' }}>
{' '}
{`${kontonummer.substring(0, 4)}`}
{`${kontonummerInfo.kontonummer!.substring(0, 4)}`}
{'.'}
{`${kontonummer.substring(4, 6)}`}
{`${kontonummerInfo.kontonummer!.substring(4, 6)}`}
{'.'}
{`${kontonummer.substring(6)}`}
{`${kontonummerInfo.kontonummer!.substring(6)}`}
</BodyShort>
</>
);
4 changes: 3 additions & 1 deletion src/Pages/OmVirksomheten/OverordnetEnhet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { BodyShort, Heading, HStack, Label } from '@navikt/ds-react';
import { KontaktinfoOverordnetEnhet } from './Kontaktinfo';
import { Hovedenhet } from '../../api/enhetsregisteretApi';
import { formatOrgNr } from '../../utils/util';
import { KontonummerOverordnetEnhet } from './Kontonummer';

interface Props {
overordnetenhet: Hovedenhet;
Expand Down Expand Up @@ -88,8 +89,9 @@ const OverordnetEnhet = ({ overordnetenhet }: Props) => {
<NyFaneIkon />
</LenkeMedLogging>
</Tekstboks>
<HStack gap="6">
<HStack gap="6" align={"start"}>
<KontaktinfoOverordnetEnhet overordnetEnhet={overordnetenhet} />
<KontonummerOverordnetEnhet overordnetEnhet={overordnetenhet} />
</HStack>
</div>
);
Expand Down
4 changes: 3 additions & 1 deletion src/Pages/OmVirksomheten/Underenhet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { Underenhet as UnderenhetType } from '../../api/enhetsregisteretApi';
import { BodyShort, Heading, HStack, Label } from '@navikt/ds-react';
import { KontaktinfoUnderenhet } from './Kontaktinfo';
import { formatOrgNr } from '../../utils/util';
import { KontonummerUnderenhet } from './Kontonummer';

interface Props {
underenhet: UnderenhetType;
Expand Down Expand Up @@ -73,8 +74,9 @@ const Underenhet = ({ underenhet }: Props) => {
<NyFaneIkon />
</LenkeMedLogging>
</Tekstboks>
<HStack gap="6">
<HStack gap="6" align={"start"}>
<KontaktinfoUnderenhet />
<KontonummerUnderenhet underenhet={underenhet}/>
</HStack>
</>
);
Expand Down
9 changes: 2 additions & 7 deletions src/mocks/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
sakstyperResolver,
hentSakByIdResolver,
} from './brukerApi/resolvers';
import { kontonummerHandlers } from './handlers/kontonummerHandler';

/**
* generelle handlers som har lik oppførsel uavhengig av profil.
Expand Down Expand Up @@ -205,13 +206,7 @@ export const handlers = [
)
),

// kontonummerStatusHandler
http.post('/min-side-arbeidsgiver/api/kontonummerStatus/v1', () =>
HttpResponse.json({
status: faker.helpers.maybe(() => 'OK', { probability: 0.99 }) ?? 'MANGLER_KONTONUMMER',
})
),

...kontonummerHandlers,
...storageHandlers,

kontaktinfoHandler,
Expand Down
45 changes: 45 additions & 0 deletions src/mocks/handlers/kontonummerHandler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { http, HttpResponse } from 'msw';
import { faker } from '@faker-js/faker';

type RequestBody = {
virksomhetsnummer: String;
};

export const kontonummerHandlers = [
http.post<{}, RequestBody>('/min-side-arbeidsgiver/api/kontonummer/v1', async ({ request }) => {
const orgnr = (await request.json())?.virksomhetsnummer;
console.log(orgnr);
return HttpResponse.json(
faker.helpers.maybe(
() => ({
status: 'OK',
orgnr: orgnr,
kontonummer: faker.number
.int({ min: 10000000000, max: 99999999999 })
.toString(),
}),
{ probability: 0.5 }
) ??
faker.helpers.maybe(
() => ({
status: 'OK',
orgnr: '123',
kontonummer: faker.number
.int({ min: 10000000000, max: 99999999999 })
.toString(),
}),
{ probability: 0.9 }
) ?? {
status: 'MANGLER_KONTONUMMER',
orgnr: null,
kontonummer: null,
}
);
}),

http.post('/min-side-arbeidsgiver/api/kontonummerStatus/v1', () =>
HttpResponse.json({
status: faker.helpers.maybe(() => 'OK', { probability: 0.99 }) ?? 'MANGLER_KONTONUMMER',
})
),
];

0 comments on commit 577fafb

Please sign in to comment.