|
|
|
|
@@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|