diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktRoute.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktRoute.kt index 4844d3f039..836167da47 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktRoute.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktRoute.kt @@ -257,12 +257,18 @@ internal fun Route.aktivitetspliktRoutes( } } } + get("oppgaver-sak") { logger.info("Henter oppfølgingsoppgaver for $sakId") val oppfoelgingsoppgaver = inTransaction { aktivitetspliktOppgaveService.hentOppfoelgingsoppgaver(sakId) } call.respond(oppfoelgingsoppgaver) } + post("/opprett") { + val request = call.receive() + aktivitetspliktOppgaveService.opprettOppfoelgingsoppgave(request) + } + route("oppgave-oppfoelging") { post { kunSystembruker { @@ -292,10 +298,6 @@ internal fun Route.aktivitetspliktRoutes( } route("/api/aktivitetsplikt/oppgave") { - post("/opprett") { - val request = call.receive() - aktivitetspliktOppgaveService.opprettOppfoelgingsoppgave(request) - } route("/{${OPPGAVEID_CALL_PARAMETER}}") { get { val oppgaveOgVurdering = diff --git a/apps/etterlatte-saksbehandling-ui/client/src/components/person/aktivitet/AktivitetspliktSakoversikt.tsx b/apps/etterlatte-saksbehandling-ui/client/src/components/person/aktivitet/AktivitetspliktSakoversikt.tsx index 2df6e6757f..67de12937b 100644 --- a/apps/etterlatte-saksbehandling-ui/client/src/components/person/aktivitet/AktivitetspliktSakoversikt.tsx +++ b/apps/etterlatte-saksbehandling-ui/client/src/components/person/aktivitet/AktivitetspliktSakoversikt.tsx @@ -1,11 +1,15 @@ -import { isSuccess, mapResult, mapSuccess, Result } from '~shared/api/apiUtils' +import { isFailure, isPending, isSuccess, mapResult, mapSuccess, Result } from '~shared/api/apiUtils' import { SakMedBehandlinger } from '~components/person/typer' import React, { ReactNode, useEffect } from 'react' -import { BodyShort, Box, Button, Heading, Label, VStack } from '@navikt/ds-react' +import { BodyShort, Box, Button, Heading, Label, Tag, VStack } from '@navikt/ds-react' import { useApiCall } from '~shared/hooks/useApiCall' -import { hentAktivitspliktVurderingForSak, hentOppfoelgingsoppgaver } from '~shared/api/aktivitetsplikt' +import { + hentAktivitspliktVurderingForSak, + hentOppfoelgingsoppgaver, + opprettOppfoelgingsoppgave, +} from '~shared/api/aktivitetsplikt' import Spinner from '~shared/Spinner' -import { ApiErrorAlert } from '~ErrorBoundary' +import { ApiErrorAlert, ApiWarningAlert } from '~ErrorBoundary' import { AktivitetspliktTidslinje } from '~components/behandling/aktivitetsplikt/AktivitetspliktTidslinje' import { hentFamilieOpplysninger } from '~shared/api/pdltjenester' import { Familiemedlem } from '~shared/types/familieOpplysninger' @@ -14,9 +18,11 @@ import { AktivitetspliktStatusTagOgGyldig } from '~shared/tags/AktivitetspliktSt import { AktivitetspliktOppfoelgingsOppgave, AktivitetspliktOppfoelgingsOppgaver, + AktivitetspliktOppgaveVurderingType, harVurdering, } from '~shared/types/Aktivitetsplikt' import { Oppgavetype } from '~shared/types/oppgave' +import { CheckmarkIcon } from '@navikt/aksel-icons' export const velgDoedsdato = (avdoede: Familiemedlem[] | []): Date => { if (avdoede.length === 0) return new Date() @@ -39,7 +45,9 @@ export const AktivitetspliktSakoversikt = ({ ) const [familieOpplysningerResult, familieOpplysningerFetch] = useApiCall(hentFamilieOpplysninger) - const [hentRes, hentOppfoelgingsoppgaverForSak] = useApiCall(hentOppfoelgingsoppgaver) + const [oppfoelgingsOppgaver, hentOppfoelgingsoppgaverForSak] = useApiCall(hentOppfoelgingsoppgaver) + + const [svaropprettOppgave, opprettOppfoelgingsoppgaveReq] = useApiCall(opprettOppfoelgingsoppgave) useEffect(() => { if (isSuccess(sakResult)) { @@ -49,6 +57,18 @@ export const AktivitetspliktSakoversikt = ({ } }, [sakResult]) + if (isFailure(sakResult)) { + return ( + + {sakResult.error.status === 404 ? ( + Kan ikke hente aktivitetsplikt: {sakResult.error.detail} + ) : ( + {sakResult.error.detail || 'Feil ved henting av sak'} + )} + + ) + } + return ( {mapResult(hentAktivitetspliktVurderingForSakResult, { @@ -86,25 +106,52 @@ export const AktivitetspliktSakoversikt = ({ ), })} - - {mapResult(hentRes, { - pending: , - error: (error) => ( - {error.detail || 'Kunne ikke oppfølgingsoppgave status for sak'} - ), - success: (oppgaver) => ( - <> - {!oppfoelging12mndErFerdigstilt(oppgaver) && - kanOppretteOppgaveAvType(oppgaver, Oppgavetype.AKTIVITETSPLIKT) && ( - - )} - {kanOppretteOppgaveAvType(oppgaver, Oppgavetype.AKTIVITETSPLIKT_12MND) && - har6MndVurdering(oppgaver, Oppgavetype.AKTIVITETSPLIKT) && ( - + + {mapSuccess(sakResult, (data) => + mapResult(oppfoelgingsOppgaver, { + pending: , + error: (error) => ( + {error.detail || 'Kunne ikke oppfølgingsoppgave status for sak'} + ), + success: (oppgaver) => ( + <> + {!oppfoelging12mndErFerdigstilt(oppgaver) && + kanOppretteOppgaveAvType(oppgaver, Oppgavetype.AKTIVITETSPLIKT) && ( + + )} + {kanOppretteOppgaveAvType(oppgaver, Oppgavetype.AKTIVITETSPLIKT_12MND) && + har6MndVurdering(oppgaver, Oppgavetype.AKTIVITETSPLIKT) && ( + + )} + {isSuccess(svaropprettOppgave) && ( + + Oppgaven ble opprettet + )} - - ), - })} + + ), + }) + )} ) diff --git a/apps/etterlatte-saksbehandling-ui/client/src/shared/api/aktivitetsplikt.ts b/apps/etterlatte-saksbehandling-ui/client/src/shared/api/aktivitetsplikt.ts index cdc46921f9..f207434981 100644 --- a/apps/etterlatte-saksbehandling-ui/client/src/shared/api/aktivitetsplikt.ts +++ b/apps/etterlatte-saksbehandling-ui/client/src/shared/api/aktivitetsplikt.ts @@ -3,6 +3,7 @@ import { AktivitetspliktOppfoelgingsOppgave, AktivitetspliktOppfolging, AktivitetspliktOppgaveVurdering, + AktivitetspliktOppgaveVurderingType, IAktivitetHendelse, IAktivitetPeriode, IAktivitetPerioderOgHendelser, @@ -89,6 +90,15 @@ export const hentOppfoelgingsoppgaver = async (args: { }): Promise> => apiClient.get(`/sak/${args.sakId}/aktivitetsplikt/oppgaver-sak`) +export const opprettOppfoelgingsoppgave = async (args: { + sakId: number + vurderingType: AktivitetspliktOppgaveVurderingType +}) => + apiClient.post(`/sak/${args.sakId}/aktivitetsplikt/opprett`, { + sakId: args.sakId, + type: args.vurderingType, + }) + export const redigerAktivitetsgradForOppgave = async (args: { sakId: number oppgaveId: string