Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/ey 4673 pins tidslinje #6528

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class AktivitetspliktDao(
}
}

fun hentAktiviteterForBehandling(behandlingId: UUID): List<AktivitetspliktAktivitet> =
fun hentAktiviteterForBehandling(behandlingId: UUID): List<AktivitetspliktAktivitetPeriode> =
connectionAutoclosing.hentConnection {
with(it) {
val stmt =
Expand All @@ -90,7 +90,7 @@ class AktivitetspliktDao(
}
}

fun hentAktiviteterForSak(sakId: SakId): List<AktivitetspliktAktivitet> =
fun hentAktiviteterForSak(sakId: SakId): List<AktivitetspliktAktivitetPeriode> =
connectionAutoclosing.hentConnection {
with(it) {
val stmt =
Expand Down Expand Up @@ -269,8 +269,106 @@ class AktivitetspliktDao(
}
}

fun hentHendelserForBehandling(behandlingId: UUID): List<AktivitetspliktAktivitetHendelse> =
connectionAutoclosing.hentConnection {
with(it) {
val stmt =
prepareStatement(
"""
SELECT id, sak_id, behandling_id, dato, opprettet, endret, beskrivelse
FROM aktivitetsplikt_hendelse
WHERE behandling_id = ?
""".trimMargin(),
)
stmt.setObject(1, behandlingId)

stmt.executeQuery().toList { toHendelse() }
}
}

fun hentHendelserForSak(sakId: SakId): List<AktivitetspliktAktivitetHendelse> =
connectionAutoclosing.hentConnection {
with(it) {
val stmt =
prepareStatement(
"""
SELECT id, sak_id, behandling_id, dato, opprettet, endret, beskrivelse
FROM aktivitetsplikt_hendelse
WHERE sak_id = ?
""".trimMargin(),
)
stmt.setSakId(1, sakId)

stmt.executeQuery().toList { toHendelse() }
}
}

fun upsertHendelse(
behandlingId: UUID?,
hendelse: LagreAktivitetspliktHendelse,
kilde: Grunnlagsopplysning.Kilde,
) = connectionAutoclosing.hentConnection {
with(it) {
val stmt =
prepareStatement(
"""
INSERT INTO aktivitetsplikt_hendelse(id, sak_id, behandling_id, dato, opprettet, endret, beskrivelse)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON CONFLICT (id) DO UPDATE SET
dato = excluded.dato,
endret = excluded.endret,
beskrivelse = excluded.beskrivelse
""".trimMargin(),
)
stmt.setObject(1, hendelse.id ?: UUID.randomUUID())
stmt.setSakId(2, hendelse.sakId)
stmt.setObject(3, behandlingId)
stmt.setDate(4, Date.valueOf(hendelse.dato))
stmt.setString(5, kilde.toJson())
stmt.setString(6, kilde.toJson())
stmt.setString(7, hendelse.beskrivelse)

stmt.executeUpdate()
}
}

fun slettHendelse(hendelseId: UUID) =
connectionAutoclosing.hentConnection {
with(it) {
val stmt =
prepareStatement(
"""
DELETE FROM aktivitetsplikt_hendelse
WHERE id = ?
""".trimMargin(),
)
stmt.setObject(1, hendelseId)

stmt.executeUpdate()
}
}

fun kopierHendelser(
forrigeBehandlingId: UUID,
nyBehandlingId: UUID,
) = connectionAutoclosing.hentConnection {
with(it) {
val stmt =
prepareStatement(
"""
INSERT INTO aktivitetsplikt_hendelse (id, sak_id, behandling_id, dato, opprettet, endret, beskrivelse)
(SELECT gen_random_uuid(), sak_id, ?, dato, opprettet, endret, beskrivelse FROM aktivitetsplikt_hendelse WHERE behandling_id = ?)
""".trimMargin(),
)
stmt.setObject(1, nyBehandlingId)
stmt.setObject(2, forrigeBehandlingId)

stmt.executeUpdate()
}
}

private fun ResultSet.toAktivitet() =
AktivitetspliktAktivitet(
AktivitetspliktAktivitetPeriode(
id = getUUID("id"),
sakId = SakId(getLong("sak_id")),
type = AktivitetspliktAktivitetType.valueOf(getString("aktivitet_type")),
Expand All @@ -280,9 +378,35 @@ class AktivitetspliktDao(
endret = objectMapper.readValue(getString("endret")),
beskrivelse = getString("beskrivelse"),
)

private fun ResultSet.toHendelse() =
AktivitetspliktAktivitetHendelse(
id = getUUID("id"),
sakId = SakId(getLong("sak_id")),
behandlingId = getString("behandling_id")?.let { UUID.fromString(it) },
dato = getDate("dato").toLocalDate(),
opprettet = objectMapper.readValue(getString("opprettet")),
endret = objectMapper.readValue(getString("endret")),
beskrivelse = getString("beskrivelse"),
)
}

data class AktivitetspliktAktivitet(
val hendelser: List<AktivitetspliktAktivitetHendelse>,
val perioder: List<AktivitetspliktAktivitetPeriode>,
)

data class AktivitetspliktAktivitetHendelse(
val id: UUID,
val sakId: SakId,
val behandlingId: UUID?,
val dato: LocalDate,
val opprettet: Grunnlagsopplysning.Kilde,
val endret: Grunnlagsopplysning.Kilde?,
val beskrivelse: String,
)

data class AktivitetspliktAktivitetPeriode(
val id: UUID,
val sakId: SakId,
val type: AktivitetspliktAktivitetType,
Expand Down Expand Up @@ -318,6 +442,13 @@ data class LagreAktivitetspliktAktivitet(
val beskrivelse: String,
)

data class LagreAktivitetspliktHendelse(
val id: UUID? = null,
val sakId: SakId,
val dato: LocalDate,
val beskrivelse: String,
)

enum class AktivitetspliktAktivitetType {
ARBEIDSTAKER,
SELVSTENDIG_NAERINGSDRIVENDE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ internal fun Route.aktivitetspliktRoutes(
}
}

route("/aktivitet-og-hendelser") {
get {
logger.info("Henter aktiviteter og hendelser for behandlingId=$behandlingId")
call.respond(inTransaction { aktivitetspliktService.hentAktiviteterHendelser(behandlingId = behandlingId) })
}
}

route("/aktivitet") {
get {
logger.info("Henter aktiviteter for behandlingId=$behandlingId")
Expand Down Expand Up @@ -172,6 +179,62 @@ internal fun Route.aktivitetspliktRoutes(
}
}

route("/aktivitet-og-hendelser") {
get {
logger.info("Henter aktiviteter og hendelser for sak=$sakId")
call.respond(inTransaction { aktivitetspliktService.hentAktiviteterHendelser(sakId = sakId) })
}
}

route("hendelse") {
get {
kunSaksbehandler {
logger.info("Henter hendelser for sak $sakId")
val dto =
inTransaction {
runBlocking {
// TODO
aktivitetspliktService.hentAktiviteter(
sakId = sakId,
)
}
}
call.respond(dto)
}
}
post {
kunSkrivetilgang {
logger.info("Oppretter eller oppdaterer hendelser for sakId=$sakId")
val aktivitet = call.receive<LagreAktivitetspliktAktivitet>()

val aktiviteter =
inTransaction {
// TODO
aktivitetspliktService.upsertAktivitet(aktivitet, brukerTokenInfo, sakId = sakId)
aktivitetspliktService.hentAktiviteter(sakId = sakId)
}
call.respond(aktiviteter)
}
}

route("/{$AKTIVITET_ID_CALL_PARAMETER}") {
delete {
kunSkrivetilgang {
logger.info("Sletter aktivitet $aktivitetId for sakId $sakId")

val aktiviteter =
inTransaction {
// TODO
aktivitetspliktService.slettAktivitet(aktivitetId, brukerTokenInfo, sakId = sakId)
aktivitetspliktService.hentAktiviteter(sakId = sakId)
}

call.respond(aktiviteter)
}
}
}
}

route("statistikk/{$BEHANDLINGID_CALL_PARAMETER}") {
get {
kunSystembruker {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import no.nav.etterlatte.libs.common.behandling.Persongalleri
import no.nav.etterlatte.libs.common.behandling.Prosesstype
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.behandling.tilVirkningstidspunkt
import no.nav.etterlatte.libs.common.feilhaandtering.GenerellIkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.IkkeFunnetException
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
Expand Down Expand Up @@ -173,10 +174,28 @@ class AktivitetspliktService(
return varigUnntak != null
}

fun hentAktiviteterHendelser(
behandlingId: UUID? = null,
sakId: SakId? = null,
): AktivitetspliktAktivitet =
(
if (behandlingId != null) {
val perioder = aktivitetspliktDao.hentAktiviteterForBehandling(behandlingId)
val hendelser = aktivitetspliktDao.hentHendelserForBehandling(behandlingId)
AktivitetspliktAktivitet(hendelser, perioder)
} else if (sakId != null) {
val perioder = aktivitetspliktDao.hentAktiviteterForSak(sakId)
val hendelser = aktivitetspliktDao.hentHendelserForSak(sakId)
AktivitetspliktAktivitet(hendelser, perioder)
} else {
throw ManglerSakEllerBehandlingIdException()
}
)

fun hentAktiviteter(
behandlingId: UUID? = null,
sakId: SakId? = null,
): List<AktivitetspliktAktivitet> =
): List<AktivitetspliktAktivitetPeriode> =
(
if (behandlingId != null) {
aktivitetspliktDao.hentAktiviteterForBehandling(behandlingId)
Expand Down Expand Up @@ -247,6 +266,73 @@ class AktivitetspliktService(
}
}

fun hentHendelser(
behandlingId: UUID? = null,
sakId: SakId? = null,
): List<AktivitetspliktAktivitetHendelse> =
(
if (behandlingId != null) {
aktivitetspliktDao.hentHendelserForBehandling(behandlingId)
} else if (sakId != null) {
aktivitetspliktDao.hentHendelserForSak(sakId)
} else {
throw ManglerSakEllerBehandlingIdException()
}
)

fun upsertHendelse(
hendelse: LagreAktivitetspliktHendelse,
brukerTokenInfo: BrukerTokenInfo,
behandlingId: UUID? = null,
sakId: SakId? = null,
) {
val kilde = Grunnlagsopplysning.Saksbehandler.create(brukerTokenInfo.ident())

if (behandlingId != null) {
val behandling =
requireNotNull(behandlingService.hentBehandling(behandlingId)) { "Fant ikke behandling $behandlingId" }
if (!behandling.status.kanEndres()) {
throw BehandlingKanIkkeEndres()
}
if (hendelse.sakId != behandling.sak.id) {
throw SakidTilhoererIkkeBehandlingException()
}
aktivitetspliktDao.upsertHendelse(behandlingId, hendelse, kilde)

runBlocking { sendDtoTilStatistikk(hendelse.sakId, brukerTokenInfo, behandlingId) }
} else if (sakId != null) {
if (hendelse.sakId != sakId) {
throw SakidTilhoererIkkeBehandlingException()
}
aktivitetspliktDao.upsertHendelse(null, hendelse, kilde)
} else {
throw ManglerSakEllerBehandlingIdException()
}
}

fun slettHendelse(
hendelseId: UUID,
brukerTokenInfo: BrukerTokenInfo,
sakId: SakId,
) {
val hendelseForSak =
aktivitetspliktDao.hentHendelserForSak(sakId).firstOrNull { it.id == hendelseId } ?: throw GenerellIkkeFunnetException()

if (hendelseForSak.behandlingId != null) {
val behandling =
requireNotNull(
behandlingService.hentBehandling(hendelseForSak.behandlingId),
) { "Fant ikke behandling ${hendelseForSak.behandlingId}" }
if (!behandling.status.kanEndres()) {
throw BehandlingKanIkkeEndres()
}
aktivitetspliktDao.slettHendelse(hendelseId)
runBlocking { sendDtoTilStatistikk(behandling.sak.id, brukerTokenInfo, hendelseForSak.behandlingId) }
} else {
aktivitetspliktDao.slettHendelse(hendelseId)
}
}

fun upsertAktivitetsgradForOppgave(
aktivitetsgrad: LagreAktivitetspliktAktivitetsgrad,
oppgaveId: UUID,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE TABLE aktivitetsplikt_hendelse
(
id UUID UNIQUE,
sak_id BIGINT NOT NULL,
behandling_id UUID,
dato DATE,
opprettet TEXT,
endret TEXT,
beskrivelse TEXT,
CONSTRAINT fk_sak_id FOREIGN KEY (sak_id) REFERENCES sak (id)
);
Loading