Skip to content

Commit

Permalink
Merge pull request #1034 from navikt/vedlegg_rekkefølge
Browse files Browse the repository at this point in the history
Vedlegg rekkefølge
  • Loading branch information
oyvind-wedoe authored Jan 18, 2024
2 parents 8cb9c28 + 01fc75e commit d6346a7
Show file tree
Hide file tree
Showing 5 changed files with 233 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ import no.nav.klage.dokument.clients.kabaljsontopdf.domain.InnholdsfortegnelseRe
import no.nav.klage.dokument.clients.kabaljsontopdf.domain.InnholdsfortegnelseRequest.Document.Type
import no.nav.klage.dokument.clients.kabalsmarteditorapi.model.response.DocumentOutput
import no.nav.klage.dokument.domain.FysiskDokument
import no.nav.klage.dokument.domain.dokumenterunderarbeid.DokumentUnderArbeid
import no.nav.klage.dokument.domain.dokumenterunderarbeid.DokumentUnderArbeidAsSmartdokument
import no.nav.klage.dokument.domain.dokumenterunderarbeid.DokumentUnderArbeidAsVedlegg
import no.nav.klage.dokument.domain.dokumenterunderarbeid.JournalfoertDokumentUnderArbeidAsVedlegg
import no.nav.klage.dokument.domain.dokumenterunderarbeid.*
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.kodeverk.Fagsystem
import no.nav.klage.kodeverk.Tema
Expand Down Expand Up @@ -166,6 +163,7 @@ class DokumentMapper {
journalfoertDokumentReference = journalfoertDokumentReference,
creatorIdent = unproxiedDUA.creatorIdent,
creatorRole = unproxiedDUA.creatorRole,
datoMottatt = if (unproxiedDUA is OpplastetDokumentUnderArbeidAsHoveddokument ) unproxiedDUA.datoMottatt else null,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.klage.dokument.api.view
import com.fasterxml.jackson.databind.JsonNode
import no.nav.klage.dokument.domain.dokumenterunderarbeid.DokumentUnderArbeid
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.*

Expand All @@ -26,6 +27,7 @@ data class DokumentView(
val journalfoertDokumentReference: JournalfoertDokumentReference?,
val creatorIdent: String,
val creatorRole: BehandlingRole,
val datoMottatt: LocalDate?,
) {
data class JournalfoertDokumentReference(
val journalpostId: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import no.nav.klage.oppgave.clients.kabaldocument.model.request.*
import no.nav.klage.oppgave.clients.pdl.PdlFacade
import no.nav.klage.oppgave.domain.klage.Behandling
import no.nav.klage.oppgave.domain.klage.PartId
import no.nav.klage.oppgave.util.getLogger
import no.nav.klage.oppgave.util.getPartIdFromIdentifikator
import no.nav.klage.oppgave.util.getSecureLogger
import no.nav.klage.oppgave.util.*
import org.springframework.stereotype.Service
import java.time.LocalDate

Expand Down Expand Up @@ -47,13 +45,23 @@ class KabalDocumentMapper(
)
} else null

val vedleggMapped = vedlegg.filter { it !is JournalfoertDokumentUnderArbeidAsVedlegg }
.sortedByDescending { it.created }
.map { currentVedlegg ->
mapDokumentUnderArbeidToDokumentReferanse(
dokument = currentVedlegg,
)
}.toMutableList()
val vedleggMapped = if (hovedDokument.dokumentType == DokumentType.KJENNELSE_FRA_TRYGDERETTEN) {
vedlegg.filter { it !is JournalfoertDokumentUnderArbeidAsVedlegg }
.sortedWith(DokumentUnderArbeidTitleComparator())
.map { currentVedlegg ->
mapDokumentUnderArbeidToDokumentReferanse(
dokument = currentVedlegg,
)
}.toMutableList()
} else {
vedlegg.filter { it !is JournalfoertDokumentUnderArbeidAsVedlegg }
.sortedByDescending { it.created }
.map { currentVedlegg ->
mapDokumentUnderArbeidToDokumentReferanse(
dokument = currentVedlegg,
)
}.toMutableList()
}
if (innholdsfortegnelseDocument != null) {
vedleggMapped.add(0, innholdsfortegnelseDocument)
}
Expand Down
29 changes: 29 additions & 0 deletions src/main/kotlin/no/nav/klage/oppgave/util/SortUtil.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package no.nav.klage.oppgave.util

import no.nav.klage.dokument.domain.dokumenterunderarbeid.DokumentUnderArbeid

class DokumentUnderArbeidTitleComparator : Comparator<DokumentUnderArbeid> {
override fun compare(o1: DokumentUnderArbeid, o2: DokumentUnderArbeid): Int {
return compareStringsIncludingNumbers(o1.name, o2.name)
}
}

fun compareStringsIncludingNumbers(a: String, b: String): Int {
val regex = "\\d+|\\D+".toRegex()

val splitA = regex.findAll(a).map { it.value }.toList()
val splitB = regex.findAll(b).map { it.value }.toList()

for ((i, j) in splitA zip splitB) {
val diff = if (i.first().isDigit() && j.first().isDigit()) {
i.toInt().compareTo(j.toInt())
} else {
i.compareTo(j)
}
if (diff != 0) {
return diff
}
}

return 0
}
182 changes: 182 additions & 0 deletions src/test/kotlin/no/nav/klage/oppgave/util/SortUtilTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
package no.nav.klage.oppgave.util


import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

class SortUtilTest {

@Test
fun `a comes before b`() {
assertThat(
listOf("b", "a").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"a",
"b",
)
}

@Test
fun `a is in same order`() {
assertThat(
listOf("a", "a").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"a",
"a",
)
}

@Test
fun `a1 is before a10`() {
assertThat(
listOf("a10", "a1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"a1",
"a10",
)
}

@Test
fun `a_1 is before a_10`() {
assertThat(
listOf("a_10", "a_1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"a_1",
"a_10",
)
}

@Test
fun `vedlegg1 is before vedlegg10`() {
assertThat(
listOf("vedlegg10", "vedlegg1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"vedlegg1",
"vedlegg10",
)
}

@Test
fun `vedlegg 1 is before vedlegg 10`() {
assertThat(
listOf("vedlegg 10", "vedlegg 1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"vedlegg 1",
"vedlegg 10",
)
}

@Test
fun `abc10abc is before abc100abc`() {
assertThat(
listOf("abc100abc", "abc10abc").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"abc10abc",
"abc100abc",
)
}

@Test
fun `1abc is before 10abc`() {
assertThat(
listOf("10abc", "1abc").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"1abc",
"10abc",
)
}

@Test
fun `a is before ab`() {
assertThat(
listOf("ab", "a").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"a",
"ab",
)
}

@Test
fun `abc123 is before abcdef`() {
assertThat(
listOf("abcdef", "abc123").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"abc123",
"abcdef",
)
}

@Test
fun `vedlegg 2 is before vedlegg 10`() {
assertThat(
listOf("vedlegg 10", "vedlegg 2").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"vedlegg 2",
"vedlegg 10",
)
}

@Test
fun `vedlegg 3 del 2 is before vedlegg 3 del 10`() {
assertThat(
listOf("vedlegg 3 del 10", "vedlegg 3 del 2").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"vedlegg 3 del 2",
"vedlegg 3 del 10",
)
}

@Test
fun `vedlegg 2 avsnitt 1 is before vedlegg 10 avsnitt 1`() {
assertThat(
listOf("vedlegg 10 avsnitt 1", "vedlegg 2 avsnitt 1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"vedlegg 2 avsnitt 1",
"vedlegg 10 avsnitt 1",
)
}

@Test
fun `01-05-2014-vedlegg 2 is before 01-05-2014-vedlegg 2`() {
assertThat(
listOf("01-05-2014-vedlegg 2", "01-05-2014-vedlegg 1").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"01-05-2014-vedlegg 1",
"01-05-2014-vedlegg 2",
)
}

@Test
fun `01-05-2014-vedlegg 1 avsnitt 18 is before 01-05-2014-vedlegg 2 avsnitt 16`() {
assertThat(
listOf("01-05-2014-vedlegg 2 avsnitt 16", "01-05-2014-vedlegg 1 avsnitt 18").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"01-05-2014-vedlegg 1 avsnitt 18",
"01-05-2014-vedlegg 2 avsnitt 16",
)
}

@Test
fun `only first number matters`() {
assertThat(
listOf("Vedlegg 2 skutt", "Vedlegg 10 arst", "Vedlegg 3 skatt", "Vedlegg 0 regnskap").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"Vedlegg 0 regnskap",
"Vedlegg 2 skutt",
"Vedlegg 3 skatt",
"Vedlegg 10 arst",
)
}

@Test
fun `only first number matters 2`() {
assertThat(
listOf("Vedlegg2skutt", "Vedlegg10arst", "Vedlegg3skatt", "Vedlegg0regnskap").sortedWith { o1, o2 -> compareStringsIncludingNumbers(o1, o2) }
).containsExactly(
"Vedlegg0regnskap",
"Vedlegg2skutt",
"Vedlegg3skatt",
"Vedlegg10arst",
)
}
}

0 comments on commit d6346a7

Please sign in to comment.