Skip to content

Commit db10f9e

Browse files
authored
Validere perioder konsistent (#323)
* Validere periode fom vs tom konsistent * Noe penere feilmelding vha custom ConstraintValidator
1 parent 4e66e18 commit db10f9e

39 files changed

+989
-1105
lines changed

soknad/src/main/java/no/nav/k9/søknad/PeriodeValidator.java

Lines changed: 0 additions & 116 deletions
This file was deleted.

soknad/src/main/java/no/nav/k9/søknad/felles/fravær/FraværPeriode.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,6 @@ boolean isPeriodeManglerTom(){
8787
return periode != null && periode.getTilOgMed() == null;
8888
}
8989

90-
@AssertFalse(message = "Til-og-med-dato er før fra-og-med-dato for perioden")
91-
boolean isPeriodeTomFørFom(){
92-
return periode != null && periode.getTilOgMed() != null && periode.getFraOgMed() != null && periode.getTilOgMed().isBefore(periode.getFraOgMed());
93-
}
94-
9590
public FraværPeriode medPeriode(Periode periode) {
9691
this.periode = periode;
9792
return this;

soknad/src/main/java/no/nav/k9/søknad/felles/opptjening/OpptjeningAktivitet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class OpptjeningAktivitet {
2222
@JsonProperty(value = "selvstendigNæringsdrivende", required = true)
2323
@Valid
2424
@NotNull
25-
private List<@NotNull SelvstendigNæringsdrivende> selvstendigNæringsdrivende = new ArrayList<>();
25+
private List<@NotNull @Valid SelvstendigNæringsdrivende> selvstendigNæringsdrivende = new ArrayList<>();
2626

2727
@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
2828
@JsonProperty(value = "frilanser")

soknad/src/main/java/no/nav/k9/søknad/felles/opptjening/SelvstendigNæringsdrivende.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import no.nav.k9.søknad.felles.type.Organisasjonsnummer;
3232
import no.nav.k9.søknad.felles.type.Periode;
3333
import no.nav.k9.søknad.felles.type.VirksomhetType;
34+
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
3435

3536
@JsonIgnoreProperties(ignoreUnknown = true)
3637
@JsonInclude(value = Include.NON_EMPTY)
@@ -39,6 +40,7 @@ public class SelvstendigNæringsdrivende {
3940

4041
@JsonProperty(value = "perioder", required = true)
4142
@Valid
43+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = false)
4244
@NotNull
4345
@NotEmpty
4446
private Map<@NotNull Periode, @NotNull SelvstendigNæringsdrivendePeriodeInfo> perioder;

soknad/src/main/java/no/nav/k9/søknad/felles/opptjening/UtenlandskArbeidsforhold.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,6 @@ private boolean isPeriodeFomOK() {
8282
return ansettelsePeriode.getFraOgMed() != null;
8383
}
8484

85-
@AssertTrue(message = "[ugyldigPeriode] Tom kan ikke være før Fom må være satt")
86-
private boolean isPeriodeInvers() {
87-
if (ansettelsePeriode == null ||
88-
ansettelsePeriode.getFraOgMed() == null ||
89-
ansettelsePeriode.getTilOgMed() == null) {
90-
return true;
91-
}
92-
return ansettelsePeriode.getFraOgMed().isBefore(ansettelsePeriode.getTilOgMed());
93-
}
94-
9585
/* Deaktivet pga søknader med feil
9686
@AssertTrue(message = "[ugyldigVerdi] Norge kan ikke være en landkode")
9787
private boolean isLandNotNor() {

soknad/src/main/java/no/nav/k9/søknad/felles/personopplysninger/Bosteder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,21 @@
2121

2222
import no.nav.k9.søknad.felles.type.Landkode;
2323
import no.nav.k9.søknad.felles.type.Periode;
24+
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
2425

2526
@JsonIgnoreProperties(ignoreUnknown = true)
2627
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2728
public class Bosteder {
2829

2930
@JsonProperty(value = "perioder")
3031
@Valid
32+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
3133
@JsonInclude(value = Include.ALWAYS)
3234
private Map<@NotNull Periode, @NotNull BostedPeriodeInfo> perioder = new TreeMap<>();
3335

3436
@JsonProperty(value = "perioderSomSkalSlettes")
3537
@Valid
38+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
3639
@JsonInclude(value = Include.ALWAYS)
3740
private Map<@NotNull Periode, @NotNull BostedPeriodeInfo> perioderSomSkalSlettes = new TreeMap<>();
3841

soknad/src/main/java/no/nav/k9/søknad/felles/personopplysninger/Utenlandsopphold.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,23 @@
2222

2323
import no.nav.k9.søknad.felles.type.Landkode;
2424
import no.nav.k9.søknad.felles.type.Periode;
25+
import no.nav.k9.søknad.felles.type.validering.GyldigePerioderMap;
2526

2627
@JsonIgnoreProperties(ignoreUnknown = true)
2728
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
2829
public class Utenlandsopphold {
2930

3031
@Valid
32+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
3133
@JsonInclude(value = Include.ALWAYS)
3234
@JsonProperty(value = "perioder")
33-
private Map<Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioder = new TreeMap<>();
35+
private Map<@NotNull Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioder = new TreeMap<>();
3436

3537
@Valid
38+
@GyldigePerioderMap(krevFomDato = true, krevTomDato = true)
3639
@JsonInclude(value = Include.ALWAYS)
3740
@JsonProperty(value = "perioderSomSkalSlettes")
38-
private Map<Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioderSomSkalSlettes = new TreeMap<>();
41+
private Map<@NotNull Periode, @NotNull UtenlandsoppholdPeriodeInfo> perioderSomSkalSlettes = new TreeMap<>();
3942

4043
/**@deprecated brukt tom ctor.*/
4144
@JsonCreator

soknad/src/main/java/no/nav/k9/søknad/felles/type/Periode.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import java.util.TreeSet;
99
import java.util.stream.Collectors;
1010

11+
import javax.validation.constraints.AssertFalse;
12+
1113
import com.fasterxml.jackson.annotation.JsonCreator;
1214
import com.fasterxml.jackson.annotation.JsonValue;
1315

@@ -30,7 +32,7 @@ public Periode(String iso8601) {
3032
this.tilOgMed = parseLocalDate(split[1]);
3133
this.iso8601 = iso8601;
3234
}
33-
35+
3436
public Periode(Periode p) {
3537
this(p.getFraOgMed(), p.getTilOgMed());
3638
}
@@ -41,6 +43,11 @@ public Periode(LocalDate fraOgMed, LocalDate tilOgMed) {
4143
this.iso8601 = toIso8601(fraOgMed) + SKILLE + toIso8601(tilOgMed);
4244
}
4345

46+
@AssertFalse(message = "[ugyldigPeriode] Fra og med (FOM) må være før eller lik til og med (TOM).")
47+
public boolean isTilOgMedFørFraOgMed() {
48+
return fraOgMed != null && tilOgMed != null && tilOgMed.isBefore(fraOgMed);
49+
}
50+
4451
public LocalDate getFraOgMed() {
4552
return fraOgMed;
4653
}
@@ -76,8 +83,6 @@ public static Periode forsikreLukketPeriode(Periode periode, LocalDate fallbackT
7683
return new Periode(periode.fraOgMed, periode.tilOgMed != null ? periode.tilOgMed : fallbackTilOgMed);
7784
}
7885

79-
80-
8186
@Override
8287
public int compareTo(Periode o) {
8388
return this.iso8601.compareTo(o.iso8601);
@@ -91,7 +96,7 @@ public boolean equals(Object o) {
9196
return false;
9297
var periode = (Periode) o;
9398
return Objects.equals(fraOgMed, periode.fraOgMed)
94-
&& Objects.equals(tilOgMed, periode.tilOgMed);
99+
&& Objects.equals(tilOgMed, periode.tilOgMed);
95100
}
96101

97102
@Override
@@ -104,10 +109,12 @@ public String toString() {
104109
return iso8601;
105110
}
106111

107-
/** Sjekk om denne perioden inneholder (omslutter) angitt periode. */
112+
/**
113+
* Sjekk om denne perioden inneholder (omslutter) angitt periode.
114+
*/
108115
public boolean inneholder(Periode periode) {
109116
return (this.fraOgMed == null || (periode.fraOgMed != null && !this.fraOgMed.isAfter(periode.fraOgMed)))
110-
&& (this.tilOgMed == null || (periode.tilOgMed != null && !this.tilOgMed.isBefore(periode.tilOgMed)));
117+
&& (this.tilOgMed == null || (periode.tilOgMed != null && !this.tilOgMed.isBefore(periode.tilOgMed)));
111118
}
112119

113120
/**
@@ -143,9 +150,9 @@ private Utils() {
143150
private static final Comparator<Periode> tilOgMedComparator = Comparator.comparing(periode -> periode.tilOgMed);
144151

145152
public static <PERIODE_INFO> void leggTilPeriode(
146-
Map<Periode, PERIODE_INFO> perioder,
147-
Periode nyPeriode,
148-
PERIODE_INFO nyPeriodeInfo) {
153+
Map<Periode, PERIODE_INFO> perioder,
154+
Periode nyPeriode,
155+
PERIODE_INFO nyPeriodeInfo) {
149156
Objects.requireNonNull(perioder, "perioder");
150157
Objects.requireNonNull(nyPeriode, "nyPeriode");
151158
Objects.requireNonNull(nyPeriodeInfo, "nyPeriodeInfo");
@@ -158,23 +165,23 @@ public static <PERIODE_INFO> void leggTilPeriode(
158165
}
159166

160167
public static <PERIODE_INFO> void leggTilPerioder(
161-
Map<Periode, PERIODE_INFO> perioder,
162-
Map<Periode, PERIODE_INFO> nyePerioder) {
168+
Map<Periode, PERIODE_INFO> perioder,
169+
Map<Periode, PERIODE_INFO> nyePerioder) {
163170
Objects.requireNonNull(perioder);
164171
Objects.requireNonNull(nyePerioder);
165172
var nyeKeys = nyePerioder.keySet();
166173

167174
var duplikater = perioder
168-
.keySet()
169-
.stream()
170-
.filter(nyeKeys::contains)
171-
.collect(Collectors.toSet());
175+
.keySet()
176+
.stream()
177+
.filter(nyeKeys::contains)
178+
.collect(Collectors.toSet());
172179

173180
if (!duplikater.isEmpty()) {
174181
var duplikatePerioder = String.join(", ", duplikater
175-
.stream()
176-
.map(it -> it.iso8601)
177-
.collect(Collectors.toSet()));
182+
.stream()
183+
.map(it -> it.iso8601)
184+
.collect(Collectors.toSet()));
178185
throw new IllegalArgumentException("Inneholder allerede " + duplikatePerioder);
179186
}
180187

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package no.nav.k9.søknad.felles.type.validering;
2+
3+
4+
import java.lang.annotation.Documented;
5+
import java.lang.annotation.ElementType;
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.RetentionPolicy;
8+
import java.lang.annotation.Target;
9+
10+
import javax.validation.Constraint;
11+
import javax.validation.Payload;
12+
13+
@Documented
14+
@Constraint(validatedBy = {GyldigePerioderMapValidator.class})
15+
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
16+
@Retention(RetentionPolicy.RUNTIME)
17+
public @interface GyldigePerioderMap {
18+
19+
String message() default "Ugyldig peride-map";
20+
21+
boolean krevFomDato() default false;
22+
boolean krevTomDato() default false;
23+
24+
Class<?>[] groups() default {};
25+
26+
Class<? extends Payload>[] payload() default {};
27+
28+
String[] value() default {};
29+
}

0 commit comments

Comments
 (0)