Skip to content

Commit 9c5bff1

Browse files
Feature/psb ny validering (#103)
* Validering bruker nå tidsserie for validering * Endret på Arbeidstaker validering og fikset andre feil * fikser feil ved filter helligdager * fikser navn og feil * fikset kommentarer fra Frode * oppdaterer build med å bruke settings.xml * nytt forsøk på bruke settings.xml * feil path på setting * prøver ny settings.xml * lagt til env i build
1 parent cb316df commit 9c5bff1

File tree

13 files changed

+366
-160
lines changed

13 files changed

+366
-160
lines changed

.github/settings.xml

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,42 @@
1-
<settings>
2-
<servers>
3-
<server>
4-
<id>github</id>
5-
<username>${env.GITHUB_USERNAME}</username>
6-
<password>${env.GITHUB_PASSWORD}</password>
7-
</server>
8-
</servers>
1+
<?xml version='1.0' encoding='UTF-8' ?>
2+
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
5+
http://maven.apache.org/xsd/settings-1.0.0.xsd">
6+
7+
<activeProfiles>
8+
<activeProfile>github</activeProfile>
9+
</activeProfiles>
910

1011
<profiles>
1112
<profile>
1213
<id>github</id>
13-
<activation>
14-
<activeByDefault>true</activeByDefault>
15-
</activation>
1614
<repositories>
15+
<repository>
16+
<id>central</id>
17+
<url>https://repo.maven.apache.org/maven2</url>
18+
<releases>
19+
<enabled>true</enabled>
20+
</releases>
21+
<snapshots>
22+
<enabled>true</enabled>
23+
</snapshots>
24+
</repository>
1725
<repository>
1826
<id>github</id>
19-
<name>GitHub navikt Apache Maven Packages</name>
27+
<name>GitHub Apache Maven Packages</name>
2028
<url>https://maven.pkg.github.com/navikt/k9-format/</url>
2129
</repository>
2230
</repositories>
2331
</profile>
2432
</profiles>
25-
</settings>
33+
34+
35+
<servers>
36+
<server>
37+
<id>github</id>
38+
<username>${env.GITHUB_USERNAME}</username>
39+
<password>${env.GITHUB_PASSWORD}</password>
40+
</server>
41+
</servers>
42+
</settings>

.github/workflows/build-pr.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,7 @@ jobs:
2929
${{ runner.os }}-maven-${{ env.PREVIOUS_CACHE_KEY }}
3030
3131
- name: Build
32-
run: mvn verify -DtrimStackTrace=false
32+
run: mvn verify --settings .github/settings.xml -DtrimStackTrace=false
33+
env:
34+
GITHUB_USERNAME: x-access-token
35+
GITHUB_PASSWORD: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030

3131
- name: Build & Deploy
3232
run: |
33-
mvn verify -e --batch-mode --file pom.xml -DtrimStackTrace=false
33+
mvn verify -e --batch-mode --settings .github/settings.xml --file pom.xml -DtrimStackTrace=false
3434
env:
3535
GITHUB_USERNAME: x-access-token
3636
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@
9090
<artifactId>jsonassert</artifactId>
9191
<version>1.5.0</version>
9292
</dependency>
93+
<dependency>
94+
<groupId>no.nav.fpsak.tidsserie</groupId>
95+
<artifactId>fpsak-tidsserie</artifactId>
96+
<version>2.5.5</version>
97+
</dependency>
9398
</dependencies>
9499
</dependencyManagement>
95100

@@ -119,6 +124,10 @@
119124
<artifactId>jakarta.el</artifactId>
120125
<scope>test</scope>
121126
</dependency>
127+
<dependency>
128+
<groupId>no.nav.fpsak.tidsserie</groupId>
129+
<artifactId>fpsak-tidsserie</artifactId>
130+
</dependency>
122131
</dependencies>
123132

124133
<build>
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package no.nav.k9.søknad;
2+
3+
import no.nav.fpsak.tidsserie.LocalDateSegment;
4+
import no.nav.fpsak.tidsserie.LocalDateTimeline;
5+
import no.nav.k9.søknad.felles.Feil;
6+
import no.nav.k9.søknad.felles.type.Periode;
7+
8+
import java.time.DayOfWeek;
9+
import java.time.LocalDate;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
import java.util.Map;
13+
import java.util.stream.Collectors;
14+
15+
public class TidsserieValidator {
16+
17+
public static TidsseriePeriodeWrapper finnIkkeKomplettePerioderOgPerioderUtenfor(LocalDateTimeline<Boolean> testTidsserie, LocalDateTimeline<Boolean> hovedTidsserie) {
18+
return new TidsseriePeriodeWrapper(
19+
TidsserieUtils.toPeriodeList(hovedTidsserie.disjoint(testTidsserie)),
20+
TidsserieUtils.toPeriodeList(testTidsserie.disjoint(hovedTidsserie)));
21+
}
22+
23+
public static TidsseriePeriodeWrapper finnPerioderUtenfor(LocalDateTimeline<Boolean> testTidsserie, LocalDateTimeline<Boolean> hovedTidsserie) {
24+
return new TidsseriePeriodeWrapper(
25+
new ArrayList<>(),
26+
TidsserieUtils.toPeriodeList(testTidsserie.disjoint(hovedTidsserie)));
27+
}
28+
29+
public static boolean periodeInneholderDagerSomIkkeErHelg(Periode periode) {
30+
LocalDate testDag = periode.getFraOgMed();
31+
while (testDag.isBefore(periode.getTilOgMed()) || testDag.isEqual(periode.getTilOgMed())) {
32+
if (!((testDag.getDayOfWeek() == DayOfWeek.SUNDAY) || (testDag.getDayOfWeek() == DayOfWeek.SATURDAY))) {
33+
return true;
34+
}
35+
testDag = testDag.plusDays(1);
36+
}
37+
return false;
38+
}
39+
40+
public static class TidsserieUtils {
41+
public static List<Periode> toPeriodeList(LocalDateTimeline<?> t) {
42+
return t.stream().map(l -> new Periode(l.getFom(), l.getTom())).collect(Collectors.toList());
43+
}
44+
45+
public static LocalDateTimeline<Boolean> toLocalDateTimeline(List<Periode> perioder) throws IllegalArgumentException{
46+
return new LocalDateTimeline<Boolean>(perioder.stream().map(p -> new LocalDateSegment<Boolean>(p.getFraOgMed(), p.getTilOgMed(), true)).collect(Collectors.toList())).compress();
47+
}
48+
49+
public static LocalDateTimeline<Boolean> toLocalDateTimeline(Map<Periode, ?> periodeMap) {
50+
return toLocalDateTimeline(new ArrayList<>(periodeMap.keySet()));
51+
}
52+
}
53+
54+
public static class TidsseriePeriodeWrapper {
55+
private final List<Periode> perioderSomIkkeOverlapperMedHovedperiode;
56+
private final List<Periode> perioderUtenforHovedperiode;
57+
58+
public TidsseriePeriodeWrapper(List<Periode> perioderSomIkkeOverlapperMedHovedperiode, List<Periode> perioderUtenforHovedperiode) {
59+
this.perioderSomIkkeOverlapperMedHovedperiode = perioderSomIkkeOverlapperMedHovedperiode;
60+
this.perioderUtenforHovedperiode = perioderUtenforHovedperiode;
61+
}
62+
63+
public List<Periode> getPerioderSomIkkeOverlapperMedHovedperiode() {
64+
return perioderSomIkkeOverlapperMedHovedperiode;
65+
}
66+
67+
public List<Periode> getPerioderUtenforHovedperiode() {
68+
return perioderUtenforHovedperiode;
69+
}
70+
71+
public void valider(String felt , List<Feil> feil) {
72+
if(!this.perioderSomIkkeOverlapperMedHovedperiode.isEmpty()) {
73+
feil.addAll(this.perioderSomIkkeOverlapperMedHovedperiode.stream()
74+
.filter(TidsserieValidator::periodeInneholderDagerSomIkkeErHelg)
75+
.map(p -> toFeil(p, felt, "ikkeKomplettPeriode", "Periodene er ikke komplett, periode som mangler er: "))
76+
.collect(Collectors.toList()));
77+
}
78+
if(!this.perioderUtenforHovedperiode.isEmpty()) {
79+
feil.addAll(this.perioderUtenforHovedperiode.stream()
80+
.map(p -> toFeil(p, felt, "ugyldigPeriode", "Perioden er utenfor søknadsperioden : "))
81+
.collect(Collectors.toList()));
82+
}
83+
}
84+
85+
private Feil toFeil(Periode periode, String felt, String feilkode, String feilmelding) {
86+
return new Feil(felt, feilkode, feilmelding + periode.toString());
87+
}
88+
89+
}
90+
}

soknad/src/main/java/no/nav/k9/søknad/felles/aktivitet/ArbeidAktivitet.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class ArbeidAktivitet {
2323
@Valid
2424
private Frilanser frilanser;
2525

26+
@Deprecated
2627
@Valid
2728
@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
2829
@JsonProperty(value = "arbeidstaker")
@@ -41,6 +42,7 @@ public ArbeidAktivitet(@JsonProperty(value = "arbeidstaker") @Valid List<Arbeids
4142
this.frilanser = frilanser;
4243
}
4344

45+
@Deprecated
4446
public static Builder builder() {
4547
return new Builder();
4648
}
@@ -90,6 +92,7 @@ public ArbeidAktivitet medFrilanser(Frilanser frilanser) {
9092
return this;
9193
}
9294

95+
@Deprecated
9396
public static final class Builder {
9497
private List<SelvstendigNæringsdrivende> selvstendigNæringsdrivende = new ArrayList<>();
9598
private Frilanser frilanser;

soknad/src/main/java/no/nav/k9/søknad/felles/aktivitet/Arbeidstaker.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package no.nav.k9.søknad.felles.aktivitet;
22

3-
import com.fasterxml.jackson.annotation.*;
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.JsonCreator;
5+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import no.nav.k9.søknad.felles.Feil;
48
import no.nav.k9.søknad.felles.type.NorskIdentitetsnummer;
59
import no.nav.k9.søknad.ytelse.psb.v1.arbeidstid.ArbeidstidInfo;
610

711
import javax.validation.Valid;
12+
import javax.validation.constraints.AssertTrue;
13+
import java.util.List;
814

915
@JsonIgnoreProperties(ignoreUnknown = true)
1016
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
@@ -23,14 +29,35 @@ public class Arbeidstaker {
2329
private ArbeidstidInfo arbeidstidInfo;
2430

2531
@JsonCreator
26-
public Arbeidstaker(@JsonProperty(value = "norskIdentitetsnummer") NorskIdentitetsnummer norskIdentitetsnummer,
27-
@JsonProperty(value = "organisasjonsnummer") Organisasjonsnummer organisasjonsnummer,
28-
@JsonProperty(value = "arbeidstidInfo") ArbeidstidInfo arbeidstidInfo) {
32+
public Arbeidstaker(@JsonProperty(value = "norskIdentitetsnummer") @Valid NorskIdentitetsnummer norskIdentitetsnummer,
33+
@JsonProperty(value = "organisasjonsnummer") @Valid Organisasjonsnummer organisasjonsnummer,
34+
@JsonProperty(value = "arbeidstidInfo") @Valid ArbeidstidInfo arbeidstidInfo) {
2935
this.norskIdentitetsnummer = norskIdentitetsnummer;
3036
this.organisasjonsnummer = organisasjonsnummer;
3137
this.arbeidstidInfo = arbeidstidInfo;
3238
}
3339

40+
public Arbeidstaker() {
41+
42+
}
43+
44+
private boolean erEntydigPåID() {
45+
return !(this.norskIdentitetsnummer != null && this.organisasjonsnummer != null);
46+
}
47+
48+
private boolean manglerIkkeID() {
49+
return (this.norskIdentitetsnummer != null || this.organisasjonsnummer != null);
50+
}
51+
52+
public void valider(String felt, List<Feil> feilList) {
53+
if(!erEntydigPåID()) {
54+
feilList.add(new Feil(felt, "illegalArgument", "Ikke entydig ID på Arbeidsgiver, må oppgi enten norskIdentitetsnummer eller organisasjonsnummer."));
55+
}
56+
if (!manglerIkkeID()) {
57+
feilList.add(new Feil(felt, "illegalArgument", "Mangler ID på Arbeidsgiver, må oppgi en av norskIdentitetsnummer eller organisasjonsnummer."));
58+
}
59+
}
60+
3461
public NorskIdentitetsnummer getNorskIdentitetsnummer() {
3562
return norskIdentitetsnummer;
3663
}

0 commit comments

Comments
 (0)