Skip to content

Commit

Permalink
Drift-endepunkt for å sette saksbehandler på behandling hvor denne er…
Browse files Browse the repository at this point in the history
… nullet ut (#2829)
  • Loading branch information
tendestad committed Jun 12, 2024
1 parent 57b2043 commit a7a3273
Showing 1 changed file with 108 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
package no.nav.foreldrepenger.tilbakekreving.web.app.tjenester.forvaltning;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
Expand All @@ -31,8 +37,10 @@
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.Behandling;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.BehandlingStegStatus;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.Behandlingsresultat;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.aksjonspunkt.AksjonspunktDefinisjon;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.aksjonspunkt.Venteårsak;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.ekstern.EksternBehandling;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingLås;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingRepository;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingRepositoryProvider;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingresultatRepository;
Expand All @@ -53,7 +61,10 @@
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
import no.nav.vedtak.log.util.LoggerUtils;
import no.nav.vedtak.sikkerhet.abac.AbacDataAttributter;
import no.nav.vedtak.sikkerhet.abac.AbacDto;
import no.nav.vedtak.sikkerhet.abac.BeskyttetRessurs;
import no.nav.vedtak.sikkerhet.abac.StandardAbacAttributtType;
import no.nav.vedtak.sikkerhet.abac.TilpassetAbacAttributt;
import no.nav.vedtak.sikkerhet.abac.beskyttet.ActionType;

Expand Down Expand Up @@ -196,7 +207,9 @@ public Response tvingkobleBehandlingTilGrunnlag(@Valid @NotNull KobleBehandlingT
LOG.info(message);
return Response.status(Response.Status.BAD_REQUEST).entity(message).build();
} catch (KravgrunnlagValidator.UgyldigKravgrunnlagException e) {
String message = LoggerUtils.removeLineBreaks("Kunne ikke koble behandling med behandlingId=" + behandlingTilGrunnlagDto.getBehandlingId() + " til kravgrunnlag med mottattXmlId=" + behandlingTilGrunnlagDto.getMottattXmlId() + " siden kravgrunnlaget ikke er gyldig: ");
String message = LoggerUtils.removeLineBreaks(
"Kunne ikke koble behandling med behandlingId=" + behandlingTilGrunnlagDto.getBehandlingId() + " til kravgrunnlag med mottattXmlId="
+ behandlingTilGrunnlagDto.getMottattXmlId() + " siden kravgrunnlaget ikke er gyldig: ");
LOG.info(message, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message + e.getMessage()).build();
}
Expand Down Expand Up @@ -281,30 +294,116 @@ public Response korrigerHenvisning(@Valid @NotNull KorrigertHenvisningDto korrig
return Response.ok().build();
}

@POST
@Path("/sett-ansvarlig-saksbehandler")
@Operation(
tags = "FORVALTNING-behandling",
description = "Tjeneste for å sette ansvarlig saksbehandler, på behandling hvor denne ikke er satt",
responses = {
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "500", description = "ukjent feil.")
})
@BeskyttetRessurs(actionType = ActionType.CREATE, property = AbacProperty.DRIFT)
public Response settAnsvarligSaksbehandler(@Valid @NotNull ForvaltningBehandlingRestTjeneste.SettAnsvarligSaksbehandlerDto input) {
var behandling = behandlingRepository.hentBehandling(input.getBehandlingId());

BehandlingLås behandlingLås = behandlingRepository.taSkriveLås(behandling);
if (behandling.erAvsluttet() || behandling.erUnderIverksettelse()) {
throw new IllegalArgumentException("Kan ikke endre på behandling som er ferdig/under iverksettelse");
}
Set<String> saksbehandlerePåBehandlingen = behandling.getAksjonspunkter()
.stream()
.filter(a -> !a.erAutopunkt())
.filter(a->a.erUtført())
.filter(a->a.getAksjonspunktDefinisjon() != AksjonspunktDefinisjon.FATTE_VEDTAK)
.map(a -> a.getEndretAv())
.filter(Objects::nonNull)
.collect(Collectors.toSet());

if (saksbehandlerePåBehandlingen.contains(input.getSaksbehandlerIdent())){
throw new IllegalArgumentException("Saksbehandler er ikke på behandlingen fra før, avbryter. Aktuelle er: " + saksbehandlerePåBehandlingen);
}
if (behandling.getAnsvarligSaksbehandler() != null) {
throw new IllegalArgumentException("Behandligen har allerede en ansvarlg saksbehandler");
}
behandling.setAnsvarligSaksbehandler(input.getSaksbehandlerIdent());

behandlingRepository.lagre(behandling, behandlingLås);

return Response.ok().build();
}

public static class SettAnsvarligSaksbehandlerDto implements AbacDto {

@NotNull
@Min(0)
@Max(Long.MAX_VALUE)
private Long behandlingId;

@NotNull
@Pattern(regexp = "^[A-Z]\\d+$")
private String saksbehandlerIdent;

public SettAnsvarligSaksbehandlerDto() {
// for CDI
}

public SettAnsvarligSaksbehandlerDto(Long behandlingId, String saksbehandlerIdent) {
this.behandlingId = behandlingId;
this.saksbehandlerIdent = saksbehandlerIdent;
}

public Long getBehandlingId() {
return behandlingId;
}

public void setBehandlingId(Long behandlingId) {
this.behandlingId = behandlingId;
}

public String getSaksbehandlerIdent() {
return saksbehandlerIdent;
}

public void setSaksbehandlerIdent(String saksbehandlerIdent) {
this.saksbehandlerIdent = saksbehandlerIdent;
}

@Override
public AbacDataAttributter abacAttributter() {
return AbacDataAttributter.opprett().leggTil(StandardAbacAttributtType.BEHANDLING_ID, getBehandlingId());
}
}

private void kobleBehandling(KobleBehandlingTilGrunnlagDto dto) {
Long mottattXmlId = dto.getMottattXmlId();
Long behandlingId = dto.getBehandlingId();
Behandling behandling = behandlingRepository.hentBehandling(behandlingId);
if (!behandling.isBehandlingPåVent()) {
throw new UgyldigTvingKoblingForespørselException("Behandling med id " + behandlingId + " er ikke på vent");
}
if (!Venteårsak.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG.equals(behandling.getVenteårsak()) && !Venteårsak.VENT_PÅ_BRUKERTILBAKEMELDING.equals(behandling.getVenteårsak())) {
if (!Venteårsak.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG.equals(behandling.getVenteårsak()) && !Venteårsak.VENT_PÅ_BRUKERTILBAKEMELDING.equals(
behandling.getVenteårsak())) {
throw new UgyldigTvingKoblingForespørselException("Behandling med id " + behandlingId + " venter ikke på tilbakekrevingsgrunnlag");
}
ØkonomiXmlMottatt mottattXml = mottattXmlRepository.finnMottattXml(mottattXmlId);
if (mottattXml == null) {
throw new UgyldigTvingKoblingForespørselException("MottattXmlId=" + mottattXmlId + " finnes ikke");
}
if (mottattXml.getMottattXml().contains(TaskProperties.ROOT_ELEMENT_KRAV_VEDTAK_STATUS_XML)) {
throw new UgyldigTvingKoblingForespørselException("MottattXmlId=" + mottattXmlId + " peker ikke på et kravgrunnlag, men på en status-melding");
throw new UgyldigTvingKoblingForespørselException(
"MottattXmlId=" + mottattXmlId + " peker ikke på et kravgrunnlag, men på en status-melding");
}

fjernKoblingTilHenlagteBehandlinger(mottattXml, behandlingId);
if (mottattXmlRepository.erMottattXmlTilkoblet(mottattXmlId)) {
throw new UgyldigTvingKoblingForespørselException("Kravgrunnlaget med mottattXmlId=" + mottattXmlId + " er allerede koblet til en ikke-henlagt behandling");
throw new UgyldigTvingKoblingForespørselException(
"Kravgrunnlaget med mottattXmlId=" + mottattXmlId + " er allerede koblet til en ikke-henlagt behandling");
}
if (mottattXml.getSaksnummer() != null && !behandling.getFagsak().getSaksnummer().getVerdi().equals(mottattXml.getSaksnummer())) {
throw new UgyldigTvingKoblingForespørselException("Kan ikke koble behandling med behandlingId=" + behandlingId + " til kravgrunnlag med mottattXmlId=" + mottattXml + ". Kravgrunnlaget tilhører annen fagsak");
throw new UgyldigTvingKoblingForespørselException(
"Kan ikke koble behandling med behandlingId=" + behandlingId + " til kravgrunnlag med mottattXmlId=" + mottattXml
+ ". Kravgrunnlaget tilhører annen fagsak");
}
DetaljertKravgrunnlag kravgrunnlagDto = KravgrunnlagXmlUnmarshaller.unmarshall(mottattXmlId, mottattXml.getMottattXml());
Kravgrunnlag431 kravgrunnlag = kravgrunnlagMapper.mapTilDomene(kravgrunnlagDto);
Expand All @@ -327,10 +426,12 @@ private void fjernKoblingTilHenlagteBehandlinger(ØkonomiXmlMottatt mottattXml,
}
if (resultat.isPresent() && resultat.get().erBehandlingHenlagt()) {
eksternBehandlingRepository.deaktivateTilkobling(eksternBehandling.getInternId());
LOG.info("Deaktiverer kobling mellom behandlingId {} og mottattXmlId {} for {}", eksternBehandling.getInternId(), mottattXml.getId(), mottattXml.getSaksnummer());
LOG.info("Deaktiverer kobling mellom behandlingId {} og mottattXmlId {} for {}", eksternBehandling.getInternId(), mottattXml.getId(),
mottattXml.getSaksnummer());
} else {
alleKoblingerFjernes = false;
LOG.info("Kan ikke fjerne tilkobling til behandling {}, denne er ikke henlagt siden behandlingsresultat er {}", kobletBehandlingId, resultat);
LOG.info("Kan ikke fjerne tilkobling til behandling {}, denne er ikke henlagt siden behandlingsresultat er {}", kobletBehandlingId,
resultat);
}
}
if (alleKoblingerFjernes) {
Expand Down

0 comments on commit a7a3273

Please sign in to comment.