Skip to content

Commit

Permalink
Merge pull request #112 from navikt/etterslenger
Browse files Browse the repository at this point in the history
Prosesser meldinger på kort som er utenfor oppfølgingsperiode
  • Loading branch information
tu55eladd authored Oct 10, 2024
2 parents 29f575f + 6f9364a commit 83745d3
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,17 @@ open class DeltakerProcessor(
val funnetPeriode = oppfolgingsperiodeService.finnOppfolgingsperiode(personIdent, oppslagsDato)
return when (funnetPeriode) {
is FinnOppfolgingResult.FunnetPeriodeResult -> funnetPeriode
is FinnOppfolgingResult.IngenPeriodeResult -> handleOppfolgingsperiodeNull(deltaker, personIdent, deltaker.modDato, deltaker.tiltakdeltakelseId)
is FinnOppfolgingResult.IngenPeriodeResult -> {
/* Hvis perioden er åpne OG det finnes et aktivitetskort i den så ønsker vi likevel å oppdatere kortet selvom
nåværende tilDato og modDato ikke matcher en oppfølgingperiode */
val etterslengerAktivitetskort = aktivitetService
.getAllBy(deltaker.tiltakdeltakelseId, AktivitetKategori.TILTAKSAKTIVITET)
.firstOrNull { it.oppfolgingsperiodeSlutt == null } // Bare hvis perioden er åpen
etterslengerAktivitetskort?.oppfolgingsPeriode
?.let { funnetPeriode.allePerioder.find { it.uuid == etterslengerAktivitetskort.oppfolgingsPeriode } }
?.let { FinnOppfolgingResult.FunnetPeriodeResult(it, funnetPeriode.allePerioder) }
?: handleOppfolgingsperiodeNull(deltaker, personIdent, deltaker.modDato, deltaker.tiltakdeltakelseId)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
import org.springframework.stereotype.Component
import java.sql.ResultSet
import java.time.ZonedDateTime
import java.util.*

@Component
Expand Down Expand Up @@ -94,11 +95,20 @@ class AktivitetRepository(
fun getAllBy(deltakelseId: DeltakelseId, aktivitetKategori: AktivitetKategori): List<AktivitetMetaData> {
@Language("PostgreSQL")
val sql = """
SELECT oppfolgingsperiode_uuid as oppfolgingsPeriode, id FROM aktivitet WHERE arena_id = :arenaId
SELECT
oppfolgingsperiode_uuid as oppfolgingsPeriode,
id,
oppfolgingsperiode_slutt_tidspunkt,
COALESCE(aktivitet.oppfolgingsperiode_slutt_tidspunkt, TO_TIMESTAMP('9999', 'YYYY')) oppfolging_slutt_tidspunkt_eller_max
FROM aktivitet WHERE arena_id = :arenaId
ORDER BY oppfolging_slutt_tidspunkt_eller_max DESC
""".trimIndent()
val params = mapOf("arenaId" to "${aktivitetKategori.prefix}${deltakelseId.value}")
return template.query(sql, params) { row, _ ->
AktivitetMetaData(row.getUUID("id"), row.getUUID("oppfolgingsPeriode")) }
AktivitetMetaData(
row.getUUID("id"),
row.getUUID("oppfolgingsPeriode"),
row.getNullableZonedDateTime("oppfolgingsperiode_slutt_tidspunkt")) }
}

fun closeClosedPerioder(deltakelseId: DeltakelseId, aktivitetKategori: AktivitetKategori, oppfolgingsperioder: List<AvsluttetOppfolgingsperiode>) {
Expand Down Expand Up @@ -134,4 +144,5 @@ fun ResultSet.toAktivitetDbo() =
data class AktivitetMetaData(
val id: UUID,
val oppfolgingsPeriode: UUID,
val oppfolgingsperiodeSlutt: ZonedDateTime?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ open class OppfolgingsperiodeService(
}
}
?.let { FinnOppfolgingResult.FunnetPeriodeResult(it, oppfolgingsperioder) }
?: FinnOppfolgingResult.IngenPeriodeResult(emptyList())
?: FinnOppfolgingResult.IngenPeriodeResult(oppfolgingsperioder)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,47 @@ class DeltakerIntegrationTests : IntegrationTestBase() {
}
}

@Test
fun `process deltakelser-updates with no periodematch if aktivitetskort already created`() {
val (gjennomforingId, deltakerId) = setup()
val oppfølgingsperiodeStart = ZonedDateTime.now().minusMonths(1)
val tilDatoInniPeriode = oppfølgingsperiodeStart.plusDays(4)
val tilDatoUtenforPeriode = oppfølgingsperiodeStart.minusDays(15).toLocalDate()

val foerstePeriode = Oppfolgingsperiode(
uuid = UUID.randomUUID(),
startDato = oppfølgingsperiodeStart,
sluttDato = null
)

val deltakerInput = DeltakerInput(
personId = 444L,
tiltakDeltakelseId = deltakerId,
tiltakgjennomforingId = gjennomforingId,
innsokBegrunnelse = "innsøkbegrunnelse",
endretAv = Ident(ident = "SIG123"),
registrertDato = tilDatoInniPeriode.toLocalDateTime(),
endretTidspunkt = tilDatoInniPeriode.toLocalDateTime(),
datoTil = null
)

val fnr = "12345678902"
OrdsClientMock.fnrHandlers[deltakerInput.personId!!] = { fnr }
OppfolgingClientMock.oppfolgingsperioder[fnr] = listOf(foerstePeriode)

val deltakerCommand = NyDeltakerCommand(deltakerInput)
val result = deltakerExecutor.execute(deltakerCommand)
result.expectHandled {
data -> data.headers.oppfolgingsperiode shouldBe foerstePeriode.uuid
}
val oppdaterInput = deltakerInput.copy(datoTil = tilDatoUtenforPeriode)
val oppdaterDeltakerCommand = OppdaterDeltakerCommand(deltakerInput, oppdaterInput)
val oppdaterResult = deltakerExecutor.execute(oppdaterDeltakerCommand)
oppdaterResult.expectHandled {
data -> data.headers.oppfolgingsperiode shouldBe foerstePeriode.uuid
}
}

@Test
fun `tittel should be set to default value when gjennomforing navn is null`() {
val gjennomforingId: Long = Random.nextLong()
Expand Down

0 comments on commit 83745d3

Please sign in to comment.