Skip to content

Commit

Permalink
IS-3073: Be om oppfølgingsplan ved flere arbeidsgivere
Browse files Browse the repository at this point in the history
  • Loading branch information
andersrognstad committed Feb 11, 2025
1 parent 4c0a941 commit 36cd72b
Show file tree
Hide file tree
Showing 7 changed files with 407 additions and 238 deletions.
2 changes: 1 addition & 1 deletion src/data/virksomhet/virksomhetQueryHooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
import { useQuery } from "@tanstack/react-query";
import { minutesToMillis } from "@/utils/utils";

const virksomhetQueryKeys = {
export const virksomhetQueryKeys = {
virksomhet: (virksomhetsnummer: string) => ["virksomhet", virksomhetsnummer],
};

Expand Down
14 changes: 14 additions & 0 deletions src/mocks/common/mockConstants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ export const NARMESTE_LEDER_DEFAULT = {
personident: "02690001009",
};

const ANNEN_NARMESTE_LEDER = {
navn: "Sara Sjef",
personident: "02790001009",
};

export const LEDERE_DEFAULT = [
{
uuid: "3",
Expand All @@ -125,6 +130,15 @@ export const LEDERE_DEFAULT = [
},
];

export const ANNEN_LEDER_AKTIV = {
...LEDERE_DEFAULT[0],
uuid: "4",
virksomhetsnummer: VIRKSOMHET_BRANNOGBIL.virksomhetsnummer,
virksomhetsnavn: VIRKSOMHET_BRANNOGBIL.virksomhetsnavn,
narmesteLederPersonIdentNumber: ANNEN_NARMESTE_LEDER.personident,
narmesteLederNavn: ANNEN_NARMESTE_LEDER.navn,
};

export const VEILEDER_BRUKER_KNYTNING_DEFAULT: VeilederBrukerKnytningDTO = {
personident: ARBEIDSTAKER_DEFAULT.personIdent,
tildeltVeilederident: VEILEDER_IDENT_DEFAULT,
Expand Down
25 changes: 13 additions & 12 deletions src/mocks/isoppfolgingstilfelle/oppfolgingstilfellePersonMock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ import {
import { OppfolgingstilfellePersonDTO } from "@/data/oppfolgingstilfelle/person/types/OppfolgingstilfellePersonDTO";
import { addWeeks } from "@/utils/datoUtils";

export const currentOppfolgingstilfelle = {
arbeidstakerAtTilfelleEnd: true,
start: addWeeks(new Date(), -40),
end: addWeeks(new Date(), 20),
virksomhetsnummerList: [
VIRKSOMHET_PONTYPANDY.virksomhetsnummer,
VIRKSOMHET_BRANNOGBIL.virksomhetsnummer,
VIRKSOMHET_UTEN_NARMESTE_LEDER.virksomhetsnummer,
],
antallSykedager: 294,
varighetUker: 48,
};
export const oppfolgingstilfellePersonMock: OppfolgingstilfellePersonDTO = {
oppfolgingstilfelleList: [
{
Expand All @@ -25,18 +37,7 @@ export const oppfolgingstilfellePersonMock: OppfolgingstilfellePersonDTO = {
antallSykedager: 294,
varighetUker: 48,
},
{
arbeidstakerAtTilfelleEnd: true,
start: addWeeks(new Date(), -40),
end: addWeeks(new Date(), 20),
virksomhetsnummerList: [
VIRKSOMHET_PONTYPANDY.virksomhetsnummer,
VIRKSOMHET_BRANNOGBIL.virksomhetsnummer,
VIRKSOMHET_UTEN_NARMESTE_LEDER.virksomhetsnummer,
],
antallSykedager: 294,
varighetUker: 48,
},
currentOppfolgingstilfelle,
],
personIdent: ARBEIDSTAKER_DEFAULT.personIdent,
};
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,10 @@ export default function AktiveOppfolgingsplaner({
currentOppfolgingstilfelle
)
: [];
const activeNarmesteLederIfSingle =
activeNarmesteLedere.length === 1 ? activeNarmesteLedere[0] : undefined;
const isBeOmOppfolgingsplanVisible =
toggles.isBeOmOppfolgingsplanEnabled &&
!!currentOppfolgingstilfelle &&
!!activeNarmesteLederIfSingle;
activeNarmesteLedere.length > 0;

return (
<div className="mb-8">
Expand Down Expand Up @@ -111,7 +109,7 @@ export default function AktiveOppfolgingsplaner({
</Box>
{isBeOmOppfolgingsplanVisible && (
<BeOmOppfolgingsplan
aktivNarmesteLeder={activeNarmesteLederIfSingle}
activeNarmesteLedere={activeNarmesteLedere}
currentOppfolgingstilfelle={currentOppfolgingstilfelle}
/>
)}
Expand Down
107 changes: 79 additions & 28 deletions src/sider/oppfolgingsplan/oppfolgingsplaner/BeOmOppfolgingsplan.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {
Box,
Button,
Heading,
Radio,
RadioGroup,
ReadMore,
} from "@navikt/ds-react";
import { PaperplaneIcon } from "@navikt/aksel-icons";
Expand All @@ -26,10 +28,11 @@ import {
import { useOppfolgingsplanForesporselDocument } from "@/hooks/oppfolgingsplan/useOppfolgingsplanForesporselDocument";
import { oppfolgingstilfelle } from "../../../../test/aktivitetskrav/vurdering/vurderingTestUtils";
import LabelAndText from "@/components/LabelAndText";
import { useForm } from "react-hook-form";
import { useVirksomhetQuery } from "@/data/virksomhet/virksomhetQueryHooks";

const texts = {
aktivForesporsel:
"Obs! Det ble bedt om oppfølgingsplan fra denne arbeidsgiveren",
aktivForesporsel: "Obs! Det ble bedt om oppfølgingsplan fra",
header: "Be om oppfølgingsplan",
description: {
info1: "Her kan du be om oppfølgingsplan fra arbeidsgiver.",
Expand All @@ -38,6 +41,7 @@ const texts = {
info3: "Nærmeste leder vil motta et varsel på e-post.",
},
virksomhet: "Virksomhet:",
missingVirksomhet: "Vennligst velg arbeidsgiver",
narmesteLeder: "Nærmeste leder:",
button: "Send forespørsel",
foresporselSendt: "Forespørsel om oppfølgingsplan sendt",
Expand Down Expand Up @@ -82,21 +86,42 @@ function ReadMoreContent() {
}

interface Props {
aktivNarmesteLeder: NarmesteLederRelasjonDTO;
activeNarmesteLedere: NarmesteLederRelasjonDTO[];
currentOppfolgingstilfelle: OppfolgingstilfelleDTO;
}

interface FormValues {
narmesteLederUuid: string;
}

export default function BeOmOppfolgingsplan({
aktivNarmesteLeder,
activeNarmesteLedere,
currentOppfolgingstilfelle,
}: Props) {
const personident = useValgtPersonident();
const getOppfolgingsplanForesporsel = useGetOppfolgingsplanForesporselQuery();
const { data } = useGetOppfolgingsplanForesporselQuery();
const lastForesporsel = data?.[0];
const { virksomhetsnavn: lastForesporselVirksomhetsnavn } =
useVirksomhetQuery(lastForesporsel?.virksomhetsnummer ?? "");
const postOppfolgingsplanForesporsel = usePostOppfolgingsplanForesporsel();
const { getForesporselDocument } = useOppfolgingsplanForesporselDocument();

const lastForesporselCreatedAt =
getOppfolgingsplanForesporsel.data?.[0]?.createdAt;
const defaultNarmesteLeder =
activeNarmesteLedere.length === 1 ? activeNarmesteLedere[0] : undefined;
const {
register,
watch,
handleSubmit,
formState: { errors },
} = useForm<FormValues>({
defaultValues: {
narmesteLederUuid: defaultNarmesteLeder?.uuid,
},
});
const valgtNarmesteLederUuid = watch("narmesteLederUuid");
const valgtNarmesteLeder = valgtNarmesteLederUuid
? activeNarmesteLedere.find(({ uuid }) => uuid === valgtNarmesteLederUuid)
: undefined;
const lastForesporselCreatedAt = lastForesporsel?.createdAt;
const isAktivForesporsel =
!!lastForesporselCreatedAt &&
!!currentOppfolgingstilfelle &&
Expand All @@ -106,19 +131,23 @@ export default function BeOmOppfolgingsplan({
oppfolgingstilfelle
)
: false;
const aktivForesporselTekst = `${
texts.aktivForesporsel

const aktivForesporselTekst = `${texts.aktivForesporsel} ${
lastForesporselVirksomhetsnavn ?? lastForesporsel?.virksomhetsnummer
} ${tilLesbarDatoMedArUtenManedNavn(lastForesporselCreatedAt)}`;

function onClick() {
function submit() {
if (!valgtNarmesteLeder) {
throw new Error("Nærmeste leder skal være valgt");
}
const foresporsel: NewOppfolgingsplanForesporselDTO = {
arbeidstakerPersonident: personident,
virksomhetsnummer: aktivNarmesteLeder.virksomhetsnummer,
virksomhetsnummer: valgtNarmesteLeder.virksomhetsnummer,
narmestelederPersonident:
aktivNarmesteLeder.narmesteLederPersonIdentNumber,
valgtNarmesteLeder.narmesteLederPersonIdentNumber,
document: getForesporselDocument({
narmesteLeder: aktivNarmesteLeder.narmesteLederNavn,
virksomhetNavn: aktivNarmesteLeder.virksomhetsnavn,
narmesteLeder: valgtNarmesteLeder.narmesteLederNavn,
virksomhetNavn: valgtNarmesteLeder.virksomhetsnavn,
}),
};
postOppfolgingsplanForesporsel.mutate(foresporsel, {
Expand All @@ -127,7 +156,7 @@ export default function BeOmOppfolgingsplan({
}

return (
<>
<form onSubmit={handleSubmit(submit)}>
{isAktivForesporsel && (
<Alert variant="warning" className="mb-2">
{aktivForesporselTekst}
Expand All @@ -144,16 +173,38 @@ export default function BeOmOppfolgingsplan({
<BodyLong>{texts.description.info1}</BodyLong>
<BodyLong>{texts.description.info2}</BodyLong>
</div>
<div>
<LabelAndText
label={texts.virksomhet}
text={aktivNarmesteLeder.virksomhetsnavn}
/>
<LabelAndText
label={texts.narmesteLeder}
text={aktivNarmesteLeder.narmesteLederNavn}
/>
</div>
{!defaultNarmesteLeder && (
<RadioGroup
name="narmesteLederUuid"
size="small"
legend="Arbeidsgiver"
error={errors.narmesteLederUuid?.message}
>
{activeNarmesteLedere.map(({ virksomhetsnavn, uuid }, index) => (
<Radio
key={index}
value={uuid}
{...register("narmesteLederUuid", {
required: texts.missingVirksomhet,
})}
>
{virksomhetsnavn}
</Radio>
))}
</RadioGroup>
)}
{valgtNarmesteLeder && (
<div>
<LabelAndText
label={texts.virksomhet}
text={valgtNarmesteLeder.virksomhetsnavn}
/>
<LabelAndText
label={texts.narmesteLeder}
text={valgtNarmesteLeder.narmesteLederNavn}
/>
</div>
)}
<div>
<BodyLong>{texts.description.info3}</BodyLong>
<ReadMore header={texts.readMoreText} onOpenChange={logReadMoreClick}>
Expand All @@ -166,8 +217,8 @@ export default function BeOmOppfolgingsplan({
</Alert>
) : (
<Button
type="submit"
className="w-fit"
onClick={onClick}
loading={postOppfolgingsplanForesporsel.isPending}
icon={<PaperplaneIcon />}
>
Expand All @@ -180,6 +231,6 @@ export default function BeOmOppfolgingsplan({
</Alert>
)}
</Box>
</>
</form>
);
}
Loading

0 comments on commit 36cd72b

Please sign in to comment.