From cf275a2d964ca73845d73e8439c908d5e8e4f2f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20L=C3=B8mo?= Date: Fri, 6 Oct 2023 21:50:44 +0200 Subject: [PATCH] =?UTF-8?q?De=20fleste=20OppgaveApi-kall=20ferdig=20portet?= =?UTF-8?q?.=20Gr=C3=B8nne=20tester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/no/nav/k9/los/KoinProfiles.kt | 18 +- .../ReservasjonKonverteringJobb.kt | 114 +--------- .../ReservasjonOversetter.kt | 149 +++++++++++++ .../feilhandtering/FinnerIkkeDataException.kt | 3 + .../los/nyoppgavestyring/ko/OppgaveKoApis.kt | 13 ++ .../nyoppgavestyring/ko/OppgaveKoTjeneste.kt | 19 +- .../reservasjon/ReservasjonApis.kt | 7 + .../reservasjon/ReservasjonV3.kt | 7 + .../reservasjon/ReservasjonV3Repository.kt | 59 ++++- .../reservasjon/ReservasjonV3Tjeneste.kt | 90 ++++++-- .../visningoguttrekk/OppgaveRepository.kt | 34 +++ .../visningoguttrekk/OppgaveTjeneste.kt | 20 ++ .../oppgave/ForlengReservasjonDto.kt | 9 + .../saksbehandler/oppgave/OppgaveApis.kt | 209 ++++++++++++++---- .../saksbehandler/oppgave/OppgaveDto.kt | 32 +-- .../saksbehandler/oppgave/OppgaveTjeneste.kt | 47 ++-- .../oppgave/OpphevReservasjonId.kt | 3 +- .../saksbehandler/oppgave/ReservasjonV3Dto.kt | 9 +- .../oppgave/ReservasjonV3FraK\303\270Dto.kt" | 22 ++ ..._0043__oppgavev3_reservasjonstjeneste.sql} | 0 src/test/kotlin/no/nav/k9/los/KoinModules.kt | 45 +++- .../ReservasjonV3RepositoryTest.kt | 14 +- .../reservasjon/ReservasjonV3TjenesteTest.kt | 16 +- .../OppgaveTjenesteSettSkjermetTest.kt | 11 +- .../oppgave/OppgaveTjenesteTest.kt | 31 ++- 25 files changed, 738 insertions(+), 243 deletions(-) create mode 100644 src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonOversetter.kt create mode 100644 src/main/kotlin/no/nav/k9/los/nyoppgavestyring/feilhandtering/FinnerIkkeDataException.kt create mode 100644 src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonApis.kt create mode 100644 src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveTjeneste.kt create mode 100644 src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ForlengReservasjonDto.kt create mode 100644 "src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3FraK\303\270Dto.kt" rename src/main/resources/migreringer/{V1.0_0042__oppgavev3_reservasjonstjeneste.sql => V1.0_0043__oppgavev3_reservasjonstjeneste.sql} (100%) diff --git a/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt b/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt index c8ffa8ca2..68af923f2 100644 --- a/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt +++ b/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt @@ -41,6 +41,7 @@ import no.nav.k9.los.integrasjon.sakogbehandling.SakOgBehandlingProducer import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.OmrådeSetup import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.klagetillos.K9KlageTilLosAdapterTjeneste +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering.ReservasjonOversetter import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerInterfaceKludge import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerKlient import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerKlientLocal @@ -278,7 +279,18 @@ fun common(app: Application, config: Configuration) = module { pepClient = get(), azureGraphService = get(), statistikkRepository = get(), - omsorgspengerService = get() + omsorgspengerService = get(), + reservasjonOversetter = get() + ) + } + + single { + ReservasjonOversetter( + transactionalManager = get(), + oppgaveV3Repository = get(), + oppgavetypeRepository = get(), + saksbehandlerRepository = get(), + reservasjonV3Tjeneste = get(), ) } @@ -482,12 +494,10 @@ fun common(app: Application, config: Configuration) = module { ReservasjonV3Tjeneste( transactionalManager = get(), reservasjonV3Repository = get(), - oppgaveKoRepository = get(), - oppgaveQueryService = get(), oppgaveRepository = get(), pepClient = get(), saksbehandlerRepository = get(), - auditlogger = get() + auditlogger = Auditlogger(config) ) } } diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonKonverteringJobb.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonKonverteringJobb.kt index 8532cc481..560877f48 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonKonverteringJobb.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonKonverteringJobb.kt @@ -22,12 +22,7 @@ class ReservasjonKonverteringJobb( private val config: Configuration, private val reservasjonRepository: ReservasjonRepository, private val oppgaveRepository: OppgaveRepository, - private val reservasjonV3Repository: ReservasjonV3Repository, - private val reservasjonV3Tjeneste: ReservasjonV3Tjeneste, - private val oppgaveV3Repository: OppgaveV3Repository, - private val oppgavetypeRepository: OppgavetypeRepository, - private val saksbehandlerRepository: SaksbehandlerRepository, - private val transactionalManager: TransactionalManager, + private val reservasjonOversetter: ReservasjonOversetter, ) { private val log: Logger = LoggerFactory.getLogger(ReservasjonKonverteringJobb::class.java) @@ -49,7 +44,7 @@ class ReservasjonKonverteringJobb( private fun spillAvReservasjoner() { log.info("Stareter avspilling av reservasjoner") - val tidKjøringStartet = System.currentTimeMillis() + val tidKjøringStartet = System.currentTimeMillis() //TODO: Telleverk og logge fremdrift val reservasjonIder = reservasjonRepository.hentAlleReservasjonUUID() log.info("Fant ${reservasjonIder.size} behandlinger") @@ -61,105 +56,12 @@ class ReservasjonKonverteringJobb( return //Logisk slettet reservasjon. Migreres ikke } val oppgaveV1 = oppgaveRepository.hent(reservasjonV1.oppgave) - transactionalManager.transaction { tx -> - val gammelReservasjon = reservasjonRepository.hentSisteReservasjonMedLås(gammelReservasjonUuid, tx) - when (oppgaveV1.system) { - "K9SAK" -> { - val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave( - oppgaveV1.eksternId.toString(), - oppgavetypeRepository.hentOppgavetype("K9", "k9sak"), - tx - ) - ?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.") - - reserverOppgavetypeSomErStøttetIV3( - oppgaveV3, - gammelReservasjon - ) - } - - "K9KLAGE" -> { - val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave( - oppgaveV1.eksternId.toString(), - oppgavetypeRepository.hentOppgavetype("K9", "k9sak"), - tx - ) - ?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.") - - reserverOppgavetypeSomErStøttetIV3( - oppgaveV3, - gammelReservasjon - ) - } - - else -> { - reserverOppgavetypeSomIkkeErStøttetIV3(oppgaveV1.eksternId.toString(), gammelReservasjon) - } - } - } - } - } - - private fun reserverOppgavetypeSomIkkeErStøttetIV3( - oppgaveEksternId: String, - gammelReservasjon: Reservasjon - ) { - val gyldigFra = if (gammelReservasjon.reservertTil!!.isAfter(LocalDateTime.now())) { - LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover() - } else { - gammelReservasjon.reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover() - } - - val reservertAv = runBlocking { - saksbehandlerRepository.finnSaksbehandlerMedIdent( - gammelReservasjon.reservertAv - )!! - } - - val flyttetAv = runBlocking { - gammelReservasjon.flyttetAv?.let {flyttetAv -> - saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!! - } - } - - reservasjonV3Tjeneste.taReservasjon( - reservasjonsnøkkel = "legacy_$oppgaveEksternId", - reserverForId = reservertAv.id!!, - gyldigFra = gyldigFra, - gyldigTil = gammelReservasjon.reservertTil!!, - utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!, - ) - } - - private fun reserverOppgavetypeSomErStøttetIV3( - oppgave: OppgaveV3, - gammelReservasjon: Reservasjon - ) { - val reservertAv = runBlocking { - saksbehandlerRepository.finnSaksbehandlerMedEpost( - gammelReservasjon.flyttetAv ?: gammelReservasjon.reservertAv - ) - }!! - - val gyldigFra = if (gammelReservasjon.reservertTil!!.isAfter(LocalDateTime.now())) { - LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover() - } else { - gammelReservasjon.reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover() - } - - val flyttetAv = runBlocking { - gammelReservasjon.flyttetAv?.let {flyttetAv -> - saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!! - } - } - - runBlocking { - reservasjonV3Tjeneste.taReservasjon( - reservasjonsnøkkel = oppgave.reservasjonsnøkkel, - reserverForId = reservertAv.id!!, - gyldigFra = gyldigFra, - gyldigTil = gammelReservasjon.reservertTil!!, - utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!, + reservasjonOversetter.taNyReservasjonFraGammelKontekst( + oppgaveV1 = oppgaveV1, + reservertAvEpost = reservasjonV1.reservertAv, + reservertTil = reservasjonV1.reservertTil!!, + utførtAvIdent = reservasjonV1.flyttetAv, + kommentar = reservasjonV1.begrunnelse, ) } } diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonOversetter.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonOversetter.kt new file mode 100644 index 000000000..16261c05e --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/reservasjonkonvertering/ReservasjonOversetter.kt @@ -0,0 +1,149 @@ +package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering + +import kotlinx.coroutines.runBlocking +import no.nav.k9.los.domene.lager.oppgave.Oppgave +import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager +import no.nav.k9.los.domene.repository.SaksbehandlerRepository +import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3 +import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Repository +import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeRepository +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste +import no.nav.k9.los.tjenester.saksbehandler.oppgave.forskyvReservasjonsDatoBakover +import java.time.LocalDateTime + +class ReservasjonOversetter( + private val transactionalManager: TransactionalManager, + private val oppgaveV3Repository: OppgaveV3Repository, + private val oppgavetypeRepository: OppgavetypeRepository, + private val saksbehandlerRepository: SaksbehandlerRepository, + private val reservasjonV3Tjeneste: ReservasjonV3Tjeneste +) { + + fun taNyReservasjonFraGammelKontekst( + oppgaveV1: Oppgave, + reservertAvEpost: String, + reservertTil: LocalDateTime, + utførtAvIdent: String?, + kommentar: String? + ) + : ReservasjonV3 { + return transactionalManager.transaction { tx -> + when (oppgaveV1.system) { + "K9SAK" -> { + val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave( + oppgaveV1.eksternId.toString(), + oppgavetypeRepository.hentOppgavetype("K9", "k9sak"), + tx + ) + ?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.") + + reserverOppgavetypeSomErStøttetIV3( + oppgaveV3, + reservertAvEpost = reservertAvEpost, + reservertTil = reservertTil, + utførtAvIdent = utførtAvIdent, + kommentar = kommentar, + ) + } + + "K9KLAGE" -> { + val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave( + oppgaveV1.eksternId.toString(), + oppgavetypeRepository.hentOppgavetype("K9", "k9sak"), + tx + ) + ?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.") + + reserverOppgavetypeSomErStøttetIV3( + oppgaveV3, + reservertAvEpost = reservertAvEpost, + reservertTil = reservertTil, + utførtAvIdent = utførtAvIdent, + kommentar = kommentar, + ) + } + + else -> { + reserverOppgavetypeSomIkkeErStøttetIV3( + oppgaveV1.eksternId.toString(), + reservertAvEpost = reservertAvEpost, + reservertTil = reservertTil, + utførtAvIdent = utførtAvIdent, + kommentar = kommentar, + ) + } + } + } + } + + private fun reserverOppgavetypeSomIkkeErStøttetIV3( + oppgaveEksternId: String, + reservertAvEpost: String, + reservertTil: LocalDateTime, + utførtAvIdent: String?, + kommentar: String? + ) : ReservasjonV3 { + val gyldigFra = if (reservertTil.isAfter(LocalDateTime.now())) { + LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover() + } else { + reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover() + } + + val reservertAv = runBlocking { + saksbehandlerRepository.finnSaksbehandlerMedIdent(reservertAvEpost)!! + } + + val utførtAv = runBlocking { + utførtAvIdent?.let { utførtAvIdent -> + saksbehandlerRepository.finnSaksbehandlerMedIdent(utførtAvIdent)!! + } + } + + return reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv( + reservasjonsnøkkel = "legacy_$oppgaveEksternId", + reserverForId = reservertAv.id!!, + gyldigFra = gyldigFra, + gyldigTil = reservertTil, + utføresAvId = utførtAv?.let { it.id!! } ?: reservertAv.id!!, + kommentar = kommentar ?: "" + ) + } + + private fun reserverOppgavetypeSomErStøttetIV3( + oppgave: OppgaveV3, + reservertAvEpost: String, + reservertTil: LocalDateTime, + utførtAvIdent: String?, + kommentar: String? + ) : ReservasjonV3 { + val reservertAv = runBlocking { + saksbehandlerRepository.finnSaksbehandlerMedEpost( + reservertAvEpost + ) + }!! + + val gyldigFra = if (reservertTil.isAfter(LocalDateTime.now())) { + LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover() + } else { + reservertTil.minusHours(24).forskyvReservasjonsDatoBakover() + } + + val flyttetAv = runBlocking { + utførtAvIdent?.let { flyttetAv -> + saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!! + } + } + + return runBlocking { + reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv( + reservasjonsnøkkel = oppgave.reservasjonsnøkkel, + reserverForId = reservertAv.id!!, + gyldigFra = gyldigFra, + gyldigTil = reservertTil, + utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!, + kommentar = kommentar ?: "" + ) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/feilhandtering/FinnerIkkeDataException.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/feilhandtering/FinnerIkkeDataException.kt new file mode 100644 index 000000000..542605c43 --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/feilhandtering/FinnerIkkeDataException.kt @@ -0,0 +1,3 @@ +package no.nav.k9.los.nyoppgavestyring.feilhandtering + +class FinnerIkkeDataException(message: String, cause: Throwable? = null): IllegalArgumentException(message, cause) \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt index ab4a0e2de..1d03d9f21 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt @@ -12,6 +12,7 @@ import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository import no.nav.k9.los.nyoppgavestyring.ko.dto.KopierOppgaveKoDto import no.nav.k9.los.nyoppgavestyring.ko.dto.OppgaveKo import no.nav.k9.los.nyoppgavestyring.ko.dto.OpprettOppgaveKoDto +import no.nav.k9.los.nyoppgavestyring.query.db.OppgaveQueryRepository import org.koin.java.KoinJavaComponent import org.koin.ktor.ext.inject import java.util.* @@ -19,6 +20,7 @@ import java.util.* fun Route.OppgaveKoApis() { val requestContextService by inject() val oppgaveKoRepository by inject() + val oppgaveKoTjeneste by inject() val pepClient by KoinJavaComponent.inject(IPepClient::class.java) @Location("/") @@ -88,6 +90,17 @@ fun Route.OppgaveKoApis() { } } + @Location("/{id}/oppgaver") + data class OppgaveKoId(val id: String) + + get { oppgaveKoId: OppgaveKoId -> + requestContextService.withRequestContext(call) { + if (pepClient.harTilgangTilReservingAvOppgaver()) { //TODO: Hvilke felter vil vi eksponere her? + oppgaveKoTjeneste.hentOppgaverFraKø(oppgaveKoId.id.toLong()) + } + } + } + @Location("") class endreOppgaveKo diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoTjeneste.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoTjeneste.kt index 9d5da3c36..4b2958b5f 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoTjeneste.kt @@ -1,10 +1,12 @@ package no.nav.k9.los.nyoppgavestyring.ko +import kotlinx.coroutines.runBlocking import kotliquery.TransactionalSession import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager +import no.nav.k9.los.integrasjon.rest.idToken import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository -import no.nav.k9.los.nyoppgavestyring.ko.dto.OppgaveKo import no.nav.k9.los.nyoppgavestyring.query.OppgaveQueryService +import no.nav.k9.los.nyoppgavestyring.query.dto.resultat.Oppgaverad import no.nav.k9.los.nyoppgavestyring.reservasjon.AlleredeReservertException import no.nav.k9.los.nyoppgavestyring.reservasjon.ManglerTilgangException import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 @@ -24,6 +26,16 @@ class OppgaveKoTjeneste( ) { private val log = LoggerFactory.getLogger(OppgaveKoTjeneste::class.java) + fun hentOppgaverFraKø( + oppgaveKoId: Long + ) : List { + val ko = oppgaveKoRepository.hent(oppgaveKoId) + val idToken = runBlocking { + kotlin.coroutines.coroutineContext.idToken() + } + return oppgaveQueryService.query(ko.oppgaveQuery, idToken) + } + fun taReservasjonFraKø( innloggetBrukerId: Long, oppgaveKoId: Long @@ -38,12 +50,12 @@ class OppgaveKoTjeneste( val kandidatOppgaver = oppgaveQueryService.queryForOppgaveId(oppgavekø.oppgaveQuery) return transactionalManager.transaction { tx -> - finnOppgaveFraKø(kandidatOppgaver, tx, innloggetBrukerId) + finnReservasjonFraKø(kandidatOppgaver, tx, innloggetBrukerId) } } - private fun finnOppgaveFraKø( + private fun finnReservasjonFraKø( kandidatoppgaver: List, tx: TransactionalSession, innloggetBrukerId: Long @@ -66,6 +78,7 @@ class OppgaveKoTjeneste( reservasjonsnøkkel = kandidatoppgave.reservasjonsnøkkel, gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusHours(24).forskyvReservasjonsDato(), + kommentar = "", tx = tx ) return Pair(kandidatoppgave, reservasjon) diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonApis.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonApis.kt new file mode 100644 index 000000000..c7f3d3da8 --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonApis.kt @@ -0,0 +1,7 @@ +package no.nav.k9.los.nyoppgavestyring.reservasjon + +import io.ktor.server.routing.* + +internal fun Route.ReservasjonApis() { + +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3.kt index 6eb9b4912..cbbc8283e 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3.kt @@ -9,6 +9,7 @@ class ReservasjonV3( val reservertAv: Long, val reservasjonsnøkkel: String, val annullertFørUtløp: Boolean = false, + val kommentar: String, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime, ) { @@ -20,6 +21,7 @@ class ReservasjonV3( reservertAv: Long = this.reservertAv, reservasjonsnøkkel: String = this.reservasjonsnøkkel, annullertFørUtløp: Boolean = this.annullertFørUtløp, + kommentar: String = this.kommentar, gyldigFra: LocalDateTime = this.gyldigFra, gyldigTil: LocalDateTime = this.gyldigTil ): ReservasjonV3 { @@ -28,6 +30,7 @@ class ReservasjonV3( reservertAv, reservasjonsnøkkel, annullertFørUtløp, + kommentar, gyldigFra, gyldigTil ) @@ -36,11 +39,13 @@ class ReservasjonV3( constructor( saksbehandlerId: Long, reservasjonsnøkkel: String, + kommentar: String, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime ) : this( reservertAv = saksbehandlerId, reservasjonsnøkkel = reservasjonsnøkkel, + kommentar = kommentar, gyldigFra = gyldigFra, gyldigTil = gyldigTil, ) @@ -48,11 +53,13 @@ class ReservasjonV3( constructor( saksbehandler: Saksbehandler, reservasjonsnøkkel: String, + kommentar: String, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime ) : this( reservertAv = saksbehandler.id!!, reservasjonsnøkkel = reservasjonsnøkkel, + kommentar = kommentar, gyldigFra = gyldigFra, gyldigTil = gyldigTil, ) diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Repository.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Repository.kt index 3576958ce..f170f814b 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Repository.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Repository.kt @@ -13,12 +13,13 @@ class ReservasjonV3Repository( tx.updateAndReturnGeneratedKey( queryOf( """ - insert into RESERVASJON_V3(reservertAv, reservasjonsnokkel, gyldig_tidsrom) - values (:reservertAv, :nokkel, tsrange(:gyldig_fra, :gyldig_til)) + insert into RESERVASJON_V3(reservertAv, reservasjonsnokkel, gyldig_tidsrom, kommentar) + values (:reservertAv, :nokkel, tsrange(:gyldig_fra, :gyldig_til), :kommentar) """.trimIndent(), mapOf( "reservertAv" to reservasjonV3.reservertAv, "nokkel" to reservasjonV3.reservasjonsnøkkel, + "kommentar" to reservasjonV3.kommentar, "gyldig_fra" to reservasjonV3.gyldigFra, "gyldig_til" to reservasjonV3.gyldigTil ) @@ -36,12 +37,38 @@ class ReservasjonV3Repository( } } + fun endreReservasjon(reservasjonSomSkalEndres: ReservasjonV3, endretAvBrukerId: Long, nySaksbehandlerId: Long?, nyTildato: LocalDateTime?, kommentar: String?, tx: TransactionalSession) : ReservasjonV3 { + val annullertReservasjonId = annullerAktivReservasjon(reservasjonSomSkalEndres, kommentar ?: "", tx) + val nyReservasjon = lagreReservasjon( + ReservasjonV3( + reservasjonsnøkkel = reservasjonSomSkalEndres.reservasjonsnøkkel, + reservertAv = nySaksbehandlerId ?: reservasjonSomSkalEndres.reservertAv, + kommentar = kommentar ?: reservasjonSomSkalEndres.kommentar, + gyldigFra = reservasjonSomSkalEndres.gyldigFra, + gyldigTil = nyTildato ?: reservasjonSomSkalEndres.gyldigTil, + ), + tx + ) + + lagreEndring( + ReservasjonV3Endring( + annullertReservasjonId = annullertReservasjonId, + nyReservasjonId = nyReservasjon.id, + endretAv = endretAvBrukerId + ), + tx + ) + + return nyReservasjon + } + fun annullerAktivReservasjonOgLagreEndring( aktivReservasjon: ReservasjonV3, + kommentar: String, innloggetBrukerId: Long, tx: TransactionalSession ) { - val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, tx) + val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, kommentar, tx) lagreEndring( ReservasjonV3Endring( annullertReservasjonId = annullertReservasjonId, @@ -54,15 +81,17 @@ class ReservasjonV3Repository( fun forlengReservasjon( aktivReservasjon: ReservasjonV3, - endretAv: Long, + endretAvBrukerId: Long, nyTildato: LocalDateTime, + kommentar: String, tx: TransactionalSession ): ReservasjonV3 { - val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, tx) + val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, kommentar, tx) val nyReservasjon = lagreReservasjon( ReservasjonV3( reservertAv = aktivReservasjon.reservertAv, reservasjonsnøkkel = aktivReservasjon.reservasjonsnøkkel, + kommentar = kommentar, gyldigFra = aktivReservasjon.gyldigFra, gyldigTil = nyTildato, ), @@ -73,7 +102,7 @@ class ReservasjonV3Repository( ReservasjonV3Endring( annullertReservasjonId = annullertReservasjonId, nyReservasjonId = nyReservasjon.id, - endretAv = endretAv + endretAv = endretAvBrukerId ), tx ) @@ -84,17 +113,19 @@ class ReservasjonV3Repository( aktivReservasjon: ReservasjonV3, saksbehandlerSomSkalHaReservasjonId: Long, endretAvBrukerId: Long, + kommentar: String, reserverTil: LocalDateTime, tx: TransactionalSession - ) { + ) : ReservasjonV3 { val overføringstidspunkt = LocalDateTime.now() - val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, tx) + val annullertReservasjonId = annullerAktivReservasjon(aktivReservasjon, kommentar, tx) val nyReservasjon = lagreReservasjon( ReservasjonV3( reservertAv = saksbehandlerSomSkalHaReservasjonId, reservasjonsnøkkel = aktivReservasjon.reservasjonsnøkkel, + kommentar = kommentar, gyldigFra = overføringstidspunkt, gyldigTil = reserverTil ), @@ -108,14 +139,15 @@ class ReservasjonV3Repository( endretAv = endretAvBrukerId, ), tx ) + return nyReservasjon } - private fun annullerAktivReservasjon(aktivReservasjon: ReservasjonV3, tx: TransactionalSession): Long { + private fun annullerAktivReservasjon(aktivReservasjon: ReservasjonV3, kommentar: String, tx: TransactionalSession): Long { return tx.updateAndReturnGeneratedKey( //TODO: reservasjon allerede utløpt, men ikke annullert? Returnere Long? queryOf( """ UPDATE public.reservasjon_v3 - SET annullert_for_utlop = true, sist_endret = :now + SET annullert_for_utlop = true, sist_endret = :now, kommentar = :kommentar WHERE reservertAv = :reservertAv and reservasjonsnokkel = :reservasjonsnokkel and upper(gyldig_tidsrom) > localtimestamp @@ -124,6 +156,7 @@ class ReservasjonV3Repository( mapOf( "reservertAv" to aktivReservasjon.reservertAv, "reservasjonsnokkel" to aktivReservasjon.reservasjonsnøkkel, + "kommentar" to kommentar, "now" to LocalDateTime.now(), ) ) @@ -137,7 +170,7 @@ class ReservasjonV3Repository( return tx.run( queryOf( """ - select r.id, r.reservertAv, r.reservasjonsnokkel, lower(r.gyldig_tidsrom) as fra, upper(r.gyldig_tidsrom) as til, r.annullert_for_utlop + select r.id, r.reservertAv, r.reservasjonsnokkel, lower(r.gyldig_tidsrom) as fra, upper(r.gyldig_tidsrom) as til, r.annullert_for_utlop, kommentar as kommentar from reservasjon_v3 r where r.reservertAv = :reservertAv and annullert_for_utlop = false @@ -152,6 +185,7 @@ class ReservasjonV3Repository( id = row.long("id"), reservertAv = row.long("reservertAv"), reservasjonsnøkkel = row.string("reservasjonsnokkel"), + kommentar = row.string("kommentar"), gyldigFra = row.localDateTime("fra"), gyldigTil = row.localDateTime("til"), ) @@ -163,7 +197,7 @@ class ReservasjonV3Repository( return tx.run( queryOf( """ - select r.id, r.reservertAv, r.reservasjonsnokkel, lower(r.gyldig_tidsrom) as fra, upper(r.gyldig_tidsrom) as til, r.annullert_for_utlop + select r.id, r.reservertAv, r.reservasjonsnokkel, lower(r.gyldig_tidsrom) as fra, upper(r.gyldig_tidsrom) as til, r.annullert_for_utlop , kommentar as kommentar from reservasjon_v3 r where r.reservasjonsnokkel = :nokkel and annullert_for_utlop = false @@ -178,6 +212,7 @@ class ReservasjonV3Repository( id = row.long("id"), reservertAv = row.long("reservertAv"), reservasjonsnøkkel = row.string("reservasjonsnokkel"), + kommentar = row.string("kommentar"), annullertFørUtløp = row.boolean("annullert_for_utlop"), gyldigFra = row.localDateTime("fra"), gyldigTil = row.localDateTime("til"), diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Tjeneste.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Tjeneste.kt index b9e7381c3..63dce3ce2 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Tjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/reservasjon/ReservasjonV3Tjeneste.kt @@ -7,9 +7,7 @@ import no.nav.k9.los.domene.repository.SaksbehandlerRepository import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.abac.TILGANG_SAK import no.nav.k9.los.integrasjon.audit.* -import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository -import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Tjeneste -import no.nav.k9.los.nyoppgavestyring.query.OppgaveQueryService +import no.nav.k9.los.nyoppgavestyring.feilhandtering.FinnerIkkeDataException import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.Oppgave import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.OppgaveRepository import no.nav.k9.los.tjenester.saksbehandler.oppgave.forskyvReservasjonsDato @@ -26,7 +24,6 @@ class ReservasjonV3Tjeneste( private val oppgaveRepository: OppgaveRepository, ) { - private val log = LoggerFactory.getLogger(ReservasjonV3Tjeneste::class.java) fun auditlogReservert(brukerId: Long, reservertoppgave: Oppgave) { val saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedId(brukerId) @@ -64,11 +61,12 @@ class ReservasjonV3Tjeneste( fun taReservasjon( reservasjonsnøkkel: String, reserverForId: Long, + kommentar: String, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime ): ReservasjonV3 { return transactionalManager.transaction { tx -> - taReservasjon(reservasjonsnøkkel, reserverForId, gyldigFra, gyldigTil, tx) + taReservasjon(reservasjonsnøkkel, reserverForId, gyldigFra, gyldigTil, kommentar, tx) } } @@ -77,6 +75,7 @@ class ReservasjonV3Tjeneste( reserverForId: Long, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime, + kommentar: String, tx: TransactionalSession ): ReservasjonV3 { //sjekke tilgang på alle oppgaver tilknyttet nøkkel @@ -91,6 +90,7 @@ class ReservasjonV3Tjeneste( reservasjonsnøkkel = reservasjonsnøkkel, gyldigFra = gyldigFra, gyldigTil = gyldigTil, + kommentar = kommentar, ) val reservasjon = reservasjonV3Repository.lagreReservasjon(reservasjonTilLagring, tx) @@ -102,11 +102,12 @@ class ReservasjonV3Tjeneste( reserverForId: Long, gyldigFra: LocalDateTime, gyldigTil: LocalDateTime, + kommentar: String, utføresAvId: Long ): ReservasjonV3 { return transactionalManager.transaction { tx -> try { - taReservasjon(reservasjonsnøkkel, reserverForId, gyldigFra, gyldigTil) + taReservasjon(reservasjonsnøkkel, reserverForId, kommentar = kommentar, gyldigFra, gyldigTil) } catch (e: AlleredeReservertException) { val aktivReservasjon = reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel( @@ -118,8 +119,9 @@ class ReservasjonV3Tjeneste( } else if (aktivReservasjon.gyldigTil < gyldigTil) { reservasjonV3Repository.forlengReservasjon( aktivReservasjon, - endretAv = utføresAvId, + endretAvBrukerId = utføresAvId, nyTildato = gyldigTil, + kommentar = kommentar, tx ) } else { @@ -133,6 +135,12 @@ class ReservasjonV3Tjeneste( } } + fun hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel: String) : ReservasjonV3? { + return transactionalManager.transaction { tx -> + reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel, tx) + } + } + fun hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel: String, tx: TransactionalSession) : ReservasjonV3? { return reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel, tx) } @@ -144,15 +152,36 @@ class ReservasjonV3Tjeneste( } - fun annullerReservasjon(reservasjonsnøkkel: String, annullertAvBrukerId: Long) { + fun annullerReservasjon(reservasjonsnøkkel: String, kommentar: String, annullertAvBrukerId: Long) { transactionalManager.transaction { tx -> val aktivReservasjon = reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel, tx)!! reservasjonV3Repository.annullerAktivReservasjonOgLagreEndring( aktivReservasjon, + kommentar, annullertAvBrukerId, tx ) + + + } + } + + fun forlengReservasjon( + reservasjonsnøkkel: String, + nyTildato: LocalDateTime?, + utførtAvBrukerId: Long, + kommentar: String, + ) : ReservasjonV3 { + return transactionalManager.transaction { tx -> + val aktivReservasjon = finnAktivReservasjon(reservasjonsnøkkel, tx) + reservasjonV3Repository.forlengReservasjon( + aktivReservasjon = aktivReservasjon!!, + endretAvBrukerId = utførtAvBrukerId, + nyTildato = nyTildato ?: aktivReservasjon.gyldigTil.plusHours(24).forskyvReservasjonsDato(), + kommentar = kommentar, + tx = tx + ) } } @@ -160,21 +189,46 @@ class ReservasjonV3Tjeneste( reservasjonsnøkkel: String, reserverTil: LocalDateTime, tilSaksbehandlerId: Long, - utførtAvBrukerId: Long - ) { - transactionalManager.transaction { tx -> + utførtAvBrukerId: Long, + kommentar: String, + ) : ReservasjonV3 { + return transactionalManager.transaction { tx -> val aktivReservasjon = - reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel, tx)!! + finnAktivReservasjon(reservasjonsnøkkel, tx) reservasjonV3Repository.overførReservasjon( aktivReservasjon = aktivReservasjon, saksbehandlerSomSkalHaReservasjonId = tilSaksbehandlerId, endretAvBrukerId = utførtAvBrukerId, reserverTil = reserverTil, - tx + kommentar = kommentar, + tx = tx ) } } + + + fun endreReservasjon( + reservasjonsnøkkel: String, + endretAvBrukerId: Long, + nyTildato: LocalDateTime?, + nySaksbehandlerId: Long?, + kommentar: String? + ) : ReservasjonV3 { + return transactionalManager.transaction { tx -> + val aktivReservasjon = finnAktivReservasjon(reservasjonsnøkkel, tx) + + reservasjonV3Repository.endreReservasjon( + reservasjonSomSkalEndres = aktivReservasjon, + endretAvBrukerId = endretAvBrukerId, + nyTildato = nyTildato, + nySaksbehandlerId = nySaksbehandlerId, + kommentar = kommentar, + tx = tx + ) + } + } + private fun sjekkTilganger(oppgaver: List, brukerId: Long): Boolean { oppgaver.forEach { oppgave -> val saksnummer = oppgave.hentVerdi("saksnummer") //TODO gjøre oppgavetypeagnostisk @@ -192,4 +246,14 @@ class ReservasjonV3Tjeneste( } return true } + + private fun finnAktivReservasjon( + reservasjonsnøkkel: String, + tx: TransactionalSession + ): ReservasjonV3 { + val aktivReservasjon = + reservasjonV3Repository.hentAktivReservasjonForReservasjonsnøkkel(reservasjonsnøkkel, tx) + ?: throw FinnerIkkeDataException("Fant ikke aktiv reservasjon for angitt reservasjonsnøkkel: $reservasjonsnøkkel") //TODO: Lov å logge/vise reservasjonsnøkkel? + return aktivReservasjon + } } \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt index 5954329ef..833caff56 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveRepository.kt @@ -2,6 +2,7 @@ package no.nav.k9.los.nyoppgavestyring.visningoguttrekk import kotliquery.TransactionalSession import kotliquery.queryOf +import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.Oppgavestatus import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeRepository class OppgaveRepository( @@ -37,6 +38,39 @@ class OppgaveRepository( return oppgave.fyllDefaultverdier() } + fun hentAlleÅpneOppgaverForReservasjonsnøkkel(tx: TransactionalSession, reservasjonsnøkkel: String) : List { + val oppgaver = tx.run( + queryOf( + """ + select * + from oppgave_v3 ov + where reservasjonsnokkel = :reservasjonsnokkel + and aktiv = true + and status != :oppgavestatus + """.trimIndent(), + mapOf( + "reservasjonsnokkel" to reservasjonsnøkkel, + "oppgavestatus" to Oppgavestatus.LUKKET.kode, + ) + ).map { row -> + val kildeområde = row.string("kildeomrade") + val oppgaveTypeId = row.long("oppgavetype_id") + Oppgave( + eksternId = row.string("ekstern_id"), + eksternVersjon = row.string("ekstern_versjon"), + oppgavetype = oppgavetypeRepository.hentOppgavetype(kildeområde, oppgaveTypeId, tx), + status = row.string("status"), + endretTidspunkt = row.localDateTime("endret_tidspunkt"), + kildeområde = row.string("kildeomrade"), + felter = hentOppgavefelter(tx, row.long("id")), + reservasjonsnøkkel = row.string("reservasjonsnokkel") + ) + }.asList + ) + + return oppgaver + } + fun hentAlleOppgaverForReservasjonsnøkkel(tx: TransactionalSession, reservasjonsnøkkel: String): List { val oppgaver = tx.run( queryOf( diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveTjeneste.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveTjeneste.kt new file mode 100644 index 000000000..bf01f2a5f --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/visningoguttrekk/OppgaveTjeneste.kt @@ -0,0 +1,20 @@ +package no.nav.k9.los.nyoppgavestyring.visningoguttrekk + +import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager + +class OppgaveTjeneste( + private val oppgaveRepository: OppgaveRepository, + private val transactionalManager: TransactionalManager +) { + fun hentOppgave(eksternId: String) : Oppgave { + return transactionalManager.transaction { tx -> + oppgaveRepository.hentNyesteOppgaveForEksternId(tx, eksternId) + } + } + + fun hentÅpneOppgaverForReservasjonsnøkkel(reservasjonsnøkkel: String) : List { + return transactionalManager.transaction { tx -> + oppgaveRepository.hentAlleÅpneOppgaverForReservasjonsnøkkel(tx, reservasjonsnøkkel) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ForlengReservasjonDto.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ForlengReservasjonDto.kt new file mode 100644 index 000000000..8e2a7adab --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ForlengReservasjonDto.kt @@ -0,0 +1,9 @@ +package no.nav.k9.los.tjenester.saksbehandler.oppgave + +import java.time.LocalDateTime + +data class ForlengReservasjonDto( + val oppgaveId: String, + val kommentar: String?, + val nyTilDato: LocalDateTime?, +) \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt index 77936a410..c1b2ff28e 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt @@ -12,6 +12,7 @@ import no.nav.k9.los.domene.repository.SaksbehandlerRepository import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.integrasjon.rest.idToken +import no.nav.k9.los.nyoppgavestyring.feilhandtering.FinnerIkkeDataException import no.nav.k9.los.nyoppgavestyring.ko.OppgaveKoTjeneste import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.OppgaveRepository @@ -19,6 +20,7 @@ import org.koin.ktor.ext.inject import org.slf4j.Logger import org.slf4j.LoggerFactory import java.time.LocalDateTime +import java.time.LocalTime import java.util.* private val log: Logger = LoggerFactory.getLogger("nav.OppgaveApis") @@ -30,11 +32,13 @@ internal fun Route.OppgaveApis() { val reservasjonV3Tjeneste by inject() val oppgaveKoTjeneste by inject() val oppgaveV3Repository by inject() + val oppgaveV3Tjeneste by inject() val transactionalManager by inject() val pepClient by inject() class hentOppgaver + //erstattet av OppgaveKoApis--/{id}/oppgaver::GET get { _: hentOppgaver -> val queryParameter = call.request.queryParameters["id"] requestContextService.withRequestContext(call) { @@ -45,7 +49,7 @@ internal fun Route.OppgaveApis() { } } - @Location("/behandlede") + @Location("/behandlede") //WIP: siste behandlede oppgaver av saksbehandler. Gjenbruke gammel løsning? class getBehandledeOppgaver get { _: getBehandledeOppgaver -> @@ -59,11 +63,28 @@ internal fun Route.OppgaveApis() { get { _: getReserverteOppgaver -> requestContextService.withRequestContext(call) { - call.respond(oppgaveTjeneste.hentSisteReserverteOppgaver()) + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + + val reservasjoner = + reservasjonV3Tjeneste.hentReservasjonerForSaksbehandler(innloggetBruker.id!!) + + val reservasjonV3Dtos = reservasjoner.map { reservasjon -> + val oppgaverForReservasjonsnøkkel = + oppgaveV3Tjeneste.hentÅpneOppgaverForReservasjonsnøkkel(reservasjon.reservasjonsnøkkel) + + ReservasjonV3Dto( + reservasjon, + oppgaverForReservasjonsnøkkel, + innloggetBruker + ) + } + call.respond(reservasjonV3Dtos) } } - @Location("/antall") + @Location("/antall") //TODO avklare med Stian/Bjørnar -- OppgaveQueryService.query med tom select i query? class hentAntallOppgaverForOppgavekø get { _: hentAntallOppgaverForOppgavekø -> @@ -124,16 +145,18 @@ internal fun Route.OppgaveApis() { val reserverForIdent = oppgaveIdMedOverstyring.overstyrIdent ?: innloggetBruker.brukerIdent val reserverForSaksbehandler = saksbehandlerRepository.finnSaksbehandlerMedIdent(reserverForIdent!!)!! //TODO: try-catch på denne, og hent eksisterende reservasjon og returner hvis man kolliderer pga samtidighet - val reservasjonV3 = reservasjonV3Tjeneste.taReservasjon( + val reservasjonV3 = reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv( reservasjonsnøkkel = oppgaveV3.reservasjonsnøkkel, reserverForId = reserverForSaksbehandler.id!!, gyldigFra = reserverFra, - gyldigTil = reserverFra.plusHours(24).forskyvReservasjonsDato(), - utføresAvId = innloggetBruker.id!! + utføresAvId = innloggetBruker.id!!, + kommentar = oppgaveIdMedOverstyring.overstyrBegrunnelse ?: "", + gyldigTil = reserverFra.plusHours(24).forskyvReservasjonsDato() ) //TODO: konsistenssjekk mellom tjenesteversjonene --- V3 som master der V3 har oppgave //TODO: sjekke statusobjekt, saksbehandler som holder reservasjon -- feks conflict hvis noen andre hadde reservasjon fra før - val saksbehandlerSomHarReservasjon = saksbehandlerRepository.finnSaksbehandlerMedId(reservasjonV3.reservertAv) + val saksbehandlerSomHarReservasjon = + saksbehandlerRepository.finnSaksbehandlerMedId(reservasjonV3.reservertAv) call.respond( OppgaveStatusDto( erReservert = true, @@ -151,27 +174,27 @@ internal fun Route.OppgaveApis() { @Location("/fa-oppgave-fra-ny-ko") class fåOppgaveFraNyKø - post {_: fåOppgaveFraNyKø -> - requestContextService.withRequestContext(call) { - val params = call.receive() + post { _: fåOppgaveFraNyKø -> + requestContextService.withRequestContext(call) { + val params = call.receive() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! - val reservasjonFraKø = oppgaveKoTjeneste.taReservasjonFraKø( - innloggetBrukerId = innloggetBruker.id!!, - oppgaveKoId = params.oppgaveKøId.toLong() - ) + val (reservertOppgave, reservasjonFraKø) = oppgaveKoTjeneste.taReservasjonFraKø( + innloggetBrukerId = innloggetBruker.id!!, + oppgaveKoId = params.oppgaveKøId.toLong() + ) ?: Pair(null, null) - if (reservasjonFraKø != null) { - //log.info("RESERVASJONDEBUG: Lagt til ${innloggetBruker.brukerIdent} oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") - call.respond(ReservasjonV3Dto(reservasjonFraKø, innloggetBruker)) - } else { - call.respond(HttpStatusCode.NotFound, "Fant ingen oppgave i valgt kø") - } + if (reservasjonFraKø != null) { + //log.info("RESERVASJONDEBUG: Lagt til ${innloggetBruker.brukerIdent} oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") + call.respond(ReservasjonV3FraKøDto(reservasjonFraKø, reservertOppgave!!, innloggetBruker)) + } else { + call.respond(HttpStatusCode.NotFound, "Fant ingen oppgave i valgt kø") } } + } @Location("/fa-oppgave-fra-ko") class fåOppgaveFraKø @@ -179,14 +202,18 @@ internal fun Route.OppgaveApis() { requestContextService.withRequestContext(call) { val params = call.receive() - val ident = saksbehandlerRepository.finnSaksbehandlerMedEpost( + val saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedEpost( kotlin.coroutines.coroutineContext.idToken().getUsername() - )!!.brukerIdent!! + )!! - val oppgaveFraKø = oppgaveTjeneste.fåOppgaveFraKø(params.oppgaveKøId, ident) + val oppgaveFraKø = oppgaveTjeneste.fåOppgaveFraKø( + oppgaveKøId = params.oppgaveKøId, + brukerident = saksbehandler.brukerIdent!!, + saksbehandlerEpost = saksbehandler.epost!! + ) if (oppgaveFraKø != null) { - log.info("RESERVASJONDEBUG: Lagt til $ident oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") + log.info("RESERVASJONDEBUG: Lagt til ${saksbehandler.brukerIdent} oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") call.respond(oppgaveFraKø) } else { call.respond(HttpStatusCode.NotFound, "Fant ingen oppgave i valgt kø") @@ -199,11 +226,24 @@ internal fun Route.OppgaveApis() { post { _: opphevReservasjon -> requestContextService.withRequestContext(call) { val params = call.receive() - call.respond(oppgaveTjeneste.frigiReservasjon(UUID.fromString(params.oppgaveId), params.begrunnelse)) + val gammelReturverdi = + oppgaveTjeneste.frigiReservasjon(UUID.fromString(params.oppgaveId), params.begrunnelse) + + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + + val oppgave = oppgaveV3Tjeneste.hentOppgave(params.oppgaveId) + reservasjonV3Tjeneste.annullerReservasjon( + oppgave.reservasjonsnøkkel, + params.begrunnelse, + innloggetBruker.id!! + ) + call.respond(HttpStatusCode.OK) //TODO: Hva er evt meningsfullt å returnere her? } } - @Location("/oppgaver-på-samme-bruker") + @Location("/oppgaver-på-samme-bruker") //TODO: Ikke i bruk? class oppgaverPåSammeBruker post { _: opphevReservasjon -> requestContextService.withRequestContext(call) { @@ -212,7 +252,7 @@ internal fun Route.OppgaveApis() { } } - @Location("/legg-til-behandlet-sak") + @Location("/legg-til-behandlet-sak") //TODO: ny løsning for siste saker? class leggTilBehandletSak post { _: leggTilBehandletSak -> @@ -231,8 +271,39 @@ internal fun Route.OppgaveApis() { class forlengReservasjon post { _: forlengReservasjon -> requestContextService.withRequestContext(call) { - val oppgaveId = call.receive() - call.respond(oppgaveTjeneste.forlengReservasjonPåOppgave(UUID.fromString(oppgaveId.oppgaveId))) + val forlengReservasjonDto = call.receive() + val gammelReturverdi = + oppgaveTjeneste.forlengReservasjonPåOppgave(UUID.fromString(forlengReservasjonDto.oppgaveId)) + + //TODO oppgaveId er behandlingsUUID? + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + val oppgave = oppgaveV3Tjeneste.hentOppgave(forlengReservasjonDto.oppgaveId) + + val forlengetReservasjon = try { + reservasjonV3Tjeneste.forlengReservasjon( + reservasjonsnøkkel = oppgave.reservasjonsnøkkel, + nyTildato = forlengReservasjonDto.nyTilDato, + utførtAvBrukerId = innloggetBruker.id!!, + kommentar = forlengReservasjonDto.kommentar ?: "" + ) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + null //TODO: Vil denne funksjonen faktisk terminere her? + } + + val åpneOppgaverForReservasjonsnøkkel = + oppgaveV3Tjeneste.hentÅpneOppgaverForReservasjonsnøkkel(oppgave.reservasjonsnøkkel) + val reservertAv = saksbehandlerRepository.finnSaksbehandlerMedId(forlengetReservasjon!!.reservertAv)!! + + call.respond( + ReservasjonV3Dto( + forlengetReservasjon!!, + åpneOppgaverForReservasjonsnøkkel, + reservertAv + ) + ) } } @@ -242,12 +313,44 @@ internal fun Route.OppgaveApis() { post { _: flyttReservasjon -> requestContextService.withRequestContext(call) { val params = call.receive() - call.respond( - oppgaveTjeneste.flyttReservasjon( - UUID.fromString(params.oppgaveId), - params.brukerIdent, - params.begrunnelse + val gammelReturVerdi = oppgaveTjeneste.flyttReservasjon( + UUID.fromString(params.oppgaveId), + params.brukerIdent, + params.begrunnelse + ) + + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + val tilSaksbehandler = saksbehandlerRepository.finnSaksbehandlerMedIdent( + params.brukerIdent + )!! + + val oppgave = oppgaveV3Tjeneste.hentOppgave(params.oppgaveId) + val aktivReservasjon = + reservasjonV3Tjeneste.hentAktivReservasjonForReservasjonsnøkkel(oppgave.reservasjonsnøkkel) + if (aktivReservasjon == null) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + } + + val nyReservasjon = try { + reservasjonV3Tjeneste.overførReservasjon( + reservasjonsnøkkel = oppgave.reservasjonsnøkkel, + reserverTil = aktivReservasjon!!.gyldigTil.plusHours(24).forskyvReservasjonsDato(), + tilSaksbehandlerId = tilSaksbehandler.id!!, + utførtAvBrukerId = innloggetBruker.id!!, + kommentar = params.begrunnelse, ) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + null //TODO: Vil denne funksjonen faktisk terminere her? + } + + val åpneOppgaverForReservasjonsnøkkel = + oppgaveV3Tjeneste.hentÅpneOppgaverForReservasjonsnøkkel(oppgave.reservasjonsnøkkel) + + call.respond( + ReservasjonV3Dto(nyReservasjon!!, åpneOppgaverForReservasjonsnøkkel, tilSaksbehandler) ) } } @@ -258,8 +361,34 @@ internal fun Route.OppgaveApis() { post { _: endreReservasjon -> requestContextService.withRequestContext(call) { val params = call.receive() + oppgaveTjeneste.endreReservasjonPåOppgave(params) + + + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + val tilSaksbehandler = params.brukerIdent?.let { saksbehandlerRepository.finnSaksbehandlerMedIdent(it) } + + val oppgave = oppgaveV3Tjeneste.hentOppgave(params.oppgaveId) //TODO oppgaveId er behandlingsUUID? + val nyReservasjon = try { + reservasjonV3Tjeneste.endreReservasjon( + reservasjonsnøkkel = oppgave.reservasjonsnøkkel, + endretAvBrukerId = innloggetBruker.id!!, + nyTildato = params.reserverTil?.let { LocalDateTime.of(params.reserverTil, LocalTime.MAX) }, + nySaksbehandlerId = tilSaksbehandler?.id, + kommentar = params.begrunnelse + ) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + null //TODO: Vil denne funksjonen faktisk terminere her? + } + + val åpneOppgaverForReservasjonsnøkkel = + oppgaveV3Tjeneste.hentÅpneOppgaverForReservasjonsnøkkel(oppgave.reservasjonsnøkkel) + val reservertAv = saksbehandlerRepository.finnSaksbehandlerMedId(nyReservasjon!!.reservertAv) + call.respond( - oppgaveTjeneste.endreReservasjonPåOppgave(params) + ReservasjonV3Dto(nyReservasjon!!, åpneOppgaverForReservasjonsnøkkel, reservertAv) ) } } @@ -276,7 +405,7 @@ internal fun Route.OppgaveApis() { } } - @Location("/hent-historiske-reservasjoner-på-oppgave") + @Location("/hent-historiske-reservasjoner-på-oppgave") //TODO: Ikke i bruk? class hentHistoriskeReservasjonerPåOppgave post { _: hentHistoriskeReservasjonerPåOppgave -> @@ -303,7 +432,7 @@ internal fun Route.OppgaveApis() { } } - @Location("/oppgaver-for-fagsaker") + @Location("/oppgaver-for-fagsaker") //TODO: Ikke i bruk? class oppgaverForFagsaker get { _: oppgaverForFagsaker -> diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveDto.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveDto.kt index 58c617c93..f412cc428 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveDto.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveDto.kt @@ -9,25 +9,25 @@ import java.util.* class OppgaveDto( val status: OppgaveStatusDto, - val behandlingId: Long?, - val journalpostId: String?, - val saksnummer: String?, - val navn: String, - val system: String, - val personnummer: String, - val behandlingstype: BehandlingType, - val fagsakYtelseType: FagsakYtelseType, - val behandlingStatus: BehandlingStatus, - val erTilSaksbehandling: Boolean, - val opprettetTidspunkt: LocalDateTime, - val behandlingsfrist: LocalDateTime, - val eksternId: UUID, + val behandlingId: Long?, // bekreftet i bruk + val journalpostId: String?, // bekreftet i bruk + val saksnummer: String?, // bekreftet i bruk + val navn: String, // bekreftet i bruk + val system: String, // bekreftet i bruk + val personnummer: String, // bekreftet i bruk + val behandlingstype: BehandlingType, // bekreftet i bruk + val fagsakYtelseType: FagsakYtelseType, // bekreftet i bruk + val behandlingStatus: BehandlingStatus, // bekreftet i bruk + val erTilSaksbehandling: Boolean, // bekreftet i bruk + val opprettetTidspunkt: LocalDateTime, // bekreftet i bruk + val behandlingsfrist: LocalDateTime, // bekreftet i bruk + val eksternId: UUID, // bekreftet i bruk val tilBeslutter: Boolean, val utbetalingTilBruker: Boolean, val avklarArbeidsforhold: Boolean, val selvstendigFrilans: Boolean, val søktGradering: Boolean, - val fagsakPeriode: Oppgave.FagsakPeriode? = null, - val paaVent: Boolean? = null, - val merknad: MerknadDto? = null + val fagsakPeriode: Oppgave.FagsakPeriode? = null, // bekreftet i bruk + val paaVent: Boolean? = null, // bekreftet i bruk + val merknad: MerknadDto? = null // bekreftet i bruk ) diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt index 13b2e8e00..0f7c1cf23 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt @@ -18,6 +18,7 @@ import no.nav.k9.los.integrasjon.omsorgspenger.IOmsorgspengerService import no.nav.k9.los.integrasjon.omsorgspenger.OmsorgspengerSakFnrDto import no.nav.k9.los.integrasjon.pdl.* import no.nav.k9.los.integrasjon.rest.idToken +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering.ReservasjonOversetter import no.nav.k9.los.tjenester.avdelingsleder.nokkeltall.AlleOppgaverHistorikk import no.nav.k9.los.tjenester.fagsak.PersonDto import no.nav.k9.los.tjenester.mock.AksjonspunkterMock @@ -46,8 +47,8 @@ class OppgaveTjeneste constructor( private val azureGraphService: IAzureGraphService, private val pepClient: IPepClient, private val statistikkRepository: StatistikkRepository, - private val omsorgspengerService: IOmsorgspengerService - + private val omsorgspengerService: IOmsorgspengerService, + private val reservasjonOversetter: ReservasjonOversetter, ) { suspend fun hentOppgaver(oppgavekøId: UUID): List { @@ -1044,9 +1045,10 @@ class OppgaveTjeneste constructor( */ suspend fun fåOppgaveFraKø( oppgaveKøId: String, - ident: String, + brukerident: String, oppgaverSomErBlokert: MutableList = emptyArray().toMutableList(), - prioriterOppgaverForSaksbehandler: List? = null + prioriterOppgaverForSaksbehandler: List? = null, + saksbehandlerEpost: String, ): OppgaveDto? { /* V3-versjon av denne logikken: @@ -1063,7 +1065,7 @@ class OppgaveTjeneste constructor( } val prioriterteOppgaver = prioriterOppgaverForSaksbehandler ?: finnPrioriterteOppgaver( - ident, + brukerident, oppgaveKøId ) @@ -1080,7 +1082,7 @@ class OppgaveTjeneste constructor( // skal ikke få oppgave saksbehandler ikke har lestilgang til settSkjermet(oppgavePar.second!!) oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } } else { oppgaveDto = oppgavePar.first!! @@ -1090,15 +1092,15 @@ class OppgaveTjeneste constructor( val oppgaveSomSkalBliReservert = oppgaveRepository.hent(oppgaveUuid) // beslutter skal ikke få opp oppgave med 5016 eller 5005 de selv har saksbehandlet - if (innloggetSaksbehandlerHarSaksbehandletOppgaveSomSkalBliBesluttet(oppgaveSomSkalBliReservert, ident)) { + if (innloggetSaksbehandlerHarSaksbehandletOppgaveSomSkalBliBesluttet(oppgaveSomSkalBliReservert, brukerident)) { oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } // beslutter skal ikke få oppgaver de selv har besluttet - if (innloggetSaksbehandlerHarBesluttetOppgaven(oppgaveSomSkalBliReservert, ident)) { + if (innloggetSaksbehandlerHarBesluttetOppgaven(oppgaveSomSkalBliReservert, brukerident)) { oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } val oppgaverSomSkalBliReservert = mutableListOf() @@ -1118,32 +1120,41 @@ class OppgaveTjeneste constructor( val iderPåOppgaverSomSkalBliReservert = oppgaverSomSkalBliReservert.map { o -> o.id }.toSet() val gamleReservasjoner = reservasjonRepository.hent(iderPåOppgaverSomSkalBliReservert) val aktiveReservasjoner = - gamleReservasjoner.filter { rev -> rev.erAktiv() && rev.reservertAv != ident }.toList() + gamleReservasjoner.filter { rev -> rev.erAktiv() && rev.reservertAv != brukerident }.toList() // skal ikke få oppgaver som tilhører en parsak der en av sakene er resvert på en annen saksbehandler if (aktiveReservasjoner.isNotEmpty()) { oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } // sjekker også om parsakene har blitt besluttet av beslutter if (oppgaverSomSkalBliReservert.map { it.oppgave } - .any { innloggetSaksbehandlerHarBesluttetOppgaven(it, ident) }) { + .any { innloggetSaksbehandlerHarBesluttetOppgaven(it, brukerident) }) { oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } // sjekker også om parsakene har blitt saksbehandlet av saksbehandler if (oppgaverSomSkalBliReservert.map { it.oppgave } - .any { innloggetSaksbehandlerHarSaksbehandletOppgaveSomSkalBliBesluttet(it, ident) }) { + .any { innloggetSaksbehandlerHarSaksbehandletOppgaveSomSkalBliBesluttet(it, brukerident) }) { oppgaverSomErBlokert.add(oppgaveDto) - return fåOppgaveFraKø(oppgaveKøId, ident, oppgaverSomErBlokert, prioriterteOppgaver) + return fåOppgaveFraKø(oppgaveKøId, brukerident, oppgaverSomErBlokert, prioriterteOppgaver, saksbehandlerEpost) } - val reservasjoner = lagReservasjoner(iderPåOppgaverSomSkalBliReservert, ident, null) + val reservasjoner = lagReservasjoner(iderPåOppgaverSomSkalBliReservert, brukerident, null) + + //ReservasjonV3 TODO: sanity check - har noen andre reservert i ny modell? Hva skal skje da? + reservasjonOversetter.taNyReservasjonFraGammelKontekst( + oppgaveV1 = oppgaveSomSkalBliReservert, + reservertAvEpost = saksbehandlerEpost, + reservertTil = LocalDateTime.now().plusHours(24).forskyvReservasjonsDato(), + utførtAvIdent = brukerident, + kommentar = "" + ) reservasjonRepository.lagreFlereReservasjoner(reservasjoner) - saksbehandlerRepository.leggTilFlereReservasjoner(ident, reservasjoner.map { r -> r.oppgave }) + saksbehandlerRepository.leggTilFlereReservasjoner(brukerident, reservasjoner.map { r -> r.oppgave }) for (oppgavekø in oppgaveKøRepository.hentKøIdIkkeTaHensyn()) { oppgaveKøRepository.leggTilOppgaverTilKø( diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OpphevReservasjonId.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OpphevReservasjonId.kt index 12ca38645..36e2427bc 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OpphevReservasjonId.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OpphevReservasjonId.kt @@ -2,4 +2,5 @@ package no.nav.k9.los.tjenester.saksbehandler.oppgave data class OpphevReservasjonId( val oppgaveId: String, - val begrunnelse: String) \ No newline at end of file + val begrunnelse: String, + ) \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3Dto.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3Dto.kt index 6447339c5..72ee5a15d 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3Dto.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3Dto.kt @@ -2,18 +2,23 @@ package no.nav.k9.los.tjenester.saksbehandler.oppgave import no.nav.k9.los.domene.modell.Saksbehandler import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 +import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.Oppgave import java.time.LocalDateTime data class ReservasjonV3Dto ( //TODO: WIP avklare med Vebjørn hvor mange felter som trengs jfr OppgaveDto som returneres fra gammel fa-oppgave-fra-ko + val reserverteOppgaverEksternId: List, val reservasjonsnøkkel: String, val reservertAv: String, + val kommentar: String, val reservertFra: LocalDateTime, val reservertTil: LocalDateTime?, ) { - constructor(reservasjonV3: ReservasjonV3, reservertAv: Saksbehandler) : this ( + constructor(reservasjonV3: ReservasjonV3, oppgaver: List, reservertAv: Saksbehandler) : this ( + reserverteOppgaverEksternId = oppgaver.map { it.eksternId }, reservasjonsnøkkel = reservasjonV3.reservasjonsnøkkel, reservertAv = reservertAv.epost, + kommentar = reservasjonV3.kommentar, reservertFra = reservasjonV3.gyldigFra, reservertTil = reservasjonV3.gyldigTil ) -} +} \ No newline at end of file diff --git "a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3FraK\303\270Dto.kt" "b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3FraK\303\270Dto.kt" new file mode 100644 index 000000000..8da9122e6 --- /dev/null +++ "b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/ReservasjonV3FraK\303\270Dto.kt" @@ -0,0 +1,22 @@ +package no.nav.k9.los.tjenester.saksbehandler.oppgave + +import no.nav.k9.los.domene.modell.Saksbehandler +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 +import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.Oppgave +import java.time.LocalDateTime + +data class ReservasjonV3FraKøDto ( //TODO: WIP avklare med Vebjørn hvor mange felter som trengs jfr OppgaveDto som returneres fra gammel fa-oppgave-fra-ko + val reservertOppgaveEksternId: String, + val reservasjonsnøkkel: String, + val reservertAv: String, + val reservertFra: LocalDateTime, + val reservertTil: LocalDateTime?, +) { + constructor(reservasjonV3: ReservasjonV3, oppgave: Oppgave, reservertAv: Saksbehandler) : this ( + reservertOppgaveEksternId = oppgave.eksternId, + reservasjonsnøkkel = reservasjonV3.reservasjonsnøkkel, + reservertAv = reservertAv.epost, + reservertFra = reservasjonV3.gyldigFra, + reservertTil = reservasjonV3.gyldigTil + ) +} diff --git a/src/main/resources/migreringer/V1.0_0042__oppgavev3_reservasjonstjeneste.sql b/src/main/resources/migreringer/V1.0_0043__oppgavev3_reservasjonstjeneste.sql similarity index 100% rename from src/main/resources/migreringer/V1.0_0042__oppgavev3_reservasjonstjeneste.sql rename to src/main/resources/migreringer/V1.0_0043__oppgavev3_reservasjonstjeneste.sql diff --git a/src/test/kotlin/no/nav/k9/los/KoinModules.kt b/src/test/kotlin/no/nav/k9/los/KoinModules.kt index cbe24e680..c1a0d8102 100644 --- a/src/test/kotlin/no/nav/k9/los/KoinModules.kt +++ b/src/test/kotlin/no/nav/k9/los/KoinModules.kt @@ -17,8 +17,10 @@ import no.nav.k9.los.domene.lager.oppgave.v2.OppgaveRepositoryV2 import no.nav.k9.los.domene.lager.oppgave.v2.OppgaveTjenesteV2 import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager import no.nav.k9.los.domene.repository.* +import no.nav.k9.los.eventhandler.sjekkReserverteJobb import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.abac.PepClientLocal +import no.nav.k9.los.integrasjon.audit.Auditlogger import no.nav.k9.los.integrasjon.azuregraph.AzureGraphServiceLocal import no.nav.k9.los.integrasjon.azuregraph.IAzureGraphService import no.nav.k9.los.integrasjon.datavarehus.StatistikkProducer @@ -29,15 +31,15 @@ import no.nav.k9.los.integrasjon.omsorgspenger.OmsorgspengerServiceLocal import no.nav.k9.los.integrasjon.pdl.IPdlService import no.nav.k9.los.integrasjon.pdl.PdlServiceLocal import no.nav.k9.los.integrasjon.sakogbehandling.SakOgBehandlingProducer -import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.OmrådeSetup import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.klagetillos.K9KlageTilLosAdapterTjeneste +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering.ReservasjonOversetter import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerInterfaceKludge import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerKlientLocal import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakTilLosAdapterTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.statistikk.* import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.statistikk.StatistikkRepository -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.EventTilDtoMapper +import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonRepository import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonTjeneste import no.nav.k9.los.nyoppgavestyring.mottak.omraade.OmrådeRepository @@ -45,10 +47,11 @@ import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Repository import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Tjeneste import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeRepository import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeTjeneste -import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Repository -import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste import no.nav.k9.los.nyoppgavestyring.query.OppgaveQueryService import no.nav.k9.los.nyoppgavestyring.query.db.OppgaveQueryRepository +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Repository +import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.OppgaveRepository import no.nav.k9.los.tjenester.avdelingsleder.AvdelingslederTjeneste import no.nav.k9.los.tjenester.avdelingsleder.nokkeltall.NokkeltallTjeneste @@ -60,6 +63,7 @@ import no.nav.k9.los.tjenester.sse.SseEvent import org.koin.core.module.Module import org.koin.core.qualifier.named import org.koin.dsl.module +import java.time.LocalDateTime import java.util.* import javax.sql.DataSource @@ -132,6 +136,9 @@ fun buildAndTestConfig(dataSource: DataSource, pepClient: IPepClient = PepClient config } every { config.koinProfile() } returns KoinProfile.LOCAL + every { config.auditEnabled() } returns false + every { config.auditVendor() } returns "k9" + every { config.auditProduct() } returns "k9-los-api" single { PdlServiceLocal() as IPdlService @@ -140,6 +147,18 @@ fun buildAndTestConfig(dataSource: DataSource, pepClient: IPepClient = PepClient AzureGraphServiceLocal( ) as IAzureGraphService } + + val reservasjonOversetterMock = mockk() + every { + reservasjonOversetterMock.taNyReservasjonFraGammelKontekst(any(), any(), any(), any(), any()) + } returns ReservasjonV3( + reservertAv = 123, + reservasjonsnøkkel = "test1", + gyldigFra = LocalDateTime.now(), + gyldigTil = LocalDateTime.now().plusDays(1).plusMinutes(1), + kommentar = "" + ) + single { OppgaveTjeneste( oppgaveRepository = get(), @@ -152,7 +171,19 @@ fun buildAndTestConfig(dataSource: DataSource, pepClient: IPepClient = PepClient azureGraphService = get(), pepClient = get(), statistikkRepository = get(), - omsorgspengerService = get() + omsorgspengerService = get(), + reservasjonOversetter = reservasjonOversetterMock + ) + } + + + single { + ReservasjonOversetter( + transactionalManager = get(), + oppgaveV3Repository = get(), + oppgavetypeRepository = get(), + saksbehandlerRepository = get(), + reservasjonV3Tjeneste = get(), ) } @@ -356,12 +387,10 @@ fun buildAndTestConfig(dataSource: DataSource, pepClient: IPepClient = PepClient ReservasjonV3Tjeneste( transactionalManager = get(), reservasjonV3Repository = get(), - oppgaveKoRepository = get(), - oppgaveQueryService = get(), oppgaveRepository = get(), pepClient = get(), saksbehandlerRepository = get(), - auditlogger = get() + auditlogger = Auditlogger(config) ) } diff --git a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3RepositoryTest.kt b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3RepositoryTest.kt index 9d0f9c4bb..7ee73052d 100644 --- a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3RepositoryTest.kt +++ b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3RepositoryTest.kt @@ -5,6 +5,7 @@ import no.nav.k9.los.AbstractK9LosIntegrationTest import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager import no.nav.k9.los.domene.modell.Saksbehandler import no.nav.k9.los.domene.repository.SaksbehandlerRepository +import no.nav.k9.los.nyoppgavestyring.reservasjon.AlleredeReservertException import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3 import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Repository import org.junit.jupiter.api.Assertions.assertEquals @@ -41,6 +42,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), + kommentar = "" ) transactionalManager.transaction { tx -> @@ -98,6 +100,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now().minusDays(5), gyldigTil = LocalDateTime.now().minusDays(1), + kommentar = "" ) val reservasjon2 = ReservasjonV3( @@ -105,6 +108,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now().plusMinutes(1), gyldigTil = LocalDateTime.now().plusDays(1).plusMinutes(1), + kommentar = "" ) transactionalManager.transaction { tx -> @@ -142,6 +146,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now().minusDays(5), gyldigTil = LocalDateTime.now().minusDays(1), + kommentar = "" ) val reservasjon2 = ReservasjonV3( @@ -149,6 +154,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1).plusMinutes(1), + kommentar = "" ) transactionalManager.transaction { tx -> @@ -210,6 +216,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), + kommentar = "" ) val reservasjon2 = ReservasjonV3( @@ -217,6 +224,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now().plusMinutes(1), gyldigTil = LocalDateTime.now().plusDays(1).plusMinutes(1), + kommentar = "" ) transactionalManager.transaction { tx -> @@ -224,7 +232,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { } val exception = - assertThrows { + assertThrows { transactionalManager.transaction { tx -> repo.lagreReservasjon(reservasjon2, tx) } @@ -273,6 +281,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), + kommentar = "" ) val reservasjon2 = ReservasjonV3( @@ -280,6 +289,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { reservasjonsnøkkel = "test1", gyldigFra = LocalDateTime.now().plusMinutes(1), gyldigTil = LocalDateTime.now().plusDays(1).plusMinutes(1), + kommentar = "" ) val saksbehandlerInnlogget = runBlocking { @@ -298,7 +308,7 @@ class ReservasjonV3RepositoryTest : AbstractK9LosIntegrationTest() { transactionalManager.transaction { tx -> val reservasjon = repo.lagreReservasjon(reservasjon1, tx) - repo.annullerAktivReservasjonOgLagreEndring(reservasjon, saksbehandlerInnlogget.id!!, tx) + repo.annullerAktivReservasjonOgLagreEndring(reservasjon, "", saksbehandlerInnlogget.id!!, tx) } transactionalManager.transaction { tx -> diff --git a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3TjenesteTest.kt b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3TjenesteTest.kt index 05de68417..8b3ebb32f 100644 --- a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3TjenesteTest.kt +++ b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/reservasjon/ReservasjonV3TjenesteTest.kt @@ -59,9 +59,10 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { val reservasjonV3Tjeneste = get() val reservasjon = runBlocking { - reservasjonV3Tjeneste.taReservasjon( + reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv( reservasjonsnøkkel = "test1", reserverForId = saksbehandler1.id!!, + kommentar = "", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), utføresAvId = saksbehandlerInnlogget.id!! @@ -86,16 +87,17 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { val reservasjonV3Tjeneste = get() val reservasjon = runBlocking { - reservasjonV3Tjeneste.taReservasjon( + reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv( reservasjonsnøkkel = "test1", reserverForId = saksbehandler1.id!!, + kommentar = "", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), utføresAvId = saksbehandlerInnlogget.id!! ) } - reservasjonV3Tjeneste.annullerReservasjon(reservasjonsnøkkel = "test1", annullertAvBrukerId = saksbehandlerInnlogget.id!!) + reservasjonV3Tjeneste.annullerReservasjon(reservasjonsnøkkel = "test1", "", annullertAvBrukerId = saksbehandlerInnlogget.id!!) val aktiveReservasjoner = reservasjonV3Tjeneste.hentReservasjonerForSaksbehandler(saksbehandler1.id!!) @@ -128,6 +130,7 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { val reservasjon = ReservasjonV3( reservertAv = saksbehandler1.id!!, reservasjonsnøkkel = "test1", + kommentar = "", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), ) @@ -142,7 +145,8 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { "test1", overførTildato, saksbehandler2.id!!, - saksbehandler2.id!! + saksbehandler2.id!!, + "" ) transactionalManager.transaction { tx -> @@ -169,6 +173,7 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { var reservasjon = ReservasjonV3( reservertAv = saksbehandler1.id!!, reservasjonsnøkkel = "test1", + kommentar = "", gyldigFra = LocalDateTime.now(), gyldigTil = LocalDateTime.now().plusDays(1), ) @@ -184,7 +189,8 @@ class ReservasjonV3TjenesteTest : AbstractK9LosIntegrationTest() { reservasjon.reservasjonsnøkkel, overførTildato, 5L, - saksbehandler1.id!! + saksbehandler1.id!!, + "" ) } diff --git a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt index e45178584..bdef7f4cd 100644 --- a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt +++ b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt @@ -32,6 +32,7 @@ import no.nav.k9.los.integrasjon.omsorgspenger.OmsorgspengerService import no.nav.k9.los.integrasjon.pdl.PdlService import no.nav.k9.los.integrasjon.pdl.PersonPdl import no.nav.k9.los.integrasjon.pdl.PersonPdlResponse +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering.ReservasjonOversetter import no.nav.k9.los.tjenester.sse.SseEvent import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.RegisterExtension @@ -84,6 +85,8 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { refreshKlienter = refreshKlienter, saksbehandlerRepository = saksbehandlerRepository ) + + val reservasjonOversetter = get() val config = mockk() val pdlService = mockk() val statistikkRepository = StatistikkRepository(dataSource = get()) @@ -95,7 +98,7 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { oppgaveKøRepository, saksbehandlerRepository, pdlService, - reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService + reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService, reservasjonOversetter ) val uuid = UUID.randomUUID() @@ -226,13 +229,14 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { refreshKlienter = refreshKlienter, saksbehandlerRepository = saksbehandlerRepository ) + val reservasjonOversetter = get() val oppgaveTjeneste = OppgaveTjeneste( oppgaveRepository, oppgaveRepositoryV2, oppgaveKøRepository, saksbehandlerRepository, pdlService, - reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService + reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService, reservasjonOversetter ) val oppgave1 = Oppgave( @@ -318,6 +322,7 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { refreshKlienter = refreshKlienter, saksbehandlerRepository = saksbehandlerRepository ) + val reservasjonOversetter = get() val config = mockk() val pdlService = mockk() val omsorgspengerService = mockk() @@ -332,7 +337,7 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { oppgaveKøRepository, saksbehandlerRepository, pdlService, - reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService + reservasjonRepository, config, azureGraphService, pepClient, statistikkRepository, omsorgspengerService, reservasjonOversetter ) diff --git a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteTest.kt b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteTest.kt index 2a7e96ffb..ec2ddbbec 100644 --- a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteTest.kt +++ b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteTest.kt @@ -12,6 +12,7 @@ import no.nav.k9.los.domene.repository.OppgaveRepository import no.nav.k9.los.domene.repository.ReservasjonRepository import no.nav.k9.los.domene.repository.SaksbehandlerRepository import no.nav.k9.los.tjenester.avdelingsleder.oppgaveko.AndreKriterierDto +import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test import org.koin.test.get import java.time.LocalDate @@ -240,7 +241,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) // assert @@ -329,7 +331,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk1 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -392,7 +395,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { val oppgaveFraKø = oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent2, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) assertNull(oppgaveFraKø) @@ -766,7 +770,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk1 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -860,7 +865,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk2 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -952,7 +958,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk1 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -1047,7 +1054,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk2 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -1186,7 +1194,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk1 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId) @@ -1326,7 +1335,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), ident, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) @@ -1503,7 +1513,8 @@ class OppgaveTjenesteTest : AbstractK9LosIntegrationTest() { oppgaveTjeneste.fåOppgaveFraKø( oppgaveKøId.toString(), brukerIdent, - emptyArray().toMutableList() + emptyArray().toMutableList(), + saksbehandlerEpost = "test@test.no" ) val reservasjonsHistorikk1 = oppgaveTjeneste.hentReservasjonsHistorikk(oppgave1.eksternId)