Skip to content

Commit a5a8bba

Browse files
committedFeb 7, 2024
hentSøknadsbehandlingForSøknad kan hente flere søknadsbehandlinger om gangen & håndterer lukk caser der det kan være flere søknadsbehandlinger om gangen
1 parent 692fef7 commit a5a8bba

File tree

20 files changed

+131
-63
lines changed

20 files changed

+131
-63
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
dependencies {
2+
implementation(project(":common:domain"))
3+
implementation(project(":common:infrastructure"))
4+
implementation(project(":behandling:domain"))
5+
implementation(project(":behandling:søknadsbehandling:domain"))
6+
7+
implementation(project(":vilkår:vurderinger"))
8+
implementation(project(":common:domain"))
9+
implementation(project(":vilkår:common"))
10+
implementation(project(":vilkår:uføre:domain"))
11+
implementation(project(":vilkår:pensjon:domain"))
12+
implementation(project(":vilkår:flyktning:domain"))
13+
implementation(project(":vilkår:fastopphold:domain"))
14+
implementation(project(":vilkår:lovligopphold:domain"))
15+
implementation(project(":vilkår:institusjonsopphold:domain"))
16+
implementation(project(":vilkår:utenlandsopphold:domain"))
17+
implementation(project(":vilkår:inntekt:domain"))
18+
implementation(project(":vilkår:formue:domain"))
19+
implementation(project(":vilkår:personligoppmøte:domain"))
20+
implementation(project(":vilkår:opplysningsplikt:domain"))
21+
implementation(project(":vilkår:familiegjenforening:domain"))
22+
implementation(project(":vilkår:bosituasjon"))
23+
implementation(project(":vilkår:skatt:domain"))
24+
}
25+
26+
tasks.named<Jar>("jar") {
27+
archiveBaseName.set("behandling-søknadsbehandling-presentation")
28+
}

‎web/src/main/kotlin/no/nav/su/se/bakover/web/routes/søknadsbehandling/opprett/KunneIkkeOppretteSøknadsbehandlingEx.kt ‎behandling/søknadsbehandling/presentation/src/main/kotlin/behandling/søknadsbehandling/presentation/KunneIkkeOppretteSøknadsbehandlingEx.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package no.nav.su.se.bakover.web.routes.søknadsbehandling.opprett
1+
package behandling.søknadsbehandling.presentation
22

33
import behandling.søknadsbehandling.domain.KunneIkkeOppretteSøknadsbehandling
44
import io.ktor.http.HttpStatusCode
55
import no.nav.su.se.bakover.common.infrastructure.web.Feilresponser
66
import no.nav.su.se.bakover.common.infrastructure.web.errorJson
77

8-
internal fun KunneIkkeOppretteSøknadsbehandling.tilResultat() = when (this) {
8+
fun KunneIkkeOppretteSøknadsbehandling.tilResultat() = when (this) {
99
KunneIkkeOppretteSøknadsbehandling.ErLukket -> Feilresponser.søknadErLukket
1010
KunneIkkeOppretteSøknadsbehandling.ManglerOppgave -> Feilresponser.søknadManglerOppgave
1111
KunneIkkeOppretteSøknadsbehandling.HarÅpenSøknadsbehandling -> HttpStatusCode.BadRequest.errorJson(

‎domain/src/main/kotlin/no/nav/su/se/bakover/domain/sak/Sak.kt

+12-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import no.nav.su.se.bakover.common.domain.sak.SakInfo
1414
import no.nav.su.se.bakover.common.domain.sak.Sakstype
1515
import no.nav.su.se.bakover.common.domain.tidslinje.Tidslinje
1616
import no.nav.su.se.bakover.common.extensions.toNonEmptyList
17+
import no.nav.su.se.bakover.common.extensions.whenever
1718
import no.nav.su.se.bakover.common.ident.NavIdentBruker
1819
import no.nav.su.se.bakover.common.person.Fnr
1920
import no.nav.su.se.bakover.common.tid.Tidspunkt
@@ -308,9 +309,11 @@ data class Sak(
308309
fun harÅpenGjenopptaksbehandling(): Boolean = revurderinger
309310
.filterIsInstance<GjenopptaYtelseRevurdering.SimulertGjenopptakAvYtelse>().isNotEmpty()
310311

311-
fun hentSøknadsbehandlingForSøknad(søknadId: UUID): Either<FantIkkeSøknadsbehandlingForSøknad, Søknadsbehandling> {
312-
return søknadsbehandlinger.singleOrNull { it.søknad.id == søknadId }?.right()
313-
?: FantIkkeSøknadsbehandlingForSøknad.left()
312+
fun hentSøknadsbehandlingForSøknad(søknadId: UUID): Either<FantIkkeSøknadsbehandlingForSøknad, List<Søknadsbehandling>> {
313+
return søknadsbehandlinger.filter { it.søknad.id == søknadId }.whenever(
314+
{ FantIkkeSøknadsbehandlingForSøknad.left() },
315+
{ it.right() },
316+
)
314317
}
315318

316319
internal fun hentGjeldendeVedtaksdataOgSjekkGyldighetForRevurderingsperiode(
@@ -397,7 +400,12 @@ data class Sak(
397400
StatistikkEvent.Søknad.Lukket(lukketSøknad, saksnummer),
398401
)
399402
},
400-
{ søknadsbehandlingSomSkalLukkes ->
403+
{ søknadensBehandlinger ->
404+
// det skal kun finnes 1 søknadsbehandling åpen om gangen
405+
val søknadsbehandlingSomSkalLukkes =
406+
søknadensBehandlinger.singleOrNull { it.søknad.id == søknadId && it.erÅpen() }
407+
?: throw IllegalStateException("Fant ingen, eller flere åpne søknadsbehandlinger for søknad $søknadId. Antall behandlinger funnet ${søknadensBehandlinger.size}")
408+
401409
// Finnes søknadsbehandling. Lukker søknadsbehandlingen, som i sin tur lukker søknaden.
402410
søknadsbehandlingSomSkalLukkes.lukkSøknadsbehandlingOgSøknad(
403411
lukkSøknadCommand = lukkSøknadCommand,

‎domain/src/main/kotlin/no/nav/su/se/bakover/domain/søknadsbehandling/iverksett/avslå/manglendedokumentasjon/AvslåPgaManglendeDokumentasjon.kt

+13-10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import dokument.domain.KunneIkkeLageDokument
99
import no.nav.su.se.bakover.common.domain.Stønadsperiode
1010
import no.nav.su.se.bakover.common.domain.attestering.Attestering
1111
import no.nav.su.se.bakover.common.domain.oppgave.OppgaveId
12+
import no.nav.su.se.bakover.common.extensions.whenever
1213
import no.nav.su.se.bakover.common.ident.NavIdentBruker
1314
import no.nav.su.se.bakover.common.tid.Tidspunkt
1415
import no.nav.su.se.bakover.common.tid.periode.Måned
@@ -51,22 +52,24 @@ fun Sak.avslåSøknadPgaManglendeDokumentasjon(
5152
saksbehandler = command.saksbehandler,
5253
oppdaterOppgave = null,
5354
).getOrElse { return KunneIkkeAvslåSøknad.KunneIkkeOppretteSøknadsbehandling(it).left() }.let {
54-
Pair(it.first, it.third)
55+
Pair(it.first, listOf(it.third))
5556
}
5657
},
5758
{
5859
Pair(this, it)
5960
},
60-
).let { (sak, behandling) ->
61-
avslå(
62-
sak = sak,
63-
søknadsbehandling = (behandling as? KanOppdaterePeriodeBosituasjonVilkår).let {
64-
it
65-
?: throw IllegalArgumentException("Søknadsbehandling var ikke av typen KanOppdaterePeriodeGrunnlagVilkår ved avslag pga. manglende dokumentasjon. Actual: ${behandling::class.qualifiedName}")
61+
).let { (sak, behandlinger) ->
62+
behandlinger.filterIsInstance<KanOppdaterePeriodeBosituasjonVilkår>().whenever(
63+
{ throw IllegalArgumentException("Avslag pga manglende dok. Fant ingen søknadsbehandling, eller Søknadsbehandling var ikke av typen KanOppdaterePeriodeGrunnlagVilkår for sak ${sak.id}, søknad ${command.søknadId}") },
64+
{
65+
avslå(
66+
sak = sak,
67+
søknadsbehandling = it.single(),
68+
request = command,
69+
clock = clock,
70+
formuegrenserFactory = formuegrenserFactory,
71+
)
6672
},
67-
request = command,
68-
clock = clock,
69-
formuegrenserFactory = formuegrenserFactory,
7073
)
7174
}.let {
7275
it.getOrElse {

‎service/src/main/kotlin/no/nav/su/se/bakover/service/søknad/lukk/LukkSøknadService.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@ package no.nav.su.se.bakover.service.søknad.lukk
22

33
import no.nav.su.se.bakover.common.domain.PdfA
44
import no.nav.su.se.bakover.common.person.Fnr
5-
import no.nav.su.se.bakover.domain.Sak
65
import no.nav.su.se.bakover.domain.søknad.LukkSøknadCommand
6+
import no.nav.su.se.bakover.domain.søknad.Søknad
7+
import no.nav.su.se.bakover.domain.søknadsbehandling.LukketSøknadsbehandling
78

89
interface LukkSøknadService {
9-
fun lukkSøknad(command: LukkSøknadCommand): Sak
10+
/**
11+
* Lukker søknaden og eventuell søknadsbehandling.
12+
*
13+
* @return Søknaden, og eventuelt tilhørende behandling som er blitt lukket. Fnr er for audit loggen i route
14+
*/
15+
fun lukkSøknad(command: LukkSøknadCommand): Triple<Søknad.Journalført.MedOppgave.Lukket, LukketSøknadsbehandling?, Fnr>
1016
fun lagBrevutkast(command: LukkSøknadCommand): Pair<Fnr, PdfA>
1117
}

‎service/src/main/kotlin/no/nav/su/se/bakover/service/søknad/lukk/LukkSøknadServiceImpl.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import no.nav.su.se.bakover.common.domain.PdfA
88
import no.nav.su.se.bakover.common.persistence.SessionFactory
99
import no.nav.su.se.bakover.common.persistence.TransactionContext
1010
import no.nav.su.se.bakover.common.person.Fnr
11-
import no.nav.su.se.bakover.domain.Sak
1211
import no.nav.su.se.bakover.domain.oppgave.OppgaveService
1312
import no.nav.su.se.bakover.domain.sak.SakService
1413
import no.nav.su.se.bakover.domain.statistikk.StatistikkEventObserver
1514
import no.nav.su.se.bakover.domain.søknad.LukkSøknadCommand
1615
import no.nav.su.se.bakover.domain.søknad.Søknad
16+
import no.nav.su.se.bakover.domain.søknadsbehandling.LukketSøknadsbehandling
1717
import no.nav.su.se.bakover.domain.søknadsbehandling.SøknadsbehandlingService
1818
import no.nav.su.se.bakover.service.søknad.SøknadService
1919
import org.slf4j.LoggerFactory
@@ -38,7 +38,7 @@ class LukkSøknadServiceImpl(
3838

3939
override fun lukkSøknad(
4040
command: LukkSøknadCommand,
41-
): Sak {
41+
): Triple<Søknad.Journalført.MedOppgave.Lukket, LukketSøknadsbehandling?, Fnr> {
4242
val søknadId = command.søknadId
4343
val sak = sakService.hentSakForSøknad(søknadId).getOrElse {
4444
throw IllegalArgumentException("Fant ikke sak for søknadId $søknadId")
@@ -68,7 +68,8 @@ class LukkSøknadServiceImpl(
6868
// TODO: Fire and forget. Det vil logges i observerne, men vil ikke kunne resende denne dersom dette feiler.
6969
e.handle(it.hendelse)
7070
}
71-
it.sak
71+
72+
Triple(it.søknad, it.søknadsbehandling, it.sak.fnr)
7273
}
7374
}
7475
}

‎service/src/test/kotlin/no/nav/su/se/bakover/service/søknad/AvslåSøknadManglendeDokumentasjonServiceImplTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ internal class AvslåSøknadManglendeDokumentasjonServiceImplTest {
381381
fritekstTilBrev = "fritekstTilBrev",
382382
),
383383
)
384-
}.message shouldBe "Søknadsbehandling var ikke av typen KanOppdaterePeriodeGrunnlagVilkår ved avslag pga. manglende dokumentasjon. Actual: no.nav.su.se.bakover.domain.søknadsbehandling.IverksattSøknadsbehandling.Innvilget"
384+
}.message shouldBe "Avslag pga manglende dok. Fant ingen søknadsbehandling, eller Søknadsbehandling var ikke av typen KanOppdaterePeriodeGrunnlagVilkår for sak ${sak.id}, søknad $søknadId"
385385
verify(serviceAndMocks.sakService).hentSakForSøknad(søknadId)
386386
serviceAndMocks.verifyNoMoreInteractions()
387387
}

‎service/src/test/kotlin/no/nav/su/se/bakover/service/søknad/lukk/LukkSøknadServiceImpl_lukkSøknadOgSøknadsbehandlingTest.kt

+8-15
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ import no.nav.su.se.bakover.common.extensions.februar
1414
import no.nav.su.se.bakover.common.extensions.januar
1515
import no.nav.su.se.bakover.common.extensions.startOfDay
1616
import no.nav.su.se.bakover.common.persistence.SessionFactory
17+
import no.nav.su.se.bakover.common.person.Fnr
1718
import no.nav.su.se.bakover.domain.Sak
1819
import no.nav.su.se.bakover.domain.brev.command.AvvistSøknadDokumentCommand
1920
import no.nav.su.se.bakover.domain.brev.command.TrukketSøknadDokumentCommand
2021
import no.nav.su.se.bakover.domain.oppgave.OppgaveService
2122
import no.nav.su.se.bakover.domain.sak.FantIkkeSak
2223
import no.nav.su.se.bakover.domain.sak.SakService
23-
import no.nav.su.se.bakover.domain.sak.oppdaterSøknadsbehandling
2424
import no.nav.su.se.bakover.domain.statistikk.StatistikkEvent
2525
import no.nav.su.se.bakover.domain.statistikk.StatistikkEventObserver
2626
import no.nav.su.se.bakover.domain.søknad.LukkSøknadCommand
@@ -148,9 +148,9 @@ internal class LukkSøknadServiceImpl_lukkSøknadOgSøknadsbehandlingTest {
148148
),
149149

150150
).let { serviceAndMocks ->
151-
shouldThrow<IllegalArgumentException> {
151+
shouldThrow<IllegalStateException> {
152152
serviceAndMocks.lukkSøknad()
153-
}.message shouldBe "Kunne ikke lukke søknad ${søknad.id} og søknadsbehandling. Underliggende feil: KanIkkeLukkeEnIverksattSøknadsbehandling"
153+
}.message shouldBe "Fant ingen, eller flere åpne søknadsbehandlinger for søknad ${søknad.id}. Antall behandlinger funnet 1"
154154

155155
serviceAndMocks.verifyHentSakForSøknad()
156156
serviceAndMocks.verifyNoMoreInteractions()
@@ -171,9 +171,9 @@ internal class LukkSøknadServiceImpl_lukkSøknadOgSøknadsbehandlingTest {
171171
),
172172

173173
).let { serviceAndMocks ->
174-
shouldThrow<IllegalArgumentException> {
174+
shouldThrow<IllegalStateException> {
175175
serviceAndMocks.lukkSøknad()
176-
}.message shouldBe "Kunne ikke lukke søknad ${søknad.id} og søknadsbehandling. Underliggende feil: KanIkkeLukkeEnAlleredeLukketSøknadsbehandling"
176+
}.message shouldBe "Fant ingen, eller flere åpne søknadsbehandlinger for søknad ${søknad.id}. Antall behandlinger funnet 1"
177177

178178
serviceAndMocks.verifyHentSakForSøknad()
179179
serviceAndMocks.verifyNoMoreInteractions()
@@ -392,7 +392,7 @@ internal class LukkSøknadServiceImpl_lukkSøknadOgSøknadsbehandlingTest {
392392
sessionFactory = sessionFactory,
393393
).apply { addObserver(lukkSøknadServiceObserver) }
394394

395-
fun lukkSøknad(): Sak = lukkSøknadService.lukkSøknad(
395+
fun lukkSøknad(): Triple<Søknad.Journalført.MedOppgave.Lukket, LukketSøknadsbehandling?, Fnr> = lukkSøknadService.lukkSøknad(
396396
lukkSøknadCommand,
397397
)
398398

@@ -475,15 +475,8 @@ internal class LukkSøknadServiceImpl_lukkSøknadOgSøknadsbehandlingTest {
475475
verifyNoMoreInteractions()
476476
}
477477

478-
fun expectedSak(): Sak {
479-
return sak!!.let {
480-
if (søknadsbehandling != null) {
481-
it.oppdaterSøknadsbehandling(expectedLukketSøknadsbehandling())
482-
} else {
483-
it
484-
}
485-
}.copy(søknader = listOf(expectedLukketSøknad()))
486-
}
478+
fun expectedSak(): Triple<Søknad.Journalført.MedOppgave.Lukket, LukketSøknadsbehandling?, Fnr> =
479+
Triple(expectedLukketSøknad(), if (søknadsbehandling != null) expectedLukketSøknadsbehandling() else null, sak!!.fnr)
487480

488481
fun expectedLukketSøknadsbehandling() = LukketSøknadsbehandling.createFromPersistedState(
489482
søknadsbehandling = søknadsbehandling!!,

‎settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ include("behandling:klage:domain")
1212
include("behandling:regulering:domain")
1313
include("behandling:revurdering:domain")
1414
include("behandling:søknadsbehandling:domain")
15+
include("behandling:søknadsbehandling:presentation")
1516
include("beregning")
1617
include("client")
1718
include("common:domain")

‎vedtak/application/src/main/kotlin/no/nav/su/se/bakover/vedtak/application/VedtakServiceImpl.kt

+8-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import no.nav.su.se.bakover.domain.oppgave.OppgaveService
1313
import no.nav.su.se.bakover.domain.revurdering.RevurderingId
1414
import no.nav.su.se.bakover.domain.sak.SakService
1515
import no.nav.su.se.bakover.domain.søknadsbehandling.Søknadsbehandling
16+
import no.nav.su.se.bakover.domain.søknadsbehandling.SøknadsbehandlingRepo
1617
import no.nav.su.se.bakover.domain.søknadsbehandling.opprett.opprettNySøknadsbehandling
1718
import no.nav.su.se.bakover.domain.vedtak.Avslagsvedtak
1819
import no.nav.su.se.bakover.domain.vedtak.InnvilgetForMåned
@@ -33,6 +34,7 @@ class VedtakServiceImpl(
3334
private val sakService: SakService,
3435
private val oppgaveService: OppgaveService,
3536
private val personservice: PersonService,
37+
private valknadsbehandlingRepo: SøknadsbehandlingRepo,
3638
private val clock: Clock,
3739
) : VedtakService {
3840
private val log = LoggerFactory.getLogger(this::class.java)
@@ -106,7 +108,12 @@ class VedtakServiceImpl(
106108
}.mapLeft {
107109
log.error("Feil ved henting av aktør id for opprettelse av oppgave for ny søknadsbehandling for vedtak $vedtakId. original feil $it")
108110
}
109-
it.third
111+
112+
// TODO - vi må sette ny oppgave id på behandlingen dersom opprettOppgave er right
113+
114+
it.third.also {
115+
søknadsbehandlingRepo.lagre(it)
116+
}
110117
}.mapLeft {
111118
KunneIkkeStarteNySøknadsbehandling.FeilVedOpprettelseAvSøknadsbehandling(it)
112119
}

‎vedtak/application/src/test/kotlin/no/nav/su/se/bakover/vedtak/application/VedtakServiceImplTest.kt

+13-4
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,29 @@ package no.nav.su.se.bakover.vedtak.application
22

33
import arrow.core.right
44
import io.kotest.assertions.arrow.core.shouldBeLeft
5-
import io.kotest.assertions.arrow.core.shouldBeRight
65
import no.nav.su.se.bakover.common.domain.sak.Sakstype
76
import no.nav.su.se.bakover.common.person.AktørId
87
import no.nav.su.se.bakover.domain.oppgave.OppgaveConfig
98
import no.nav.su.se.bakover.domain.oppgave.OppgaveService
109
import no.nav.su.se.bakover.domain.sak.SakService
10+
import no.nav.su.se.bakover.domain.søknadsbehandling.SøknadsbehandlingRepo
1111
import no.nav.su.se.bakover.domain.vedtak.VedtakRepo
1212
import no.nav.su.se.bakover.test.argShouldBe
1313
import no.nav.su.se.bakover.test.enUkeEtterFixedClock
14+
import no.nav.su.se.bakover.test.getOrFail
1415
import no.nav.su.se.bakover.test.oppgave.nyOppgaveHttpKallResponse
1516
import no.nav.su.se.bakover.test.saksbehandler
1617
import no.nav.su.se.bakover.test.vedtakRevurdering
1718
import no.nav.su.se.bakover.test.vedtakSøknadsbehandlingIverksattAvslagUtenBeregning
1819
import org.junit.jupiter.api.Test
1920
import org.mockito.kotlin.any
21+
import org.mockito.kotlin.anyOrNull
22+
import org.mockito.kotlin.doNothing
2023
import org.mockito.kotlin.doReturn
2124
import org.mockito.kotlin.mock
2225
import org.mockito.kotlin.verify
2326
import org.mockito.kotlin.verifyNoMoreInteractions
27+
import org.mockito.kotlin.whenever
2428
import person.domain.PersonService
2529
import java.time.Clock
2630
import java.util.UUID
@@ -36,10 +40,12 @@ class VedtakServiceImplTest {
3640
val personService = mock<PersonService> { on { hentAktørId(any()) } doReturn AktørId("123").right() }
3741
val oppgaveService =
3842
mock<OppgaveService> { on { opprettOppgave(any()) } doReturn nyOppgaveHttpKallResponse().right() }
43+
val søknadsbehandlingRepo = mock<SøknadsbehandlingRepo> {
44+
doNothing().whenever(it).lagre(any(), anyOrNull())
45+
}
46+
val service = Services(vedtakRepo, sakService, oppgaveService, personService, søknadsbehandlingRepo)
3947

40-
val service = Services(vedtakRepo, sakService, oppgaveService, personService)
41-
42-
service.testableService().startNySøknadsbehandlingForAvslag(vedtak.id, saksbehandler).shouldBeRight()
48+
val actual = service.testableService().startNySøknadsbehandlingForAvslag(vedtak.id, saksbehandler).getOrFail()
4349

4450
verify(vedtakRepo).hentVedtakForId(argShouldBe(vedtak.id))
4551
verify(sakService).hentSakForVedtak(argShouldBe(vedtak.id))
@@ -56,6 +62,7 @@ class VedtakServiceImplTest {
5662
),
5763
),
5864
)
65+
verify(søknadsbehandlingRepo).lagre(argShouldBe(actual), anyOrNull())
5966

6067
service.verifyNoMoreInteractions()
6168
}
@@ -76,13 +83,15 @@ class VedtakServiceImplTest {
7683
private val sakService: SakService = mock(),
7784
private val oppgaveService: OppgaveService = mock(),
7885
private val personService: PersonService = mock(),
86+
private valknadsbehandlingRepo: SøknadsbehandlingRepo = mock(),
7987
private val clock: Clock = enUkeEtterFixedClock,
8088
) {
8189
fun testableService() = VedtakServiceImpl(
8290
vedtakRepo = vedtakRepo,
8391
sakService = sakService,
8492
oppgaveService = oppgaveService,
8593
personservice = personService,
94+
søknadsbehandlingRepo = søknadsbehandlingRepo,
8695
clock = clock,
8796
)
8897

‎web/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ avro {
1010
dependencies {
1111
implementation(project(":behandling:domain"))
1212
implementation(project(":behandling:søknadsbehandling:domain"))
13+
implementation(project(":behandling:søknadsbehandling:presentation"))
1314
implementation(project(":behandling:revurdering:domain"))
1415
implementation(project(":beregning"))
1516
implementation(project(":client"))

‎web/src/main/kotlin/no/nav/su/se/bakover/web/routes/søknad/SøknadJson.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ fun Søknad.toJson(): SøknadJson {
3030
sakId = sakId.toString(),
3131
søknadInnhold = søknadInnhold.toSøknadsinnholdJson(),
3232
opprettet = DateTimeFormatter.ISO_INSTANT.format(opprettet),
33-
lukket = if (this is Søknad.Journalført.MedOppgave.Lukket) this.toJson() else null,
33+
lukket = if (this is Søknad.Journalført.MedOppgave.Lukket) this.toLukketJson() else null,
3434
)
3535
}
3636

37-
internal fun Søknad.Journalført.MedOppgave.Lukket.toJson() = LukketJson(
37+
internal fun Søknad.Journalført.MedOppgave.Lukket.toLukketJson() = LukketJson(
3838
tidspunkt = DateTimeFormatter.ISO_INSTANT.format(lukketTidspunkt),
3939
saksbehandler = lukketAv.toString(),
4040
type = when (this) {

‎web/src/main/kotlin/no/nav/su/se/bakover/web/routes/søknad/SøknadRoutes.kt

+21-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.su.se.bakover.web.routes.søknad
22

3+
import behandling.søknadsbehandling.presentation.tilResultat
34
import io.ktor.http.ContentType
45
import io.ktor.http.HttpStatusCode.Companion.BadRequest
56
import io.ktor.http.HttpStatusCode.Companion.Created
@@ -49,9 +50,10 @@ import no.nav.su.se.bakover.web.routes.søknad.lukk.LukkSøknadInputHandler
4950
import no.nav.su.se.bakover.web.routes.søknad.søknadinnholdJson.FeilVedOpprettelseAvEktefelleJson
5051
import no.nav.su.se.bakover.web.routes.søknad.søknadinnholdJson.KunneIkkeLageSøknadinnhold
5152
import no.nav.su.se.bakover.web.routes.søknad.søknadinnholdJson.SøknadsinnholdJson
53+
import no.nav.su.se.bakover.web.routes.søknadsbehandling.SøknadsbehandlingJson
5254
import no.nav.su.se.bakover.web.routes.søknadsbehandling.attester.tilResultat
5355
import no.nav.su.se.bakover.web.routes.søknadsbehandling.iverksett.tilResultat
54-
import no.nav.su.se.bakover.web.routes.søknadsbehandling.opprett.tilResultat
56+
import no.nav.su.se.bakover.web.routes.søknadsbehandling.toJson
5557
import no.nav.su.se.bakover.web.routes.vilkår.opplysningsplikt.tilResultat
5658
import vilkår.formue.domain.FormuegrenserFactory
5759
import java.time.Clock
@@ -138,6 +140,11 @@ internal fun Route.søknadRoutes(
138140
}
139141

140142
post("$SØKNAD_PATH/{søknadId}/lukk") {
143+
data class LukkSøknadResponse(
144+
val lukketSøknad: SøknadJson,
145+
val lukketSøknadsbehandling: SøknadsbehandlingJson?,
146+
)
147+
141148
authorize(Brukerrolle.Saksbehandler) {
142149
call.withSøknadId { søknadId ->
143150
LukkSøknadInputHandler.handle(
@@ -150,20 +157,22 @@ internal fun Route.søknadRoutes(
150157
}.map { request ->
151158
lukkSøknadService.lukkSøknad(request).let {
152159
call.audit(
153-
berørtBruker = it.fnr,
160+
berørtBruker = it.third,
154161
action = AuditLogEvent.Action.UPDATE,
155-
behandlingId = it.hentSøknadsbehandlingForSøknad(søknadId).fold(
156-
{
157-
// Her bruker vi søknadId siden det ikke er opprettet en søknadsbehandling enda
158-
søknadId
159-
},
160-
{
161-
it.id.value
162-
},
163-
),
162+
behandlingId = it.second?.id?.value ?: it.first.id,
164163
)
165164
call.sikkerlogg("Lukket søknad for søknad: $søknadId")
166-
call.svar(Resultat.json(OK, serialize(it.toJson(clock, formuegrenserFactory))))
165+
call.svar(
166+
Resultat.json(
167+
OK,
168+
serialize(
169+
LukkSøknadResponse(
170+
lukketSøknad = it.first.toJson(),
171+
lukketSøknadsbehandling = it.second?.toJson(formuegrenserFactory),
172+
),
173+
),
174+
),
175+
)
167176
}
168177
}
169178
}

‎web/src/main/kotlin/no/nav/su/se/bakover/web/routes/søknadsbehandling/SøknadsbehandlingRoutes.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package no.nav.su.se.bakover.web.routes.søknadsbehandling
22

33
import arrow.core.Either
44
import arrow.core.right
5+
import behandling.søknadsbehandling.presentation.tilResultat
56
import io.ktor.http.ContentType
67
import io.ktor.http.HttpStatusCode.Companion.BadRequest
78
import io.ktor.http.HttpStatusCode.Companion.Created
@@ -60,7 +61,6 @@ import no.nav.su.se.bakover.web.routes.dokument.tilResultat
6061
import no.nav.su.se.bakover.web.routes.sak.SAK_PATH
6162
import no.nav.su.se.bakover.web.routes.søknadsbehandling.attester.tilResultat
6263
import no.nav.su.se.bakover.web.routes.søknadsbehandling.beregning.OppdaterStønadsperiodeRequest
63-
import no.nav.su.se.bakover.web.routes.søknadsbehandling.opprett.tilResultat
6464
import no.nav.su.se.bakover.web.routes.søknadsbehandling.vilkårOgGrunnlag.tilResultat
6565
import no.nav.su.se.bakover.web.routes.tilResultat
6666
import org.slf4j.LoggerFactory

‎web/src/main/kotlin/no/nav/su/se/bakover/web/routes/vedtak/VedtakRoutes.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.su.se.bakover.web.routes.vedtak
22

3+
import behandling.søknadsbehandling.presentation.tilResultat
34
import io.ktor.http.HttpStatusCode
45
import io.ktor.server.application.call
56
import io.ktor.server.routing.Route
@@ -14,16 +15,15 @@ import no.nav.su.se.bakover.vedtak.application.VedtakService
1415
import no.nav.su.se.bakover.vedtak.domain.KunneIkkeStarteNySøknadsbehandling
1516
import no.nav.su.se.bakover.web.routes.sak.SAK_PATH
1617
import no.nav.su.se.bakover.web.routes.søknadsbehandling.jsonBody
17-
import no.nav.su.se.bakover.web.routes.søknadsbehandling.opprett.tilResultat
1818
import vilkår.formue.domain.FormuegrenserFactory
1919

2020
internal const val VEDTAK_PATH = "$SAK_PATH/{sakId}/vedtak}"
2121

22-
internal fun Route.vedtakRoutes(
22+
fun Route.vedtakRoutes(
2323
vedtakService: VedtakService,
2424
formuegrenserFactory: FormuegrenserFactory,
2525
) {
26-
post("$VEDTAK_PATH/{vedtakId}/nyBehandling") {
26+
post("$VEDTAK_PATH/{vedtakId}/nySoknadsbehandling") {
2727
call.withVedtakId {
2828
vedtakService.startNySøknadsbehandlingForAvslag(it, call.suUserContext.saksbehandler).fold(
2929
ifLeft = { call.svar(it.tilResultat()) },

‎web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ open class AccessCheckProxy(
497497
}
498498
},
499499
lukkSøknad = object : LukkSøknadService {
500-
override fun lukkSøknad(command: LukkSøknadCommand): Sak {
500+
override fun lukkSøknad(command: LukkSøknadCommand): Triple<Søknad.Journalført.MedOppgave.Lukket, LukketSøknadsbehandling?, Fnr> {
501501
assertHarTilgangTilSøknad(command.søknadId)
502502

503503
return services.lukkSøknad.lukkSøknad(command)

‎web/src/main/kotlin/no/nav/su/se/bakover/web/services/ServiceBuilder.kt

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ data object ServiceBuilder {
108108
sakService = sakService,
109109
personservice = personService,
110110
oppgaveService = oppgaveService,
111+
søknadsbehandlingRepo = databaseRepos.søknadsbehandling,
111112
clock = clock,
112113
)
113114
val ferdigstillVedtakService = FerdigstillVedtakServiceImpl(

‎web/src/test/kotlin/no/nav/su/se/bakover/web/routes/søknad/SøknadRoutesKtTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ internal class SøknadRoutesKtTest {
3434
fun `ok lukking av søknad svarer med OK`() {
3535
testApplication {
3636
application {
37+
val sakMedLukketSøknad = nySakMedLukketSøknad()
3738
testSusebakoverWithMockedDb(
3839
services = TestServicesBuilder.services(
39-
lukkSøknad = mock { on { lukkSøknad(any()) } doReturn nySakMedLukketSøknad().first },
40+
lukkSøknad = mock { on { lukkSøknad(any()) } doReturn Triple(sakMedLukketSøknad.second, null, sakMedLukketSøknad.first.fnr) },
4041
),
4142
)
4243
}

‎web/src/test/kotlin/no/nav/su/se/bakover/web/routes/søknad/UføresøknadJsonTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ internal class UføresøknadJsonTest {
183183
"dokumenttilstand": "IKKE_GENERERT_ENDA"
184184
}
185185
""".trimIndent()
186-
JSONAssert.assertEquals(expectedJson, serialize(trukket.toJson()), true)
186+
JSONAssert.assertEquals(expectedJson, serialize(trukket.toLukketJson()), true)
187187
deserialize<LukketJson>(expectedJson) shouldBe LukketJson(
188188
tidspunkt = "2021-01-01T01:02:03.456789Z",
189189
saksbehandler = "saksbehandler",

0 commit comments

Comments
 (0)
Please sign in to comment.