diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.html index 45bc488..38df1e1 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.html @@ -3,7 +3,7 @@

{{ formGroup?.get('alternative').value === 'franvaro' ? 'Frånvaro' : 'Avvikelse'}}

-

Frånvaroorsak

+

Orsak till frånvaro

{{orsak.name}}

@@ -24,20 +24,20 @@

Datum

{{formGroup?.get('date').value}}

-

Hel- eller del av dag

+

Hel eller del av dag

{{formGroup.get('dayOrPartOfDay').value === 'HELDAG' ? 'Heldag' : 'Del av dag'}}

-

Startid

+

Starttid

{{formGroup?.get('timepickerFormGroup').get('startTime').value}}

-

Sluttid

+

Sluttid

{{formGroup?.get('timepickerFormGroup').get('endTime').value}}

-

Avvikelseoorsak

+

Orsak till avvikelse

{{orsak.name}}

@@ -60,7 +60,7 @@ {{fraga.name}}
-

{{formGroup?.get('fragorFormGroup').get('fraga2').value}}

+

{{formGroup?.get('fragorFormGroup').get('fraga2').value}}

Datum

{{formGroup?.get('date').value}}

diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.ts index 389cf10..73a8db6 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-confirm-form/deltagare-confirm-form.component.ts @@ -1,5 +1,6 @@ -import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { FormGroup } from '@angular/forms'; +import { AvvikelseOrsaksKodEnum } from '@msfa-enums/avvikelse-orsak-kod.enum'; import { FragorForAvvikelser } from '@msfa-models/fragor-for-avvikelser.model'; import { OrsaksKoderAvvikelse } from '@msfa-models/orsaks-koder-avvikelse.model'; import { KandaAvvikelseKoder, OrsaksKoderFranvaro } from '@msfa-models/orsaks-koder-franvaro.model'; @@ -10,11 +11,18 @@ import { KandaAvvikelseKoder, OrsaksKoderFranvaro } from '@msfa-models/orsaks-ko styleUrls: ['./deltagare-confirm-form.component.scss'], changeDetection: ChangeDetectionStrategy.Default }) -export class DeltagareConfirmFormComponent { +export class DeltagareConfirmFormComponent implements OnChanges { @Input() formGroup: FormGroup | null = null; @Input() orsakskoderfranvaro: OrsaksKoderFranvaro[]; @Input() andraKandaOrsaker: KandaAvvikelseKoder[]; @Input() avvikelseOrsaker: OrsaksKoderAvvikelse[]; @Input() fragor1: FragorForAvvikelser[]; @Input() fragor2: FragorForAvvikelser[]; + @Input() selectedOrsak: string; + + ngOnChanges(changes: SimpleChanges): void { + if (Number(changes.selectedOrsak?.currentValue) === AvvikelseOrsaksKodEnum.SerTillAttErbjudetArbeteInteKommerTillStand) { + this.formGroup?.get('fragorFormGroup').get('fraga2').reset(''); + } + } } diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.html index 77ebb16..6d60905 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.html @@ -6,33 +6,23 @@ [afLabel]="fraga.name" [afDisableValidStyle]="true" [afRequired]="true" - [afInvalid]="avvikelseFormGroup?.errors?.motiveringIsRequired && fragorFormGroup.get('fraga1').touched" + [afInvalidMessage]="fragorFormGroup.get('fraga1').errors?.message" + [afInvalid]="fragorFormGroup.get('fraga1').invalid && fragorFormGroup.get('fraga1').touched" [afMaxLength]="2000" > - - Beskrivning är obligatoriskt - -
+
- - Beskrivning är obligatoriskt -
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.ts index 74377d5..c4ec107 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-fragor-form/deltagare-fragor-form.component.ts @@ -16,5 +16,4 @@ export class DeltagareFragorFormComponent { @Input() fragorFormGroup: FormGroup | null = null; @Input() avvikelseFormGroup: FormGroup | null = null; @Input() selectedOrsaksKod: string | null = null; - } diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-orsaks-form/deltagare-orsaks-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-orsaks-form/deltagare-orsaks-form.component.html index 0e3e5a3..b68b31d 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-orsaks-form/deltagare-orsaks-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-orsaks-form/deltagare-orsaks-form.component.html @@ -3,7 +3,7 @@ - - Starttid är obligatoriskt -
- - Sluttid är obligatoriskt -
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-time-picker/deltagare-time-picker.component.scss b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-time-picker/deltagare-time-picker.component.scss index 36cc7f9..bdb1733 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-time-picker/deltagare-time-picker.component.scss +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/components/deltagare-time-picker/deltagare-time-picker.component.scss @@ -7,7 +7,7 @@ } &__start-time { - margin-bottom: $digi--layout--gutter--m; + margin-bottom: $digi--layout--gutter--l; } &__input { diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.html index 4d31913..4ca98d1 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.html @@ -21,7 +21,7 @@ > Alternativ är obligatoriskt @@ -45,14 +45,9 @@ [afDisableValidStyle]="true" [afMaxLength]="2000" [afRequired]="true" - [afInvalid]="avvikelseFormGroup?.errors?.descriptionIsRequired && descriptionFormControl.touched" + [afInvalidMessage]="descriptionFormControl.errors?.message" + [afInvalid]="descriptionFormControl?.invalid && descriptionFormControl.touched" > - - Beskrivning är obligatoriskt - + + {{dayOrPartOfDayFormControl.errors?.message}} +
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.ts index 4caaaa5..a7b4ac2 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.component.ts @@ -17,18 +17,14 @@ import { OrsaksKoderAvvikelse } from '@msfa-models/orsaks-koder-avvikelse.model' import { KandaAvvikelseKoder, OrsaksKoderFranvaro } from '@msfa-models/orsaks-koder-franvaro.model'; import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service'; import { - AnnanKandOrsakeIsRequiredCheck, - DateIsRequiredCheck, - DayOrPartOfDayIsRequiredCheck, - DescriptionIsRequiredCheck, - EndTimeIsRequiredCheck, - MotiveringIsRequiredCheck, - OrsakerIsRequiredCheck, - StartTimeIsRequiredCheck, + requiredAnnanKandOrsakValidator, RequiredDateValidator, + requiredDayOrPartOfDayValidator, requiredDescriptionValidator, requiredEndTimeValidator, + requiredFraga1Validator, + requiredfraga2Validator, requiredOrsakerValidator, requiredStartTimeValidator } from '@msfa-utils/validators/avvikelse-form-validator'; import { RequiredValidator } from '@msfa-utils/validators/required.validator'; import { BehaviorSubject, Observable } from 'rxjs'; -import { first, map, switchMap } from 'rxjs/operators'; +import { map, switchMap } from 'rxjs/operators'; import { DeltagareAvvikelseService } from '../../services/deltagare-avvikelse.service'; import { avvikelseAlternatives, dayOrPartOfDay } from './report-alternatives'; @@ -63,7 +59,6 @@ export class DeltagareAvvikelseComponent implements OnInit { andraKandaOrsaker$: Observable; fragor1$: Observable; fragor2$: Observable; - contactInformation: ContactInformation; sizeTextArea: FormTextareaSize.S; todayDate = new Date().toISOString().slice(0, 10); avvikelseAlternatives: RadiobuttonModel[] = avvikelseAlternatives; @@ -84,45 +79,29 @@ export class DeltagareAvvikelseComponent implements OnInit { ) { } ngOnInit(): void { - this.contactInformation$.pipe(first()).subscribe(contactInformation => { - this.contactInformation = contactInformation; - }); - this.avvikelseFormGroup = new FormGroup( { alternative: new FormControl(null, [RequiredValidator()]), - description: new FormControl(''), + description: new FormControl('', [requiredDescriptionValidator()]), date: new FormControl(this.todayDate), - dayOrPartOfDay: new FormControl(null), + dayOrPartOfDay: new FormControl(null, [requiredDayOrPartOfDayValidator()]), orsakerFormGroup: new FormGroup({ - orsaker: new FormControl([]), - andraKandaOrsaker: new FormControl([]), + orsaker: new FormControl([], [requiredOrsakerValidator()]), + andraKandaOrsaker: new FormControl([], [requiredAnnanKandOrsakValidator()]) }), fragorFormGroup: new FormGroup({ - fraga1: new FormControl(''), - fraga2: new FormControl(''), + fraga1: new FormControl('', [requiredFraga1Validator()]), + fraga2: new FormControl('', [requiredfraga2Validator()]) }), timepickerFormGroup: new FormGroup({ - startTime: new FormControl(''), - endTime: new FormControl(''), + startTime: new FormControl('', [requiredStartTimeValidator()]), + endTime: new FormControl('', [requiredEndTimeValidator()]) }), }, { validators: [ - DescriptionIsRequiredCheck.CheckIfRequired( - 'description', - 'orsakerFormGroup', - 'andraKandaOrsaker', - KandaOrsakerEnum.AnnanOrsak - ), - OrsakerIsRequiredCheck.CheckIfRequired('orsakerFormGroup', 'orsaker'), - AnnanKandOrsakeIsRequiredCheck.CheckIfRequired('orsakerFormGroup', 'andraKandaOrsaker'), - DateIsRequiredCheck.CheckIfRequired('date'), - DayOrPartOfDayIsRequiredCheck.CheckIfRequired('dayOrPartOfDay'), - StartTimeIsRequiredCheck.CheckIfRequired('timepickerFormGroup', 'startTime'), - EndTimeIsRequiredCheck.CheckIfRequired('timepickerFormGroup', 'endTime'), - MotiveringIsRequiredCheck.CheckIfRequired('fraga1'), - ], + RequiredDateValidator.CheckIfRequired() + ] } ); } @@ -172,11 +151,6 @@ export class DeltagareAvvikelseComponent implements OnInit { if (confirm === ConfirmDialog.ACCEPTED) { const postAvvikelse: Avvikelse = { datum_for_rapportering: this.todayDate, - arbetssokande: { - personnummer: this.contactInformation.ssn, - fornamn: this.contactInformation.firstName, - efternamn: this.contactInformation.lastName, - }, sokandeId: +this.activatedRoute.snapshot.params['genomforandeReferens'], }; @@ -251,7 +225,6 @@ export class DeltagareAvvikelseComponent implements OnInit { this.fragor2$ = this.deltagareAvvikelseService.getFragorForAvvikelser$().pipe( map((fragor: FragorForAvvikelser[]) => { return fragor.filter((fraga: FragorForAvvikelser) => { - this.setIfRequiredDescription(fraga); return fraga.id.includes('_2'); }); }) @@ -261,12 +234,6 @@ export class DeltagareAvvikelseComponent implements OnInit { this.clearControlOnAlternativeChange(); } - private setIfRequiredDescription(fraga: FragorForAvvikelser) { - fraga.id === '19_2' || fraga.id === '20_2' - ? (fraga.descriptionIsRequired = false) - : (fraga.descriptionIsRequired = true); - } - setOrsakerChanged(): void { this.avvikelseFormGroup.markAsUntouched(); if ((this.alternativeFormControl.value as string) === Alternative.AVVIKELSE) { @@ -283,6 +250,13 @@ export class DeltagareAvvikelseComponent implements OnInit { }); } + setDayOrPartOfDayChanged(): void { + if (this.dayOrPartOfDayFormControl.value === DayOrPartOfDay.HELDAG) { + this.startTimeFormControl.reset(); + this.endTimeFormControl.reset(); + } + } + get showDescription(): boolean { return ( (this.alternativeFormControl.value as string) == Alternative.FRANVARO && @@ -317,6 +291,8 @@ export class DeltagareAvvikelseComponent implements OnInit { } get nextStep(): number { + console.log(this.avvikelseFormGroup); + this.avvikelseFormGroup.markAllAsTouched(); if (this.avvikelseFormGroup.valid && this.currentStep < this.totalAmountOfSteps) { return this.currentStep++; @@ -332,7 +308,9 @@ export class DeltagareAvvikelseComponent implements OnInit { } backToDeltagare(): void { - void this.router.navigate(['./deltagare', this.activatedRoute.snapshot.params['genomforandeReferens']]); + this.router.navigate(['./deltagare', this.activatedRoute.snapshot.params['genomforandeReferens']]) + .catch(error => console.log(error, 'Failed to go back to deltagare') + ); } private clearControlOnAlternativeChange(): void { diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/deltagare-avvikelse.service.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/deltagare-avvikelse.service.ts index 293799e..58fa325 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/deltagare-avvikelse.service.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/deltagare-avvikelse.service.ts @@ -18,7 +18,14 @@ export class DeltagareAvvikelseService { public getOrsaksKoderFranvaro$(): Observable { return this.avvikelseApiService.getOrsaksKoderFranvaro$() .pipe( - map((orsaksKoder: OrsaksKoderFranvaro[]) => this.sortOrsaksKoder(orsaksKoder)) + map((orsaksKoder: OrsaksKoderFranvaro[]) => { + orsaksKoder.find(kod => { + if (kod.value === FranvaroOrsaksKodEnum.VAB) { + kod.name = 'Vård av barn'; + } + }); + return this.sortOrsaksKoder(orsaksKoder) + }) ) } diff --git a/apps/mina-sidor-fa/src/app/shared/enums/franvaro-orsak-kod.enum.ts b/apps/mina-sidor-fa/src/app/shared/enums/franvaro-orsak-kod.enum.ts index 7b2ffe3..052b43a 100644 --- a/apps/mina-sidor-fa/src/app/shared/enums/franvaro-orsak-kod.enum.ts +++ b/apps/mina-sidor-fa/src/app/shared/enums/franvaro-orsak-kod.enum.ts @@ -3,6 +3,6 @@ export enum FranvaroOrsaksKodEnum { Arbete = 16, OkandOrsak = 17, AnnanKandOrsak = 18, - VAB = 23, - Utbildning = 24, + VAB = 26, + Utbildning = 27, } diff --git a/apps/mina-sidor-fa/src/app/shared/models/arbetssokande.model.ts b/apps/mina-sidor-fa/src/app/shared/models/arbetssokande.model.ts deleted file mode 100644 index fe5fe23..0000000 --- a/apps/mina-sidor-fa/src/app/shared/models/arbetssokande.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface Arbetssokande { - personnummer: string, - fornamn: string, - efternamn: string -} diff --git a/apps/mina-sidor-fa/src/app/shared/models/avvikelse.model.ts b/apps/mina-sidor-fa/src/app/shared/models/avvikelse.model.ts index 7035335..1e80bd9 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/avvikelse.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/avvikelse.model.ts @@ -1,10 +1,8 @@ -import { Arbetssokande } from './arbetssokande.model'; import { AvvikelseAlternativ } from './avvikelse-alternativ.model'; import { FranvaroAlternativ } from './franvaro-alternativ.model'; export interface Avvikelse { datum_for_rapportering: string, - arbetssokande: Arbetssokande, sokandeId: number; avvikelsealternativ?: AvvikelseAlternativ, franvaro?: FranvaroAlternativ @@ -12,24 +10,21 @@ export interface Avvikelse { export interface AvvikelseRequestData { datum_for_rapportering: string, - arbetssokande: Arbetssokande, sokandeId: number; avvikelsealternativ: AvvikelseAlternativ, } export interface FranvaroRequestData { datum_for_rapportering: string, - arbetssokande: Arbetssokande, sokandeId: number; franvaro: FranvaroAlternativ } export function mapAvvikelseRequestDataToAvvikelse(data: AvvikelseRequestData): Avvikelse { - const { datum_for_rapportering, arbetssokande, sokandeId, avvikelsealternativ } = data; + const { datum_for_rapportering, sokandeId, avvikelsealternativ } = data; return { datum_for_rapportering, - arbetssokande, sokandeId, avvikelsealternativ } diff --git a/apps/mina-sidor-fa/src/app/shared/utils/validators/avvikelse-form-validator.ts b/apps/mina-sidor-fa/src/app/shared/utils/validators/avvikelse-form-validator.ts index 8e550e6..359ac3a 100644 --- a/apps/mina-sidor-fa/src/app/shared/utils/validators/avvikelse-form-validator.ts +++ b/apps/mina-sidor-fa/src/app/shared/utils/validators/avvikelse-form-validator.ts @@ -3,113 +3,169 @@ import { Alternative } from '@msfa-enums/alternative.enum'; import { DayOrPartOfDay } from '@msfa-enums/day-or-part-of-day.enum'; import { FranvaroOrsaksKodEnum } from '@msfa-enums/franvaro-orsak-kod.enum'; import { KandaOrsakerEnum } from '@msfa-enums/kanda-orsaker-kod.enum'; +import { ValidationError } from '@msfa-models/validation-error.model'; -export class DescriptionIsRequiredCheck { - static CheckIfRequired( - controlToValidateName: string, - nestedFormGroupName: string, - nestedFormGroupControlName: string, - valueForWhichTheControlShouldBeRequired: KandaOrsakerEnum - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfControlToValidate = fg?.get(controlToValidateName)?.value as string; - const valueOfNestedFormControl = fg?.get(nestedFormGroupName)?.get(nestedFormGroupControlName)?.value as string; - const isRequired = +valueOfNestedFormControl === valueForWhichTheControlShouldBeRequired && valueOfControlToValidate === ''; - - return isRequired ? { descriptionIsRequired: true } : null; - }; - } +export interface Controls { + [key: string]: AbstractControl } -export class OrsakerIsRequiredCheck { - static CheckIfRequired( - nestedFormGroupName: string, - controlToValidateName: string, - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfNestedFormControl = fg?.get(nestedFormGroupName)?.get(controlToValidateName)?.value as string; - const isRequired = valueOfNestedFormControl === null && fg?.get(nestedFormGroupName)?.get('andraKandaOrsaker')?.value === null; +export function requiredDescriptionValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.controls as Controls; - return isRequired ? { orsakerIsRequired: true } : null; - }; - } -} + if (ctrls) { + const valueOfNestedFormControl = ctrls['orsakerFormGroup'].get('andraKandaOrsaker').value as string; + const valueOfFormControl = control.value as string; + const isRequired = !valueOfFormControl && +valueOfNestedFormControl === KandaOrsakerEnum.AnnanOrsak; -export class DayOrPartOfDayIsRequiredCheck { - static CheckIfRequired( - controlToValidateName: string, - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfControlToValidate = fg?.get(controlToValidateName)?.value as string; - const isRequired = valueOfControlToValidate === null && fg?.get('alternative').value === Alternative.FRANVARO; + if (isRequired) { + return { type: 'required', message: 'Beskrivning är obligatoriskt' } + } - return isRequired ? { dayOrPartOfDayIsRequired: true } : null; - }; - } -} - -export class AnnanKandOrsakeIsRequiredCheck { - static CheckIfRequired( - nestedFormGroupName: string, - controlToValidateName: string, - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfNestedFormControl = fg?.get(nestedFormGroupName)?.get(controlToValidateName)?.value as string; - const isRequired = +fg?.get(nestedFormGroupName).get('orsaker').value === FranvaroOrsaksKodEnum.AnnanKandOrsak && - valueOfNestedFormControl === null; - - return isRequired ? { annanKandorsakIsRequired: true } : null; - }; - } -} - -export class StartTimeIsRequiredCheck { - static CheckIfRequired( - nestedFormGroupName: string, - startTimeControlToValidateName: string, - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfStartTimeFormControl = fg?.get(nestedFormGroupName)?.get(startTimeControlToValidateName)?.value as string; - const isRequired = fg?.get('alternative')?.value as string === Alternative.FRANVARO && - fg?.get('dayOrPartOfDay').value === DayOrPartOfDay.DEL_AV_DAG && !valueOfStartTimeFormControl; - - return isRequired ? { startTimeIsRequired: true } : null; + return null; } } } -export class EndTimeIsRequiredCheck { - static CheckIfRequired( - nestedFormGroupName: string, - endTimeControlToValidateName: string - ): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfEndTimeFormControl = fg?.get(nestedFormGroupName)?.get(endTimeControlToValidateName)?.value as string; - const isRequired = fg?.get('alternative').value as string === Alternative.FRANVARO && - fg?.get('dayOrPartOfDay').value === DayOrPartOfDay.DEL_AV_DAG && !valueOfEndTimeFormControl; +export function requiredOrsakerValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.controls as Controls; - return isRequired ? { endTimeIsRequired: true } : null; + if (ctrls) { + const valueOfNestedFormControl = ctrls['orsaker'].value as string; + const isRequired = !valueOfNestedFormControl && !ctrls['andraKandaOrsaker'].value; + + if (isRequired) { + return { type: 'required', message: `Orsak är obligatoriskt` }; + } + + return null; } } } -export class MotiveringIsRequiredCheck { - static CheckIfRequired(controlToValidateName: string): ValidatorFn { - return (fg: AbstractControl): { [key: string]: boolean } => { - const valueOfControlToValidate = fg?.get('fragorFormGroup').get(controlToValidateName)?.value as string; - const isRequired = fg?.get('alternative').value as string === Alternative.AVVIKELSE && valueOfControlToValidate === ''; +export function requiredAnnanKandOrsakValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.controls as Controls; - return isRequired ? { motiveringIsRequired: true } : null; - }; + if (ctrls) { + const isAnnanKandOrsak = +ctrls['orsaker'].value === FranvaroOrsaksKodEnum.AnnanKandOrsak; + const valueOfNestedFormControl = ctrls['andraKandaOrsaker'].value as string; + const isRequired = isAnnanKandOrsak && !valueOfNestedFormControl; + + if (isRequired) { + return { type: 'required', message: `Annan orsak är obligatoriskt` }; + } + + return null; + } } } -export class DateIsRequiredCheck { - static CheckIfRequired(controlToValidateName: string): ValidatorFn { + +export class RequiredDateValidator { + static CheckIfRequired(): ValidatorFn { return (fg: AbstractControl): { [key: string]: string } => { - const valueOfControlToValidate = fg?.get(controlToValidateName).value as string; - const isRequired = valueOfControlToValidate === ''; + const valueOfFormControl = fg?.get('date')?.value as string; + const isRequired = !valueOfFormControl; return isRequired ? { dateIsRequired: 'Datum är obligatoriskt' } : null; - }; + } + } +} + +export function requiredDayOrPartOfDayValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.controls as Controls; + + if (ctrls) { + const isFranvaro = ctrls['alternative'].value === Alternative.FRANVARO; + const valueOfFormControl = control.value as string; + const isRequired = isFranvaro && !valueOfFormControl; + + if (isRequired) { + return { type: 'required', message: `Hel- eller del av dag är obligatoriskt` }; + } + + return null; + } + } +} + +export function requiredStartTimeValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.parent?.controls as Controls; + + if (ctrls) { + const isFranvaro = ctrls['alternative']?.value as string === Alternative.FRANVARO; + const isPartOfDay = ctrls['dayOrPartOfDay']?.value === DayOrPartOfDay.DEL_AV_DAG; + const valueOfFormControl = control?.value as string; + const isRequired = isFranvaro && isPartOfDay && (valueOfFormControl === '' || valueOfFormControl === null); + + if (isRequired) { + return { type: 'required', message: `Starttid är obligatoriskt` }; + } + + return null; + } + } +} + +export function requiredEndTimeValidator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.parent?.controls as Controls; + + if (ctrls) { + const isFranvaro = ctrls['alternative']?.value as string === Alternative.FRANVARO; + const isPartOfDay = ctrls['dayOrPartOfDay']?.value === DayOrPartOfDay.DEL_AV_DAG; + const valueOfFormControl = control?.value as string; + const isRequired = isFranvaro && isPartOfDay && (valueOfFormControl === '' || valueOfFormControl === null); + + if (isRequired) { + return { type: 'required', message: `Sluttid är obligatoriskt` }; + } + + return null; + } + } +} + +export function requiredFraga1Validator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.parent?.controls as Controls; + + if (ctrls) { + const isAvvikelse = ctrls['alternative']?.value === 'avvikelse'; + const valueOfFormControl = control.value as string; + const isRequired = isAvvikelse && !valueOfFormControl; + + if (isRequired) { + return { type: 'required', message: `Beskrivning är obligatoriskt` }; + } + + return null; + } + } +} + +export function requiredfraga2Validator(): ValidatorFn { + return (control: AbstractControl): ValidationError => { + const ctrls = control?.parent?.parent?.controls as Controls; + + if (ctrls) { + const isAvvikelse = ctrls['alternative']?.value === 'avvikelse'; + const valueOfFormControl = control.value as string; + const orsaksKodToValidate = ctrls['orsakerFormGroup']?.get('orsaker')?.value as string; + const isRequired = isAvvikelse && !valueOfFormControl && + (orsaksKodToValidate !== '19' && + orsaksKodToValidate !== '20' && + orsaksKodToValidate !== '28' + ) + + if (isRequired) { + return { type: 'required', message: `Beskrivning är obligatoriskt` }; + } + + return null; + } } }