Gå til innhold

Kontrollregler

Fanen Kontrollregler under Portalinnstillinger inneholder en liste over avdeling/prosjekt-intervaller. Hver regel sier at en gitt avdelings-serie kun har lov til å registrere timer på prosjekter innenfor en bestemt prosjekt-serie. Reglene brukes når en ansatt velger avdeling og prosjekt under timeregistrering — hvis kombinasjonen bryter en regel, varsler systemet med en modal.

Reglene aktiveres med bryteren Avd/proj. kontroll under fanen "Generelt" på samme side (portal-setting.component.html:131). Når bryteren er av, lagres reglene, men de håndheves ikke i timeregistreringen.

Prosjektnummer som starter med 7 er unntatt fra intervallsjekken og slipper alltid gjennom — dette er innebygd i frontend-valideringen og kan ikke konfigureres (time-registration.component.ts:2305).

Kontrollregler-fanen med listen over regler og "Legg til ny regel"-knappen øverst

Tilgang

Hvem Hva trengs
Rolle som kan endre Bruker med tilgang til Portalinnstillinger (siden er beskyttet av ModuleGuard)
Modul som kreves Portalinnstillinger — moduleId: 99 (setting-routing.module.ts:30)
Effekt på hvem Ansatte som registrerer timer via Timeregistrering eller Forhåndsregistrering — kun når bryteren Avd/proj. kontroll er på

Felter i regelen

Hver regel består av fire heltallsfelt. Alle felter er obligatoriske (Validators.required) og må være positive heltall mellom 0 og 99 999 999 (portal-setting.component.html:1094, portal-setting.component.ts:1295).

Felt i18n-nøkkel Betydning
Avdeling fra PortalSetting.departmentFrom Nedre grense for avdelings-serien (inklusiv)
Avdeling til PortalSetting.departmentTo Øvre grense for avdelings-serien (inklusiv)
Prosjekt fra PortalSetting.projectFrom Nedre grense for tillatt prosjekt-serie (inklusiv)
Prosjekt til PortalSetting.projectTo Øvre grense for tillatt prosjekt-serie (inklusiv)

Desimalverdier rundes automatisk av til nærmeste heltall via truncateNumber ved blur (portal-setting.component.ts:1339).

Hvordan intervallene tolkes ved timeregistrering

Under registrering henter klienten respUnitLimit-listen og sammenligner mot valgt avdeling og prosjekt (time-registration.component.ts:2293):

  1. Avdelings-match. De to første sifrene i valgt avdelingsnummer brukes for å finne regelen der depFrom ≤ avd-prefiks ≤ depTo.
  2. Prosjekt-sjekk. Hvis valgt prosjektnummer faller utenfor [projFrom, projTo], vises en modal med tittelen «Ugyldig kombinasjon med avdeling og prosjekt!» og meldingen «Prosjektet må være innenfor serien {projFrom} - {projTo} eller starte med 7xxxxx.» (no.json:746-747).
  3. Unntak for 7-prosjekter. Hvis prosjektnummeret starter med 7, kjøres sjekken accxCheck i stedet for å vise feilmeldingen.

Samme logikk gjelder i forhåndsregistrering (advance-registration.component.ts:883).


Validering ved lagring

Når en regel lagres kjører både klient og backend overlappssjekker (portal-setting.component.ts:1354, RespUnitLimitController.cs:91):

Sjekk Feilmelding Nøkkel
depFrom > depTo «Fra avdeling kan ikke være høyere enn til avdeling.» PortalSetting.departmentAlert
projFrom > projTo «Fra prosjekt kan ikke være høyere enn til prosjekt.» PortalSetting.projectAlert
Avdelings-intervall overlapper en eksisterende regel «Denne regelen om avdelinger er allerede lagt inn.» PortalSetting.departmentAlreadyEntered
Prosjekt-intervall overlapper en eksisterende regel «Denne regelen på prosjekter er allerede lagt inn.» PortalSetting.projectAlreadyEntered

Bestått lagring viser bekreftelses-toast «Kontrollregel lagt til!» eller «Kontrollregelen er oppdatert!» (controlRuleAdded / controlRuleUpdated).


Datamodell og endepunkter

Reglene ligger i tabellen wv_RespUnit_Limits i klient-databasen (dbscript.sql:7964):

Kolonne Type Beskrivelse
ID int Primærnøkkel (manuelt allokert via max(id)+1 i wv_RespUnit_Limits_ins)
DepFrom int Nedre avdelings-grense
DepTo int Øvre avdelings-grense
ProjFrom int Nedre prosjekt-grense
ProjTo int Øvre prosjekt-grense

API:

Operasjon Endepunkt SP
Hent regler GET /RespUnitLimit/GetRespUnitLimit wv_RespUnit_Limits_get_V2
Lagre (ny eller oppdater) POST /RespUnitLimit/SaveRespUnitLimit wv_RespUnit_Limits_ins / wv_RespUnit_Limits_upd
Slett POST /RespUnitLimit/DeleteRespUnitLimit wv_RespUnit_Limits_del

Backend: RespUnitLimitController.cs, RespUnitLimitRepository.cs, RespUnitLimit.cs.


Slik legger du til en ny regel

  1. Åpne Innstillinger → Portalinnstillinger og velg fanen Kontrollregler.
  2. Klikk Legg til ny regel øverst til høyre (PortalSetting.addNewRule).
  3. Fyll inn Avdeling fra, Avdeling til, Prosjekt fra, Prosjekt til.
  4. Klikk Lagre. Knappen er deaktivert til alle fire feltene er fylt ut.
  5. Verifiser at den nye raden vises i listen under skjemaet.

skjemaet "Ny kontrollregel" med de fire feltene Avdeling fra/til og Prosjekt fra/til synlige

Slik endrer du en regel

  1. Klikk blyant-ikonet på raden du vil endre (General.edit).
  2. Endre verdiene i skjemaet som åpnes over listen.
  3. Klikk Lagre for å bekrefte eller Avbryt for å forkaste endringen.

Slik sletter du en regel

  1. Klikk søppelbøtte-ikonet på raden (General.delete).
  2. Bekreft i dialogen som åpnes.

Vanlige problemer

«Ugyldig kombinasjon med avdeling og prosjekt!» dukker opp ved registrering

Den valgte avdelingen krever et prosjekt innenfor en annen serie. Sjekk hvilken regel som dekker de to første sifrene i avdelingsnummeret, og enten:

  • velg et prosjekt innenfor den angitte serien,
  • registrer på et prosjekt som starter med 7 (alltid tillatt), eller
  • juster regelen i Portalinnstillinger.

Reglene ser ut til å bli ignorert

Bryteren Avd/proj. kontroll (respUCtrl) på fanen "Generelt" må være på for at klienten skal kjøre sjekken. Når den er av, lagres reglene, men de gir ingen effekt i timeregistreringen (time-registration.component.ts:2293).

«Denne regelen om avdelinger er allerede lagt inn.»

Det finnes allerede en regel der avdelings-intervallet overlapper det nye. Intervallene må være disjunkte. Slett eller juster den overlappende regelen først.

«Fra avdeling kan ikke være høyere enn til avdeling.»

depFrom må være mindre enn eller lik depTo. Samme regel gjelder for projFrom/projTo.


Relaterte sider