Skip to content

Commit 4eadfd6

Browse files
authored
Merge pull request #5313 from navikt/feature/repliker-status-fra-tiltaksokonomi
Feature/repliker status fra tiltaksokonomi
2 parents 5b2d4c8 + 5cc3ea8 commit 4eadfd6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+338
-205
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package no.nav.tiltak.okonomi
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class BestillingStatus(
7+
val bestillingsnummer: String,
8+
val status: BestillingStatusType,
9+
)
10+
11+
enum class BestillingStatusType {
12+
SENDT,
13+
AKTIV,
14+
ANNULLERT,
15+
FRIGJORT,
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package no.nav.tiltak.okonomi
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class FakturaStatus(
7+
val fakturanummer: String,
8+
val status: FakturaStatusType,
9+
)
10+
11+
enum class FakturaStatusType {
12+
SENDT,
13+
UTBETALT,
14+
}

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/ApplicationConfig.kt

+2
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ data class KafkaProducers(
9595

9696
data class KafkaConsumers(
9797
val gjennomforingerV1: KafkaTopicConsumer.Config,
98+
val replicateBestillingStatus: KafkaTopicConsumer.Config,
99+
val replicateFakturaStatus: KafkaTopicConsumer.Config,
98100
val amtDeltakerV1: KafkaTopicConsumer.Config,
99101
val amtVirksomheterV1: KafkaTopicConsumer.Config,
100102
val amtArrangorMeldingV1: KafkaTopicConsumer.Config,

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/ApplicationConfigDev.kt

+8
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ val ApplicationConfigDev = AppConfig(
8080
id = "amt-tiltakskoordinators-deltakerliste",
8181
topic = "amt.tiltakskoordinators-deltakerliste-v1",
8282
),
83+
replicateBestillingStatus = KafkaTopicConsumer.Config(
84+
id = "replicate-bestilling-status",
85+
topic = "team-mulighetsrommet.tiltaksokonomi.bestilling-status-v1",
86+
),
87+
replicateFakturaStatus = KafkaTopicConsumer.Config(
88+
id = "replicate-faktura-status",
89+
topic = "team-mulighetsrommet.tiltaksokonomi.faktura-status-v1",
90+
),
8391
),
8492
),
8593
auth = AuthConfig(

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/ApplicationConfigLocal.kt

+8
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,14 @@ val ApplicationConfigLocal = AppConfig(
9191
id = "amt-tiltakskoordinators-deltakerliste",
9292
topic = "amt.tiltakskoordinators-deltakerliste-v1",
9393
),
94+
replicateBestillingStatus = KafkaTopicConsumer.Config(
95+
id = "replicate-bestilling-status",
96+
topic = "tiltaksokonomi.bestilling-status-v1",
97+
),
98+
replicateFakturaStatus = KafkaTopicConsumer.Config(
99+
id = "replicate-faktura-status",
100+
topic = "tiltaksokonomi.faktura-status-v1",
101+
),
94102
),
95103
),
96104
auth = AuthConfig(

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/ApplicationConfigProd.kt

+8
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ val ApplicationConfigProd = AppConfig(
8080
id = "amt-tiltakskoordinators-deltakerliste",
8181
topic = "amt.tiltakskoordinators-deltakerliste-v1",
8282
),
83+
replicateBestillingStatus = KafkaTopicConsumer.Config(
84+
id = "replicate-bestilling-status",
85+
topic = "team-mulighetsrommet.tiltaksokonomi.bestilling-status-v1",
86+
),
87+
replicateFakturaStatus = KafkaTopicConsumer.Config(
88+
id = "replicate-faktura-status",
89+
topic = "team-mulighetsrommet.tiltaksokonomi.faktura-status-v1",
90+
),
8391
),
8492
),
8593
auth = AuthConfig(

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/OkonomiClient.kt

-38
This file was deleted.

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/plugins/DependencyInjection.kt

+7-12
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ import no.nav.mulighetsrommet.api.tasks.GenerateValidationReport
5959
import no.nav.mulighetsrommet.api.tasks.NotifyFailedKafkaEvents
6060
import no.nav.mulighetsrommet.api.tilsagn.OkonomiBestillingService
6161
import no.nav.mulighetsrommet.api.tilsagn.TilsagnService
62+
import no.nav.mulighetsrommet.api.tilsagn.kafka.ReplicateOkonomiBestillingStatus
6263
import no.nav.mulighetsrommet.api.tiltakstype.TiltakstypeService
6364
import no.nav.mulighetsrommet.api.tiltakstype.kafka.SisteTiltakstyperV2KafkaProducer
6465
import no.nav.mulighetsrommet.api.tiltakstype.task.InitialLoadTiltakstyper
6566
import no.nav.mulighetsrommet.api.utbetaling.HentAdressebeskyttetPersonBolkPdlQuery
6667
import no.nav.mulighetsrommet.api.utbetaling.UtbetalingService
6768
import no.nav.mulighetsrommet.api.utbetaling.kafka.AmtArrangorMeldingV1KafkaConsumer
6869
import no.nav.mulighetsrommet.api.utbetaling.kafka.AmtDeltakerV1KafkaConsumer
70+
import no.nav.mulighetsrommet.api.utbetaling.kafka.ReplicateOkonomiFakturaStatus
6971
import no.nav.mulighetsrommet.api.utbetaling.task.GenerateUtbetaling
7072
import no.nav.mulighetsrommet.api.utbetaling.task.JournalforUtbetaling
7173
import no.nav.mulighetsrommet.api.veilederflate.services.BrukerService
@@ -165,18 +167,11 @@ private fun kafka(appConfig: AppConfig) = module {
165167
db = get(),
166168
utbetalingService = get(),
167169
),
168-
AmtVirksomheterV1KafkaConsumer(
169-
config = config.consumers.amtVirksomheterV1,
170-
get(),
171-
),
172-
AmtArrangorMeldingV1KafkaConsumer(
173-
config = config.consumers.amtArrangorMeldingV1,
174-
db = get(),
175-
),
176-
AmtKoordinatorGjennomforingV1KafkaConsumer(
177-
config = config.consumers.amtKoordinatorMeldingV1,
178-
db = get(),
179-
),
170+
AmtVirksomheterV1KafkaConsumer(config.consumers.amtVirksomheterV1, get()),
171+
AmtArrangorMeldingV1KafkaConsumer(config.consumers.amtArrangorMeldingV1, get()),
172+
AmtKoordinatorGjennomforingV1KafkaConsumer(config.consumers.amtKoordinatorMeldingV1, get()),
173+
ReplicateOkonomiBestillingStatus(config.consumers.replicateBestillingStatus, get()),
174+
ReplicateOkonomiFakturaStatus(config.consumers.replicateFakturaStatus, get()),
180175
)
181176
KafkaConsumerOrchestrator(
182177
consumerPreset = config.consumerPreset,

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tilsagn/OkonomiBestillingService.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class OkonomiBestillingService(
123123
}
124124

125125
val bestilling = OpprettBestilling(
126-
bestillingsnummer = tilsagn.bestillingsnummer,
126+
bestillingsnummer = tilsagn.bestilling.bestillingsnummer,
127127
tilskuddstype = when (tilsagn.type) {
128128
TilsagnType.INVESTERING -> Tilskuddstype.TILTAK_INVESTERINGER
129129
else -> Tilskuddstype.TILTAK_DRIFTSTILSKUDD
@@ -158,14 +158,14 @@ class OkonomiBestillingService(
158158
}
159159

160160
val annullerBestilling = AnnullerBestilling(
161-
bestillingsnummer = tilsagn.bestillingsnummer,
161+
bestillingsnummer = tilsagn.bestilling.bestillingsnummer,
162162
behandletAv = annullering.behandletAv.toOkonomiPart(),
163163
behandletTidspunkt = annullering.behandletTidspunkt,
164164
besluttetAv = annullering.besluttetAv.toOkonomiPart(),
165165
besluttetTidspunkt = annullering.besluttetTidspunkt,
166166
)
167167

168-
publish(tilsagn.bestillingsnummer, OkonomiBestillingMelding.Annullering(annullerBestilling))
168+
publish(tilsagn.bestilling.bestillingsnummer, OkonomiBestillingMelding.Annullering(annullerBestilling))
169169
}
170170

171171
private fun behandleFrigjortTilsagn(tilsagnId: UUID): Unit = db.session {
@@ -182,14 +182,14 @@ class OkonomiBestillingService(
182182
}
183183

184184
val faktura = FrigjorBestilling(
185-
bestillingsnummer = tilsagn.bestillingsnummer,
185+
bestillingsnummer = tilsagn.bestilling.bestillingsnummer,
186186
behandletAv = frigjoring.behandletAv.toOkonomiPart(),
187187
behandletTidspunkt = frigjoring.behandletTidspunkt,
188188
besluttetAv = frigjoring.besluttetAv.toOkonomiPart(),
189189
besluttetTidspunkt = frigjoring.besluttetTidspunkt,
190190
)
191191

192-
publish(tilsagn.bestillingsnummer, OkonomiBestillingMelding.Frigjoring(faktura))
192+
publish(tilsagn.bestilling.bestillingsnummer, OkonomiBestillingMelding.Frigjoring(faktura))
193193
}
194194

195195
fun behandleGodkjentUtbetalinger(tilsagnId: UUID): Unit = db.transaction {
@@ -219,8 +219,8 @@ class OkonomiBestillingService(
219219
requireNotNull(opprettelse.besluttetAv)
220220

221221
val faktura = OpprettFaktura(
222-
fakturanummer = delutbetaling.fakturanummer,
223-
bestillingsnummer = tilsagn.bestillingsnummer,
222+
fakturanummer = delutbetaling.faktura.fakturanummer,
223+
bestillingsnummer = tilsagn.bestilling.bestillingsnummer,
224224
betalingsinformasjon = OpprettFaktura.Betalingsinformasjon(
225225
kontonummer = kontonummer,
226226
kid = utbetaling.betalingsinformasjon.kid,

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tilsagn/TilsagnService.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class TilsagnService(
8383
val lopenummer = previous?.lopenummer
8484
?: queries.tilsagn.getNextLopenummeByGjennomforing(gjennomforing.id)
8585

86-
val bestillingsnummer = previous?.bestillingsnummer
86+
val bestillingsnummer = previous?.bestilling?.bestillingsnummer
8787
?: "A-${gjennomforing.lopenummer}-$lopenummer"
8888

8989
TilsagnDbo(
@@ -92,10 +92,10 @@ class TilsagnService(
9292
type = request.type,
9393
periode = Periode.fromInclusiveDates(request.periodeStart, request.periodeSlutt),
9494
lopenummer = lopenummer,
95-
bestillingsnummer = bestillingsnummer,
9695
kostnadssted = request.kostnadssted,
96+
bestillingsnummer = bestillingsnummer,
97+
bestillingStatus = null,
9798
beregning = beregning,
98-
arrangorId = gjennomforing.arrangor.id,
9999
)
100100
}
101101
.flatMap { dbo ->

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tilsagn/api/TilsagnDto.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ data class TilsagnDto(
3232
kostnadssted = tilsagn.kostnadssted,
3333
beregning = tilsagn.beregning,
3434
lopenummer = tilsagn.lopenummer,
35-
bestillingsnummer = tilsagn.bestillingsnummer,
35+
bestillingsnummer = tilsagn.bestilling.bestillingsnummer,
3636
status = tilsagn.status,
3737
)
3838
}

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tilsagn/db/TilsagnDbo.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@ package no.nav.mulighetsrommet.api.tilsagn.db
33
import no.nav.mulighetsrommet.api.tilsagn.model.TilsagnBeregning
44
import no.nav.mulighetsrommet.api.tilsagn.model.TilsagnType
55
import no.nav.mulighetsrommet.model.Periode
6+
import no.nav.tiltak.okonomi.BestillingStatusType
67
import java.util.*
78

89
data class TilsagnDbo(
910
val id: UUID,
1011
val gjennomforingId: UUID,
1112
val type: TilsagnType,
1213
val periode: Periode,
14+
val kostnadssted: String,
1315
val lopenummer: Int,
1416
val bestillingsnummer: String,
15-
val kostnadssted: String,
17+
val bestillingStatus: BestillingStatusType?,
1618
val beregning: TilsagnBeregning,
17-
val arrangorId: UUID,
1819
)

mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/tilsagn/db/TilsagnQueries.kt

+20-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import no.nav.mulighetsrommet.model.Organisasjonsnummer
1616
import no.nav.mulighetsrommet.model.Periode
1717
import no.nav.mulighetsrommet.model.Prismodell
1818
import no.nav.mulighetsrommet.model.Tiltakskode
19+
import no.nav.tiltak.okonomi.BestillingStatusType
1920
import org.intellij.lang.annotations.Language
2021
import java.util.*
2122

@@ -29,8 +30,8 @@ class TilsagnQueries(private val session: Session) {
2930
periode,
3031
lopenummer,
3132
bestillingsnummer,
33+
bestilling_status,
3234
kostnadssted,
33-
arrangor_id,
3435
status,
3536
type,
3637
belop_gjenstaende,
@@ -42,8 +43,8 @@ class TilsagnQueries(private val session: Session) {
4243
:periode::daterange,
4344
:lopenummer,
4445
:bestillingsnummer,
46+
:bestilling_status,
4547
:kostnadssted,
46-
:arrangor_id::uuid,
4748
:status::tilsagn_status,
4849
:type::tilsagn_type,
4950
:belop_gjenstaende,
@@ -55,8 +56,8 @@ class TilsagnQueries(private val session: Session) {
5556
periode = excluded.periode,
5657
lopenummer = excluded.lopenummer,
5758
bestillingsnummer = excluded.bestillingsnummer,
59+
bestilling_status = excluded.bestilling_status,
5860
kostnadssted = excluded.kostnadssted,
59-
arrangor_id = excluded.arrangor_id,
6061
status = excluded.status,
6162
type = excluded.type,
6263
belop_gjenstaende = excluded.belop_gjenstaende,
@@ -71,8 +72,8 @@ class TilsagnQueries(private val session: Session) {
7172
"lopenummer" to dbo.lopenummer,
7273
"status" to TilsagnStatus.TIL_GODKJENNING.name,
7374
"bestillingsnummer" to dbo.bestillingsnummer,
75+
"bestilling_status" to dbo.bestillingStatus?.name,
7476
"kostnadssted" to dbo.kostnadssted,
75-
"arrangor_id" to dbo.arrangorId,
7677
"type" to dbo.type.name,
7778
"belop_gjenstaende" to dbo.beregning.output.belop,
7879
"belop_beregnet" to dbo.beregning.output.belop,
@@ -125,7 +126,7 @@ class TilsagnQueries(private val session: Session) {
125126
execute(queryOf(query, params))
126127
}
127128

128-
fun setGjenstaendeBelop(id: UUID, belop: Int) = with(session) {
129+
fun setGjenstaendeBelop(id: UUID, belop: Int) {
129130
@Language("PostgreSQL")
130131
val query = """
131132
update tilsagn set
@@ -138,7 +139,7 @@ class TilsagnQueries(private val session: Session) {
138139
"belop" to belop,
139140
)
140141

141-
execute(queryOf(query, params))
142+
session.execute(queryOf(query, params))
142143
}
143144

144145
fun getNextLopenummeByGjennomforing(gjennomforingId: UUID): Int {
@@ -211,6 +212,15 @@ class TilsagnQueries(private val session: Session) {
211212
session.execute(queryOf(query, mapOf("id" to id, "status" to status.name)))
212213
}
213214

215+
fun setBestillingStatus(bestillingsnummer: String, status: BestillingStatusType) {
216+
@Language("PostgreSQL")
217+
val query = """
218+
update tilsagn set bestilling_status = ? where bestillingsnummer = ?
219+
""".trimIndent()
220+
221+
session.execute(queryOf(query, status.name, bestillingsnummer))
222+
}
223+
214224
private fun Row.toTilsagnDto(): Tilsagn {
215225
val id = uuid("id")
216226

@@ -230,7 +240,10 @@ class TilsagnQueries(private val session: Session) {
230240
belopGjenstaende = int("belop_gjenstaende"),
231241
periode = periode("periode"),
232242
lopenummer = int("lopenummer"),
233-
bestillingsnummer = string("bestillingsnummer"),
243+
bestilling = Tilsagn.Bestilling(
244+
bestillingsnummer = string("bestillingsnummer"),
245+
status = stringOrNull("bestilling_status")?.let { BestillingStatusType.valueOf(it) },
246+
),
234247
kostnadssted = NavEnhetDbo(
235248
enhetsnummer = string("kostnadssted"),
236249
navn = string("kostnadssted_navn"),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package no.nav.mulighetsrommet.api.tilsagn.kafka
2+
3+
import kotlinx.serialization.json.JsonElement
4+
import kotlinx.serialization.json.decodeFromJsonElement
5+
import no.nav.common.kafka.consumer.util.deserializer.Deserializers.stringDeserializer
6+
import no.nav.mulighetsrommet.api.ApiDatabase
7+
import no.nav.mulighetsrommet.kafka.KafkaTopicConsumer
8+
import no.nav.mulighetsrommet.kafka.serialization.JsonElementDeserializer
9+
import no.nav.mulighetsrommet.serialization.json.JsonIgnoreUnknownKeys
10+
import no.nav.tiltak.okonomi.BestillingStatus
11+
import org.slf4j.LoggerFactory
12+
13+
class ReplicateOkonomiBestillingStatus(
14+
config: Config,
15+
private val db: ApiDatabase,
16+
) : KafkaTopicConsumer<String, JsonElement>(
17+
config,
18+
stringDeserializer(),
19+
JsonElementDeserializer(),
20+
) {
21+
private val logger = LoggerFactory.getLogger(javaClass)
22+
23+
override suspend fun consume(key: String, message: JsonElement): Unit = db.session {
24+
logger.info("Konsumerer statusmelding bestillingsnummer=$key")
25+
26+
val (bestillingsnummer, status) = JsonIgnoreUnknownKeys.decodeFromJsonElement<BestillingStatus>(message)
27+
28+
queries.tilsagn.setBestillingStatus(bestillingsnummer, status)
29+
}
30+
}

0 commit comments

Comments
 (0)