Gå til innhold

Kalender

Kalender-fanen vedlikeholder enkeltdager i tabellen wv_Time_Calendar (kalenderdager). Hver rad er en konkret dato med et navn, et flagg for om dagen er helligdag, en valgfri kobling til en lønnsartregel, en vaktfaktor og to flagg for ekstra vakttillegg / timebanktillegg. Helligdagene for et helt år kan importeres fra ekstern API (webapi.no) i én operasjon.

Komponenten er en CRUD-liste — det finnes ingen separat «overstyrings-liste», ingen lands­velger, og ingen innstillinger for fellesferie eller inneklemte dager på denne siden.

Kilder: calendar-admin.component.ts, calendar-admin.component.html, CalendarController.cs, CalendarDay.cs.

Tilgang

Hvem Hva trengs
Rolle Bruker med tilgang til Innstillinger → Portalinnstillinger (typisk administrator)
Modul Settings — moduleId: 99 (route­vakt: ActivateService + ModuleGuard, se setting-routing.module.ts:30)
API-endepunkter [Authorize] på alle metoder i CalendarController

Selve CalendarAdminComponent er montert som tab-innhold inne i PortalSettingComponent (tab=calendar), så samme moduleId: 99 styrer adgangen.

hele Kalender-fanen med årsfilter, «Importer helligdager»- og «Legg til dag»-knappene, og smart-grid-tabellen med kolonner Dato, Navn, Helligdag, Lønnsartregel, Vaktfaktor, Ekstra vakttillegg, Ekstra timebanktillegg, og handlinger

Sånn ser siden ut

Toppen av fanen har:

Tabellen under er et smart-grid med kolonnene definert i buildColumns() (calendar-admin.component.ts:110-188):

Kolonne Felt Innhold
Dato date Lagret som YYYYMMDD i basen, vises som DD.MM.YYYY
Navn name Fritekst, f.eks. «1. nyttårsdag»
Helligdag isHoliday Rød/grå soft-badge for ja/nei
Lønnsartregel wageTypeOptionName Navnet på koblet wto-regel, hvis satt
Vaktfaktor dutyFactor Tall, standard 1.0
Ekstra vakttillegg dutyAddExtra Grønn/grå badge for ja/nei
Ekstra timebanktillegg dutyTBExtra Grønn/grå badge for ja/nei
Handlinger Blyant (rediger) og søppelbøtte (slett) i action-capsule btn-group btn-group-sm sg-desktop-only

Tomt år viser ikonet bi-calendar-x og teksten Calendar.noData («Ingen kalenderdager funnet for valgt år»).

Felter i drawer (ny / rediger kalenderdag)

Drawer åpnes fra «Legg til dag» eller blyantknappen i raden. Reactive form calendarForm er bygget i konstruktøren (calendar-admin.component.ts:62-71).

Felt (i18n-nøkkel) Type Standard Validering Merknader
Dato (Calendar.date) Tekst DD.MM.YYYY I dag (ved ny) Validators.required — feilmelding General.requiredValidation Lagres som YYYYMMDD via parseDate() (calendar-admin.component.ts:232-243)
Navn (Calendar.name) Tekst Tom Ingen Placeholder Calendar.namePlaceholder («F.eks. Første nyttårsdag»)
Er helligdag (Calendar.isHoliday) Form-switch false Ingen Hjelpetekst: «Denne dagen vil ikke telles som arbeidsdag» (Calendar.isHolidayHelp)
Lønnsartregel (Calendar.wageTypeOption) ng-select over wageTypeOptions null Ingen Lastes fra SettingService.getCalendarLoadData(); clearable
Vaktfaktor (Calendar.dutyFactor) Number, step 0.1 1.0 Validators.min(0), Validators.max(10) Hjelpetekst: «Faktor for vaktberegning (standard 1.0)»
Ekstra vakttillegg (Calendar.dutyAddExtra) Form-switch false Ingen
Ekstra timebanktillegg (Calendar.dutyTBExtra) Form-switch false Ingen

Knapperaden i drawer-bunnen: Avbryt lukker drawer, Lagre er deaktivert så lenge calendarForm.invalid. Lagring bruker SettingService.saveCalendarDay(); suksess viser toast Calendar.created eller Calendar.updated, og griden lastes på nytt (calendar-admin.component.ts:300-333).

drawer med alle feltene utfylt for en helligdag, fokus på switchene og vaktfaktor-feltet

Importer helligdager (modal)

Knappen «Importer helligdager» åpner en modal som henter offisielle norske helligdager fra et eksternt API for ett valgt år (calendar-admin.component.ts:379-413, CalendarController.cs:217-342).

  • Datakilde. URL leses fra NorwegianHolidaysApi:Url i appsettings.json; default er https://webapi.no/api/v1/holidays/{year} (appsettings.json:135-137). Det finnes ingen lands­velger i UI eller backend — kun norske helligdager støttes.
  • År som kan importeres. Inneværende år + tre fram i tid (importYears bygges i loadData()).
  • Eksisterende dager overskrives ikke. Beskrivelsen i modalen er Calendar.importDescription: «Importer norske helligdager fra ekstern API. Eksisterende dager vil ikke overskrives. Innstillinger (lønnsart, vaktfaktor osv.) kopieres fra forrige år hvis navnet er likt.»
  • Resultat. Etter import vises et alert-panel med antall importerte, antall hoppet over, eventuelle kopierte innstillinger fra forrige år (Calendar.copiedSettings), samt to lister: importerte (Calendar.imported) og hoppet over (Calendar.skipped). Hvis importedCount > 0 skifter årsfilteret automatisk til det importerte året.

import-modalen åpnet med årsvelger og resultat-alerten etter en vellykket import

Slett kalenderdag

Søppelbøtte-knappen i radens handlingskolonne åpner en bekreftelses­modal (deleteConfirmModal) med rød header og navnet / datoen på dagen som skal slettes (calendar-admin.component.html:247-274). Bekreftelse kaller SettingService.deleteCalendarDay(id); suksess viser toast Calendar.deleted og laster griden på nytt.

Slik gjør du

Importere helligdager for et nytt år

  1. Åpne Innstillinger → Portalinnstillinger → Kalender.
  2. Klikk Importer helligdager.
  3. Velg år i nedtrekken (inneværende år eller opp til tre år fram).
  4. Klikk Importer.
  5. Les resultat-panelet — kontroller listen «Importert» mot kjente helligdager, og at «Hoppet over» kun inneholder dager som allerede fantes.
  6. Hvis du har egne lønnsartregler / vaktfaktorer satt på fjorårets dager, bekrefter teksten «Helligdager fikk innstillinger kopiert fra forrige år» at de er overført.

Legge til en enkeltdag manuelt (f.eks. lokal merkedag eller bedriftsfri dag)

  1. Åpne Innstillinger → Portalinnstillinger → Kalender.
  2. Klikk Legg til dag.
  3. Skriv dato i formatet DD.MM.YYYY.
  4. Gi dagen et navn.
  5. Slå på Er helligdag hvis dagen skal regnes som helligdag (kommentar i UI: «Denne dagen vil ikke telles som arbeidsdag»).
  6. Koble eventuelt en lønnsartregel og juster vaktfaktor / ekstra vakttillegg / ekstra timebanktillegg.
  7. Klikk Lagre.

Endre en eksisterende dag

  1. Velg riktig år i årsfilteret.
  2. Klikk blyantknappen i raden.
  3. Endre verdiene i drawer og klikk Lagre.

Slette en dag

  1. Velg år.
  2. Klikk søppelbøtte-knappen i raden.
  3. Bekreft i modalen ved å klikke Slett.

Vanlige problemer

«Dato er påkrevd»

Datofeltet er det eneste med Validators.required. Skriv datoen i formatet DD.MM.YYYY. Andre formater blir lagret som angitt (ingen klient­validering på selve formatet), men parseDate() konverterer kun gyldige DD.MM.YYYY-verdier til lagrings­formatet YYYYMMDD.

«Lagre»-knappen er deaktivert

Skjer når calendarForm.invalid. Mest sannsynlig årsak er at dato mangler, eller at vaktfaktor er utenfor [0, 10].

Importen sier «hoppet over» selv om dagen ikke ser ut til å eksistere

Backend hopper over dager som allerede har en rad på samme dato i wv_Time_Calendar. Sjekk om dagen ligger i et annet år — eller om en tidligere import allerede har lagt den inn under et litt annet navn.

Importen feiler / tom liste

Importen krever utgående kall mot https://webapi.no/api/v1/holidays/{year} (eller den URL-en som er overstyrt i appsettings.json:NorwegianHolidaysApi:Url). Hvis applikasjonens nett­tilgang er begrenset, vil import returnere feil — bruk «Legg til dag» som manuell fallback.

Lønnstillegg utløses ikke selv om dagen er markert som helligdag

isHoliday-flagget setter bare merkingen på dagen i wv_Time_Calendar. Lønnsmessig effekt avhenger av at en lønnsartregel (wageTypeOptionId) er koblet på dagen, og at regelen selv er konfigurert. Sjekk feltet «Lønnsartregel» på den aktuelle dagen.

Relaterte sider