Skip to content

Commit

Permalink
Håndter FilterBehandlingType via collections på OppgaveFiltrering-ent…
Browse files Browse the repository at this point in the history
…itet (#2075)

Legg på/fjern behandlingtype filter fra relasjon på OppgaveFiltrering entitet + bruk orphanRemoval
  • Loading branch information
dijjal committed Apr 16, 2024
1 parent ade1f4b commit 8b64a35
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 45 deletions.
Expand Up @@ -12,7 +12,6 @@
import no.nav.foreldrepenger.los.oppgave.FagsakYtelseType;
import no.nav.foreldrepenger.los.oppgave.OppgaveRepository;
import no.nav.foreldrepenger.los.oppgavekø.FiltreringAndreKriterierType;
import no.nav.foreldrepenger.los.oppgavekø.FiltreringBehandlingType;
import no.nav.foreldrepenger.los.oppgavekø.KøSortering;
import no.nav.foreldrepenger.los.oppgavekø.OppgaveFiltrering;
import no.nav.foreldrepenger.los.organisasjon.Avdeling;
Expand All @@ -21,6 +20,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static java.util.function.Predicate.not;


@ApplicationScoped
public class AvdelingslederTjeneste {
Expand Down Expand Up @@ -70,24 +71,24 @@ public void settSortering(Long sakslisteId, KøSortering sortering) {
public void endreFiltreringBehandlingType(Long oppgavefiltreringId, BehandlingType behandlingType, boolean checked) {
var filtre = oppgaveRepository.hentOppgaveFilterSett(oppgavefiltreringId).orElseThrow();
if (checked) {
if (!behandlingType.gjelderTilbakebetaling()) {
settStandardSorteringHvisTidligereTilbakebetaling(oppgavefiltreringId);
}
oppgaveRepository.lagre(new FiltreringBehandlingType(filtre, behandlingType));
filtre.leggTilFilter(behandlingType);
} else {
oppgaveRepository.slettFiltreringBehandlingType(oppgavefiltreringId, behandlingType);
if (ingenBehandlingsTypeErValgtEtterAtTilbakekrevingErValgtBort(behandlingType, oppgavefiltreringId)) {
settStandardSorteringHvisTidligereTilbakebetaling(oppgavefiltreringId);
}
filtre.fjernFilter(behandlingType);
}
boolean gammelSorteringGjelderTilbakebetaling = filtre.getSortering().getFeltkategori().equals(KøSortering.FK_TILBAKEKREVING);
boolean tilbakekrevingSorteringIkkeAktuell =
filtre.getBehandlingTyper().isEmpty() || filtre.getBehandlingTyper().stream().anyMatch(not(BehandlingType::gjelderTilbakebetaling));
if (gammelSorteringGjelderTilbakebetaling && tilbakekrevingSorteringIkkeAktuell) {
settSortering(filtre.getId(), KøSortering.BEHANDLINGSFRIST);
}
oppgaveRepository.refresh(filtre);
oppgaveRepository.lagre(filtre);
}

public void endreFagsakYtelseType(Long oppgavefiltreringId, FagsakYtelseType fagsakYtelseType, boolean checked) {
var filter = hentFiltrering(oppgavefiltreringId);
filter.fjernFagsakYtelseType(fagsakYtelseType);
filter.fjernFilter(fagsakYtelseType);
if (checked) {
filter.leggTilFagsakYtelseType(fagsakYtelseType);
filter.leggTilFilter(fagsakYtelseType);
}
oppgaveRepository.lagre(filter);
}
Expand All @@ -97,10 +98,10 @@ public void endreFiltreringAndreKriterierType(Long oppgavefiltreringId,
boolean checked,
boolean inkluder) {
var filterSett = hentFiltrering(oppgavefiltreringId);
filterSett.fjernAndreKriterierType(andreKriterierType);
filterSett.fjernFilter(andreKriterierType);
if (checked) {
var kriterie = new FiltreringAndreKriterierType(filterSett, andreKriterierType, inkluder);
filterSett.leggTilAndreKriterierType(kriterie);
filterSett.leggTilFilter(kriterie);
}
oppgaveRepository.lagre(filterSett);
}
Expand Down Expand Up @@ -139,21 +140,6 @@ public void settSorteringTidsintervallValg(Long oppgaveFiltreringId, boolean erD
oppgaveRepository.settSorteringTidsintervallValg(oppgaveFiltreringId, erDynamiskPeriode);
}

private boolean ingenBehandlingsTypeErValgtEtterAtTilbakekrevingErValgtBort(BehandlingType behandlingType, Long oppgavefiltreringId) {
if (!behandlingType.gjelderTilbakebetaling()) {
return false;
}
var filter = hentFiltrering(oppgavefiltreringId);
return filter.getFiltreringBehandlingTyper().isEmpty();
}

private void settStandardSorteringHvisTidligereTilbakebetaling(Long oppgavefiltreringId) {
var sortering = oppgaveRepository.hentSorteringForListe(oppgavefiltreringId);
if (sortering != null && sortering.getFeltkategori().equals(KøSortering.FK_TILBAKEKREVING)) {
settSortering(oppgavefiltreringId, KøSortering.BEHANDLINGSFRIST);
}
}

private OppgaveFiltrering hentFiltrering(Long oppgavefiltreringId) {
return oppgaveRepository.hentOppgaveFilterSett(oppgavefiltreringId)
.orElseThrow(() -> AvdelingslederTjenesteFeil.fantIkkeOppgavekø(oppgavefiltreringId));
Expand Down
Expand Up @@ -6,6 +6,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
Expand Down Expand Up @@ -46,7 +47,7 @@ public class OppgaveFiltrering extends BaseEntitet {
@Convert(converter = KøSortering.KodeverdiConverter.class)
private KøSortering sortering;

@OneToMany(mappedBy = "oppgaveFiltrering")
@OneToMany(mappedBy = "oppgaveFiltrering", cascade = CascadeType.PERSIST, orphanRemoval = true)
private Set<FiltreringBehandlingType> filtreringBehandlingTyper = new HashSet<>();

@OneToMany(mappedBy = "oppgaveFiltrering", cascade = CascadeType.PERSIST, orphanRemoval = true)
Expand Down Expand Up @@ -110,6 +111,10 @@ public List<FiltreringAndreKriterierType> getFiltreringAndreKriterierTyper() {
return andreKriterierTyper.stream().toList();
}

public Set<FiltreringAndreKriterierType> getSet() {
return andreKriterierTyper;
}

public Avdeling getAvdeling() {
return avdeling;
}
Expand Down Expand Up @@ -148,17 +153,35 @@ public void leggTilSaksbehandler(Saksbehandler saksbehandler) {
}
}

public void leggTilAndreKriterierType(FiltreringAndreKriterierType filtreringAndreKriterierType) {
fjernAndreKriterierType(filtreringAndreKriterierType.getAndreKriterierType());
public void fjernSaksbehandler(Saksbehandler saksbehandler) {
this.saksbehandlere.remove(saksbehandler);
}

public void leggTilFilter(FiltreringAndreKriterierType filtreringAndreKriterierType) {
fjernFilter(filtreringAndreKriterierType.getAndreKriterierType());
this.andreKriterierTyper.add(filtreringAndreKriterierType);
}

public void fjernAndreKriterierType(AndreKriterierType andreKriterierType) {
public void leggTilFilter(FagsakYtelseType fagsakYtelseType) {
fjernFilter(fagsakYtelseType);
this.filtreringYtelseTyper.add(new FiltreringYtelseType(this, fagsakYtelseType));
}

public void leggTilFilter(BehandlingType behandlingType) {
fjernFilter(behandlingType);
this.filtreringBehandlingTyper.add(new FiltreringBehandlingType(this, behandlingType));
}

public void fjernFilter(AndreKriterierType andreKriterierType) {
this.andreKriterierTyper.removeIf(akt -> akt.getAndreKriterierType() == andreKriterierType);
}

public void fjernSaksbehandler(Saksbehandler saksbehandler) {
this.saksbehandlere.remove(saksbehandler);
public void fjernFilter(FagsakYtelseType fagsakYtelseType) {
this.filtreringYtelseTyper.removeIf(yt -> yt.getFagsakYtelseType() == fagsakYtelseType);
}

public void fjernFilter(BehandlingType behandlingType) {
this.filtreringBehandlingTyper.removeIf(fbt -> fbt.getBehandlingType() == behandlingType);
}

public void tilbakestill() {
Expand All @@ -172,14 +195,6 @@ public static OppgaveFiltrering.Builder builder() {
return new OppgaveFiltrering.Builder();
}

public void fjernFagsakYtelseType(FagsakYtelseType fagsakYtelseType) {
this.filtreringYtelseTyper.removeIf(yt -> yt.getFagsakYtelseType() == fagsakYtelseType);
}

public void leggTilFagsakYtelseType(FagsakYtelseType fagsakYtelseType) {
this.filtreringYtelseTyper.add(new FiltreringYtelseType(this, fagsakYtelseType));
}

public static class Builder {

private OppgaveFiltrering tempOppgaveFiltrering;
Expand Down
Expand Up @@ -79,9 +79,33 @@ void testSlettListe() throws IllegalArgumentException {
void testSettSorteringPåListe() {
var liste = OppgaveFiltrering.nyTomOppgaveFiltrering(avdelingDrammen());
persistAndFlush(liste);
avdelingslederTjeneste.settSortering(liste.getId(), KøSortering.BEHANDLINGSFRIST);
avdelingslederTjeneste.settSortering(liste.getId(), KøSortering.FØRSTE_STØNADSDAG);
entityManager.refresh(liste);
assertThat(liste.getSortering()).isEqualTo(KøSortering.BEHANDLINGSFRIST);
assertThat(liste.getSortering()).isEqualTo(KøSortering.FØRSTE_STØNADSDAG);
}

@Test
void settStandardSorteringNårTilbakebetalingfilterIkkeAktivt() {
var liste = OppgaveFiltrering.nyTomOppgaveFiltrering(avdelingDrammen());
liste.leggTilFilter(BehandlingType.TILBAKEBETALING);
persistAndFlush(liste);
avdelingslederTjeneste.settSortering(liste.getId(), KøSortering.BELØP);
avdelingslederTjeneste.settSorteringNumeriskIntervall(liste.getId(), 100L, 200L);
entityManager.refresh(liste);
assertThat(liste)
.matches(d -> d.getFra().equals(100L))
.matches(d -> d.getTil().equals(200L))
.matches(OppgaveFiltrering::getErDynamiskPeriode)
.matches(d -> d.getSortering() == KøSortering.BELØP);

// sett standard sortering når det ikke lenger er filter på behandlingtype tilbakebetaling
avdelingslederTjeneste.endreFiltreringBehandlingType(liste.getId(), BehandlingType.TILBAKEBETALING, false);
entityManager.refresh(liste);
assertThat(liste)
.matches(d -> d.getFra() == null)
.matches(d -> d.getTil() == null)
.matches(d -> !d.getErDynamiskPeriode())
.matches(d -> d.getSortering() == KøSortering.BEHANDLINGSFRIST);
}

@Test
Expand Down

0 comments on commit 8b64a35

Please sign in to comment.