Skip to content

Commit

Permalink
Mahdollisuus rajata csv-kyselystä pois aikajaksot ja osasuoritukset
Browse files Browse the repository at this point in the history
  • Loading branch information
ilkkahanninen committed Oct 11, 2024
1 parent a2c0331 commit 461475c
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ case class MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv(
muuttunutJälkeen: Option[LocalDateTime] = None,
koulutusmuoto: Option[String] = None,
mitätöidyt: Option[Boolean] = None,
@Description("Jos true, ei kyselyllä luoda osasuoritustiedostoja")
eiOsasuorituksia: Option[Boolean] = None,
@Description("Jos true, ei kyselyllä luoda opiskeluoikeuden aikajaksotiedostoja")
eiAikajaksoja: Option[Boolean] = None,
) extends MassaluovutusQueryOrganisaationOpiskeluoikeudet {

def withOrganisaatioOid(organisaatioOid: Oid): MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv = copy(organisaatioOid = Some(organisaatioOid))
Expand All @@ -62,20 +66,27 @@ case class MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv(
val esiopetuksenAikajaksoCsv = CsvResultFile.esiopetuksenOpiskeluoikeudenAikajaksot.create(writer, partitionSize)
val mitätöityOpiskeluoikeusCsv = CsvResultFile.mitätöidytOpiskeluoikeudet.create(writer, partitionSize)

val includeAikajaksot = !eiAikajaksoja.contains(true)
val includeOsasuoritukset = !eiOsasuorituksia.contains(true)

forEachOpiskeluoikeus(application, filters, oppijaOids) { row =>
if (row.mitätöity) {
OpiskeluoikeusLoaderRowBuilder
.buildRowMitätöity(row)
.foreach(mitätöityOpiskeluoikeusCsv.put)
} else {
OpiskeluoikeusLoaderRowBuilder
.buildKoskiRow(row)
.buildKoskiRow(row, includeAikajaksot, includeOsasuoritukset)
.foreach { rows =>
opiskeluoikeusCsv.put(rows.rOpiskeluoikeusRow)
rows.rPäätasonSuoritusRows.foreach(row => päätasonSuoritusCsv.put(new CsvPäätasonSuoritus(row)))
rows.rOsasuoritusRows.foreach(row => osasuoritusCsv.put(new CsvOsauoritus(row)))
opiskeluoikeudenAikajaksoCsv.put(rows.rOpiskeluoikeusAikajaksoRows)
esiopetuksenAikajaksoCsv.put(rows.esiopetusOpiskeluoikeusAikajaksoRows)
if (includeOsasuoritukset) {
rows.rOsasuoritusRows.foreach(row => osasuoritusCsv.put(new CsvOsauoritus(row)))
}
if (includeAikajaksot) {
opiskeluoikeudenAikajaksoCsv.put(rows.rOpiskeluoikeusAikajaksoRows)
esiopetuksenAikajaksoCsv.put(rows.esiopetusOpiskeluoikeusAikajaksoRows)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,23 @@ object OpiskeluoikeusLoaderRowBuilder extends Logging {
sisältyvätKokeet: List[YlioppilastutkinnonSisältyväKoe]
)

def buildKoskiRow(inputRow: OpiskeluoikeusRow): Either[LoadErrorResult, KoskiOutputRows] = {
def buildKoskiRow(inputRow: OpiskeluoikeusRow, includeAikajaksot: Boolean = true, includeOsasuoritukset: Boolean = true): Either[LoadErrorResult, KoskiOutputRows] = {
Try {
val toOpiskeluoikeusUnsafeStartTime = System.nanoTime()
val oo = inputRow.toOpiskeluoikeusUnsafe(KoskiSpecificSession.systemUser)
val toOpiskeluoikeusUnsafeDuration = System.nanoTime() - toOpiskeluoikeusUnsafeStartTime
val ooRow = buildROpiskeluoikeusRow(inputRow.oppijaOid, inputRow.aikaleima, oo, inputRow.data)

val aikajaksoRows: AikajaksoRows = buildAikajaksoRows(inputRow.oid, oo)
val aikajaksoRows: AikajaksoRows = if (includeAikajaksot) buildAikajaksoRows(inputRow.oid, oo) else (Nil, Nil)
val suoritusRows: KoskiSuoritusRows = oo.suoritukset.zipWithIndex.map {
case (ps, i) => OpiskeluoikeusLoaderRowBuilder.buildKoskiSuoritusRows(
inputRow.oid,
inputRow.sisältäväOpiskeluoikeusOid,
oo.getOppilaitos,
ps,
(inputRow.data \ "suoritukset") (i),
suoritusIds.incrementAndGet
suoritusIds.incrementAndGet,
includeOsasuoritukset
)
}
KoskiOutputRows(
Expand Down Expand Up @@ -200,7 +201,8 @@ object OpiskeluoikeusLoaderRowBuilder extends Logging {
oppilaitos: OrganisaatioWithOid,
ps: PäätasonSuoritus,
data: JValue,
idGenerator: => Long
idGenerator: => Long,
includeOsasuoritukset: Boolean = true
): (
RPäätasonSuoritusRow,
List[ROsasuoritusRow],
Expand All @@ -210,15 +212,17 @@ object OpiskeluoikeusLoaderRowBuilder extends Logging {
{
val päätasonSuoritusId: Long = idGenerator
val päätaso = buildRPäätasonSuoritusRow(opiskeluoikeusOid, sisältyyOpiskeluoikeuteenOid, oppilaitos, ps, data, päätasonSuoritusId)
val osat = ps.osasuoritukset.getOrElse(List.empty).zipWithIndex.flatMap {
case (os, i) => buildROsasuoritusRow(päätasonSuoritusId, None, opiskeluoikeusOid, sisältyyOpiskeluoikeuteenOid, os, (data \ "osasuoritukset")(i), idGenerator)
}
val osat = if (includeOsasuoritukset) {
ps.osasuoritukset.getOrElse(List.empty).zipWithIndex.flatMap {
case (os, i) => buildROsasuoritusRow(päätasonSuoritusId, None, opiskeluoikeusOid, sisältyyOpiskeluoikeuteenOid, os, (data \ "osasuoritukset")(i), idGenerator)
}
} else { Nil }
val muuAmmatillinenRaportointi = ps match {
case s: MuunAmmatillisenKoulutuksenSuoritus => s.rekursiivisetOsasuoritukset.map(MuuAmmatillinenRaporttiRowBuilder.build(opiskeluoikeusOid, päätasonSuoritusId, _))
case s: MuunAmmatillisenKoulutuksenSuoritus if includeOsasuoritukset => s.rekursiivisetOsasuoritukset.map(MuuAmmatillinenRaporttiRowBuilder.build(opiskeluoikeusOid, päätasonSuoritusId, _))
case _ => Nil
}
val topksAmmatillinenRaportointi = ps match {
case s: TutkinnonOsaaPienemmistäKokonaisuuksistaKoostuvaSuoritus => s.rekursiivisetOsasuoritukset.map(TOPKSAmmatillinenRaporttiRowBuilder.build(opiskeluoikeusOid, päätasonSuoritusId, _))
case s: TutkinnonOsaaPienemmistäKokonaisuuksistaKoostuvaSuoritus if includeOsasuoritukset => s.rekursiivisetOsasuoritukset.map(TOPKSAmmatillinenRaporttiRowBuilder.build(opiskeluoikeusOid, päätasonSuoritusId, _))
case _ => Nil
}
(päätaso, osat, muuAmmatillinenRaportointi, topksAmmatillinenRaportointi)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import java.net.URL
import java.sql.Timestamp
import java.time.{Duration, LocalDate, LocalDateTime}
import java.util.UUID
import scala.util.matching.Regex

class MassaluovutusSpec extends AnyFreeSpec with KoskiHttpSpec with Matchers with BeforeAndAfterAll with BeforeAndAfterEach {
val app = KoskiApplicationForTests
Expand Down Expand Up @@ -259,7 +260,6 @@ class MassaluovutusSpec extends AnyFreeSpec with KoskiHttpSpec with Matchers wit
}

"Partitioitu kysely palauttaa oikean määrän tiedostoja" in {
AuditLogTester.clearMessages()
val user = MockUsers.helsinkiKatselija
val partitionedQuery = query.copy(format = QueryFormat.csvPartition)
val queryId = addQuerySuccessfully(partitionedQuery, user) { response =>
Expand All @@ -272,6 +272,34 @@ class MassaluovutusSpec extends AnyFreeSpec with KoskiHttpSpec with Matchers wit
complete.files should have length 18
complete.files.foreach(verifyResult(_, user))
}

"Osasuorituksia ei palauteta, jos niistä ollaan opt-outattu" in {
val user = MockUsers.helsinkiKatselija
val eiOsasuorituksiaQuery = query.copy(eiOsasuorituksia = Some(true))
val queryId = addQuerySuccessfully(eiOsasuorituksiaQuery, user) { response =>
response.status should equal(QueryState.pending)
response.query.asInstanceOf[MassaluovutusQueryOrganisaationOpiskeluoikeudet].organisaatioOid should contain(MockOrganisaatiot.helsinginKaupunki)
response.queryId
}
val complete = waitForCompletion(queryId, user)

complete.files.filter(_.contains("osasuoritus")) should equal(List.empty)
complete.files.filter(_.contains("aikajakso")) should have length 2
}

"Aikajaksoja ei palauteta, jos niistä ollaan opt-outattu" in {
val user = MockUsers.helsinkiKatselija
val eiAikajaksojaQuery = query.copy(eiAikajaksoja = Some(true))
val queryId = addQuerySuccessfully(eiAikajaksojaQuery, user) { response =>
response.status should equal(QueryState.pending)
response.query.asInstanceOf[MassaluovutusQueryOrganisaationOpiskeluoikeudet].organisaatioOid should contain(MockOrganisaatiot.helsinginKaupunki)
response.queryId
}
val complete = waitForCompletion(queryId, user)

complete.files.filter(_.contains("aikajakso")) should equal(List.empty)
complete.files.filter(_.contains("osasuoritus")) should have length 1
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/test/scala/fi/oph/koski/migration/MigrationSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class MigrationSpec extends AnyFreeSpec with Matchers with RaportointikantaTestM
"RaportointikantaTestServlet.scala" -> "d457be86e60dd84545378ae415236d26",
"RaportointikantaTableQueries.scala" -> "f2f26c217992539c1e61dcbd031fc642",
"TOPKSAmmatillinenRaporttiRowBuilder.scala" -> "a9c26a13385ff576810f3ef831240437",
"OpiskeluoikeusLoaderRowBuilder.scala" -> "e3a98a9b54db53d331c19289de89b99",
"OpiskeluoikeusLoaderRowBuilder.scala" -> "1fbd065ec7c936bbd900b5b8b45473c9",
"IncrementalUpdateOpiskeluoikeusLoader.scala" -> "60c3fe0ffb2e2cde5dfc013954c491be",
"FullReloadOpiskeluoikeusLoader.scala" -> "319c856f45120917695493852bfda577",
"VipunenExport.scala" -> "9563ec86b4214f871fbd085e44c048cb",
Expand Down

0 comments on commit 461475c

Please sign in to comment.