From bd2e17ac1437a9c937633b2d168e429ae39a5f57 Mon Sep 17 00:00:00 2001 From: Viktor Date: Mon, 9 Oct 2023 13:54:14 +0200 Subject: [PATCH 1/3] =?UTF-8?q?tilrettelegger=20for=20feature-toggling=20a?= =?UTF-8?q?v=20journalf=C3=B8ring=202.0=20i=20prod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/App.tsx | 16 +- .../Standard/Journalf\303\270ringAppNy.tsx" | 267 ++++++++++++++++++ 2 files changed, 281 insertions(+), 2 deletions(-) create mode 100644 "src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" diff --git a/src/frontend/App.tsx b/src/frontend/App.tsx index a9092c64d..b569572c6 100644 --- a/src/frontend/App.tsx +++ b/src/frontend/App.tsx @@ -5,7 +5,7 @@ import { AppProvider, useApp } from './App/context/AppContext'; import { hentInnloggetBruker } from './App/api/saksbehandler'; import { ISaksbehandler } from './App/typer/saksbehandler'; import ErrorBoundary from './Felles/ErrorBoundary/ErrorBoundary'; -import { TogglesProvider } from './App/context/TogglesContext'; +import { TogglesProvider, useToggles } from './App/context/TogglesContext'; import { HeaderMedSøk } from './Felles/HeaderMedSøk/HeaderMedSøk'; import { BehandlingContainer } from './Komponenter/Behandling/BehandlingContainer'; import { OppgavebenkApp } from './Komponenter/Oppgavebenk/OppgavebenkApp'; @@ -36,6 +36,8 @@ import UlagretDataModal from './Felles/Visningskomponenter/UlagretDataModal'; import { loggBesøkEvent } from './App/utils/amplitude/amplitudeLoggEvents'; import { BesøkEvent } from './App/utils/amplitude/typer'; import Innloggingsfeilmelding from './Felles/Varsel/Innloggingsfeilmelding'; +import { ToggleName } from './App/context/toggles'; +import { JournalføringAppNy } from './Komponenter/Journalføring/Standard/JournalføringAppNy'; const Innhold = styled(BodyLong)` margin-top: 2rem; @@ -78,6 +80,7 @@ const AppRoutes: React.FC<{ innloggetSaksbehandler: ISaksbehandler }> = ({ innloggetSaksbehandler, }) => { const { autentisert } = useApp(); + const { toggles } = useToggles(); const router = createBrowserRouter( createRoutesFromElements( @@ -92,7 +95,16 @@ const AppRoutes: React.FC<{ innloggetSaksbehandler: ISaksbehandler }> = ({ /> } /> } /> - } /> + + ) : ( + + ) + } + /> } /> } /> } /> diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" new file mode 100644 index 000000000..0c6457e16 --- /dev/null +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" @@ -0,0 +1,267 @@ +import React, { useEffect, useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { erAvTypeFeil, RessursStatus } from '../../../App/typer/ressurs'; +import styled from 'styled-components'; +import Brukerinfo from '../Felles/Brukerinfo'; +import DokumentVisning from '../Felles/Dokumentvisning'; +import { + JournalføringStateRequest, + useJournalføringState, +} from '../../../App/hooks/useJournalføringState'; +import { useHentDokument } from '../../../App/hooks/useHentDokument'; +import { useHentFagsak } from '../../../App/hooks/useHentFagsak'; +import { useApp } from '../../../App/context/AppContext'; +import { + hentFraLocalStorage, + lagreTilLocalStorage, + oppgaveRequestKey, +} from '../../Oppgavebenk/oppgavefilterStorage'; +import BehandlingInnold from './Behandling'; +import { UtledEllerVelgFagsak } from '../Felles/UtledEllerVelgFagsak'; +import { BodyLong, Button, Fieldset, Heading } from '@navikt/ds-react'; +import LeggTilBarnSomSkalFødes from '../../Behandling/Førstegangsbehandling/LeggTilBarnSomSkalFødes'; +import VelgUstrukturertDokumentasjonType, { + UstrukturertDokumentasjonType, +} from './VelgUstrukturertDokumentasjonType'; +import { VelgFagsakForIkkeSøknad } from '../Felles/VelgFagsakForIkkeSøknad'; +import EttersendingMedNyeBarn from './EttersendingMedNyeBarn'; +import { ModalWrapper } from '../../../Felles/Modal/ModalWrapper'; +import { AlertError } from '../../../Felles/Visningskomponenter/Alerts'; +import { harValgtNyBehandling, utledKolonneTittel } from '../Felles/utils'; +import JournalføringWrapper, { + FlexKnapper, + Høyrekolonne, + JournalføringAppProps, + Kolonner, + Venstrekolonne, +} from '../Felles/JournalføringWrapper'; +import JournalføringPdfVisning from '../Felles/JournalføringPdfVisning'; +import JournalpostTittelOgLenke from '../Felles/JournalpostTittelOgLenke'; +import { ÅpneKlager } from '../../Personoversikt/Klage/ÅpneKlager'; +import { alleBehandlingerErFerdigstiltEllerSattPåVent } from '../../Personoversikt/utils'; +import { validerJournalføringState } from '../Felles/JournalføringValidering'; + +const ModalTekst = styled(BodyLong)` + margin-top: 2rem; +`; + +export const JournalføringAppNy: React.FC = () => { + return ; +}; + +const JournalføringAppContent: React.FC = ({ + oppgaveId, + journalResponse, +}) => { + const { innloggetSaksbehandler } = useApp(); + const navigate = useNavigate(); + + const journalpostId = journalResponse.journalpost.journalpostId; + + const journalpostState: JournalføringStateRequest = useJournalføringState( + oppgaveId, + journalpostId + ); + const hentDokumentResponse = useHentDokument(journalResponse.journalpost); + + const { hentFagsak, fagsak } = useHentFagsak(); + const [feilmelding, settFeilmelding] = useState(''); + + useEffect(() => { + if (journalpostState.innsending.status === RessursStatus.SUKSESS) { + const lagredeOppgaveFiltreringer = hentFraLocalStorage( + oppgaveRequestKey(innloggetSaksbehandler.navIdent), + {} + ); + + lagreTilLocalStorage(oppgaveRequestKey(innloggetSaksbehandler.navIdent), { + ...lagredeOppgaveFiltreringer, + ident: journalResponse.personIdent, + }); + navigate('/oppgavebenk'); + } + }, [innloggetSaksbehandler, journalResponse, journalpostState, navigate]); + + useEffect(() => { + if (fagsak.status === RessursStatus.SUKSESS) { + journalpostState.settFagsakId(fagsak.data.id); + settFeilmelding(''); + } + // eslint-disable-next-line + }, [fagsak]); + + const skalBeOmBekreftelse = (erNyBehandling: boolean) => { + if (!erNyBehandling) { + return journalResponse.harStrukturertSøknad || erPapirsøknad; + } else { + return false; + } + }; + + const kanLeggeTilBarnSomSkalFødes = () => { + const erNyBehandling = + journalpostState.behandling && + journalpostState.behandling.behandlingstype && + !journalpostState.behandling.behandlingsId; + const harIkkeStrukturertSøknad = !journalResponse.harStrukturertSøknad; + return ( + erNyBehandling && + harIkkeStrukturertSøknad && + journalpostState.ustrukturertDokumentasjonType === + UstrukturertDokumentasjonType.PAPIRSØKNAD + ); + }; + + const skalVelgeVilkårsbehandleNyeBarn = + journalpostState.ustrukturertDokumentasjonType === + UstrukturertDokumentasjonType.ETTERSENDING && + harValgtNyBehandling(journalpostState.behandling); + + const erPapirsøknad = + journalpostState.ustrukturertDokumentasjonType === + UstrukturertDokumentasjonType.PAPIRSØKNAD; + + const journalFør = () => { + settFeilmelding(''); + if (fagsak.status !== RessursStatus.SUKSESS) { + settFeilmelding('Henting av fagsak feilet, relast siden'); + return; + } + const feilmeldingFraValidering = validerJournalføringState( + journalResponse, + journalpostState, + alleBehandlingerErFerdigstiltEllerSattPåVent(fagsak.data) + ); + if (feilmeldingFraValidering) { + settFeilmelding(feilmeldingFraValidering); + } else if (skalBeOmBekreftelse(harValgtNyBehandling(journalpostState.behandling))) { + journalpostState.settVisBekreftelsesModal(true); + } else { + journalpostState.fullførJournalføring(); + } + }; + + return ( + <> + + + + {utledKolonneTittel(journalResponse.journalpost.behandlingstema, 'vanlig')} + + + Journalfør + + {fagsak.status === RessursStatus.SUKSESS && ( + <ÅpneKlager fagsakPersonId={fagsak.data.fagsakPersonId} /> + )} + + {!journalResponse.harStrukturertSøknad ? ( + <> + + + + ) : ( + + )} + + +
+ + {kanLeggeTilBarnSomSkalFødes() && ( + + )} + {skalVelgeVilkårsbehandleNyeBarn && + fagsak.status === RessursStatus.SUKSESS && ( + + )} +
+ {erAvTypeFeil(journalpostState.innsending) && ( + {journalpostState.innsending.frontendFeilmelding} + )} + + Tilbake til oppgavebenk + + +
+ + + +
+ + + ); +}; + +const BekreftJournalføringModal: React.FC<{ + journalpostState: JournalføringStateRequest; +}> = ({ journalpostState }) => { + return ( + journalpostState.settVisBekreftelsesModal(false)} + aksjonsknapper={{ + hovedKnapp: { + onClick: () => { + journalpostState.settVisBekreftelsesModal(false); + journalpostState.fullførJournalføring(); + }, + tekst: 'Journalfør allikevel', + }, + lukkKnapp: { + onClick: () => journalpostState.settVisBekreftelsesModal(false), + tekst: 'Tilbake', + }, + }} + ariaLabel={'Bekreft journalføring av oppgave, eller avbryt'} + > + + Journalposten har en søknad tilknyttet seg. Er du sikker på at du vil journalføre + uten å lage en ny behandling? + + + ); +}; From f611781d8db678600f35ceb0f4daae5e56bcc153 Mon Sep 17 00:00:00 2001 From: Viktor Date: Tue, 10 Oct 2023 16:05:09 +0200 Subject: [PATCH 2/3] skal vise et ekspanderbart panel som tilbyr informasjon om journalposten. Mangler noe logikk for utledning av info og endring av journalpost --- src/frontend/App/hooks/useHentJournalpost.ts | 10 +- src/frontend/App/typer/behandlingstema.ts | 15 ++ .../App/typer/journalf\303\270ring.ts" | 2 +- .../Admin/Journalf\303\270ringAdmin.tsx" | 4 +- .../Felles/Journalf\303\270ringValidering.ts" | 8 +- .../Felles/Journalf\303\270ringWrapper.tsx" | 4 +- .../Felles/JournalpostTittelOgLenke.tsx" | 4 +- .../Felles/UtledEllerVelgFagsak.tsx" | 4 +- .../VelgFagsakForIkkeS\303\270knad.tsx" | 4 +- .../Journalf\303\270ring/Felles/utils.ts" | 4 +- .../Standard/Journalf\303\270ringAppNy.tsx" | 235 +++--------------- .../Standard/JournalpostPanel.tsx" | 105 ++++++++ .../Komponenter/Oppgavebenk/typer/oppgave.ts | 6 +- 13 files changed, 176 insertions(+), 229 deletions(-) create mode 100644 "src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" diff --git a/src/frontend/App/hooks/useHentJournalpost.ts b/src/frontend/App/hooks/useHentJournalpost.ts index 398e707f9..2781d773f 100644 --- a/src/frontend/App/hooks/useHentJournalpost.ts +++ b/src/frontend/App/hooks/useHentJournalpost.ts @@ -1,20 +1,20 @@ import { byggHenterRessurs, byggTomRessurs, Ressurs } from '../typer/ressurs'; import { useApp } from '../context/AppContext'; import { useCallback, useMemo, useState } from 'react'; -import { IJojurnalpostResponse } from '../typer/journalføring'; +import { IJournalpostResponse } from '../typer/journalføring'; import { AxiosRequestConfig } from 'axios'; import { OrNothing } from './felles/useSorteringState'; interface HentJournalpostResponse { hentJournalPost: () => void; - journalResponse: Ressurs; + journalResponse: Ressurs; } export const useHentJournalpost = ( journalpostIdParam: OrNothing ): HentJournalpostResponse => { const { axiosRequest } = useApp(); - const [journalResponse, settJournalResponse] = useState>( + const [journalResponse, settJournalResponse] = useState>( byggTomRessurs() ); @@ -28,8 +28,8 @@ export const useHentJournalpost = ( const hentJournalPost = useCallback(() => { settJournalResponse(byggHenterRessurs()); - axiosRequest(hentJournalpostConfig).then( - (res: Ressurs) => settJournalResponse(res) + axiosRequest(hentJournalpostConfig).then( + (res: Ressurs) => settJournalResponse(res) ); }, [axiosRequest, hentJournalpostConfig]); diff --git a/src/frontend/App/typer/behandlingstema.ts b/src/frontend/App/typer/behandlingstema.ts index ebddfc039..38f8aa7b3 100644 --- a/src/frontend/App/typer/behandlingstema.ts +++ b/src/frontend/App/typer/behandlingstema.ts @@ -48,6 +48,21 @@ export const behandlingstemaTilStønadstype = ( } }; +// TODO: Usikker på denne - kan man få noe annet enn Enslig forsørger? +export const behandlingstemaTilTemaTekst = ( + behandlingstema: Behandlingstema | undefined +): string | undefined => { + switch (behandlingstema) { + case 'ab0071': + case 'ab0177': + case 'ab0028': + case 'ab0007': + return 'Enslig forsørger'; + default: + return undefined; + } +}; + export const oppgaveBehandlingstypeTilTekst: Record = { ae0161: 'Tilbakekreving', ae0058: 'Klage', diff --git "a/src/frontend/App/typer/journalf\303\270ring.ts" "b/src/frontend/App/typer/journalf\303\270ring.ts" index d4716f71a..1007d1397 100644 --- "a/src/frontend/App/typer/journalf\303\270ring.ts" +++ "b/src/frontend/App/typer/journalf\303\270ring.ts" @@ -103,7 +103,7 @@ export const avsenderMottakerIdTypeTilTekst: Record { navigate('/oppgavebenk'); }; - const sendInn = (journalpostResponse: IJojurnalpostResponse, fagsakId: string) => { + const sendInn = (journalpostResponse: IJournalpostResponse, fagsakId: string) => { settFeilmelding(''); if (!nyBehandlingstype) { settFeilmelding('Har ikke fått satt riktig behandlingstype'); diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringValidering.ts" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringValidering.ts" index add6356e0..b1be7c420 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringValidering.ts" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringValidering.ts" @@ -1,4 +1,4 @@ -import { IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { IJournalpostResponse } from '../../../App/typer/journalføring'; import { JournalføringStateRequest } from '../../../App/hooks/useJournalføringState'; import { harTittelForAlleDokumenter, @@ -12,7 +12,7 @@ import { EVilkårsbehandleBarnValg } from '../../../App/typer/vilkårsbehandleBa import { JournalføringKlageStateRequest } from '../../../App/hooks/useJournalføringKlageState'; export const validerJournalføringState = ( - journalResponse: IJojurnalpostResponse, + journalResponse: IJournalpostResponse, journalpostState: JournalføringStateRequest, erAlleBehandlingerFerdigstilte: boolean ): string | undefined => { @@ -46,7 +46,7 @@ export const validerJournalføringState = ( }; export const validerJournalføringKlageState = ( - journalResponse: IJojurnalpostResponse, + journalResponse: IJournalpostResponse, journalpostState: JournalføringKlageStateRequest ): string | undefined => { if (!journalpostState.behandling) { @@ -68,7 +68,7 @@ export const validerJournalføringKlageState = ( }; const erUstrukturertSøknadOgManglerDokumentasjonsType = ( - journalResponse: IJojurnalpostResponse, + journalResponse: IJournalpostResponse, ustrukturertDokumentasjonType: UstrukturertDokumentasjonType | undefined ) => !journalResponse.harStrukturertSøknad && diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringWrapper.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringWrapper.tsx" index 8eba1f882..3df0e4dc0 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringWrapper.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/Journalf\303\270ringWrapper.tsx" @@ -4,7 +4,7 @@ import { useQueryParams } from '../../../App/hooks/felles/useQueryParams'; import { JOURNALPOST_QUERY_STRING, OPPGAVEID_QUERY_STRING } from './utils'; import { useHentJournalpost } from '../../../App/hooks/useHentJournalpost'; import DataViewer from '../../../Felles/DataViewer/DataViewer'; -import { IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { IJournalpostResponse } from '../../../App/typer/journalføring'; import styled from 'styled-components'; export const SideLayout = styled.div``; @@ -38,7 +38,7 @@ export const FlexKnapper = styled.div` export interface JournalføringAppProps { oppgaveId: string; - journalResponse: IJojurnalpostResponse; + journalResponse: IJournalpostResponse; } interface JournalføringAppSide { diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/JournalpostTittelOgLenke.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/JournalpostTittelOgLenke.tsx" index 64bd1c564..fc431c3b5 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/JournalpostTittelOgLenke.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/JournalpostTittelOgLenke.tsx" @@ -1,6 +1,6 @@ import { Heading } from '@navikt/ds-react'; import React from 'react'; -import { IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { IJournalpostResponse } from '../../../App/typer/journalføring'; import styled from 'styled-components'; import { lagJournalføringKlageUrl, lagJournalføringUrl } from './utils'; import { Link } from 'react-router-dom'; @@ -12,7 +12,7 @@ const Container = styled.div` `; const JournalpostTittelOgLenke: React.FC<{ - journalResponse: IJojurnalpostResponse; + journalResponse: IJournalpostResponse; oppgaveId: string; fra: 'klage' | 'vanlig'; }> = ({ journalResponse, oppgaveId, fra }) => { diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/UtledEllerVelgFagsak.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/UtledEllerVelgFagsak.tsx" index e750b4f64..2573827e8 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/UtledEllerVelgFagsak.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/UtledEllerVelgFagsak.tsx" @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { IJournalpostResponse } from '../../../App/typer/journalføring'; import { behandlingstemaTilStønadstype, Stønadstype, @@ -16,7 +16,7 @@ const DivMedBottomPadding = styled.div` `; export const UtledEllerVelgFagsak: React.FC<{ - journalResponse: IJojurnalpostResponse; + journalResponse: IJournalpostResponse; hentFagsak: (personIdent: string, stønadstype: Stønadstype) => void; }> = ({ journalResponse, hentFagsak }) => { { diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/VelgFagsakForIkkeS\303\270knad.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/VelgFagsakForIkkeS\303\270knad.tsx" index 44f50a941..e6d1ccfc3 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/VelgFagsakForIkkeS\303\270knad.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/VelgFagsakForIkkeS\303\270knad.tsx" @@ -1,4 +1,4 @@ -import { IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { IJournalpostResponse } from '../../../App/typer/journalføring'; import { behandlingstemaTilStønadstype, Stønadstype, @@ -9,7 +9,7 @@ import { Select } from '@navikt/ds-react'; import styled from 'styled-components'; export function VelgFagsakForIkkeSøknad(props: { - journalResponse: IJojurnalpostResponse; + journalResponse: IJournalpostResponse; hentFagsak: (personIdent: string, stønadstype: Stønadstype) => void; }) { const { journalResponse, hentFagsak } = props; diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" index e432a288e..dc4af5d5b 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" @@ -1,4 +1,4 @@ -import { DokumentTitler, IJojurnalpostResponse } from '../../../App/typer/journalføring'; +import { DokumentTitler, IJournalpostResponse } from '../../../App/typer/journalføring'; import { Behandlingstema, behandlingstemaTilTekst } from '../../../App/typer/behandlingstema'; import { Behandling, BehandlingResultat } from '../../../App/typer/fagsak'; import { Behandlingstype } from '../../../App/typer/behandlingstype'; @@ -20,7 +20,7 @@ export const lagJournalføringUrl = (journalpostId: string, oppgaveId: string | }; export const harTittelForAlleDokumenter = ( - journalResponse: IJojurnalpostResponse, + journalResponse: IJournalpostResponse, dokumentTitler?: DokumentTitler ) => journalResponse.journalpost.dokumenter diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" index 0c6457e16..f509f6fde 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" @@ -1,9 +1,7 @@ -import React, { useEffect, useState } from 'react'; -import { Link, useNavigate } from 'react-router-dom'; -import { erAvTypeFeil, RessursStatus } from '../../../App/typer/ressurs'; +import React, { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { RessursStatus } from '../../../App/typer/ressurs'; import styled from 'styled-components'; -import Brukerinfo from '../Felles/Brukerinfo'; -import DokumentVisning from '../Felles/Dokumentvisning'; import { JournalføringStateRequest, useJournalføringState, @@ -16,43 +14,31 @@ import { lagreTilLocalStorage, oppgaveRequestKey, } from '../../Oppgavebenk/oppgavefilterStorage'; -import BehandlingInnold from './Behandling'; -import { UtledEllerVelgFagsak } from '../Felles/UtledEllerVelgFagsak'; -import { BodyLong, Button, Fieldset, Heading } from '@navikt/ds-react'; -import LeggTilBarnSomSkalFødes from '../../Behandling/Førstegangsbehandling/LeggTilBarnSomSkalFødes'; -import VelgUstrukturertDokumentasjonType, { - UstrukturertDokumentasjonType, -} from './VelgUstrukturertDokumentasjonType'; -import { VelgFagsakForIkkeSøknad } from '../Felles/VelgFagsakForIkkeSøknad'; -import EttersendingMedNyeBarn from './EttersendingMedNyeBarn'; -import { ModalWrapper } from '../../../Felles/Modal/ModalWrapper'; -import { AlertError } from '../../../Felles/Visningskomponenter/Alerts'; -import { harValgtNyBehandling, utledKolonneTittel } from '../Felles/utils'; +import { Heading } from '@navikt/ds-react'; import JournalføringWrapper, { - FlexKnapper, Høyrekolonne, JournalføringAppProps, Kolonner, Venstrekolonne, } from '../Felles/JournalføringWrapper'; import JournalføringPdfVisning from '../Felles/JournalføringPdfVisning'; -import JournalpostTittelOgLenke from '../Felles/JournalpostTittelOgLenke'; -import { ÅpneKlager } from '../../Personoversikt/Klage/ÅpneKlager'; -import { alleBehandlingerErFerdigstiltEllerSattPåVent } from '../../Personoversikt/utils'; -import { validerJournalføringState } from '../Felles/JournalføringValidering'; +import JournalpostPanel from './JournalpostPanel'; -const ModalTekst = styled(BodyLong)` - margin-top: 2rem; +const InnerContainer = styled.div` + display: flex; + flex-direction: column; + gap: 1.25rem; +`; + +const Tittel = styled(Heading)` + margin-bottom: 0.5rem; `; export const JournalføringAppNy: React.FC = () => { - return ; + return ; }; -const JournalføringAppContent: React.FC = ({ - oppgaveId, - journalResponse, -}) => { +const JournalføringSide: React.FC = ({ oppgaveId, journalResponse }) => { const { innloggetSaksbehandler } = useApp(); const navigate = useNavigate(); @@ -64,8 +50,7 @@ const JournalføringAppContent: React.FC = ({ ); const hentDokumentResponse = useHentDokument(journalResponse.journalpost); - const { hentFagsak, fagsak } = useHentFagsak(); - const [feilmelding, settFeilmelding] = useState(''); + const { fagsak } = useHentFagsak(); useEffect(() => { if (journalpostState.innsending.status === RessursStatus.SUKSESS) { @@ -85,183 +70,25 @@ const JournalføringAppContent: React.FC = ({ useEffect(() => { if (fagsak.status === RessursStatus.SUKSESS) { journalpostState.settFagsakId(fagsak.data.id); - settFeilmelding(''); } // eslint-disable-next-line }, [fagsak]); - const skalBeOmBekreftelse = (erNyBehandling: boolean) => { - if (!erNyBehandling) { - return journalResponse.harStrukturertSøknad || erPapirsøknad; - } else { - return false; - } - }; - - const kanLeggeTilBarnSomSkalFødes = () => { - const erNyBehandling = - journalpostState.behandling && - journalpostState.behandling.behandlingstype && - !journalpostState.behandling.behandlingsId; - const harIkkeStrukturertSøknad = !journalResponse.harStrukturertSøknad; - return ( - erNyBehandling && - harIkkeStrukturertSøknad && - journalpostState.ustrukturertDokumentasjonType === - UstrukturertDokumentasjonType.PAPIRSØKNAD - ); - }; - - const skalVelgeVilkårsbehandleNyeBarn = - journalpostState.ustrukturertDokumentasjonType === - UstrukturertDokumentasjonType.ETTERSENDING && - harValgtNyBehandling(journalpostState.behandling); - - const erPapirsøknad = - journalpostState.ustrukturertDokumentasjonType === - UstrukturertDokumentasjonType.PAPIRSØKNAD; - - const journalFør = () => { - settFeilmelding(''); - if (fagsak.status !== RessursStatus.SUKSESS) { - settFeilmelding('Henting av fagsak feilet, relast siden'); - return; - } - const feilmeldingFraValidering = validerJournalføringState( - journalResponse, - journalpostState, - alleBehandlingerErFerdigstiltEllerSattPåVent(fagsak.data) - ); - if (feilmeldingFraValidering) { - settFeilmelding(feilmeldingFraValidering); - } else if (skalBeOmBekreftelse(harValgtNyBehandling(journalpostState.behandling))) { - journalpostState.settVisBekreftelsesModal(true); - } else { - journalpostState.fullførJournalføring(); - } - }; - - return ( - <> - - - - {utledKolonneTittel(journalResponse.journalpost.behandlingstema, 'vanlig')} - - - Journalfør - - {fagsak.status === RessursStatus.SUKSESS && ( - <ÅpneKlager fagsakPersonId={fagsak.data.fagsakPersonId} /> - )} - - {!journalResponse.harStrukturertSøknad ? ( - <> - - - - ) : ( - - )} - - -
- - {kanLeggeTilBarnSomSkalFødes() && ( - - )} - {skalVelgeVilkårsbehandleNyeBarn && - fagsak.status === RessursStatus.SUKSESS && ( - - )} -
- {erAvTypeFeil(journalpostState.innsending) && ( - {journalpostState.innsending.frontendFeilmelding} - )} - - Tilbake til oppgavebenk - - -
- - - -
- - - ); -}; - -const BekreftJournalføringModal: React.FC<{ - journalpostState: JournalføringStateRequest; -}> = ({ journalpostState }) => { return ( - journalpostState.settVisBekreftelsesModal(false)} - aksjonsknapper={{ - hovedKnapp: { - onClick: () => { - journalpostState.settVisBekreftelsesModal(false); - journalpostState.fullførJournalføring(); - }, - tekst: 'Journalfør allikevel', - }, - lukkKnapp: { - onClick: () => journalpostState.settVisBekreftelsesModal(false), - tekst: 'Tilbake', - }, - }} - ariaLabel={'Bekreft journalføring av oppgave, eller avbryt'} - > - - Journalposten har en søknad tilknyttet seg. Er du sikker på at du vil journalføre - uten å lage en ny behandling? - - + + + +
+ + Journalføring + + +
+
+
+ + + +
); }; diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" new file mode 100644 index 000000000..cb5afad7d --- /dev/null +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" @@ -0,0 +1,105 @@ +import React from 'react'; +import { BodyShort, ExpansionCard, Heading, Select } from '@navikt/ds-react'; +import styled from 'styled-components'; +import { FolderFileFillIcon } from '@navikt/aksel-icons'; +import { ABlue500 } from '@navikt/ds-tokens/dist/tokens'; +import { + behandlingstemaTilTekst, + behandlingstemaTilTemaTekst, +} from '../../../App/typer/behandlingstema'; +import { IJournalpost } from '../../../App/typer/journalføring'; +import { formaterIsoDato } from '../../../App/utils/formatter'; + +const FlexRow = styled.div` + display: flex; + gap: 1rem; +`; + +const IconContainer = styled.div` + color: ${ABlue500}; +`; + +const ExpansionCardHeader = styled(ExpansionCard.Header)` + padding-bottom: 0.25rem; // TODO: Er denne ønskelig? +`; + +const ExpansionCardContent = styled.div` + display: flex; + flex-direction: column; + gap: 1rem; + padding-bottom: 1rem; +`; + +const StyledSelect = styled(Select)` + max-width: 13rem; +`; + +const Grid = styled.div` + display: grid; + grid-template-columns: repeat(4, max-content); + column-gap: 1.5rem; +`; + +interface Props { + journalpost: IJournalpost; +} + +const JournalpostPanel: React.FC = ({ journalpost }) => { + const tema = behandlingstemaTilTemaTekst(journalpost.behandlingstema); + const stønadstype = journalpost.behandlingstema + ? behandlingstemaTilTekst[journalpost.behandlingstema] + : undefined; + const datoMottatt = formaterIsoDato(journalpost.datoMottatt); + + return ( + + + + + + + + + Tema: + + + Stønadstype: + + + Type: + + + Mottatt: + + {tema} + {stønadstype} + {/*TODO: Hvordan utlede denne (ettersending, søknad, etc.)*/} + Hvordan utlede denne? + {datoMottatt} + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default JournalpostPanel; diff --git a/src/frontend/Komponenter/Oppgavebenk/typer/oppgave.ts b/src/frontend/Komponenter/Oppgavebenk/typer/oppgave.ts index e695c0d7b..df4099ab9 100644 --- a/src/frontend/Komponenter/Oppgavebenk/typer/oppgave.ts +++ b/src/frontend/Komponenter/Oppgavebenk/typer/oppgave.ts @@ -20,7 +20,7 @@ export interface IOppgave { tilordnetRessurs?: string; beskrivelse?: string; temagruppe?: string; - tema?: string; // TEMA??? + tema?: string; behandlingstema?: Behandlingstema; oppgavetype?: Oppgavetype; behandlingstype?: string; @@ -33,6 +33,6 @@ export interface IOppgave { endretAv?: string; ferdigstiltTidspunkt?: string; endretTidspunkt?: string; - prioritet?: Prioritet; //OppgavePrioritet - status?: string; //StatusEnum + prioritet?: Prioritet; + status?: string; } From f8ac7df5a0e89f3df8b05f3df29dfe536803bede Mon Sep 17 00:00:00 2001 From: Viktor Date: Mon, 16 Oct 2023 12:45:13 +0200 Subject: [PATCH 3/3] =?UTF-8?q?skal=20kunne=20redigere=20st=C3=B8nadstype?= =?UTF-8?q?=20og=20journalf=C3=B8rings=C3=A5rsak=20i=20journalpostpanelet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/useJournalf\303\270ringState.ts" | 29 ++++++- .../Journalf\303\270ring/Felles/utils.ts" | 23 ++++++ .../Standard/Journalf\303\270ringApp.tsx" | 1 + .../Standard/Journalf\303\270ringAppNy.tsx" | 6 +- .../Standard/JournalpostPanel.tsx" | 78 +++++++++++++------ 5 files changed, 113 insertions(+), 24 deletions(-) diff --git "a/src/frontend/App/hooks/useJournalf\303\270ringState.ts" "b/src/frontend/App/hooks/useJournalf\303\270ringState.ts" index 4062c3c5e..2f244bb6b 100644 --- "a/src/frontend/App/hooks/useJournalf\303\270ringState.ts" +++ "b/src/frontend/App/hooks/useJournalf\303\270ringState.ts" @@ -4,7 +4,9 @@ import { useApp } from '../context/AppContext'; import { Behandlingstype } from '../typer/behandlingstype'; import { UstrukturertDokumentasjonType } from '../../Komponenter/Journalføring/Standard/VelgUstrukturertDokumentasjonType'; import { EVilkårsbehandleBarnValg } from '../typer/vilkårsbehandleBarnValg'; -import { DokumentTitler } from '../typer/journalføring'; +import { DokumentTitler, IJournalpostResponse } from '../typer/journalføring'; +import { Journalføringsårsak } from '../../Komponenter/Journalføring/Felles/utils'; +import { behandlingstemaTilStønadstype, Stønadstype } from '../typer/behandlingstema'; export interface BehandlingRequest { behandlingsId?: string; @@ -45,12 +47,27 @@ export interface JournalføringStateRequest { settUstrukturertDokumentasjonType: Dispatch>; vilkårsbehandleNyeBarn: EVilkårsbehandleBarnValg; settVilkårsbehandleNyeBarn: Dispatch>; + journalføringsårsak: Journalføringsårsak; + settJournalføringsårsak: Dispatch>; + stønadstype: Stønadstype | undefined; + settStønadstype: Dispatch>; } export const useJournalføringState = ( + journalResponse: IJournalpostResponse, oppgaveId: string, journalpostId: string ): JournalføringStateRequest => { + const utledJournalføringsårsak = () => { + if (journalResponse.harStrukturertSøknad) { + return Journalføringsårsak.DIGITAL_SØKNAD; + } else if (journalResponse.journalpost.tittel.includes('Ettersending')) { + return Journalføringsårsak.ETTERSENDING; + } else { + return Journalføringsårsak.IKKE_VALGT; + } + }; + const { axiosRequest, innloggetSaksbehandler } = useApp(); const [fagsakId, settFagsakId] = useState(''); const [behandling, settBehandling] = useState(); @@ -63,6 +80,12 @@ export const useJournalføringState = ( const [vilkårsbehandleNyeBarn, settVilkårsbehandleNyeBarn] = useState( EVilkårsbehandleBarnValg.IKKE_VALGT ); + const [journalføringsårsak, settJournalføringsårsak] = useState( + utledJournalføringsårsak() + ); + const [stønadstype, settStønadstype] = useState( + behandlingstemaTilStønadstype(journalResponse.journalpost.behandlingstema) + ); useEffect(() => { settBehandling(undefined); @@ -113,5 +136,9 @@ export const useJournalføringState = ( settUstrukturertDokumentasjonType, vilkårsbehandleNyeBarn, settVilkårsbehandleNyeBarn, + journalføringsårsak, + settJournalføringsårsak, + stønadstype, + settStønadstype, }; }; diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" index dc4af5d5b..4461e0338 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Felles/utils.ts" @@ -104,3 +104,26 @@ export const harValgtNyBehandling = (behandling: BehandlingRequest | undefined): export const harValgtNyKlageBehandling = ( behandling: BehandlingKlageRequest | undefined ): boolean => behandling !== undefined && behandling.behandlingId === undefined; + +export enum Journalføringsårsak { + PAPIRSØKNAD = 'PAPIRSØKNAD', + ETTERSENDING = 'ETTERSENDING', + KLAGE = 'KLAGE', + DIGITAL_SØKNAD = 'DIGITAL_SØKNAD', + IKKE_VALGT = 'IKKE_VALGT', +} + +export const journalføringsårsakTilTekst: Record = { + PAPIRSØKNAD: 'Papirsøknad', + ETTERSENDING: 'Ettersending', + KLAGE: 'Klage', + DIGITAL_SØKNAD: 'Digital søknad', + IKKE_VALGT: 'Ikke valgt', +}; + +export const valgbareJournalføringsårsaker = [ + Journalføringsårsak.IKKE_VALGT, + Journalføringsårsak.ETTERSENDING, + Journalføringsårsak.KLAGE, + Journalføringsårsak.PAPIRSØKNAD, +]; diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringApp.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringApp.tsx" index 9771e1d74..8e3c0cdf2 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringApp.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringApp.tsx" @@ -59,6 +59,7 @@ const JournalføringAppContent: React.FC = ({ const journalpostId = journalResponse.journalpost.journalpostId; const journalpostState: JournalføringStateRequest = useJournalføringState( + journalResponse, oppgaveId, journalpostId ); diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" index f509f6fde..b97e97000 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/Journalf\303\270ringAppNy.tsx" @@ -45,6 +45,7 @@ const JournalføringSide: React.FC = ({ oppgaveId, journ const journalpostId = journalResponse.journalpost.journalpostId; const journalpostState: JournalføringStateRequest = useJournalføringState( + journalResponse, oppgaveId, journalpostId ); @@ -82,7 +83,10 @@ const JournalføringSide: React.FC = ({ oppgaveId, journ Journalføring - + diff --git "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" index cb5afad7d..4f8ff6d46 100644 --- "a/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" +++ "b/src/frontend/Komponenter/Journalf\303\270ring/Standard/JournalpostPanel.tsx" @@ -4,11 +4,18 @@ import styled from 'styled-components'; import { FolderFileFillIcon } from '@navikt/aksel-icons'; import { ABlue500 } from '@navikt/ds-tokens/dist/tokens'; import { - behandlingstemaTilTekst, behandlingstemaTilTemaTekst, + Stønadstype, + stønadstypeTilTekst, } from '../../../App/typer/behandlingstema'; import { IJournalpost } from '../../../App/typer/journalføring'; import { formaterIsoDato } from '../../../App/utils/formatter'; +import { + Journalføringsårsak, + journalføringsårsakTilTekst, + valgbareJournalføringsårsaker, +} from '../Felles/utils'; +import { JournalføringStateRequest } from '../../../App/hooks/useJournalføringState'; const FlexRow = styled.div` display: flex; @@ -20,7 +27,7 @@ const IconContainer = styled.div` `; const ExpansionCardHeader = styled(ExpansionCard.Header)` - padding-bottom: 0.25rem; // TODO: Er denne ønskelig? + padding-bottom: 0.25rem; `; const ExpansionCardContent = styled.div` @@ -42,14 +49,20 @@ const Grid = styled.div` interface Props { journalpost: IJournalpost; + journalpostState: JournalføringStateRequest; } -const JournalpostPanel: React.FC = ({ journalpost }) => { +const JournalpostPanel: React.FC = ({ journalpost, journalpostState }) => { const tema = behandlingstemaTilTemaTekst(journalpost.behandlingstema); - const stønadstype = journalpost.behandlingstema - ? behandlingstemaTilTekst[journalpost.behandlingstema] - : undefined; const datoMottatt = formaterIsoDato(journalpost.datoMottatt); + const { journalføringsårsak, settJournalføringsårsak, stønadstype, settStønadstype } = + journalpostState; + const kanRedigere = journalføringsårsak !== Journalføringsårsak.DIGITAL_SØKNAD; + const valgbareStønadstyper = [ + Stønadstype.OVERGANGSSTØNAD, + Stønadstype.BARNETILSYN, + Stønadstype.SKOLEPENGER, + ]; return ( @@ -72,29 +85,50 @@ const JournalpostPanel: React.FC = ({ journalpost }) => { Mottatt: {tema} - {stønadstype} - {/*TODO: Hvordan utlede denne (ettersending, søknad, etc.)*/} - Hvordan utlede denne? + + {stønadstype ? stønadstypeTilTekst[stønadstype] : 'Ikke valgt'} + + {journalføringsårsakTilTekst[journalføringsårsak]} {datoMottatt} - - - - - - - - - + { + settStønadstype(event.target.value as Stønadstype); + }} + disabled={!kanRedigere} + > + + {valgbareStønadstyper.map((stønadstype) => { + return ( + + ); + })} - - - - + + settJournalføringsårsak(event.target.value as Journalføringsårsak) + } + disabled={!kanRedigere} + > + {valgbareJournalføringsårsaker.map((type) => ( + + ))}