Skip to content

Commit

Permalink
TSFF-791: Fiks validering slik at privat og org arbeidsgiver ikke beg…
Browse files Browse the repository at this point in the history
…ge er påkrevd (#6550)

* Fiks validering slik at privat og org arbeidsgiver ikke begge er påkrevd

* Fiks nullsjekk og import

* Legg til type i utilfunksjon

* Bruk riktig type i util

* Fjern ubrukt import

* Bruk === heller enn ==
  • Loading branch information
audunel authored Sep 6, 2024
1 parent ad1dd99 commit 42f78c0
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 43 deletions.
1 change: 1 addition & 0 deletions envDir/.env.development
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ VITE_FIX_SOKNADSFRIST_KALENDER_OG_READONLY=true
VITE_INKLUDER_KALENDER_PILS=true
VITE_OVERSTYRING_UTTAK=true
VITE_NYE_NOKKELTALL=true
VITE_SKILL_UT_PRIVATPERSON=true
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import {ArbeidsgiverOpplysningerPerId} from "@k9-sak-web/types";

export const getAktivitet = (aktivitetStatus, getKodeverknavn) =>
// hvis valgtAndel ikke satt ennå return tom string.
aktivitetStatus === undefined ? '' : getKodeverknavn(aktivitetStatus);
Expand All @@ -8,16 +10,14 @@ export const getInntektskategori = (inntektkategori, getKodeverknavn) =>

const getEndCharFromId = id => (id ? `...${id.substring(id.length - 4, id.length)}` : '');

export const createVisningsnavnForAndel = (andel, getKodeverknavn, arbeidsgiverOpplysningerPerId) => {
export const createArbeidsgiverVisningsnavnForAndel = (andel, getKodeverknavn, arbeidsgiverOpplysningerPerId) => {
if (!andel) return '';

let identifikator;
if (andel.arbeidsgiverOrgnr) {
identifikator = andel.arbeidsgiverOrgnr;
} else if (andel.arbeidsgiver?.arbeidsgiverOrgnr) {
identifikator = andel.arbeidsgiver.arbeidsgiverOrgnr;
} else if (andel.arbeidsgiver?.identifikator) {
identifikator = andel.arbeidsgiver.identifikator;
}

if (!identifikator) {
Expand All @@ -36,4 +36,29 @@ export const createVisningsnavnForAndel = (andel, getKodeverknavn, arbeidsgiverO
return `${navn} (${identifikator})${getEndCharFromId(andel.eksternArbeidsforholdId)}`;
};

export default createVisningsnavnForAndel;
export const createPrivatarbeidsgiverVisningsnavnForAndel = (andel, getKodeverknavn, arbeidsgiverOpplysningerPerId: ArbeidsgiverOpplysningerPerId) => {
if (!andel) return '';

let identifikator;
if (andel.arbeidsgiverPersonIdent) {
identifikator = andel.arbeidsgiverPersonIdent;
} else if (andel.arbeidsgiver?.arbeidsgiverPersonIdent) {
identifikator = andel.arbeidsgiver.arbeidsgiverPersonIdent;
}

if(identifikator == null) {
return ''
}

const arbeidsgiverOpplysninger = Object.values(arbeidsgiverOpplysningerPerId).find(v => v?.personIdentifikator === identifikator)

const navn = arbeidsgiverOpplysninger != null
? arbeidsgiverOpplysninger?.navn
: '';

if (!navn) {
return `${identifikator}${getEndCharFromId(andel.eksternArbeidsforholdId)}`;
}

return `${navn} (${identifikator})${getEndCharFromId(andel.eksternArbeidsforholdId)}`;
};
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { ArbeidsgiverOpplysningerPerId, BeregningsresultatPeriode, KodeverkMedNa
import moment from 'moment';
import React, { Component, RefObject } from 'react';
import { WrappedComponentProps, injectIntl } from 'react-intl';
import { createVisningsnavnForAndel } from './TilkjentYteleseUtils';
import { createArbeidsgiverVisningsnavnForAndel } from './TilkjentYteleseUtils';
import TilkjentYtelseTimelineData from './TilkjentYtelseTimelineData';

import styles from './tilkjentYtelse.module.css';
Expand Down Expand Up @@ -68,7 +68,7 @@ const createTooltipContent = (intl, item, getKodeverknavn, arbeidsgiverOpplysnin
formatMessage(
{ id: 'Timeline.tooltip.dagsatsPerAndel' },
{
arbeidsgiver: createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
arbeidsgiver: createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
dagsatsPerAndel: Number(andel.refusjon) + Number(andel.tilSoker),
},
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { renderWithIntl } from '@fpsak-frontend/utils-test/test-utils';
import { screen } from '@testing-library/react';
import React from 'react';
import messages from '../../i18n/nb_NO.json';
import createVisningsnavnForAndel from './TilkjentYteleseUtils';
import { createArbeidsgiverVisningsnavnForAndel } from './TilkjentYteleseUtils';
import { PeriodeMedId } from './TilkjentYtelse';
import TilkjentYtelseTimeLineData from './TilkjentYtelseTimelineData';

Expand Down Expand Up @@ -80,6 +80,6 @@ describe('<TilkjentYtelseTimeLineData>', () => {
);

expect(screen.getByText('Aktivitetsstatus:')).toBeInTheDocument();
expect(createVisningsnavnForAndel(selectedItemDataFL.andeler[0], getKodeverknavn, {})).toBe('Frilans');
expect(createArbeidsgiverVisningsnavnForAndel(selectedItemDataFL.andeler[0], getKodeverknavn, {})).toBe('Frilans');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import moment from 'moment';
import React, { useEffect } from 'react';
import { FormattedMessage, useIntl } from 'react-intl';

import { createVisningsnavnForAndel, getAktivitet } from './TilkjentYteleseUtils';
import { createArbeidsgiverVisningsnavnForAndel, getAktivitet } from './TilkjentYteleseUtils';
import { PeriodeMedId } from './TilkjentYtelse';
import styles from './tilkjentYtelse.module.css';
import UtbetalingsgradDetaljer from './UtbetalingsgradDetaljer';
Expand Down Expand Up @@ -158,7 +158,7 @@ const TilkjentYtelseTimeLineData = ({
id="Timeline.tooltip.dagsatsPerAndel"
key={`index${index + 1}`}
values={{
arbeidsgiver: createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
arbeidsgiver: createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
dagsatsPerAndel: Number(andel.refusjon),
}}
/>
Expand All @@ -175,7 +175,7 @@ const TilkjentYtelseTimeLineData = ({
id="Timeline.tooltip.dagsatsPerAndel"
key={`index${index + 1}`}
values={{
arbeidsgiver: createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
arbeidsgiver: createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId),
dagsatsPerAndel: Number(andel.tilSoker),
}}
/>
Expand All @@ -191,13 +191,13 @@ const TilkjentYtelseTimeLineData = ({
<Tabs className="mt-12" value={String(selectedAndelIndex)} onChange={setSelectedAndelIndex}>
<Tabs.List>
{andeler.map((andel, index) => {
const label = createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId);
const label = createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId);
return <Tabs.Tab value={String(index)} key={label} label={label} />;
})}
</Tabs.List>
{andeler.map((andel, index) => (
<Tabs.Panel
key={createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId)}
key={createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgiverOpplysningerPerId)}
value={String(index)}
>
<div className="p-4">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import { Alert, BodyShort, Table } from '@navikt/ds-react';
import React from 'react';
import { WrappedComponentProps, useIntl } from 'react-intl';
import { FieldArrayFieldsProps, FieldArrayMetaProps } from 'redux-form';
import { createVisningsnavnForAndel, getInntektskategori } from '../TilkjentYteleseUtils';
import {
createArbeidsgiverVisningsnavnForAndel,
createPrivatarbeidsgiverVisningsnavnForAndel,
getInntektskategori
} from '../TilkjentYteleseUtils';

interface OwnProps {
fields: FieldArrayFieldsProps<any>;
Expand Down Expand Up @@ -64,7 +68,8 @@ const Andeler = ({ fields, meta, alleKodeverk, arbeidsgivere }: Partial<OwnProps
{fields.map((fieldId: string, index: number, field: FieldArrayFieldsProps<any>) => {
const andel = field.get(index);
const inntektskategori = getInntektskategori(andel.inntektskategori, getKodeverknavn);
const arbeidsgiver = createVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgivere);
const arbeidsgiver = createArbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgivere);
const arbeidsgiverPrivatperson = createPrivatarbeidsgiverVisningsnavnForAndel(andel, getKodeverknavn, arbeidsgivere);

return (
<Table.Row key={fieldId}>
Expand All @@ -74,6 +79,9 @@ const Andeler = ({ fields, meta, alleKodeverk, arbeidsgivere }: Partial<OwnProps
<Table.DataCell>
<BodyShort size="small">{arbeidsgiver}</BodyShort>
</Table.DataCell>
<Table.DataCell>
<BodyShort size="small">{arbeidsgiverPrivatperson}</BodyShort>
</Table.DataCell>
<Table.DataCell>
<BodyShort size="small">{andel.tilSoker}</BodyShort>
</Table.DataCell>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { FieldArrayFieldsProps, FieldArrayMetaProps } from 'redux-form';
import NyArbeidsgiverModal from './NyArbeidsgiverModal';

import styles from './periode.module.css';
import {atLeastOneRequired} from "@fpsak-frontend/utils/src/validation/validators";

const minValue0 = minValue(0);
const maxValue100 = maxValue(100);
Expand Down Expand Up @@ -131,10 +132,10 @@ export const NyAndel = ({
label={{ id: 'TilkjentYtelse.NyPeriode.Arbeidsgiver' }}
bredde="xl"
name={`${periodeElementFieldId}.arbeidsgiverOrgnr`}
validate={[required]}
selectValues={
skillUtPrivatperson ? mapArbeidsgivereOrg(arbeidsgivere) : mapArbeidsgivere(arbeidsgivere)
}
validate={skillUtPrivatperson
? [value => atLeastOneRequired(value, values.arbeidsgiverPersonIdent)]
: [required]}
selectValues={skillUtPrivatperson ? mapArbeidsgivereOrg(arbeidsgivere) : mapArbeidsgivere(arbeidsgivere)}
/>
<div
onClick={() => setOpen(true)}
Expand All @@ -146,30 +147,15 @@ export const NyAndel = ({
<Image className={styles.addCircleIcon} src={addCircleIcon} alt="Ny arbeidsgiver" />
</div>
</FlexColumn>
{skillUtPrivatperson && (
<FlexColumn className={styles.relative}>
<SelectField
label={{ id: 'TilkjentYtelse.NyPeriode.ArbeidsgiverPrivatperson' }}
bredde="xl"
name={`${periodeElementFieldId}.arbeidsgiverPersonIdent`}
validate={[required]}
selectValues={mapArbeidsgiverePrivatperson(arbeidsgivere)}
/>
<div
onClick={() => setOpen(true)}
onKeyDown={() => setOpen(true)}
className={styles.addArbeidsforhold}
role="button"
tabIndex={0}
>
<Image
className={styles.addCircleIcon}
src={addCircleIcon}
alt="Ny arbeidsgiver (privatperson)"
/>
</div>
</FlexColumn>
)}
{skillUtPrivatperson && (<FlexColumn className={styles.relative}>
<SelectField
label={{ id: 'TilkjentYtelse.NyPeriode.ArbeidsgiverPrivatperson' }}
bredde="xl"
name={`${periodeElementFieldId}.arbeidsgiverPersonIdent`}
validate={[value => atLeastOneRequired(value, values.arbeidsgiverOrgnr)]}
selectValues={mapArbeidsgiverePrivatperson(arbeidsgivere)}
/>
</FlexColumn>)}
</>
)}
<FlexColumn>
Expand Down
1 change: 1 addition & 0 deletions packages/utils/src/validation/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import {
export const maxLengthOrFodselsnr = length => text =>
isEmpty(text) || text.toString().trim().length <= length ? null : maxLengthOrFodselsnrMessage(length);
export const required = value => (isEmpty(value) ? isRequiredMessage() : undefined);
export const atLeastOneRequired = ((value, otherValue) => (isEmpty(value) && isEmpty(otherValue) ? isRequiredMessage() : undefined));
export const notDash = value => (value === '-' ? isRequiredMessage() : undefined);
export const requiredIfNotPristine = (value, allValues, props) =>
props.pristine || !isEmpty(value) ? undefined : isRequiredMessage();
Expand Down

0 comments on commit 42f78c0

Please sign in to comment.