Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EY-5079: Viser alle oppgaver som har enhet Vikafossen, også de som ikke er gradert #7243

Merged
merged 2 commits into from
Mar 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import no.nav.etterlatte.libs.common.oppgave.OppgaveType
import no.nav.etterlatte.libs.common.oppgave.OppgavebenkStats
import no.nav.etterlatte.libs.common.oppgave.Status
import no.nav.etterlatte.libs.common.oppgave.VentefristGaarUt
import no.nav.etterlatte.libs.common.person.AdressebeskyttelseGradering
import no.nav.etterlatte.libs.common.person.maskerFnr
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
Expand Down Expand Up @@ -62,8 +61,6 @@ interface OppgaveDao {

fun hentAntallOppgaver(innloggetSaksbehandlerIdent: String): OppgavebenkStats

fun finnOppgaverForStrengtFortroligOgStrengtFortroligUtland(): List<OppgaveIntern>

fun settNySaksbehandler(
oppgaveId: UUID,
saksbehandler: String,
Expand Down Expand Up @@ -353,21 +350,15 @@ class OppgaveDaoImpl(
LEFT JOIN saksbehandler_info si ON o.saksbehandler = si.id
WHERE (? OR o.status = ANY(?))
AND o.enhet = ANY(?)
AND (
s.adressebeskyttelse is null OR
(s.adressebeskyttelse is NOT NULL AND (s.adressebeskyttelse != ? AND s.adressebeskyttelse != ?))
)
AND (? OR o.saksbehandler = ?)
""".trimIndent(),
)

statement.setBoolean(1, oppgaveStatuser.isEmpty() || oppgaveStatuser.contains(VISALLE))
statement.setArray(2, createArrayOf("text", oppgaveStatuser.toTypedArray()))
statement.setArray(3, createArrayOf("text", enheter.map { it.enhetNr }.toTypedArray()))
statement.setString(4, AdressebeskyttelseGradering.STRENGT_FORTROLIG.name)
statement.setString(5, AdressebeskyttelseGradering.STRENGT_FORTROLIG_UTLAND.name)
statement.setBoolean(6, minOppgavelisteIdentFilter == null)
statement.setString(7, minOppgavelisteIdentFilter)
statement.setBoolean(4, minOppgavelisteIdentFilter == null)
statement.setString(5, minOppgavelisteIdentFilter)

statement
.executeQuery()
Expand Down Expand Up @@ -441,33 +432,6 @@ class OppgaveDaoImpl(
}
}

override fun finnOppgaverForStrengtFortroligOgStrengtFortroligUtland(): List<OppgaveIntern> =
connectionAutoclosing.hentConnection {
with(it) {
val statement =
prepareStatement(
"""
SELECT o.id, o.status, o.enhet, o.sak_id, o.type, o.saksbehandler, o.referanse, o.gruppe_id,
o.merknad, o.opprettet, o.saktype, o.fnr, o.frist, o.kilde, o.forrige_saksbehandler, si.navn
FROM oppgave o
INNER JOIN sak s ON o.sak_id = s.id
LEFT JOIN saksbehandler_info si ON o.saksbehandler = si.id
WHERE ((s.adressebeskyttelse = ?) OR (s.adressebeskyttelse = ?))
""".trimIndent(),
)
statement.setString(1, AdressebeskyttelseGradering.STRENGT_FORTROLIG.name)
statement.setString(2, AdressebeskyttelseGradering.STRENGT_FORTROLIG_UTLAND.name)

statement
.executeQuery()
.toList {
asOppgave()
}.also { oppgaveliste ->
logger.info("Hentet antall nye oppgaver: ${oppgaveliste.size}")
}
}
}

override fun settNySaksbehandler(
oppgaveId: UUID,
saksbehandler: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,6 @@ class OppgaveDaoMedEndringssporingImpl(
override fun hentAntallOppgaver(innloggetSaksbehandlerIdent: String): OppgavebenkStats =
oppgaveDao.hentAntallOppgaver(innloggetSaksbehandlerIdent)

override fun finnOppgaverForStrengtFortroligOgStrengtFortroligUtland(): List<OppgaveIntern> =
oppgaveDao.finnOppgaverForStrengtFortroligOgStrengtFortroligUtland()

override fun settNySaksbehandler(
oppgaveId: UUID,
saksbehandler: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,12 @@ class OppgaveService(
oppgaveStatuser: List<String>,
minOppgavelisteIdentFilter: String? = null,
): List<OppgaveIntern> =
if (bruker.saksbehandlerMedRoller.harRolleStrengtFortrolig()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Burde denne sjekken gjøres uansett?

Copy link
Contributor

@sebassonav sebassonav Mar 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hvis vi åpner for bytting mellom adressebeskyttelse og ikke på enheter så må vi i hvertfall sjekke dette og slik det er nå i tilfelle sb bytter feil.

oppgaveDao.finnOppgaverForStrengtFortroligOgStrengtFortroligUtland()
} else {
oppgaveDao
.hentOppgaver(
bruker.enheter(),
oppgaveStatuser,
minOppgavelisteIdentFilter,
).sortedByDescending { it.opprettet }
}
oppgaveDao
.hentOppgaver(
bruker.enheter(),
oppgaveStatuser,
minOppgavelisteIdentFilter,
).sortedByDescending { it.opprettet }

fun genererStatsForOppgaver(innloggetSaksbehandlerIdent: String): OppgavebenkStats =
oppgaveDao.hentAntallOppgaver(innloggetSaksbehandlerIdent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,9 @@ class SakServiceImpl(
return enhet ?: enhetFraNorg
}

/**
* Denne skal aldri brukes uten å også endre enhet. Tror dette egentlig bør gjøres i sammenheng.
*/
override fun oppdaterAdressebeskyttelse(
sakId: SakId,
adressebeskyttelseGradering: AdressebeskyttelseGradering,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import no.nav.etterlatte.libs.common.oppgave.OppgaveIntern
import no.nav.etterlatte.libs.common.oppgave.OppgaveKilde
import no.nav.etterlatte.libs.common.oppgave.OppgaveType
import no.nav.etterlatte.libs.common.oppgave.Status
import no.nav.etterlatte.libs.common.person.AdressebeskyttelseGradering
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import no.nav.etterlatte.mockedSakTilgangDao
Expand Down Expand Up @@ -276,40 +275,6 @@ internal class OppgaveDaoTest(
assertEquals(Enheter.PORSGRUNN.enhetNr, hentetOppgave?.enhet)
}

@Test
fun `Skal ikke kunne hente adressebeskyttede oppgaver fra vanlig hentoppgaver`() {
val sakAalesund = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val oppgaveNy = lagNyOppgave(sakAalesund)
oppgaveDao.opprettOppgave(oppgaveNy)
sakSkrivDao.oppdaterAdresseBeskyttelse(sakAalesund.id, AdressebeskyttelseGradering.STRENGT_FORTROLIG)

val sakutenbeskyttelse = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val oppgaveUtenbeskyttelse = lagNyOppgave(sakutenbeskyttelse)
oppgaveDao.opprettOppgave(oppgaveUtenbeskyttelse)

val hentetOppgave =
oppgaveDao.hentOppgaver(
listOf(Enheter.AALESUND.enhetNr),
Status.entries.map { it.name },
)
assertEquals(1, hentetOppgave.size)
}

@Test
fun `Skal kunne hente adressebeskyttede oppgaver fra finnOppgaverForStrengtFortroligOgStrengtFortroligUtland`() {
val sakAalesund = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val oppgaveNy = lagNyOppgave(sakAalesund)
oppgaveDao.opprettOppgave(oppgaveNy)
sakSkrivDao.oppdaterAdresseBeskyttelse(sakAalesund.id, AdressebeskyttelseGradering.STRENGT_FORTROLIG)

val ikkeGradertSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val ikkeGradertOppgave = lagNyOppgave(ikkeGradertSak)
oppgaveDao.opprettOppgave(ikkeGradertOppgave)

val hentetOppgave = oppgaveDao.finnOppgaverForStrengtFortroligOgStrengtFortroligUtland()
assertEquals(1, hentetOppgave.size)
}

@Test
fun `Skal få false om oppgave med type ikke finnes`() {
val sakAalesund = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.etterlatte.oppgave

import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldNotBe
import io.mockk.clearAllMocks
Expand Down Expand Up @@ -40,6 +41,8 @@ import no.nav.etterlatte.libs.common.tidspunkt.toLocalDatetimeUTC
import no.nav.etterlatte.libs.common.tidspunkt.toTidspunkt
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.libs.ktor.token.Claims
import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER2_FOEDSELSNUMMER
import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER_FOEDSELSNUMMER
import no.nav.etterlatte.nyKontekstMedBruker
import no.nav.etterlatte.nyKontekstMedBrukerOgDatabaseContext
import no.nav.etterlatte.sak.SakLesDao
Expand Down Expand Up @@ -898,17 +901,21 @@ internal class OppgaveServiceTest(

@Test
fun `Skal kun få saker som ikke er adressebeskyttet tilbake hvis saksbehandler ikke har spesialroller`() {
val opprettetSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val nyOppgave =
val saksbehandlerRoller = generateSaksbehandlerMedRoller(AzureGroup.SAKSBEHANDLER)
every { saksbehandler.enheter() } returns listOf(Enheter.AALESUND.enhetNr)
every { saksbehandler.saksbehandlerMedRoller } returns saksbehandlerRoller

val ikkeAdressebeskyttetSak = sakSkrivDao.opprettSak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val ikkeAdressebeskyttetOppgave =
oppgaveService.opprettOppgave(
"referanse",
opprettetSak.id,
"referanse1",
ikkeAdressebeskyttetSak.id,
OppgaveKilde.BEHANDLING,
OppgaveType.FOERSTEGANGSBEHANDLING,
null,
)

val adressebeskyttetSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val adressebeskyttetSak = sakSkrivDao.opprettSak(SOEKER2_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
oppgaveService.opprettOppgave(
"referanse",
adressebeskyttetSak.id,
Expand All @@ -917,17 +924,56 @@ internal class OppgaveServiceTest(
null,
)

val sakMedEnhet = SakMedEnhet(adressebeskyttetSak.id, Enheter.STRENGT_FORTROLIG.enhetNr)
sakSkrivDao.oppdaterAdresseBeskyttelse(adressebeskyttetSak.id, AdressebeskyttelseGradering.STRENGT_FORTROLIG)
sakSkrivDao.oppdaterEnhet(sakMedEnhet)
oppgaveService.oppdaterEnhetForRelaterteOppgaver(listOf(sakMedEnhet))

val oppgaver = oppgaveService.finnOppgaverForBruker(saksbehandler, Status.entries.map { it.name })

oppgaver shouldHaveSize 1
ikkeAdressebeskyttetOppgave.id shouldBe oppgaver.first().id
ikkeAdressebeskyttetOppgave.sakId shouldBe ikkeAdressebeskyttetSak.id
}

@Test
fun `Skal få alle saker tilbake for enhet hvis saksbehandler har spesialroller`() {
val saksbehandlerRoller = generateSaksbehandlerMedRoller(AzureGroup.SAKSBEHANDLER)
every { saksbehandler.enheter() } returns listOf(Enheter.AALESUND.enhetNr)
every { saksbehandler.enheter() } returns listOf(Enheter.STRENGT_FORTROLIG_UTLAND.enhetNr)
every { saksbehandler.saksbehandlerMedRoller } returns saksbehandlerRoller

val ikkeAdressebeskyttetSak =
sakSkrivDao.opprettSak(
SOEKER_FOEDSELSNUMMER.value,
SakType.BARNEPENSJON,
Enheter.STRENGT_FORTROLIG_UTLAND.enhetNr,
)
oppgaveService.opprettOppgave(
"referanse1",
ikkeAdressebeskyttetSak.id,
OppgaveKilde.BEHANDLING,
OppgaveType.FOERSTEGANGSBEHANDLING,
null,
)

val adressebeskyttetSak = sakSkrivDao.opprettSak(SOEKER2_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
oppgaveService.opprettOppgave(
"referanse",
adressebeskyttetSak.id,
OppgaveKilde.BEHANDLING,
OppgaveType.FOERSTEGANGSBEHANDLING,
null,
)

val sakMedEnhet = SakMedEnhet(adressebeskyttetSak.id, Enheter.STRENGT_FORTROLIG.enhetNr)
sakSkrivDao.oppdaterAdresseBeskyttelse(adressebeskyttetSak.id, AdressebeskyttelseGradering.STRENGT_FORTROLIG)
sakSkrivDao.oppdaterEnhet(sakMedEnhet)
oppgaveService.oppdaterEnhetForRelaterteOppgaver(listOf(sakMedEnhet))

// Returnerer begge oppgavene, selv om den ene saken ikke har markert adressegradering
val oppgaver = oppgaveService.finnOppgaverForBruker(saksbehandler, Status.entries.map { it.name })
assertEquals(1, oppgaver.size)
val oppgaveUtenbeskyttelse = oppgaver[0]
assertEquals(nyOppgave.id, oppgaveUtenbeskyttelse.id)
assertEquals(nyOppgave.sakId, opprettetSak.id)

oppgaver shouldHaveSize 2
}

@Test
Expand Down Expand Up @@ -1074,39 +1120,6 @@ internal class OppgaveServiceTest(
assertEquals(null, oppgaveMedEndring.saksbehandler)
}

@Test
fun `Skal kun få saker som er strengt fotrolig tilbake hvis saksbehandler har rolle strengt fortrolig`() {
val opprettetSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
oppgaveService.opprettOppgave(
"referanse",
opprettetSak.id,
OppgaveKilde.BEHANDLING,
OppgaveType.FOERSTEGANGSBEHANDLING,
null,
)

val adressebeskyttetSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
val adressebeskyttetOppgave =
oppgaveService.opprettOppgave(
"referanse",
adressebeskyttetSak.id,
OppgaveKilde.BEHANDLING,
OppgaveType.FOERSTEGANGSBEHANDLING,
null,
)

sakSkrivDao.oppdaterAdresseBeskyttelse(adressebeskyttetSak.id, AdressebeskyttelseGradering.STRENGT_FORTROLIG)
val saksbehandlerMedRollerStrengtFortrolig = generateSaksbehandlerMedRoller(AzureGroup.STRENGT_FORTROLIG)
every { saksbehandler.enheter() } returns listOf(Enheter.STRENGT_FORTROLIG.enhetNr)
every { saksbehandler.saksbehandlerMedRoller } returns saksbehandlerMedRollerStrengtFortrolig

val oppgaver = oppgaveService.finnOppgaverForBruker(saksbehandler, Status.entries.map { it.name })
assertEquals(1, oppgaver.size)
val strengtFortroligOppgave = oppgaver[0]
assertEquals(adressebeskyttetOppgave.id, strengtFortroligOppgave.id)
assertEquals(adressebeskyttetOppgave.sakId, adressebeskyttetSak.id)
}

@Test
fun `saksbehandler med attestant rolle skal få attestant oppgaver`() {
val opprettetSak = sakSkrivDao.opprettSak("fnr", SakType.BARNEPENSJON, Enheter.AALESUND.enhetNr)
Expand Down