Skip to content

Commit

Permalink
Oppdaterer script og legger til nye undertemaer
Browse files Browse the repository at this point in the history
  • Loading branch information
SiLar92 committed Nov 22, 2024
1 parent 122dd22 commit 72ca40a
Show file tree
Hide file tree
Showing 13 changed files with 1,058 additions and 259 deletions.
267 changes: 96 additions & 171 deletions scripts/spørreundersøkelse/generer_sql.py

Large diffs are not rendered by default.

27 changes: 16 additions & 11 deletions scripts/spørreundersøkelse/main/dataklasser/Spørsmål.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
from pydantic import BaseModel
from typing import Annotated
from pydantic import BaseModel, StringConstraints
from main.util.generer_uuider import generer_uuid_med_delay
from main.dataklasser.Svaralternativ import Svaralternativ, lagSvaralternativer
from main.dataklasser.Svaralternativ import Svaralternativ


class Spørsmål(BaseModel):
tekst: str
id: Annotated[str, StringConstraints(min_length=36, max_length=36)]
flervalg: bool = False
svaralternativer: list[Svaralternativ] = lagSvaralternativer(
def lagSvaralternativer(alternativer: list[str]) -> list[Svaralternativ]:
return [Svaralternativ(tekst=alternativ) for alternativ in alternativer]


class Spørsmål:
def __init__(
self,
tekst: str,
flervalg: bool = False,
alternativer=[
"Helt enig",
"Litt enig",
"Litt uenig",
"Helt uenig",
"Vet ikke",
]
)
],
):
self.id = generer_uuid_med_delay()
self.tekst = tekst
self.flervalg = flervalg
self.svaralternativer = lagSvaralternativer(alternativer=alternativer)
17 changes: 4 additions & 13 deletions scripts/spørreundersøkelse/main/dataklasser/Svaralternativ.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,7 @@
from pydantic import BaseModel
from typing import Annotated
from pydantic import BaseModel, StringConstraints
from main.util.generer_uuider import generer_uuid_med_delay


class Svaralternativ(BaseModel):
id: Annotated[str, StringConstraints(min_length=36, max_length=36)]
tekst: str


def lagSvaralternativer(alternativer: list[str]) -> list[Svaralternativ]:
return [
Svaralternativ(id=generer_uuid_med_delay(), tekst=alternativ)
for alternativ in alternativer
]
class Svaralternativ:
def __init__(self, tekst: str):
self.id = generer_uuid_med_delay()
self.tekst = tekst
19 changes: 12 additions & 7 deletions scripts/spørreundersøkelse/main/dataklasser/Tema.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
from typing import Literal
from pydantic import BaseModel
from main.dataklasser.Undertema import Undertema


class Tema(BaseModel):
id: int
navn: Literal["Partssamarbeid", "Sykefraværsarbeid", "Arbeidsmiljø"]
rekkefølge: int
type: Literal["Behovsvurdering", "Evaluering"]
undertemaer: list[Undertema]
class Tema:
def __init__(
self,
id: int,
navn: Literal["Partssamarbeid", "Sykefraværsarbeid", "Arbeidsmiljø"],
type: Literal["Behovsvurdering", "Evaluering"],
undertemaer: list[Undertema],
):
self.id = id
self.navn = navn
self.type = type
self.undertemaer = undertemaer
14 changes: 8 additions & 6 deletions scripts/spørreundersøkelse/main/dataklasser/Undertema.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
from main.dataklasser.Spørsmål import Spørsmål


class Undertema(BaseModel):
id: int
navn: str
rekkefølge: int
spørsmål: list[Spørsmål]
obligatorisk: bool = False
class Undertema:
def __init__(
self, id: int, navn: str, spørsmål: list[Spørsmål], obligatorisk: bool = False
):
self.id = id
self.navn = navn
self.spørsmål = spørsmål
self.obligatorisk = obligatorisk
2 changes: 1 addition & 1 deletion scripts/spørreundersøkelse/main/util/generer_uuider.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ def generer_uuider(antall: int) -> list[str]:


def generer_uuid_med_delay() -> str:
sleep(0.001)
sleep(0.01)
return uuid7(as_type="str")
71 changes: 47 additions & 24 deletions scripts/spørreundersøkelse/main/util/sql_eksport.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,43 +6,55 @@

def gjør_tema_inaktivt(temaId: int):
sql_fil = (
"UPDATE ia_sak_kartlegging_tema"
+ "\n"
+ "SET status = 'INAKTIV'"
+ "\n"
+ "WHERE tema_id = "
+ str(temaId)
+ ";"
"-- Gjør tema inaktivt"
+ "\n"
+ "UPDATE ia_sak_kartlegging_tema"
+ "\n"
+ "SET status = 'INAKTIV'"
+ "\n"
+ "WHERE tema_id = "
+ str(temaId)
+ ";"
+ "\n"
)
return sql_fil


def gjør_undertema_inaktivt(undertema_id: int):
sql_fil = (
"UPDATE ia_sak_kartlegging_undertema"
+ "\n"
+ "SET status = 'INAKTIV'"
+ "\n"
+ "WHERE undertema_id = "
+ str(undertema_id)
+ ";"
"-- Gjør undertema inaktivt"
+ "\n"
+ "UPDATE ia_sak_kartlegging_undertema"
+ "\n"
+ "SET status = 'INAKTIV'"
+ "\n"
+ "WHERE undertema_id = "
+ str(undertema_id)
+ ";"
+ "\n"
)
return sql_fil


def nytt_tema(tema: Tema):
def nytt_tema(tema: Tema, rekkefølge: int):
return (
"INSERT INTO ia_sak_kartlegging_tema (tema_id, navn, status, rekkefolge, type)"
f"-- Nytt tema -> '{tema.navn}'"
+ "\n"
+ "INSERT INTO ia_sak_kartlegging_tema (tema_id, navn, status, rekkefolge, type)"
+ "\n"
+ f"VALUES ({tema.id}, '{tema.navn}', 'AKTIV', {rekkefølge}, '{tema.type}');"
+ "\n"
+ f"VALUES ({tema.id}, '{tema.navn}', 'AKTIV', {tema.rekkefølge}, '{tema.type}');"
)


def nytt_undertema(undertema: Undertema, tema: Tema):
def nytt_undertema(undertema: Undertema, tema: Tema, rekkefølge: int):
return (
"INSERT INTO ia_sak_kartlegging_undertema (undertema_id, navn, status, rekkefolge, tema_id, obligatorisk)"
f"-- Nytt undertema -> '{tema.navn}' : '{undertema.navn}'"
+ "\n"
+ "INSERT INTO ia_sak_kartlegging_undertema (undertema_id, navn, status, rekkefolge, tema_id, obligatorisk)"
+ "\n"
+ f"VALUES ({undertema.id}, '{undertema.navn}', 'AKTIV', {rekkefølge}, {tema.id}, {str(undertema.obligatorisk).lower()});"
+ "\n"
+ f"VALUES ({undertema.id}, '{undertema.navn}', 'AKTIV', {undertema.rekkefølge}, {tema.id}, {str(undertema.obligatorisk).lower()});"
)


Expand All @@ -54,6 +66,7 @@ def nytt_svaralternativ(
"INSERT INTO ia_sak_kartlegging_svaralternativer (svaralternativ_id, sporsmal_id, svaralternativ_tekst)"
+ "\n"
+ f"VALUES ('{svaralternativ.id}', '{spørsmål.id}', '{svaralternativ.tekst}');"
+ "\n"
)


Expand All @@ -62,19 +75,29 @@ def nytt_spørsmål(spørsmål: Spørsmål):
"INSERT INTO ia_sak_kartlegging_sporsmal (sporsmal_id, sporsmal_tekst, flervalg)"
+ "\n"
+ f"VALUES ('{spørsmål.id}','{spørsmål.tekst.strip()}',{str(spørsmål.flervalg).lower()});"
+ "\n"
)


def knytt_spørsmål_til_tema(spørsmål: Spørsmål, tema: Tema):
return (
"INSERT INTO ia_sak_kartlegging_tema_til_spørsmål (tema_id, sporsmal_id)"
f"-- Knytt tema til spørsmål -> '{tema.navn}'"
+ "\n"
+ "INSERT INTO ia_sak_kartlegging_tema_til_spørsmål (tema_id, sporsmal_id)"
+ "\n"
+ f"VALUES ({tema.id}, '{spørsmål.id}');"
+ "\n"
)

def knytt_spørsmål_til_undertema(spørsmål: Spørsmål, undertema: Undertema):

def knytt_spørsmål_til_undertema(
spørsmål: Spørsmål, undertema: Undertema, rekkefølge: int
):
return (
"INSERT INTO ia_sak_kartlegging_sporsmal_til_undertema (undertema_id, sporsmal_id)"
f"-- Knytt spørsmål til undertema -> '{undertema.navn}'"
+ "\n"
+ "INSERT INTO ia_sak_kartlegging_sporsmal_til_undertema (undertema_id, sporsmal_id,rekkefolge)"
+ "\n"
+ f"VALUES ({undertema.id}, '{spørsmål.id}', {rekkefølge});"
+ "\n"
+ f"VALUES ({undertema.id}, '{spørsmål.id}');"
)
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import ia.felles.integrasjoner.kafkameldinger.spørreundersøkelse.Spørreunders
import ia.felles.integrasjoner.kafkameldinger.spørreundersøkelse.SpørreundersøkelseStatus.OPPRETTET
import ia.felles.integrasjoner.kafkameldinger.spørreundersøkelse.SpørreundersøkelseStatus.PÅBEGYNT
import ia.felles.integrasjoner.kafkameldinger.spørreundersøkelse.SpørreundersøkelseStatus.SLETTET
import io.ktor.http.HttpStatusCode
import kotlinx.datetime.toKotlinLocalDateTime
import no.nav.lydia.Observer
import no.nav.lydia.ia.eksport.SpørreundersøkelseOppdateringProdusent
Expand Down Expand Up @@ -137,10 +138,13 @@ class SpørreundersøkelseService(
planService.hentPlan(samarbeidId = prosessId).flatMap { plan ->
val temaerInkludertIPlan = plan.temaer.filter {
it.inkludert
}.ifEmpty {
return Feil(feilmelding = "Kan ikke opprette en tom plan", httpStatusCode = HttpStatusCode.BadRequest).left()
}.map {
it.navn
}
val temaerSomSkalEvalueres = spørreundersøkelseRepository.hentAktiveTemaer(type).filter {
val aktiveTemaer = spørreundersøkelseRepository.hentAktiveTemaer(type)
val temaerSomSkalEvalueres = aktiveTemaer.filter {
temaerInkludertIPlan.contains(it.navn)
}
iaProsessService.hentIAProsess(sak = iaSak, prosessId = prosessId).flatMap { samarbeid ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import no.nav.lydia.ia.sak.domene.spørreundersøkelse.Svaralternativ
import no.nav.lydia.ia.sak.domene.spørreundersøkelse.Tema
import no.nav.lydia.ia.sak.domene.spørreundersøkelse.TemaInfo
import no.nav.lydia.ia.sak.domene.spørreundersøkelse.TemaStatus
import no.nav.lydia.ia.sak.domene.spørreundersøkelse.UndertemaInfo
import no.nav.lydia.tilgangskontroll.fia.NavAnsatt
import java.time.LocalDateTime
import java.util.UUID
Expand Down Expand Up @@ -179,26 +180,29 @@ class SpørreundersøkelseRepository(
}

temaer.sortedBy { it.rekkefølge }.forEach { tema ->
tx.run(
queryOf(
"""
INSERT INTO ia_sak_kartlegging_kartlegging_til_undertema (
kartlegging_id,
tema_id,
undertema_id
)
VALUES (
:kartlegging_id,
:tema_id,
:tema_id
)
""".trimMargin(),
mapOf(
"kartlegging_id" to spørreundersøkelseId,
"tema_id" to tema.id,
),
).asUpdate,
)
tema.undertemaer.sortedBy { it.rekkefølge }.forEach { undertema ->
tx.run(
queryOf(
"""
INSERT INTO ia_sak_kartlegging_kartlegging_til_undertema (
kartlegging_id,
tema_id,
undertema_id
)
VALUES (
:kartlegging_id,
:tema_id,
:undertema_id
)
""".trimMargin(),
mapOf(
"kartlegging_id" to spørreundersøkelseId,
"tema_id" to tema.id,
"undertema_id" to undertema.id,
),
).asUpdate,
)
}
}
}
}
Expand Down Expand Up @@ -472,14 +476,17 @@ class SpørreundersøkelseRepository(
hentSpørreundersøkelse(spørreundersøkelseId)
}

private fun mapTilTema(row: Row) =
TemaInfo(
id = row.int("tema_id"),
private fun mapTilTema(row: Row): TemaInfo {
val temaId = row.int("tema_id")
return TemaInfo(
id = temaId,
rekkefølge = row.int("rekkefolge"),
navn = row.string("navn"),
status = TemaStatus.valueOf(row.string("status")),
sistEndret = row.localDateTime("sist_endret").toKotlinLocalDateTime(),
undertemaer = hentAktiveUndertemaer(temaId = temaId),
)
}

fun stengTema(
spørreundersøkelseId: String,
Expand Down Expand Up @@ -516,6 +523,27 @@ class SpørreundersøkelseRepository(
)
}

private fun hentAktiveUndertemaer(temaId: Int): List<UndertemaInfo> =
using(sessionOf(dataSource)) { session ->
session.run(
queryOf(
"""
SELECT * FROM ia_sak_kartlegging_undertema
WHERE status = '${TemaStatus.AKTIV}'
AND tema_id = '$temaId'
""".trimIndent(),
).map(this::mapTilUndertema).asList,
)
}

private fun mapTilUndertema(row: Row) =
UndertemaInfo(
id = row.int("undertema_id"),
navn = row.string("navn"),
rekkefølge = row.int("rekkefolge"),
status = TemaStatus.valueOf(row.string("status")),
)

fun oppdaterBehovsvurdering(
behovsvurderingId: String,
oppdaterBehovsvurderingDto: OppdaterBehovsvurderingDto,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,12 @@ data class TemaInfo(
val status: TemaStatus,
val rekkefølge: Int,
val sistEndret: LocalDateTime,
val undertemaer: List<UndertemaInfo>
)

data class UndertemaInfo(
val id: Int,
val navn: String,
val status: TemaStatus, //TODO: burde kanskje ikke hete temastatus?
val rekkefølge: Int,
)
Loading

0 comments on commit 72ca40a

Please sign in to comment.