diff --git a/src/main/kotlin/no/nav/syfo/brev/esyfovarsel/EsyfovarselProducer.kt b/src/main/kotlin/no/nav/syfo/brev/esyfovarsel/EsyfovarselProducer.kt index 34bb422b..c391dab0 100644 --- a/src/main/kotlin/no/nav/syfo/brev/esyfovarsel/EsyfovarselProducer.kt +++ b/src/main/kotlin/no/nav/syfo/brev/esyfovarsel/EsyfovarselProducer.kt @@ -1,6 +1,7 @@ package no.nav.syfo.brev.esyfovarsel import com.fasterxml.jackson.annotation.JsonTypeInfo +import no.nav.syfo.dialogmote.domain.DialogmoteSvarType import java.io.Serializable import java.util.* import org.apache.kafka.clients.producer.KafkaProducer @@ -55,7 +56,8 @@ data class ArbeidstakerHendelse( data class VarselData( val journalpost: VarselDataJournalpost? = null, val narmesteLeder: VarselDataNarmesteLeder? = null, - val motetidspunkt: VarselDataMotetidspunkt? = null + val motetidspunkt: VarselDataMotetidspunkt? = null, + val dialogmoteSvar: VarselDataDialogmoteSvar? = null ) data class VarselDataJournalpost( @@ -71,6 +73,10 @@ data class VarselDataMotetidspunkt( val tidspunkt: LocalDateTime ) +data class VarselDataDialogmoteSvar( + val svar: DialogmoteSvarType +) + enum class HendelseType { NL_DIALOGMOTE_INNKALT, SM_DIALOGMOTE_INNKALT, @@ -81,4 +87,5 @@ enum class HendelseType { NL_DIALOGMOTE_NYTT_TID_STED, SM_DIALOGMOTE_NYTT_TID_STED, SM_DIALOGMOTE_LEST, + NL_DIALOGMOTE_SVAR, } diff --git a/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevApi.kt b/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevApi.kt index a30d3ce5..6fe6cc26 100644 --- a/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevApi.kt +++ b/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevApi.kt @@ -1,7 +1,6 @@ package no.nav.syfo.brev.narmesteleder import io.ktor.http.* -import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -171,12 +170,18 @@ fun Route.registerNarmestelederBrevApi( narmesteLederPersonIdent = narmesteLederPersonIdent, ) if (hasAccessToBrev) { + val narmesteLederSvar = DialogmoteSvarType.valueOf(responsDTO.svarType) val updated = dialogmotedeltakerService.updateArbeidsgiverBrevWithRespons( brevUuid = brevUuid, - svarType = DialogmoteSvarType.valueOf(responsDTO.svarType), + svarType = narmesteLederSvar, svarTekst = responsDTO.svarTekst, ) if (updated) { + dialogmoteService.publishNarmesteLederSvarVarselHendelse( + brev = brev, + narmesteLederSvar = narmesteLederSvar, + narmesteLederPersonIdent = narmesteLederPersonIdent, + ) call.respond(HttpStatusCode.OK) } else { throw IllegalArgumentException("Response already stored") diff --git a/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederVarselService.kt b/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederVarselService.kt index eedf33dd..8f08c84c 100644 --- a/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederVarselService.kt +++ b/src/main/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederVarselService.kt @@ -3,6 +3,8 @@ package no.nav.syfo.brev.narmesteleder import no.nav.syfo.brev.esyfovarsel.* import no.nav.syfo.client.narmesteleder.* import no.nav.syfo.dialogmote.domain.* +import no.nav.syfo.domain.PersonIdent +import no.nav.syfo.domain.Virksomhetsnummer import java.time.LocalDateTime class NarmesteLederVarselService( @@ -26,6 +28,27 @@ class NarmesteLederVarselService( esyfovarselProducer.sendVarselToEsyfovarsel(hendelse) } + fun sendNarmesteLederSvarVarselHendelse( + narmesteLederSvar: DialogmoteSvarType, + narmesteLederPersonIdent: PersonIdent, + arbeidstakerPersonIdent: PersonIdent, + virksomhetsnummer: Virksomhetsnummer + ) { + esyfovarselProducer.sendVarselToEsyfovarsel( + NarmesteLederHendelse( + type = HendelseType.NL_DIALOGMOTE_SVAR, + data = VarselData( + dialogmoteSvar = VarselDataDialogmoteSvar( + svar = narmesteLederSvar, + ) + ), + narmesteLederFnr = narmesteLederPersonIdent.value, + arbeidstakerFnr = arbeidstakerPersonIdent.value, + orgnummer = virksomhetsnummer.value, + ) + ) + } + private fun getNaermesteLederVarselType(motedeltakerVarselType: MotedeltakerVarselType): HendelseType { return when (motedeltakerVarselType) { MotedeltakerVarselType.INNKALT -> HendelseType.NL_DIALOGMOTE_INNKALT diff --git a/src/main/kotlin/no/nav/syfo/dialogmote/DialogmoteService.kt b/src/main/kotlin/no/nav/syfo/dialogmote/DialogmoteService.kt index 183b6943..aeb1ca9b 100644 --- a/src/main/kotlin/no/nav/syfo/dialogmote/DialogmoteService.kt +++ b/src/main/kotlin/no/nav/syfo/dialogmote/DialogmoteService.kt @@ -78,10 +78,9 @@ class DialogmoteService( val personIdent = PersonIdent(newDialogmoteDTO.arbeidstaker.personIdent) val virksomhetsnummer = Virksomhetsnummer(newDialogmoteDTO.arbeidsgiver.virksomhetsnummer) - val anyUnfinishedDialogmote = - getDialogmoteList(personIdent).filter { - it.arbeidsgiver.virksomhetsnummer == virksomhetsnummer - }.anyUnfinished() + val anyUnfinishedDialogmote = getDialogmoteList(personIdent).filter { + it.arbeidsgiver.virksomhetsnummer == virksomhetsnummer + }.anyUnfinished() if (anyUnfinishedDialogmote) { throw ConflictException("Denied access to create Dialogmote: unfinished Dialogmote exists for PersonIdent") @@ -220,14 +219,13 @@ class DialogmoteService( pdfContent = avlysDialogmote.arbeidsgiver.avlysning, ) ?: throw RuntimeException("Failed to request PDF - Avlysning Arbeidsgiver") - val pdfAvlysningBehandler = - avlysDialogmote.behandler?.let { - pdfGenClient.pdfAvlysning( - callId = callId, - mottakerNavn = dialogmote.behandler?.behandlerNavn, - pdfContent = it.avlysning, - ) ?: throw RuntimeException("Failed to request PDF - Avlysning Behandler") - } + val pdfAvlysningBehandler = avlysDialogmote.behandler?.let { + pdfGenClient.pdfAvlysning( + callId = callId, + mottakerNavn = dialogmote.behandler?.behandlerNavn, + pdfContent = it.avlysning, + ) ?: throw RuntimeException("Failed to request PDF - Avlysning Behandler") + } val digitalVarsling = isDigitalVarselEnabled( personIdent = dialogmote.arbeidstaker.personIdent, @@ -315,14 +313,13 @@ class DialogmoteService( pdfContent = endreDialogmoteTidSted.arbeidsgiver.endringsdokument, ) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Arbeidsgiver") - val pdfEndringBehandler = - endreDialogmoteTidSted.behandler?.let { - pdfGenClient.pdfEndringTidSted( - callId = callId, - mottakerNavn = dialogmote.behandler?.behandlerNavn, - pdfContent = it.endringsdokument, - ) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Behandler") - } + val pdfEndringBehandler = endreDialogmoteTidSted.behandler?.let { + pdfGenClient.pdfEndringTidSted( + callId = callId, + mottakerNavn = dialogmote.behandler?.behandlerNavn, + pdfContent = it.endringsdokument, + ) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Behandler") + } val digitalVarsling = isDigitalVarselEnabled( personIdent = dialogmote.arbeidstaker.personIdent, @@ -843,4 +840,24 @@ class DialogmoteService( callId = callId, ) } + + fun publishNarmesteLederSvarVarselHendelse( + brev: NarmesteLederBrev, + narmesteLederSvar: DialogmoteSvarType, + narmesteLederPersonIdent: PersonIdent, + ) { + val dialogmoteDeltagerArbeidsgiver = dialogmotedeltakerService.getDialogmoteDeltakerArbeidsgiverById( + motedeltakerArbeidsgiverId = brev.motedeltakerArbeidsgiverId, + ) + val arbeidstakerPersonIdent = dialogmotedeltakerService.getDialogmoteDeltakerArbeidstaker( + moteId = dialogmoteDeltagerArbeidsgiver.moteId, + ).personIdent + + varselService.sendNarmesteLederSvarVarselHendelse( + narmesteLederSvar = narmesteLederSvar, + narmesteLederPersonIdent = narmesteLederPersonIdent, + arbeidstakerPersonIdent = arbeidstakerPersonIdent, + virksomhetsnummer = dialogmoteDeltagerArbeidsgiver.virksomhetsnummer, + ) + } } diff --git a/src/main/kotlin/no/nav/syfo/dialogmote/VarselService.kt b/src/main/kotlin/no/nav/syfo/dialogmote/VarselService.kt index ad89100b..2b243c49 100644 --- a/src/main/kotlin/no/nav/syfo/dialogmote/VarselService.kt +++ b/src/main/kotlin/no/nav/syfo/dialogmote/VarselService.kt @@ -9,6 +9,7 @@ import no.nav.syfo.client.altinn.createAltinnMelding import no.nav.syfo.client.narmesteleder.NarmesteLederRelasjonDTO import no.nav.syfo.client.oppfolgingstilfelle.OppfolgingstilfelleClient import no.nav.syfo.client.oppfolgingstilfelle.isInactive +import no.nav.syfo.dialogmote.domain.DialogmoteSvarType import no.nav.syfo.dialogmote.domain.DocumentComponentDTO import no.nav.syfo.dialogmote.domain.MotedeltakerVarselType import no.nav.syfo.domain.PersonIdent @@ -106,4 +107,18 @@ class VarselService( } } } + + fun sendNarmesteLederSvarVarselHendelse( + narmesteLederSvar: DialogmoteSvarType, + narmesteLederPersonIdent: PersonIdent, + arbeidstakerPersonIdent: PersonIdent, + virksomhetsnummer: Virksomhetsnummer + ) { + narmesteLederVarselService.sendNarmesteLederSvarVarselHendelse( + narmesteLederSvar = narmesteLederSvar, + narmesteLederPersonIdent = narmesteLederPersonIdent, + arbeidstakerPersonIdent = arbeidstakerPersonIdent, + virksomhetsnummer = virksomhetsnummer, + ) + } } diff --git a/src/test/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevSpek.kt b/src/test/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevSpek.kt index 508c6462..62633370 100644 --- a/src/test/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevSpek.kt +++ b/src/test/kotlin/no/nav/syfo/brev/narmesteleder/NarmesteLederBrevSpek.kt @@ -36,10 +36,7 @@ import no.nav.syfo.testhelper.UserConstants.NARMESTELEDER_FNR import no.nav.syfo.testhelper.UserConstants.NARMESTELEDER_FNR_2 import no.nav.syfo.testhelper.UserConstants.OTHER_VIRKSOMHETSNUMMER_HAS_NARMESTELEDER import no.nav.syfo.testhelper.UserConstants.VEILEDER_IDENT -import no.nav.syfo.testhelper.generator.generateInkallingHendelse -import no.nav.syfo.testhelper.generator.generateInkallingHendelseOtherVirksomhet -import no.nav.syfo.testhelper.generator.generateNewDialogmoteDTO -import no.nav.syfo.testhelper.generator.generateNewReferatDTO +import no.nav.syfo.testhelper.generator.* import no.nav.syfo.testhelper.mock.pdfInnkalling import no.nav.syfo.testhelper.mock.pdfReferat import no.nav.syfo.util.NAV_PERSONIDENT_HEADER @@ -199,6 +196,12 @@ object NarmesteLederBrevSpek : Spek({ ) ) }.apply { + verify(exactly = 1) { + esyfovarselProducerMock.sendVarselToEsyfovarsel( + generateKommerSvarHendelse() + ) + } + clearMocks(esyfovarselProducerMock) status shouldBeEqualTo HttpStatusCode.OK } diff --git a/src/test/kotlin/no/nav/syfo/testhelper/generator/EsyfovarselHendelseGenerator.kt b/src/test/kotlin/no/nav/syfo/testhelper/generator/EsyfovarselHendelseGenerator.kt index 645a4a76..4748e368 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/generator/EsyfovarselHendelseGenerator.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/generator/EsyfovarselHendelseGenerator.kt @@ -1,6 +1,7 @@ package no.nav.syfo.testhelper.generator import no.nav.syfo.brev.esyfovarsel.* +import no.nav.syfo.dialogmote.domain.DialogmoteSvarType import no.nav.syfo.testhelper.UserConstants.ARBEIDSTAKER_FNR import no.nav.syfo.testhelper.UserConstants.NARMESTELEDER_FNR import no.nav.syfo.testhelper.UserConstants.OTHER_VIRKSOMHETSNUMMER_HAS_NARMESTELEDER @@ -64,3 +65,14 @@ fun generateReferatHendelse() = arbeidstakerFnr = ARBEIDSTAKER_FNR.value, orgnummer = VIRKSOMHETSNUMMER_HAS_NARMESTELEDER.value ) + +fun generateKommerSvarHendelse() = + NarmesteLederHendelse( + type = HendelseType.NL_DIALOGMOTE_SVAR, + narmesteLederFnr = NARMESTELEDER_FNR.value, + data = VarselData( + dialogmoteSvar = VarselDataDialogmoteSvar(DialogmoteSvarType.KOMMER) + ), + arbeidstakerFnr = ARBEIDSTAKER_FNR.value, + orgnummer = VIRKSOMHETSNUMMER_HAS_NARMESTELEDER.value + )