Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Endringsmelding flere ansettelsesforhold hos samme org #2660

Draft
wants to merge 35 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
870c739
Utvide Arbeidsgiver med ansattPerioder
frodehansen2 Jan 16, 2025
f86b55f
Rename Arbeidsgiver pga strukturendring
frodehansen2 Jan 16, 2025
19f3062
Vise ansettelsesperioder
frodehansen2 Jan 16, 2025
9d00d2d
Trim dager til kun ansatt-dager
frodehansen2 Jan 17, 2025
4b32b98
Melding om at en ikke er ansastt alle dager
frodehansen2 Jan 17, 2025
8051c86
dagerIkkeAnsatt
frodehansen2 Jan 17, 2025
37bd790
Info i EndreArbeidstidForm
frodehansen2 Jan 17, 2025
da6ddb7
Cleanup
frodehansen2 Jan 20, 2025
3c0e99b
stash
frodehansen2 Jan 20, 2025
745e9a0
Fjerne ikkeAnsatt kode på uke
frodehansen2 Jan 20, 2025
b7eda06
Stoppe brukere med 2 ansettelser samme uke
frodehansen2 Jan 21, 2025
4ed9b54
Revert renaming av prop
frodehansen2 Jan 21, 2025
fe0d484
Cleanup
frodehansen2 Jan 21, 2025
bcb8879
Mer cleanup
frodehansen2 Jan 21, 2025
8d38dd9
stash
frodehansen2 Jan 21, 2025
186e44c
Test
frodehansen2 Jan 22, 2025
99fe8a4
Revert endring i mock-data
frodehansen2 Jan 22, 2025
f99afc3
Test for nytt scenario
frodehansen2 Jan 22, 2025
e3ae5ee
rename ArbeidsgiverMedAnsettelseperioder
frodehansen2 Jan 22, 2025
8ac0986
Revert endring
frodehansen2 Jan 22, 2025
cf697ba
Merge branch 'main' into endringsmelding-flere-arbeidsforhold
frodehansen2 Jan 22, 2025
5506265
Scenario - flere ansettelser uten opphold
frodehansen2 Jan 22, 2025
19da253
Merge branch 'main' into endringsmelding-flere-arbeidsforhold
frodehansen2 Jan 23, 2025
e20e9fe
Sperre tilgang for ukjente arbeidsgivere med flere ansettelsesforhold
frodehansen2 Jan 23, 2025
9a2ca6d
Sperre tilgang for ukjente arbeidsgivere med flere ansettelsesforhold
frodehansen2 Jan 23, 2025
d255a5d
Merge branch 'endringsmelding-flere-arbeidsforhold' of github.com:nav…
frodehansen2 Jan 23, 2025
34438a8
Beholde søndag trimArbeidsukePeriodeTilDagerSøktFor for uker midt i
frodehansen2 Jan 23, 2025
c82f499
Fjerne tomme uker for ukjent arbeidsforhold
frodehansen2 Jan 23, 2025
e7ef8a4
Sette på param for å hente alle ansettelser
frodehansen2 Jan 23, 2025
70dbdcf
debug-scenario
frodehansen2 Jan 24, 2025
5e2cf8e
Bugfix - korte ned uker til dager en er ansatt
frodehansen2 Jan 24, 2025
8b8fe8e
Fjerne ubrukt dagerIkkeAnsatt
frodehansen2 Jan 24, 2025
6b80f89
Korrigere ansettelseperioder tekst
frodehansen2 Jan 24, 2025
b28b384
Tooltip på KortUke tag
frodehansen2 Jan 24, 2025
18c6c0f
Merge branch 'main' into endringsmelding-flere-arbeidsforhold
frodehansen2 Feb 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,14 @@ test('Er selvstendig næringsdrivende', async ({ page }) => {
await expect(page.getByText('Hei Nora')).toBeVisible();
await expect(page.getByTestId('erSN')).toBeVisible();
});

test('Har en arbeidsgiver med to ansettelsesforhold som slutter og starter samme uke med opphold', async ({ page }) => {
await routeUtils.resumeFromRoute(
page,
SøknadRoutes.VELKOMMEN,
'en-arbeidsgiver-to-ansettelser-samme-uke-med-opphold',
);
await expect(page).toHaveTitle('Ingen tilgang - Endringsmelding for pleiepenger sykt barn');
await expect(page.getByText('Hei Nora')).toBeVisible();
await expect(page.getByTestId('enArbeidsgiverToAnsettelserSammeUkeMedOpphold')).toBeVisible();
});
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ test('test', async ({ page }) => {
await page.getByTestId('timer-verdi').click();
await page.getByTestId('timer-verdi').fill('5');
await page.getByRole('button', { name: 'Ok' }).click();
await page.getByLabel('Endre uke 5 (01.02.2023 - 05.').click();
await page.getByLabel('Endre uke 6 (06.02').first().click();
await page.getByTestId('toggle-timer').click();
await page.getByTestId('timer-verdi').click();
await page.getByTestId('timer-verdi').fill('5');
await page.getByRole('button', { name: 'Ok' }).click();
Expand Down
2 changes: 1 addition & 1 deletion apps/endringsmelding-pleiepenger/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"license": "MIT",
"name": "@navikt/endringsmelding-pleiepenger",
"repository": "https://github.com/navikt/sif-brukerdialog",
"version": "2.37.1",
"version": "2.4.0",
"private": true,
"dependencies": {
"@navikt/ds-css": "7.10.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,82 @@
import { ISODateRangeToDateRange, dateToISODate } from '@navikt/sif-common-utils';
import { getPeriodeForArbeidsgiverOppslag } from '../../utils/initialDataUtils';
import { dateToISODate, ISODateRangeToDateRange, ISODateToDate } from '@navikt/sif-common-utils';
import { ArbeidsgiverMedAnsettelseperioder } from '../../types';
import {
getArbeidsgivereFromArbeidsgiverOrganisasjoner,
getPeriodeForArbeidsgiverOppslag,
} from '../../utils/initialDataUtils';
import { AARegArbeidsgiverOrganisasjon } from '../endpoints/arbeidsgivereEndpoint';

describe('getPeriodeForArbeidsgiverOppslag', () => {
const endringsperiode = ISODateRangeToDateRange('2022-05-01/2022-10-01');
describe('initialDataUtils', () => {
describe('getPeriodeForArbeidsgiverOppslag', () => {
const endringsperiode = ISODateRangeToDateRange('2022-05-01/2022-10-01');

it('returnerer minste dateRange ut fra maks endringsperiode og samletSøknadsperiode', () => {
const samletSøknadsperiode = ISODateRangeToDateRange('2022-06-01/2022-09-01');
const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode);
expect(result).toBeDefined();
if (result) {
expect(dateToISODate(result.from)).toEqual('2022-06-01');
expect(dateToISODate(result.to)).toEqual('2022-09-01');
}
it('returnerer minste dateRange ut fra maks endringsperiode og samletSøknadsperiode', () => {
const samletSøknadsperiode = ISODateRangeToDateRange('2022-06-01/2022-09-01');
const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode);
expect(result).toBeDefined();
if (result) {
expect(dateToISODate(result.from)).toEqual('2022-06-01');
expect(dateToISODate(result.to)).toEqual('2022-09-01');
}
});
it('returnerer endringsperiode hvis samletSøknadsperiode går utover endringsperiode', () => {
const samletSøknadsperiode = ISODateRangeToDateRange('2021-01-01/2023-01-01');
const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode);
expect(result).toBeDefined();
if (result) {
expect(dateToISODate(result.from)).toEqual('2022-05-01');
expect(dateToISODate(result.to)).toEqual('2022-10-01');
}
});
});
it('returnerer endringsperiode hvis samletSøknadsperiode går utover endringsperiode', () => {
const samletSøknadsperiode = ISODateRangeToDateRange('2021-01-01/2023-01-01');
const result = getPeriodeForArbeidsgiverOppslag(samletSøknadsperiode, endringsperiode);
expect(result).toBeDefined();
if (result) {
expect(dateToISODate(result.from)).toEqual('2022-05-01');
expect(dateToISODate(result.to)).toEqual('2022-10-01');
}

describe('getArbeidsgivereFromArbeidsgiverOrganisasjoner', () => {
it('oppretter ansettelsesperiode riktig når bruker har ett ansettelsesforhold hos én arbeidsgiver', () => {
const organisasjoner: AARegArbeidsgiverOrganisasjon[] = [
{
navn: 'a',
organisasjonsnummer: '123',
ansattFom: '2022-01-01',
ansattTom: '2022-02-01',
},
];

const expectedResult: ArbeidsgiverMedAnsettelseperioder[] = [
{
key: 'a_123',
navn: 'a',
organisasjonsnummer: '123',
ansettelsesperioder: [{ from: ISODateToDate('2022-01-01'), to: ISODateToDate('2022-02-01') }],
},
];
expect(getArbeidsgivereFromArbeidsgiverOrganisasjoner(organisasjoner)).toEqual(expectedResult);
});
it('oppretter ansettelsesperioder riktig når bruker har to ansettelsesforhold hos samme arbeidsgiver', () => {
const organisasjoner: AARegArbeidsgiverOrganisasjon[] = [
{
navn: 'a',
organisasjonsnummer: '123',
ansattFom: '2022-01-01',
ansattTom: '2022-02-01',
},
{
navn: 'a',
organisasjonsnummer: '123',
ansattFom: '2022-02-15',
},
];
const expectedResult: ArbeidsgiverMedAnsettelseperioder[] = [
{
key: 'a_123',
navn: 'a',
organisasjonsnummer: '123',
ansettelsesperioder: [
{ from: ISODateToDate('2022-01-01'), to: ISODateToDate('2022-02-01') },
{ from: ISODateToDate('2022-02-15') },
],
},
];
expect(getArbeidsgivereFromArbeidsgiverOrganisasjoner(organisasjoner)).toEqual(expectedResult);
});
});
});
Original file line number Diff line number Diff line change
@@ -1,37 +1,29 @@
import { DateRange, dateToISODate, ISODate, ISODateToDate } from '@navikt/sif-common-utils';
import { Arbeidsgiver } from '@types';
import { DateRange, dateToISODate, ISODate } from '@navikt/sif-common-utils';
import { ArbeidsgiverMedAnsettelseperioder } from '@types';
import { getArbeidsgivereFromArbeidsgiverOrganisasjoner } from '../../utils/initialDataUtils';
import api from '../api';
import { ApiEndpointPsb } from './';
import { getArbeidsgiverKey } from '../../utils/arbeidsgiverUtils';

type AAregArbeidsgiver = {
organisasjoner?: Array<{
organisasjonsnummer: string;
navn: string;
ansattFom?: ISODate;
ansattTom?: ISODate;
}>;
export type AAregArbeidsgiver = {
organisasjoner?: AARegArbeidsgiverOrganisasjon[];
};

export type AARegArbeidsgiverOrganisasjon = {
organisasjonsnummer: string;
navn: string;
ansattFom?: ISODate;
ansattTom?: ISODate;
};

export const arbeidsgivereEndpoint = {
fetch: async (periode: DateRange): Promise<Arbeidsgiver[]> => {
fetch: async (periode: DateRange): Promise<ArbeidsgiverMedAnsettelseperioder[]> => {
try {
const { from, to } = periode;
const { data } = await api.psb.get<AAregArbeidsgiver>(
ApiEndpointPsb.arbeidsgiver,
`ytelse=endringsmelding-pleiepenger&fra_og_med=${dateToISODate(from)}&til_og_med=${dateToISODate(to)}`,
`ytelse=endringsmelding-pleiepenger&fra_og_med=${dateToISODate(from)}&til_og_med=${dateToISODate(to)}&inkluderAlleAnsettelsesperioder=true`,
);
const aaArbeidsgivere: Arbeidsgiver[] = [];
(data.organisasjoner || []).forEach((a) => {
aaArbeidsgivere.push({
key: getArbeidsgiverKey(a.organisasjonsnummer),
organisasjonsnummer: a.organisasjonsnummer,
navn: a.navn,
ansattFom: a.ansattFom ? ISODateToDate(a.ansattFom) : undefined,
ansattTom: a.ansattTom ? ISODateToDate(a.ansattTom) : undefined,
});
});
return Promise.resolve(aaArbeidsgivere);
return Promise.resolve(getArbeidsgivereFromArbeidsgiverOrganisasjoner(data.organisasjoner || []));
} catch (error) {
return Promise.reject(error);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { isForbidden, isUnauthorized } from '@navikt/sif-common-core-ds/src/util
import { getMaybeEnv } from '@navikt/sif-common-env';
import { DateRange, dateRangeUtils } from '@navikt/sif-common-utils';
import {
Arbeidsgiver,
ArbeidsgiverMedAnsettelseperioder,
IngenTilgangÅrsak,
isK9Sak,
isUgyldigK9SakFormat,
Expand Down Expand Up @@ -32,7 +32,7 @@ export const fetchInitialData = async (
søker: Søker;
k9saker: K9Sak[];
antallSakerFørEndringsperiode: number;
arbeidsgivere: Arbeidsgiver[];
arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[];
lagretSøknadState?: SøknadStatePersistence;
}> => {
const [søker, k9sakerResult] = await Promise.all([søkerEndpoint.fetch(), sakerEndpoint.fetch()]);
Expand All @@ -53,7 +53,7 @@ export const fetchInitialData = async (

try {
let k9saker: K9Sak[];
let arbeidsgivere: Arbeidsgiver[];
let arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[];

const sakerInnenforEndringsperiode = k9sakerResult.k9Saker;
const sakerFørEndringsperiode = k9sakerResult.eldreSaker;
Expand All @@ -76,7 +76,7 @@ export const fetchInitialData = async (
})
.then((result) => {
arbeidsgivere = result;
return kontrollerTilgang(k9saker, tillattEndringsperiode);
return kontrollerTilgang(k9saker, tillattEndringsperiode, arbeidsgivere);
})
.then(() => hentOgKontrollerLagretSøknadState(søker, k9saker))
.then((lagretSøknadState) => {
Expand Down Expand Up @@ -152,8 +152,13 @@ const kontrollerSaker = (
return Promise.resolve({ k9saker, dateRangeAlleSaker });
};

const kontrollerTilgang = async (k9saker: K9Sak[], tillattEndringsperiode: DateRange): Promise<boolean> => {
const resultat = tilgangskontroll(k9saker, tillattEndringsperiode);
const kontrollerTilgang = async (
k9saker: K9Sak[],
tillattEndringsperiode: DateRange,
arbeidsgivere: ArbeidsgiverMedAnsettelseperioder[],
): Promise<boolean> => {
const resultat = tilgangskontroll(k9saker, tillattEndringsperiode, arbeidsgivere);

if (resultat.kanBrukeSøknad) {
return Promise.resolve(true);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { dateFormatter, MaybeDateRange, sortMaybeDateRange } from '@navikt/sif-common-utils';
import { AppText, useAppIntl } from '../../i18n';
import { Box, List } from '@navikt/ds-react';
import ExpandableInfo from '@navikt/sif-common-core-ds/src/components/expandable-info/ExpandableInfo';

interface Props {
ansettelsesperioder: MaybeDateRange[];
}

const Ansettelsesperiode = ({ periode }: { periode: MaybeDateRange }) => {
if (periode.from === undefined && periode.to === undefined) {
return null;
}
if (periode.from && periode.to) {
return (
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFomTom"
values={{ fom: dateFormatter.compact(periode.from), tom: dateFormatter.compact(periode.to) }}
/>
);
}
if (periode.from) {
return (
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFom"
values={{ dato: dateFormatter.compact(periode.from) }}
/>
);
}
if (periode.to) {
return (
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.ansattTom"
values={{ dato: dateFormatter.compact(periode.to) }}
/>
);
}
return null;
};

const AnsettelsesperioderInfo = ({ ansettelsesperioder }: Props) => {
const { text } = useAppIntl();
return ansettelsesperioder.length === 1 ? (
<Ansettelsesperiode periode={ansettelsesperioder[0]} />
) : (
<ExpandableInfo title={text('arbeidsaktivitetBlockHeader.arbeidsgiver.ansettelsesperioder')}>
<Box marginBlock="0 6">
<List>
{ansettelsesperioder
.sort(sortMaybeDateRange)
.reverse()
.map((periode, index) => {
return (
<List.Item key={index}>
<Ansettelsesperiode periode={periode} />
</List.Item>
);
})}
</List>
</Box>
</ExpandableInfo>
);
};

export default AnsettelsesperioderInfo;
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { ExpansionCard, Panel } from '@navikt/ds-react';
import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block';
import { ArbeidsaktivitetType, Arbeidsgiver } from '@types';
import { ArbeidsaktivitetType, ArbeidsgiverMedAnsettelseperioder } from '@types';
import ArbeidsaktivitetBlockHeader from './ArbeidsaktivitetBlockHeader';

interface Props {
navn: string;
type: ArbeidsaktivitetType;
arbeidsgiver?: Arbeidsgiver;
arbeidsgiver?: ArbeidsgiverMedAnsettelseperioder;
endret?: { tekst: string };
erUkjent?: boolean;
renderAsExpansionCard?: boolean;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import { BodyLong, Heading } from '@navikt/ds-react';
import { BodyLong, Box, Heading } from '@navikt/ds-react';
import React from 'react';
import { Office1 } from '@navikt/ds-icons';
import Block from '@navikt/sif-common-core-ds/src/atoms/block/Block';
import { dateFormatter } from '@navikt/sif-common-utils';
import { ArbeidsaktivitetType, Arbeidsgiver } from '@types';
import { ArbeidsaktivitetType, ArbeidsgiverMedAnsettelseperioder } from '@types';
import { AppText } from '../../i18n';
import EndretTag from '../tags/EndretTag';
import NyTag from '../tags/NyTag';
import './arbeidsaktivitetBlockHeader.scss';
import AnsettelsesperioderInfo from './AnsettelsesperioderInfo';

interface Props {
navn: string;
arbeidsgiver?: Arbeidsgiver;
arbeidsgiver?: ArbeidsgiverMedAnsettelseperioder;
type: ArbeidsaktivitetType;
erUkjentAktivitet?: boolean;
endret?: {
Expand All @@ -38,24 +38,13 @@ const ArbeidsaktivitetBlockHeader: React.FunctionComponent<Props> = ({
</Heading>
{type === ArbeidsaktivitetType.arbeidstaker && arbeidsgiver !== undefined ? (
<BodyLong as="div">
<div>
<Box>
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.orgnummer"
values={{ orgnr: arbeidsgiver.organisasjonsnummer }}
/>
</div>
{arbeidsgiver.ansattFom && (
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.ansattFom"
values={{ dato: dateFormatter.full(arbeidsgiver.ansattFom) }}
/>
)}
{arbeidsgiver.ansattTom && (
<AppText
id="arbeidsaktivitetBlockHeader.arbeidsgiver.ansattTom"
values={{ dato: dateFormatter.full(arbeidsgiver.ansattTom) }}
/>
)}
</Box>
<AnsettelsesperioderInfo ansettelsesperioder={arbeidsgiver.ansettelsesperioder} />
</BodyLong>
) : undefined}
{(endret || erUkjentAktivitet) && (
Expand Down
Loading