From 2cd6deb7bebfc102a95c74d08d387fc1ddc9cd36 Mon Sep 17 00:00:00 2001 From: Jacob Meidell Date: Wed, 18 Dec 2024 13:10:08 +0100 Subject: [PATCH] Propagate begrunnelse to affected statuses when using stop-functionality - Add begrunnelse to oppgave, godskriv and brev when stopping. --- .../pensjonsopptjening/brev/model/Brev.kt | 19 ++++++------ .../brev/model/BrevService.kt | 8 ++--- .../godskriv/model/GodskrivOpptjening.kt | 25 ++++++++------- .../model/GodskrivOpptjeningService.kt | 4 +-- .../model/GodskrivOpptjeningServiceImpl.kt | 8 ++--- .../oppgave/model/Oppgave.kt | 22 ++++++------- .../oppgave/model/OppgaveService.kt | 7 ++--- .../model/PersongrunnlagMeldingServiceImpl.kt | 21 ++++++++++--- .../pensjonsopptjening/web/AdminWebApi.kt | 4 +-- .../pensjonsopptjening/AdministrasjonsTest.kt | 31 ++++++++++++++----- 10 files changed, 87 insertions(+), 62 deletions(-) diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/Brev.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/Brev.kt index f3ff3c25..392f2bde 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/Brev.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/Brev.kt @@ -46,8 +46,8 @@ sealed class Brev { return copy(statushistorikk = statushistorikk + status.retry(melding)) } - fun stoppet(): Persistent { - return copy(statushistorikk = statushistorikk + status.stoppet()) + fun stoppet(begrunnelse: String?): Persistent { + return copy(statushistorikk = statushistorikk + status.stoppet(begrunnelse)) } fun restart(): Persistent { @@ -71,7 +71,7 @@ sealed class Brev { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Retry") } - open fun stoppet(): Status { + open fun stoppet(begrunnelse: String?): Status { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Stoppet") } @@ -92,8 +92,8 @@ sealed class Brev { return Retry(melding = melding) } - override fun stoppet(): Status { - return Stoppet() + override fun stoppet(begrunnelse: String?): Status { + return Stoppet(begrunnelse = begrunnelse) } override fun restart() : Status { @@ -114,6 +114,7 @@ sealed class Brev { @JsonTypeName("Stoppet") data class Stoppet( val tidspunkt: Instant = Instant.now(), + val begrunnelse: String? = null, ) : Status() { override fun restart() : Status { return Klar() @@ -153,8 +154,8 @@ sealed class Brev { } } - override fun stoppet(): Status { - return Stoppet() + override fun stoppet(begrunnelse: String?): Status { + return Stoppet(begrunnelse = begrunnelse) } override fun restart() : Status { @@ -166,8 +167,8 @@ sealed class Brev { data class Feilet( val tidspunkt: Instant = Instant.now(), ) : Status() { - override fun stoppet(): Status { - return Stoppet() + override fun stoppet(begrunnelse: String?): Status { + return Stoppet(begrunnelse = begrunnelse) } override fun restart() : Status { diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/BrevService.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/BrevService.kt index 3424da3c..40b2941f 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/BrevService.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/brev/model/BrevService.kt @@ -101,14 +101,14 @@ class BrevService( } } - fun stoppForMelding(meldingsId: UUID) { + fun stoppForMelding(meldingsId: UUID, begrunnelse: String?) { brevRepository.findForMelding(meldingsId).forEach { brev -> when (brev.status) { is Brev.Status.Ferdig -> Unit is Brev.Status.Stoppet -> Unit else -> { log.info("Stopper brev: ${brev.id}") - brev.stoppet().let { + brev.stoppet(begrunnelse).let { brevRepository.updateStatus(it) } } @@ -116,14 +116,14 @@ class BrevService( } } - fun stopp(id: UUID): UUID? { + fun stopp(id: UUID, begrunnelse: String?): UUID? { return brevRepository.tryFind(id)?.let { brev -> when (brev.status) { is Brev.Status.Ferdig -> brev.id is Brev.Status.Stoppet -> brev.id else -> { log.info("Stopper brev: ${brev.id}") - brev.stoppet().let { + brev.stoppet(begrunnelse).let { brevRepository.updateStatus(it) it.id } diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjening.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjening.kt index ce8ebe61..5570cc65 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjening.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjening.kt @@ -44,8 +44,8 @@ sealed class GodskrivOpptjening { return copy(statushistorikk = statushistorikk + status.retry(melding)) } - fun stoppet(): Persistent { - return copy(statushistorikk = statushistorikk + status.stoppet()) + fun stoppet(begrunnelse: String?): Persistent { + return copy(statushistorikk = statushistorikk + status.stoppet(begrunnelse)) } fun klar(): Persistent { @@ -87,7 +87,7 @@ sealed class GodskrivOpptjening { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Retry") } - open fun stoppet(): Status { + open fun stoppet(begrunnelse: String?): Status { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Stoppet") } @@ -107,8 +107,8 @@ sealed class GodskrivOpptjening { return Retry(melding = melding) } - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } } @@ -116,14 +116,15 @@ sealed class GodskrivOpptjening { data class Ferdig( val tidspunkt: Instant = Instant.now(), ) : Status() { - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } } @JsonTypeName("Stoppet") data class Stoppet( - val tidspunkt: Instant = Instant.now() + val tidspunkt: Instant = Instant.now(), + val begrunnelse: String? = null, ) : Status() { override fun klar(): Status { return Klar() @@ -166,8 +167,8 @@ sealed class GodskrivOpptjening { } } - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } } @@ -175,8 +176,8 @@ sealed class GodskrivOpptjening { data class Feilet( val tidspunkt: Instant = Instant.now(), ) : Status() { - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } override fun klar(): Status { diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningService.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningService.kt index 8cd19a20..01c10c31 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningService.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningService.kt @@ -6,8 +6,8 @@ interface GodskrivOpptjeningService { fun opprett(godskrivOpptjening: GodskrivOpptjening.Transient): GodskrivOpptjening.Persistent fun håndter(godskrivOpptjening: GodskrivOpptjening.Persistent): GodskrivOpptjening.Persistent fun retry(godskrivOpptjening: GodskrivOpptjening.Persistent, ex: Throwable) - fun stoppForMelding(meldingsId: UUID) - fun stopp(id: UUID): UUID? + fun stoppForMelding(meldingsId: UUID, begrunnelse: String?) + fun stopp(id: UUID, begrunnelse: String?): UUID? fun restart(id: UUID): UUID? fun hentOgLås(antall: Int): GodskrivOpptjeningRepo.Locked fun frigiLås(låst: GodskrivOpptjeningRepo.Locked) diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningServiceImpl.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningServiceImpl.kt index be8d15c3..ec13232e 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningServiceImpl.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/godskriv/model/GodskrivOpptjeningServiceImpl.kt @@ -47,18 +47,18 @@ internal class GodskrivOpptjeningServiceImpl( } - override fun stoppForMelding(meldingsId: UUID) { + override fun stoppForMelding(meldingsId: UUID, begrunnelse: String?) { godskrivOpptjeningRepo.findForMelding(meldingsId).forEach { godkjenn -> log.info("Stopper godkjenning: ${godkjenn.id}") - godkjenn.stoppet().let { + godkjenn.stoppet(begrunnelse).let { godskrivOpptjeningRepo.updateStatus(it) } } } - override fun stopp(id: UUID): UUID? { + override fun stopp(id: UUID, begrunnelse: String?): UUID? { log.info("Stopper godkjenning: $id") - return godskrivOpptjeningRepo.tryFind(id)?.stoppet()?.let { + return godskrivOpptjeningRepo.tryFind(id)?.stoppet(begrunnelse)?.let { godskrivOpptjeningRepo.updateStatus(it) id } diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/Oppgave.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/Oppgave.kt index 4f353001..0840d465 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/Oppgave.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/Oppgave.kt @@ -85,8 +85,8 @@ sealed class Oppgave { return copy(statushistorikk = statushistorikk + status.ferdig(oppgaveId)) } - fun stoppet(): Persistent { - return copy(statushistorikk = statushistorikk + status.stoppet()) + fun stoppet(begrunnelse: String?): Persistent { + return copy(statushistorikk = statushistorikk + status.stoppet(begrunnelse)) } fun retry(melding: String): Persistent { @@ -117,7 +117,7 @@ sealed class Oppgave { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Retry") } - open fun stoppet(): Status { + open fun stoppet(begrunnelse: String?): Status { throw IllegalArgumentException("Kan ikke gå fra status:${this::class.java} til Retry") } @@ -142,8 +142,8 @@ sealed class Oppgave { return Retry(melding = melding) } - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } override fun klar(): Status { @@ -161,8 +161,8 @@ sealed class Oppgave { val tidspunkt: Instant = Instant.now(), val oppgaveId: String, ) : Status() { - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } override fun kansellert(begrunnelse: String, kanselleringsResultat: KanselleringsResultat): Status { @@ -215,8 +215,8 @@ sealed class Oppgave { } } - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } override fun klar(): Status { @@ -234,8 +234,8 @@ sealed class Oppgave { data class Feilet( val tidspunkt: Instant = Instant.now(), ) : Status() { - override fun stoppet(): Stoppet { - return Stoppet() + override fun stoppet(begrunnelse: String?): Stoppet { + return Stoppet(begrunnelse = begrunnelse) } override fun klar(): Status { diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/OppgaveService.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/OppgaveService.kt index 09b02768..d6b5a4c3 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/OppgaveService.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/oppgave/model/OppgaveService.kt @@ -23,9 +23,6 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.uti import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.utils.NewTransactionTemplate import org.slf4j.Logger import org.slf4j.LoggerFactory -import org.springframework.stereotype.Component -import org.springframework.transaction.annotation.Propagation -import org.springframework.transaction.annotation.Transactional import java.sql.SQLException import java.util.UUID @@ -138,10 +135,10 @@ class OppgaveService( } } - fun stoppForMelding(meldingsId: UUID) { + fun stoppForMelding(meldingsId: UUID, begrunnelse: String?) { oppgaveRepo.findForMelding(meldingsId).forEach { oppgave -> log.info("Stopper oppgave: ${oppgave.id}") - oppgave.stoppet().let { oppgaveRepo.updateStatus(it) } + oppgave.stoppet(begrunnelse = begrunnelse).let { oppgaveRepo.updateStatus(it) } } } diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/persongrunnlag/model/PersongrunnlagMeldingServiceImpl.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/persongrunnlag/model/PersongrunnlagMeldingServiceImpl.kt index 31b519e0..0e0845da 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/persongrunnlag/model/PersongrunnlagMeldingServiceImpl.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/persongrunnlag/model/PersongrunnlagMeldingServiceImpl.kt @@ -132,13 +132,24 @@ internal class PersongrunnlagMeldingServiceImpl( private fun stoppMeldingIntern(id: UUID, begrunnelse: String?): UUID { log.info("Stopper melding: $id") - persongrunnlagRepo.find(id).stoppet(begrunnelse).let { + persongrunnlagRepo.find(id).stoppet(begrunnelse = begrunnelse).let { persongrunnlagRepo.updateStatus(it) } - oppgaveService.stoppForMelding(meldingsId = id) - brevService.stoppForMelding(meldingsId = id) - behandlingRepo.stoppBehandlingerForMelding(meldingsId = id) - godskrivOpptjeningService.stoppForMelding(meldingsId = id) + oppgaveService.stoppForMelding( + meldingsId = id, + begrunnelse = begrunnelse + ) + brevService.stoppForMelding( + meldingsId = id, + begrunnelse = begrunnelse + ) + behandlingRepo.stoppBehandlingerForMelding( + meldingsId = id + ) + godskrivOpptjeningService.stoppForMelding( + meldingsId = id, + begrunnelse = begrunnelse, + ) return id } diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/web/AdminWebApi.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/web/AdminWebApi.kt index 04877ace..113c3d4d 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/web/AdminWebApi.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/web/AdminWebApi.kt @@ -211,7 +211,7 @@ class AdminWebApi( val responsStrenger = brev.map { id -> try { - val retId = brevService.stopp(id) + val retId = brevService.stopp(id, begrunnelse) if (retId == null) { "$id: Fant ikke brevet" } else { @@ -251,7 +251,7 @@ class AdminWebApi( val responsStrenger = uuider.map { id -> try { - val retId = godskrivOpptjeningService.stopp(id) + val retId = godskrivOpptjeningService.stopp(id, begrunnelse) if (retId == null) { "$id: Fant ikke godskrivingen" } else { diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/AdministrasjonsTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/AdministrasjonsTest.kt index b3578402..62807bfb 100644 --- a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/AdministrasjonsTest.kt +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/bestem/pensjonsopptjening/AdministrasjonsTest.kt @@ -38,6 +38,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.messages. import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.messages.domene.Omsorgstype import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertInstanceOf import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.RegisterExtension @@ -313,7 +314,7 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { @Test fun `kan kopiere og rekjøre melding med oppgave`() { val stoppetmeldingId = lagreOgProsesserMeldingSomGirOppgave().let { - service.stoppMelding(it, null)!! + service.stoppMelding(it, "begrunnelse")!! } val nyMelding = service.rekjørStoppetMelding(stoppetmeldingId)!!.let { @@ -326,7 +327,13 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { val nyOppgave = oppgaveRepo.findForBehandling(behandling.alle().single().id).single() assertThat(stoppetMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java) - assertThat(stoppetOppgave.status).isInstanceOf(Oppgave.Status.Stoppet::class.java) + + assertInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java, stoppetMelding.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } + assertInstanceOf(Oppgave.Status.Stoppet::class.java, stoppetOppgave.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } assertThat(nyMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Klar::class.java) assertThat(nyOppgave.status).isInstanceOf(Oppgave.Status.Klar::class.java) @@ -335,7 +342,7 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { @Test fun `kan kopiere og rekjøre melding med brev`() { val stoppetMeldingId = lagreOgProsesserMeldingSomGirBrev().let { - service.stoppMelding(it, null)!! + service.stoppMelding(it, "begrunnelse")!! } val nyMelding = service.rekjørStoppetMelding(stoppetMeldingId)!!.let { @@ -348,8 +355,12 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { val nyttBrev = brevRepository.findForBehandling(behandling.alle().single().id).single() - assertThat(stoppetMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java) - assertThat(stoppetBrev.status).isInstanceOf(Brev.Status.Stoppet::class.java) + assertInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java, stoppetMelding.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } + assertInstanceOf(Brev.Status.Stoppet::class.java, stoppetBrev.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } assertThat(nyMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Klar::class.java) assertThat(nyttBrev.status).isInstanceOf(Brev.Status.Klar::class.java) @@ -358,7 +369,7 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { @Test fun `kan kopiere og rekjøre melding med godskriving`() { val stoppetMeldingId = lagreOgProsesserMeldingSomGirBrev().let { - service.stoppMelding(it, null)!! + service.stoppMelding(it, "begrunnelse")!! } val nyMelding = service.rekjørStoppetMelding(stoppetMeldingId)!!.let { @@ -371,8 +382,12 @@ class AdministrasjonsTest : SpringContextTest.NoKafka() { val nyGodskriv = godskrivOpptjeningRepo.findForBehandling(behandling.alle().single().id).single() - assertThat(stoppetMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java) - assertThat(stoppetGodskriv.status).isInstanceOf(GodskrivOpptjening.Status.Stoppet::class.java) + assertInstanceOf(PersongrunnlagMelding.Status.Stoppet::class.java, stoppetMelding.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } + assertInstanceOf(GodskrivOpptjening.Status.Stoppet::class.java, stoppetGodskriv.status).also { + assertThat(it.begrunnelse).isEqualTo("begrunnelse") + } assertThat(nyMelding.status).isInstanceOf(PersongrunnlagMelding.Status.Klar::class.java) assertThat(nyGodskriv.status).isInstanceOf(GodskrivOpptjening.Status.Klar::class.java)