Skip to content

Commit

Permalink
Konkursvarsel brevsending (#6477)
Browse files Browse the repository at this point in the history
* Fiks brevpanel så valgt mottaker viser korrekt etter bytte av mal.

Før dette kunne tidlegare valgt mottaker vise som valgt etter at ein hadde bytte mal, sjølv om komponent state hadde resatt valgt mottaker til å vere første på valgte mal.

* Korrigert typing på Template frå formidling.

* Brev: Legg til støtte for feilmelding ved valg av utilgjengelig mottaker.

Bakgrunn:
Ønske om å vise feilmelding og hindre at saksbehandler kan forsøke å sende brev som vi veit i neste omgang vil feile fordi mottaker, feks eit firma er gått konkurs.

Løysing:
Backend implementerer ny property "utilgjengelig" på mottaker definert på maler returnert, denne blir satt med enum som signalierer årsak til at mottaker er utilgjengelig for brevsending. Viss utilgjengelig ikkje er satt er mottaker normalt tilgjengelig.

Backend endrer også til å alltid returnere mottaker på maler, i motsetning til før då mottaker kunne vere undefined når mal berre skulle sendast til brukar saka gjaldt. Ny frontend kode forventer at det alltid er satt minst ein mottaker for at det skal vere mulig å sende brev basert på mal. Dette forenkler valideringskoden i frontend.

Frontend vil no vise evt signal om utilgjengelig mottaker i nedtrekksliste for å velge mottaker, og viss saksbehandler likevel prøver å sende til ein utilgjengelig mottaker vil det bli vist valideringsfeil og sending vil bli blokkert.

Dette er pr no berre implementert ved valg av mottaker frå nedtrekksliste, ikkje ved sending til tredjepartsmottaker.

* Brev: Vis feilmelding ved forsøk på sending av brev til opphørt tredjepartsmottaker.

Tilsvarande som ved valg av utilgjengelig mottaker.

* yarn.lock fiks etter merge.

* yarn install etter merge.

* Fiksa suffiks på imports. (ts => js)
  • Loading branch information
josstn authored Aug 30, 2024
1 parent 66e4b7c commit 224c350
Show file tree
Hide file tree
Showing 21 changed files with 422 additions and 201 deletions.
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,14 @@
"workerDirectory": "public"
},
"lint-staged": {
"packages/**/!(*.module.d.css).(ts|tsx|js|jsx)": ["eslint --cache --fix", "prettier --write"],
"packages/**/*.css": ["stylelint --fix", "prettier --write"]
"packages/**/!(*.module.d.css).(ts|tsx|js|jsx)": [
"eslint --cache --fix",
"prettier --write"
],
"packages/**/*.css": [
"stylelint --fix",
"prettier --write"
]
},
"packageManager": "yarn@3.4.1"
}
147 changes: 74 additions & 73 deletions packages/behandling-utvidet-rett/src/components/UtvidetRettProsess.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,81 +20,83 @@ import { UtvidetRettBehandlingApiKeys, restApiUtvidetRettHooks } from '../data/u
import prosessStegUtvidetRettPanelDefinisjoner from '../panelDefinisjoner/prosessStegUtvidetRettPanelDefinisjoner';
import { ProsessProps } from '../types/ProsessProps';

const getHentFritekstbrevHtmlCallback = (
hentFriteksbrevHtml: (data: any) => Promise<any>,
behandling: Behandling,
fagsak: Fagsak,
fagsakPerson: FagsakPerson,
) => (parameters: any) =>
hentFriteksbrevHtml({
...parameters,
eksternReferanse: behandling.uuid,
ytelseType: fagsak.sakstype,
saksnummer: fagsak.saksnummer,
aktørId: fagsakPerson.aktørId,
avsenderApplikasjon: bestemAvsenderApp(behandling.type.kode),
});

const getForhandsvisTilbakeCallback = (
forhandsvisTilbakekrevingMelding: (data: any) => Promise<any>,
fagsak: Fagsak,
behandling: Behandling,
) => (mottaker: string, brevmalkode: string, fritekst: string, saksnummer: string) => {
const data = {
behandlingUuid: behandling.uuid,
fagsakYtelseType: fagsak.sakstype,
varseltekst: fritekst || '',
mottaker,
brevmalkode,
saksnummer,
const getHentFritekstbrevHtmlCallback =
(
hentFriteksbrevHtml: (data: any) => Promise<any>,
behandling: Behandling,
fagsak: Fagsak,
fagsakPerson: FagsakPerson,
) =>
(parameters: any) =>
hentFriteksbrevHtml({
...parameters,
eksternReferanse: behandling.uuid,
ytelseType: fagsak.sakstype,
saksnummer: fagsak.saksnummer,
aktørId: fagsakPerson.aktørId,
avsenderApplikasjon: bestemAvsenderApp(behandling.type.kode),
});

const getForhandsvisTilbakeCallback =
(forhandsvisTilbakekrevingMelding: (data: any) => Promise<any>, fagsak: Fagsak, behandling: Behandling) =>
(mottaker: string, brevmalkode: string, fritekst: string, saksnummer: string) => {
const data = {
behandlingUuid: behandling.uuid,
fagsakYtelseType: fagsak.sakstype,
varseltekst: fritekst || '',
mottaker,
brevmalkode,
saksnummer,
};
return forhandsvisTilbakekrevingMelding(data).then(response => forhandsvis(response));
};
return forhandsvisTilbakekrevingMelding(data).then(response => forhandsvis(response));
};

const getLagringSideeffekter = (
toggleIverksetterVedtakModal,
toggleFatterVedtakModal,
toggleOppdatereFagsakContext,
oppdaterProsessStegOgFaktaPanelIUrl,
opneSokeside,
lagreDokumentdata,
) => async aksjonspunktModels => {
const erRevurderingsaksjonspunkt = aksjonspunktModels.some(
apModel =>
(apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_MANUELL ||
apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_ETTERKONTROLL) &&
apModel.sendVarsel,
);
const visIverksetterVedtakModal =
aksjonspunktModels[0].isVedtakSubmission &&
[aksjonspunktCodes.VEDTAK_UTEN_TOTRINNSKONTROLL, aksjonspunktCodes.FATTER_VEDTAK].includes(
aksjonspunktModels[0].kode,
const getLagringSideeffekter =
(
toggleIverksetterVedtakModal,
toggleFatterVedtakModal,
toggleOppdatereFagsakContext,
oppdaterProsessStegOgFaktaPanelIUrl,
opneSokeside,
lagreDokumentdata,
) =>
async aksjonspunktModels => {
const erRevurderingsaksjonspunkt = aksjonspunktModels.some(
apModel =>
(apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_MANUELL ||
apModel.kode === aksjonspunktCodes.VARSEL_REVURDERING_ETTERKONTROLL) &&
apModel.sendVarsel,
);
const visFatterVedtakModal =
aksjonspunktModels[0].isVedtakSubmission && aksjonspunktModels[0].kode === aksjonspunktCodes.FORESLA_VEDTAK;

if (erRevurderingsaksjonspunkt) {
toggleOppdatereFagsakContext(false);
}

if (aksjonspunktModels[0].isVedtakSubmission) {
const dokumentdata = lagDokumentdata(aksjonspunktModels[0]);
if (dokumentdata) await lagreDokumentdata(dokumentdata);
}

// Returner funksjon som blir kjørt etter lagring av aksjonspunkt(er)
return () => {
if (visFatterVedtakModal) {
toggleFatterVedtakModal(true);
} else if (visIverksetterVedtakModal) {
toggleIverksetterVedtakModal(true);
} else if (erRevurderingsaksjonspunkt) {
opneSokeside();
} else {
oppdaterProsessStegOgFaktaPanelIUrl('default', 'default');
const visIverksetterVedtakModal =
aksjonspunktModels[0].isVedtakSubmission &&
[aksjonspunktCodes.VEDTAK_UTEN_TOTRINNSKONTROLL, aksjonspunktCodes.FATTER_VEDTAK].includes(
aksjonspunktModels[0].kode,
);
const visFatterVedtakModal =
aksjonspunktModels[0].isVedtakSubmission && aksjonspunktModels[0].kode === aksjonspunktCodes.FORESLA_VEDTAK;

if (erRevurderingsaksjonspunkt) {
toggleOppdatereFagsakContext(false);
}

if (aksjonspunktModels[0].isVedtakSubmission) {
const dokumentdata = lagDokumentdata(aksjonspunktModels[0]);
if (dokumentdata) await lagreDokumentdata(dokumentdata);
}

// Returner funksjon som blir kjørt etter lagring av aksjonspunkt(er)
return () => {
if (visFatterVedtakModal) {
toggleFatterVedtakModal(true);
} else if (visIverksetterVedtakModal) {
toggleIverksetterVedtakModal(true);
} else if (erRevurderingsaksjonspunkt) {
opneSokeside();
} else {
oppdaterProsessStegOgFaktaPanelIUrl('default', 'default');
}
};
};
};

const UtvidetRettProsess = ({
data,
Expand Down Expand Up @@ -128,9 +130,8 @@ const UtvidetRettProsess = ({
UtvidetRettBehandlingApiKeys.HENT_FRITEKSTBREV_HTML,
);

const { startRequest: lagreAksjonspunkter, data: apBehandlingRes } = restApiUtvidetRettHooks.useRestApiRunner<
Behandling
>(UtvidetRettBehandlingApiKeys.SAVE_AKSJONSPUNKT);
const { startRequest: lagreAksjonspunkter, data: apBehandlingRes } =
restApiUtvidetRettHooks.useRestApiRunner<Behandling>(UtvidetRettBehandlingApiKeys.SAVE_AKSJONSPUNKT);
const { startRequest: forhandsvisTilbakekrevingMelding } = restApiUtvidetRettHooks.useRestApiRunner<Behandling>(
UtvidetRettBehandlingApiKeys.PREVIEW_TILBAKEKREVING_MESSAGE,
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {FeatureToggles, Vilkar} from '@k9-sak-web/types';
import { FeatureToggles, Vilkar } from '@k9-sak-web/types';
import InngangsvilkarProsessStegPanelDef from './prosessStegPaneler/InngangsvilkarProsessStegPanelDef';
import VedtakProsessStegPanelDef from './prosessStegPaneler/VedtakProsessStegPanelDef';
import UtvidetRettProsessStegPanelDef from './prosessStegPaneler/UtvidetRettProsessStegPanelDef';
import AlderProsessStegPanelDef from './prosessStegPaneler/AlderProsessStegPanelDef';
import vilkarType from "@fpsak-frontend/kodeverk/src/vilkarType";
import vilkarType from '@fpsak-frontend/kodeverk/src/vilkarType';

const prosessStegUtvidetRettPanelDefinisjoner = (
erFagytelseTypeAleneOmOmsorgen: boolean,
Expand All @@ -12,21 +12,22 @@ const prosessStegUtvidetRettPanelDefinisjoner = (
featureToggles: FeatureToggles,
) => {
if (featureToggles.AKSJONSPUNKT_9015) {
const visAlderProsessSteg = erFagytelseTypeAleneOmOmsorgen || (erFagytelseTypeKroniskSyk && featureToggles.ALDERSVILKAR_KRONISK_SYK);
const harAldersvilkår = vilkar.some(v => v.vilkarType.kode === vilkarType.ALDERSVILKAR_BARN)
const visAlderProsessSteg =
erFagytelseTypeAleneOmOmsorgen || (erFagytelseTypeKroniskSyk && featureToggles.ALDERSVILKAR_KRONISK_SYK);
const harAldersvilkår = vilkar.some(v => v.vilkarType.kode === vilkarType.ALDERSVILKAR_BARN);

return visAlderProsessSteg && harAldersvilkår
? [
new AlderProsessStegPanelDef(),
new InngangsvilkarProsessStegPanelDef(),
new UtvidetRettProsessStegPanelDef(erFagytelseTypeAleneOmOmsorgen),
new VedtakProsessStegPanelDef(),
]
new AlderProsessStegPanelDef(),
new InngangsvilkarProsessStegPanelDef(),
new UtvidetRettProsessStegPanelDef(erFagytelseTypeAleneOmOmsorgen),
new VedtakProsessStegPanelDef(),
]
: [
new InngangsvilkarProsessStegPanelDef(),
new UtvidetRettProsessStegPanelDef(erFagytelseTypeAleneOmOmsorgen),
new VedtakProsessStegPanelDef(),
];
new InngangsvilkarProsessStegPanelDef(),
new UtvidetRettProsessStegPanelDef(erFagytelseTypeAleneOmOmsorgen),
new VedtakProsessStegPanelDef(),
];
}

return [
Expand Down
2 changes: 1 addition & 1 deletion packages/prosess-vedtak/src/components/brev/BrevPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ export const BrevPanel: React.FC<BrevPanelProps> = props => {
name="overstyrtMottaker"
selectValues={tilgjengeligeVedtaksbrev.alternativeMottakere.map(mottaker => (
<option value={JSON.stringify(mottaker)} key={mottaker.id}>
{lagVisningsnavnForMottaker(mottaker.id, personopplysninger, arbeidsgiverOpplysningerPerId)}
{lagVisningsnavnForMottaker(mottaker, personopplysninger, arbeidsgiverOpplysningerPerId)}
</option>
))}
className={readOnly ? styles.selectReadOnly : null}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { FagsakYtelsesType } from '@k9-sak-web/backend/k9sak/kodeverk/FagsakYtel
import { behandlingType } from '@k9-sak-web/backend/k9sak/kodeverk/behandling/BehandlingType.js';
import { K9sakApiKeys, requestApi } from '../../data/k9sakApi';
import MeldingIndex, { type BackendApi } from './MeldingIndex';
import { Mottaker } from '@k9-sak-web/backend/k9formidling/models/Mottaker.js';

const mockHistoryPush = vi.fn();

Expand Down Expand Up @@ -93,7 +94,7 @@ describe('<MeldingIndex>', () => {
[kodeverkTyper.REVURDERING_VARSLING_ÅRSAK]: [{ kode: 'kode', navn: 'Årsak 1', kodeverk: 'kode' }],
};

const aktorer = [
const aktorer: Mottaker[] = [
{ id: '00000000', type: 'AKTØRID' },
{ id: '123456789', type: 'ORGNR' },
];
Expand Down
12 changes: 8 additions & 4 deletions packages/sak-meldinger/src/components/Messages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ import React, { useEffect, useState } from 'react';
import { injectIntl, WrappedComponentProps } from 'react-intl';
import { connect } from 'react-redux';
import { InjectedFormProps } from 'redux-form';
import { RequestIntentionallyAborted } from "@k9-sak-web/backend/shared/RequestIntentionallyAborted.js";
import { RequestIntentionallyAborted } from '@k9-sak-web/backend/shared/RequestIntentionallyAborted.js';
import { MessagesApiKeys, requestMessagesApi, restApiMessagesHooks } from '../data/messagesApi';
import styles from './messages.module.css';
import { Mottaker } from '@k9-sak-web/backend/k9formidling/models/Mottaker.js';

const maxLength4000 = maxLength(4000);
const maxLength100000 = maxLength(100000);
Expand All @@ -51,7 +52,10 @@ export type FormValues = {
};

export interface BackendApi {
getBrevMottakerinfoEreg(orgnr: string, abort?: AbortSignal): Promise<EregOrganizationLookupResponse | RequestIntentionallyAborted>;
getBrevMottakerinfoEreg(
orgnr: string,
abort?: AbortSignal,
): Promise<EregOrganizationLookupResponse | RequestIntentionallyAborted>;
}

interface PureOwnProps {
Expand Down Expand Up @@ -167,7 +171,7 @@ export const MessagesImpl = ({

const valgtBrevmal = templates[brevmalkode];

const recipients: MottakerDto[] = templates[brevmalkode]?.mottakere ?? [];
const recipients: Mottaker[] = templates[brevmalkode]?.mottakere ?? [];

const tmpls: Template[] = Object.keys(templates).map(key => ({ ...templates[key], kode: key }));

Expand Down Expand Up @@ -311,7 +315,7 @@ export const MessagesImpl = ({
placeholder={intl.formatMessage({ id: 'Messages.ChooseRecipient' })}
selectValues={recipients.map(recipient => (
<option key={recipient.id} value={JSON.stringify(recipient)}>
{lagVisningsnavnForMottaker(recipient.id, personopplysninger, arbeidsgiverOpplysningerPerId)}
{lagVisningsnavnForMottaker(recipient, personopplysninger, arbeidsgiverOpplysningerPerId)}
</option>
))}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import React from 'react';
import { intlMock } from '../../i18n/index';
import messages from '../../i18n/nb_NO.json';
import { MessagesTilbakekrevingImpl as MessagesTilbakekreving } from './MessagesTilbakekreving';
import { Mottaker } from '@k9-sak-web/backend/k9formidling/models/Mottaker.js';

const mockProps = {
setRecipient: () => undefined,
Expand All @@ -27,7 +28,7 @@ describe('<MessagesTilbakekreving>', () => {
kodeverk: 'Engelsk',
};

const aktorer = [
const aktorer: Mottaker[] = [
{ id: '00000000', type: 'AKTØRID' },
{ id: '123456789', type: 'ORGNR' },
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { Button } from '@navikt/ds-react';
import type { MottakerDto } from '@navikt/k9-sak-typescript-client';
import { MessagesApiKeys, requestMessagesApi, restApiMessagesHooks } from '../data/messagesApi';
import styles from './messages.module.css';
import { Mottaker } from '@k9-sak-web/backend/k9formidling/models/Mottaker.js';

const maxLength4000 = maxLength(4000);
const maxLength100000 = maxLength(100000);
Expand Down Expand Up @@ -145,7 +146,7 @@ export const MessagesTilbakekrevingImpl = ({

const languageCode = getLanguageCodeFromSprakkode(sprakKode);

const recipients: MottakerDto[] =
const recipients: Mottaker[] =
templates && brevmalkode && templates[brevmalkode] && Array.isArray(templates[brevmalkode].mottakere)
? templates[brevmalkode].mottakere
: [];
Expand Down Expand Up @@ -253,7 +254,7 @@ export const MessagesTilbakekrevingImpl = ({
placeholder={intl.formatMessage({ id: 'Messages.ChooseRecipient' })}
selectValues={recipients.map(recipient => (
<option key={recipient.id} value={JSON.stringify(recipient)}>
{lagVisningsnavnForMottaker(recipient.id, personopplysninger, arbeidsgiverOpplysningerPerId)}
{lagVisningsnavnForMottaker(recipient, personopplysninger, arbeidsgiverOpplysningerPerId)}
</option>
))}
bredde="xxl"
Expand Down
16 changes: 6 additions & 10 deletions packages/utils/src/formidlingUtils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ import vedtaksbrevtype from '@fpsak-frontend/kodeverk/src/vedtaksbrevtype';
import ForhåndsvisRequest from '@k9-sak-web/types/src/formidlingTsType';
import { dokumentdatatype } from '@k9-sak-web/konstanter';
import { DokumentDataType } from '@k9-sak-web/types/src/dokumentdata';
import {
bestemAvsenderApp as v2BestemAvsenderApp,
lagVisningsnavnForMottaker as v2LagvisningsnavnForMottaker,
} from '@k9-sak-web/gui/utils/formidling.js';
import { bestemAvsenderApp as v2BestemAvsenderApp } from '@k9-sak-web/gui/utils/formidling.js';
import { isBehandlingType } from '@k9-sak-web/backend/combined/kodeverk/behandling/BehandlingType.js';
import type { BehandlingInfo } from '@k9-sak-web/gui/sak/BehandlingInfo.js';
import type { Fagsak } from '@k9-sak-web/gui/sak/Fagsak.js';
import { lagVisningsnavnForMottaker as v2LagvisningsnavnForMottaker } from '@k9-sak-web/gui/sak/meldinger/MottakerSelect.js';
import type { Mottaker } from '@k9-sak-web/backend/k9formidling/models/Mottaker.js';

export interface VedtaksbrevMal {
dokumentMalType: string;
Expand All @@ -27,10 +26,7 @@ export interface TilgjengeligeVedtaksbrev {
vedtaksbrevmaler: Record<string, string>;
}

export type Brevmottaker = Readonly<{
id: string;
type: string;
}>;
export type Brevmottaker = Readonly<Mottaker>;

export function bestemAvsenderApp(type: string): string {
if (isBehandlingType(type)) {
Expand All @@ -40,11 +36,11 @@ export function bestemAvsenderApp(type: string): string {
}

export function lagVisningsnavnForMottaker(
mottakerId: string,
mottaker: Mottaker,
personopplysninger?: Personopplysninger,
arbeidsgiverOpplysningerPerId?: ArbeidsgiverOpplysningerPerId,
): string {
return v2LagvisningsnavnForMottaker(mottakerId, personopplysninger, arbeidsgiverOpplysningerPerId);
return v2LagvisningsnavnForMottaker(mottaker, personopplysninger, arbeidsgiverOpplysningerPerId);
}

function vedtaksbrevmaler(tilgjengeligeVedtaksbrev: TilgjengeligeVedtaksbrev) {
Expand Down
2 changes: 1 addition & 1 deletion packages/v2/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@
},
"dependencies": {
"@navikt/k9-klage-typescript-client": "1.0.20240513162434-997f3da",
"@navikt/k9-sak-typescript-client": "1.0.20240807105932"
"@navikt/k9-sak-typescript-client": "1.0.20240814091215"
}
}
Loading

0 comments on commit 224c350

Please sign in to comment.