diff --git a/src/api/skattApi.ts b/src/api/skattApi.ts new file mode 100644 index 000000000..23f1bfbe6 --- /dev/null +++ b/src/api/skattApi.ts @@ -0,0 +1,16 @@ +import { FrioppslagSkattRequest } from '~src/types/skatt/Skatt'; + +import apiClient, { ApiClientResult } from './apiClient'; + +export async function fetchSkattFor(arg: FrioppslagSkattRequest): Promise> { + return apiClient({ + url: `/skatt/person/${arg.fnr}`, + method: 'POST', + body: { + år: arg.år, + begrunnelse: arg.begrunnelse, + }, + request: { headers: new Headers({ Accept: 'application/pdf' }) }, + bodyTransformer: (res) => res.blob(), + }); +} diff --git a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag-nb.ts b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag-nb.ts index 55716e9f3..052604c0c 100644 --- a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag-nb.ts +++ b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag-nb.ts @@ -4,4 +4,11 @@ export default { 'skattegrunnlag.søker': 'Søker', 'skattegrunnlag.eps': 'Ektefelle/Partner/Samboer', 'skattegrunnlag.laster': 'Henter skattegrunnlag', + + 'frioppslag.fødselsnummer': 'Fødselsnummer', + 'frioppslag.år': 'År', + 'frioppslag.begrunnelse': 'Begrunnelse', + 'frioppslag.begrunnelse.description': 'Begrunnelsen vil bli lagret med pdf-innholdet', + 'frioppslag.error.fnr': 'Ugyldig fødselsnummer', + 'frioppslag.error.år': 'Ugyldig år', }; diff --git a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.module.less b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.module.less index 2ef591ca6..096adc9cc 100644 --- a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.module.less +++ b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.module.less @@ -9,3 +9,19 @@ padding: 0.5rem; } } + +.frioppslagContainer { + display: flex; + gap: @spacing; + + .frioppslagForm { + display: flex; + flex-direction: column; + gap: @spacing-s; + align-items: flex-start; + } + + .begrunnelse { + width: 25rem; + } +} diff --git a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.tsx b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.tsx index 60a69378a..640b731b8 100644 --- a/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.tsx +++ b/src/components/hentOgVisSkattegrunnlag/HentOgVisSkattegrunnlag.tsx @@ -1,12 +1,16 @@ import * as RemoteData from '@devexperts/remote-data-ts'; +import { yupResolver } from '@hookform/resolvers/yup'; import { ArrowsCirclepathIcon } from '@navikt/aksel-icons'; -import { Button, Heading } from '@navikt/ds-react'; +import { Button, Heading, TextField, Textarea } from '@navikt/ds-react'; import { pipe } from 'fp-ts/lib/function'; import React, { useMemo } from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { fetchSkattFor as fetchSkattPdfFor } from '~src/api/skattApi'; import { hentNySkattegrunnlag } from '~src/features/SøknadsbehandlingActions'; -import { useAsyncActionCreator } from '~src/lib/hooks'; +import { useApiCall, useAsyncActionCreator } from '~src/lib/hooks'; import { useI18n } from '~src/lib/i18n'; +import yup from '~src/lib/validering'; import { Søknadsbehandling } from '~src/types/Søknadsbehandling'; import ApiErrorAlert from '../apiErrorAlert/ApiErrorAlert'; @@ -16,7 +20,105 @@ import OppsummeringAvEksternGrunnlagSkatt from '../oppsummering/oppsummeringAvEk import messages from './HentOgVisSkattegrunnlag-nb'; import styles from './HentOgVisSkattegrunnlag.module.less'; -const HentOgVisSkattegrunnlag = (props: { søknadsbehandling: Søknadsbehandling }) => { +/** + * Henting og visning av skatt gjøres på 2 forskjellige måter: + * Den ene måten er i konteksten av en søknadsbehandling + * Den andre måten er i konteksten av frioppslag + * + * Props bestemmer hvilken som blir valgt + */ +export const HentOgVisSkattegrunnlag = (props: { søknadsbehandling?: Søknadsbehandling }) => { + if (props.søknadsbehandling) { + return ; + } else { + return ; + } +}; + +interface FrioppslagFormData { + fnr: string; + år: string; + begrunnelse: string; +} + +const frioppslagSchema = yup.object({ + fnr: yup.string().required().length(11), + år: yup + .string() + .test('Tallet må være lik eller høyere enn 2006', `År må være et tall større eller lik 2006`, function (value) { + return value ? Number.parseInt(value, 10) > 2005 : false; + }) + .required(), + begrunnelse: yup.string().required(), +}); + +export const HentOfVisSkattegrunnlagForFrioppslag = () => { + const { formatMessage } = useI18n({ messages }); + + const [skattPdfStatus, hentSkattPdfFor] = useApiCall(fetchSkattPdfFor); + + const form = useForm({ + defaultValues: { fnr: '', år: '', begrunnelse: '' }, + resolver: yupResolver(frioppslagSchema), + }); + + return ( +
+
+ hentSkattPdfFor({ fnr: data.fnr, år: +data.år, begrunnelse: data.begrunnelse }, (b: Blob) => + window.open(URL.createObjectURL(b)), + ), + )} + > + ( + + )} + /> + + ( + + )} + /> + + ( +