Skip to content

Commit ae71c36

Browse files
authored
Merge pull request #1418 from navikt/batch_inkluderte_dokumenter
Batch operation for adding and removing tilknyttet saksdokument.
2 parents 41bdc01 + 5f212d6 commit ae71c36

File tree

9 files changed

+213
-29
lines changed

9 files changed

+213
-29
lines changed

src/main/kotlin/no/nav/klage/dokument/service/DokumentUnderArbeidService.kt

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class DokumentUnderArbeidService(
8484
private val kabalJsonToPdfService: KabalJsonToPdfService,
8585
private val tokenUtil: TokenUtil,
8686
private val svarbrevSettingsService: SvarbrevSettingsService,
87+
@Value("\${INNSYNSBEGJAERING_TEMPLATE_ID}") private val innsynsbegjaeringTemplateId: String,
8788
) {
8889
companion object {
8990
@Suppress("JAVA_CLASS_ON_COMPANION")
@@ -467,13 +468,17 @@ class DokumentUnderArbeidService(
467468
parentDocument = parentDocument
468469
)
469470

470-
behandlingService.connectDocumentsToBehandling(
471-
behandlingId = behandling.id,
472-
journalfoertDokumentReferenceSet = journalfoerteDokumenter,
473-
saksbehandlerIdent = innloggetIdent,
474-
systemUserContext = false,
475-
ignoreCheckSkrivetilgang = isCurrentROL
476-
)
471+
val templateId = if (parentDocument is DokumentUnderArbeidAsSmartdokument) parentDocument.smartEditorTemplateId else null
472+
473+
if (templateId != innsynsbegjaeringTemplateId) {
474+
behandlingService.connectDocumentsToBehandling(
475+
behandlingId = behandling.id,
476+
journalfoertDokumentReferenceSet = journalfoerteDokumenter,
477+
saksbehandlerIdent = innloggetIdent,
478+
systemUserContext = false,
479+
ignoreCheckSkrivetilgang = isCurrentROL
480+
)
481+
}
477482
}
478483

479484
val alreadyAddedDocuments =
@@ -1983,6 +1988,27 @@ class DokumentUnderArbeidService(
19831988
behandling.addSaksdokument(saksdokument, saksbehandlerIdent)
19841989
?.also { applicationEventPublisher.publishEvent(it) }
19851990
}
1991+
1992+
publishInternalEvent(
1993+
data = objectMapper.writeValueAsString(
1994+
IncludedDocumentsChangedEvent(
1995+
actor = Employee(
1996+
navIdent = saksbehandlerIdent,
1997+
navn = saksbehandlerService.getNameForIdentDefaultIfNull(saksbehandlerIdent),
1998+
),
1999+
timestamp = LocalDateTime.now(),
2000+
journalfoertDokumentReferenceSet = saksdokumenter.map {
2001+
JournalfoertDokument(
2002+
it.journalpostId,
2003+
it.dokumentInfoId
2004+
)
2005+
}.toSet()
2006+
2007+
)
2008+
),
2009+
behandlingId = behandling.id,
2010+
type = InternalEventType.INCLUDED_DOCUMENTS_ADDED,
2011+
)
19862012
}
19872013
}
19882014

src/main/kotlin/no/nav/klage/oppgave/api/controller/BehandlingDokumentController.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import no.nav.klage.dokument.api.view.JournalfoertDokumentReference
77
import no.nav.klage.kodeverk.Tema
88
import no.nav.klage.oppgave.api.view.BehandlingEditedView
99
import no.nav.klage.oppgave.api.view.DokumenterResponse
10-
import no.nav.klage.oppgave.api.view.TilknyttetDokument
10+
import no.nav.klage.oppgave.api.view.TilknyttetDokumentSet
1111
import no.nav.klage.oppgave.config.SecurityConfiguration.Companion.ISSUER_AAD
1212
import no.nav.klage.oppgave.service.BehandlingService
1313
import no.nav.klage.oppgave.service.InnloggetSaksbehandlerService
@@ -55,7 +55,7 @@ class BehandlingDokumentController(
5555
@PostMapping("/{id}/dokumenttilknytninger")
5656
fun setTilknyttetDokument(
5757
@PathVariable("id") behandlingId: UUID,
58-
@RequestBody input: TilknyttetDokument
58+
@RequestBody input: TilknyttetDokumentSet
5959
): BehandlingEditedView {
6060
logBehandlingMethodDetails(
6161
::setTilknyttetDokument.name,
@@ -65,11 +65,13 @@ class BehandlingDokumentController(
6565
)
6666
val modified = behandlingService.connectDocumentsToBehandling(
6767
behandlingId = behandlingId,
68-
journalfoertDokumentReferenceSet = setOf(
69-
JournalfoertDokumentReference(
70-
journalpostId = input.journalpostId, dokumentInfoId = input.dokumentInfoId,
68+
journalfoertDokumentReferenceSet = if (input.journalpostId != null && input.dokumentInfoId != null) {
69+
setOf(
70+
JournalfoertDokumentReference(
71+
journalpostId = input.journalpostId, dokumentInfoId = input.dokumentInfoId,
72+
)
7173
)
72-
),
74+
} else input.journalfoertDokumentReferenceSet ?: throw Error("Trenger oppgitt dokumentreferanse"),
7375
saksbehandlerIdent = innloggetSaksbehandlerService.getInnloggetIdent(),
7476
systemUserContext = false,
7577
ignoreCheckSkrivetilgang = false,
@@ -78,18 +80,20 @@ class BehandlingDokumentController(
7880
}
7981

8082
@DeleteMapping("/{id}/dokumenttilknytninger")
81-
fun removeAllTilknyttetDokument(
83+
fun batchRemoveTilknyttetDokument(
8284
@PathVariable("id") behandlingId: UUID,
85+
@RequestBody input: TilknyttetDokumentSet?
8386
): BehandlingEditedView {
8487
logBehandlingMethodDetails(
85-
::removeAllTilknyttetDokument.name,
88+
::batchRemoveTilknyttetDokument.name,
8689
innloggetSaksbehandlerService.getInnloggetIdent(),
8790
behandlingId,
8891
logger
8992
)
90-
val modified = behandlingService.disconnectAllDokumenterFromBehandling(
93+
val modified = behandlingService.disconnectDokumenterFromBehandling(
9194
behandlingId = behandlingId,
92-
saksbehandlerIdent = innloggetSaksbehandlerService.getInnloggetIdent()
95+
saksbehandlerIdent = innloggetSaksbehandlerService.getInnloggetIdent(),
96+
journalfoertDokumentReferenceSet = input?.journalfoertDokumentReferenceSet
9397
)
9498
return BehandlingEditedView(modified)
9599
}

src/main/kotlin/no/nav/klage/oppgave/api/view/DokumentView.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.klage.oppgave.api.view
22

3+
import no.nav.klage.dokument.api.view.JournalfoertDokumentReference
34
import java.time.LocalDate
45
import java.time.LocalDateTime
56
import java.util.*
@@ -197,6 +198,13 @@ data class DokumentReferanse(
197198

198199
}
199200

201+
data class TilknyttetDokumentSet(
202+
val journalfoertDokumentReferenceSet: Set<JournalfoertDokumentReference>?,
203+
//TODO: Delete when not needed anymore
204+
val journalpostId: String?,
205+
val dokumentInfoId: String?,
206+
)
207+
200208
data class TilknyttetDokument(val journalpostId: String, val dokumentInfoId: String)
201209

202210
data class JournalfoertDokumentMetadata(

src/main/kotlin/no/nav/klage/oppgave/domain/kafka/InternalBehandlingEvent.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ enum class InternalEventType {
2626
DOCUMENTS_ADDED,
2727
DOCUMENTS_REMOVED,
2828
DOCUMENTS_CHANGED,
29+
INCLUDED_DOCUMENTS_ADDED,
30+
INCLUDED_DOCUMENTS_REMOVED,
31+
INCLUDED_DOCUMENTS_CLEARED,
2932
//Change to SMART_DOCUMENT_LANGUAGE_CHANGED when FE is ready
3033
SMART_DOCUMENT_LANGUAGE,
3134
SMART_DOCUMENT_VERSIONED,
@@ -57,11 +60,22 @@ data class Employee(
5760
val navn: String,
5861
)
5962

63+
data class JournalfoertDokument(
64+
val journalpostId: String,
65+
val dokumentInfoId: String,
66+
)
67+
68+
6069
abstract class BaseEvent(
6170
open val actor: Employee,
6271
open val timestamp: LocalDateTime,
6372
)
6473

74+
data class MinimalEvent(
75+
override val actor: Employee,
76+
override val timestamp: LocalDateTime,
77+
) : BaseEvent(actor = actor, timestamp = timestamp)
78+
6579
data class MedunderskriverEvent(
6680
override val actor: Employee,
6781
override val timestamp: LocalDateTime,
@@ -201,6 +215,12 @@ data class DocumentsAddedEvent(
201215
val documents: List<DokumentView>,
202216
) : BaseEvent(actor = actor, timestamp = timestamp)
203217

218+
data class IncludedDocumentsChangedEvent(
219+
override val actor: Employee,
220+
override val timestamp: LocalDateTime,
221+
val journalfoertDokumentReferenceSet: Set<JournalfoertDokument>
222+
): BaseEvent(actor = actor, timestamp = timestamp)
223+
204224
data class DocumentPatched(
205225
override val actor: Employee,
206226
override val timestamp: LocalDateTime,

src/main/kotlin/no/nav/klage/oppgave/domain/klage/BehandlingSetters.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,10 +552,12 @@ object BehandlingSetters {
552552
klager.id = prosessfullmektig!!.id
553553
klager.partId = prosessfullmektig!!.partId!!
554554
}
555+
555556
sakenGjelder.partId.value -> {
556557
klager.id = sakenGjelder.id
557558
klager.partId = sakenGjelder.partId
558559
}
560+
559561
else -> {
560562
klager.partId = nyVerdi
561563
klager.id = UUID.randomUUID()
@@ -810,6 +812,25 @@ object BehandlingSetters {
810812
return BehandlingEndretEvent(behandling = this, endringslogginnslag = listOfNotNull(endringslogg))
811813
}
812814

815+
fun Behandling.removeSaksdokumenter(
816+
saksdokumentListForRemoval: List<Saksdokument>,
817+
saksbehandlerident: String
818+
): BehandlingEndretEvent {
819+
val existingSaksdokumenter = saksdokumenter.joinToString()
820+
val tidspunkt = LocalDateTime.now()
821+
saksdokumenter.removeIf { saksdokumentListForRemoval.any { saksdokumentForRemoval -> saksdokumentForRemoval.journalpostId == it.journalpostId && saksdokumentForRemoval.dokumentInfoId == it.dokumentInfoId } }
822+
823+
modified = tidspunkt
824+
val endringslogg = Endringslogginnslag.endringslogg(
825+
saksbehandlerident = saksbehandlerident,
826+
felt = Felt.SAKSDOKUMENT,
827+
fraVerdi = existingSaksdokumenter,
828+
tilVerdi = saksdokumenter.joinToString(),
829+
behandlingId = id,
830+
)
831+
return BehandlingEndretEvent(behandling = this, endringslogginnslag = listOfNotNull(endringslogg))
832+
}
833+
813834
fun Behandling.clearSaksdokumenter(
814835
saksbehandlerident: String
815836
): BehandlingEndretEvent {

src/main/kotlin/no/nav/klage/oppgave/service/BehandlingService.kt

Lines changed: 112 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import no.nav.klage.oppgave.domain.klage.AnkeITrygderettenbehandlingSetters.setS
3939
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.addSaksdokumenter
4040
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.clearSaksdokumenter
4141
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.removeSaksdokument
42+
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.removeSaksdokumenter
4243
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.setAvsluttetAvSaksbehandler
4344
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.setExtraUtfallSet
4445
import no.nav.klage.oppgave.domain.klage.BehandlingSetters.setFeilregistrering
@@ -1795,23 +1796,82 @@ class BehandlingService(
17951796
return behandling.modified
17961797
}
17971798

1798-
fun disconnectAllDokumenterFromBehandling(
1799+
fun disconnectDokumenterFromBehandling(
17991800
behandlingId: UUID,
1800-
saksbehandlerIdent: String
1801+
saksbehandlerIdent: String,
1802+
journalfoertDokumentReferenceSet: Set<JournalfoertDokumentReference>?
18011803
): LocalDateTime {
18021804
val behandling = getBehandlingForUpdate(behandlingId)
18031805

1804-
try {
1805-
val event =
1806-
behandling.clearSaksdokumenter(
1807-
saksbehandlerIdent
1806+
if (journalfoertDokumentReferenceSet.isNullOrEmpty()) {
1807+
try {
1808+
val event =
1809+
behandling.clearSaksdokumenter(
1810+
saksbehandlerIdent
1811+
)
1812+
event.let { applicationEventPublisher.publishEvent(it) }
1813+
1814+
publishInternalEvent(
1815+
data = objectMapper.writeValueAsString(
1816+
MinimalEvent(
1817+
actor = Employee(
1818+
navIdent = saksbehandlerIdent,
1819+
navn = saksbehandlerService.getNameForIdentDefaultIfNull(saksbehandlerIdent),
1820+
),
1821+
timestamp = LocalDateTime.now(),
1822+
)
1823+
),
1824+
behandlingId = behandling.id,
1825+
type = InternalEventType.INCLUDED_DOCUMENTS_CLEARED,
18081826
)
1809-
event.let { applicationEventPublisher.publishEvent(it) }
18101827

1811-
return behandling.modified
1812-
} catch (e: Exception) {
1813-
logger.error("Error disconnecting all documents from behandling ${behandling.id}", e)
1814-
throw e
1828+
return behandling.modified
1829+
} catch (e: Exception) {
1830+
logger.error("Error disconnecting all documents from behandling ${behandling.id}", e)
1831+
throw e
1832+
}
1833+
} else {
1834+
val saksdokumenter = journalfoertDokumentReferenceSet.map {
1835+
Saksdokument(
1836+
journalpostId = it.journalpostId,
1837+
dokumentInfoId = it.dokumentInfoId
1838+
)
1839+
}
1840+
1841+
try {
1842+
val event =
1843+
behandling.removeSaksdokumenter(
1844+
saksdokumenter,
1845+
saksbehandlerIdent
1846+
)
1847+
event.let { applicationEventPublisher.publishEvent(it) }
1848+
1849+
publishInternalEvent(
1850+
data = objectMapper.writeValueAsString(
1851+
IncludedDocumentsChangedEvent(
1852+
actor = Employee(
1853+
navIdent = saksbehandlerIdent,
1854+
navn = saksbehandlerService.getNameForIdentDefaultIfNull(saksbehandlerIdent),
1855+
),
1856+
timestamp = LocalDateTime.now(),
1857+
journalfoertDokumentReferenceSet = saksdokumenter.map {
1858+
JournalfoertDokument(
1859+
it.journalpostId,
1860+
it.dokumentInfoId
1861+
)
1862+
}.toSet()
1863+
1864+
)
1865+
),
1866+
behandlingId = behandling.id,
1867+
type = InternalEventType.INCLUDED_DOCUMENTS_REMOVED,
1868+
)
1869+
1870+
return behandling.modified
1871+
} catch (e: Exception) {
1872+
logger.error("Error disconnecting documents from behandling ${behandling.id}", e)
1873+
throw e
1874+
}
18151875
}
18161876
}
18171877

@@ -1907,6 +1967,27 @@ class BehandlingService(
19071967
saksbehandlerident = saksbehandlerIdent
19081968
)
19091969
event.let { applicationEventPublisher.publishEvent(it) }
1970+
1971+
publishInternalEvent(
1972+
data = objectMapper.writeValueAsString(
1973+
IncludedDocumentsChangedEvent(
1974+
actor = Employee(
1975+
navIdent = saksbehandlerIdent,
1976+
navn = saksbehandlerService.getNameForIdentDefaultIfNull(saksbehandlerIdent),
1977+
),
1978+
timestamp = LocalDateTime.now(),
1979+
journalfoertDokumentReferenceSet = saksdokumentsToAdd.map {
1980+
JournalfoertDokument(
1981+
it.journalpostId,
1982+
it.dokumentInfoId
1983+
)
1984+
}.toSet()
1985+
1986+
)
1987+
),
1988+
behandlingId = behandling.id,
1989+
type = InternalEventType.INCLUDED_DOCUMENTS_ADDED,
1990+
)
19101991
}
19111992
}
19121993

@@ -1923,6 +2004,26 @@ class BehandlingService(
19232004
)
19242005
event.let { applicationEventPublisher.publishEvent(it) }
19252006

2007+
publishInternalEvent(
2008+
data = objectMapper.writeValueAsString(
2009+
IncludedDocumentsChangedEvent(
2010+
actor = Employee(
2011+
navIdent = saksbehandlerIdent,
2012+
navn = saksbehandlerService.getNameForIdentDefaultIfNull(saksbehandlerIdent),
2013+
),
2014+
timestamp = LocalDateTime.now(),
2015+
journalfoertDokumentReferenceSet = setOf(
2016+
JournalfoertDokument(
2017+
saksdokument.journalpostId,
2018+
saksdokument.dokumentInfoId
2019+
)
2020+
)
2021+
)
2022+
),
2023+
behandlingId = behandling.id,
2024+
type = InternalEventType.INCLUDED_DOCUMENTS_REMOVED,
2025+
)
2026+
19262027
return behandling
19272028
} catch (e: Exception) {
19282029
logger.error("Error disconnecting document ${saksdokument.id} to behandling ${behandling.id}", e)

src/main/resources/application.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,4 +370,6 @@ SYSTEMBRUKER_IDENT: SYSTEMBRUKER
370370

371371
MINE_KLAGER_MICROFRONTEND_ID: mine-klager-microfrontend
372372

373-
KLAGE_BACKEND_GROUP_ID: S0384EXKSUS
373+
KLAGE_BACKEND_GROUP_ID: S0384EXKSUS
374+
375+
INNSYNSBEGJAERING_TEMPLATE_ID: svar-på-innsynsbegjæring

0 commit comments

Comments
 (0)