1
1
package no .nav .k9 .søknad .ytelse .pls .v1 ;
2
2
3
+ import static no .nav .k9 .søknad .TidsserieUtils .tilPeriodeList ;
3
4
import static no .nav .k9 .søknad .TidsserieUtils .toLocalDateTimeline ;
4
5
5
6
import java .util .ArrayList ;
6
7
import java .util .List ;
7
8
import java .util .Map ;
9
+ import java .util .stream .Collectors ;
8
10
9
11
import no .nav .fpsak .tidsserie .LocalDateTimeline ;
10
12
import no .nav .k9 .søknad .felles .Feil ;
@@ -34,6 +36,7 @@ public List<Feil> valider(PleipengerLivetsSluttfase søknad) {
34
36
feilene .addAll (validerPerioderErLukketOgGyldig (søknad .getUtenlandsopphold ().getPerioderSomSkalSlettes (), "utenlandsopphold.perioderSomSkalSlettes" ));
35
37
validerArbeidstid (søknad );
36
38
validerOpptjening (søknad , feilene );
39
+ validerTrekkKravPerioder (søknad , feilene );
37
40
} catch (ValideringsAvbrytendeFeilException valideringsAvbrytendeFeilException ) {
38
41
feilene .addAll (valideringsAvbrytendeFeilException .getFeilList ());
39
42
}
@@ -66,6 +69,13 @@ private void validerOpptjening(PleipengerLivetsSluttfase søknad, List<Feil> fei
66
69
67
70
}
68
71
72
+ private void validerTrekkKravPerioder (PleipengerLivetsSluttfase søknad , List <Feil > feilene ) {
73
+ LocalDateTimeline <Boolean > trekkKravPerioderTidslinje = lagTidslinjeOgValider (søknad .getTrekkKravPerioder (), "trekkKravPerioder.perioder" , feilene );
74
+ var søktePerioder = søknad .getArbeidstid ().getArbeidstakerList ().stream ().flatMap (it -> it .getArbeidstidInfo ().getPerioder ().keySet ().stream ()).collect (Collectors .toList ());
75
+ var tidslinjeSøktPeriode = toLocalDateTimeline (søktePerioder );
76
+ feilene .addAll (validerAtIngenPerioderOverlapperMedTrekkKravPerioder (trekkKravPerioderTidslinje , tidslinjeSøktPeriode , "trekkKravPerioder" ));
77
+ }
78
+
69
79
private LocalDateTimeline <Boolean > lagTidslinjeMedStøtteForÅpenPeriodeOgValider (Map <Periode , ?> periodeMap , String felt ) throws ValideringsAvbrytendeFeilException {
70
80
return lagTidslinjeOgValider (periodeMap , felt , true );
71
81
}
@@ -89,6 +99,33 @@ private LocalDateTimeline<Boolean> lagTidslinjeOgValider(Map<Periode, ?> periode
89
99
}
90
100
}
91
101
102
+ private LocalDateTimeline <Boolean > lagTidslinjeOgValider (List <Periode > periodeList , String felt , List <Feil > feil ) throws ValideringsAvbrytendeFeilException {
103
+ var nyFeil = validerPerioderErLukketOgGyldig (periodeList , felt );
104
+ if (!nyFeil .isEmpty ()) {
105
+ feil .addAll (nyFeil );
106
+ throw new ValideringsAvbrytendeFeilException (feil );
107
+ }
108
+ try {
109
+ return toLocalDateTimeline (periodeList );
110
+ } catch (IllegalArgumentException e ) {
111
+ feil .add (lagFeil (felt , "IllegalArgumentException" , e .getMessage ()));
112
+ throw new ValideringsAvbrytendeFeilException (feil );
113
+ }
114
+ }
115
+
116
+ private List <Feil > validerPerioderErLukketOgGyldig (List <Periode > periodeList , String felt ) {
117
+ var feil = new ArrayList <Feil >();
118
+ for (int i = 0 ; i < periodeList .size (); i ++ ) {
119
+ var periode = periodeList .get (i );
120
+ if (periode != null ) {
121
+ validerPerioderErLukket (periode , felt + "[" + i + "]" , feil );
122
+ validerPerioderIkkeErInvertert (periode , felt + "[" + i + "]" , feil );
123
+ }
124
+ }
125
+ return feil ;
126
+ }
127
+
128
+
92
129
private List <Feil > validerPerioderErLukketOgGyldig (Map <Periode , ?> perioder , String felt ) {
93
130
var feil = new ArrayList <Feil >();
94
131
perioder .keySet ().forEach (p -> {
@@ -119,6 +156,18 @@ private void validerPerioderIkkeErInvertert(Periode periode, String felt, List<F
119
156
}
120
157
}
121
158
159
+ private List <Feil > validerAtIngenPerioderOverlapperMedTrekkKravPerioder (LocalDateTimeline <Boolean > trekkKravPerioder ,
160
+ LocalDateTimeline <Boolean > søktePerioder ,
161
+ String felt ) {
162
+ return tilPeriodeList (trekkKravPerioder .intersection (søktePerioder )).stream ()
163
+ .map (p -> toFeil (p , felt , "ugyldigPeriodeInterval" , "Søkt periode overlapper med trekk krav periode: " ))
164
+ .collect (Collectors .toCollection (ArrayList ::new ));
165
+ }
166
+
167
+ private Feil toFeil (Periode periode , String felt , String feilkode , String feilmelding ) {
168
+ return lagFeil (felt , feilkode , feilmelding + periode .toString ());
169
+ }
170
+
122
171
private Feil lagFeil (String felt , String feilkode , String feilmelding ) {
123
172
return new Feil ("ytelse." + felt , feilkode , feilmelding );
124
173
}
0 commit comments