Skip to content

Commit

Permalink
Inntektsperiode - endring
Browse files Browse the repository at this point in the history
  • Loading branch information
frodehansen2 committed Jan 29, 2025
1 parent 1a51c2c commit 2ca0580
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ export const deltakelserHarSøkt: DeltakelseDTO[] = [
fraOgMed: '2025-01-01',
tilOgMed: '2025-01-31',
harRapportert: false,
kanRapportere: true,
kanRapportere: false,
fristForRapportering: '2025-01-31',
kanEndre: false,
kanEndre: true,
inntekt: 0,
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ export const deltakelseDTOSchema = z.object({
fraOgMed: z.string(),
tilOgMed: z.string(),
harRapportert: z.boolean(),
kanRapportere: z.boolean(),
kanEndre: z.boolean(),
kanRapportere: z.boolean().optional(),
kanEndre: z.boolean().optional(),
inntekt: z.number().optional().nullable(),
fristForRapportering: z.string().optional().nullable(),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ const rapporteringsperiodeProcessedDTOSchema = z.object({
fraOgMed: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
tilOgMed: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()),
harRapportert: z.boolean(),
kanRapportere: z.boolean(),
kanEndre: z.boolean(),
kanRapportere: z.boolean().optional(),
kanEndre: z.boolean().optional(),
fristForRapportering: z.preprocess((val) => parseMaybeDateStringToDate(val), z.date()).optional(),
inntekt: z.number().optional(),
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Deltakelse } from '../../../api/types';
import { VStack } from '@navikt/ds-react';
import {
getGjeldendeRapporteringsperiode,
getTidligereRapporteringsperioder,
getÅpenRapporteringsperiode,
sorterRapporteringsperioderDesc,
} from '../utils/deltakelseUtils';
import ÅpenInntektsperiode from './ÅpenInntektsperiode';
import Inntektsperiode from './Inntektsperiode';
import TidligerePerioder from './TidligerePerioder';

interface Props {
Expand All @@ -14,16 +14,14 @@ interface Props {

const Deltakelse = ({ deltakelse }: Props) => {
const { rapporteringsPerioder } = deltakelse;
const åpenPeriode = getÅpenRapporteringsperiode(rapporteringsPerioder || []);
const periode = getGjeldendeRapporteringsperiode(rapporteringsPerioder || []);
const tidligerePerioder = getTidligereRapporteringsperioder(rapporteringsPerioder || []).sort(
sorterRapporteringsperioderDesc,
);

return (
<VStack gap="8">
{åpenPeriode ? (
<ÅpenInntektsperiode deltakelseId={deltakelse.id} rapporteringsperiode={åpenPeriode} />
) : null}
{periode ? <Inntektsperiode deltakelseId={deltakelse.id} rapporteringsperiode={periode} /> : null}

<TidligerePerioder perioder={tidligerePerioder || []} />
</VStack>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import { Alert, BodyShort, Box, Button, Heading, ReadMore, VStack } from '@navikt/ds-react';
import { Rapporteringsperiode } from '../../../api/types';
import { dateFormatter } from '@navikt/sif-common-utils';
import { useState } from 'react';
import InntektForm from './inntekt-form/InntektForm';
import { FormattedNumber } from 'react-intl';

interface Props {
deltakelseId: string;
rapporteringsperiode: Rapporteringsperiode;
}

const Inntektsperiode = ({ rapporteringsperiode, deltakelseId }: Props) => {
const { periode, fristForRapportering, harRapportert, kanEndre } = rapporteringsperiode;
const [visSkjema, setVisSkjema] = useState(false);

if (!fristForRapportering) {
return <Alert variant="warning">FristForRapportering mangler</Alert>;
}

const månedNavn = dateFormatter.month(periode.from);
const månedÅrNavn = dateFormatter.monthFullYear(periode.from);
return (
<Box className="bg-deepblue-50 p-8 rounded-md">
<VStack gap="4">
<Heading level="2" size="medium">
Inntekt {månedÅrNavn}
</Heading>
{harRapportert ? (
<BodyShort>
For {månedNavn} har du rapportert{' '}
<strong>
<FormattedNumber value={rapporteringsperiode.inntekt || 0} /> kroner
</strong>{' '}
i inntekt.
</BodyShort>
) : (
<BodyShort>
Hvis du har inntekt i {månedNavn}, må du oppgi denne innen utgangen av{' '}
<strong>{dateFormatter.dayDateMonth(fristForRapportering)}</strong>. Hvis du ikke har noe
inntekt denne måneden, trenger du ikke melde fra.
</BodyShort>
)}
<ReadMore header="Mer om inntekt, hva skal jeg ta med">Kort info</ReadMore>
<Box className="mt-4">
{visSkjema ? (
<InntektForm
gjelderEndring={harRapportert}
deltakelseId={deltakelseId}
periode={periode}
onCancel={() => {
setVisSkjema(false);
}}
/>
) : (
<>
{kanEndre || harRapportert === false ? (
<Button
variant="primary"
type="button"
onClick={() => {
setVisSkjema(true);
}}>
{harRapportert ? (
<>Endre inntekt for {månedNavn} </>
) : (
<>Meld inn inntekt for {månedNavn} </>
)}
</Button>
) : (
<>Du kan ikke endre inntekten for denne måneden enda</>
)}
</>
)}
</Box>
</VStack>
</Box>
);
};

export default Inntektsperiode;
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { getCheckedValidator } from '@navikt/sif-common-formik-ds/src/validation
interface Props {
deltakelseId: string;
periode: DateRange;
gjelderEndring?: boolean;
onCancel: () => void;
}

Expand Down Expand Up @@ -43,7 +44,7 @@ export const inntektFormComponents = getTypedFormComponents<InntektFormFields, I

const { FormikWrapper, Form, ConfirmationCheckbox } = inntektFormComponents;

const InntektForm = ({ deltakelseId, periode, onCancel }: Props) => {
const InntektForm = ({ deltakelseId, periode, gjelderEndring, onCancel }: Props) => {
const { intl } = useAppIntl();
const { error, inntektSendt, pending, rapporterInntekt } = useRapporterInntekt();

Expand All @@ -61,7 +62,7 @@ const InntektForm = ({ deltakelseId, periode, onCancel }: Props) => {
<Bleed marginInline="5">
<VStack gap="2" className="rounded-md bg-white p-8 shadow-large">
<Heading level="2" size="medium">
Inntektskjema
Inntektskjema {gjelderEndring ? '(endring)' : null}
</Heading>
{inntektSendt ? (
<VStack gap="4">
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import dayjs from 'dayjs';
import { Rapporteringsperiode } from '../../../api/types';
import { isDateInDateRange } from '@navikt/sif-common-utils';

export const rapporteringsperiodeErÅpen = (rapporteringsperiode: Rapporteringsperiode): boolean =>
rapporteringsperiode.kanRapportere && !!rapporteringsperiode.fristForRapportering;
const datoErIRapporteringsperiode = (dato: Date, periode: Rapporteringsperiode): boolean => {
return isDateInDateRange(dato, periode.periode);
};

export const rapporteringsperiodeErTidligerePeriode = (rapporteringsperiode: Rapporteringsperiode): boolean => {
const { periode } = rapporteringsperiode;
return dayjs(periode.to).isBefore(dayjs());
};

export const getÅpenRapporteringsperiode = (
export const getGjeldendeRapporteringsperiode = (
rapporteringsperioder: Rapporteringsperiode[],
): Rapporteringsperiode | undefined => {
return rapporteringsperioder.find(rapporteringsperiodeErÅpen);
return rapporteringsperioder.find((p) => datoErIRapporteringsperiode(new Date(), p));
};

export const getTidligereRapporteringsperioder = (
Expand Down

0 comments on commit 2ca0580

Please sign in to comment.