Skip to content
This repository was archived by the owner on Sep 29, 2020. It is now read-only.

TFP-3535: Frontend nytt steg i beregning #1237

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -10,7 +10,7 @@ class FordelingFaktaPanelDef extends FaktaPanelDef {

getTekstKode = () => 'FordelBeregningsgrunnlag.Title'

getAksjonspunktKoder = () => [aksjonspunktCodes.FORDEL_BEREGNINGSGRUNNLAG]
getAksjonspunktKoder = () => [aksjonspunktCodes.FORDEL_BEREGNINGSGRUNNLAG, aksjonspunktCodes.VURDER_REFUSJON_BERGRUNN]

getKomponent = (props) => <FordelBeregningsgrunnlagFaktaIndex {...props} />

Expand Down
39 changes: 38 additions & 1 deletion packages/fakta-fordel-beregningsgrunnlag/i18n/nb_NO.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,15 @@
"BeregningInfoPanel.FordelBG.Inntekt": "Inntekt",
"BeregningInfoPanel.FordelBG.Beregningsgrunnlag": "Grunnlag",

"BeregningInfoPanel.RefusjonBG.Tittel": "Endring i refusjon",
"BeregningInfoPanel.RefusjonBG.Aktivitet": "Aktivitet",
"BeregningInfoPanel.RefusjonBG.TidligereUtb": "Tidligere utbetalinger",
"BeregningInfoPanel.RefusjonBG.Direkteutbetaling": "Direkteutbetaling",
"BeregningInfoPanel.RefusjonBG.Periode": "{fom} - {tom}",
"BeregningInfoPanel.RefusjonBG.Arbeidsgiver": "<b>{ag}</b> krever refusjon fra og med {dato}",
"BeregningInfoPanel.RefusjonBG.RefusjonFra": "Endringen i refusjon skal tre i kraft fra og med",
"BeregningInfoPanel.RefusjonBG.Begrunnelse": "Begrunnelse",

"ValidationMessage.NotEmpty": "Feltet må fylles ut",
"ValidationMessage.MinLength": "Du må skrive minst {length} tegn",
"ValidationMessage.MaxLength": "Du kan skrive maksimalt {length} tegn",
Expand Down Expand Up @@ -105,6 +114,34 @@
"ValidationMessage.MerEn100Prosent": "Samlet utbetalingsgrad og andel i arbeid bør ikke overskride 100%.",
"ValidationMessage.MerEnNullUtaksprosent" : "Uttak av foreldrepenger i denne perioden er avslått, utbetalingsgrad kan ikke være større enn 0.",
"ValidationMessage.MerEn100ProsentOgOgyldigUtsettlse" : "Samlet utbetalingsgrad og andel i arbeid bør ikke overskride 100%. Søker har ikke 100% stilling, vurder om perioden kan utsettes.",
"ValidationMessage.InvalidOrganisasjonsnummer": "Ugyldig organisasjonsnummer."
"ValidationMessage.InvalidOrganisasjonsnummer": "Ugyldig organisasjonsnummer.",

"Calendar.Day.0": "søndag",
"Calendar.Day.1": "mandag",
"Calendar.Day.2": "tirsdag",
"Calendar.Day.3": "onsdag",
"Calendar.Day.4": "torsdag",
"Calendar.Day.5": "fredag",
"Calendar.Day.6": "lørdag",
"Calendar.Day.Short.0": "søn",
"Calendar.Day.Short.1": "man",
"Calendar.Day.Short.2": "tir",
"Calendar.Day.Short.3": "ons",
"Calendar.Day.Short.4": "tor",
"Calendar.Day.Short.5": "fre",
"Calendar.Day.Short.6": "lør",
"Calendar.Month.0": "Januar",
"Calendar.Month.1": "Februar",
"Calendar.Month.2": "Mars",
"Calendar.Month.3": "April",
"Calendar.Month.4": "Mai",
"Calendar.Month.5": "Juni",
"Calendar.Month.6": "Juli",
"Calendar.Month.7": "August",
"Calendar.Month.8": "September",
"Calendar.Month.9": "Oktober",
"Calendar.Month.10": "November",
"Calendar.Month.11": "Desember"


}
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@ import { kodeverkObjektPropType } from '@fpsak-frontend/prop-types';
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import FordelingForm from './FordelingForm';
import fordelBeregningsgrunnlagAksjonspunkterPropType from '../propTypes/fordelBeregningsgrunnlagAksjonspunkterPropType';
import VurderEndringRefusjonForm from './refusjon/VurderEndringRefusjonForm';

const {
FORDEL_BEREGNINGSGRUNNLAG,
VURDER_REFUSJON_BERGRUNN,
} = aksjonspunktCodes;

export const BEGRUNNELSE_FORDELING_NAME = 'begrunnelseFordeling';

const harIkkeFordelInfo = (bg) => {
if (!bg) {
return true;
}
return bg.faktaOmFordeling ? !bg.faktaOmFordeling.fordelBeregningsgrunnlag : true;
};
const getFordelAksjonspunkt = (aksjonspunkter) => (aksjonspunkter ? aksjonspunkter.find((ap) => ap.definisjon.kode === FORDEL_BEREGNINGSGRUNNLAG) : undefined);
const harFordelInfo = (bg) => (bg && bg.faktaOmFordeling ? bg.faktaOmFordeling.fordelBeregningsgrunnlag : false);

const harRefusjonInfo = (bg) => bg && bg.refusjonTilVurdering;

const getAksjonspunkt = (aksjonspunkter, def) => (aksjonspunkter && def ? aksjonspunkter.find((ap) => ap.definisjon.kode === def) : undefined);

/**
* FordelBeregningsgrunnlagPanel
Expand Down Expand Up @@ -59,24 +59,42 @@ export class FordelBeregningsgrunnlagPanel extends Component {
submitEnabled,
},
} = this;
const fordelAP = getFordelAksjonspunkt(aksjonspunkter);
if (harIkkeFordelInfo(beregningsgrunnlag) || !fordelAP) {
return null;
}
const fordelAP = getAksjonspunkt(aksjonspunkter, FORDEL_BEREGNINGSGRUNNLAG);
const refusjonAP = getAksjonspunkt(aksjonspunkter, VURDER_REFUSJON_BERGRUNN);
const skalViseFordeling = fordelAP && harFordelInfo(beregningsgrunnlag);
const skalViseRefusjon = refusjonAP && harRefusjonInfo(beregningsgrunnlag);
return (
<FordelingForm
<>
{skalViseRefusjon
&& (
<VurderEndringRefusjonForm
submitEnabled={submitEnabled}
submittable={submittable}
readOnly={readOnly}
submitCallback={submitCallback}
behandlingId={behandlingId}
behandlingVersjon={behandlingVersjon}
alleKodeverk={alleKodeverk}
alleMerknaderFraBeslutter={alleMerknaderFraBeslutter}
beregningsgrunnlag={beregningsgrunnlag}
behandlingType={behandlingType}
aksjonspunkter={aksjonspunkter}
/>
)}
{skalViseFordeling
&& (
<FordelingForm
submitEnabled={submitEnabled}
submittable={submittable}
readOnly={readOnly}
submitCallback={submitCallback}
behandlingId={behandlingId}
behandlingVersjon={behandlingVersjon}
alleKodeverk={alleKodeverk}
alleMerknaderFraBeslutter={alleMerknaderFraBeslutter}
beregningsgrunnlag={beregningsgrunnlag}
behandlingType={behandlingType}
aksjonspunkter={aksjonspunkter}
/>
)}
</>
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import { Normaltekst } from 'nav-frontend-typografi';
import { Table, TableColumn, TableRow } from '@fpsak-frontend/shared-components';
import { dateFormat, TIDENES_ENDE } from '@fpsak-frontend/utils';

import { refusjonAndelTilVurderingPropType } from '../../propTypes/beregningsgrunnlagPropType';
import styles from './tidligereUtbetalingRad.less';

const visningsnavn = (andel) => {
if (andel.arbeidsgiverNavn) {
return andel.arbeidsgiverNavn;
} if (andel.arbeidsgiverId && andel.arbeidsgiverId.arbeidsgiverOrgnr) {
return andel.arbeidsgiverId.arbeidsgiverOrgnr;
} if (andel.arbeidsgiverId && andel.arbeidsgiverId.arbeidsgiverAktørId) {
return andel.arbeidsgiverId.arbeidsgiverAktørId;
}
return undefined;
};

const tidligereUtbetaling = (utbetaling) => {
if (!utbetaling) {
return undefined;
}
if (utbetaling.erTildeltRefusjon) {
return visningsnavn(andel);
}
return <FormattedMessage id="BeregningInfoPanel.RefusjonBG.Direkteutbetaling" />;
};

const tidligereUtbetalingDato = (utbetaling) => {
if (!utbetaling) {
return undefined;
}
const utbTom = utbetaling.tom === TIDENES_ENDE ? undefined : utbetaling.tom;
return (
<FormattedMessage
id="BeregningInfoPanel.RefusjonBG.Periode"
values={{ fom: dateFormat(utbetaling.fom), tom: utbTom ? dateFormat(utbTom) : '' }}
/>
);
};

export const TidligereUtbetalingRad = ({
refusjonAndel,
}) => (
<TableRow>
<TableColumn>
{visningsnavn(refusjonAndel)}
</TableColumn>
<TableColumn>
<Table headerTextCodes={[]} noHover classNameTable={styles.utbetalingTabell}>
{ refusjonAndel.tidligereUtbetalinger.map((utbetaling) => (
<TableRow key={utbetaling.fom + utbetaling.erTildeltRefusjon}>
<TableColumn>
<Normaltekst>{tidligereUtbetaling(utbetaling)}</Normaltekst>
</TableColumn>
<TableColumn>
<Normaltekst>{tidligereUtbetalingDato(utbetaling)}</Normaltekst>
</TableColumn>
</TableRow>
))}
</Table>
</TableColumn>
</TableRow>
);
TidligereUtbetalingRad.propTypes = {
refusjonAndel: refusjonAndelTilVurderingPropType,
};

export default TidligereUtbetalingRad;
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React from 'react';
import { Table } from '@fpsak-frontend/shared-components';
import { Column, Row } from 'nav-frontend-grid';

import beregningsgrunnlagPropType from '../../propTypes/beregningsgrunnlagPropType';
import styles from './tidligereUtbetalinger.less';
import TidligereUtbetalingRad from './TidligereUtbetalingRad';

export const TidligereUtbetalinger = ({
beregningsgrunnlag,
}) => {
const { andeler } = beregningsgrunnlag.refusjonTilVurdering;
return (
<>
<Row>
<Column xs="8">
<Table
headerTextCodes={['BeregningInfoPanel.RefusjonBG.Aktivitet', 'BeregningInfoPanel.RefusjonBG.TidligereUtb']}
noHover
classNameTable={styles.tabell}
>
{ andeler.map((andel) => (
<TidligereUtbetalingRad
refusjonAndel={andel}
readOnly
key={andel.arbeidsgiverNavn}
/>
))}
</Table>
</Column>
</Row>
</>
);
};
TidligereUtbetalinger.propTypes = {
beregningsgrunnlag: beregningsgrunnlagPropType.isRequired,
};

export default TidligereUtbetalinger;
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import React from 'react';
import PropTypes from 'prop-types';
import { formPropTypes } from 'redux-form';
import { connect } from 'react-redux';
import { FormattedMessage } from 'react-intl';
import { Undertittel } from 'nav-frontend-typografi';
import { VerticalSpacer } from '@fpsak-frontend/shared-components';
import aksjonspunktCodes from '@fpsak-frontend/kodeverk/src/aksjonspunktCodes';
import { isAksjonspunktOpen } from '@fpsak-frontend/kodeverk/src/aksjonspunktStatus';
import { FaktaBegrunnelseTextField, FaktaSubmitButton } from '@fpsak-frontend/fakta-felles';
import { behandlingForm } from '@fpsak-frontend/form';
import fordelBeregningsgrunnlagAksjonspunkterPropType from '../../propTypes/fordelBeregningsgrunnlagAksjonspunkterPropType';
import beregningsgrunnlagPropType from '../../propTypes/beregningsgrunnlagPropType';
import TidligereUtbetalinger from './TidligereUtbetalinger';
import VurderEndringRefusjonRad, { lagNøkkel } from './VurderEndringRefusjonRad';

const FORM_NAME = 'VURDER_REFUSJON_BERGRUNN_FORM';
const BEGRUNNELSE_FIELD = 'VURDER_REFUSJON_BERGRUNN_BEGRUNNELSE';

const {
VURDER_REFUSJON_BERGRUNN,
} = aksjonspunktCodes;

const finnAksjonspunkt = (aksjonspunkter) => (aksjonspunkter ? aksjonspunkter.find((ap) => ap.definisjon.kode === VURDER_REFUSJON_BERGRUNN) : undefined);

export const VurderEndringRefusjonFormImpl = ({
submitEnabled,
submittable,
readOnly,
behandlingId,
behandlingVersjon,
beregningsgrunnlag,
aksjonspunkter,
...formProps
}) => {
const { andeler } = beregningsgrunnlag.refusjonTilVurdering;
const ap = finnAksjonspunkt(aksjonspunkter);
const isAksjonspunktClosed = ap ? isAksjonspunktOpen(ap.status.kode) : false;
return (
<>
<form onSubmit={formProps.handleSubmit}>
<Undertittel><FormattedMessage id="BeregningInfoPanel.RefusjonBG.Tittel" /></Undertittel>
<VerticalSpacer sixteenPx />
<TidligereUtbetalinger beregningsgrunnlag={beregningsgrunnlag} />
{ andeler.map((andel) => (
<VurderEndringRefusjonRad
refusjonAndel={andel}
readOnly={readOnly}
key={andel.arbeidsgiverNavn}
/>
))}
<>
<VerticalSpacer twentyPx />
<FaktaBegrunnelseTextField
name={BEGRUNNELSE_FIELD}
isDirty={formProps.dirty}
isSubmittable={submittable}
isReadOnly={readOnly}
hasBegrunnelse={!!(ap && ap.begrunnelse)}
/>

<VerticalSpacer twentyPx />
<FaktaSubmitButton
formName={formProps.form}
isSubmittable={submittable && submitEnabled}
isReadOnly={readOnly}
hasOpenAksjonspunkter={!isAksjonspunktClosed}
behandlingId={behandlingId}
behandlingVersjon={behandlingVersjon}
/>
</>
</form>
</>
);
};

export const buildInitialValues = (bg, aksjonspunkter) => {
const { andeler } = bg.refusjonTilVurdering;
const initialValues = {};
andeler.forEach((andel) => {
initialValues[lagNøkkel(andel)] = VurderEndringRefusjonRad.buildInitialValues(andel);
});
const refusjonAP = finnAksjonspunkt(aksjonspunkter);
initialValues[BEGRUNNELSE_FIELD] = refusjonAP && refusjonAP.begrunnelse ? refusjonAP.begrunnelse : '';
return initialValues;
};

export const transformValues = (values, bg) => {
const { andeler } = bg.refusjonTilVurdering;
const transformedAndeler = andeler.map((andel) => VurderEndringRefusjonRad.transformValues(values, andel));
return {
begrunnelse: values[BEGRUNNELSE_FIELD],
kode: VURDER_REFUSJON_BERGRUNN,
fastsatteAndeler: transformedAndeler,
};
};

VurderEndringRefusjonFormImpl.propTypes = {
submitCallback: PropTypes.func.isRequired,
readOnly: PropTypes.bool.isRequired,
submittable: PropTypes.bool.isRequired,
submitEnabled: PropTypes.bool.isRequired,
behandlingId: PropTypes.number.isRequired,
behandlingVersjon: PropTypes.number.isRequired,
beregningsgrunnlag: beregningsgrunnlagPropType,
aksjonspunkter: PropTypes.arrayOf(fordelBeregningsgrunnlagAksjonspunkterPropType).isRequired,
...formPropTypes,
};

const mapStateToProps = (initialState, initialProps) => {
const onSubmit = (values) => initialProps.submitCallback([transformValues(values, initialProps.beregningsgrunnlag)]);
return (state, ownProps) => {
const initialValues = buildInitialValues(ownProps.beregningsgrunnlag, ownProps.aksjonspunkter);
return ({
initialValues,
onSubmit,
});
};
};

export default connect(mapStateToProps)(behandlingForm({
form: FORM_NAME,
enableReinitialize: true,
})(VurderEndringRefusjonFormImpl));
Loading