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
7er unntatt fra intervallsjekken og slipper alltid gjennom — dette er innebygd i frontend-valideringen og kan ikke konfigureres (time-registration.component.ts:2305).
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):
- Avdelings-match. De to første sifrene i valgt avdelingsnummer brukes for å finne regelen der
depFrom ≤ avd-prefiks ≤ depTo. - 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). - Unntak for 7-prosjekter. Hvis prosjektnummeret starter med
7, kjøres sjekkenaccxChecki 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¶
- Åpne Innstillinger → Portalinnstillinger og velg fanen Kontrollregler.
- Klikk Legg til ny regel øverst til høyre (
PortalSetting.addNewRule). - Fyll inn
Avdeling fra,Avdeling til,Prosjekt fra,Prosjekt til. - Klikk Lagre. Knappen er deaktivert til alle fire feltene er fylt ut.
- Verifiser at den nye raden vises i listen under skjemaet.
Slik endrer du en regel¶
- Klikk blyant-ikonet på raden du vil endre (
General.edit). - Endre verdiene i skjemaet som åpnes over listen.
- Klikk Lagre for å bekrefte eller Avbryt for å forkaste endringen.
Slik sletter du en regel¶
- Klikk søppelbøtte-ikonet på raden (
General.delete). - 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.

