diff --git a/ovara-backend/src/main/scala/fi/oph/ovara/backend/service/KoulutuksetToteutuksetHakukohteetService.scala b/ovara-backend/src/main/scala/fi/oph/ovara/backend/service/KoulutuksetToteutuksetHakukohteetService.scala index 69fa5ec..20a542f 100644 --- a/ovara-backend/src/main/scala/fi/oph/ovara/backend/service/KoulutuksetToteutuksetHakukohteetService.scala +++ b/ovara-backend/src/main/scala/fi/oph/ovara/backend/service/KoulutuksetToteutuksetHakukohteetService.scala @@ -29,6 +29,7 @@ class KoulutuksetToteutuksetHakukohteetService( valintakoe: Option[Boolean] ): XSSFWorkbook = { val user = userService.getEnrichedUserDetails + val userLng = user.asiointikieli.getOrElse("fi") val authorities = user.authorities val kayttooikeusOrganisaatiot = AuthoritiesUtil.getOrganisaatiot(authorities) val parentChildKayttooikeusOrgs = db.run(commonRepository.selectChildOrganisaatiot(kayttooikeusOrganisaatiot)) @@ -62,7 +63,7 @@ class KoulutuksetToteutuksetHakukohteetService( ExcelWriter.writeRaportti( organisaationKoulutuksetHakukohteetToteutukset, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, - user + userLng ) } } diff --git a/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/ExcelWriter.scala b/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/ExcelWriter.scala index 519edd1..c69d214 100644 --- a/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/ExcelWriter.scala +++ b/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/ExcelWriter.scala @@ -10,10 +10,9 @@ object ExcelWriter { val LOG: Logger = LoggerFactory.getLogger("ExcelWriter") def countAloituspaikat( - organisaationKoulutuksetToteutuksetHakukohteet: OrganisaationKoulutuksetToteutuksetHakukohteet + organisaationKoulutuksetToteutuksetHakukohteet: List[KoulutuksetToteutuksetHakukohteetResult] ): Int = { - val koulutuksetToteutuksetHakukohteet = - organisaationKoulutuksetToteutuksetHakukohteet.koulutuksetToteutuksetHakukohteet + val koulutuksetToteutuksetHakukohteet = organisaationKoulutuksetToteutuksetHakukohteet koulutuksetToteutuksetHakukohteet.flatMap(kth => kth.aloituspaikat).sum } @@ -21,16 +20,13 @@ object ExcelWriter { row: XSSFRow, headingCellStyle: XSSFCellStyle, asiointikieli: String, - organisaatio: Option[Organisaatio], - organisaationKoulutuksetToteutuksetHakukohteet: OrganisaationKoulutuksetToteutuksetHakukohteet, + organisaatio: Organisaatio, + organisaationKoulutuksetToteutuksetHakukohteet: List[KoulutuksetToteutuksetHakukohteetResult], raporttiColumnTitlesWithIndex: List[(String, Int)] ): XSSFRow = { val orgNameCell = row.createCell(0) orgNameCell.setCellStyle(headingCellStyle) - val kielistettyNimi = organisaatio match { - case Some(org: Organisaatio) => org.organisaatio_nimi(Kieli.withName(asiointikieli)) - case None => "-" - } + val kielistettyNimi = organisaatio.organisaatio_nimi(Kieli.withName(asiointikieli)) orgNameCell.setCellValue(kielistettyNimi) @@ -47,11 +43,10 @@ object ExcelWriter { // TODO: userin sijaan asiointikieli parametrina? def writeRaportti( - queryResult: List[(Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet)], + queryResult: Map[String, List[(Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet)]], raporttiColumnTitles: Map[String, List[String]], - user: User + userLng: String ): XSSFWorkbook = { - val asiointikieli = user.asiointikieli.getOrElse("fi") val workbook: XSSFWorkbook = new XSSFWorkbook() try { LOG.info("Creating new excel from db results") @@ -68,8 +63,10 @@ object ExcelWriter { headingCellstyle.setDataFormat(dataformat.getFormat("text")) cellstyle2.setFont(font2) workbook.setSheetName(0, WorkbookUtil.createSafeSheetName("Yhteenveto")) //TODO: käännös - val row = sheet.createRow(0) - val titles = raporttiColumnTitles.getOrElse(asiointikieli, raporttiColumnTitles.getOrElse("fi", List())) + var currentRowIndex = 0 + val row = sheet.createRow(currentRowIndex) + currentRowIndex = currentRowIndex + 1 + val titles = raporttiColumnTitles.getOrElse(userLng, raporttiColumnTitles.getOrElse("fi", List())) val raporttiColumnTitlesWithIndex = titles.zipWithIndex raporttiColumnTitlesWithIndex.foreach { case (title, index) => val cell = row.createCell(index) @@ -77,55 +74,85 @@ object ExcelWriter { cell.setCellStyle(headingCellstyle) } - queryResult.zipWithIndex.foreach { - case (result: (Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet), index) => - val parentOrgRow = sheet.createRow(1 + index) - val parentOrg = result._1 - val organisaationTulokset = result._2 + queryResult.foreach(orgResults => { + val parentOrgOid = orgResults._1 + val res = orgResults._2 + + val orgKths = orgResults._2 + if (orgKths.nonEmpty) { + val parentOrgRow = sheet.createRow(currentRowIndex) + currentRowIndex = currentRowIndex + 1 + val parentOrg = orgKths.head._1 + val organisaationTulokset = + orgResults._2 + .flatMap((r: (Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet)) => + r._2.koulutuksetToteutuksetHakukohteet + ) + createOrganisaatioHeadingRow( parentOrgRow, headingCellstyle, - asiointikieli, - Some(parentOrg), + userLng, + parentOrg, organisaationTulokset, raporttiColumnTitlesWithIndex ) - val orgRow = sheet.createRow(2 + index) - createOrganisaatioHeadingRow( - orgRow, - headingCellstyle, - asiointikieli, - organisaationTulokset._1, - organisaationTulokset, - raporttiColumnTitlesWithIndex - ) + res.zipWithIndex.foreach { case ((org, koulutuksetToteutuksetHakukohteet), index) => + val childOrg = koulutuksetToteutuksetHakukohteet.organisaatio + val childOrgOid = childOrg match { + case Some(org) => org.organisaatio_oid + case _ => "" + } + + val koulTotHak = koulutuksetToteutuksetHakukohteet.koulutuksetToteutuksetHakukohteet.toList + + if (parentOrgOid != childOrgOid && childOrgOid != "") { + val orgRow = sheet.createRow(currentRowIndex) + currentRowIndex = currentRowIndex + 1 - val kths = organisaationTulokset.koulutuksetToteutuksetHakukohteet - val firstKth = kths.head - val hakukohteenTiedotRow = sheet.createRow(3 + index) - - for (i <- 0 until firstKth.productArity) yield { - val cell = hakukohteenTiedotRow.createCell(i) - cell.setCellStyle(cellstyle2) - firstKth.productElement(i) match { - case kielistetty: Kielistetty => - val kielistettyValue = kielistetty(Kieli.withName(asiointikieli)) - cell.setCellValue(kielistettyValue) - case string: String => - cell.setCellValue(string) - case Some(s: String) => - cell.setCellValue(s) - case Some(int: Int) => - cell.setCellValue(int) - case Some(b: Boolean) => - val value = if (b) "X" else "-" - cell.setCellValue(value) - case _ => - cell.setCellValue("-") + createOrganisaatioHeadingRow( + orgRow, + headingCellstyle, + userLng, + childOrg.get, //TODO: Muuta param optioniksi + koulTotHak, + raporttiColumnTitlesWithIndex + ) } + + val kths = koulutuksetToteutuksetHakukohteet._2 + var kthsLen = kths.length + kths.zipWithIndex.foreach( + (kth: KoulutuksetToteutuksetHakukohteetResult, resultRowIndex: Int) => { + val hakukohteenTiedotRow = sheet.createRow(currentRowIndex) + currentRowIndex = currentRowIndex + 1 + + for (i <- 0 until kth.productArity) yield { + val cell = hakukohteenTiedotRow.createCell(i) + cell.setCellStyle(cellstyle2) + kth.productElement(i) match { + case kielistetty: Kielistetty => + val kielistettyValue = kielistetty(Kieli.withName(userLng)) + cell.setCellValue(kielistettyValue) + case string: String => + cell.setCellValue(string) + case Some(s: String) => + cell.setCellValue(s) + case Some(int: Int) => + cell.setCellValue(int) + case Some(b: Boolean) => + val value = if (b) "X" else "-" + cell.setCellValue(value) + case _ => + cell.setCellValue("-") + } + } + } + ) } - } + } + }) } catch { case e: Exception => LOG.error(s"Error creating excel: ${e.getMessage}") diff --git a/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/OrganisaatioUtils.scala b/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/OrganisaatioUtils.scala index 1b7e0fa..73d8879 100644 --- a/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/OrganisaatioUtils.scala +++ b/ovara-backend/src/main/scala/fi/oph/ovara/backend/utils/OrganisaatioUtils.scala @@ -3,12 +3,16 @@ package fi.oph.ovara.backend.utils import fi.oph.ovara.backend.domain.* object OrganisaatioUtils { - def recursiveListParentsAndSelf(parentOid: String, orgs: Vector[OrganisaatioParentChild], foundParents: List[Organisaatio] = List()): List[Organisaatio] = { + def recursiveListParentsAndSelf( + parentOid: String, + orgs: Vector[OrganisaatioParentChild], + foundParents: List[Organisaatio] = List() + ): List[Organisaatio] = { if (orgs.isEmpty) { foundParents } else { - val firstOrg = orgs.head - val orgOid = firstOrg.organisaatio.organisaatio_oid + val firstOrg = orgs.head + val orgOid = firstOrg.organisaatio.organisaatio_oid val orgParentOid = firstOrg.parent_oid if (parentOid == orgOid) { firstOrg.organisaatio :: recursiveListParentsAndSelf(orgParentOid, orgs.tail) @@ -20,16 +24,29 @@ object OrganisaatioUtils { } } - def mapOrganisaationHakukohteetToParent(orgs: Vector[OrganisaatioParentChild], organisaatioWithHakukohteet: Map[Option[String], Vector[KoulutuksetToteutuksetHakukohteetResult]]): List[(Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet)] = { - organisaatioWithHakukohteet.map(org => - val orgOid = org._1 - val parents = recursiveListParentsAndSelf(orgOid.get, orgs) - val koulutustoimija = parents.filter(p => p.organisaatiotyypit.contains(KOULUTUSTOIMIJAORGANISAATIOTYYPPI)) - orgs.find(o => o.organisaatio.organisaatio_oid == orgOid.getOrElse(false)) match - case Some(organisaatio) => - Some((koulutustoimija.head, OrganisaationKoulutuksetToteutuksetHakukohteet(Some(organisaatio.organisaatio), org._2))) - case _ => - None - ).toList.flatten + def mapOrganisaationHakukohteetToParent( + orgs: Vector[OrganisaatioParentChild], + organisaatioWithHakukohteet: Map[Option[String], Vector[KoulutuksetToteutuksetHakukohteetResult]] + ): Map[String, List[(Organisaatio, OrganisaationKoulutuksetToteutuksetHakukohteet)]] = { + organisaatioWithHakukohteet + .map(org => { + val orgOid = org._1 + val parents = recursiveListParentsAndSelf(orgOid.get, orgs) + val koulutustoimija = parents.filter(p => p.organisaatiotyypit.contains(KOULUTUSTOIMIJAORGANISAATIOTYYPPI)) + orgs.find(o => o.organisaatio.organisaatio_oid == orgOid.getOrElse(false)) match { + case Some(organisaatio) => + Some( + ( + koulutustoimija.head, + OrganisaationKoulutuksetToteutuksetHakukohteet(Some(organisaatio.organisaatio), org._2) + ) + ) + case _ => + None + } + }) + .toList + .flatten + .groupBy(o => o._1.organisaatio_oid) } } diff --git a/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/ExcelWriterSpec.scala b/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/ExcelWriterSpec.scala index e19db23..9e4a4c1 100644 --- a/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/ExcelWriterSpec.scala +++ b/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/ExcelWriterSpec.scala @@ -5,32 +5,22 @@ import org.apache.poi.xssf.usermodel.{XSSFCellStyle, XSSFSheet, XSSFWorkbook} import org.scalatest.flatspec.AnyFlatSpec class ExcelWriterSpec extends AnyFlatSpec { - val user: User = User(userOid = "1.2.246.562.24.60357717666", authorities = List(), asiointikieli = Some("sv")) + val userLng: String = "sv" "countAloituspaikat" should "return 5 for one hakukohde with 5 aloituspaikkaa" in { - val organisaationKoulutuksetToteutuksetHakukohteet = OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) - ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - hakukohdeNimi = Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - hakukohdeOid = "1.2.246.562.20.00000000000000021565", - koulutuksenTila = Some("julkaistu"), - toteutuksenTila = Some("julkaistu"), - hakukohteenTila = Some("julkaistu"), - aloituspaikat = Some(5), - onValintakoe = Some(false), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) + val organisaationKoulutuksetToteutuksetHakukohteet = List( + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000021565", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("julkaistu"), + hakukohteenTila = Some("julkaistu"), + aloituspaikat = Some(5), + onValintakoe = Some(false), + organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") ) ) @@ -64,35 +54,13 @@ class ExcelWriterSpec extends AnyFlatSpec { aloituspaikat = Some(10) ) - val organisaationKoulutuksetToteutuksetHakukohteet = OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) - ), - Vector(kth, kth2, kth3) - ) + val organisaationKoulutuksetToteutuksetHakukohteet = List(kth, kth2, kth3) assert(ExcelWriter.countAloituspaikat(organisaationKoulutuksetToteutuksetHakukohteet) == 35) } it should "return 0 if there are no results" in { - val organisaationKoulutuksetToteutuksetHakukohteet = OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) - ), - Vector() - ) - - assert(ExcelWriter.countAloituspaikat(organisaationKoulutuksetToteutuksetHakukohteet) == 0) + assert(ExcelWriter.countAloituspaikat(List()) == 0) } "createOrganisaatioHeadingRow" should "create row with org name and total count of aloituspaikat" in { @@ -103,29 +71,19 @@ class ExcelWriterSpec extends AnyFlatSpec { organisaatiotyypit = List("01") ) - val organisaationKoulutuksetToteutuksetHakukohteet = OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) - ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - hakukohdeNimi = Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - hakukohdeOid = "1.2.246.562.20.00000000000000021565", - koulutuksenTila = Some("julkaistu"), - toteutuksenTila = Some("julkaistu"), - hakukohteenTila = Some("julkaistu"), - aloituspaikat = Some(8), - onValintakoe = Some(false), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) + val organisaationKoulutuksetToteutuksetHakukohteet = List( + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000021565", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("julkaistu"), + hakukohteenTila = Some("julkaistu"), + aloituspaikat = Some(8), + onValintakoe = Some(false), + organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") ) ) @@ -134,7 +92,7 @@ class ExcelWriterSpec extends AnyFlatSpec { val row = sheet.createRow(0) val headingCellstyle: XSSFCellStyle = workbook.createCellStyle() val titles = KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES.getOrElse( - user.asiointikieli.get, + userLng, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES.getOrElse("fi", List()) ) val raporttiColumnTitlesWithIndex = titles.zipWithIndex @@ -142,8 +100,8 @@ class ExcelWriterSpec extends AnyFlatSpec { val organisaatioRow = ExcelWriter.createOrganisaatioHeadingRow( row = row, headingCellStyle = headingCellstyle, - asiointikieli = user.asiointikieli.get, - organisaatio = Some(organisaatio), + asiointikieli = userLng, + organisaatio = organisaatio, organisaationKoulutuksetToteutuksetHakukohteet = organisaationKoulutuksetToteutuksetHakukohteet, raporttiColumnTitlesWithIndex = raporttiColumnTitlesWithIndex ) @@ -173,16 +131,15 @@ class ExcelWriterSpec extends AnyFlatSpec { } "writeExcel" should "create one sheet and set 'Yhteenveto' as the name of the sheet" in { - val results = List() - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) + val results = Map("1.2.246.562.10.2781706420000" -> List()) + val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, userLng) assert(wb.getNumberOfSheets == 1) assert(wb.getSheetName(0) == "Yhteenveto") } it should "create one sheet with the column title row and no results" in { - val results = List() - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) - assert(wb.getSheetAt(0).getPhysicalNumberOfRows == 1) + val results = Map("1.2.246.562.10.2781706420000" -> List()) + val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, userLng) assert(wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue == "Hakukohteen nimi SV") assert(wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue == "Hakukohteen oid SV") assert(wb.getSheetAt(0).getRow(0).getCell(2).getStringCellValue == "Kou.tila SV") @@ -193,48 +150,64 @@ class ExcelWriterSpec extends AnyFlatSpec { assert(wb.getSheetAt(0).getRow(0).getCell(7).getStringCellValue == "Voi suorittaa kaksoistutkinnon? SV") assert(wb.getSheetAt(0).getRow(0).getCell(8).getStringCellValue == "Voi suorittaa tutkinnon urheilijana? SV") assert(wb.getSheetAt(0).getRow(1) == null) + assert(wb.getSheetAt(0).getPhysicalNumberOfRows == 1) } - it should "create a sheet with the column title row and one result row for koulutustoimija" in { - val results = List( - ( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.2781706420000", - organisaatio_nimi = - Map(En -> "Koulutustoimijan nimi en", Fi -> "Koulutustoimijan nimi fi", Sv -> "Koulutustoimijan nimi sv"), - organisaatiotyypit = List("01") - ), - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") - ) + it should "create a sheet with the column title row and two result rows for koulutustoimija" in { + val results = Map( + "1.2.246.562.10.2781706420000" -> List( + ( + Organisaatio( + organisaatio_oid = "1.2.246.562.10.2781706420000", + organisaatio_nimi = + Map(En -> "Koulutustoimijan nimi en", Fi -> "Koulutustoimijan nimi fi", Sv -> "Koulutustoimijan nimi sv"), + organisaatiotyypit = List("01") ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - hakukohdeNimi = - Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - hakukohdeOid = "1.2.246.562.20.00000000000000021565", - koulutuksenTila = Some("julkaistu"), - toteutuksenTila = Some("julkaistu"), - hakukohteenTila = Some("julkaistu"), - aloituspaikat = Some(8), - onValintakoe = Some(false), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), - organisaatio_nimi = - Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), - organisaatiotyypit = List("02") + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + organisaatio_oid = "1.2.246.562.10.278170642010", + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") + ) + ), + Vector( + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = + Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000021565", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("julkaistu"), + hakukohteenTila = Some("julkaistu"), + aloituspaikat = Some(8), + onValintakoe = Some(false), + organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") + ), + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = + Map(En -> "Hakukohteen 2 nimi en", Fi -> "Hakukohteen 2 nimi fi", Sv -> "Hakukohteen 2 nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000031232", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("tallennettu"), + hakukohteenTila = Some("tallennettu"), + aloituspaikat = Some(5), + onValintakoe = Some(true), + organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") + ) ) ) ) ) ) - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) + val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, userLng) val sheet = wb.getSheetAt(0) - assert(sheet.getPhysicalNumberOfRows == 4) // Heading row assert(sheet.getRow(0).getCell(0).getStringCellValue == "Hakukohteen nimi SV") assert(sheet.getRow(0).getCell(4).getStringCellValue == "Hak.tila SV") @@ -248,10 +221,9 @@ class ExcelWriterSpec extends AnyFlatSpec { // Parent organisaatio row with aloituspaikat sum assert(sheet.getRow(1).getCell(0).getStringCellValue == "Koulutustoimijan nimi sv") for (i <- 1 until 5) { - println(i) assert(sheet.getRow(1).getCell(i) == null) } - assert(sheet.getRow(1).getCell(5).getNumericCellValue == 8) + assert(sheet.getRow(1).getCell(5).getNumericCellValue == 13) for (i <- 6 until 8) { assert(sheet.getRow(1).getCell(i) == null) } @@ -264,127 +236,164 @@ class ExcelWriterSpec extends AnyFlatSpec { assert(sheet.getRow(3).getCell(4).getStringCellValue == "julkaistu") assert(sheet.getRow(3).getCell(5).getNumericCellValue == 8) assert(sheet.getRow(3).getCell(6).getStringCellValue == "-") + + // Hakukohde 2 result row + assert(sheet.getRow(4).getCell(0).getStringCellValue == "Hakukohteen 2 nimi sv") + assert(sheet.getRow(4).getCell(1).getStringCellValue == "1.2.246.562.20.00000000000000031232") + assert(sheet.getRow(4).getCell(2).getStringCellValue == "julkaistu") + assert(sheet.getRow(4).getCell(3).getStringCellValue == "tallennettu") + assert(sheet.getRow(4).getCell(4).getStringCellValue == "tallennettu") + assert(sheet.getRow(4).getCell(5).getNumericCellValue == 5) + assert(sheet.getRow(4).getCell(6).getStringCellValue == "X") + + assert(sheet.getPhysicalNumberOfRows == 5) } //TODO: Testi jossa ylätason organisaatiolla hakukohteita kts. kälikuva - /*it should "create a sheet with one result row with 'Koe', 'Voi suorittaa kaksoistutkinnon' and 'Voi suorittaa tutkinnon urheilijana' as not defined" in { - val results = List( - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( + it should "create a sheet with two result rows for koulutustoimija and one result row for its oppilaitos" in { + val results = Map( + "1.2.246.562.10.2781706420000" -> List( + ( Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), - organisaatiotyyppi = "01" - ) - ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - hakukohdeNimi = Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - hakukohdeOid = "1.2.246.562.20.00000000000000021565", - koulutuksenTila = Some("julkaistu"), - toteutuksenTila = Some("julkaistu"), - hakukohteenTila = Some("julkaistu"), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_oid = "1.2.246.562.10.2781706420000", organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), + Map(En -> "Koulutustoimijan nimi en", Fi -> "Koulutustoimijan nimi fi", Sv -> "Koulutustoimijan nimi sv"), organisaatiotyypit = List("01") - ) - ) - ) - ) - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) - assert(wb.getSheetAt(0).getPhysicalNumberOfRows == 2) - assert(wb.getSheetAt(0).getRow(1).getCell(0).getStringCellValue == "Hakukohteen nimi sv") - assert(wb.getSheetAt(0).getRow(1).getCell(1).getStringCellValue == "1.2.246.562.20.00000000000000021565") - assert(wb.getSheetAt(0).getRow(1).getCell(2).getStringCellValue == "julkaistu") - assert(wb.getSheetAt(0).getRow(1).getCell(3).getStringCellValue == "julkaistu") - assert(wb.getSheetAt(0).getRow(1).getCell(4).getStringCellValue == "julkaistu") - assert(wb.getSheetAt(0).getRow(1).getCell(5).getStringCellValue == "-") - assert(wb.getSheetAt(0).getRow(1).getCell(6).getStringCellValue == "-") - } - - it should "create a sheet with 'X' as the value for Koe-column when it is set as true" in { - val results = List( - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), - organisaatiotyyppi = "01" + ), + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + organisaatio_oid = "1.2.246.562.10.2781706420000", + organisaatio_nimi = Map( + En -> "Koulutustoimijan nimi en", + Fi -> "Koulutustoimijan nimi fi", + Sv -> "Koulutustoimijan nimi sv" + ), + organisaatiotyypit = List("01") + ) + ), + Vector( + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = + Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000021565", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("julkaistu"), + hakukohteenTila = Some("julkaistu"), + aloituspaikat = Some(8), + onValintakoe = Some(false), + organisaatio_oid = Some("1.2.246.562.10.2781706420000"), + organisaatio_nimi = Map( + En -> "Koulutustoimijan nimi en", + Fi -> "Koulutustoimijan nimi fi", + Sv -> "Koulutustoimijan nimi sv" + ), + organisaatiotyypit = List("01") + ), + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = + Map(En -> "Hakukohteen 2 nimi en", Fi -> "Hakukohteen 2 nimi fi", Sv -> "Hakukohteen 2 nimi sv"), + hakukohdeOid = "1.2.246.562.20.00000000000000031232", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("tallennettu"), + hakukohteenTila = Some("tallennettu"), + aloituspaikat = Some(5), + onValintakoe = Some(true), + organisaatio_oid = Some("1.2.246.562.10.2781706420000"), + organisaatio_nimi = Map( + En -> "Koulutustoimijan nimi en", + Fi -> "Koulutustoimijan nimi fi", + Sv -> "Koulutustoimijan nimi sv" + ), + organisaatiotyypit = List("01") + ) + ) ) ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - "1.2.246.562.20.00000000000000021565", - Some("julkaistu"), - Some("julkaistu"), - Some("julkaistu"), - Some(10), - Some(true), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), - organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), - organisaatiotyypit = List("01") - ) - ) - ) - ) - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) - assert(wb.getSheetAt(0).getRow(1).getCell(6).getStringCellValue == "X") - } - - it should "create a sheet with two rows from two query results" in { - val results = List( - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( + ( Organisaatio( - organisaatio_oid = "1.2.246.562.10.278170642010", - organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), - organisaatiotyyppi = "01" - ) - ), - Vector( - KoulutuksetToteutuksetHakukohteetResult( - Map(En -> "Hakukohteen nimi en", Fi -> "Hakukohteen nimi fi", Sv -> "Hakukohteen nimi sv"), - "1.2.246.562.20.00000000000000021565", - Some("julkaistu"), - Some("julkaistu"), - Some("julkaistu"), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_oid = "1.2.246.562.10.2781706420000", organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), + Map(En -> "Koulutustoimijan nimi en", Fi -> "Koulutustoimijan nimi fi", Sv -> "Koulutustoimijan nimi sv"), organisaatiotyypit = List("01") ), - KoulutuksetToteutuksetHakukohteetResult( - Map(En -> "Hakukohde 2 en", Fi -> "Hakukohde 2 fi", Sv -> "Hakukohde 2 sv"), - "1.2.246.562.20.00000000000000021666", - Some("julkaistu"), - Some("arkistoitu"), - Some("arkistoitu"), - Some(10), - Some(true), - organisaatio_oid = Some("1.2.246.562.10.278170642010"), - organisaatio_nimi = - Map(En -> "Organisaation nimi en", Fi -> "Organisaation nimi fi", Sv -> "Organisaation nimi sv"), - organisaatiotyypit = List("01") + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + organisaatio_oid = "1.2.246.562.10.278170642010", + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") + ) + ), + Vector( + KoulutuksetToteutuksetHakukohteetResult( + hakukohdeNimi = Map( + En -> "Oppilaitoksen hakukohteen nimi en", + Fi -> "Oppilaitoksen hakukohteen nimi fi", + Sv -> "Oppilaitoksen hakukohteen nimi sv" + ), + hakukohdeOid = "1.2.246.562.20.00000000000000089796", + koulutuksenTila = Some("julkaistu"), + toteutuksenTila = Some("julkaistu"), + hakukohteenTila = Some("julkaistu"), + aloituspaikat = Some(10), + onValintakoe = Some(false), + organisaatio_oid = Some("1.2.246.562.10.278170642010"), + organisaatio_nimi = + Map(En -> "Oppilaitoksen nimi en", Fi -> "Oppilaitoksen nimi fi", Sv -> "Oppilaitoksen nimi sv"), + organisaatiotyypit = List("02") + ) + ) ) ) ) ) - val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, user) - assert(wb.getSheetAt(0).getPhysicalNumberOfRows == 3) - assert(wb.getSheetAt(0).getRow(1).getCell(0).getStringCellValue == "Hakukohteen nimi sv") - assert(wb.getSheetAt(0).getRow(2).getCell(0).getStringCellValue == "Hakukohde 2 sv") - assert(wb.getSheetAt(0).getRow(1).getCell(3).getStringCellValue == "julkaistu") - assert(wb.getSheetAt(0).getRow(2).getCell(3).getStringCellValue == "arkistoitu") - assert(wb.getSheetAt(0).getRow(1).getCell(5).getStringCellValue == "-") - assert(wb.getSheetAt(0).getRow(2).getCell(5).getNumericCellValue == 10) - assert(wb.getSheetAt(0).getRow(1).getCell(6).getStringCellValue == "-") - assert(wb.getSheetAt(0).getRow(2).getCell(6).getStringCellValue == "X") - }*/ + val wb = ExcelWriter.writeRaportti(results, KOULUTUKSET_TOTEUTUKSET_HAKUKOHTEET_COLUMN_TITLES, userLng) + val sheet = wb.getSheetAt(0) + // Parent organisaatio row with aloituspaikat sum + assert(sheet.getRow(1).getCell(0).getStringCellValue == "Koulutustoimijan nimi sv") + for (i <- 1 until 5) { + assert(sheet.getRow(1).getCell(i) == null) + } +// assert(sheet.getRow(1).getCell(5).getNumericCellValue == 23) + for (i <- 6 until 8) { + assert(sheet.getRow(1).getCell(i) == null) + } + // Hakukohde result row + assert(sheet.getRow(2).getCell(0).getStringCellValue == "Hakukohteen nimi sv") + assert(sheet.getRow(2).getCell(1).getStringCellValue == "1.2.246.562.20.00000000000000021565") + assert(sheet.getRow(2).getCell(2).getStringCellValue == "julkaistu") + assert(sheet.getRow(2).getCell(3).getStringCellValue == "julkaistu") + assert(sheet.getRow(2).getCell(4).getStringCellValue == "julkaistu") + assert(sheet.getRow(2).getCell(5).getNumericCellValue == 8) + assert(sheet.getRow(2).getCell(6).getStringCellValue == "-") + + // Hakukohde 2 result row + assert(sheet.getRow(3).getCell(0).getStringCellValue == "Hakukohteen 2 nimi sv") + assert(sheet.getRow(3).getCell(1).getStringCellValue == "1.2.246.562.20.00000000000000031232") + assert(sheet.getRow(3).getCell(2).getStringCellValue == "julkaistu") + assert(sheet.getRow(3).getCell(3).getStringCellValue == "tallennettu") + assert(sheet.getRow(3).getCell(4).getStringCellValue == "tallennettu") + assert(sheet.getRow(3).getCell(5).getNumericCellValue == 5) + assert(sheet.getRow(3).getCell(6).getStringCellValue == "X") + + assert(sheet.getRow(4).getCell(0).getStringCellValue == "Oppilaitoksen nimi sv") + for (i <- 1 until 5) { + assert(sheet.getRow(1).getCell(i) == null) + } + assert(sheet.getRow(4).getCell(5).getNumericCellValue == 10) + + // Oppilaitoksen hakukohteen nimi result row + assert(sheet.getRow(5).getCell(0).getStringCellValue == "Oppilaitoksen hakukohteen nimi sv") + assert(sheet.getRow(5).getCell(1).getStringCellValue == "1.2.246.562.20.00000000000000089796") + assert(sheet.getRow(5).getCell(2).getStringCellValue == "julkaistu") + assert(sheet.getRow(5).getCell(3).getStringCellValue == "julkaistu") + assert(sheet.getRow(5).getCell(4).getStringCellValue == "julkaistu") + assert(sheet.getRow(5).getCell(5).getNumericCellValue == 10) + assert(sheet.getRow(5).getCell(6).getStringCellValue == "-") + + assert(sheet.getPhysicalNumberOfRows == 6) + } } diff --git a/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/OrganisaatioUtilsSpec.scala b/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/OrganisaatioUtilsSpec.scala index 07b28f5..ed3a5d0 100644 --- a/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/OrganisaatioUtilsSpec.scala +++ b/ovara-backend/src/test/scala/fi/oph/ovara/backend/utils/OrganisaatioUtilsSpec.scala @@ -215,7 +215,7 @@ class OrganisaatioUtilsSpec extends AnyFlatSpec { ) } - "mapToParent" should "return two hakukohde mapped to koulutustoimija" in { + "mapOrganisaationHakukohteetToParent" should "return two hakukohde mapped to koulutustoimija" in { val orgs = Vector( OrganisaatioParentChild( "1.2.246.562.10.10645749713", @@ -255,22 +255,24 @@ class OrganisaatioUtilsSpec extends AnyFlatSpec { Map( Some("1.2.246.562.10.10645749713") -> Vector(kth, kth2) ) - ) == List( - ( - Organisaatio( - "1.2.246.562.10.10645749713", - Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), - List("01") - ), - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - "1.2.246.562.10.10645749713", - Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), - List("01") - ) + ) == Map( + "1.2.246.562.10.10645749713" -> List( + ( + Organisaatio( + "1.2.246.562.10.10645749713", + Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), + List("01") ), - Vector(kth, kth2) + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + "1.2.246.562.10.10645749713", + Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), + List("01") + ) + ), + Vector(kth, kth2) + ) ) ) ) @@ -326,29 +328,31 @@ class OrganisaatioUtilsSpec extends AnyFlatSpec { Map( Some("1.2.246.562.10.10645749797") -> Vector(kth, kth2) ) - ) == List( - ( - Organisaatio( - "1.2.246.562.10.10645749713", - Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), - List("01") - ), - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - "1.2.246.562.10.10645749797", - Map(En -> "Oppilaitos en", Fi -> "Oppilaitos fi", Sv -> "Oppilaitos sv"), - List("02") - ) + ) == Map( + "1.2.246.562.10.10645749713" -> List( + ( + Organisaatio( + "1.2.246.562.10.10645749713", + Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), + List("01") ), - Vector(kth, kth2) + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + "1.2.246.562.10.10645749797", + Map(En -> "Oppilaitos en", Fi -> "Oppilaitos fi", Sv -> "Oppilaitos sv"), + List("02") + ) + ), + Vector(kth, kth2) + ) ) ) ) ) } - it should "return" in { + it should "return hakukohteet mapped to correct oppilaitos and toimipiste according to hakukohteen järjestyspaikka" in { val orgs = Vector( OrganisaatioParentChild( @@ -437,45 +441,49 @@ class OrganisaatioUtilsSpec extends AnyFlatSpec { OrganisaatioUtils.mapOrganisaationHakukohteetToParent( orgs, Map( - Some("1.2.246.562.10.1064574979797") -> Vector(kth, kth2), + Some("1.2.246.562.10.1064574979797") -> Vector(kth, kth2), Some("1.2.246.562.10.1064574979856") -> Vector(kth3, kth4) ) - ) == List( - ( - Organisaatio( - "1.2.246.562.10.10645749713", - Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), - List("01") - ), - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - "1.2.246.562.10.1064574979797", - Map(En -> "Oppilaitos en", Fi -> "Oppilaitos fi", Sv -> "Oppilaitos sv"), - List("02") - ) + ) == Map( + "1.2.246.562.10.10645749713" -> List( + ( + Organisaatio( + "1.2.246.562.10.10645749713", + Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), + List("01") ), - Vector(kth, kth2) - ) - ), - ( - Organisaatio( - "1.2.246.562.10.10645749713", - Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), - List("01") + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + "1.2.246.562.10.1064574979797", + Map(En -> "Oppilaitos en", Fi -> "Oppilaitos fi", Sv -> "Oppilaitos sv"), + List("02") + ) + ), + Vector(kth, kth2) + ) ), - OrganisaationKoulutuksetToteutuksetHakukohteet( - Some( - Organisaatio( - "1.2.246.562.10.1064574979856", - Map(En -> "Toimipiste en", Fi -> "Toimipiste fi", Sv -> "Toimipiste sv"), - List("03") - ) + ( + Organisaatio( + "1.2.246.562.10.10645749713", + Map(En -> "Koulutustoimija en", Fi -> "Koulutustoimija fi", Sv -> "Koulutustoimija sv"), + List("01") ), - Vector(kth3, kth4) + OrganisaationKoulutuksetToteutuksetHakukohteet( + Some( + Organisaatio( + "1.2.246.562.10.1064574979856", + Map(En -> "Toimipiste en", Fi -> "Toimipiste fi", Sv -> "Toimipiste sv"), + List("03") + ) + ), + Vector(kth3, kth4) + ) ) ) ) ) } + + //TODO: lisää testejä tänne monimutkaisemmalle datalle: miltä data näyttää useammalle oppilaitokselle? }