Gå til innhold

Timeplanlegger (automatisk timeregistrering)

Timeplanleggeren oppretter timeregistreringer automatisk for ansatte basert på en valgt skiftplan. Du definerer én eller flere planleggere som kjører daglig eller ukentlig på et angitt tidspunkt og genererer timeregistreringer for de neste N dagene.

Brukes typisk når ansatte har faste vakter eller skift som ikke endrer seg fra uke til uke — i stedet for at hver ansatt selv registrerer timer manuelt, lager portalen utkastet for dem.

Forvirring om navnet: Menyen heter "Timeplanlegger". Komponentens egen overskrift er "Automatisk Timeregistrering". Det er ikke et vakt-/turnusplanleggings-system og ikke et bytte-vakt-system — det er en jobb-planlegger som auto-genererer timeregistreringer ut fra en skiftplan.


Tilgang

Hvem Hva trengs
Rolle Administrator — ruten er merket adminPage: true
Modul Innstillinger (moduleId: 99)

Verifisert i setting-routing.module.ts:33data: { moduleId: 99, adminPage: true }system-setting-ruten.

Siden ligger under Innstillinger → Systeminnstillinger → Timeplanlegger. I venstre navigasjon er den gruppert under "Tidsregistrering", men selve verts-komponenten er SystemSettingComponent (ikke Portalinnstillinger). Se settings-navigation.config.ts:135-141.


Sånn ser siden ut

Øverst en mørk knapp «+ Opprett planlegger» (btn-action-dark btn-sm), deretter et smart-grid med globalt søk og paginering (25 / 10 / 50 / 100 rader pr. side).

hele listevisningen med "+ Opprett planlegger" øverst og minst én rad i grid'et

Kolonner i listen:

Kolonne Type / filter Kilde
Navn Tekst, sorterbar/filtrerbar name
Skiftplan Tekst, sorterbar/filtrerbar shiftPlanName
Type Nedtrekks-filter (Daglig / Ukentlig) scheduleType
Kjøretid Tekst (HH:mm) time (vises kun de første 5 tegn)
Dager frem Tall, filtrerbar generateDaysAhead
Aktiv Ja/Nei-filter, vist som badge-soft-success / badge-soft-secondary isActive
Opprettet Dato-filter (dd.MM.yyyy HH:mm) createdDate

Verifisert i time-scheduler.component.ts:154-241 og time-scheduler.component.html:36-56.


Handlinger per planlegger

Hver rad har en handlings-kapsel (action-capsule btn-group btn-group-sm sg-desktop-only) med fire knapper:

Handling Ikon Beskrivelse
Rediger bi-pencil Åpner samme drawer som ved opprettelse, ferdig utfylt.
Kjør nå bi-play-fill Manuell kjøring — krever bekreftelse i et NgbModal (#executeModal). Genererer timeregistreringer umiddelbart i stedet for å vente på neste planlagte tidspunkt.
Vis logger bi-clock-history Åpner en drawer med kjøringslogger (dato, status, suksess/hoppet over/feilet, trigger-type).
Slett bi-trash3 Krever bekreftelse i et NgbModal (#deleteModal).

Verifisert i time-scheduler.component.html:58-97 og handlings-metodene deleteSchedule / executeSchedule / viewExecutionLogs.


Drawer for opprett/rediger

Drawer åpnes mot høyre (position: 'end', backdrop: 'static', panelklasse custom-offcanvas-width). Skjemaet er definert i time-scheduler.component.ts:80-92.

Felt Kontroll Påkrevd Standardverdi Validering
Navn Tekst Ja tom Validators.required
Beskrivelse Tekst Nei tom
Skiftplan Nedtrekk (<select>) Ja null Validators.required. Listen lastes fra settingService.getActiveShiftPlans().
Aktiv Bryter (form-switch) true
Type Nedtrekk (<select>) Ja Weekly Daily eller Weekly
Ukedag Radioknapper (Mandag–Søndag, lagt opp i d-flex flex-wrap gap-2) Ja når Type = Weekly 1 (Mandag) ved opprettelse Validators.required settes dynamisk i onScheduleTypeChange() når Type = Weekly
Kjøretid <input type="time"> Ja 06:00 Validators.required
Dager frem <input type="number" min="1" max="365"> Ja 7 Validators.required, Validators.min(1), Validators.max(365)
Inkluder helligdager Bryter (form-switch) false Hvis på, opprettes også timeregistreringer på helligdager
Varslingsmottakere ng-select multi-select av brukere Nei tom liste Filtreres på userFullname; viser ansattnr, mobil og e-post i nedtrekket

Nederst i drawer vises en forhåndsvisning (alert alert-info) som oppsummerer planen i klartekst — f.eks. "Hver mandag kl 06:00, 7 dager frem, inkluderer helligdager". Logikken ligger i getSchedulePreview() (time-scheduler.component.ts:532-561).

Knapper i bunnen:

  • Avbryt (btn btn-secondary)
  • Lagre (btn btn-primary) — disablet så lenge skjemaet er ugyldig eller en kall er underveis

drawer i Ukentlig-modus med radio-rad for ukedag synlig og forhåndsvisnings-alert nederst


Varslingsmottakere — hvor kommer brukerne fra?

Listen lastes via NotificationSchedulerService.getUsers() som kaller GET /User/GetSysUserList?orderBy=userFullname&... (notification-scheduler.service.ts:276-277).

Backend leverer dette fra klient-databasen via UserRepository.GetSysUserList (en BaseRepository) som kaller SP [dbo].[wv_User_get_V2] (UserRepository.cs:393-416). Kilden er altså wv_User i klient-DB — ikke wv_UserAccount i system-DB.

I praksis er det samme brukerliste som vises i Brukerhåndtering. Hver rad i ng-select-nedtrekket viser navn, ansattnummer og — hvis utfylt — mobil og e-post.

Lagring konverterer valgte brukere til en kommaseparert streng av userEmployeeNo før den sendes til backend som NotificationRecipients (time-scheduler.component.ts:326-331).


Kjøre planleggeren manuelt ("Kjør nå")

  1. Klikk play-ikonet på raden.
  2. Bekreft i dialogen ("Bekreft kjøring").
  3. Et toast vises etter kjøring med tall for vellykket / hoppet over / feilet (success ved 0 feil, warning hvis noen feilet). Inntil 10 feildetaljer vises i toast, deretter "... og N flere feil".
  4. Kjøringsloggene oppdateres for valgt plan.

Verifisert i confirmExecute() (time-scheduler.component.ts:403-445).

bekreftelses-modal som dukker opp ved klikk på play-ikonet


Kjøringslogger og detaljer

«Vis logger»-ikonet (klokkesymbolet) åpner en drawer med tabell:

Kolonne Innhold
Tid dd.MM.yyyy HH:mm:ss
Status Badge — Success (grønn), PartialSuccess (gul), Failed (rød). Ved feil vises også de første 50 tegn av feilmeldingen, med kopier-til-utklippstavle-knapp.
Suksess / Hoppet over / Feilet Antall
Trigger-type Hva som utløste kjøringen (manuell eller cron)
Handlinger Øye-ikon → leveringsdetaljer; klokke-ikon → genererte timeregistreringer

De to siste handlingene åpner egne drawers (#deliveryLogsDrawer, #timeRegistrationsDrawer).


Slik oppretter du en planlegger

  1. Åpne Innstillinger → Systeminnstillinger → Timeplanlegger.
  2. Klikk «+ Opprett planlegger» øverst til venstre.
  3. Fyll inn Navn (f.eks. "Auto-timer vakthold uke 1") og evt. Beskrivelse.
  4. Velg Skiftplan — uten en skiftplan kan planleggeren ikke vite hvilke timer som skal opprettes.
  5. Velg Type:
  6. Daglig kjører hver dag kl. Kjøretid og oppretter timeregistreringer for de neste Dager frem dagene.
  7. Ukentlig kjører kun på valgt Ukedag kl. Kjøretid.
  8. Hvis Type = Ukentlig: velg Ukedag i radio-raden (Mandag–Søndag).
  9. Sett Kjøretid (standard 06:00).
  10. Sett Dager frem (standard 7, gyldig område 1–365).
  11. Velg om helligdager skal inkluderes (standard av).
  12. Legg evt. til Varslingsmottakere — typisk lønnsansvarlige som vil ha sammendrag pr. kjøring.
  13. La Aktiv stå på (standard).
  14. Sjekk forhåndsvisnings-alerten nederst, og klikk Lagre.

Planleggeren begynner å kjøre automatisk fra og med neste Kjøretid som passer Type/Ukedag.


Vanlige problemer

"Ukedag er påkrevd"

Du har Type = Ukentlig men ikke valgt ukedag. Velg en ukedag, eller bytt til Daglig. Toast-meldingen kommer fra valideringen i saveTimeSchedule() (time-scheduler.component.ts:320-323).

"Dager frem" tar ikke verdien jeg setter

Tillatt område er 1–365 (Validators.min(1), Validators.max(365)). Lagre-knappen forblir disablet til feltet er gyldig.

Ingen timeregistreringer ble opprettet

Sjekk i denne rekkefølgen:

  1. Er planleggeren Aktiv? Slått av → ingen kjøring.
  2. Har valgt Skiftplan noen aktive skift?
  3. Er Kjøretid allerede passert i dag? Hvis du opprettet planleggeren etter dagens Kjøretid, starter første kjøring først neste planlagte tidspunkt.
  4. Åpne Vis logger — der ser du faktisk status (Success / PartialSuccess / Failed) med feilmelding pr. kjøring og kopier-knapp.

Varslingsmottakere får ingen melding

Sjekk at brukerne har gyldig e-post-adresse på sin profil (samme brukere som vises i Brukerhåndtering — kilden er wv_User via SP wv_User_get_V2).

Lagre-knappen er disablet

Skjemaet er ugyldig. Vanlige årsaker: tomt Navn, ingen Skiftplan valgt, ingen Ukedag når Type = Ukentlig, eller Dager frem utenfor 1–365.


Relaterte sider