From 4fdef4cb0988e5b0b836a8aa4e1efcac4ee07d06 Mon Sep 17 00:00:00 2001 From: Espen Schei Date: Wed, 8 May 2024 08:32:19 +0200 Subject: [PATCH] Kopier aktiviteter ved revurdering (#4716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Når en behandling revurderes, skal aktiviteter lagt til på forrige behandling kopieres med til den nye. EY-3902 --- .../src/main/kotlin/Application.kt | 2 +- .../aktivitetsplikt/AktivitetspliktDao.kt | 19 ++++++++++++ .../aktivitetsplikt/AktivitetspliktService.kt | 9 ++++++ .../revurdering/RevurderingService.kt | 7 +++-- .../main/kotlin/config/ApplicationContext.kt | 3 +- .../behandling/BehandlingFactoryTest.kt | 4 +++ .../aktivitetsplikt/AktivitetspliktDaoTest.kt | 31 +++++++++++++++++++ .../RevurderingServiceIntegrationTest.kt | 6 ++++ 8 files changed, 77 insertions(+), 4 deletions(-) diff --git a/apps/etterlatte-behandling/src/main/kotlin/Application.kt b/apps/etterlatte-behandling/src/main/kotlin/Application.kt index 0ae6b8e6e5e..2ab808e82c6 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/Application.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/Application.kt @@ -163,7 +163,7 @@ private fun Route.settOppRoutes(applicationContext: ApplicationContext) { kommerBarnetTilGodeService = applicationContext.kommerBarnetTilGodeService, behandlingFactory = applicationContext.behandlingFactory, ) - aktivitetspliktRoutes(aktivitetspliktService = applicationContext.aktivtetspliktService) + aktivitetspliktRoutes(aktivitetspliktService = applicationContext.aktivitetspliktService) sjekklisteRoute(sjekklisteService = applicationContext.sjekklisteService) statistikkRoutes(behandlingService = applicationContext.behandlingService) generellbehandlingRoutes( diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktDao.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktDao.kt index 038ef5cb5dd..b36dbe9b893 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktDao.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktDao.kt @@ -157,6 +157,25 @@ class AktivitetspliktDao(private val connectionAutoclosing: ConnectionAutoclosin } } + fun kopierAktiviteter( + forrigeBehandlingId: UUID, + nyBehandlingId: UUID, + ) = connectionAutoclosing.hentConnection { + with(it) { + val stmt = + prepareStatement( + """ + INSERT INTO aktivitetsplikt_aktivitet (id, sak_id, behandling_id, aktivitet_type, fom, tom, opprettet, endret, beskrivelse) + (SELECT gen_random_uuid(), sak_id, ?, aktivitet_type, fom, tom, opprettet, endret, beskrivelse FROM aktivitetsplikt_aktivitet WHERE behandling_id = ?) + """.trimMargin(), + ) + stmt.setObject(1, nyBehandlingId) + stmt.setObject(2, forrigeBehandlingId) + + stmt.executeUpdate() + } + } + private fun ResultSet.toAktivitet() = AktivitetspliktAktivitet( id = getUUID("id"), diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktService.kt index fe2270f9199..52daaad0ff6 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktService.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/aktivitetsplikt/AktivitetspliktService.kt @@ -83,6 +83,15 @@ class AktivitetspliktService( aktivitetspliktDao.slettAktivitet(aktivitetId, behandlingId) } } + + fun kopierAktiviteter( + fraBehandlingId: UUID, + tilBehandlingId: UUID, + ) { + requireNotNull(behandlingService.hentBehandling(tilBehandlingId)) { "Fant ikke behandling $tilBehandlingId" } + + aktivitetspliktDao.kopierAktiviteter(fraBehandlingId, tilBehandlingId) + } } class SakidTilhoererIkkeBehandlingException : diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/revurdering/RevurderingService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/revurdering/RevurderingService.kt index 8ebae06d47f..a9c70bd0c5d 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/revurdering/RevurderingService.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/revurdering/RevurderingService.kt @@ -6,6 +6,7 @@ import no.nav.etterlatte.behandling.BehandlingDao import no.nav.etterlatte.behandling.BehandlingHendelserKafkaProducer import no.nav.etterlatte.behandling.BehandlingService import no.nav.etterlatte.behandling.GrunnlagService +import no.nav.etterlatte.behandling.aktivitetsplikt.AktivitetspliktService import no.nav.etterlatte.behandling.domain.Behandling import no.nav.etterlatte.behandling.domain.Foerstegangsbehandling import no.nav.etterlatte.behandling.domain.OpprettBehandling @@ -89,6 +90,7 @@ class RevurderingService( private val revurderingDao: RevurderingDao, private val klageService: KlageService, private val behandlingService: BehandlingService, + private val aktivitetspliktService: AktivitetspliktService, ) { private val logger = LoggerFactory.getLogger(RevurderingService::class.java) @@ -312,10 +314,11 @@ class RevurderingService( lagreRevurderingsaarsakFritekst(fritekstAarsak, opprettBehandling.id, saksbehandlerIdent) } - forrigeBehandling?.let { - kommerBarnetTilGodeService.hentKommerBarnetTilGode(it) + forrigeBehandling?.let { behandlingId -> + kommerBarnetTilGodeService.hentKommerBarnetTilGode(behandlingId) ?.copy(behandlingId = opprettBehandling.id) ?.let { kopiert -> kommerBarnetTilGodeService.lagreKommerBarnetTilgode(kopiert) } + aktivitetspliktService.kopierAktiviteter(behandlingId, opprettBehandling.id) } hendelseDao.behandlingOpprettet(opprettBehandling.toBehandlingOpprettet()) diff --git a/apps/etterlatte-behandling/src/main/kotlin/config/ApplicationContext.kt b/apps/etterlatte-behandling/src/main/kotlin/config/ApplicationContext.kt index cd847510b84..fa4c451de4d 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/config/ApplicationContext.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/config/ApplicationContext.kt @@ -335,7 +335,7 @@ internal class ApplicationContext( ) val kommerBarnetTilGodeService = KommerBarnetTilGodeService(kommerBarnetTilGodeDao, behandlingDao) - val aktivtetspliktService = AktivitetspliktService(aktivitetspliktDao, behandlingService) + val aktivitetspliktService = AktivitetspliktService(aktivitetspliktDao, behandlingService) val sjekklisteService = SjekklisteService(sjekklisteDao, behandlingService, oppgaveService) val klageBrevService = KlageBrevService(brevApiKlient) @@ -364,6 +364,7 @@ internal class ApplicationContext( revurderingDao = revurderingDao, klageService = klageService, behandlingService = behandlingService, + aktivitetspliktService = aktivitetspliktService, ) val automatiskRevurderingService = AutomatiskRevurderingService(revurderingService) diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/BehandlingFactoryTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/BehandlingFactoryTest.kt index 34f8a78fb02..3967ecd339c 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/BehandlingFactoryTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/BehandlingFactoryTest.kt @@ -12,6 +12,7 @@ import io.mockk.slot import io.mockk.verify import kotlinx.coroutines.runBlocking import no.nav.etterlatte.SaksbehandlerMedEnheterOgRoller +import no.nav.etterlatte.behandling.aktivitetsplikt.AktivitetspliktService import no.nav.etterlatte.behandling.domain.Foerstegangsbehandling import no.nav.etterlatte.behandling.domain.OpprettBehandling import no.nav.etterlatte.behandling.domain.Revurdering @@ -69,6 +70,7 @@ class BehandlingFactoryTest { private val behandlingService = mockk() private val sakServiceMock = mockk() private val klageService = mockk() + private val aktivitetspliktService = mockk() private val gyldighetsproevingService = mockk(relaxUnitFun = true) private val pdlTjenesterKlientMock = mockk() private val mockOppgave = @@ -97,6 +99,7 @@ class BehandlingFactoryTest { revurderingDao, klageService, behandlingService, + aktivitetspliktService, ), ) private val behandlingFactory = @@ -528,6 +531,7 @@ class BehandlingFactoryTest { every { behandlingDaoMock.alleBehandlingerISak(any()) } returns listOf(iverksattBehandling) + every { aktivitetspliktService.kopierAktiviteter(any(), any()) } returns Unit every { behandlingDaoMock.hentBehandling(any()) } returns revurdering( diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/aktivitetsplikt/AktivitetspliktDaoTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/aktivitetsplikt/AktivitetspliktDaoTest.kt index 675a6cc0823..bbcf2867157 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/aktivitetsplikt/AktivitetspliktDaoTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/aktivitetsplikt/AktivitetspliktDaoTest.kt @@ -144,6 +144,37 @@ class AktivitetspliktDaoTest(ds: DataSource) { } } + @Nested + inner class KopierAktiviteter { + @Test + fun `skal kopiere aktiviteter fra tidligere behandling`() { + val forrigeBehandling = UUID.randomUUID() + val nyBehandling = UUID.randomUUID() + val nyAktivitet = opprettAktivitet(sakDao.opprettSak("Person1", SakType.OMSTILLINGSSTOENAD, "0000")) + dao.opprettAktivitet(forrigeBehandling, nyAktivitet, kilde) + dao.opprettAktivitet(forrigeBehandling, nyAktivitet, kilde) + dao.opprettAktivitet(forrigeBehandling, nyAktivitet, kilde) + dao.hentAktiviteter(forrigeBehandling) shouldHaveSize 3 + dao.hentAktiviteter(nyBehandling) shouldHaveSize 0 + + dao.kopierAktiviteter(forrigeBehandling, nyBehandling) shouldBe 3 + + dao.hentAktiviteter(nyBehandling).asClue { + it shouldHaveSize 3 + it.forEach { aktivitet -> + aktivitet.sakId shouldBe nyAktivitet.sakId + aktivitet.behandlingId shouldBe nyBehandling + aktivitet.type shouldBe nyAktivitet.type + aktivitet.fom shouldBe nyAktivitet.fom + aktivitet.tom shouldBe nyAktivitet.tom + aktivitet.opprettet shouldBe kilde + aktivitet.endret shouldBe kilde + aktivitet.beskrivelse shouldBe nyAktivitet.beskrivelse + } + } + } + } + companion object { fun opprettAktivitet(sak: Sak) = LagreAktivitetspliktAktivitet( diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/revurdering/RevurderingServiceIntegrationTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/revurdering/RevurderingServiceIntegrationTest.kt index 997fd37cbbb..bc8c760e035 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/revurdering/RevurderingServiceIntegrationTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/revurdering/RevurderingServiceIntegrationTest.kt @@ -13,6 +13,7 @@ import no.nav.etterlatte.SaksbehandlerMedEnheterOgRoller import no.nav.etterlatte.behandling.BehandlingFactory import no.nav.etterlatte.behandling.BehandlingsHendelserKafkaProducerImpl import no.nav.etterlatte.behandling.GrunnlagService +import no.nav.etterlatte.behandling.aktivitetsplikt.AktivitetspliktService import no.nav.etterlatte.behandling.domain.Behandling import no.nav.etterlatte.behandling.domain.Foerstegangsbehandling import no.nav.etterlatte.behandling.domain.GrunnlagsendringStatus @@ -124,6 +125,7 @@ class RevurderingServiceIntegrationTest : BehandlingIntegrationTest() { val hendelser = spyk(applicationContext.behandlingsHendelser) val grunnlagService = spyk(applicationContext.grunnlagsService) val oppgaveService = spyk(applicationContext.oppgaveService) + val aktivitetspliktService = spyk(applicationContext.aktivitetspliktService) val (sak, behandling) = opprettSakMedFoerstegangsbehandling(fnr) @@ -139,6 +141,7 @@ class RevurderingServiceIntegrationTest : BehandlingIntegrationTest() { oppgaveService, grunnlagService, hendelser, + aktivitetspliktService, ).opprettManuellRevurderingWrapper( sakId = sak.id, aarsak = Revurderingaarsak.REGULERING, @@ -163,6 +166,7 @@ class RevurderingServiceIntegrationTest : BehandlingIntegrationTest() { oppgaveService.hentOppgaverForSak(sak.id) } } + verify { aktivitetspliktService.kopierAktiviteter(behandling!!.id, revurdering.id) } inTransaction { assertEquals(revurdering, applicationContext.behandlingDao.hentBehandling(revurdering.id)) verify { hendelser.sendMeldingForHendelseMedDetaljertBehandling(any(), BehandlingHendelseType.OPPRETTET) } @@ -977,6 +981,7 @@ class RevurderingServiceIntegrationTest : BehandlingIntegrationTest() { oppgaveService: OppgaveService = applicationContext.oppgaveService, grunnlagService: GrunnlagService = applicationContext.grunnlagsService, behandlingsHendelser: BehandlingsHendelserKafkaProducerImpl = applicationContext.behandlingsHendelser, + aktivitetspliktService: AktivitetspliktService = applicationContext.aktivitetspliktService, ) = RevurderingService( oppgaveService, grunnlagService, @@ -988,6 +993,7 @@ class RevurderingServiceIntegrationTest : BehandlingIntegrationTest() { applicationContext.revurderingDao, applicationContext.klageService, applicationContext.behandlingService, + aktivitetspliktService, ) private fun behandlingFactory() =