Skip to content

Commit

Permalink
IS-1603: Add data sent to pdfclient to generate documents with nav he…
Browse files Browse the repository at this point in the history
…ader
  • Loading branch information
vetlesolgaard committed May 3, 2024
1 parent aa3d7c3 commit 06201b8
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ package no.nav.syfo.client.pdfgen
import no.nav.syfo.dialogmote.domain.DocumentComponentDTO

data class DialogmoteHendelsePdfContent(
val mottakerNavn: String? = null,
val mottakerFodselsnummer: String? = null,
val datoSendt: String,
val documentComponents: List<DocumentComponentDTO>,
)
53 changes: 39 additions & 14 deletions src/main/kotlin/no/nav/syfo/client/pdfgen/PdfGenClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ import no.nav.syfo.client.httpClientDefault
import no.nav.syfo.dialogmote.domain.DocumentComponentDTO
import no.nav.syfo.util.NAV_CALL_ID_HEADER
import no.nav.syfo.util.callIdArgument
import no.nav.syfo.util.toReadableString
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.time.LocalDateTime

class PdfGenClient(
private val pdfGenBaseUrl: String
Expand All @@ -21,56 +23,79 @@ class PdfGenClient(

suspend fun pdfAvlysning(
callId: String,
documentComponentDTOList: List<DocumentComponentDTO>,
mottakerNavn: String? = null,
mottakerFodselsnummer: String? = null,
pdfContent: List<DocumentComponentDTO>,
): ByteArray? {
return getPdf(
callId = callId,
documentComponentDTOList = documentComponentDTOList,
mottakerNavn = mottakerNavn,
mottakerFodselsnummer = mottakerFodselsnummer,
pdfContent = pdfContent,
pdfUrl = "$pdfGenBaseUrl$AVLYSNING_PATH",
)
}

suspend fun pdfEndringTidSted(
callId: String,
documentComponentDTOList: List<DocumentComponentDTO>,
mottakerNavn: String? = null,
mottakerFodselsnummer: String? = null,
pdfContent: List<DocumentComponentDTO>,
): ByteArray? {
return getPdf(
callId = callId,
documentComponentDTOList = documentComponentDTOList,
mottakerNavn = mottakerNavn,
mottakerFodselsnummer = mottakerFodselsnummer,
pdfContent = pdfContent,
pdfUrl = "$pdfGenBaseUrl$ENDRING_TIDSTED_PATH",
)
}

suspend fun pdfInnkalling(
callId: String,
documentComponentDTOList: List<DocumentComponentDTO>,
mottakerNavn: String? = null,
mottakerFodselsnummer: String? = null,
pdfContent: List<DocumentComponentDTO>,
): ByteArray? {
return getPdf(
callId = callId,
documentComponentDTOList = documentComponentDTOList,
mottakerNavn = mottakerNavn,
mottakerFodselsnummer = mottakerFodselsnummer,
pdfContent = pdfContent,
pdfUrl = "$pdfGenBaseUrl$INNKALLING_PATH",
)
}

suspend fun pdfReferat(
callId: String,
documentComponentDTOList: List<DocumentComponentDTO>,
mottakerNavn: String? = null,
mottakerFodselsnummer: String? = null,
pdfContent: List<DocumentComponentDTO>,
): ByteArray? {
return getPdf(
callId = callId,
documentComponentDTOList = documentComponentDTOList,
mottakerNavn = mottakerNavn,
mottakerFodselsnummer = mottakerFodselsnummer,
pdfContent = pdfContent,
pdfUrl = "$pdfGenBaseUrl$REFERAT_PATH",
)
}

private suspend fun getPdf(
callId: String,
documentComponentDTOList: List<DocumentComponentDTO>,
mottakerNavn: String?,
mottakerFodselsnummer: String?,
pdfContent: List<DocumentComponentDTO>,
pdfUrl: String,
): ByteArray? {
return try {
val requestBody =
DialogmoteHendelsePdfContent(documentComponents = documentComponentDTOList.sanitizeForPdfGen())
DialogmoteHendelsePdfContent(
mottakerNavn = mottakerNavn,
mottakerFodselsnummer = mottakerFodselsnummer,
datoSendt = LocalDateTime.now().toReadableString(),
documentComponents = pdfContent.sanitizeForPdfGen(),
)
val response: HttpResponse = httpClient.post(pdfUrl) {
header(NAV_CALL_ID_HEADER, callId)
accept(ContentType.Application.Json)
Expand Down Expand Up @@ -103,10 +128,10 @@ class PdfGenClient(

companion object {
private const val API_BASE_PATH = "/api/v1/genpdf/isdialogmote"
const val AVLYSNING_PATH = "$API_BASE_PATH/avlysning"
const val ENDRING_TIDSTED_PATH = "$API_BASE_PATH/endring-tidsted"
const val INNKALLING_PATH = "$API_BASE_PATH/innkalling"
const val REFERAT_PATH = "$API_BASE_PATH/referat"
const val AVLYSNING_PATH = "$API_BASE_PATH/avlysning-v2"
const val ENDRING_TIDSTED_PATH = "$API_BASE_PATH/endring-tid-sted-v2"
const val INNKALLING_PATH = "$API_BASE_PATH/innkalling-v2"
const val REFERAT_PATH = "$API_BASE_PATH/referat-v2"

val log: Logger = LoggerFactory.getLogger(PdfGenClient::class.java)
val illegalCharacters = listOf('\u0002')
Expand Down
93 changes: 52 additions & 41 deletions src/main/kotlin/no/nav/syfo/dialogmote/DialogmoteService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -108,18 +108,22 @@ class DialogmoteService(

val pdfInnkallingArbeidstaker = pdfGenClient.pdfInnkalling(
callId = callId,
documentComponentDTOList = newDialogmoteDTO.arbeidstaker.innkalling,
mottakerNavn = arbeidstakernavn,
mottakerFodselsnummer = personIdent.value,
pdfContent = newDialogmoteDTO.arbeidstaker.innkalling,
) ?: throw RuntimeException("Failed to request PDF - Innkalling Arbeidstaker")

val pdfInnkallingArbeidsgiver = pdfGenClient.pdfInnkalling(
callId = callId,
documentComponentDTOList = newDialogmoteDTO.arbeidsgiver.innkalling,
mottakerNavn = narmesteLeder?.narmesteLederNavn ?: narmesteLeder?.virksomhetsnavn,
pdfContent = newDialogmoteDTO.arbeidsgiver.innkalling,
) ?: throw RuntimeException("Failed to request PDF - Innkalling Arbeidsgiver")

val pdfInnkallingBehandler = newDialogmoteDTO.behandler?.let {
pdfGenClient.pdfInnkalling(
callId = callId,
documentComponentDTOList = it.innkalling,
mottakerNavn = newDialogmoteDTO.behandler.behandlerNavn,
pdfContent = it.innkalling,
) ?: throw RuntimeException("Failed to request PDF - Innkalling Behandler")
}

Expand Down Expand Up @@ -183,7 +187,14 @@ class DialogmoteService(
avlysDialogmote: AvlysDialogmoteDTO,
token: String,
) {
val arbeidstakernavn = pdlClient.navn(dialogmote.arbeidstaker.personIdent)
val virksomhetsnummer = dialogmote.arbeidsgiver.virksomhetsnummer
val narmesteLeder = narmesteLederClient.activeLeder(
personIdent = dialogmote.arbeidstaker.personIdent,
virksomhetsnummer = virksomhetsnummer,
callId = callId,
token = token,
)

if (dialogmote.status == DialogmoteStatus.FERDIGSTILT) {
throw ConflictException("Failed to Avlys Dialogmote: already Ferdigstilt")
Expand All @@ -197,29 +208,25 @@ class DialogmoteService(

val pdfAvlysningArbeidstaker = pdfGenClient.pdfAvlysning(
callId = callId,
documentComponentDTOList = avlysDialogmote.arbeidstaker.avlysning,
mottakerNavn = arbeidstakernavn,
mottakerFodselsnummer = dialogmote.arbeidstaker.personIdent.value,
pdfContent = avlysDialogmote.arbeidstaker.avlysning,
) ?: throw RuntimeException("Failed to request PDF - Avlysning Arbeidstaker")

val pdfAvlysningArbeidsgiver = pdfGenClient.pdfAvlysning(
callId = callId,
documentComponentDTOList = avlysDialogmote.arbeidsgiver.avlysning,
mottakerNavn = narmesteLeder?.narmesteLederNavn ?: narmesteLeder?.virksomhetsnavn,
pdfContent = avlysDialogmote.arbeidsgiver.avlysning,
) ?: throw RuntimeException("Failed to request PDF - Avlysning Arbeidsgiver")

val pdfAvlysningBehandler = avlysDialogmote.behandler?.let {
pdfGenClient.pdfAvlysning(
callId = callId,
documentComponentDTOList = it.avlysning,
) ?: throw RuntimeException("Failed to request PDF - Avlysning Behandler")
}

val narmesteLeder = narmesteLederClient.activeLeder(
personIdent = dialogmote.arbeidstaker.personIdent,
virksomhetsnummer = virksomhetsnummer,
callId = callId,
token = token,
)

val arbeidstakernavn = pdlClient.navn(dialogmote.arbeidstaker.personIdent)
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,
Expand Down Expand Up @@ -276,6 +283,13 @@ class DialogmoteService(
token: String,
) {
val virksomhetsnummer = dialogmote.arbeidsgiver.virksomhetsnummer
val arbeidstakernavn = pdlClient.navn(dialogmote.arbeidstaker.personIdent)
val narmesteLeder = narmesteLederClient.activeLeder(
personIdent = dialogmote.arbeidstaker.personIdent,
virksomhetsnummer = virksomhetsnummer,
callId = callId,
token = token,
)

if (dialogmote.status == DialogmoteStatus.FERDIGSTILT) {
throw ConflictException("Failed to change tid/sted, already Ferdigstilt")
Expand All @@ -289,29 +303,25 @@ class DialogmoteService(

val pdfEndringArbeidstaker = pdfGenClient.pdfEndringTidSted(
callId = callId,
documentComponentDTOList = endreDialogmoteTidSted.arbeidstaker.endringsdokument
mottakerNavn = arbeidstakernavn,
mottakerFodselsnummer = dialogmote.arbeidstaker.personIdent.value,
pdfContent = endreDialogmoteTidSted.arbeidstaker.endringsdokument,
) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Arbeidstaker")

val pdfEndringArbeidsgiver = pdfGenClient.pdfEndringTidSted(
callId = callId,
documentComponentDTOList = endreDialogmoteTidSted.arbeidsgiver.endringsdokument
mottakerNavn = narmesteLeder?.narmesteLederNavn ?: narmesteLeder?.virksomhetsnavn,
pdfContent = endreDialogmoteTidSted.arbeidsgiver.endringsdokument,
) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Arbeidsgiver")

val pdfEndringBehandler = endreDialogmoteTidSted.behandler?.let {
pdfGenClient.pdfEndringTidSted(
callId = callId,
documentComponentDTOList = it.endringsdokument
) ?: throw RuntimeException("Failed to request PDF - EndringTidSted Behandler")
}

val narmesteLeder = narmesteLederClient.activeLeder(
personIdent = dialogmote.arbeidstaker.personIdent,
virksomhetsnummer = virksomhetsnummer,
callId = callId,
token = token,
)

val arbeidstakernavn = pdlClient.navn(dialogmote.arbeidstaker.personIdent)
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,
Expand Down Expand Up @@ -559,7 +569,7 @@ class DialogmoteService(

val pdfReferat = pdfGenClient.pdfReferat(
callId = callId,
documentComponentDTOList = referat.document,
pdfContent = referat.document,
) ?: throw RuntimeException("Failed to request PDF - Referat")

val digitalVarsling = isDigitalVarselEnabled(
Expand Down Expand Up @@ -624,7 +634,7 @@ class DialogmoteService(
)
}

val sisteMotetidspunkt = dialogmote.tidStedList.maxBy { tidSted -> tidSted.tid }?.tid
val sisteMotetidspunkt = dialogmote.tidStedList.maxBy { tidSted -> tidSted.tid }.tid

dialogmotedeltakerService.slettBrukeroppgaverPaMote(
dialogmote = dialogmote
Expand Down Expand Up @@ -681,7 +691,8 @@ class DialogmoteService(

val pdfReferat = pdfGenClient.pdfReferat(
callId = callId,
documentComponentDTOList = referat.document,
mottakerNavn = arbeidstakernavn,
pdfContent = referat.document,
) ?: throw RuntimeException("Failed to request PDF - Referat")

val digitalVarsling = isDigitalVarselEnabled(
Expand Down Expand Up @@ -738,7 +749,7 @@ class DialogmoteService(
)
}

val sisteMotetidspunkt = dialogmote.tidStedList.maxBy { tidSted -> tidSted.tid }?.tid
val sisteMotetidspunkt = dialogmote.tidStedList.maxBy { tidSted -> tidSted.tid }.tid

varselService.sendVarsel(
varselType = MotedeltakerVarselType.REFERAT,
Expand Down
5 changes: 5 additions & 0 deletions src/main/kotlin/no/nav/syfo/util/DateUtil.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package no.nav.syfo.util

import java.time.*
import java.time.format.DateTimeFormatter
import java.util.*

val defaultZoneOffset: ZoneOffset = ZoneOffset.UTC

Expand All @@ -15,3 +17,6 @@ fun LocalDate.isAfterOrEqual(date: LocalDate) = !this.isBefore(date)

// Grace periode is the period from 4 months ago to today where brev can be displayed to NL by default.
fun getGracePeriodStartDate() = LocalDate.now().minusMonths(4)

fun LocalDateTime.toReadableString(): String =
this.format(DateTimeFormatter.ofPattern("dd. MMMM yyyy", Locale("no")))

0 comments on commit 06201b8

Please sign in to comment.