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 12, 2025
1 parent 4c0a941 commit 516ccf6
Show file tree
Hide file tree
Showing 7 changed files with 405 additions and 237 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
104 changes: 77 additions & 27 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 { Controller, 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,34 @@ function ReadMoreContent() {
}

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

interface FormValues {
narmesteLeder: NarmesteLederRelasjonDTO;
}

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 { control, watch, handleSubmit } = useForm<FormValues>({
defaultValues: {
narmesteLeder: defaultNarmesteLeder,
},
});
const narmesteLeder = watch("narmesteLeder");
const lastForesporselCreatedAt = lastForesporsel?.createdAt;
const isAktivForesporsel =
!!lastForesporselCreatedAt &&
!!currentOppfolgingstilfelle &&
Expand All @@ -106,19 +123,20 @@ export default function BeOmOppfolgingsplan({
oppfolgingstilfelle
)
: false;
const aktivForesporselTekst = `${
texts.aktivForesporsel

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

function onClick() {
function submit(values: FormValues) {
const foresporsel: NewOppfolgingsplanForesporselDTO = {
arbeidstakerPersonident: personident,
virksomhetsnummer: aktivNarmesteLeder.virksomhetsnummer,
virksomhetsnummer: values.narmesteLeder.virksomhetsnummer,
narmestelederPersonident:
aktivNarmesteLeder.narmesteLederPersonIdentNumber,
values.narmesteLeder.narmesteLederPersonIdentNumber,
document: getForesporselDocument({
narmesteLeder: aktivNarmesteLeder.narmesteLederNavn,
virksomhetNavn: aktivNarmesteLeder.virksomhetsnavn,
narmesteLeder: values.narmesteLeder.narmesteLederNavn,
virksomhetNavn: values.narmesteLeder.virksomhetsnavn,
}),
};
postOppfolgingsplanForesporsel.mutate(foresporsel, {
Expand All @@ -127,7 +145,7 @@ export default function BeOmOppfolgingsplan({
}

return (
<>
<form onSubmit={handleSubmit(submit)}>
{isAktivForesporsel && (
<Alert variant="warning" className="mb-2">
{aktivForesporselTekst}
Expand All @@ -144,16 +162,48 @@ 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}
{!defaultNarmesteLeder && (
<Controller
name="narmesteLeder"
control={control}
rules={{ required: texts.missingVirksomhet }}
render={({ field, fieldState: { error } }) => (
<RadioGroup
name="narmesteLeder"
size="small"
legend="Arbeidsgiver"
error={error?.message}
value={field.value?.uuid}
onChange={(value) => {
const selectedNarmesteLeder = activeNarmesteLedere.find(
(nl) => nl.uuid === value
);
field.onChange(selectedNarmesteLeder);
}}
>
{activeNarmesteLedere.map(
({ virksomhetsnavn, uuid }, index) => (
<Radio key={index} value={uuid}>
{virksomhetsnavn}
</Radio>
)
)}
</RadioGroup>
)}
/>
</div>
)}
{narmesteLeder && (
<div>
<LabelAndText
label={texts.virksomhet}
text={narmesteLeder.virksomhetsnavn}
/>
<LabelAndText
label={texts.narmesteLeder}
text={narmesteLeder.narmesteLederNavn}
/>
</div>
)}
<div>
<BodyLong>{texts.description.info3}</BodyLong>
<ReadMore header={texts.readMoreText} onOpenChange={logReadMoreClick}>
Expand All @@ -166,8 +216,8 @@ export default function BeOmOppfolgingsplan({
</Alert>
) : (
<Button
type="submit"
className="w-fit"
onClick={onClick}
loading={postOppfolgingsplanForesporsel.isPending}
icon={<PaperplaneIcon />}
>
Expand All @@ -180,6 +230,6 @@ export default function BeOmOppfolgingsplan({
</Alert>
)}
</Box>
</>
</form>
);
}
Loading

0 comments on commit 516ccf6

Please sign in to comment.