Skip to content

Commit

Permalink
Merge pull request #3255 from navikt/feature/flytt-kontaktpersoner-ho…
Browse files Browse the repository at this point in the history
…vedenhet

Flytt kontaktpersoner hos arrangør til å henge på hovedenhet
  • Loading branch information
fredrikpe authored Feb 13, 2024
2 parents d5f090d + 782190a commit 16b6680
Show file tree
Hide file tree
Showing 17 changed files with 328 additions and 395 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export const TiltaksgjennomforingSkjemaDetaljer = ({ tiltaksgjennomforing, avtal
data: virksomhetKontaktpersoner,
isLoading: isLoadingVirksomhetKontaktpersoner,
refetch: refetchVirksomhetKontaktpersoner,
} = useVirksomhetKontaktpersoner(watch("tiltaksArrangorUnderenhetOrganisasjonsnummer"));
} = useVirksomhetKontaktpersoner(avtale.leverandor.organisasjonsnummer);

const watchErMidlertidigStengt = watch("midlertidigStengt.erMidlertidigStengt");
const watchVisEstimertVentetid = watch("visEstimertVentetid");
Expand Down Expand Up @@ -399,9 +399,6 @@ export const TiltaksgjennomforingSkjemaDetaljer = ({ tiltaksgjennomforing, avtal
label="Tiltaksarrangør underenhet"
placeholder="Velg underenhet for tiltaksarrangør"
{...register("tiltaksArrangorUnderenhetOrganisasjonsnummer")}
onChange={() => {
setValue("arrangorKontaktpersoner", []);
}}
onClearValue={() => {
setValue("tiltaksArrangorUnderenhetOrganisasjonsnummer", "");
}}
Expand All @@ -410,34 +407,31 @@ export const TiltaksgjennomforingSkjemaDetaljer = ({ tiltaksgjennomforing, avtal
}
options={arrangorUnderenheterOptions(avtale, virksomhet)}
/>
{watch("tiltaksArrangorUnderenhetOrganisasjonsnummer") &&
!tiltaksgjennomforing?.arrangor?.slettet && (
<div className={skjemastyles.virksomhet_kontaktperson_container}>
<ControlledMultiSelect
size="small"
placeholder={
isLoadingVirksomhetKontaktpersoner ? "Laster kontaktpersoner..." : "Velg en"
}
label={"Kontaktperson hos arrangøren"}
{...register("arrangorKontaktpersoner")}
options={
virksomhetKontaktpersoner?.map((person) => ({
value: person.id,
label: person.navn,
})) ?? []
}
/>
<Button
className={skjemastyles.kontaktperson_button}
size="small"
type="button"
variant="tertiary"
onClick={() => virksomhetKontaktpersonerModalRef.current?.showModal()}
>
Rediger eller legg til kontaktpersoner
</Button>
</div>
)}
<div className={skjemastyles.virksomhet_kontaktperson_container}>
<ControlledMultiSelect
size="small"
placeholder={
isLoadingVirksomhetKontaktpersoner ? "Laster kontaktpersoner..." : "Velg en"
}
label={"Kontaktperson hos arrangøren"}
{...register("arrangorKontaktpersoner")}
options={
virksomhetKontaktpersoner?.map((person) => ({
value: person.id,
label: person.navn,
})) ?? []
}
/>
<Button
className={skjemastyles.kontaktperson_button}
size="small"
type="button"
variant="tertiary"
onClick={() => virksomhetKontaktpersonerModalRef.current?.showModal()}
>
Rediger eller legg til kontaktpersoner
</Button>
</div>
<TextField
size="small"
label="Sted for gjennomføring"
Expand All @@ -452,22 +446,20 @@ export const TiltaksgjennomforingSkjemaDetaljer = ({ tiltaksgjennomforing, avtal
</FormGroup>
</div>
</div>
{watch("tiltaksArrangorUnderenhetOrganisasjonsnummer") && (
<VirksomhetKontaktpersonerModal
orgnr={watch("tiltaksArrangorUnderenhetOrganisasjonsnummer")}
modalRef={virksomhetKontaktpersonerModalRef}
onClose={() => {
refetchVirksomhetKontaktpersoner().then((res) => {
setValue(
"arrangorKontaktpersoner",
watch("arrangorKontaktpersoner").filter((id: string) =>
res?.data?.some((p) => p.id === id),
),
);
});
}}
/>
)}
<VirksomhetKontaktpersonerModal
orgnr={avtale.leverandor.organisasjonsnummer}
modalRef={virksomhetKontaktpersonerModalRef}
onClose={() => {
refetchVirksomhetKontaktpersoner().then((res) => {
setValue(
"arrangorKontaktpersoner",
watch("arrangorKontaktpersoner").filter((id: string) =>
res?.data?.some((p) => p.id === id),
),
);
});
}}
/>
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,60 @@
package no.nav.mulighetsrommet.api.clients.arenaadapter

import io.ktor.client.call.*
import io.ktor.client.engine.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
import io.ktor.client.plugins.cache.*
import io.ktor.client.request.*
import io.ktor.http.*
import no.nav.mulighetsrommet.domain.dto.ArenaTiltaksgjennomforingDto
import no.nav.mulighetsrommet.domain.dto.ExchangeArenaIdForIdResponse
import no.nav.mulighetsrommet.ktor.clients.httpJsonClient
import org.slf4j.LoggerFactory
import java.util.*

interface ArenaAdapterClient {
suspend fun exchangeTiltaksgjennomforingsArenaIdForId(arenaId: String): ExchangeArenaIdForIdResponse?
private val log = LoggerFactory.getLogger(ArenaAdapterClient::class.java)

suspend fun hentArenadata(id: UUID): ArenaTiltaksgjennomforingDto?
class ArenaAdapterClient(
private val baseUrl: String,
private val machineToMachineTokenClient: () -> String,
clientEngine: HttpClientEngine = CIO.create(),
) {
val client = httpJsonClient(clientEngine).config {
install(HttpCache)
}

suspend fun exchangeTiltaksgjennomforingsArenaIdForId(arenaId: String): ExchangeArenaIdForIdResponse? {
val response = client.get("$baseUrl/api/exchange/$arenaId") {
bearerAuth(
machineToMachineTokenClient.invoke(),
)
}

return when (response.status) {
HttpStatusCode.OK -> response.body()
HttpStatusCode.NotFound -> {
log.info("Tiltaksgjennomføring finnes ikke: $arenaId")
null
}
else -> throw ResponseException(response, "Unexpected response from arena-adapter")
}
}

suspend fun hentArenadata(id: UUID): ArenaTiltaksgjennomforingDto? {
val response = client.get("$baseUrl/api/arenadata/$id") {
bearerAuth(
machineToMachineTokenClient.invoke(),
)
}

return when (response.status) {
HttpStatusCode.OK -> response.body()
HttpStatusCode.NotFound -> {
log.info("Tiltaksgjennomføring finnes ikke: $id")
null
}
else -> throw ResponseException(response, "Unexpected response from arena-adapter")
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,50 @@
package no.nav.mulighetsrommet.api.clients.dialog

import io.ktor.client.call.*
import io.ktor.client.engine.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.cache.*
import io.ktor.client.request.*
import io.ktor.http.*
import no.nav.mulighetsrommet.api.services.DialogRequest
import no.nav.mulighetsrommet.api.services.DialogResponse
import no.nav.mulighetsrommet.ktor.clients.httpJsonClient
import no.nav.mulighetsrommet.securelog.SecureLog
import org.slf4j.LoggerFactory

interface VeilarbdialogClient {
suspend fun sendMeldingTilDialogen(fnr: String, accessToken: String, requestBody: DialogRequest): DialogResponse?
class VeilarbdialogClient(
private val baseUrl: String,
private val tokenProvider: (accessToken: String) -> String,
clientEngine: HttpClientEngine = CIO.create(),
) {
private val log = LoggerFactory.getLogger(javaClass)

private val client = httpJsonClient(clientEngine).config {
install(HttpCache)
}

suspend fun sendMeldingTilDialogen(
fnr: String,
accessToken: String,
requestBody: DialogRequest,
): DialogResponse? {
return try {
val response = client.post("$baseUrl/dialog?fnr=$fnr") {
bearerAuth(tokenProvider.invoke(accessToken))
header(HttpHeaders.ContentType, ContentType.Application.Json)
setBody(requestBody)
}

if (response.status == HttpStatusCode.Conflict) {
log.info("Kan ikke sende melding til dialogen, bruker oppfyller ikke kravene for digital kommunikasjon")
return null
}

return response.body<DialogResponse>()
} catch (exe: Exception) {
SecureLog.logger.error("Klarte ikke sende melding til dialogen til bruker med fnr: $fnr", exe)
log.error("Klarte ikke sende melding til dialogen. Se detaljer i secureLog.")
null
}
}
}

This file was deleted.

Loading

0 comments on commit 16b6680

Please sign in to comment.