Skip to content

Commit

Permalink
Include behovsvurdering, registering and CV data in document archive
Browse files Browse the repository at this point in the history
  • Loading branch information
dragutin-nav committed Jan 31, 2024
1 parent 5e64dea commit 73c9781
Show file tree
Hide file tree
Showing 10 changed files with 607 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
package no.nav.veilarbvedtaksstotte.client.pdf

import com.fasterxml.jackson.databind.JsonNode
import no.nav.common.health.HealthCheck
import no.nav.veilarbvedtaksstotte.client.dokument.MalType
import no.nav.veilarbvedtaksstotte.client.norg2.EnhetPostadresse
import no.nav.veilarbvedtaksstotte.client.norg2.EnhetPostboksadresse
import no.nav.veilarbvedtaksstotte.client.norg2.EnhetStedsadresse
import no.nav.veilarbvedtaksstotte.domain.Målform

interface PdfClient: HealthCheck {
interface PdfClient : HealthCheck {
fun genererPdf(brevdata: Brevdata): ByteArray
fun genererRegistreringPdf(registreringData: JsonNode): ByteArray
fun genererBehovsvurderingPdf(behovsVurderingData: JsonNode): ByteArray
fun genererCVPdf(cvData: CVPdfData): ByteArray

data class CVPdfData(
val htmlView: String
)

data class Brevdata(
val malType: MalType,
Expand Down Expand Up @@ -58,6 +66,7 @@ interface PdfClient: HealthCheck {
postnummer = enhetPostadresse.postnummer,
poststed = enhetPostadresse.poststed,
)

else -> throw IllegalStateException("Manglende mapping for enhetPostadresse")
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.veilarbvedtaksstotte.client.pdf

import com.fasterxml.jackson.databind.JsonNode
import no.nav.common.health.HealthCheckResult
import no.nav.common.health.HealthCheckUtils
import no.nav.common.rest.client.RestClient
Expand All @@ -17,9 +18,9 @@ class PdfClientImpl(val pdfGenUrl: String) : PdfClient {
override fun genererPdf(brevdata: PdfClient.Brevdata): ByteArray {

val request = Request.Builder()
.url(joinPaths(pdfGenUrl, "api/v1/genpdf/vedtak14a/vedtak14a"))
.post(RestUtils.toJsonRequestBody(brevdata))
.build()
.url(joinPaths(pdfGenUrl, "api/v1/genpdf/vedtak14a/vedtak14a"))
.post(RestUtils.toJsonRequestBody(brevdata))
.build()

try {
client.newCall(request).execute().use { response ->
Expand All @@ -29,7 +30,77 @@ class PdfClientImpl(val pdfGenUrl: String) : PdfClient {
throw IllegalStateException("Generering av brev feilet, tom respons.")
}
} catch (e: Exception) {
throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Feil ved kall mot " + request.url.toString(), e)
throw ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR,
"Feil ved kall mot " + request.url.toString(),
e
)
}
}

override fun genererRegistreringPdf(registreringData: JsonNode): ByteArray {
val request = Request.Builder()
.url(joinPaths(pdfGenUrl, "api/v1/genpdf/vedtak14a/oyeblikkbilde-registrering"))
.post(RestUtils.toJsonRequestBody(registreringData))
.build()

try {
client.newCall(request).execute().use { response ->
RestUtils.throwIfNotSuccessful(response)
val body = response.body
return if (body != null) body.bytes() else
throw IllegalStateException("Generering av øyeblikkbilde for registrering feilet, tøm respons.")
}
} catch (e: Exception) {
throw ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR,
"Feil ved kall mot " + request.url.toString(),
e
)
}
}

override fun genererBehovsvurderingPdf(behovsVurderingData: JsonNode): ByteArray {
val request = Request.Builder()
.url(joinPaths(pdfGenUrl, "api/v1/genpdf/vedtak14a/oyeblikkbilde-behovsvurdering"))
.post(RestUtils.toJsonRequestBody(behovsVurderingData))
.build()

try {
client.newCall(request).execute().use { response ->
RestUtils.throwIfNotSuccessful(response)
val body = response.body
return if (body != null) body.bytes() else
throw IllegalStateException("Generering av øyeblikkbilde for behovsvurdering feilet, tøm respons.")
}
} catch (e: Exception) {
throw ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR,
"Feil ved kall mot " + request.url.toString(),
e
)
}
}

override fun genererCVPdf(cvData: PdfClient.CVPdfData): ByteArray {
val request = Request.Builder()
.url(joinPaths(pdfGenUrl, "api/v1/genpdf/vedtak14a/oyeblikkbilde-cv"))
.post(RestUtils.toJsonRequestBody(cvData))
.build()

try {
client.newCall(request).execute().use { response ->
RestUtils.throwIfNotSuccessful(response)
val body = response.body
return if (body != null) body.bytes() else
throw IllegalStateException("Generering av øyeblikkbilde for cv feilet, tøm respons.")
}
} catch (e: Exception) {
throw ResponseStatusException(
HttpStatus.INTERNAL_SERVER_ERROR,
"Feil ved kall mot " + request.url.toString(),
e
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class Oyeblikksbilde {
long vedtakId;
OyeblikksbildeType oyeblikksbildeType;
String json;
public long vedtakId;
public OyeblikksbildeType oyeblikksbildeType;
public String json;
}
128 changes: 111 additions & 17 deletions src/main/java/no/nav/veilarbvedtaksstotte/service/DokumentService.kt
Original file line number Diff line number Diff line change
@@ -1,30 +1,34 @@
package no.nav.veilarbvedtaksstotte.service

import com.fasterxml.jackson.databind.ObjectMapper
import no.nav.common.client.norg2.Enhet
import no.nav.common.types.identer.EnhetId
import no.nav.common.types.identer.Fnr
import no.nav.veilarbvedtaksstotte.client.pdf.PdfClient
import no.nav.veilarbvedtaksstotte.client.pdf.PdfClient.Adresse.Companion.fraEnhetPostadresse
import no.nav.veilarbvedtaksstotte.client.arena.VeilarbarenaClient
import no.nav.veilarbvedtaksstotte.client.dokarkiv.DokarkivClient
import no.nav.veilarbvedtaksstotte.client.dokarkiv.OpprettJournalpostDTO
import no.nav.veilarbvedtaksstotte.client.dokarkiv.OpprettetJournalpostDTO
import no.nav.veilarbvedtaksstotte.client.dokument.MalType
import no.nav.veilarbvedtaksstotte.client.dokument.ProduserDokumentDTO
import no.nav.veilarbvedtaksstotte.client.norg2.EnhetKontaktinformasjon
import no.nav.veilarbvedtaksstotte.client.pdf.PdfClient
import no.nav.veilarbvedtaksstotte.client.pdf.PdfClient.Adresse.Companion.fraEnhetPostadresse
import no.nav.veilarbvedtaksstotte.client.person.VeilarbpersonClient
import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagClient
import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagRequestDTO
import no.nav.veilarbvedtaksstotte.client.regoppslag.RegoppslagResponseDTO.AdresseType.UTENLANDSKPOSTADRESSE
import no.nav.veilarbvedtaksstotte.client.veilederogenhet.VeilarbveilederClient
import no.nav.veilarbvedtaksstotte.domain.Målform
import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType
import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak
import no.nav.veilarbvedtaksstotte.utils.DateFormatters
import no.nav.veilarbvedtaksstotte.utils.StringUtils.splitNewline
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.time.LocalDate
import java.util.*
import kotlin.jvm.optionals.getOrElse


@Service
class DokumentService(
Expand All @@ -35,7 +39,8 @@ class DokumentService(
val veilarbveilederClient: VeilarbveilederClient,
val dokarkivClient: DokarkivClient,
val enhetInfoService: EnhetInfoService,
val malTypeService: MalTypeService
val malTypeService: MalTypeService,
val oyeblikksbildeService: OyeblikksbildeService
) {

val log = LoggerFactory.getLogger(DokumentService::class.java)
Expand All @@ -52,13 +57,28 @@ class DokumentService(
val oppfolgingssak = veilarbarenaClient.oppfolgingssak(fnr)
.orElseThrow { throw IllegalStateException("Det finnes ingen oppfolgingssak i arena for vedtak id: ${vedtak.id}") }

val oyeblikksbildeForVedtak = oyeblikksbildeService.hentOyeblikksbildeForVedtak(vedtak.id)
val behovsVurderingData =
oyeblikksbildeForVedtak.firstOrNull { it.oyeblikksbildeType == OyeblikksbildeType.EGENVURDERING }
val registreringData =
oyeblikksbildeForVedtak.firstOrNull { it.oyeblikksbildeType == OyeblikksbildeType.REGISTRERINGSINFO }
val cvData =
oyeblikksbildeForVedtak.firstOrNull { it.oyeblikksbildeType == OyeblikksbildeType.CV_OG_JOBBPROFIL }

val behovsVurderingPdf = produserBehovsvurderingPdf(behovsVurderingData?.json)
val registeringPdf = produserRegisteringPdf(registreringData?.json)
val cvPDF = produserCVPdf(cvData?.json)

return journalforDokument(
tittel = tittel,
enhetId = produserDokumentDTO.enhetId,
fnr = fnr,
oppfolgingssak = oppfolgingssak,
malType = produserDokumentDTO.malType,
dokument = dokument,
oyeblikRegistreringDokument = registeringPdf.getOrElse { null },
oyeblikBehovsvurderingDokument = behovsVurderingPdf.getOrElse { null },
oyeblikCVDokument = cvPDF.getOrElse { null },
referanse = referanse
)
}
Expand All @@ -71,16 +91,96 @@ class DokumentService(
return pdfClient.genererPdf(brevdata)
}

fun produserBehovsvurderingPdf(data: String?): Optional<ByteArray> {
if (data != null && data.length > 50) {
val mapper = ObjectMapper()
return Optional.ofNullable(pdfClient.genererBehovsvurderingPdf(mapper.readTree(data)))
}
return Optional.empty()
}

fun produserRegisteringPdf(data: String?): Optional<ByteArray> {
if (data != null && data.length > 50) {
val mapper = ObjectMapper()
return Optional.ofNullable(pdfClient.genererRegistreringPdf(mapper.readTree(data)))
}
return Optional.empty()
}

fun produserCVPdf(data: String?): Optional<ByteArray> {
if (data != null && data.length > 50) {
val jsonToHtml = JsonViewer.jsonToHtml(data)
return Optional.ofNullable(
pdfClient.genererCVPdf(
PdfClient.CVPdfData(htmlView = jsonToHtml)
)
)
}
return Optional.empty()
}

fun journalforDokument(
tittel: String,
enhetId: EnhetId,
fnr: Fnr,
oppfolgingssak: String,
malType: MalType,
dokument: ByteArray,
oyeblikRegistreringDokument: ByteArray?,
oyeblikBehovsvurderingDokument: ByteArray?,
oyeblikCVDokument: ByteArray?,
referanse: UUID
): OpprettetJournalpostDTO {

val dokumenterList = mutableListOf<OpprettJournalpostDTO.Dokument>()

dokumenterList.add(
OpprettJournalpostDTO.Dokument(
tittel = tittel, brevkode = malType.name, dokumentvarianter = listOf(
OpprettJournalpostDTO.DokumentVariant(
"PDFA", fysiskDokument = dokument, variantformat = "ARKIV"
)
)
)
)

if (oyeblikRegistreringDokument != null) {
dokumenterList.add(
OpprettJournalpostDTO.Dokument(
tittel = "Registrering dokument", brevkode = malType.name, dokumentvarianter = listOf(
OpprettJournalpostDTO.DokumentVariant(
"PDFA", fysiskDokument = oyeblikRegistreringDokument, variantformat = "ARKIV"
)
)
)
)
}

if (oyeblikCVDokument != null) {
dokumenterList.add(
OpprettJournalpostDTO.Dokument(
tittel = "CV", brevkode = malType.name, dokumentvarianter = listOf(
OpprettJournalpostDTO.DokumentVariant(
"PDFA", fysiskDokument = oyeblikCVDokument, variantformat = "ARKIV"
)
)
)
)
}

if (oyeblikBehovsvurderingDokument != null) {
dokumenterList.add(
OpprettJournalpostDTO.Dokument(
tittel = "Behovsvurdering", brevkode = malType.name, dokumentvarianter = listOf(
OpprettJournalpostDTO.DokumentVariant(
"PDFA", fysiskDokument = oyeblikBehovsvurderingDokument, variantformat = "ARKIV"
)
)
)
)
}


val request = OpprettJournalpostDTO(
tittel = tittel,
journalpostType = OpprettJournalpostDTO.JournalpostType.UTGAAENDE,
Expand All @@ -97,15 +197,7 @@ class DokumentService(
fagsakId = oppfolgingssak, fagsaksystem = "AO01", // Arena-kode, siden oppfølgingssaken er fra Arena
sakstype = OpprettJournalpostDTO.Sak.Type.FAGSAK
),
dokumenter = listOf(
OpprettJournalpostDTO.Dokument(
tittel = tittel, brevkode = malType.name, dokumentvarianter = listOf(
OpprettJournalpostDTO.DokumentVariant(
"PDFA", fysiskDokument = dokument, variantformat = "ARKIV"
)
)
)
)
dokumenter = dokumenterList
)

return dokarkivClient.opprettJournalpost(request)
Expand Down Expand Up @@ -139,11 +231,13 @@ class DokumentService(
)
}

data class BrevdataOppslag(val enhetKontaktinformasjon: EnhetKontaktinformasjon,
vallform: Målform,
val veilederNavn: String,
val enhet: Enhet,
val kontaktEnhet: Enhet)
data class BrevdataOppslag(
val enhetKontaktinformasjon: EnhetKontaktinformasjon,
vallform: Målform,
val veilederNavn: String,
val enhet: Enhet,
val kontaktEnhet: Enhet
)

private fun hentBrevdata(fnr: Fnr, enhetId: EnhetId, veilederIdent: String): BrevdataOppslag {
val enhetKontaktinformasjon: EnhetKontaktinformasjon = enhetInfoService.utledEnhetKontaktinformasjon(enhetId)
Expand Down
Loading

0 comments on commit 73c9781

Please sign in to comment.