Skip to content

Commit b2d8520

Browse files
authored
Tsff 1164 overlappende justeringer (#7208)
* Visuelle justeringer * Justeringer i overlappende saker - Redaksjonelle endringer - Bytte til dayjs - Fiks bug i datovelger, hvor man bare kunne velge enkelte dager og ikke perioder * Update package.json * fjern utkommentert kode * yarn install * typo
1 parent c19aaa2 commit b2d8520

7 files changed

+114
-56
lines changed

packages/v2/gui/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"@tanstack/react-query": "^5.67.3",
2626
"@types/object-hash": "^3.0.6",
2727
"axios": "1.8.3",
28-
"date-fns": "4.1.0",
28+
"dayjs": "^1.11.13",
2929
"object-hash": "^3.0.0",
3030
"react": "19.0.0",
3131
"react-hook-form": "7.54.2",

packages/v2/gui/src/prosess/uttak/vurder-overlappende-sak/VurderOverlappendePeriodeForm.tsx

+76-48
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { useEffect, useState, type FC } from 'react';
22
import { useFormContext, type FieldArrayWithId, type UseFieldArrayReplace } from 'react-hook-form';
3-
import { isSameDay } from 'date-fns';
3+
import dayjs from 'dayjs';
44
import { formatPeriod } from '@k9-sak-web/lib/dateUtils/dateUtils.js';
55
import { ScissorsIcon, TrashIcon } from '@navikt/aksel-icons';
66
import {
7-
Label,
87
Button,
98
RadioGroup,
109
Radio,
@@ -15,6 +14,8 @@ import {
1514
Modal,
1615
DatePicker,
1716
VStack,
17+
ReadMore,
18+
List,
1819
} from '@navikt/ds-react';
1920
import { PeriodeMedOverlappValg } from '@k9-sak-web/backend/k9sak/generated';
2021
import { type VurderOverlappendeSakFormData } from './VurderOverlappendeSak';
@@ -50,14 +51,13 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
5051
const [skalViseSkjema, setSkalViseSkjema] = useState<boolean>(false);
5152

5253
const harSplittedePerioder = !originaleOverlappendePerioder.some(originalPeriode => {
53-
return (
54-
isSameDay(new Date(originalPeriode.fom), new Date(fom)) && isSameDay(new Date(originalPeriode.tom), new Date(tom))
55-
);
54+
return dayjs(originalPeriode.fom).isSame(fom) && dayjs(originalPeriode.tom).isSame(tom);
5655
});
5756
const kanSlettes = harSplittedePerioder && !readOnly;
58-
const kanSplittes = !isSameDay(new Date(fom), new Date(tom)) && !readOnly;
57+
const kanSplittes = !dayjs(fom).isSame(tom) && !readOnly;
5958
const watchValg = watch(`perioder.${index}.valg`);
6059
const erEndretAutomatisk = getValues(`perioder.${index}.endretAutomatisk`);
60+
const [velgDato, setVelgDato] = useState<number>(0);
6161

6262
useEffect(() => {}, []);
6363

@@ -68,47 +68,45 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
6868

6969
return (
7070
<div>
71-
<HStack gap={'space-8'} align="center">
72-
<Label size="small">
73-
Vurder uttak for perioden{' '}
74-
<BodyShort
75-
size="small"
76-
as="span"
77-
weight="semibold"
78-
className={erEndretAutomatisk ? styles['uttaksPeriodeEndret'] : ''}
79-
>{`${formatPeriod(fom || '', tom || '')}`}</BodyShort>
80-
</Label>
81-
{kanSplittes && (
82-
<Button
83-
onClick={() => setVisDatovelger(true)}
84-
variant="tertiary"
85-
size="small"
86-
type="button"
87-
icon={<ScissorsIcon title="Splitt periode" />}
88-
/>
89-
)}
90-
91-
{kanSlettes && (
92-
<Button
93-
type="button"
94-
onClick={() => slettPeriode(index)}
95-
variant="tertiary"
96-
size="small"
97-
icon={<TrashIcon title="Slett periode" />}
98-
/>
99-
)}
100-
101-
{erEndretAutomatisk && (
102-
<HelpText title="Hvor kommer dette fra?">
103-
Denne perioden ble justert automatisk for å fylle den overlappende perioden.
104-
</HelpText>
105-
)}
106-
</HStack>
10771
<VStack gap={'space-16'}>
10872
<RadioGroup
10973
size="small"
110-
legend={`Sett uttaksgrad i prosent for perioden ${formatPeriod(fom || '', tom || '')}`}
111-
hideLegend={true}
74+
legend={
75+
<HStack as={'span'} align={'center'} gap={'space-8'}>
76+
<BodyShort size="small" as="span" weight="semibold">
77+
Vurder uttak for perioden{' '}
78+
<BodyShort
79+
size="small"
80+
as="span"
81+
weight="semibold"
82+
className={erEndretAutomatisk ? styles['uttaksPeriodeEndret'] : ''}
83+
>{`${formatPeriod(fom || '', tom || '')}`}</BodyShort>
84+
</BodyShort>
85+
{kanSplittes && (
86+
<Button
87+
onClick={() => setVisDatovelger(true)}
88+
variant="tertiary"
89+
size="small"
90+
type="button"
91+
icon={<ScissorsIcon title="Splitt periode" />}
92+
/>
93+
)}
94+
{kanSlettes && (
95+
<Button
96+
type="button"
97+
onClick={() => slettPeriode(index)}
98+
variant="tertiary"
99+
size="small"
100+
icon={<TrashIcon title="Slett periode" />}
101+
/>
102+
)}
103+
{erEndretAutomatisk && (
104+
<HelpText title="Hvor kommer dette fra?">
105+
Denne perioden ble justert automatisk for å fylle den overlappende perioden.
106+
</HelpText>
107+
)}
108+
</HStack>
109+
}
112110
onChange={value => {
113111
setValue(`perioder.${index}.valg`, value);
114112
}}
@@ -134,25 +132,55 @@ const VurderOverlappendePeriodeForm: FC<Props> = ({
134132
/>
135133
</div>
136134
)}
135+
136+
<ReadMore header="Hva betyr de ulike valgene?" size="small">
137+
Her tar du valg for hvordan uttaket skal være i denne saken.
138+
<List size="small">
139+
<List.Item>
140+
Ingen uttak i perioden: Dette valget medfører at du nuller ut uttaket i den overlappende perioden. Velg
141+
dette hvis du ønsker at bruker skal få alt uttak/utbetaling i den andre saken.
142+
</List.Item>
143+
<List.Item>
144+
Vanlig uttak i perioden: Ved å velge dette, bestemmer du at denne saken skal graderes som vanlig ut fra
145+
informasjon om arbeidstid, inntekt, tilsyn osv. Du velger altså å la den gå sin gang, uten å bli påvirket
146+
av den overlappende saken.
147+
</List.Item>
148+
<List.Item>
149+
Tilpass uttaksgrad: Her kan du manuelt bestemme hvor mange prosent pleiepenger bruker skal få i saken.
150+
Dette valget brukes unntaksvis, da det vil medføre at man må overstyre hver gang det kommer en endring.
151+
Man må også være mer obs på hvilken uttaksgrad den andre saken har, spesielt hvis ikke den også settes
152+
manuelt.
153+
</List.Item>
154+
</List>
155+
</ReadMore>
137156
</VStack>
138157

139158
{kanSplittes && (
140159
<div>
141160
<Modal
142161
title="Spesifiser periode"
143-
onClose={() => setVisDatovelger(false)}
162+
onClose={() => {
163+
setVelgDato(0);
164+
setVisDatovelger(false);
165+
}}
144166
open={visDatoVelger}
145167
aria-label="Spesifiser periode"
146168
>
147169
<Modal.Header closeButton>Spesifiser periode</Modal.Header>
148170
<Modal.Body>
149171
<DatePicker.Standalone
172+
dropdownCaption
173+
defaultMonth={new Date(fom)}
150174
mode="range"
151175
disabled={[{ before: new Date(fom) }, { after: new Date(tom) }]}
152176
onSelect={(val: undefined | { from: Date | undefined; to?: Date | undefined }) => {
153-
if (val?.from && val.to) {
154-
setVisDatovelger(false);
155-
splittPeriode(val.from, val.to, index);
177+
if (velgDato === 0) setVelgDato(1);
178+
if (velgDato === 1) {
179+
if (val?.from && val.to) {
180+
setVisDatovelger(false);
181+
splittPeriode(val.from, val.to, index);
182+
setVelgDato(0);
183+
}
156184
}
157185
}}
158186
/>

packages/v2/gui/src/prosess/uttak/vurder-overlappende-sak/VurderOverlappendeSak.module.css

+8
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,11 @@
4747
.uttaksPeriodeEndret {
4848
color: var(--a-orange-600);
4949
}
50+
51+
.vurderOverlappendeSakAPListe :where(ul, li) {
52+
margin-block: 0;
53+
}
54+
55+
.noOverlappendeMargin ul {
56+
margin-block: 0 !important;
57+
}

packages/v2/gui/src/prosess/uttak/vurder-overlappende-sak/VurderOverlappendeSak.module.d.css.ts

+2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ declare const styles: {
22
readonly "apActive": string;
33
readonly "apContainer": string;
44
readonly "apReadOnly": string;
5+
readonly "noOverlappendeMargin": string;
56
readonly "uttaksPeriodeEndret": string;
67
readonly "uttaksgradField": string;
78
readonly "uttaksgradPeriode": string;
89
readonly "vurderOverlappendeSak": string;
10+
readonly "vurderOverlappendeSakApListe": string;
911
};
1012
export = styles;
1113

packages/v2/gui/src/prosess/uttak/vurder-overlappende-sak/VurderOverlappendeSak.tsx

+19-5
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,26 @@ const VurderOverlappendeSak: FC<Props> = ({ behandling, aksjonspunkt, api, oppda
192192
{!readOnly && (
193193
<Alert variant={'warning'}>
194194
<Heading spacing size="xsmall" level="3">
195-
Vurder overlappende perioder med annen sak
195+
Søker har overlappende perioder med en annen sak
196196
</Heading>
197-
<BodyShort>
198-
Søker har overlappende perioder i uttak med annen sak. Fordel uttaksgrad i begge saker, så den totale
199-
uttaksgraden ikke overstiger 100 %.
200-
</BodyShort>
197+
<List size="small" className={styles['vurderOverlappendeSakApListe']}>
198+
<List.Item>Reserver den tilhørende saken</List.Item>
199+
<List.Item>
200+
Vurder om du må justere uttaket i en eller begge saker, for å unngå dobbelutbetaling. Vurder ut fra:
201+
<List size="small" className={`asdf ${styles['noOverlappendeMargin']}`}>
202+
<List.Item>Opplysninger fra bruker, vet vi hva han eller hun vil?</List.Item>
203+
<List.Item>
204+
Skal det være tilgjengelig uttak til andre på ett av barna? Det vil ofte lønne seg å innvilge på den
205+
</List.Item>
206+
<List.Item>nyeste saken, mtp beregning og feriepenger.</List.Item>
207+
</List>
208+
</List.Item>
209+
<List.Item>Er du usikker, må du kontakte bruker for avklaring.</List.Item>
210+
<List.Item>
211+
Når du har vurdert uttak i denne saken, går du inn i den andre saken og vurderer uttaket for samme
212+
periode.
213+
</List.Item>
214+
</List>
201215
</Alert>
202216
)}
203217

+6
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1+
import dayjs from 'dayjs';
2+
13
export const tilNOK = Intl.NumberFormat('no-NO', { style: 'currency', currency: 'NOK', maximumFractionDigits: 0 });
4+
5+
export const stdDato = (input: dayjs.Dayjs | string | Date) => dayjs(input).format('YYYY-MM-DD');
6+
7+
export const visnDato = (input: dayjs.Dayjs | string | Date) => dayjs(input).format('DD.MM.YYYY');

yarn.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -4462,7 +4462,7 @@ __metadata:
44624462
"@tanstack/react-query": "npm:^5.67.3"
44634463
"@types/object-hash": "npm:^3.0.6"
44644464
axios: "npm:1.8.3"
4465-
date-fns: "npm:4.1.0"
4465+
dayjs: "npm:^1.11.13"
44664466
object-hash: "npm:^3.0.0"
44674467
react: "npm:19.0.0"
44684468
react-hook-form: "npm:7.54.2"
@@ -9410,7 +9410,7 @@ __metadata:
94109410
languageName: node
94119411
linkType: hard
94129412

9413-
"dayjs@npm:1.11.13":
9413+
"dayjs@npm:1.11.13, dayjs@npm:^1.11.13":
94149414
version: 1.11.13
94159415
resolution: "dayjs@npm:1.11.13"
94169416
checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5

0 commit comments

Comments
 (0)