From ba88e3b9ec74f5b13dc4fdace775f945ad8a5c30 Mon Sep 17 00:00:00 2001 From: Mattis Janitz Date: Mon, 20 Jan 2025 10:54:06 +0100 Subject: [PATCH 01/10] =?UTF-8?q?Oppdaterer=20rettsgebyr=20til=202025.=20E?= =?UTF-8?q?tter=20kj=C3=B8ring=20i=20=C3=B8konomi=20i=20januar=20kan=20vi?= =?UTF-8?q?=20n=C3=A5=20f=C3=A5=20saker=20som=20kommer=20under=202025=20re?= =?UTF-8?q?ttsgebyr.=20(#2985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx b/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx index ee61d9bcf..f8d8d0bdb 100644 --- a/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx +++ b/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx @@ -21,6 +21,7 @@ import { Stønadstype } from '../../../App/typer/behandlingstema'; import { BodyLongSmall } from '../../../Felles/Visningskomponenter/Tekster'; import { ASurfaceWarningSubtle, ASurfaceWarningSubtleHover } from '@navikt/ds-tokens/dist/tokens'; import { AlertInfo } from '../../../Felles/Visningskomponenter/Alerts'; + const Container = styled.div` padding: 2rem; display: flex; @@ -40,7 +41,7 @@ const AlertWarning = styled(Alert)` max-width: 60rem; `; -const RETTSGEBYR_BELØP = 1277; +const RETTSGEBYR_BELØP = 1314; const Simulering: React.FC<{ simuleringsresultat: SimuleringResultat; From 2a8c82846f7242c7644e778ed79c1ea8f2ecab1b Mon Sep 17 00:00:00 2001 From: Kristian Kofoed Date: Tue, 21 Jan 2025 13:38:35 +0100 Subject: [PATCH 02/10] =?UTF-8?q?Feature=20-=20inntektkalkulator=20for=20i?= =?UTF-8?q?nntektvilk=C3=A5r=20i=20barnetilsyn-behandling=20(#2986)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Oppdatert Delvilkår komponenet til å bruke nyere elementer. Primært satt en egen heading med muligheten om å vise BeregnetInntektKalkulator. Mangler foreløpig mulighet til å faktisk bruke kalkulatoren. Fjernet ubrukt container og lage egen visKalkulator metode. * Endret Delvilkår heading fra small til xsmall. Ligner mere det som var før. * Reverted Delvilkår og endret laget en ny komponent for vurdering med kalkulator. Dette blir kanskje enkleste vei til mål. * Kalkulator godtar nå input og endrer textarea med beskrivelse. * Renamed konstant i InntektVurderingMedKalkulator.tsx for eksisterendeTekst. * Liten endring i BT kalkulator tekst slik at vi alltid starter på en ny linje. * VisKalkulator sjekk gir nå litt mere mening i InntektVurderingMedKalkulator.tsx. * Bruker nå en styled component for HStack i InntektVurderingMedKalkulator istede for inline CSS. * Endret til styeld components, samt laget en mer generisk metode for generering av tekst. * La til innrykk for genererBeregnetInntektsTekst. --- src/frontend/App/hooks/useVerdierForBrev.ts | 9 ++ .../InnvilgeVedtak/InntektsperiodeValg.tsx" | 16 +--- .../Vurdering/EndreVurderingComponent.tsx | 70 ++++++++++++---- .../InntektVurderingMedKalkulator.tsx | 84 +++++++++++++++++++ .../Behandling/Vurdering/VurderingUtil.ts | 4 + 5 files changed, 152 insertions(+), 31 deletions(-) create mode 100644 src/frontend/Komponenter/Behandling/Vurdering/InntektVurderingMedKalkulator.tsx diff --git a/src/frontend/App/hooks/useVerdierForBrev.ts b/src/frontend/App/hooks/useVerdierForBrev.ts index 9a7b8d584..6d3976ace 100644 --- a/src/frontend/App/hooks/useVerdierForBrev.ts +++ b/src/frontend/App/hooks/useVerdierForBrev.ts @@ -167,3 +167,12 @@ export const beregnTiProsentØkningIMånedsinntekt = (årsinntekt: number) => export const beregnTiProsentReduksjonIMånedsinntekt = (årsinntekt: number) => formaterTallMedTusenSkille(Math.floor((årsinntekt / 12) * 0.9)); + +export const genererBeregnetInntektsTekst = (årsinntekt: number): string => { + const minusTi = beregnTiProsentReduksjonIMånedsinntekt(årsinntekt); + const plusTi = beregnTiProsentØkningIMånedsinntekt(årsinntekt); + + return `Forventet årsinntekt fra [DATO]: ${formaterTallMedTusenSkille(årsinntekt)} kroner. + - 10 % ned: ${minusTi} kroner per måned. + - 10 % opp: ${plusTi} kroner per måned.`; +}; diff --git "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/InntektsperiodeValg.tsx" "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/InntektsperiodeValg.tsx" index db1e475c4..94318a72b 100644 --- "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/InntektsperiodeValg.tsx" +++ "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/InntektsperiodeValg.tsx" @@ -39,11 +39,7 @@ import { ABorderDivider, AGray50 } from '@navikt/ds-tokens/dist/tokens'; import { IngenBegrunnelseOppgitt } from './IngenBegrunnelseOppgitt'; import { EnsligTextArea } from '../../../../../Felles/Input/TekstInput/EnsligTextArea'; import BeregnetInntektKalkulator from './BeregnetInntektKalkulator'; -import { formaterTallMedTusenSkille } from '../../../../../App/utils/formatter'; -import { - beregnTiProsentReduksjonIMånedsinntekt, - beregnTiProsentØkningIMånedsinntekt, -} from '../../../../../App/hooks/useVerdierForBrev'; +import { genererBeregnetInntektsTekst } from '../../../../../App/hooks/useVerdierForBrev'; const Container = styled.div` padding: 1rem; @@ -197,15 +193,7 @@ const InntektsperiodeValg: React.FC = ({ }; const leggTilBeregnetInntektTekstIBegrunnelse = (årsinntekt: number) => { - const minusTi = beregnTiProsentReduksjonIMånedsinntekt(årsinntekt); - const plusTi = beregnTiProsentØkningIMånedsinntekt(årsinntekt); - - const beregnetInntektTekst = ` -Forventet årsinntekt fra [DATO]: ${formaterTallMedTusenSkille(årsinntekt)} kroner. - - 10 % ned: ${minusTi} kroner per måned. - - 10 % opp: ${plusTi} kroner per måned. -`; - + const beregnetInntektTekst = genererBeregnetInntektsTekst(årsinntekt); inntektBegrunnelseState.setValue((prevState) => prevState + beregnetInntektTekst); }; diff --git a/src/frontend/Komponenter/Behandling/Vurdering/EndreVurderingComponent.tsx b/src/frontend/Komponenter/Behandling/Vurdering/EndreVurderingComponent.tsx index bc40eff22..0473bc2f3 100644 --- a/src/frontend/Komponenter/Behandling/Vurdering/EndreVurderingComponent.tsx +++ b/src/frontend/Komponenter/Behandling/Vurdering/EndreVurderingComponent.tsx @@ -27,6 +27,8 @@ import { EkspandertTilstand, useEkspanderbareVilkårpanelContext, } from '../../../App/context/EkspanderbareVilkårpanelContext'; +import { visBeregnetInntektKalkulator } from './VurderingUtil'; +import { InntektVurderingMedKalkulator } from './InntektVurderingMedKalkulator'; /** * Skal resette undervilkår, men ikke rootnivå hvis en tidligere endrer seg @@ -146,25 +148,59 @@ const EndreVurderingComponent: FC<{ return delvilkår.vurderinger.map((svar) => { const regel = regler[svar.regelId]; + const visInntektVurderingMedKalkulator = visBeregnetInntektKalkulator( + regel.regelId + ); + return ( - - oppdaterSvar(delvilkår.vurderinger, delvilkårIndex, nyVurdering) - } - /> - - oppdaterBegrunnelse(delvilkår.vurderinger, delvilkårIndex, { - ...svar, - begrunnelse, - }) - } - svar={svar} - regel={regel} - /> + {visInntektVurderingMedKalkulator ? ( + + oppdaterSvar( + delvilkår.vurderinger, + delvilkårIndex, + nyVurdering + ) + } + onChange={(begrunnelse) => + oppdaterBegrunnelse(delvilkår.vurderinger, delvilkårIndex, { + ...svar, + begrunnelse, + }) + } + /> + ) : ( + <> + + oppdaterSvar( + delvilkår.vurderinger, + delvilkårIndex, + nyVurdering + ) + } + /> + + oppdaterBegrunnelse( + delvilkår.vurderinger, + delvilkårIndex, + { + ...svar, + begrunnelse, + } + ) + } + svar={svar} + regel={regel} + /> + + )} ); }); diff --git a/src/frontend/Komponenter/Behandling/Vurdering/InntektVurderingMedKalkulator.tsx b/src/frontend/Komponenter/Behandling/Vurdering/InntektVurderingMedKalkulator.tsx new file mode 100644 index 000000000..65b777ba9 --- /dev/null +++ b/src/frontend/Komponenter/Behandling/Vurdering/InntektVurderingMedKalkulator.tsx @@ -0,0 +1,84 @@ +import * as React from 'react'; +import { FC } from 'react'; +import { Heading, HelpText, HStack, RadioGroup, VStack } from '@navikt/ds-react'; +import { RadioKnapperMedlemskapUnntak } from './RadioKnapperMedlemskapUnntak'; +import { BegrunnelseRegel, Regel } from './typer'; +import { Vurdering } from '../Inngangsvilkår/vilkår'; +import { delvilkårTypeTilTekst } from './tekster'; +import BeregnetInntektKalkulator from '../VedtakOgBeregning/Overgangsstønad/InnvilgeVedtak/BeregnetInntektKalkulator'; +import { hjelpeTekstConfig } from './hjelpetekstconfig'; +import { RadioKnapper } from './RadioKnapper'; +import Begrunnelse from './Begrunnelse'; +import { genererBeregnetInntektsTekst } from '../../../App/hooks/useVerdierForBrev'; +import styled from 'styled-components'; + +const StyledHStack = styled(HStack)` + justify-content: space-between; + width: 100%; + gap: 2; +`; + +const StyledHeading = styled(Heading)` + flex: 1; + word-break: break-word; +`; + +const utledRadioKnapper = (regel: Regel, settVurdering: (nyttSvar: Vurdering) => void) => { + switch (regel.regelId) { + case 'MEDLEMSKAP_UNNTAK': + return ; + default: + return ; + } +}; + +interface InntektVurderingMedKalkualtor { + regel: Regel; + vurdering: Vurdering; + settVurdering: (nyttSvar: Vurdering) => void; + onChange: (tekst: string) => void; +} + +export const InntektVurderingMedKalkulator: FC = ({ + regel, + vurdering, + settVurdering, + onChange, +}) => { + const hjelpetekst = hjelpeTekstConfig[vurdering.regelId]; + + const begrunnelsetype = vurdering.svar && regel.svarMapping[vurdering.svar].begrunnelseType; + const visKalkulator = (begrunnelsetype ?? BegrunnelseRegel.UTEN) !== BegrunnelseRegel.UTEN; + + const leggTilBeregnetInntektTekstIBegrunnelse = (årsinntekt: number) => { + const beregnetInntektTekst = genererBeregnetInntektsTekst(årsinntekt); + const eksisterendeTekst = vurdering.begrunnelse || ''; + onChange(eksisterendeTekst + beregnetInntektTekst); + }; + + return ( + + + {delvilkårTypeTilTekst[regel.regelId]} + {visKalkulator && ( +
+ +
+ )} +
+ + {utledRadioKnapper(regel, settVurdering)} + + {hjelpetekst && ( + + {React.createElement(hjelpetekst.komponent)} + + )} + +
+ ); +}; diff --git a/src/frontend/Komponenter/Behandling/Vurdering/VurderingUtil.ts b/src/frontend/Komponenter/Behandling/Vurdering/VurderingUtil.ts index ecff2acf9..75be89b40 100644 --- a/src/frontend/Komponenter/Behandling/Vurdering/VurderingUtil.ts +++ b/src/frontend/Komponenter/Behandling/Vurdering/VurderingUtil.ts @@ -36,3 +36,7 @@ export const vilkårStatusForBarn = (vilkårsresultater: Vilkårsresultat[]): Vi } return Vilkårsresultat.IKKE_OPPFYLT; }; + +export const visBeregnetInntektKalkulator = (regelId: string): boolean => { + return regelId === 'INNTEKT_SAMSVARER_MED_OS'; +}; From 059da38e67ed57a6c68f297172dadb249af2dfff Mon Sep 17 00:00:00 2001 From: Viktor Solberg Date: Thu, 23 Jan 2025 11:26:40 +0100 Subject: [PATCH 03/10] =?UTF-8?q?skal=20kunne=20innvilge=20p=C3=A5f=C3=B8l?= =?UTF-8?q?gende=20vedtaksperioder=20inntill=2030=20m=C3=A5neder=20frem=20?= =?UTF-8?q?i=20tid=20(#2991)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InnvilgeVedtak/vedtaksvalidering.test.ts" | 12 ++++++------ .../InnvilgeVedtak/vedtaksvalidering.ts" | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.test.ts" "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.test.ts" index b319a1bf5..fc52d74ba 100644 --- "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.test.ts" +++ "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.test.ts" @@ -265,7 +265,7 @@ describe('skal feile validering av vedtaksperioder', () => { ); }); - test('Etterfølgende fradato kan ikke være mer enn 18mnd frem i tid.', () => { + test('Etterfølgende fradato kan ikke være mer enn 30mnd frem i tid.', () => { const vedtaksperioder = [ lagVedtaksperiode( EPeriodetype.HOVEDPERIODE, @@ -294,7 +294,7 @@ describe('skal feile validering av vedtaksperioder', () => { expect(vedtaksvalidering.perioder[0].årMånedFra).toBeUndefined; expect(vedtaksvalidering.perioder[1].årMånedFra).toBeUndefined; expect(vedtaksvalidering.perioder[2].årMånedFra).toBe( - 'Startdato (2096-07) mer enn 18mnd frem i tid' + 'Startdato (2096-07) mer enn 30mnd frem i tid' ); }); }); @@ -378,13 +378,13 @@ describe('skal feile validering av inntektsperioder', () => { expect(vedtaksvalidering.inntekter[1].årMånedFra).toBe('Ugyldig periode'); }); - test('Inntektsperiode kan ikke starte mer enn 18 måneder frem i tid.', () => { + test('Inntektsperiode kan ikke starte mer enn 30 måneder frem i tid.', () => { const datoÅrMåned = datoÅrMånedFrem(); - const datoÅrMånedNittenMånederFrem = datoÅrMånedFrem(19); + const datoÅrMånedTrettiEnMånederFrem = datoÅrMånedFrem(31); const inntektsperioder = [ lagInntektsperiode(datoÅrMåned), - lagInntektsperiode(datoÅrMånedNittenMånederFrem), + lagInntektsperiode(datoÅrMånedTrettiEnMånederFrem), ]; const vedtaksform = lagForm([], inntektsperioder); @@ -393,7 +393,7 @@ describe('skal feile validering av inntektsperioder', () => { expect(vedtaksvalidering.inntekter).toHaveLength(2); expect(vedtaksvalidering.inntekter[0].årMånedFra).toBeUndefined; expect(vedtaksvalidering.inntekter[1].årMånedFra).toBe( - `Startdato (${datoÅrMånedNittenMånederFrem}) mer enn 18mnd frem i tid` + `Startdato (${datoÅrMånedTrettiEnMånederFrem}) mer enn 30mnd frem i tid` ); }); diff --git "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.ts" "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.ts" index a990bfc1b..ada8706a8 100644 --- "a/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.ts" +++ "b/src/frontend/Komponenter/Behandling/VedtakOgBeregning/Overgangsst\303\270nad/InnvilgeVedtak/vedtaksvalidering.ts" @@ -22,7 +22,7 @@ import { validerGyldigTallverdi, } from '../../Felles/utils'; -const attenMånederFremITiden = tilÅrMåned(plusMåneder(new Date(), 18)); +const trettiMånederFremITiden = tilÅrMåned(plusMåneder(new Date(), 30)); const syvMånederFremITiden = tilÅrMåned(plusMåneder(new Date(), 7)); export const validerInnvilgetVedtakForm = ({ @@ -184,10 +184,10 @@ export const validerVedtaksperioder = ({ årMånedFra: `Startdato (${årMånedFra}) mer enn 7mnd frem i tid`, }; } - if (erMånedÅrEtter(attenMånederFremITiden, årMånedFra) && harPeriodeFør7mndFremITiden) { + if (erMånedÅrEtter(trettiMånederFremITiden, årMånedFra) && harPeriodeFør7mndFremITiden) { return { ...vedtaksperiodeFeil, - årMånedFra: `Startdato (${årMånedFra}) mer enn 18mnd frem i tid`, + årMånedFra: `Startdato (${årMånedFra}) mer enn 30mnd frem i tid`, }; } return vedtaksperiodeFeil; @@ -237,8 +237,8 @@ const validerInntektsperiode = ( return ugyldigEtterfølgendePeriodeFeilmelding(); } } - if (erMånedÅrEtter(attenMånederFremITiden, årMånedFra)) { - return `Startdato (${årMånedFra}) mer enn 18mnd frem i tid`; + if (erMånedÅrEtter(trettiMånederFremITiden, årMånedFra)) { + return `Startdato (${årMånedFra}) mer enn 30mnd frem i tid`; } const sisteMånedIVedtaksperiode = perioder[perioder.length - 1]?.årMånedTil; if (sisteMånedIVedtaksperiode && erMånedÅrEtter(sisteMånedIVedtaksperiode, årMånedFra)) { From 03331886367dab65d8df48de04a3d6e0bf18a170 Mon Sep 17 00:00:00 2001 From: Per-Christian Nielsen <55442993+perchrnie@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:36:18 +0100 Subject: [PATCH 04/10] =?UTF-8?q?Vil=20bruke=20rettsgebyrvurdering=20fra?= =?UTF-8?q?=20backend=20slik=20at=20vi=20bruker=20riktig=20rettsgebyr=20fo?= =?UTF-8?q?r=20=C3=A5r=20(#2989)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Vil bruke rettsgebyrvurdering fra backend slik at vi bruker riktig rettsgebyr for år Co-authored-by: Mattis Janitz * Tekstforbedringer Co-authored-by: Mattis Janitz --------- Co-authored-by: Mattis Janitz --- .../Simulering/FireGangerRettsgebyr.tsx | 48 +++++++++++++++++++ .../Behandling/Simulering/Simulering.tsx | 7 ++- .../Behandling/Simulering/SimuleringTyper.ts | 3 ++ .../Behandling/Simulering/Tilbakekreving.tsx | 6 +++ .../Simulering/TilbakekrevingSkjema.tsx | 40 +++------------- 5 files changed, 66 insertions(+), 38 deletions(-) create mode 100644 src/frontend/Komponenter/Behandling/Simulering/FireGangerRettsgebyr.tsx diff --git a/src/frontend/Komponenter/Behandling/Simulering/FireGangerRettsgebyr.tsx b/src/frontend/Komponenter/Behandling/Simulering/FireGangerRettsgebyr.tsx new file mode 100644 index 000000000..c996fe73a --- /dev/null +++ b/src/frontend/Komponenter/Behandling/Simulering/FireGangerRettsgebyr.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { ITilbakekrevingsvalg, TilbakekrevingsvalgTilTekst } from './Tilbakekreving'; +import { BodyLong } from '@navikt/ds-react'; +import styled from 'styled-components'; + +interface Props { + år?: number; + rettsgebyr?: number; +} + +const Liste = styled.ul` + list-style: none; + margin: 0 0 1rem 0; + padding: 0; +`; + +const BodyLongMarginBottom = styled(BodyLong)` + margin-bottom: 1rem; +`; + +export const FireGangerRettsgebyr: React.FC = ({ år, rettsgebyr }) => ( + <> + + {TilbakekrevingsvalgTilTekst[ITilbakekrevingsvalg.OPPRETT_AUTOMATISK]} + + Det er vurdert at + +
  • + + - bruker ikke har handlet forsettlig eller grovt uaktsomt + +
  • +
  • + + - beløpet er under 4 rettsgebyr (4 rettsgebyr i {år} er {rettsgebyr} kroner) + +
  • +
  • + - beløpet ikke skal betales tilbake +
  • +
    + + Saken blir automatisk behandlet og bruker får et vedtak om ikke tilbakebetaling. Merk at + det ikke er mulig å endre brevmottaker på denne typen tilbakekrevingsbehandling. Hvis du + skal endre brevmottaker, må du velge et annet alternativ. + + +); diff --git a/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx b/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx index f8d8d0bdb..f7cf5eb3f 100644 --- a/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx +++ b/src/frontend/Komponenter/Behandling/Simulering/Simulering.tsx @@ -41,8 +41,6 @@ const AlertWarning = styled(Alert)` max-width: 60rem; `; -const RETTSGEBYR_BELØP = 1314; - const Simulering: React.FC<{ simuleringsresultat: SimuleringResultat; lagretVedtak?: IVedtak; @@ -82,8 +80,7 @@ const Simulering: React.FC<{ const harFeilutbetaling = simuleringsresultat.feilutbetaling > 0; const skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr = - simuleringsresultat.feilutbetaling < RETTSGEBYR_BELØP * 4 && - simuleringsresultat.etterbetaling === 0; + simuleringsresultat.visUnder4rettsgebyr; const harManuellePosteringer = simuleringsresultat.sumManuellePosteringer ? simuleringsresultat.sumManuellePosteringer > 0 @@ -185,6 +182,8 @@ const Simulering: React.FC<{ skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr={ skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr } + år={simuleringsresultat.feilutbetalingsår} + rettsgebyr={simuleringsresultat.fireRettsgebyr} /> )} diff --git a/src/frontend/Komponenter/Behandling/Simulering/SimuleringTyper.ts b/src/frontend/Komponenter/Behandling/Simulering/SimuleringTyper.ts index 366054aaf..9fb3638e0 100644 --- a/src/frontend/Komponenter/Behandling/Simulering/SimuleringTyper.ts +++ b/src/frontend/Komponenter/Behandling/Simulering/SimuleringTyper.ts @@ -3,6 +3,9 @@ export interface SimuleringResultat { fomDatoNestePeriode: string; etterbetaling: number; feilutbetaling: number; + feilutbetalingsår?: number; + fireRettsgebyr?: number; + visUnder4rettsgebyr: boolean; fom: string; tomDatoNestePeriode: string; forfallsdatoNestePeriode: string; diff --git a/src/frontend/Komponenter/Behandling/Simulering/Tilbakekreving.tsx b/src/frontend/Komponenter/Behandling/Simulering/Tilbakekreving.tsx index 1f0ca0fa7..40362bb0c 100644 --- a/src/frontend/Komponenter/Behandling/Simulering/Tilbakekreving.tsx +++ b/src/frontend/Komponenter/Behandling/Simulering/Tilbakekreving.tsx @@ -41,11 +41,15 @@ const enum ÅpenTilbakekrevingStatus { export interface TilbakekrevingProps { behandlingId: string; skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr: boolean; + år?: number; + rettsgebyr?: number; } export const Tilbakekreving: React.FC = ({ behandlingId, skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr, + år, + rettsgebyr, }) => { const { axiosRequest, nullstillIkkePersisterteKomponenter, settIkkePersistertKomponent } = useApp(); @@ -206,6 +210,8 @@ export const Tilbakekreving: React.FC = ({ skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr={ skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr } + år={år} + rettsgebyr={rettsgebyr} /> )} {!behandlingErRedigerbar && ( diff --git a/src/frontend/Komponenter/Behandling/Simulering/TilbakekrevingSkjema.tsx b/src/frontend/Komponenter/Behandling/Simulering/TilbakekrevingSkjema.tsx index a3ecb4d7a..955044e83 100644 --- a/src/frontend/Komponenter/Behandling/Simulering/TilbakekrevingSkjema.tsx +++ b/src/frontend/Komponenter/Behandling/Simulering/TilbakekrevingSkjema.tsx @@ -10,6 +10,7 @@ import { FileTextIcon } from '@navikt/aksel-icons'; import { ABlue50, ARed500 } from '@navikt/ds-tokens/dist/tokens'; import { HeaderBegrunnelse } from './HeaderBegrunnelse'; import { EnsligTextArea } from '../../../Felles/Input/TekstInput/EnsligTextArea'; +import { FireGangerRettsgebyr } from './FireGangerRettsgebyr'; const Container = styled(VStack)` margin-top: 1.5rem; @@ -37,12 +38,6 @@ const RadioButton = styled(Radio)` background-color: ${ABlue50}; `; -const Liste = styled.ul` - list-style: none; - margin: 0 0 1rem 0; - padding: 0; -`; - const BodyLongMarginBottom = styled(BodyLong)` margin-bottom: 1rem; `; @@ -63,6 +58,8 @@ interface Props { behandlingId: string; valideringsfeil: string; skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr: boolean; + år?: number; + rettsgebyr?: number; } export const TilbakekrevingSkjema: React.FC = ({ @@ -77,6 +74,8 @@ export const TilbakekrevingSkjema: React.FC = ({ behandlingId, valideringsfeil, skalViseValgForAutomatiskBehandlingUnder4xRettsgebyr, + år, + rettsgebyr, }) => { const { settIkkePersistertKomponent, axiosRequest } = useApp(); @@ -133,7 +132,7 @@ export const TilbakekrevingSkjema: React.FC = ({ value={ITilbakekrevingsvalg.OPPRETT_AUTOMATISK} name="tilbakekrevingRadio" > - + )} @@ -189,33 +188,6 @@ export const TilbakekrevingSkjema: React.FC = ({ ); }; -const FireGangerRettsgebyr = () => ( - <> - - {TilbakekrevingsvalgTilTekst[ITilbakekrevingsvalg.OPPRETT_AUTOMATISK]} - - Det er vurdert at - -
  • - - - bruker ikke har handlet forsettlig eller grovt uaktsomt - -
  • -
  • - - beløpet er under 4 rettsgebyr -
  • -
  • - - beløpet ikke skal betales tilbake -
  • -
    - - Saken blir automatisk behandlet og bruker får et vedtak om ikke tilbakebetaling. Merk at - det ikke er mulig å endre brevmottaker på denne typen tilbakekrevingsbehandling. Hvis du - skal endre brevmottaker, må du velge et annet alternativ. - - -); - const OpprettMedVarsel = () => ( <> From 2dee37a067896416e0c09ee9d2beb97bf23b4450 Mon Sep 17 00:00:00 2001 From: Kevin Sillerud Date: Fri, 24 Jan 2025 09:37:25 +0100 Subject: [PATCH 05/10] Ta i bruk tilbakekreving som er flyttet til nytt nais team i preprod --- "src/frontend/App/utils/milj\303\270.ts" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/frontend/App/utils/milj\303\270.ts" "b/src/frontend/App/utils/milj\303\270.ts" index ffe7464b1..b9ca0e654 100644 --- "a/src/frontend/App/utils/milj\303\270.ts" +++ "b/src/frontend/App/utils/milj\303\270.ts" @@ -3,7 +3,7 @@ export const erProd = (): boolean => window.location.host === 'ensligmorellerfar export const tilbakekrevingBaseUrl = (): string => erProd() ? 'https://familietilbakekreving.intern.nav.no' - : 'https://familie-tilbake-frontend.ansatt.dev.nav.no'; + : 'https://tilbakekreving.ansatt.dev.nav.no'; export const klageBaseUrl = (): string => erProd() ? 'https://familie-klage.intern.nav.no' : 'https://familie-klage.ansatt.dev.nav.no'; From bed6a332d4bba9ddb98b0df657c335f875a10022 Mon Sep 17 00:00:00 2001 From: Charlie Midtlyng Date: Fri, 24 Jan 2025 11:10:30 +0100 Subject: [PATCH 06/10] =?UTF-8?q?Skal=20ha=20bold=20som=20valg=20i=20quill?= =?UTF-8?q?=20editor,=20skal=20ha=20tooltips=20p=C3=A5=20editor-ikoner=20o?= =?UTF-8?q?g=20skal=20vise=20et=20varsel=20i=20lesemodus=20dersom=20saksbe?= =?UTF-8?q?handler=20har=20overstyrt=20delmaler=20i=20vedtaksbrevet=20(#29?= =?UTF-8?q?94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/Felles/HtmlEditor/HtmlEditor.tsx | 43 +++++++++++++++++-- .../Komponenter/Behandling/Brev/BrevFane.tsx | 4 ++ .../Brev/OverstyrtBrevmalVarsel.tsx | 40 +++++++++++++++++ 3 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 src/frontend/Komponenter/Behandling/Brev/OverstyrtBrevmalVarsel.tsx diff --git a/src/frontend/Felles/HtmlEditor/HtmlEditor.tsx b/src/frontend/Felles/HtmlEditor/HtmlEditor.tsx index 18d018bc2..df40f033e 100644 --- a/src/frontend/Felles/HtmlEditor/HtmlEditor.tsx +++ b/src/frontend/Felles/HtmlEditor/HtmlEditor.tsx @@ -3,7 +3,8 @@ import React, { forwardRef, useEffect, useLayoutEffect, useRef, useState } from import 'quill/dist/quill.snow.css'; import { BlockBlot } from 'parchment'; import { AlertError } from '../Visningskomponenter/Alerts'; - +import styled from 'styled-components'; +import { ASurfaceDefault, ATextSubtle } from '@navikt/ds-tokens/dist/tokens'; type Props = { defaultValue?: string; onTextChange: (html: string, renTekst: string) => void; @@ -18,6 +19,42 @@ Block.tagName = 'div'; // @ts-expect-error Utypet kode - usikkert hvordan vi får dette til Quill.register(Block); +const HtmlEditorWrapper = styled.div` + .ql-bold { + &:hover::after, + &:active::after, + &:focus::after { + content: 'Fet skrift'; + } + } + .ql-clean { + &:hover::after, + &:active::after, + &:focus::after { + content: 'Fjern formattering'; + } + } + .ql-list { + &:hover::after, + &:active::after, + &:focus::after { + content: 'Liste'; + } + } + .ql-list, + .ql-bold, + .ql-clean { + &:hover::after, + &:active::after, + &:focus::after { + font-size: 0.8rem; + background-color: ${ASurfaceDefault}; + color: ${ATextSubtle} !important; + white-space: nowrap; + padding: 0.3rem; + } + } +`; export const HtmlEditor = forwardRef(({ defaultValue, onTextChange }: Props, ref) => { const defaultValueRef = useRef(defaultValue); const containerRef = useRef(null); @@ -38,7 +75,7 @@ export const HtmlEditor = forwardRef(({ defaultValue, onTextChange }: Props, ref settFeilVedOpprettelse(false); const editorContainer = container.appendChild(container.ownerDocument.createElement('div')); - const verktøySomSkalMed = [[{ list: 'bullet' }], ['clean']]; + const verktøySomSkalMed = [[{ list: 'bullet' }], ['bold'], ['clean']]; const quill = new Quill(editorContainer, { theme: 'snow', @@ -76,7 +113,7 @@ export const HtmlEditor = forwardRef(({ defaultValue, onTextChange }: Props, ref return feilVedOpprettelse ? ( En uventet feil oppstod ved opprettelse av tekstfelt. ) : ( -
    + ); }); diff --git a/src/frontend/Komponenter/Behandling/Brev/BrevFane.tsx b/src/frontend/Komponenter/Behandling/Brev/BrevFane.tsx index 836a67468..92b9bad7a 100644 --- a/src/frontend/Komponenter/Behandling/Brev/BrevFane.tsx +++ b/src/frontend/Komponenter/Behandling/Brev/BrevFane.tsx @@ -15,6 +15,7 @@ import { AlertInfo } from '../../../Felles/Visningskomponenter/Alerts'; import { oppgaveSomSkalOpprettesTilTekst } from '../Totrinnskontroll/oppgaveForOpprettelseTyper'; import { HøyreKolonne, StyledBrev, VenstreKolonne } from './StyledBrev'; import { Behandling } from '../../../App/typer/fagsak'; +import { OverstyrtBrevmalVarsel } from './OverstyrtBrevmalVarsel'; const InfostripeGruppe = styled.div` display: flex; @@ -94,6 +95,9 @@ export const BrevFane: React.FC = ({ behandling }) => { )} )} + {!behandlingErRedigerbar && ( + + )} {behandlingErRedigerbar && ( = ({ behandlingId }) => { + const { mellomlagretBrev } = useMellomlagringBrev(behandlingId); + + return ( + + {({ mellomlagretBrev }) => { + const brevVerdier = + mellomlagretBrev && mellomlagretBrev.brevverdier + ? (JSON.parse(mellomlagretBrev.brevverdier) as IBrevverdier) + : undefined; + const delmalNøkler = Object.keys( + brevVerdier?.overstyrteDelmalerFraMellomlager || {} + ); + const harOverstyrtBrevmaler = delmalNøkler + .filter( + (delmalKey) => + brevVerdier?.overstyrteDelmalerFraMellomlager[delmalKey].skalOverstyre + ) + .some( + (delmalKey) => brevVerdier?.valgteDelmalerFraMellomlager[delmalKey] === true + ); + + return harOverstyrtBrevmaler ? ( + + Saksbehandler har overstyrt en eller flere brevmaler i vedtaksbrevet. + + ) : null; + }} + + ); +}; From 4bf7b1e578eba227fb3661f788cd5fc72b243600 Mon Sep 17 00:00:00 2001 From: gunnsteingarmo <141132903+gunnsteingarmo@users.noreply.github.com> Date: Fri, 24 Jan 2025 12:28:08 +0100 Subject: [PATCH 07/10] =?UTF-8?q?=C3=98nsker=20konsekvent=20import/bruk=20?= =?UTF-8?q?av=20design=20tokens=20fra=20Aksel.=20Endret=20fra=20=E2=80=A6?= =?UTF-8?q?=20(#2995)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Ønsker konsekvent import/bruk av design tokens fra Aksel. Endret fra css import til JS import av design tokens. --- .../HeaderMedS\303\270k/S\303\270keresultatVisning.tsx" | 7 ++++--- src/frontend/Felles/Personopplysninger/TabellWrapper.tsx | 3 ++- .../Felles/Visningskomponenter/ToKolonnerLayout.tsx | 3 ++- .../Behandling/H\303\270yremeny/Dokumentliste.tsx" | 3 ++- .../Aleneomsorg/BostedMedReadMore.tsx" | 3 ++- .../Inngangsvilk\303\245r/Medlemskap/Utenlandsopphold.tsx" | 3 ++- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git "a/src/frontend/Felles/HeaderMedS\303\270k/S\303\270keresultatVisning.tsx" "b/src/frontend/Felles/HeaderMedS\303\270k/S\303\270keresultatVisning.tsx" index 4a0a0dc49..6dbff83d9 100644 --- "a/src/frontend/Felles/HeaderMedS\303\270k/S\303\270keresultatVisning.tsx" +++ "b/src/frontend/Felles/HeaderMedS\303\270k/S\303\270keresultatVisning.tsx" @@ -5,15 +5,16 @@ import { BodyShort, HStack } from '@navikt/ds-react'; import { formaterPersonIdent } from '@navikt/familie-header/dist/søk/formatter'; import { AlertWarning } from '../Visningskomponenter/Alerts'; import { adressebeskyttelsestyper } from './adressebeskyttelsegradering'; +import { AFontSizeSmall, AGray100, AOrange300 } from '@navikt/ds-tokens/dist/tokens'; const ResultatElement = styled.div<{ $fokus: boolean }>` list-style-type: none; padding: 0.5rem; - outline: ${({ $fokus }) => ($fokus ? `3px solid var(--a-orange-300)` : '')}; + outline: ${({ $fokus }) => ($fokus ? `3px solid ${AOrange300}` : '')}; border-radius: 8px; &:hover { - background-color: var(--a-gray-100); + background-color: ${AGray100}; cursor: pointer; } `; @@ -24,7 +25,7 @@ const ResultatIkonOgRolle = styled.div` padding-right: 1rem; align-items: center; min-width: 3.5rem; - font-size: var(--a-font-size-small); + font-size: ${AFontSizeSmall}; svg { text-align: center; diff --git a/src/frontend/Felles/Personopplysninger/TabellWrapper.tsx b/src/frontend/Felles/Personopplysninger/TabellWrapper.tsx index 6505eb6cb..e7ceff5e1 100644 --- a/src/frontend/Felles/Personopplysninger/TabellWrapper.tsx +++ b/src/frontend/Felles/Personopplysninger/TabellWrapper.tsx @@ -1,12 +1,13 @@ import styled from 'styled-components'; import React from 'react'; import { Table } from '@navikt/ds-react'; +import { AFontSizeMedium } from '@navikt/ds-tokens/dist/tokens'; export const SmallTable = styled(Table).attrs({ size: 'small' })` max-width: max-content; th, td { - font-size: var(--a-font-size-medium); + font-size: ${AFontSizeMedium}; } `; diff --git a/src/frontend/Felles/Visningskomponenter/ToKolonnerLayout.tsx b/src/frontend/Felles/Visningskomponenter/ToKolonnerLayout.tsx index 9652340fb..bd7f53e9c 100644 --- a/src/frontend/Felles/Visningskomponenter/ToKolonnerLayout.tsx +++ b/src/frontend/Felles/Visningskomponenter/ToKolonnerLayout.tsx @@ -1,10 +1,11 @@ import React, { ReactNode } from 'react'; import styled from 'styled-components'; +import { ABorderSubtle } from '@navikt/ds-tokens/dist/tokens'; const Container = styled.div<{ $skillelinje?: boolean }>` display: flex; margin: 2rem; - border-bottom: ${(props) => (props.$skillelinje ? '3px solid var(--a-border-subtle)' : 'none')}; + border-bottom: ${(props) => (props.$skillelinje ? `3px solid ${ABorderSubtle}` : 'none')}; @media (max-width: 1600px) { flex-direction: column; diff --git "a/src/frontend/Komponenter/Behandling/H\303\270yremeny/Dokumentliste.tsx" "b/src/frontend/Komponenter/Behandling/H\303\270yremeny/Dokumentliste.tsx" index 9121280f9..d80dc63f0 100644 --- "a/src/frontend/Komponenter/Behandling/H\303\270yremeny/Dokumentliste.tsx" +++ "b/src/frontend/Komponenter/Behandling/H\303\270yremeny/Dokumentliste.tsx" @@ -4,13 +4,14 @@ import { BodyShort, Button, Tag } from '@navikt/ds-react'; import { LogiskeVedlegg } from './LogiskeVedlegg'; import { Journalposttype } from '../../../App/typer/journalføring'; import { LogiskVedlegg } from '../../../App/typer/dokumentliste'; +import { AFontWeightRegular } from '@navikt/ds-tokens/dist/tokens'; const StyledDokumentListe = styled.ul` padding: 0; margin: 0 1rem; list-style-type: none; span { - font-weight: var(--a-font-weight-regular); + font-weight: ${AFontWeightRegular}; } `; diff --git "a/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Aleneomsorg/BostedMedReadMore.tsx" "b/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Aleneomsorg/BostedMedReadMore.tsx" index c0a3612a3..1b7e51445 100644 --- "a/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Aleneomsorg/BostedMedReadMore.tsx" +++ "b/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Aleneomsorg/BostedMedReadMore.tsx" @@ -3,9 +3,10 @@ import React, { FC } from 'react'; import styled from 'styled-components'; import { IPersonalia } from '../vilkår'; import { IBarnMedSamvær } from './typer'; +import { ATextDefault } from '@navikt/ds-tokens/dist/tokens'; const StyledReadMore = styled(ReadMore)` - --ac-read-more-text: var(--a-text-default); + --ac-read-more-text: ${ATextDefault}; `; const BostedMedReadMore: FC<{ diff --git "a/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Medlemskap/Utenlandsopphold.tsx" "b/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Medlemskap/Utenlandsopphold.tsx" index bafe2753b..c19d2555b 100644 --- "a/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Medlemskap/Utenlandsopphold.tsx" +++ "b/src/frontend/Komponenter/Behandling/Inngangsvilk\303\245r/Medlemskap/Utenlandsopphold.tsx" @@ -6,6 +6,7 @@ import { BodyShort, Label, VStack } from '@navikt/ds-react'; import styled from 'styled-components'; import { VilkårInfoIkon } from '../../Vilkårpanel/VilkårInformasjonKomponenter'; import { formaterNullableIsoDato } from '../../../../App/utils/formatter'; +import { AFontSizeMedium } from '@navikt/ds-tokens/dist/tokens'; interface Props { utenlandsopphold: IUtenlandsopphold[]; @@ -18,7 +19,7 @@ const PeriodeStyling = styled(BodyShort)` `; const Grid = styled.div` - font-size: var(--a-font-size-medium); + font-size: ${AFontSizeMedium}; display: grid; grid-template-columns: auto 1fr; gap: 1rem; From 0c92676296be3d7301b5144e855b6cc3a120ad05 Mon Sep 17 00:00:00 2001 From: Viktor Solberg Date: Fri, 24 Jan 2025 15:57:53 +0100 Subject: [PATCH 08/10] Feat/revurdering nytt barn (#2992) * skal kunne legge til terminbarn for revurdering ved nye opplysninger * oppdaterer visningstekst for terminbarnskjema etter tilbakemeldinger fra saksbehandler * renamer RevurderingInnhold til RevurderingPayload for lesbarhet --- src/frontend/App/typer/revurderingstype.ts | 2 +- ...prettF\303\270rstegangsbehandlingSide.tsx" | 3 +- .../TerminBarnSkjema.tsx" | 18 +++++++---- .../Standard/Journalf\303\270ringSide.tsx" | 2 ++ .../BehandlingstypeSwitch.tsx | 4 +-- .../OpprettBehandlingModal.tsx | 8 ++--- .../OpprettBehandling/OpprettRevurdering.tsx | 30 ++++++++++++------- 7 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/frontend/App/typer/revurderingstype.ts b/src/frontend/App/typer/revurderingstype.ts index 95a933929..89f496784 100644 --- a/src/frontend/App/typer/revurderingstype.ts +++ b/src/frontend/App/typer/revurderingstype.ts @@ -13,7 +13,7 @@ export interface BarnForRevurdering { fødselsdato: string; } -export interface RevurderingInnhold { +export interface RevurderingPayload { fagsakId: string; behandlingsårsak: Behandlingsårsak; kravMottatt: string; diff --git "a/src/frontend/Komponenter/Behandling/F\303\270rstegangsbehandling/OpprettF\303\270rstegangsbehandlingSide.tsx" "b/src/frontend/Komponenter/Behandling/F\303\270rstegangsbehandling/OpprettF\303\270rstegangsbehandlingSide.tsx" index cda5f8ab1..822f4adad 100644 --- "a/src/frontend/Komponenter/Behandling/F\303\270rstegangsbehandling/OpprettF\303\270rstegangsbehandlingSide.tsx" +++ "b/src/frontend/Komponenter/Behandling/F\303\270rstegangsbehandling/OpprettF\303\270rstegangsbehandlingSide.tsx" @@ -157,7 +157,8 @@ export const OpprettFørstegangsbehandlingSide = () => {
    + + + + ); +}; diff --git a/src/frontend/Komponenter/Behandling/Totrinnskontroll/OppgaverForOpprettelse.tsx b/src/frontend/Komponenter/Behandling/Totrinnskontroll/OppgaverForOpprettelse.tsx index 85a6e216f..8f9caf9b3 100644 --- a/src/frontend/Komponenter/Behandling/Totrinnskontroll/OppgaverForOpprettelse.tsx +++ b/src/frontend/Komponenter/Behandling/Totrinnskontroll/OppgaverForOpprettelse.tsx @@ -1,8 +1,5 @@ import * as React from 'react'; import { Checkbox, CheckboxGroup } from '@navikt/ds-react'; -import { Behandling } from '../../../App/typer/fagsak'; -import { IOppgaverForOpprettelse } from '../../../App/hooks/useHentOppgaverForOpprettelse'; -import { AlertError } from '../../../Felles/Visningskomponenter/Alerts'; import styled from 'styled-components'; import { AGray800 } from '@navikt/ds-tokens/dist/tokens'; import { @@ -23,22 +20,18 @@ const CheckboxGruppe = styled(CheckboxGroup)` `; const OppgaverForOpprettelse: React.FC<{ - behandling: Behandling; - oppgaverForOpprettelse: IOppgaverForOpprettelse; -}> = ({ oppgaverForOpprettelse }) => { - const { - feilmelding, - oppgavetyperSomKanOpprettes, - oppgavetyperSomSkalOpprettes, - settOppgavetyperSomSkalOpprettes, - } = oppgaverForOpprettelse; - - if (feilmelding) { - return {feilmelding}; - } - - if (oppgavetyperSomKanOpprettes.length === 0) { - return null; + oppgavetyperSomKanOpprettes: OppgaveTypeForOpprettelse[]; + oppgavetyperSomSkalOpprettes: OppgaveTypeForOpprettelse[]; + settOppgavetyperSomSkalOpprettes: React.Dispatch< + React.SetStateAction + >; +}> = ({ + oppgavetyperSomKanOpprettes, + oppgavetyperSomSkalOpprettes, + settOppgavetyperSomSkalOpprettes, +}) => { + if (!oppgavetyperSomKanOpprettes || oppgavetyperSomKanOpprettes.length === 0) { + return; } return ( diff --git a/src/frontend/Komponenter/Behandling/Totrinnskontroll/SendTilBeslutterFooter.tsx b/src/frontend/Komponenter/Behandling/Totrinnskontroll/SendTilBeslutterFooter.tsx index 8dccde92c..8b9b3d5de 100644 --- a/src/frontend/Komponenter/Behandling/Totrinnskontroll/SendTilBeslutterFooter.tsx +++ b/src/frontend/Komponenter/Behandling/Totrinnskontroll/SendTilBeslutterFooter.tsx @@ -12,10 +12,11 @@ import { ABorderStrong } from '@navikt/ds-tokens/dist/tokens'; import { useNavigate } from 'react-router-dom'; import OppgaverForOpprettelse from './OppgaverForOpprettelse'; import { Behandling } from '../../../App/typer/fagsak'; -import { IOppgaverForOpprettelse } from '../../../App/hooks/useHentOppgaverForOpprettelse'; import { OppgaveTypeForOpprettelse } from './oppgaveForOpprettelseTyper'; -import { harVerdi } from '../../../App/utils/utils'; import { ModalState } from '../Modal/NyEierModal'; +import { useToggles } from '../../../App/context/TogglesContext'; +import { ToggleName } from '../../../App/context/toggles'; +import { ModalOpprettOgFerdigstilleOppgaver } from './ModalOpprettOgFerdigstilleOppgaver'; const Footer = styled.footer` width: 100%; @@ -39,20 +40,39 @@ const FlexBox = styled.div` export interface SendTilBeslutterRequest { oppgavetyperSomSkalOpprettes: OppgaveTypeForOpprettelse[]; + årForInntektskontrollSelvstendigNæringsdrivende?: number; } +const utledDefaultOppgavetyperSomSkalOpprettes = ( + oppgaveTyperSomKanOpprettes: OppgaveTypeForOpprettelse[] | undefined +) => { + if (!oppgaveTyperSomKanOpprettes) { + return []; + } + + return oppgaveTyperSomKanOpprettes.includes( + OppgaveTypeForOpprettelse.INNTEKTSKONTROLL_1_ÅR_FREM_I_TID + ) + ? [OppgaveTypeForOpprettelse.INNTEKTSKONTROLL_1_ÅR_FREM_I_TID] + : []; +}; + const SendTilBeslutterFooter: React.FC<{ behandling: Behandling; kanSendesTilBeslutter?: boolean; behandlingErRedigerbar: boolean; ferdigstillUtenBeslutter: boolean; - oppgaverForOpprettelse?: IOppgaverForOpprettelse; + oppgavetyperSomKanOpprettes?: OppgaveTypeForOpprettelse[]; + hentOppgaverForOpprettelseCallback?: { + rerun: () => void; + }; }> = ({ behandling, kanSendesTilBeslutter, behandlingErRedigerbar, ferdigstillUtenBeslutter, - oppgaverForOpprettelse, + oppgavetyperSomKanOpprettes, + hentOppgaverForOpprettelseCallback, }) => { const { axiosRequest } = useApp(); const navigate = useNavigate(); @@ -64,9 +84,20 @@ const SendTilBeslutterFooter: React.FC<{ hentBehandlingshistorikk, settNyEierModalState, } = useBehandling(); + const { toggles } = useToggles(); const [laster, settLaster] = useState(false); const [feilmelding, settFeilmelding] = useState(); const [visModal, settVisModal] = useState(false); + const [visMarkereGodkjenneVedtakOppgaveModal, settVisMarkereGodkjenneVedtakOppgaveModal] = + useState(false); + const [oppgavetyperSomSkalOpprettes, settOppgavetyperSomSkalOpprettes] = useState< + OppgaveTypeForOpprettelse[] + >(utledDefaultOppgavetyperSomSkalOpprettes(oppgavetyperSomKanOpprettes)); + const [ + årForInntektskontrollSelvstendigNæringsdrivende, + settÅrForInntektskontrollSelvstendigNæringsdrivende, + ] = useState(); + const sendTilBeslutter = () => { settLaster(true); settFeilmelding(undefined); @@ -74,9 +105,9 @@ const SendTilBeslutterFooter: React.FC<{ method: 'POST', url: `/familie-ef-sak/api/vedtak/${behandling.id}/send-til-beslutter`, data: { - oppgavetyperSomSkalOpprettes: oppgaverForOpprettelse - ? oppgaverForOpprettelse.oppgavetyperSomSkalOpprettes - : [], + oppgavetyperSomSkalOpprettes: oppgavetyperSomSkalOpprettes, + årForInntektskontrollSelvstendigNæringsdrivende: + årForInntektskontrollSelvstendigNæringsdrivende, }, }) .then((res: RessursSuksess | RessursFeilet) => { @@ -85,6 +116,8 @@ const SendTilBeslutterFooter: React.FC<{ hentVedtak.rerun(); hentAnsvarligSaksbehandler.rerun(); hentTotrinnskontroll.rerun(); + settVisMarkereGodkjenneVedtakOppgaveModal(false); + hentOppgaverForOpprettelseCallback?.rerun(); settVisModal(true); } else { settFeilmelding(res.frontendFeilmelding); @@ -95,6 +128,9 @@ const SendTilBeslutterFooter: React.FC<{ .finally(() => settLaster(false)); }; + const toggleVisKnappForModal = + toggles[ToggleName.visMarkereGodkjenneVedtakOppgaveModal] || false; + const lukkModal = () => { settVisModal(false); hentBehandling.rerun(); @@ -108,6 +144,11 @@ const SendTilBeslutterFooter: React.FC<{ ? 'Vedtaket er ferdigstilt' : 'Vedtaket er sendt til beslutter'; + const skalViseKnappForModal = + toggleVisKnappForModal && + oppgavetyperSomKanOpprettes && + oppgavetyperSomKanOpprettes.length > 0; + return ( <> {behandlingErRedigerbar && ( @@ -117,20 +158,28 @@ const SendTilBeslutterFooter: React.FC<{ Vedtaket vil ikke bli sendt til totrinnskontroll )} - {oppgaverForOpprettelse && ( + {/* TODO: Dette skal fjernes etter at ny modal er togglet på for alle */} + {oppgavetyperSomKanOpprettes && ( )} + {skalViseKnappForModal && ( + + )}