Skip to content

Commit

Permalink
Feature/lokalprint (#836)
Browse files Browse the repository at this point in the history
* Legg til lokalprint

* Fiks kompileringsfeil

* Fjern todo

* kan oppdatere brev med distribusjonstype

---------

Co-authored-by: ramziabuqassim <[email protected]>
  • Loading branch information
routsi and RamziAbuQassim authored Aug 16, 2024
1 parent 3ba3aec commit 667b399
Show file tree
Hide file tree
Showing 6 changed files with 364 additions and 82 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.zaxxer.hikari.HikariDataSource
import no.nav.pensjon.brev.api.model.maler.BrevbakerBrevdata
import no.nav.pensjon.brev.api.model.maler.Brevkode
import no.nav.pensjon.brev.skribenten.letter.Edit
import no.nav.pensjon.brev.skribenten.model.Distribusjonstype
import no.nav.pensjon.brev.skribenten.model.NavIdent
import no.nav.pensjon.brevbaker.api.model.LanguageCode
import org.jetbrains.exposed.dao.LongEntity
Expand Down Expand Up @@ -53,6 +54,7 @@ object BrevredigeringTable : LongIdTable() {
val redigertBrev = json<Edit.Letter>("redigertBrev", databaseObjectMapper::writeValueAsString, databaseObjectMapper::readValue)
val redigertBrevHash: Column<ByteArray> = hashColumn("redigertBrevHash")
val laastForRedigering: Column<Boolean> = bool("laastForRedigering")
val distribusjonstype: Column<Distribusjonstype?> = varchar("distribusjonstype", length = 50).nullable().transform(Distribusjonstype::valueOf, Distribusjonstype::name)
val redigeresAvNavIdent: Column<String?> = varchar("redigeresAvNavIdent", length = 50).nullable()
val sistRedigertAvNavIdent: Column<String> = varchar("sistRedigertAvNavIdent", length = 50)
val opprettetAvNavIdent: Column<String> = varchar("opprettetAvNavIdent", length = 50).index()
Expand All @@ -70,6 +72,7 @@ class Brevredigering(id: EntityID<Long>) : LongEntity(id) {
var redigertBrev by BrevredigeringTable.redigertBrev.writeHashTo(BrevredigeringTable.redigertBrevHash)
val redigertBrevHash by BrevredigeringTable.redigertBrevHash.editLetterHash()
var laastForRedigering by BrevredigeringTable.laastForRedigering
var distribusjonstype by BrevredigeringTable.distribusjonstype
var redigeresAvNavIdent by BrevredigeringTable.redigeresAvNavIdent.wrap(::NavIdent, NavIdent::id)
var sistRedigertAvNavIdent by BrevredigeringTable.sistRedigertAvNavIdent.wrap(::NavIdent, NavIdent::id)
var opprettetAvNavIdent by BrevredigeringTable.opprettetAvNavIdent.wrap(::NavIdent, NavIdent::id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ object Api {
val redigertBrev: Edit.Letter,
)

data class DelvisOppdaterBrevRequest(val laastForRedigering: Boolean?)
data class DelvisOppdaterBrevRequest(val laastForRedigering: Boolean?, val distribusjonstype: Distribusjonstype?)

data class BrevInfo(
val id: Long,
Expand All @@ -39,6 +39,7 @@ object Api {
val sistredigert: Instant,
val brevkode: Brevkode.Redigerbar,
val status: BrevStatus,
val distribusjonstype: Distribusjonstype?
)

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.pensjon.brev.skribenten.model

enum class Distribusjonstype {
SENTRALPRINT,
LOKALPRINT,
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import no.nav.pensjon.brev.api.model.maler.BrevbakerBrevdata
import no.nav.pensjon.brev.api.model.maler.Brevkode
import no.nav.pensjon.brev.api.model.maler.RedigerbarBrevdata
import no.nav.pensjon.brev.skribenten.db.*
import no.nav.pensjon.brev.skribenten.db.BrevredigeringTable.distribusjonstype
import no.nav.pensjon.brev.skribenten.letter.Edit
import no.nav.pensjon.brev.skribenten.letter.toEdit
import no.nav.pensjon.brev.skribenten.letter.toMarkup
import no.nav.pensjon.brev.skribenten.letter.updateEditedLetter
import no.nav.pensjon.brev.skribenten.model.Api
import no.nav.pensjon.brev.skribenten.model.Distribusjonstype
import no.nav.pensjon.brev.skribenten.model.NavIdent
import no.nav.pensjon.brev.skribenten.model.Pen
import no.nav.pensjon.brev.skribenten.model.Pen.SendRedigerbartBrevRequest
Expand All @@ -22,7 +24,6 @@ import no.nav.pensjon.brevbaker.api.model.LetterMarkup
import no.nav.pensjon.brevbaker.api.model.SignerendeSaksbehandlere
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.statements.api.ExposedBlob
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
import org.jetbrains.exposed.sql.transactions.transaction
import java.sql.Connection
import java.time.Instant
Expand All @@ -37,7 +38,6 @@ data class GeneriskRedigerbarBrevdata(

class KanIkkeReservereBrevredigeringException(override val message: String, val response: Api.ReservasjonResponse) : RuntimeException(message)

// TODO: newSuspendedTransaction er blocking, så vi bør mest sannsynlig holde kall til andre tjenester utenfor transaksjoner.
class BrevredigeringService(
private val brevbakerService: BrevbakerService,
private val penService: PenService,
Expand Down Expand Up @@ -85,7 +85,15 @@ class BrevredigeringService(
nyttRedigertbrev: Edit.Letter?,
): ServiceResult<Api.BrevResponse>? =
hentBrevMedReservasjon(call = call, brevId = brevId, saksId = saksId) { brev ->
rendreBrev(call, brev.brevkode, brev.spraak, brev.saksId, nyeSaksbehandlerValg ?: brev.saksbehandlerValg, brev.avsenderEnhetId, call.principal().navIdent())
rendreBrev(
call,
brev.brevkode,
brev.spraak,
brev.saksId,
nyeSaksbehandlerValg ?: brev.saksbehandlerValg,
brev.avsenderEnhetId,
call.principal().navIdent()
)
.map { (nyttRedigertbrev ?: brev.redigertBrev).updateEditedLetter(it) }
.map { oppdatertBrev ->
transaction {
Expand All @@ -103,6 +111,7 @@ class BrevredigeringService(
transaction {
Brevredigering.findByIdAndSaksId(brevId, saksId)?.apply {
patch.laastForRedigering?.also { laastForRedigering = it }
patch.distribusjonstype?.also { distribusjonstype = it }
}
}?.mapBrev()

Expand Down Expand Up @@ -260,33 +269,34 @@ class BrevredigeringService(
}
}

suspend fun sendBrev(call: ApplicationCall, saksId: Long, brevId: Long): ServiceResult<Pen.BestillBrevResponse>? =
newSuspendedTransaction {
val brevredigering = Brevredigering.findByIdAndSaksId(brevId, saksId)
val document = brevredigering?.document?.firstOrNull()
suspend fun sendBrev(call: ApplicationCall, saksId: Long, brevId: Long): ServiceResult<Pen.BestillBrevResponse>? {
val (brevredigering, document) = transaction { Brevredigering.findByIdAndSaksId(brevId, saksId).let { it to it?.document?.firstOrNull() } }

if (document != null) {
brevbakerService.getRedigerbarTemplate(call, brevredigering.brevkode).then {
penService.sendbrev(
call,
SendRedigerbartBrevRequest(
dokumentDato = document.dokumentDato,
saksId = brevredigering.saksId,
enhetId = brevredigering.avsenderEnhetId,
templateDescription = it,
brevkode = brevredigering.brevkode,
pdf = document.pdf.bytes,
eksternReferanseId = "skribenten:${brevredigering.id}",
)
)
}.onOk {
if (it.journalpostId != null) {
return if (brevredigering != null && document != null) {
brevbakerService.getRedigerbarTemplate(call, brevredigering.brevkode).then {
penService.sendbrev(
call,
SendRedigerbartBrevRequest(
dokumentDato = document.dokumentDato,
saksId = brevredigering.saksId,
enhetId = brevredigering.avsenderEnhetId,
templateDescription = it,
brevkode = brevredigering.brevkode,
pdf = document.pdf.bytes,
eksternReferanseId = "skribenten:${brevredigering.id}",
),
distribuer = brevredigering.distribusjonstype == Distribusjonstype.SENTRALPRINT,
)
}.onOk {
if (it.journalpostId != null) {
transaction {
document.delete()
brevredigering.delete()
}
}
} else null
}
}
} else null
}

private fun Brevredigering.mapBrev(): Api.BrevResponse =
Api.BrevResponse(
Expand All @@ -310,6 +320,7 @@ class BrevredigeringService(
redigeresAv != null -> Api.BrevStatus.UnderRedigering(redigeresAv)
else -> Api.BrevStatus.Kladd
},
distribusjonstype = distribusjonstype,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,12 @@ class PenService(config: Config, authService: AzureADService) : ServiceStatus {
suspend fun sendbrev(
call: ApplicationCall,
sendRedigerbartBrevRequest: SendRedigerbartBrevRequest,
distribuer: Boolean,
): ServiceResult<Pen.BestillBrevResponse> =
client.post(call, "brev/skribenten/sendbrev") {
setBody(sendRedigerbartBrevRequest)
contentType(ContentType.Application.Json)
url { parameters.append("distribuer", distribuer.toString()) }
}.toServiceResult<Pen.BestillBrevResponse>(::handlePenErrorResponse)


Expand Down
Loading

0 comments on commit 667b399

Please sign in to comment.