Skip to content

Commit b9503be

Browse files
Brevbestilling task (#92)
Brevbestilling task som journalfører og distribuerer. Bruker egen tabell tilsvarende det i k9-formidling for å holde oversikt over brevbestillinger. Distribusjon må gjøres i egen task fordi journalføring og distribusjon ikke er idempotent. * Opprett brevbestillings task etter iverksetting. * støtte for å svare med html basert på accept header * ung-sak.openapi.json updated by build pipeline * støtte for versjon og aktiv flagg for å manuelt stoppe brev Gjenstår: - utlede og hente data til templates fra behandlingtilstand - få andre brev (type varsel) til å funke med samme oppsett. - tester med TODOs skip-checks:true --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 1eeeed2 commit b9503be

File tree

39 files changed

+1482
-53
lines changed

39 files changed

+1482
-53
lines changed

deploy/dev-gcp.yml

+9-1
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,19 @@ spec:
222222
- name: UNGDOMSPROGRAMREGISTER_SCOPE
223223
value: api://dev-gcp.k9saksbehandling.ung-deltakelse-opplyser/.default
224224

225-
# Graphql services
225+
# Saf
226226
- name: SAF_BASE_URL
227227
value: https://saf-q2.dev-fss-pub.nais.io
228228
- name: SAF_SCOPE
229229
value: api://dev-fss.teamdokumenthandtering.saf/.default
230+
- name: DOKDISTFORDELING_URL
231+
value: https://dokdistfordeling.dev-fss-pub.nais.io/rest/v1
232+
- name: DOKDISTFORDELING_SCOPE
233+
value: api://dev-fss.teamdokumenthandtering.saf/.default
234+
- name: DOKARKIV_URL
235+
value: https://dokarkiv-q2.dev-fss-pub.nais.io/rest/journalpostapi/v1
236+
- name: DOKARKIV_SCOPE
237+
value: api://dev-fss.teamdokumenthandtering.dokarkiv/.default
230238

231239
# Sikkerhet:
232240
- name: CLIENT_SCOPE

deploy/prod-gcp.yml

+9-1
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,19 @@ spec:
193193
- name: UNGDOMSPROGRAMREGISTER_SCOPE
194194
value: api://prod-gcp.k9saksbehandling.ung-deltakelse-opplyser/.default
195195

196-
# Graphql services
196+
# Saf
197197
- name: SAF_BASE_URL
198198
value: https://saf.prod-fss-pub.nais.io
199199
- name: SAF_SCOPE
200200
value: api://prod-fss.teamdokumenthandtering.saf/.default
201+
- name: DOKDISTFORDELING_URL
202+
value: https://dokdistfordeling.prod-fss-pub.nais.io/rest/v1
203+
- name: DOKDISTFORDELING_SCOPE
204+
value: api://prod-fss.teamdokumenthandtering.saf/.default
205+
- name: DOKARKIV_URL
206+
value: https://dokarkiv.prod-fss-pub.nais.io/rest/journalpostapi/v1
207+
- name: DOKARKIV_SCOPE
208+
value: api://prod-fss.teamdokumenthandtering.dokarkiv/.default
201209

202210
# Sikkerhet:
203211
- name: CLIENT_SCOPE

domenetjenester/vedtak/pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
<groupId>no.nav.ung.sak</groupId>
3838
<artifactId>skjaeringstidspunkt</artifactId>
3939
</dependency>
40+
<dependency>
41+
<groupId>no.nav.ung.sak</groupId>
42+
<artifactId>formidling</artifactId>
43+
</dependency>
4044

4145
<!-- Prosjektinterne avhengigheter -->
4246
<dependency>

domenetjenester/vedtak/src/main/java/no/nav/ung/sak/domene/vedtak/observer/VedtakFattetEventObserver.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import no.nav.k9.prosesstask.api.ProsessTaskTjeneste;
99
import no.nav.ung.kodeverk.vedtak.IverksettingStatus;
1010
import no.nav.ung.sak.behandlingslager.behandling.vedtak.BehandlingVedtakEvent;
11+
import no.nav.ung.sak.formidling.BrevbestillingTask;
1112

1213
@ApplicationScoped
1314
public class VedtakFattetEventObserver {
@@ -24,7 +25,7 @@ public VedtakFattetEventObserver(ProsessTaskTjeneste taskTjeneste) {
2425

2526
public void observerBehandlingVedtak(@Observes BehandlingVedtakEvent event) {
2627
if (IverksettingStatus.IVERKSATT.equals(event.getVedtak().getIverksettingStatus())) {
27-
var gruppe = new ProsessTaskGruppe();
28+
var gruppe = new ProsessTaskGruppe(opprettTaskForBrevbestilling(event));
2829

2930
if (erBehandlingAvRettTypeForAbakus(event)) {
3031
gruppe.addNesteSekvensiell(opprettTaskForPubliseringAvVedtakMedYtelse(event));
@@ -33,10 +34,19 @@ public void observerBehandlingVedtak(@Observes BehandlingVedtakEvent event) {
3334
}
3435
}
3536

37+
private static ProsessTaskData opprettTaskForBrevbestilling(BehandlingVedtakEvent event) {
38+
ProsessTaskData prosessTaskData = ProsessTaskData.forProsessTask(BrevbestillingTask.class);
39+
prosessTaskData.setBehandling(event.getFagsakId(), event.getBehandlingId());
40+
return prosessTaskData;
41+
}
42+
43+
3644
private boolean erBehandlingAvRettTypeForAbakus(BehandlingVedtakEvent event) {
3745
return event.getBehandling().erYtelseBehandling();
3846
}
3947

48+
49+
4050
@Deprecated
4151
private ProsessTaskData opprettTaskForPubliseringAvVedtakMedYtelse(BehandlingVedtakEvent event) {
4252
final ProsessTaskData taskData = ProsessTaskData.forProsessTask(PubliserVedtattYtelseHendelseTask.class);

domenetjenester/vedtak/src/test/java/no/nav/ung/sak/domene/vedtak/observer/VedtakFattetEventObserverTest.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.ung.sak.domene.vedtak.observer;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
34
import static org.mockito.ArgumentMatchers.any;
45
import static org.mockito.Mockito.mock;
56
import static org.mockito.Mockito.never;
@@ -8,6 +9,7 @@
89
import static org.mockito.Mockito.when;
910

1011
import java.time.LocalDateTime;
12+
import java.util.Collection;
1113
import java.util.Optional;
1214

1315
import org.junit.jupiter.api.BeforeEach;
@@ -31,6 +33,7 @@
3133
import no.nav.ung.sak.behandlingslager.behandling.vedtak.BehandlingVedtakEvent;
3234
import no.nav.ung.sak.behandlingslager.behandling.vedtak.BehandlingVedtakRepository;
3335
import no.nav.ung.sak.db.util.JpaExtension;
36+
import no.nav.ung.sak.formidling.BrevbestillingTask;
3437
import no.nav.ung.sak.typer.AktørId;
3538

3639
@ExtendWith(CdiAwareExtension.class)
@@ -59,16 +62,15 @@ public void setup() {
5962
}
6063

6164
@Test
62-
//TODO endre til å sjekke brevtask
6365
public void publisererVedtakForIverksatteVedtak() {
6466
var behandlingVedtakEvent = lagVedtakEvent(IverksettingStatus.IVERKSATT, VedtakResultatType.INNVILGET);
6567
vedtakFattetEventObserver.observerBehandlingVedtak(behandlingVedtakEvent);
6668

6769
verify(prosessTaskRepository, times(1)).lagre(prosessTaskGruppeCaptorCaptor.capture());
68-
// assertThat(prosessTaskGruppeCaptorCaptor.getAllValues().stream().map(ProsessTaskGruppe::getTasks)
69-
// .flatMap(Collection::stream)
70-
// .map(it -> it.getTask().getTaskType()))
71-
// .containsExactlyInAnyOrder(PubliserVedtattYtelseHendelseTask.TASKTYPE, PubliserVedtakHendelseTask.TASKTYPE);
70+
assertThat(prosessTaskGruppeCaptorCaptor.getAllValues().stream().map(ProsessTaskGruppe::getTasks)
71+
.flatMap(Collection::stream)
72+
.map(it -> it.getTask().getTaskType()))
73+
.containsExactlyInAnyOrder(PubliserVedtattYtelseHendelseTask.TASKTYPE, BrevbestillingTask.TASKTYPE);
7274
}
7375

7476
@Test
@@ -80,16 +82,15 @@ public void publisererVedtakForIverksatteVedtak() {
8082
}
8183

8284
@Test
83-
//TODO endre til å sjekke brevtask
8485
public void publisererKunGenereltVedtakseventVedAvslag() {
8586
var behandlingVedtakEvent = lagVedtakEvent(IverksettingStatus.IVERKSATT, VedtakResultatType.AVSLAG);
8687
vedtakFattetEventObserver.observerBehandlingVedtak(behandlingVedtakEvent);
8788

88-
// verify(prosessTaskRepository, times(1)).lagre(prosessTaskGruppeCaptorCaptor.capture());
89-
// assertThat(prosessTaskGruppeCaptorCaptor.getAllValues().stream().map(ProsessTaskGruppe::getTasks)
90-
// .flatMap(Collection::stream)
91-
// .map(it -> it.getTask().getTaskType()))
92-
// .containsExactly(PubliserVedtakHendelseTask.TASKTYPE, PubliserVedtattYtelseHendelseTask.TASKTYPE);
89+
verify(prosessTaskRepository, times(1)).lagre(prosessTaskGruppeCaptorCaptor.capture());
90+
assertThat(prosessTaskGruppeCaptorCaptor.getAllValues().stream().map(ProsessTaskGruppe::getTasks)
91+
.flatMap(Collection::stream)
92+
.map(it -> it.getTask().getTaskType()))
93+
.containsExactly(BrevbestillingTask.TASKTYPE, PubliserVedtattYtelseHendelseTask.TASKTYPE);
9394
}
9495

9596
private Behandling lagBehandling() {

formidling/src/main/java/no/nav/ung/sak/formidling/BrevGenerererTjeneste.java

+7-13
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55

66
import jakarta.enterprise.context.ApplicationScoped;
77
import jakarta.inject.Inject;
8-
import no.nav.ung.kodeverk.formidling.IdType;
9-
import no.nav.ung.kodeverk.formidling.RolleType;
108
import no.nav.ung.sak.behandlingslager.aktør.PersoninfoBasis;
119
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
1210
import no.nav.ung.sak.behandlingslager.behandling.repository.BehandlingRepository;
1311
import no.nav.ung.sak.domene.person.pdl.AktørTjeneste;
1412
import no.nav.ung.sak.domene.person.pdl.PersonBasisTjeneste;
1513
import no.nav.ung.sak.formidling.domene.GenerertBrev;
14+
import no.nav.ung.sak.formidling.domene.PdlPerson;
1615
import no.nav.ung.sak.formidling.dto.Brevbestilling;
17-
import no.nav.ung.sak.formidling.dto.PartResponseDto;
1816
import no.nav.ung.sak.formidling.pdfgen.PdfGenDokument;
1917
import no.nav.ung.sak.formidling.pdfgen.PdfGenKlient;
2018
import no.nav.ung.sak.formidling.template.TemplateInput;
@@ -63,30 +61,26 @@ public GenerertBrev generer(Brevbestilling brevbestilling) {
6361
// konverter til pdf fra templateData
6462
PdfGenDokument dokument = pdfGen.lagDokument(input);
6563

66-
var mottaker = mapPartResponseDto(pdlMottaker);
6764
return new GenerertBrev(
6865
dokument,
69-
mottaker,
70-
mottaker,
66+
pdlMottaker,
67+
pdlMottaker,
7168
brevbestilling.malType(),
7269
input.templateType()
7370
);
7471
}
7572

76-
private PartResponseDto mapPartResponseDto(PDLMottaker pdlMottaker) {
77-
return new PartResponseDto(pdlMottaker.aktørId.getAktørId(), pdlMottaker.navn, IdType.AKTØRID, RolleType.BRUKER);
78-
}
79-
80-
private PDLMottaker hentMottaker(Behandling behandling) {
73+
private PdlPerson hentMottaker(Behandling behandling) {
8174
AktørId aktørId = behandling.getFagsak().getAktørId();
8275
var personIdent = aktørTjeneste.hentPersonIdentForAktørId(aktørId)
8376
.orElseThrow(() -> new IllegalArgumentException("Fant ikke person med aktørid"));
8477
PersoninfoBasis personinfoBasis = personBasisTjeneste.hentBasisPersoninfo(aktørId, personIdent);
8578

8679
String fnr = personIdent.getIdent();
8780
Objects.requireNonNull(fnr);
88-
return new PDLMottaker(fnr, aktørId, personinfoBasis.getNavn());
81+
return new PdlPerson(fnr, aktørId, personinfoBasis.getNavn());
8982
}
9083

91-
record PDLMottaker(String fnr, AktørId aktørId, String navn) {}
84+
9285
}
86+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package no.nav.ung.sak.formidling;
2+
3+
import java.util.List;
4+
5+
import jakarta.enterprise.context.Dependent;
6+
import jakarta.inject.Inject;
7+
import jakarta.persistence.EntityManager;
8+
import jakarta.persistence.TypedQuery;
9+
import no.nav.ung.sak.formidling.domene.BehandlingBrevbestillingEntitet;
10+
import no.nav.ung.sak.formidling.domene.BrevbestillingEntitet;
11+
12+
@Dependent
13+
public class BrevbestillingRepository {
14+
private final EntityManager entityManager;
15+
16+
@Inject
17+
public BrevbestillingRepository(EntityManager entityManager) {
18+
this.entityManager = entityManager;
19+
}
20+
21+
22+
public List<BehandlingBrevbestillingEntitet> hentForBehandling(Long behandlingId) {
23+
TypedQuery<BehandlingBrevbestillingEntitet> query = entityManager.createQuery(
24+
"from BehandlingBrevbestillingEntitet b where b.behandlingId = :behandlingId and aktiv = true",
25+
BehandlingBrevbestillingEntitet.class
26+
);
27+
query.setParameter("behandlingId", behandlingId);
28+
29+
return query.getResultList();
30+
}
31+
32+
public void lagreForBehandling(BehandlingBrevbestillingEntitet bestilling) {
33+
entityManager.persist(bestilling);
34+
entityManager.flush();
35+
}
36+
37+
public void lagre(BrevbestillingEntitet bestilling) {
38+
entityManager.persist(bestilling);
39+
entityManager.flush();
40+
}
41+
42+
public BrevbestillingEntitet hent(Long id) {
43+
TypedQuery<BrevbestillingEntitet> query = entityManager.createQuery(
44+
"from BrevbestillingEntitet b where b.id = :id and aktiv = true",
45+
BrevbestillingEntitet.class
46+
);
47+
query.setParameter("id", id);
48+
49+
return query.getSingleResult();
50+
51+
}
52+
53+
}

0 commit comments

Comments
 (0)