@masterteam/system-settings 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-system-settings.mjs","sources":["../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-timesheet-section/system-settings-timesheet-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-timesheet-section/system-settings-timesheet-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.model.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.storage.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.html","../../../../packages/masterteam/system-settings/src/masterteam-system-settings.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport type {\r\n SelectOption,\r\n TimezoneRegionOption,\r\n WeekendDayOption,\r\n} from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-general-section',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Card,\r\n SelectField,\r\n MultiSelectField,\r\n ],\r\n templateUrl: './system-settings-general-section.html',\r\n styleUrl: './system-settings-general-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsGeneralSection {\r\n readonly timezoneForm = input.required<FormGroup>();\r\n readonly currencyForm = input.required<FormGroup>();\r\n readonly weekendForm = input.required<FormGroup>();\r\n readonly timezoneOptions = input<TimezoneRegionOption[]>([]);\r\n readonly dateFormatOptions = input<SelectOption[]>([]);\r\n readonly timeFormatOptions = input<SelectOption[]>([]);\r\n readonly currencyOptions = input<SelectOption[]>([]);\r\n readonly currencyFormatOptions = input<SelectOption[]>([]);\r\n readonly weekendOptions = input<WeekendDayOption[]>([]);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div class=\"grid gap-6 xl:grid-cols-3\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"timezoneForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"timezone-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"timezone-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"regionId\"\r\n [options]=\"timezoneOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('timezone')\"\r\n [placeholder]=\"t('timezone-placeholder')\"\r\n [required]=\"true\"\r\n [filter]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"dateFormat\"\r\n [options]=\"dateFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('date-format')\"\r\n [placeholder]=\"t('date-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"timeFormat\"\r\n [options]=\"timeFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('time-format')\"\r\n [placeholder]=\"t('time-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"currencyForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"currency-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"currency-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"code\"\r\n [options]=\"currencyOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency')\"\r\n [placeholder]=\"t('currency-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"format\"\r\n [options]=\"currencyFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency-format')\"\r\n [placeholder]=\"t('currency-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"weekendForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"weekend-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"weekend-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-multi-select-field\r\n formControlName=\"days\"\r\n [options]=\"weekendOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('weekend-days')\"\r\n [placeholder]=\"t('weekend-placeholder')\"\r\n [display]=\"'chip'\"\r\n [filter]=\"false\"\r\n [showClear]=\"true\"\r\n [maxSelectedLabels]=\"3\"\r\n />\r\n </div>\r\n </mt-card>\r\n </div>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport type { DatePicker } from 'primeng/datepicker';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { HolidayItem } from '../../system-settings.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\n\r\ntype HolidayEditorForm = FormGroup<{\r\n label: FormControl<string>;\r\n from: FormControl<Date | null>;\r\n to: FormControl<Date | null>;\r\n}>;\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holiday-editor',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n DateField,\r\n TextField,\r\n ],\r\n templateUrl: './system-settings-holiday-editor.html',\r\n styleUrl: './system-settings-holiday-editor.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidayEditor {\r\n private readonly ref = inject(ModalRef);\r\n modal = inject(ModalService);\r\n\r\n readonly holiday = input<HolidayItem | null>(null);\r\n readonly isEditMode = input(false);\r\n\r\n readonly form: HolidayEditorForm = new FormGroup(\r\n {\r\n label: new FormControl('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n from: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n to: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n },\r\n {\r\n validators: [holidayRangeValidator()],\r\n },\r\n );\r\n\r\n readonly actionLabel = computed(() =>\r\n this.isEditMode() ? 'update-holiday' : 'add-holiday',\r\n );\r\n\r\n private readonly fromValue = toSignal(this.form.controls.from.valueChanges, {\r\n initialValue: this.form.controls.from.value,\r\n });\r\n\r\n readonly toPickerInputs = computed<Partial<DatePicker>>(() => {\r\n const from = this.fromValue();\r\n return from instanceof Date ? { minDate: from } : {};\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const holiday = this.holiday();\r\n this.form.reset(\r\n {\r\n label: holiday?.label ?? '',\r\n from: holiday?.from ?? null,\r\n to: holiday?.to ?? null,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n });\r\n }\r\n\r\n onSave(): void {\r\n this.form.markAllAsTouched();\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n const value = this.form.getRawValue();\r\n if (!(value.from instanceof Date) || !(value.to instanceof Date)) {\r\n return;\r\n }\r\n\r\n this.ref.close({\r\n label: value.label.trim(),\r\n from: value.from,\r\n to: value.to,\r\n } satisfies HolidayItem);\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n\r\nfunction holidayRangeValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const from = control.get('from')?.value;\r\n const to = control.get('to')?.value;\r\n\r\n if (!from || !to) {\r\n return null;\r\n }\r\n\r\n return from <= to ? null : { invalidRange: true };\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (ngSubmit)=\"onSave()\">\r\n <mt-text-field\r\n formControlName=\"label\"\r\n [label]=\"t('holiday-name')\"\r\n [placeholder]=\"t('holiday-name-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <div class=\"grid gap-1\">\r\n <mt-date-field\r\n formControlName=\"from\"\r\n [label]=\"t('from-date')\"\r\n [placeholder]=\"t('from-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n\r\n <div class=\"grid gap-1\">\r\n <mt-date-field\r\n formControlName=\"to\"\r\n [label]=\"t('to-date')\"\r\n [placeholder]=\"t('to-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n [pInputs]=\"toPickerInputs()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (form.errors?.[\"invalidRange\"] && (form.dirty || form.touched)) {\r\n <div class=\"text-sm text-red-600\">\r\n {{ t(\"holiday-range-error\") }}\r\n </div>\r\n }\r\n </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"button\" (onClick)=\"onSave()\" />\r\n </div>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport type { HolidayTableRow } from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holidays-section',\r\n imports: [TranslocoDirective, Button, Card, Table],\r\n templateUrl: './system-settings-holidays-section.html',\r\n styleUrl: './system-settings-holidays-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidaysSection {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly holidays = input<HolidayTableRow[]>([]);\r\n readonly addHoliday = output<void>();\r\n readonly editHoliday = output<number>();\r\n readonly deleteHoliday = output<number>();\r\n\r\n readonly columns = computed<ColumnDef[]>(() => [\r\n {\r\n key: 'label',\r\n label: this.transloco.translate('system-settings.holiday-name'),\r\n },\r\n {\r\n key: 'from',\r\n label: this.transloco.translate('system-settings.from-date'),\r\n },\r\n {\r\n key: 'to',\r\n label: this.transloco.translate('system-settings.to-date'),\r\n },\r\n ]);\r\n\r\n readonly rowActions = computed<TableAction[]>(() => [\r\n {\r\n icon: 'general.edit-01',\r\n tooltip: this.transloco.translate('system-settings.edit-holiday'),\r\n color: 'secondary',\r\n variant: 'outlined',\r\n action: (row) => this.editHoliday.emit(row.rowIndex as number),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('system-settings.remove-holiday'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteHoliday.emit(row.rowIndex as number),\r\n },\r\n ]);\r\n\r\n readonly hasHolidays = computed(() => this.holidays().length > 0);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div class=\"space-y-6\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\"\r\n >\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"holidays-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"holidays-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('add-holiday')\"\r\n icon=\"general.plus\"\r\n (onClick)=\"addHoliday.emit()\"\r\n />\r\n </div>\r\n\r\n @if (hasHolidays()) {\r\n <mt-table\r\n noCard\r\n [data]=\"holidays()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [dataKey]=\"'rowKey'\"\r\n storageKey=\"admin-system-settings-holidays-table\"\r\n >\r\n </mt-table>\r\n } @else {\r\n <div\r\n class=\"rounded-xl border border-dashed border-neutral-300 bg-neutral-50 px-6 py-10 text-center\"\r\n >\r\n <h5 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"no-holidays-title\") }}\r\n </h5>\r\n <p class=\"mt-2 text-sm text-neutral-600\">\r\n {{ t(\"no-holidays-description\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-smtp-section',\r\n imports: [ReactiveFormsModule, TranslocoDirective, Card, TextField],\r\n templateUrl: './system-settings-smtp-section.html',\r\n styleUrl: './system-settings-smtp-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsSmtpSection {\r\n readonly smtpForm = input.required<FormGroup>();\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"smtpForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"smtp-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"smtp-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-text-field\r\n formControlName=\"mail\"\r\n [label]=\"t('smtp-mail')\"\r\n [placeholder]=\"t('smtp-mail-placeholder')\"\r\n type=\"email\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"name\"\r\n [label]=\"t('smtp-name')\"\r\n [placeholder]=\"t('smtp-name-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"host\"\r\n [label]=\"t('smtp-host')\"\r\n [placeholder]=\"t('smtp-host-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"port\"\r\n [label]=\"t('smtp-port')\"\r\n [placeholder]=\"t('smtp-port-placeholder')\"\r\n type=\"number\"\r\n />\r\n\r\n <div class=\"md:col-span-2\">\r\n <mt-text-field\r\n formControlName=\"password\"\r\n [label]=\"t('smtp-password')\"\r\n [placeholder]=\"t('smtp-password-placeholder')\"\r\n type=\"password\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n} from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { NumberField } from '@masterteam/components/number-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport type {\r\n ScheduleItemTypeOption,\r\n SelectOption,\r\n TimezoneRegionOption,\r\n WeekendDayOption,\r\n} from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-timesheet-section',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Card,\r\n MultiSelectField,\r\n NumberField,\r\n SelectField,\r\n TextareaField,\r\n TextField,\r\n ToggleField,\r\n ],\r\n templateUrl: './system-settings-timesheet-section.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsTimeSheetSection {\r\n readonly policyForm = input.required<FormGroup>();\r\n readonly globalWorkingHoursForm = input.required<FormGroup>();\r\n readonly dayOptions = input<WeekendDayOption[]>([]);\r\n readonly scheduleItemTypeOptions = input<ScheduleItemTypeOption[]>([]);\r\n readonly rateSourceOptions = input<SelectOption[]>([]);\r\n readonly timezoneOptions = input<TimezoneRegionOption[]>([]);\r\n\r\n readonly allowOvertimeControl = computed(() =>\r\n this.policyForm().get('allowOvertime'),\r\n );\r\n readonly costEnabledControl = computed(() =>\r\n this.policyForm().get('costEnabled'),\r\n );\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div class=\"grid gap-6 xl:grid-cols-2 mb-6\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"policyForm()\" class=\"space-y-5\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"timesheet-policy-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"timesheet-policy-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div\r\n class=\"rounded-lg border border-sky-200 bg-sky-50 px-4 py-3 text-sm text-sky-800\"\r\n >\r\n {{ t(\"timesheet-policy-workflow-note\") }}\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"weekStartDay\"\r\n [options]=\"dayOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('week-start-day')\"\r\n [placeholder]=\"t('week-start-day-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-multi-select-field\r\n formControlName=\"allowedScheduleItemTypes\"\r\n [options]=\"scheduleItemTypeOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'itemType'\"\r\n [label]=\"t('allowed-schedule-item-types')\"\r\n [placeholder]=\"t('allowed-schedule-item-types-placeholder')\"\r\n [display]=\"'chip'\"\r\n [required]=\"true\"\r\n [showClear]=\"true\"\r\n />\r\n\r\n <mt-number-field\r\n formControlName=\"regularDailyHours\"\r\n [label]=\"t('regular-daily-hours')\"\r\n [placeholder]=\"t('regular-daily-hours-placeholder')\"\r\n [min]=\"0\"\r\n [max]=\"24\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-number-field\r\n formControlName=\"maxDailyHours\"\r\n [label]=\"t('max-daily-hours')\"\r\n [placeholder]=\"t('max-daily-hours-placeholder')\"\r\n [min]=\"1\"\r\n [max]=\"24\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-number-field\r\n formControlName=\"pastEntryLockDays\"\r\n [label]=\"t('past-entry-lock-days')\"\r\n [placeholder]=\"t('past-entry-lock-days-placeholder')\"\r\n [min]=\"0\"\r\n [max]=\"3650\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"rateSource\"\r\n [options]=\"rateSourceOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('rate-source')\"\r\n [placeholder]=\"t('rate-source-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n\r\n <div class=\"grid gap-3 md:grid-cols-2\">\r\n <mt-toggle-field\r\n formControlName=\"generationEnabled\"\r\n [label]=\"t('generation-enabled')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"manualGenerationEnabled\"\r\n [label]=\"t('manual-generation-enabled')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"allowOvertime\"\r\n [label]=\"t('allow-overtime')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"requireOvertimeReason\"\r\n [label]=\"t('require-overtime-reason')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"requireDescription\"\r\n [label]=\"t('require-description')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"allowFutureEntry\"\r\n [label]=\"t('allow-future-entry')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"assignedItemsOnly\"\r\n [label]=\"t('assigned-items-only')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"allowZeroHourSubmit\"\r\n [label]=\"t('allow-zero-hour-submit')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"costEnabled\"\r\n [label]=\"t('cost-enabled')\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"globalWorkingHoursForm()\" class=\"space-y-5\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"global-working-hours-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"global-working-hours-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"timeZoneId\"\r\n [options]=\"timezoneOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('global-timezone')\"\r\n [placeholder]=\"t('global-timezone-placeholder')\"\r\n [filter]=\"true\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"workDayStart\"\r\n type=\"time\"\r\n [label]=\"t('work-day-start')\"\r\n [placeholder]=\"t('work-day-start-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"workDayEnd\"\r\n type=\"time\"\r\n [label]=\"t('work-day-end')\"\r\n [placeholder]=\"t('work-day-end-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-multi-select-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"workingDays\"\r\n [options]=\"dayOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('working-days')\"\r\n [placeholder]=\"t('working-days-placeholder')\"\r\n [display]=\"'chip'\"\r\n [required]=\"true\"\r\n [showClear]=\"true\"\r\n />\r\n\r\n <mt-textarea-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"holidaysCsv\"\r\n [label]=\"t('global-holidays')\"\r\n [placeholder]=\"t('global-holidays-placeholder')\"\r\n rows=\"3\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n </div>\r\n</ng-container>\r\n","import { FormControl, FormGroup } from '@angular/forms';\r\n\r\nexport type SystemSettingPrimitive = string | number | boolean | null;\r\nexport type SystemSettingObject = Record<string, unknown>;\r\nexport type SystemSettingValue =\r\n | SystemSettingPrimitive\r\n | SystemSettingObject\r\n | unknown[];\r\n\r\nexport interface SystemSetting {\r\n key: string;\r\n label: string;\r\n description: string;\r\n value: SystemSettingValue;\r\n}\r\n\r\nexport interface UpdateSystemSettingItem<TValue = SystemSettingValue> {\r\n key: string;\r\n value: TValue;\r\n}\r\n\r\nexport interface ApiResponse<TData> {\r\n data: TData;\r\n message?: string | null;\r\n endpoint?: string;\r\n status?: number;\r\n code?: number;\r\n locale?: string;\r\n cacheSession?: string | null;\r\n}\r\n\r\nexport interface FormatSchemaOption {\r\n key: string;\r\n sample: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface SystemSettingsFormatSchema {\r\n dateFormats: FormatSchemaOption[];\r\n timeFormats: FormatSchemaOption[];\r\n}\r\n\r\nexport interface HolidayItem {\r\n label: string;\r\n from: Date;\r\n to: Date;\r\n}\r\n\r\nexport interface HolidaysSettingValue extends SystemSettingObject {\r\n data: HolidayItem[];\r\n}\r\n\r\nexport interface TimezoneRegionOption extends SystemSettingObject {\r\n id: string;\r\n baseUtcOffset: string;\r\n standardName: string;\r\n displayName: string;\r\n daylightName: string;\r\n name?: string;\r\n}\r\n\r\nexport interface TimezoneSettingValue extends SystemSettingObject {\r\n region: TimezoneRegionOption | null;\r\n dateFormat: string | null;\r\n timeFormat: string | null;\r\n}\r\n\r\nexport interface CurrencyUnitLabel extends SystemSettingObject {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface CurrencySettingValue extends SystemSettingObject {\r\n name: string;\r\n unit: CurrencyUnitLabel;\r\n format: string | null;\r\n}\r\n\r\nexport interface WeekendSettingValue extends SystemSettingObject {\r\n days: number[];\r\n}\r\n\r\nexport interface SmtpSettingValue extends SystemSettingObject {\r\n mail: string;\r\n name: string;\r\n password: string;\r\n host: string;\r\n port: number | null;\r\n}\r\n\r\nexport interface TimeSheetPolicySettingValue extends SystemSettingObject {\r\n weekStartDay: number;\r\n generationEnabled: boolean;\r\n manualGenerationEnabled: boolean;\r\n regularDailyHours: number;\r\n maxDailyHours: number;\r\n allowOvertime: boolean;\r\n requireOvertimeReason: boolean;\r\n requireDescription: boolean;\r\n allowFutureEntry: boolean;\r\n pastEntryLockDays: number | null;\r\n allowedScheduleItemTypes: string[];\r\n assignedItemsOnly: boolean;\r\n allowZeroHourSubmit: boolean;\r\n costEnabled: boolean;\r\n rateSource: string;\r\n}\r\n\r\nexport interface GlobalWorkingHoursSettingValue extends SystemSettingObject {\r\n timeZoneId: string;\r\n workDayStartMinute: number;\r\n workDayEndMinute: number;\r\n workingDays: number[];\r\n holidays: string[];\r\n}\r\n\r\nexport interface CurrencyCatalogItem {\r\n code: string;\r\n englishLabel: string;\r\n arabicLabel: string;\r\n unit: CurrencyUnitLabel;\r\n}\r\n\r\nexport interface SelectOption {\r\n id: string;\r\n name: string;\r\n isSelected?: boolean;\r\n}\r\n\r\nexport interface WeekendDayOption extends SelectOption {\r\n dayNumber: number;\r\n}\r\n\r\nexport interface ScheduleItemTypeOption extends SelectOption {\r\n itemType: string;\r\n}\r\n\r\nexport interface HolidayTableRow {\r\n rowKey: string;\r\n rowIndex: number;\r\n label: string;\r\n from: string;\r\n to: string;\r\n}\r\n\r\nexport interface SystemSettingsSnapshot {\r\n holidays: HolidaysSettingValue;\r\n timezone: TimezoneSettingValue;\r\n currency: CurrencySettingValue;\r\n weekend: WeekendSettingValue;\r\n smtp: SmtpSettingValue;\r\n timeSheetPolicy: TimeSheetPolicySettingValue;\r\n globalWorkingHours: GlobalWorkingHoursSettingValue;\r\n}\r\n\r\nexport type SystemSettingsForm = FormGroup<{\r\n timezone: FormGroup<{\r\n regionId: FormControl<string | null>;\r\n dateFormat: FormControl<string | null>;\r\n timeFormat: FormControl<string | null>;\r\n }>;\r\n currency: FormGroup<{\r\n code: FormControl<string | null>;\r\n format: FormControl<string | null>;\r\n }>;\r\n weekend: FormGroup<{\r\n days: FormControl<number[]>;\r\n }>;\r\n smtp: FormGroup<{\r\n mail: FormControl<string>;\r\n name: FormControl<string>;\r\n password: FormControl<string>;\r\n host: FormControl<string>;\r\n port: FormControl<string>;\r\n }>;\r\n timeSheetPolicy: FormGroup<{\r\n weekStartDay: FormControl<number | null>;\r\n generationEnabled: FormControl<boolean>;\r\n manualGenerationEnabled: FormControl<boolean>;\r\n regularDailyHours: FormControl<number | null>;\r\n maxDailyHours: FormControl<number | null>;\r\n allowOvertime: FormControl<boolean>;\r\n requireOvertimeReason: FormControl<boolean>;\r\n requireDescription: FormControl<boolean>;\r\n allowFutureEntry: FormControl<boolean>;\r\n pastEntryLockDays: FormControl<number | null>;\r\n allowedScheduleItemTypes: FormControl<string[]>;\r\n assignedItemsOnly: FormControl<boolean>;\r\n allowZeroHourSubmit: FormControl<boolean>;\r\n costEnabled: FormControl<boolean>;\r\n rateSource: FormControl<string | null>;\r\n }>;\r\n globalWorkingHours: FormGroup<{\r\n timeZoneId: FormControl<string | null>;\r\n workDayStart: FormControl<string>;\r\n workDayEnd: FormControl<string>;\r\n workingDays: FormControl<number[]>;\r\n holidaysCsv: FormControl<string>;\r\n }>;\r\n}>;\r\n\r\nexport const FIXED_CURRENCIES: CurrencyCatalogItem[] = [\r\n {\r\n code: 'SAR',\r\n englishLabel: 'Saudi Riyal (SAR)',\r\n arabicLabel: 'ريال سعودي (SAR)',\r\n unit: {\r\n en: 'SAR',\r\n ar: 'ريال سعودي',\r\n },\r\n },\r\n {\r\n code: 'OMR',\r\n englishLabel: 'Omani Rial (OMR)',\r\n arabicLabel: 'ريال عماني (OMR)',\r\n unit: {\r\n en: 'OMR',\r\n ar: 'ريال عماني',\r\n },\r\n },\r\n {\r\n code: 'AED',\r\n englishLabel: 'UAE Dirham (AED)',\r\n arabicLabel: 'درهم إماراتي (AED)',\r\n unit: {\r\n en: 'AED',\r\n ar: 'درهم إماراتي',\r\n },\r\n },\r\n];\r\n\r\nexport const DEFAULT_DATE_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'MM/dd/yyyy',\r\n sample: 'MM/dd/yyyy [01/20/2023]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'yyyy/MM/dd',\r\n sample: 'yyyy/MM/dd [2023/01/20]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'dd-MM-yyyy',\r\n sample: 'dd-MM-yyyy [20-01-2023]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'yyyy-MM-dd',\r\n sample: 'yyyy-MM-dd [2023-01-20]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const DEFAULT_TIME_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'hh:mm tt',\r\n sample: 'hh:mm tt [03:00 PM]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'HH:mm',\r\n sample: 'HH:mm [15:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'H:mm:ss',\r\n sample: 'H:mm:ss [15:00:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'hh:mm:ss',\r\n sample: 'hh:mm:ss [03:00:00]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const WEEKEND_DAY_DEFINITIONS = [\r\n { dayNumber: 1, translationKey: 'monday' },\r\n { dayNumber: 2, translationKey: 'tuesday' },\r\n { dayNumber: 3, translationKey: 'wednesday' },\r\n { dayNumber: 4, translationKey: 'thursday' },\r\n { dayNumber: 5, translationKey: 'friday' },\r\n { dayNumber: 6, translationKey: 'saturday' },\r\n { dayNumber: 7, translationKey: 'sunday' },\r\n] as const;\r\n\r\nexport const DOTNET_DAY_DEFINITIONS = [\r\n { dayNumber: 0, translationKey: 'sunday' },\r\n { dayNumber: 1, translationKey: 'monday' },\r\n { dayNumber: 2, translationKey: 'tuesday' },\r\n { dayNumber: 3, translationKey: 'wednesday' },\r\n { dayNumber: 4, translationKey: 'thursday' },\r\n { dayNumber: 5, translationKey: 'friday' },\r\n { dayNumber: 6, translationKey: 'saturday' },\r\n] as const;\r\n\r\nexport const SCHEDULE_ITEM_TYPE_OPTIONS = [\r\n { itemType: 'Task', translationKey: 'schedule-item-task' },\r\n { itemType: 'Milestone', translationKey: 'schedule-item-milestone' },\r\n { itemType: 'Deliverable', translationKey: 'schedule-item-deliverable' },\r\n] as const;\r\n\r\nexport const RATE_SOURCE_OPTIONS = [\r\n { id: 'UserHourlyRate', translationKey: 'rate-source-user-hourly-rate' },\r\n { id: 'None', translationKey: 'rate-source-none' },\r\n] as const;\r\n","import type { SystemSetting } from './system-settings.model';\n\nexport const SYSTEM_SETTINGS_STORAGE_KEY = 'systemSettings.settings';\n\nexport interface SystemSettingsStorage {\n setItem(key: string, value: string): void;\n}\n\nexport function serializeSystemSettings(\n settings: readonly SystemSetting[],\n): string {\n return JSON.stringify(settings);\n}\n\n/**\n * Persists the canonical settings array consumed by host-level formatters.\n * Storage failures must not turn a successful API request into a UI failure.\n */\nexport function synchronizeSystemSettingsStorage(\n storage: SystemSettingsStorage | null,\n settings: readonly SystemSetting[],\n): boolean {\n if (!storage) {\n return false;\n }\n\n try {\n storage.setItem(\n SYSTEM_SETTINGS_STORAGE_KEY,\n serializeSystemSettings(settings),\n );\n return true;\n } catch {\n return false;\n }\n}\n\nexport function resolveBrowserLocalStorage(): SystemSettingsStorage | null {\n try {\n return globalThis.localStorage ?? null;\n } catch {\n return null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { Button } from '@masterteam/components/button';\nimport { Page } from '@masterteam/components/page';\nimport { ModalService } from '@masterteam/components/modal';\nimport { ToastService } from '@masterteam/components/toast';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { SystemSettingsGeneralSection } from './components/system-settings-general-section/system-settings-general-section';\nimport { SystemSettingsHolidayEditor } from './components/system-settings-holiday-editor/system-settings-holiday-editor';\nimport { SystemSettingsHolidaysSection } from './components/system-settings-holidays-section/system-settings-holidays-section';\nimport { SystemSettingsSmtpSection } from './components/system-settings-smtp-section/system-settings-smtp-section';\nimport { SystemSettingsTimeSheetSection } from './components/system-settings-timesheet-section/system-settings-timesheet-section';\nimport type {\n ApiResponse,\n CurrencyCatalogItem,\n CurrencySettingValue,\n FormatSchemaOption,\n GlobalWorkingHoursSettingValue,\n HolidayItem,\n HolidayTableRow,\n HolidaysSettingValue,\n ScheduleItemTypeOption,\n SelectOption,\n SmtpSettingValue,\n SystemSetting,\n SystemSettingObject,\n SystemSettingsForm,\n SystemSettingsFormatSchema,\n SystemSettingsSnapshot,\n TimeSheetPolicySettingValue,\n TimezoneRegionOption,\n TimezoneSettingValue,\n UpdateSystemSettingItem,\n WeekendDayOption,\n WeekendSettingValue,\n} from './system-settings.model';\nimport {\n DEFAULT_DATE_FORMAT_OPTIONS,\n DEFAULT_TIME_FORMAT_OPTIONS,\n DOTNET_DAY_DEFINITIONS,\n FIXED_CURRENCIES,\n RATE_SOURCE_OPTIONS,\n SCHEDULE_ITEM_TYPE_OPTIONS,\n WEEKEND_DAY_DEFINITIONS,\n} from './system-settings.model';\nimport {\n resolveBrowserLocalStorage,\n synchronizeSystemSettingsStorage,\n} from './system-settings.storage';\n\n@Component({\n selector: 'mt-system-settings',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslocoDirective,\n Page,\n Button,\n Breadcrumb,\n SkeletonModule,\n SystemSettingsHolidaysSection,\n SystemSettingsGeneralSection,\n SystemSettingsSmtpSection,\n SystemSettingsTimeSheetSection,\n ],\n templateUrl: './system-settings.html',\n styleUrl: './system-settings.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class SystemSettings implements OnInit {\n private readonly http = inject(HttpClient);\n private readonly router = inject(Router);\n private readonly transloco = inject(TranslocoService);\n private readonly modal = inject(ModalService);\n private readonly toast = inject(ToastService);\n\n readonly apiBasePath = input('settings');\n readonly backRoute = input<string | null>('/control-panel/product-settings');\n readonly formatSchema = input<SystemSettingsFormatSchema | null>(null);\n\n readonly breadcrumbItems: {\n label?: string;\n routerLink?: string;\n icon?: string;\n }[] = [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.transloco.translate('product-settings.product-settings'),\n routerLink: '/control-panel/product-settings',\n },\n {\n label: this.transloco.translate('system-settings.page-title'),\n },\n ];\n\n readonly form: SystemSettingsForm = new FormGroup({\n timezone: new FormGroup({\n regionId: new FormControl<string | null>(null, Validators.required),\n dateFormat: new FormControl<string | null>(null, Validators.required),\n timeFormat: new FormControl<string | null>(null, Validators.required),\n }),\n currency: new FormGroup({\n code: new FormControl<string | null>(null, Validators.required),\n format: new FormControl<string | null>(null, Validators.required),\n }),\n weekend: new FormGroup({\n days: new FormControl<number[]>([], { nonNullable: true }),\n }),\n smtp: new FormGroup({\n mail: new FormControl('', { nonNullable: true }),\n name: new FormControl('', { nonNullable: true }),\n password: new FormControl('', { nonNullable: true }),\n host: new FormControl('', { nonNullable: true }),\n port: new FormControl('', { nonNullable: true }),\n }),\n timeSheetPolicy: new FormGroup({\n weekStartDay: new FormControl<number | null>(null, Validators.required),\n generationEnabled: new FormControl(true, { nonNullable: true }),\n manualGenerationEnabled: new FormControl(true, { nonNullable: true }),\n regularDailyHours: new FormControl<number | null>(8, [\n Validators.required,\n Validators.min(0),\n Validators.max(24),\n ]),\n maxDailyHours: new FormControl<number | null>(24, [\n Validators.required,\n Validators.min(1),\n Validators.max(24),\n ]),\n allowOvertime: new FormControl(true, { nonNullable: true }),\n requireOvertimeReason: new FormControl(false, { nonNullable: true }),\n requireDescription: new FormControl(false, { nonNullable: true }),\n allowFutureEntry: new FormControl(true, { nonNullable: true }),\n pastEntryLockDays: new FormControl<number | null>(null, [\n Validators.min(0),\n Validators.max(3650),\n ]),\n allowedScheduleItemTypes: new FormControl<string[]>(['Deliverable'], {\n nonNullable: true,\n validators: [Validators.required],\n }),\n assignedItemsOnly: new FormControl(false, { nonNullable: true }),\n allowZeroHourSubmit: new FormControl(true, { nonNullable: true }),\n costEnabled: new FormControl(true, { nonNullable: true }),\n rateSource: new FormControl<string | null>(\n 'UserHourlyRate',\n Validators.required,\n ),\n }),\n globalWorkingHours: new FormGroup({\n timeZoneId: new FormControl<string | null>(null, Validators.required),\n workDayStart: new FormControl('08:00', {\n nonNullable: true,\n validators: [Validators.required],\n }),\n workDayEnd: new FormControl('16:00', {\n nonNullable: true,\n validators: [Validators.required],\n }),\n workingDays: new FormControl<number[]>([0, 1, 2, 3, 4], {\n nonNullable: true,\n validators: [Validators.required],\n }),\n holidaysCsv: new FormControl('', { nonNullable: true }),\n }),\n });\n\n readonly settings = signal<SystemSetting[] | null>(null);\n readonly settingsLoading = signal(false);\n readonly settingsError = signal<string | null>(null);\n readonly settingsLastUpdated = signal<string | null>(null);\n readonly updating = signal(false);\n readonly updateError = signal<string | null>(null);\n readonly timezones = signal<TimezoneRegionOption[]>([]);\n readonly timezonesLoading = signal(false);\n readonly timezonesError = signal<string | null>(null);\n readonly holidayItems = signal<HolidayItem[]>([]);\n readonly initialSnapshot = signal<SystemSettingsSnapshot | null>(null);\n readonly hydrationVersion = signal<string | null>(null);\n\n readonly activeLang = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n readonly formStatus = toSignal(this.form.statusChanges, {\n initialValue: this.form.status,\n });\n readonly selectedDateFormat = toSignal(\n this.form.controls.timezone.controls.dateFormat.valueChanges,\n {\n initialValue: this.form.controls.timezone.controls.dateFormat.value,\n },\n );\n readonly selectedTimeFormat = toSignal(\n this.form.controls.timezone.controls.timeFormat.valueChanges,\n {\n initialValue: this.form.controls.timezone.controls.timeFormat.value,\n },\n );\n readonly selectedCurrencyCode = toSignal(\n this.form.controls.currency.controls.code.valueChanges,\n {\n initialValue: this.form.controls.currency.controls.code.value,\n },\n );\n readonly formValue = toSignal(this.form.valueChanges, {\n initialValue: this.form.getRawValue(),\n });\n\n readonly holidaysSetting = computed(() => this.findSettingByKey('Holidays'));\n readonly timezoneSetting = computed(() => this.findSettingByKey('Timezone'));\n readonly currencySetting = computed(() => this.findSettingByKey('Currency'));\n readonly weekendSetting = computed(() => this.findSettingByKey('Weekend'));\n readonly smtpSetting = computed(() => this.findSettingByKey('SMTP'));\n readonly timeSheetPolicySetting = computed(() =>\n this.findSettingByKey('TimeSheetPolicy'),\n );\n readonly globalWorkingHoursSetting = computed(() =>\n this.findSettingByKey('GlobalWorkingHours'),\n );\n\n readonly resolvedFormatSchema = computed<SystemSettingsFormatSchema>(() => {\n const schema = this.formatSchema();\n return {\n dateFormats: schema?.dateFormats ?? DEFAULT_DATE_FORMAT_OPTIONS,\n timeFormats: schema?.timeFormats ?? DEFAULT_TIME_FORMAT_OPTIONS,\n };\n });\n\n readonly timezoneOptions = computed(() =>\n this.timezones().map((timezone) => ({\n ...timezone,\n name: timezone.name ?? timezone.displayName,\n })),\n );\n\n readonly dateFormatOptions = computed(() =>\n this.mapFormatOptions(\n this.resolvedFormatSchema().dateFormats,\n this.selectedDateFormat(),\n ),\n );\n\n readonly timeFormatOptions = computed(() =>\n this.mapFormatOptions(\n this.resolvedFormatSchema().timeFormats,\n this.selectedTimeFormat(),\n ),\n );\n\n readonly currencyOptions = computed<SelectOption[]>(() => {\n const lang = this.activeLang();\n return FIXED_CURRENCIES.map((currency) => ({\n id: currency.code,\n name: lang === 'ar' ? currency.arabicLabel : currency.englishLabel,\n }));\n });\n\n readonly currencyFormatOptions = computed(() => {\n const currency = FIXED_CURRENCIES.find(\n (item) => item.code === this.selectedCurrencyCode(),\n );\n\n return this.buildCurrencyFormatOptions(currency);\n });\n\n readonly weekendOptions = computed<WeekendDayOption[]>(() => {\n this.activeLang();\n\n return WEEKEND_DAY_DEFINITIONS.map((day) => ({\n id: `${day.dayNumber}`,\n dayNumber: day.dayNumber,\n name: this.transloco.translate(`system-settings.${day.translationKey}`),\n }));\n });\n\n readonly dotnetDayOptions = computed<WeekendDayOption[]>(() => {\n this.activeLang();\n\n return DOTNET_DAY_DEFINITIONS.map((day) => ({\n id: `${day.dayNumber}`,\n dayNumber: day.dayNumber,\n name: this.transloco.translate(`system-settings.${day.translationKey}`),\n }));\n });\n\n readonly scheduleItemTypeOptions = computed<ScheduleItemTypeOption[]>(() => {\n this.activeLang();\n\n return SCHEDULE_ITEM_TYPE_OPTIONS.map((item) => ({\n id: item.itemType,\n itemType: item.itemType,\n name: this.transloco.translate(`system-settings.${item.translationKey}`),\n }));\n });\n\n readonly rateSourceOptions = computed<SelectOption[]>(() => {\n this.activeLang();\n\n return RATE_SOURCE_OPTIONS.map((item) => ({\n id: item.id,\n name: this.transloco.translate(`system-settings.${item.translationKey}`),\n }));\n });\n\n readonly isReady = computed(\n () => this.hydrationVersion() !== null && this.initialSnapshot() !== null,\n );\n\n readonly isLoading = computed(\n () => this.settingsLoading() || this.timezonesLoading() || !this.isReady(),\n );\n\n readonly hasChanges = computed(() => {\n this.formValue();\n this.holidayItems();\n\n const initial = this.initialSnapshot();\n if (!initial) {\n return false;\n }\n\n const current = this.buildCurrentSnapshot();\n if (!current) {\n return false;\n }\n\n return (\n !this.areEqual(initial.holidays, current.holidays) ||\n !this.areEqual(initial.timezone, current.timezone) ||\n !this.areEqual(initial.currency, current.currency) ||\n !this.areEqual(initial.weekend, current.weekend) ||\n !this.areEqual(initial.smtp, current.smtp) ||\n !this.areEqual(initial.timeSheetPolicy, current.timeSheetPolicy) ||\n !this.areEqual(initial.globalWorkingHours, current.globalWorkingHours)\n );\n });\n\n readonly canSaveSettings = computed(\n () =>\n !this.isLoading() &&\n !this.updating() &&\n this.formStatus() === 'VALID' &&\n this.hasChanges(),\n );\n\n readonly holidayTableRows = computed<HolidayTableRow[]>(() =>\n this.holidayItems().map((holiday, index) => ({\n rowKey: `${index}`,\n rowIndex: index,\n label: holiday.label,\n from: formatDateOnly(holiday.from),\n to: formatDateOnly(holiday.to),\n })),\n );\n\n constructor() {\n effect(() => {\n const version = [\n this.settingsLastUpdated() ?? 'none',\n this.settingsError() ?? 'none',\n this.timezonesError() ?? 'none',\n String(this.timezones().length),\n JSON.stringify(this.resolvedFormatSchema()),\n ].join('::');\n\n if (this.settingsLoading() || this.timezonesLoading()) {\n return;\n }\n\n if (version === this.hydrationVersion()) {\n return;\n }\n\n this.hydrateForm(\n this.holidaysSetting() ?? this.createFallbackSetting('Holidays'),\n this.timezoneSetting() ?? this.createFallbackSetting('Timezone'),\n this.currencySetting() ?? this.createFallbackSetting('Currency'),\n this.weekendSetting() ?? this.createFallbackSetting('Weekend'),\n this.smtpSetting() ?? this.createFallbackSetting('SMTP'),\n this.timeSheetPolicySetting() ??\n this.createFallbackSetting('TimeSheetPolicy'),\n this.globalWorkingHoursSetting() ??\n this.createFallbackSetting('GlobalWorkingHours'),\n );\n\n this.hydrationVersion.set(version);\n });\n }\n\n ngOnInit(): void {\n this.loadSettings();\n this.loadTimezones();\n }\n\n goBack(): void {\n const backRoute = this.backRoute();\n if (!backRoute) {\n return;\n }\n\n this.router.navigateByUrl(backRoute);\n }\n\n openAddHoliday(): void {\n const modalRef = this.modal.openModal(\n SystemSettingsHolidayEditor,\n 'dialog',\n {\n header: this.transloco.translate('system-settings.add-holiday'),\n width: '42rem',\n appendTo: 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: {\n holiday: null,\n isEditMode: false,\n },\n },\n );\n\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\n if (!result) {\n return;\n }\n\n this.holidayItems.update((items) => [...items, result]);\n });\n }\n\n editHoliday(index: number): void {\n const holiday = this.holidayItems()[index];\n if (!holiday) {\n return;\n }\n\n const modalRef = this.modal.openModal(\n SystemSettingsHolidayEditor,\n 'drawer',\n {\n header: this.transloco.translate('system-settings.edit-holiday'),\n styleClass: '!w-[30rem] !absolute !shadow-none',\n position: 'end',\n appendTo: 'page-content',\n dismissible: true,\n inputValues: {\n holiday,\n isEditMode: true,\n },\n },\n );\n\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\n if (!result) {\n return;\n }\n\n this.holidayItems.update((items) =>\n items.map((item, itemIndex) => (itemIndex === index ? result : item)),\n );\n });\n }\n\n deleteHoliday(index: number): void {\n this.holidayItems.update((items) =>\n items.filter((_, itemIndex) => itemIndex !== index),\n );\n }\n\n onSave(): void {\n this.form.markAllAsTouched();\n\n const nextSnapshot = this.buildCurrentSnapshot();\n const initialSnapshot = this.initialSnapshot();\n if (!nextSnapshot || !initialSnapshot) {\n return;\n }\n\n const values: UpdateSystemSettingItem[] = [];\n\n if (!this.areEqual(initialSnapshot.holidays, nextSnapshot.holidays)) {\n values.push({\n key: 'Holidays',\n value: this.serializeHolidaysValue(nextSnapshot.holidays),\n });\n }\n\n if (!this.areEqual(initialSnapshot.timezone, nextSnapshot.timezone)) {\n values.push({\n key: 'Timezone',\n value: nextSnapshot.timezone,\n });\n }\n\n if (!this.areEqual(initialSnapshot.currency, nextSnapshot.currency)) {\n values.push({\n key: 'Currency',\n value: nextSnapshot.currency,\n });\n }\n\n if (!this.areEqual(initialSnapshot.weekend, nextSnapshot.weekend)) {\n values.push({\n key: 'Weekend',\n value: nextSnapshot.weekend,\n });\n }\n\n if (!this.areEqual(initialSnapshot.smtp, nextSnapshot.smtp)) {\n values.push({\n key: 'SMTP',\n value: nextSnapshot.smtp,\n });\n }\n\n if (\n !this.areEqual(\n initialSnapshot.timeSheetPolicy,\n nextSnapshot.timeSheetPolicy,\n )\n ) {\n values.push({\n key: 'TimeSheetPolicy',\n value: nextSnapshot.timeSheetPolicy,\n });\n }\n\n if (\n !this.areEqual(\n initialSnapshot.globalWorkingHours,\n nextSnapshot.globalWorkingHours,\n )\n ) {\n values.push({\n key: 'GlobalWorkingHours',\n value: nextSnapshot.globalWorkingHours,\n });\n }\n\n if (!values.length) {\n this.toast.info(\n this.transloco.translate('system-settings.no-changes-message'),\n );\n return;\n }\n\n this.updateSettings(values);\n }\n\n private loadSettings(): void {\n this.settingsLoading.set(true);\n this.settingsError.set(null);\n\n this.http\n .get<\n ApiResponse<SystemSetting[]>\n >(this.buildEndpoint('getsystemsettings'))\n .subscribe({\n next: (response) => {\n const settings = response.data ?? [];\n this.settings.set(settings);\n synchronizeSystemSettingsStorage(\n resolveBrowserLocalStorage(),\n settings,\n );\n this.settingsLoading.set(false);\n this.settingsLastUpdated.set(new Date().toISOString());\n },\n error: (error) => {\n this.settingsLoading.set(false);\n this.settingsError.set(\n error?.message ?? 'Failed to load system settings',\n );\n this.settingsLastUpdated.set(new Date().toISOString());\n },\n });\n }\n\n private loadTimezones(): void {\n this.timezonesLoading.set(true);\n this.timezonesError.set(null);\n\n this.http\n .get<ApiResponse<TimezoneRegionOption[]>>(this.buildEndpoint('timezones'))\n .subscribe({\n next: (response) => {\n this.timezones.set(response.data ?? []);\n this.timezonesLoading.set(false);\n },\n error: (error) => {\n this.timezonesLoading.set(false);\n this.timezonesError.set(\n error?.message ?? 'Failed to load timezone options',\n );\n },\n });\n }\n\n private updateSettings(values: UpdateSystemSettingItem[]): void {\n this.updating.set(true);\n this.updateError.set(null);\n\n this.http\n .put<ApiResponse<boolean>>(this.buildEndpoint('updatesystemsettings'), {\n values,\n })\n .subscribe({\n next: () => {\n const nextSettings = this.applyUpdatedSettings(\n this.settings() ?? [],\n values,\n );\n this.settings.set(nextSettings);\n synchronizeSystemSettingsStorage(\n resolveBrowserLocalStorage(),\n nextSettings,\n );\n this.updating.set(false);\n this.updateError.set(null);\n this.settingsLastUpdated.set(new Date().toISOString());\n },\n error: (error) => {\n this.updating.set(false);\n this.updateError.set(\n error?.message ?? 'Failed to update system settings',\n );\n },\n });\n }\n\n private hydrateForm(\n holidaysSetting: SystemSetting,\n timezoneSetting: SystemSetting,\n currencySetting: SystemSetting,\n weekendSetting: SystemSetting,\n smtpSetting: SystemSetting,\n timeSheetPolicySetting: SystemSetting,\n globalWorkingHoursSetting: SystemSetting,\n ): void {\n const holidays = this.extractHolidaysValue(holidaysSetting);\n const timezone = this.normalizeTimezoneSnapshot(\n this.extractTimezoneValue(timezoneSetting),\n );\n const currency = this.normalizeCurrencySnapshot(\n this.extractCurrencyValue(currencySetting),\n );\n const weekend = this.normalizeWeekendSnapshot(\n this.extractWeekendValue(weekendSetting),\n );\n const smtp = this.normalizeSmtpSnapshot(this.extractSmtpValue(smtpSetting));\n const timeSheetPolicy = this.normalizeTimeSheetPolicySnapshot(\n this.extractTimeSheetPolicyValue(timeSheetPolicySetting),\n );\n const globalWorkingHours = this.normalizeGlobalWorkingHoursSnapshot(\n this.extractGlobalWorkingHoursValue(globalWorkingHoursSetting),\n );\n\n this.holidayItems.set(holidays.data);\n this.form.controls.timezone.setValue({\n regionId: timezone.region?.id ?? null,\n dateFormat: timezone.dateFormat,\n timeFormat: timezone.timeFormat,\n });\n this.form.controls.currency.setValue({\n code: this.resolveCurrencyCode(currency),\n format: currency.format,\n });\n this.form.controls.weekend.setValue({\n days: weekend.days,\n });\n this.form.controls.smtp.setValue({\n mail: smtp.mail,\n name: smtp.name,\n password: smtp.password,\n host: smtp.host,\n port: smtp.port === null ? '' : String(smtp.port),\n });\n this.form.controls.timeSheetPolicy.setValue({\n weekStartDay: timeSheetPolicy.weekStartDay,\n generationEnabled: timeSheetPolicy.generationEnabled,\n manualGenerationEnabled: timeSheetPolicy.manualGenerationEnabled,\n regularDailyHours: timeSheetPolicy.regularDailyHours,\n maxDailyHours: timeSheetPolicy.maxDailyHours,\n allowOvertime: timeSheetPolicy.allowOvertime,\n requireOvertimeReason: timeSheetPolicy.requireOvertimeReason,\n requireDescription: timeSheetPolicy.requireDescription,\n allowFutureEntry: timeSheetPolicy.allowFutureEntry,\n pastEntryLockDays: timeSheetPolicy.pastEntryLockDays,\n allowedScheduleItemTypes: timeSheetPolicy.allowedScheduleItemTypes,\n assignedItemsOnly: timeSheetPolicy.assignedItemsOnly,\n allowZeroHourSubmit: timeSheetPolicy.allowZeroHourSubmit,\n costEnabled: timeSheetPolicy.costEnabled,\n rateSource: timeSheetPolicy.rateSource,\n });\n this.form.controls.globalWorkingHours.setValue({\n timeZoneId: globalWorkingHours.timeZoneId,\n workDayStart: minutesToTime(globalWorkingHours.workDayStartMinute),\n workDayEnd: minutesToTime(globalWorkingHours.workDayEndMinute),\n workingDays: globalWorkingHours.workingDays,\n holidaysCsv: globalWorkingHours.holidays.join(', '),\n });\n\n this.form.markAsPristine();\n this.form.markAsUntouched();\n this.initialSnapshot.set({\n holidays,\n timezone,\n currency,\n weekend,\n smtp,\n timeSheetPolicy,\n globalWorkingHours,\n });\n }\n\n private buildCurrentSnapshot(): SystemSettingsSnapshot | null {\n const timezone = this.buildTimezoneValue();\n const currency = this.buildCurrencyValue();\n if (!timezone || !currency || this.form.invalid) {\n return null;\n }\n\n return {\n holidays: {\n data: this.holidayItems().map((item) => ({\n label: item.label.trim(),\n from: item.from,\n to: item.to,\n })),\n },\n timezone,\n currency,\n weekend: this.buildWeekendValue(),\n smtp: this.buildSmtpValue(),\n timeSheetPolicy: this.buildTimeSheetPolicyValue(),\n globalWorkingHours: this.buildGlobalWorkingHoursValue(),\n };\n }\n\n private buildTimezoneValue(): TimezoneSettingValue | null {\n const timezoneForm = this.form.controls.timezone.getRawValue();\n if (\n !timezoneForm.regionId ||\n !timezoneForm.dateFormat ||\n !timezoneForm.timeFormat\n ) {\n return null;\n }\n\n const region = this.timezones().find(\n (item) => item.id === timezoneForm.regionId,\n );\n if (!region) {\n return null;\n }\n\n return {\n region: {\n ...region,\n name: region.name ?? region.displayName,\n },\n dateFormat: timezoneForm.dateFormat,\n timeFormat: timezoneForm.timeFormat,\n };\n }\n\n private buildCurrencyValue(): CurrencySettingValue | null {\n const currencyForm = this.form.controls.currency.getRawValue();\n if (!currencyForm.code || !currencyForm.format) {\n return null;\n }\n\n const currency = FIXED_CURRENCIES.find(\n (item) => item.code === currencyForm.code,\n );\n if (!currency) {\n return null;\n }\n\n return {\n name: currency.code,\n unit: currency.unit,\n format: currencyForm.format,\n };\n }\n\n private buildWeekendValue(): WeekendSettingValue {\n return {\n days: normalizeWeekendDays(\n this.form.controls.weekend.controls.days.value,\n ),\n };\n }\n\n private buildSmtpValue(): SmtpSettingValue {\n const smtpForm = this.form.controls.smtp.getRawValue();\n return {\n mail: smtpForm.mail.trim(),\n name: smtpForm.name.trim(),\n password: smtpForm.password,\n host: smtpForm.host.trim(),\n port: parsePort(smtpForm.port),\n };\n }\n\n private buildTimeSheetPolicyValue(): TimeSheetPolicySettingValue {\n const policyForm = this.form.controls.timeSheetPolicy.getRawValue();\n return {\n weekStartDay: policyForm.weekStartDay ?? 0,\n generationEnabled: policyForm.generationEnabled,\n manualGenerationEnabled: policyForm.manualGenerationEnabled,\n regularDailyHours: policyForm.regularDailyHours ?? 8,\n maxDailyHours: policyForm.maxDailyHours ?? 24,\n allowOvertime: policyForm.allowOvertime,\n requireOvertimeReason: policyForm.allowOvertime\n ? policyForm.requireOvertimeReason\n : false,\n requireDescription: policyForm.requireDescription,\n allowFutureEntry: policyForm.allowFutureEntry,\n pastEntryLockDays: policyForm.pastEntryLockDays,\n allowedScheduleItemTypes: policyForm.allowedScheduleItemTypes,\n assignedItemsOnly: policyForm.assignedItemsOnly,\n allowZeroHourSubmit: policyForm.allowZeroHourSubmit,\n costEnabled: policyForm.costEnabled,\n rateSource: policyForm.costEnabled\n ? (policyForm.rateSource ?? 'UserHourlyRate')\n : 'None',\n };\n }\n\n private buildGlobalWorkingHoursValue(): GlobalWorkingHoursSettingValue {\n const globalForm = this.form.controls.globalWorkingHours.getRawValue();\n return {\n timeZoneId: globalForm.timeZoneId ?? 'UTC',\n workDayStartMinute: timeToMinutes(globalForm.workDayStart),\n workDayEndMinute: timeToMinutes(globalForm.workDayEnd),\n workingDays: normalizeDotnetDays(globalForm.workingDays),\n holidays: parseCsv(globalForm.holidaysCsv),\n };\n }\n\n private findSettingByKey(key: string): SystemSetting | null {\n const normalizedKey = key.trim().toLowerCase();\n return (\n this.settings()?.find(\n (setting) => setting.key.trim().toLowerCase() === normalizedKey,\n ) ?? null\n );\n }\n\n private extractHolidaysValue(setting: SystemSetting): HolidaysSettingValue {\n if (!isRecord(setting.value)) {\n return { data: [] };\n }\n\n const rawData = setting.value['data'];\n if (!Array.isArray(rawData)) {\n return { data: [] };\n }\n\n return {\n data: rawData\n .map((item) => this.normalizeHolidayItem(item))\n .filter((item): item is HolidayItem => item !== null),\n };\n }\n\n private extractTimezoneValue(setting: SystemSetting): TimezoneSettingValue {\n if (!isRecord(setting.value)) {\n return {\n region: null,\n dateFormat: null,\n timeFormat: null,\n };\n }\n\n return {\n region: this.normalizeTimezoneRegion(\n setting.value['region'] ?? setting.value['Region'],\n ),\n dateFormat: getNullableString(\n setting.value['dateFormat'] ??\n setting.value['DateFormat'] ??\n setting.value['dateformat'],\n ),\n timeFormat: getNullableString(\n setting.value['timeFormat'] ??\n setting.value['TimeFormat'] ??\n setting.value['timeformat'],\n ),\n };\n }\n\n private extractCurrencyValue(setting: SystemSetting): CurrencySettingValue {\n if (!isRecord(setting.value)) {\n return this.getDefaultCurrencyValue();\n }\n\n return {\n name: getString(setting.value['name']) ?? FIXED_CURRENCIES[0].code,\n unit: this.normalizeCurrencyUnit(setting.value['unit']),\n format: getNullableString(setting.value['format']),\n };\n }\n\n private extractWeekendValue(setting: SystemSetting): WeekendSettingValue {\n if (!isRecord(setting.value)) {\n return { days: [] };\n }\n\n return {\n days: normalizeWeekendDays(\n setting.value['days'] ?? setting.value['Days'],\n ),\n };\n }\n\n private extractSmtpValue(setting: SystemSetting): SmtpSettingValue {\n if (!isRecord(setting.value)) {\n return this.getDefaultSmtpValue();\n }\n\n return {\n mail:\n getNullableString(setting.value['mail'] ?? setting.value['Mail']) ?? '',\n name:\n getNullableString(setting.value['name'] ?? setting.value['Name']) ?? '',\n password:\n getNullableString(\n setting.value['password'] ?? setting.value['Password'],\n ) ?? '',\n host:\n getNullableString(setting.value['host'] ?? setting.value['Host']) ?? '',\n port: getNullableNumber(setting.value['port'] ?? setting.value['Port']),\n };\n }\n\n private extractTimeSheetPolicyValue(\n setting: SystemSetting,\n ): TimeSheetPolicySettingValue {\n if (!isRecord(setting.value)) {\n return this.getDefaultTimeSheetPolicyValue();\n }\n\n const defaults = this.getDefaultTimeSheetPolicyValue();\n return {\n weekStartDay:\n getNumber(setting.value['weekStartDay']) ?? defaults.weekStartDay,\n generationEnabled:\n getBoolean(setting.value['generationEnabled']) ??\n defaults.generationEnabled,\n manualGenerationEnabled:\n getBoolean(setting.value['manualGenerationEnabled']) ??\n defaults.manualGenerationEnabled,\n regularDailyHours:\n getNumber(setting.value['regularDailyHours']) ??\n defaults.regularDailyHours,\n maxDailyHours:\n getNumber(setting.value['maxDailyHours']) ?? defaults.maxDailyHours,\n allowOvertime:\n getBoolean(setting.value['allowOvertime']) ?? defaults.allowOvertime,\n requireOvertimeReason:\n getBoolean(setting.value['requireOvertimeReason']) ??\n defaults.requireOvertimeReason,\n requireDescription:\n getBoolean(setting.value['requireDescription']) ??\n defaults.requireDescription,\n allowFutureEntry:\n getBoolean(setting.value['allowFutureEntry']) ??\n defaults.allowFutureEntry,\n pastEntryLockDays: getNullableNumber(setting.value['pastEntryLockDays']),\n allowedScheduleItemTypes:\n getStringArray(setting.value['allowedScheduleItemTypes']) ??\n defaults.allowedScheduleItemTypes,\n assignedItemsOnly:\n getBoolean(setting.value['assignedItemsOnly']) ??\n defaults.assignedItemsOnly,\n allowZeroHourSubmit:\n getBoolean(setting.value['allowZeroHourSubmit']) ??\n defaults.allowZeroHourSubmit,\n costEnabled:\n getBoolean(setting.value['costEnabled']) ?? defaults.costEnabled,\n rateSource: getString(setting.value['rateSource']) ?? defaults.rateSource,\n };\n }\n\n private extractGlobalWorkingHoursValue(\n setting: SystemSetting,\n ): GlobalWorkingHoursSettingValue {\n if (!isRecord(setting.value)) {\n return this.getDefaultGlobalWorkingHoursValue();\n }\n\n const defaults = this.getDefaultGlobalWorkingHoursValue();\n return {\n timeZoneId: getString(setting.value['timeZoneId']) ?? defaults.timeZoneId,\n workDayStartMinute:\n getNumber(setting.value['workDayStartMinute']) ??\n defaults.workDayStartMinute,\n workDayEndMinute:\n getNumber(setting.value['workDayEndMinute']) ??\n defaults.workDayEndMinute,\n workingDays:\n getNumberArray(setting.value['workingDays']) ?? defaults.workingDays,\n holidays: getStringArray(setting.value['holidays']) ?? defaults.holidays,\n };\n }\n\n private normalizeHolidayItem(value: unknown): HolidayItem | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const label = getString(value['label'] ?? value['name']);\n const from = normalizeDateInput(value['from']);\n const to = normalizeDateInput(value['to']);\n if (!label || !from || !to) {\n return null;\n }\n\n return { label, from, to };\n }\n\n private normalizeTimezoneRegion(value: unknown): TimezoneRegionOption | null {\n if (typeof value === 'string' && value.trim()) {\n const normalizedValue = value.trim().toLowerCase();\n const region =\n this.timezones().find(\n (item) => item.id.trim().toLowerCase() === normalizedValue,\n ) ?? null;\n\n return region\n ? {\n ...region,\n name: region.name ?? region.displayName,\n }\n : null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n const id = getString(value['id'] ?? value['Id']);\n if (!id) {\n return null;\n }\n\n const matchedRegion = this.timezones().find(\n (item) => item.id.trim().toLowerCase() === id.trim().toLowerCase(),\n );\n\n if (matchedRegion) {\n return {\n ...matchedRegion,\n name:\n getString(value['name'] ?? value['Name']) ??\n matchedRegion.name ??\n matchedRegion.displayName,\n };\n }\n\n const standardName =\n getString(value['standardName'] ?? value['StandardName']) ?? id;\n const displayName =\n getString(value['displayName'] ?? value['DisplayName']) ?? id;\n\n return {\n id,\n baseUtcOffset:\n getString(value['baseUtcOffset'] ?? value['BaseUtcOffset']) ?? '',\n standardName,\n displayName,\n daylightName:\n getString(value['daylightName'] ?? value['DaylightName']) ??\n standardName,\n name: getString(value['name'] ?? value['Name']) ?? displayName,\n };\n }\n\n private normalizeCurrencyUnit(value: unknown): CurrencySettingValue['unit'] {\n if (!isRecord(value)) {\n return FIXED_CURRENCIES[0].unit;\n }\n\n return {\n en: getString(value['en']) ?? FIXED_CURRENCIES[0].unit.en,\n ar: getString(value['ar']) ?? FIXED_CURRENCIES[0].unit.ar,\n };\n }\n\n private normalizeTimezoneSnapshot(\n value: TimezoneSettingValue,\n ): TimezoneSettingValue {\n const defaults = this.getDefaultTimezoneValue();\n return {\n region: value.region ?? defaults.region,\n dateFormat: value.dateFormat ?? defaults.dateFormat,\n timeFormat: value.timeFormat ?? defaults.timeFormat,\n };\n }\n\n private normalizeCurrencySnapshot(\n value: CurrencySettingValue,\n ): CurrencySettingValue {\n const code = this.resolveCurrencyCode(value);\n const currency =\n FIXED_CURRENCIES.find((item) => item.code === code) ??\n FIXED_CURRENCIES[0];\n const defaultFormat =\n this.buildCurrencyFormatOptions(currency)[0]?.id ?? null;\n\n return {\n name: currency.code,\n unit: currency.unit,\n format: value.format ?? defaultFormat,\n };\n }\n\n private normalizeWeekendSnapshot(\n value: WeekendSettingValue,\n ): WeekendSettingValue {\n return {\n days: normalizeWeekendDays(value.days),\n };\n }\n\n private normalizeSmtpSnapshot(value: SmtpSettingValue): SmtpSettingValue {\n return {\n mail: value.mail.trim(),\n name: value.name.trim(),\n password: value.password,\n host: value.host.trim(),\n port: value.port,\n };\n }\n\n private normalizeTimeSheetPolicySnapshot(\n value: TimeSheetPolicySettingValue,\n ): TimeSheetPolicySettingValue {\n const defaults = this.getDefaultTimeSheetPolicyValue();\n const regularDailyHours = clampNumber(value.regularDailyHours, 0, 24);\n const maxDailyHours = Math.max(\n regularDailyHours,\n clampNumber(value.maxDailyHours, 1, 24),\n );\n const allowedScheduleItemTypes = value.allowedScheduleItemTypes.length\n ? value.allowedScheduleItemTypes\n : defaults.allowedScheduleItemTypes;\n\n return {\n ...defaults,\n ...value,\n weekStartDay: clampNumber(value.weekStartDay, 0, 6),\n regularDailyHours,\n maxDailyHours,\n pastEntryLockDays:\n value.pastEntryLockDays === null\n ? null\n : clampNumber(value.pastEntryLockDays, 0, 3650),\n allowedScheduleItemTypes,\n rateSource: value.rateSource || defaults.rateSource,\n };\n }\n\n private normalizeGlobalWorkingHoursSnapshot(\n value: GlobalWorkingHoursSettingValue,\n ): GlobalWorkingHoursSettingValue {\n const defaults = this.getDefaultGlobalWorkingHoursValue();\n return {\n timeZoneId: value.timeZoneId || defaults.timeZoneId,\n workDayStartMinute: clampNumber(value.workDayStartMinute, 0, 1439),\n workDayEndMinute: clampNumber(value.workDayEndMinute, 1, 1440),\n workingDays: normalizeDotnetDays(value.workingDays),\n holidays: value.holidays,\n };\n }\n\n private createFallbackSetting(\n key:\n | 'Holidays'\n | 'Timezone'\n | 'Currency'\n | 'Weekend'\n | 'SMTP'\n | 'TimeSheetPolicy'\n | 'GlobalWorkingHours',\n ): SystemSetting {\n switch (key) {\n case 'Holidays':\n return { key, label: key, description: key, value: { data: [] } };\n case 'Timezone':\n return {\n key,\n label: key,\n description: key,\n value: this.getDefaultTimezoneValue(),\n };\n case 'Currency':\n return {\n key,\n label: key,\n description: key,\n value: this.getDefaultCurrencyValue(),\n };\n case 'Weekend':\n return { key, label: key, description: key, value: { days: [] } };\n case 'SMTP':\n return {\n key,\n label: key,\n description: key,\n value: this.getDefaultSmtpValue(),\n };\n case 'TimeSheetPolicy':\n return {\n key,\n label: key,\n description: key,\n value: this.getDefaultTimeSheetPolicyValue(),\n };\n case 'GlobalWorkingHours':\n return {\n key,\n label: key,\n description: key,\n value: this.getDefaultGlobalWorkingHoursValue(),\n };\n }\n }\n\n private getDefaultTimezoneValue(): TimezoneSettingValue {\n const region = this.timezones()[0] ?? null;\n const defaultDateFormat =\n this.dateFormatOptions().find((option) => option.isSelected)?.id ??\n this.dateFormatOptions()[0]?.id ??\n null;\n const defaultTimeFormat =\n this.timeFormatOptions().find((option) => option.isSelected)?.id ??\n this.timeFormatOptions()[0]?.id ??\n null;\n\n return {\n region: region\n ? {\n ...region,\n name: region.name ?? region.displayName,\n }\n : null,\n dateFormat: defaultDateFormat,\n timeFormat: defaultTimeFormat,\n };\n }\n\n private getDefaultCurrencyValue(): CurrencySettingValue {\n const currency = FIXED_CURRENCIES[0];\n return {\n name: currency.code,\n unit: currency.unit,\n format: this.buildCurrencyFormatOptions(currency)[0]?.id ?? null,\n };\n }\n\n private getDefaultSmtpValue(): SmtpSettingValue {\n return {\n mail: '',\n name: '',\n password: '',\n host: '',\n port: null,\n };\n }\n\n private getDefaultTimeSheetPolicyValue(): TimeSheetPolicySettingValue {\n return {\n weekStartDay: 0,\n generationEnabled: true,\n manualGenerationEnabled: true,\n regularDailyHours: 8,\n maxDailyHours: 24,\n allowOvertime: true,\n requireOvertimeReason: false,\n requireDescription: false,\n allowFutureEntry: true,\n pastEntryLockDays: null,\n allowedScheduleItemTypes: ['Deliverable'],\n assignedItemsOnly: false,\n allowZeroHourSubmit: true,\n costEnabled: true,\n rateSource: 'UserHourlyRate',\n };\n }\n\n private getDefaultGlobalWorkingHoursValue(): GlobalWorkingHoursSettingValue {\n return {\n timeZoneId: this.timezones()[0]?.id ?? 'UTC',\n workDayStartMinute: 480,\n workDayEndMinute: 960,\n workingDays: [0, 1, 2, 3, 4],\n holidays: [],\n };\n }\n\n private resolveCurrencyCode(value: CurrencySettingValue): string {\n const candidates = [value.name, value.unit.en, value.unit.ar].filter(\n (candidate): candidate is string => !!candidate,\n );\n\n for (const candidate of candidates) {\n const normalizedCandidate = candidate.trim().toLowerCase();\n const extractedCode =\n candidate.match(/\\(([A-Za-z]{3})\\)/)?.[1]?.toUpperCase() ?? null;\n if (extractedCode) {\n const directCodeMatch = FIXED_CURRENCIES.find(\n (item) => item.code === extractedCode,\n );\n\n if (directCodeMatch) {\n return directCodeMatch.code;\n }\n }\n\n const match = FIXED_CURRENCIES.find(\n (item) =>\n item.code.toLowerCase() === normalizedCandidate ||\n item.englishLabel.toLowerCase() === normalizedCandidate ||\n item.arabicLabel.toLowerCase() === normalizedCandidate ||\n item.unit.en.toLowerCase() === normalizedCandidate ||\n item.unit.ar.toLowerCase() === normalizedCandidate,\n );\n\n if (match) {\n return match.code;\n }\n }\n\n return FIXED_CURRENCIES[0].code;\n }\n\n private mapFormatOptions(\n options: FormatSchemaOption[],\n selectedKey: string | null,\n ): SelectOption[] {\n // Read active language so the label re-translates on language switch.\n this.activeLang();\n return options.map((option) => ({\n id: option.key,\n name: this.formatOptionLabel(option.key),\n isSelected: selectedKey ? option.key === selectedKey : option.isSelected,\n }));\n }\n\n /**\n * Builds a localized, human-readable label for a date/time format key by\n * translating each format token (e.g. `dd-MM-yyyy` → `يوم-شهر-سنة`) while\n * preserving the original separators. Unknown characters are left as-is.\n */\n private formatOptionLabel(formatKey: string): string {\n const tokenKeyByLetter: Record<string, string> = {\n y: 'format-token-year',\n M: 'format-token-month',\n d: 'format-token-day',\n H: 'format-token-hour',\n h: 'format-token-hour',\n m: 'format-token-minute',\n s: 'format-token-second',\n t: 'format-token-period',\n };\n\n return formatKey.replace(/y+|M+|d+|H+|h+|m+|s+|t+/g, (token) => {\n const translationKey = tokenKeyByLetter[token[0]];\n return translationKey\n ? this.transloco.translate(`system-settings.${translationKey}`)\n : token;\n });\n }\n\n private serializeHolidaysValue(value: HolidaysSettingValue): {\n data: Array<{ label: string; from: string; to: string }>;\n } {\n return {\n data: value.data.map((item) => ({\n label: item.label,\n from: formatDateOnly(item.from),\n to: formatDateOnly(item.to),\n })),\n };\n }\n\n private buildCurrencyFormatOptions(\n currency: CurrencyCatalogItem | undefined,\n ): SelectOption[] {\n const unitLabel = this.getCurrencyFormatLabel(currency);\n\n return [\n { id: '{0:0}', name: `1000 ${unitLabel}` },\n { id: '{0:0.0}', name: `1000.0 ${unitLabel}` },\n { id: '{0:0.00}', name: `1000.00 ${unitLabel}` },\n { id: '{0:#,0}', name: `1,000 ${unitLabel}` },\n { id: '{0:#,0.0}', name: `1,000.0 ${unitLabel}` },\n { id: '{0:#,0.00}', name: `1,000.00 ${unitLabel}` },\n { id: '{0:#,0, K}', name: `1 K ${unitLabel}` },\n { id: '{0:N3}', name: `1,000 N3 ${unitLabel}` },\n ];\n }\n\n private getCurrencyFormatLabel(\n currency: CurrencyCatalogItem | undefined,\n ): string {\n if (!currency) {\n return '';\n }\n\n return this.activeLang() === 'ar' ? currency.unit.ar : currency.unit.en;\n }\n\n private buildEndpoint(path: string): string {\n return `${this.apiBasePath().replace(/\\/$/, '')}/${path}`;\n }\n\n private applyUpdatedSettings(\n settings: SystemSetting[],\n values: UpdateSystemSettingItem[],\n ): SystemSetting[] {\n const valueMap = new Map(values.map((item) => [item.key, item.value]));\n const nextSettings: SystemSetting[] = settings.map((setting) => {\n if (!valueMap.has(setting.key)) {\n return setting;\n }\n\n return {\n ...setting,\n value: valueMap.get(setting.key)!,\n };\n });\n\n const existingKeys = new Set(nextSettings.map((setting) => setting.key));\n\n for (const item of values) {\n if (existingKeys.has(item.key)) {\n continue;\n }\n\n nextSettings.push({\n key: item.key,\n label: item.key,\n description: item.key,\n value: item.value,\n });\n }\n\n return nextSettings.sort((left, right) =>\n left.key.localeCompare(right.key),\n );\n }\n\n private areEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n}\n\nfunction isRecord(value: unknown): value is SystemSettingObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const normalizedValue = value.trim();\n return normalizedValue ? normalizedValue : null;\n}\n\nfunction getNullableString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.trim() || null;\n}\n\nfunction getNullableNumber(value: unknown): number | null {\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim()) {\n const parsedValue = Number(value);\n return Number.isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n}\n\nfunction getNumber(value: unknown): number | null {\n return getNullableNumber(value);\n}\n\nfunction getBoolean(value: unknown): boolean | null {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n const normalizedValue = value.trim().toLowerCase();\n if (normalizedValue === 'true') {\n return true;\n }\n if (normalizedValue === 'false') {\n return false;\n }\n }\n\n return null;\n}\n\nfunction getStringArray(value: unknown): string[] | null {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return value\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\n .filter(Boolean);\n}\n\nfunction getNumberArray(value: unknown): number[] | null {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return value\n .map((item) => (typeof item === 'number' ? item : Number(item)))\n .filter((item) => Number.isInteger(item));\n}\n\nfunction parsePort(value: string): number | null {\n const normalizedValue = value.trim();\n if (!normalizedValue) {\n return null;\n }\n\n const parsedValue = Number(normalizedValue);\n return Number.isNaN(parsedValue) ? null : parsedValue;\n}\n\nfunction normalizeWeekendDays(value: unknown): number[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item) => (typeof item === 'number' ? item : Number(item)))\n .filter((item) => Number.isInteger(item) && item >= 1 && item <= 7)\n .sort((left, right) => left - right);\n}\n\nfunction normalizeDotnetDays(value: unknown): number[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return Array.from(\n new Set(\n value\n .map((item) => (typeof item === 'number' ? item : Number(item)))\n .filter((item) => Number.isInteger(item) && item >= 0 && item <= 6),\n ),\n ).sort((left, right) => left - right);\n}\n\nfunction clampNumber(value: number, min: number, max: number): number {\n if (!Number.isFinite(value)) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction timeToMinutes(value: string): number {\n const [hours, minutes] = value.split(':').map((part) => Number(part));\n if (!Number.isInteger(hours) || !Number.isInteger(minutes)) {\n return 0;\n }\n\n return clampNumber(hours * 60 + minutes, 0, 1440);\n}\n\nfunction minutesToTime(value: number): string {\n const normalizedValue = clampNumber(value, 0, 1440);\n const hours = Math.floor(normalizedValue / 60);\n const minutes = normalizedValue % 60;\n\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n}\n\nfunction parseCsv(value: string): string[] {\n return value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\nfunction normalizeDateInput(value: unknown): Date | null {\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n return null;\n }\n\n return createLocalDate(\n value.getFullYear(),\n value.getMonth() + 1,\n value.getDate(),\n );\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n const normalizedValue = value.trim();\n if (!normalizedValue) {\n return null;\n }\n\n const dateOnlyMatch = normalizedValue.match(/^(\\d{4})[-/](\\d{2})[-/](\\d{2})/);\n if (dateOnlyMatch) {\n const [, year, month, day] = dateOnlyMatch;\n return createLocalDate(Number(year), Number(month), Number(day));\n }\n\n const parsedDate = new Date(normalizedValue);\n if (Number.isNaN(parsedDate.getTime())) {\n return null;\n }\n\n return createLocalDate(\n parsedDate.getFullYear(),\n parsedDate.getMonth() + 1,\n parsedDate.getDate(),\n );\n}\n\nfunction createLocalDate(year: number, month: number, day: number): Date {\n return new Date(year, month - 1, day, 12, 0, 0, 0);\n}\n\nfunction formatDateOnly(value: Date): string {\n const year = value.getFullYear();\n const month = String(value.getMonth() + 1).padStart(2, '0');\n const day = String(value.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-page\r\n [title]=\"t('page-title')\"\r\n [avatarIcon]=\"'general.settings-02'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-emerald-100)',\r\n '--p-avatar-color': 'var(--p-emerald-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\"\r\n >\r\n <div>\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n />\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [tooltip]=\"t('save-tooltip')\"\r\n [badge]=\"hasChanges() ? '!' : ''\"\r\n badgeSeverity=\"warn\"\r\n [loading]=\"updating()\"\r\n [disabled]=\"!canSaveSettings()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n\r\n @if (isLoading()) {\r\n <div class=\"space-y-4\">\r\n <p-skeleton width=\"100%\" height=\"12rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"18rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"14rem\" borderRadius=\"0.75rem\" />\r\n </div>\r\n } @else {\r\n <!--\r\n BE/HTTP errors (timezonesError, settingsError, updateError) are already\r\n surfaced as toasts by the HTTP interceptor, so they are intentionally\r\n not rendered as top-of-page banners here to avoid duplicate messaging.\r\n -->\r\n <div class=\"space-y-6\">\r\n <mt-system-settings-holidays-section\r\n [holidays]=\"holidayTableRows()\"\r\n (addHoliday)=\"openAddHoliday()\"\r\n (editHoliday)=\"editHoliday($event)\"\r\n (deleteHoliday)=\"deleteHoliday($event)\"\r\n />\r\n\r\n <mt-system-settings-general-section\r\n [timezoneForm]=\"form.controls.timezone\"\r\n [currencyForm]=\"form.controls.currency\"\r\n [weekendForm]=\"form.controls.weekend\"\r\n [timezoneOptions]=\"timezoneOptions()\"\r\n [dateFormatOptions]=\"dateFormatOptions()\"\r\n [timeFormatOptions]=\"timeFormatOptions()\"\r\n [currencyOptions]=\"currencyOptions()\"\r\n [currencyFormatOptions]=\"currencyFormatOptions()\"\r\n [weekendOptions]=\"weekendOptions()\"\r\n />\r\n\r\n <mt-system-settings-timesheet-section\r\n [policyForm]=\"form.controls.timeSheetPolicy\"\r\n [globalWorkingHoursForm]=\"form.controls.globalWorkingHours\"\r\n [dayOptions]=\"dotnetDayOptions()\"\r\n [scheduleItemTypeOptions]=\"scheduleItemTypeOptions()\"\r\n [rateSourceOptions]=\"rateSourceOptions()\"\r\n [timezoneOptions]=\"timezoneOptions()\"\r\n />\r\n\r\n <mt-system-settings-smtp-section [smtpForm]=\"form.controls.smtp\" />\r\n </div>\r\n }\r\n </div>\r\n </mt-page>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-system-settings.mjs","sources":["../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-config-section/system-settings-general-config-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-config-section/system-settings-general-config-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-timesheet-section/system-settings-timesheet-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-timesheet-section/system-settings-timesheet-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.model.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.storage.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.html","../../../../packages/masterteam/system-settings/src/masterteam-system-settings.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { RadioCardsField } from '@masterteam/components/radio-cards-field';\r\nimport type { IconSelectOption } from '../../system-settings.model';\r\n\r\n/**\r\n * \"General Configuration\" — product-wide application behaviour that is not tied\r\n * to a specific feature area. Currently holds the explore landing view; more\r\n * entries are expected to land in this card.\r\n */\r\n@Component({\r\n selector: 'mt-system-settings-general-config-section',\r\n imports: [ReactiveFormsModule, TranslocoDirective, Card, RadioCardsField],\r\n templateUrl: './system-settings-general-config-section.html',\r\n styleUrl: './system-settings-general-config-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsGeneralConfigSection {\r\n readonly generalConfigurationForm = input.required<FormGroup>();\r\n readonly exploreDefaultViewOptions = input<IconSelectOption[]>([]);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"generalConfigurationForm()\" class=\"space-y-5\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"general-configuration-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"general-configuration-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-radio-cards-field\r\n formControlName=\"defaultExploreView\"\r\n [options]=\"exploreDefaultViewOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('explore-default-view')\"\r\n [hint]=\"t('explore-default-view-hint')\"\r\n [required]=\"true\"\r\n size=\"small\"\r\n />\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport type {\r\n SelectOption,\r\n TimezoneRegionOption,\r\n WeekendDayOption,\r\n} from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-general-section',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Card,\r\n SelectField,\r\n MultiSelectField,\r\n ],\r\n templateUrl: './system-settings-general-section.html',\r\n styleUrl: './system-settings-general-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsGeneralSection {\r\n readonly timezoneForm = input.required<FormGroup>();\r\n readonly currencyForm = input.required<FormGroup>();\r\n readonly weekendForm = input.required<FormGroup>();\r\n readonly timezoneOptions = input<TimezoneRegionOption[]>([]);\r\n readonly dateFormatOptions = input<SelectOption[]>([]);\r\n readonly timeFormatOptions = input<SelectOption[]>([]);\r\n readonly currencyOptions = input<SelectOption[]>([]);\r\n readonly currencyFormatOptions = input<SelectOption[]>([]);\r\n readonly weekendOptions = input<WeekendDayOption[]>([]);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div class=\"grid gap-6 xl:grid-cols-3\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"timezoneForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"timezone-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"timezone-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"regionId\"\r\n [options]=\"timezoneOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('timezone')\"\r\n [placeholder]=\"t('timezone-placeholder')\"\r\n [required]=\"true\"\r\n [filter]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"dateFormat\"\r\n [options]=\"dateFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('date-format')\"\r\n [placeholder]=\"t('date-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"timeFormat\"\r\n [options]=\"timeFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('time-format')\"\r\n [placeholder]=\"t('time-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"currencyForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"currency-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"currency-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"code\"\r\n [options]=\"currencyOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency')\"\r\n [placeholder]=\"t('currency-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"format\"\r\n [options]=\"currencyFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency-format')\"\r\n [placeholder]=\"t('currency-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"weekendForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"weekend-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"weekend-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-multi-select-field\r\n formControlName=\"days\"\r\n [options]=\"weekendOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('weekend-days')\"\r\n [placeholder]=\"t('weekend-placeholder')\"\r\n [display]=\"'chip'\"\r\n [filter]=\"false\"\r\n [showClear]=\"true\"\r\n [maxSelectedLabels]=\"3\"\r\n />\r\n </div>\r\n </mt-card>\r\n </div>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport type { DatePicker } from 'primeng/datepicker';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { HolidayItem } from '../../system-settings.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\n\r\ntype HolidayEditorForm = FormGroup<{\r\n label: FormControl<string>;\r\n from: FormControl<Date | null>;\r\n to: FormControl<Date | null>;\r\n}>;\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holiday-editor',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n DateField,\r\n TextField,\r\n ],\r\n templateUrl: './system-settings-holiday-editor.html',\r\n styleUrl: './system-settings-holiday-editor.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidayEditor {\r\n private readonly ref = inject(ModalRef);\r\n modal = inject(ModalService);\r\n\r\n readonly holiday = input<HolidayItem | null>(null);\r\n readonly isEditMode = input(false);\r\n\r\n readonly form: HolidayEditorForm = new FormGroup(\r\n {\r\n label: new FormControl('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n from: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n to: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n },\r\n {\r\n validators: [holidayRangeValidator()],\r\n },\r\n );\r\n\r\n readonly actionLabel = computed(() =>\r\n this.isEditMode() ? 'update-holiday' : 'add-holiday',\r\n );\r\n\r\n private readonly fromValue = toSignal(this.form.controls.from.valueChanges, {\r\n initialValue: this.form.controls.from.value,\r\n });\r\n\r\n readonly toPickerInputs = computed<Partial<DatePicker>>(() => {\r\n const from = this.fromValue();\r\n return from instanceof Date ? { minDate: from } : {};\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const holiday = this.holiday();\r\n this.form.reset(\r\n {\r\n label: holiday?.label ?? '',\r\n from: holiday?.from ?? null,\r\n to: holiday?.to ?? null,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n });\r\n }\r\n\r\n onSave(): void {\r\n this.form.markAllAsTouched();\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n const value = this.form.getRawValue();\r\n if (!(value.from instanceof Date) || !(value.to instanceof Date)) {\r\n return;\r\n }\r\n\r\n this.ref.close({\r\n label: value.label.trim(),\r\n from: value.from,\r\n to: value.to,\r\n } satisfies HolidayItem);\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n\r\nfunction holidayRangeValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const from = control.get('from')?.value;\r\n const to = control.get('to')?.value;\r\n\r\n if (!from || !to) {\r\n return null;\r\n }\r\n\r\n return from <= to ? null : { invalidRange: true };\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (ngSubmit)=\"onSave()\">\r\n <mt-text-field\r\n formControlName=\"label\"\r\n [label]=\"t('holiday-name')\"\r\n [placeholder]=\"t('holiday-name-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <div class=\"grid gap-1\">\r\n <mt-date-field\r\n formControlName=\"from\"\r\n [label]=\"t('from-date')\"\r\n [placeholder]=\"t('from-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n\r\n <div class=\"grid gap-1\">\r\n <mt-date-field\r\n formControlName=\"to\"\r\n [label]=\"t('to-date')\"\r\n [placeholder]=\"t('to-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n [pInputs]=\"toPickerInputs()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (form.errors?.[\"invalidRange\"] && (form.dirty || form.touched)) {\r\n <div class=\"text-sm text-red-600\">\r\n {{ t(\"holiday-range-error\") }}\r\n </div>\r\n }\r\n </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"button\" (onClick)=\"onSave()\" />\r\n </div>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport type { HolidayTableRow } from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holidays-section',\r\n imports: [TranslocoDirective, Button, Card, Table],\r\n templateUrl: './system-settings-holidays-section.html',\r\n styleUrl: './system-settings-holidays-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidaysSection {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly holidays = input<HolidayTableRow[]>([]);\r\n readonly addHoliday = output<void>();\r\n readonly editHoliday = output<number>();\r\n readonly deleteHoliday = output<number>();\r\n\r\n readonly columns = computed<ColumnDef[]>(() => [\r\n {\r\n key: 'label',\r\n label: this.transloco.translate('system-settings.holiday-name'),\r\n },\r\n {\r\n key: 'from',\r\n label: this.transloco.translate('system-settings.from-date'),\r\n },\r\n {\r\n key: 'to',\r\n label: this.transloco.translate('system-settings.to-date'),\r\n },\r\n ]);\r\n\r\n readonly rowActions = computed<TableAction[]>(() => [\r\n {\r\n icon: 'general.edit-01',\r\n tooltip: this.transloco.translate('system-settings.edit-holiday'),\r\n color: 'secondary',\r\n variant: 'outlined',\r\n action: (row) => this.editHoliday.emit(row.rowIndex as number),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('system-settings.remove-holiday'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteHoliday.emit(row.rowIndex as number),\r\n },\r\n ]);\r\n\r\n readonly hasHolidays = computed(() => this.holidays().length > 0);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div class=\"space-y-6\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\"\r\n >\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"holidays-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"holidays-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('add-holiday')\"\r\n icon=\"general.plus\"\r\n (onClick)=\"addHoliday.emit()\"\r\n />\r\n </div>\r\n\r\n @if (hasHolidays()) {\r\n <mt-table\r\n noCard\r\n [data]=\"holidays()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [dataKey]=\"'rowKey'\"\r\n storageKey=\"admin-system-settings-holidays-table\"\r\n >\r\n </mt-table>\r\n } @else {\r\n <div\r\n class=\"rounded-xl border border-dashed border-neutral-300 bg-neutral-50 px-6 py-10 text-center\"\r\n >\r\n <h5 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"no-holidays-title\") }}\r\n </h5>\r\n <p class=\"mt-2 text-sm text-neutral-600\">\r\n {{ t(\"no-holidays-description\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-smtp-section',\r\n imports: [ReactiveFormsModule, TranslocoDirective, Card, TextField],\r\n templateUrl: './system-settings-smtp-section.html',\r\n styleUrl: './system-settings-smtp-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsSmtpSection {\r\n readonly smtpForm = input.required<FormGroup>();\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"smtpForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"smtp-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"smtp-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-text-field\r\n formControlName=\"mail\"\r\n [label]=\"t('smtp-mail')\"\r\n [placeholder]=\"t('smtp-mail-placeholder')\"\r\n type=\"email\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"name\"\r\n [label]=\"t('smtp-name')\"\r\n [placeholder]=\"t('smtp-name-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"host\"\r\n [label]=\"t('smtp-host')\"\r\n [placeholder]=\"t('smtp-host-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"port\"\r\n [label]=\"t('smtp-port')\"\r\n [placeholder]=\"t('smtp-port-placeholder')\"\r\n type=\"number\"\r\n />\r\n\r\n <div class=\"md:col-span-2\">\r\n <mt-text-field\r\n formControlName=\"password\"\r\n [label]=\"t('smtp-password')\"\r\n [placeholder]=\"t('smtp-password-placeholder')\"\r\n type=\"password\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { NumberField } from '@masterteam/components/number-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport type {\r\n SelectOption,\r\n TimezoneRegionOption,\r\n WeekendDayOption,\r\n} from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-timesheet-section',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Card,\r\n MultiSelectField,\r\n NumberField,\r\n SelectField,\r\n TextareaField,\r\n ToggleField,\r\n ],\r\n templateUrl: './system-settings-timesheet-section.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsTimeSheetSection {\r\n readonly policyForm = input.required<FormGroup>();\r\n readonly globalWorkingHoursForm = input.required<FormGroup>();\r\n readonly dayOptions = input<WeekendDayOption[]>([]);\r\n readonly frequencyOptions = input<SelectOption[]>([]);\r\n readonly timezoneOptions = input<TimezoneRegionOption[]>([]);\r\n readonly maxDailyBelowDaily = input<boolean>(false);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div class=\"grid gap-6 xl:grid-cols-2 mb-6\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"policyForm()\" class=\"space-y-5\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"general-card-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"general-card-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"frequency\"\r\n [options]=\"frequencyOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('frequency')\"\r\n [placeholder]=\"t('frequency-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-number-field\r\n formControlName=\"maxDailyHours\"\r\n [label]=\"t('max-daily-hours')\"\r\n [placeholder]=\"t('max-daily-hours-placeholder')\"\r\n [min]=\"1\"\r\n [max]=\"24\"\r\n [required]=\"true\"\r\n [hint]=\"maxDailyBelowDaily() ? t('max-daily-below-daily') : ''\"\r\n />\r\n\r\n <mt-number-field\r\n formControlName=\"submissionDeadlineDays\"\r\n [label]=\"t('submission-deadline-days')\"\r\n [placeholder]=\"t('submission-deadline-days-placeholder')\"\r\n [min]=\"0\"\r\n [max]=\"90\"\r\n [required]=\"true\"\r\n [hint]=\"t('submission-deadline-hint')\"\r\n />\r\n </div>\r\n\r\n <div class=\"grid gap-3 md:grid-cols-2\">\r\n <mt-toggle-field\r\n formControlName=\"requireDescription\"\r\n [label]=\"t('require-description')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"allowFutureEntry\"\r\n [label]=\"t('allow-future-entry')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"allowBackdatedEntry\"\r\n [label]=\"t('allow-backdated-entry')\"\r\n />\r\n <mt-toggle-field\r\n formControlName=\"autoLockOnApprove\"\r\n [label]=\"t('auto-lock-on-approve')\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"globalWorkingHoursForm()\" class=\"space-y-5\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"working-hours-card-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"working-hours-card-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"timeZoneId\"\r\n [options]=\"timezoneOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('global-timezone')\"\r\n [placeholder]=\"t('global-timezone-placeholder')\"\r\n [filter]=\"true\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-multi-select-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"workingDays\"\r\n [options]=\"dayOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('working-days')\"\r\n [placeholder]=\"t('working-days-placeholder')\"\r\n [display]=\"'chip'\"\r\n [required]=\"true\"\r\n [showClear]=\"true\"\r\n />\r\n\r\n <mt-number-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"hoursPerDay\"\r\n [label]=\"t('daily-working-hours')\"\r\n [placeholder]=\"t('daily-working-hours-placeholder')\"\r\n [min]=\"0\"\r\n [max]=\"24\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-textarea-field\r\n class=\"md:col-span-2\"\r\n formControlName=\"holidaysCsv\"\r\n [label]=\"t('global-holidays')\"\r\n [placeholder]=\"t('global-holidays-placeholder')\"\r\n rows=\"3\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n </div>\r\n</ng-container>\r\n","import { FormControl, FormGroup } from '@angular/forms';\r\n\r\nexport type SystemSettingPrimitive = string | number | boolean | null;\r\nexport type SystemSettingObject = Record<string, unknown>;\r\nexport type SystemSettingValue =\r\n | SystemSettingPrimitive\r\n | SystemSettingObject\r\n | unknown[];\r\n\r\nexport interface SystemSetting {\r\n key: string;\r\n label: string;\r\n description: string;\r\n value: SystemSettingValue;\r\n}\r\n\r\nexport interface UpdateSystemSettingItem<TValue = SystemSettingValue> {\r\n key: string;\r\n value: TValue;\r\n}\r\n\r\nexport interface ApiResponse<TData> {\r\n data: TData;\r\n message?: string | null;\r\n endpoint?: string;\r\n status?: number;\r\n code?: number;\r\n locale?: string;\r\n cacheSession?: string | null;\r\n}\r\n\r\nexport interface FormatSchemaOption {\r\n key: string;\r\n sample: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface SystemSettingsFormatSchema {\r\n dateFormats: FormatSchemaOption[];\r\n timeFormats: FormatSchemaOption[];\r\n}\r\n\r\nexport interface HolidayItem {\r\n label: string;\r\n from: Date;\r\n to: Date;\r\n}\r\n\r\nexport interface HolidaysSettingValue extends SystemSettingObject {\r\n data: HolidayItem[];\r\n}\r\n\r\nexport interface TimezoneRegionOption extends SystemSettingObject {\r\n id: string;\r\n baseUtcOffset: string;\r\n standardName: string;\r\n displayName: string;\r\n daylightName: string;\r\n name?: string;\r\n}\r\n\r\nexport interface TimezoneSettingValue extends SystemSettingObject {\r\n region: TimezoneRegionOption | null;\r\n dateFormat: string | null;\r\n timeFormat: string | null;\r\n}\r\n\r\nexport interface CurrencyUnitLabel extends SystemSettingObject {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface CurrencySettingValue extends SystemSettingObject {\r\n name: string;\r\n unit: CurrencyUnitLabel;\r\n format: string | null;\r\n}\r\n\r\nexport interface WeekendSettingValue extends SystemSettingObject {\r\n days: number[];\r\n}\r\n\r\nexport interface SmtpSettingValue extends SystemSettingObject {\r\n mail: string;\r\n name: string;\r\n password: string;\r\n host: string;\r\n port: number | null;\r\n}\r\n\r\n/** The landing view the app-client explore page opens with. */\r\nexport type ExploreDefaultView = 'cards' | 'timeline';\r\n\r\n/**\r\n * General Configuration is persisted **inside the existing `Identity` record**\r\n * (the same record `@masterteam/brand-display` owns), not under a key of its own.\r\n * It is therefore a *slice* of `Identity`: reads pick these fields out, and saves\r\n * must spread the untouched `Identity` value around them so no branding data is\r\n * lost. See `GENERAL_CONFIGURATION_SETTING_KEY`.\r\n */\r\nexport interface GeneralConfigurationSettingValue extends SystemSettingObject {\r\n defaultExploreView: ExploreDefaultView;\r\n}\r\n\r\n/** The settings record General Configuration fields live in. */\r\nexport const GENERAL_CONFIGURATION_SETTING_KEY = 'Identity';\r\n\r\nexport type TimeSheetFrequency = 'Daily' | 'Weekly' | 'BiWeekly' | 'Monthly';\r\n\r\nexport interface TimeSheetPolicySettingValue extends SystemSettingObject {\r\n frequency: TimeSheetFrequency;\r\n maxDailyHours: number;\r\n requireDescription: boolean;\r\n allowFutureEntry: boolean;\r\n allowBackdatedEntry: boolean;\r\n autoLockOnApprove: boolean;\r\n submissionDeadlineDays: number;\r\n}\r\n\r\nexport interface GlobalWorkingHoursSettingValue extends SystemSettingObject {\r\n timeZoneId: string;\r\n workingDays: number[];\r\n hoursPerDay: number;\r\n holidays: string[];\r\n}\r\n\r\nexport interface CurrencyCatalogItem {\r\n code: string;\r\n englishLabel: string;\r\n arabicLabel: string;\r\n unit: CurrencyUnitLabel;\r\n}\r\n\r\nexport interface SelectOption {\r\n id: string;\r\n name: string;\r\n isSelected?: boolean;\r\n}\r\n\r\nexport interface WeekendDayOption extends SelectOption {\r\n dayNumber: number;\r\n}\r\n\r\n/** A `SelectOption` rendered as a radio card, so it carries its own icon. */\r\nexport interface IconSelectOption extends SelectOption {\r\n icon: string;\r\n}\r\n\r\nexport interface ScheduleItemTypeOption extends SelectOption {\r\n itemType: string;\r\n}\r\n\r\nexport interface HolidayTableRow {\r\n rowKey: string;\r\n rowIndex: number;\r\n label: string;\r\n from: string;\r\n to: string;\r\n}\r\n\r\nexport interface SystemSettingsSnapshot {\r\n generalConfiguration: GeneralConfigurationSettingValue;\r\n holidays: HolidaysSettingValue;\r\n timezone: TimezoneSettingValue;\r\n currency: CurrencySettingValue;\r\n weekend: WeekendSettingValue;\r\n smtp: SmtpSettingValue;\r\n timeSheetPolicy: TimeSheetPolicySettingValue;\r\n globalWorkingHours: GlobalWorkingHoursSettingValue;\r\n}\r\n\r\nexport type SystemSettingsForm = FormGroup<{\r\n generalConfiguration: FormGroup<{\r\n defaultExploreView: FormControl<ExploreDefaultView>;\r\n }>;\r\n timezone: FormGroup<{\r\n regionId: FormControl<string | null>;\r\n dateFormat: FormControl<string | null>;\r\n timeFormat: FormControl<string | null>;\r\n }>;\r\n currency: FormGroup<{\r\n code: FormControl<string | null>;\r\n format: FormControl<string | null>;\r\n }>;\r\n weekend: FormGroup<{\r\n days: FormControl<number[]>;\r\n }>;\r\n smtp: FormGroup<{\r\n mail: FormControl<string>;\r\n name: FormControl<string>;\r\n password: FormControl<string>;\r\n host: FormControl<string>;\r\n port: FormControl<string>;\r\n }>;\r\n timeSheetPolicy: FormGroup<{\r\n frequency: FormControl<TimeSheetFrequency | null>;\r\n maxDailyHours: FormControl<number | null>;\r\n requireDescription: FormControl<boolean>;\r\n allowFutureEntry: FormControl<boolean>;\r\n allowBackdatedEntry: FormControl<boolean>;\r\n autoLockOnApprove: FormControl<boolean>;\r\n submissionDeadlineDays: FormControl<number | null>;\r\n }>;\r\n globalWorkingHours: FormGroup<{\r\n timeZoneId: FormControl<string | null>;\r\n workingDays: FormControl<number[]>;\r\n hoursPerDay: FormControl<number | null>;\r\n holidaysCsv: FormControl<string>;\r\n }>;\r\n}>;\r\n\r\nexport const FIXED_CURRENCIES: CurrencyCatalogItem[] = [\r\n {\r\n code: 'SAR',\r\n englishLabel: 'Saudi Riyal (SAR)',\r\n arabicLabel: 'ريال سعودي (SAR)',\r\n unit: {\r\n en: 'SAR',\r\n ar: 'ريال سعودي',\r\n },\r\n },\r\n {\r\n code: 'OMR',\r\n englishLabel: 'Omani Rial (OMR)',\r\n arabicLabel: 'ريال عماني (OMR)',\r\n unit: {\r\n en: 'OMR',\r\n ar: 'ريال عماني',\r\n },\r\n },\r\n {\r\n code: 'AED',\r\n englishLabel: 'UAE Dirham (AED)',\r\n arabicLabel: 'درهم إماراتي (AED)',\r\n unit: {\r\n en: 'AED',\r\n ar: 'درهم إماراتي',\r\n },\r\n },\r\n];\r\n\r\n/**\r\n * Explore landing views, mirroring the app-client explore header switcher\r\n * (same icons) so the configured default reads as the same choice.\r\n */\r\nexport const EXPLORE_DEFAULT_VIEW_OPTIONS = [\r\n {\r\n id: 'cards',\r\n translationKey: 'explore-default-view-cards',\r\n icon: 'layout.grid-01',\r\n },\r\n {\r\n id: 'timeline',\r\n translationKey: 'explore-default-view-timeline',\r\n icon: 'time.clock',\r\n },\r\n] as const;\r\n\r\nexport const DEFAULT_GENERAL_CONFIGURATION: GeneralConfigurationSettingValue = {\r\n defaultExploreView: 'cards',\r\n};\r\n\r\nexport const DEFAULT_DATE_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'MM/dd/yyyy',\r\n sample: 'MM/dd/yyyy [01/20/2023]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'yyyy/MM/dd',\r\n sample: 'yyyy/MM/dd [2023/01/20]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'dd-MM-yyyy',\r\n sample: 'dd-MM-yyyy [20-01-2023]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'yyyy-MM-dd',\r\n sample: 'yyyy-MM-dd [2023-01-20]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const DEFAULT_TIME_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'hh:mm tt',\r\n sample: 'hh:mm tt [03:00 PM]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'HH:mm',\r\n sample: 'HH:mm [15:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'H:mm:ss',\r\n sample: 'H:mm:ss [15:00:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'hh:mm:ss',\r\n sample: 'hh:mm:ss [03:00:00]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const WEEKEND_DAY_DEFINITIONS = [\r\n { dayNumber: 1, translationKey: 'monday' },\r\n { dayNumber: 2, translationKey: 'tuesday' },\r\n { dayNumber: 3, translationKey: 'wednesday' },\r\n { dayNumber: 4, translationKey: 'thursday' },\r\n { dayNumber: 5, translationKey: 'friday' },\r\n { dayNumber: 6, translationKey: 'saturday' },\r\n { dayNumber: 7, translationKey: 'sunday' },\r\n] as const;\r\n\r\nexport const DOTNET_DAY_DEFINITIONS = [\r\n { dayNumber: 0, translationKey: 'sunday' },\r\n { dayNumber: 1, translationKey: 'monday' },\r\n { dayNumber: 2, translationKey: 'tuesday' },\r\n { dayNumber: 3, translationKey: 'wednesday' },\r\n { dayNumber: 4, translationKey: 'thursday' },\r\n { dayNumber: 5, translationKey: 'friday' },\r\n { dayNumber: 6, translationKey: 'saturday' },\r\n] as const;\r\n\r\nexport const TIMESHEET_FREQUENCY_OPTIONS = [\r\n { id: 'Daily', translationKey: 'frequency-daily' },\r\n { id: 'Weekly', translationKey: 'frequency-weekly' },\r\n { id: 'BiWeekly', translationKey: 'frequency-biweekly' },\r\n { id: 'Monthly', translationKey: 'frequency-monthly' },\r\n] as const;\r\n\r\nexport const SCHEDULE_ITEM_TYPE_OPTIONS = [\r\n { itemType: 'Task', translationKey: 'schedule-item-task' },\r\n { itemType: 'Milestone', translationKey: 'schedule-item-milestone' },\r\n { itemType: 'Deliverable', translationKey: 'schedule-item-deliverable' },\r\n] as const;\r\n\r\nexport const RATE_SOURCE_OPTIONS = [\r\n { id: 'UserHourlyRate', translationKey: 'rate-source-user-hourly-rate' },\r\n { id: 'None', translationKey: 'rate-source-none' },\r\n] as const;\r\n","import type { SystemSetting } from './system-settings.model';\r\n\r\nexport const SYSTEM_SETTINGS_STORAGE_KEY = 'systemSettings.settings';\r\n\r\nexport interface SystemSettingsStorage {\r\n setItem(key: string, value: string): void;\r\n}\r\n\r\nexport function serializeSystemSettings(\r\n settings: readonly SystemSetting[],\r\n): string {\r\n return JSON.stringify(settings);\r\n}\r\n\r\n/**\r\n * Persists the canonical settings array consumed by host-level formatters.\r\n * Storage failures must not turn a successful API request into a UI failure.\r\n */\r\nexport function synchronizeSystemSettingsStorage(\r\n storage: SystemSettingsStorage | null,\r\n settings: readonly SystemSetting[],\r\n): boolean {\r\n if (!storage) {\r\n return false;\r\n }\r\n\r\n try {\r\n storage.setItem(\r\n SYSTEM_SETTINGS_STORAGE_KEY,\r\n serializeSystemSettings(settings),\r\n );\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function resolveBrowserLocalStorage(): SystemSettingsStorage | null {\r\n try {\r\n return globalThis.localStorage ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { SystemSettingsGeneralConfigSection } from './components/system-settings-general-config-section/system-settings-general-config-section';\r\nimport { SystemSettingsGeneralSection } from './components/system-settings-general-section/system-settings-general-section';\r\nimport { SystemSettingsHolidayEditor } from './components/system-settings-holiday-editor/system-settings-holiday-editor';\r\nimport { SystemSettingsHolidaysSection } from './components/system-settings-holidays-section/system-settings-holidays-section';\r\nimport { SystemSettingsSmtpSection } from './components/system-settings-smtp-section/system-settings-smtp-section';\r\nimport { SystemSettingsTimeSheetSection } from './components/system-settings-timesheet-section/system-settings-timesheet-section';\r\nimport type {\r\n ApiResponse,\r\n CurrencyCatalogItem,\r\n CurrencySettingValue,\r\n ExploreDefaultView,\r\n FormatSchemaOption,\r\n GeneralConfigurationSettingValue,\r\n GlobalWorkingHoursSettingValue,\r\n HolidayItem,\r\n HolidayTableRow,\r\n HolidaysSettingValue,\r\n IconSelectOption,\r\n SelectOption,\r\n SmtpSettingValue,\r\n SystemSetting,\r\n SystemSettingObject,\r\n SystemSettingsForm,\r\n SystemSettingsFormatSchema,\r\n SystemSettingsSnapshot,\r\n TimeSheetFrequency,\r\n TimeSheetPolicySettingValue,\r\n TimezoneRegionOption,\r\n TimezoneSettingValue,\r\n UpdateSystemSettingItem,\r\n WeekendDayOption,\r\n WeekendSettingValue,\r\n} from './system-settings.model';\r\nimport {\r\n DEFAULT_DATE_FORMAT_OPTIONS,\r\n DEFAULT_GENERAL_CONFIGURATION,\r\n DEFAULT_TIME_FORMAT_OPTIONS,\r\n DOTNET_DAY_DEFINITIONS,\r\n EXPLORE_DEFAULT_VIEW_OPTIONS,\r\n FIXED_CURRENCIES,\r\n GENERAL_CONFIGURATION_SETTING_KEY,\r\n TIMESHEET_FREQUENCY_OPTIONS,\r\n WEEKEND_DAY_DEFINITIONS,\r\n} from './system-settings.model';\r\nimport {\r\n resolveBrowserLocalStorage,\r\n synchronizeSystemSettingsStorage,\r\n} from './system-settings.storage';\r\n\r\n@Component({\r\n selector: 'mt-system-settings',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Page,\r\n Button,\r\n Breadcrumb,\r\n SkeletonModule,\r\n SystemSettingsHolidaysSection,\r\n SystemSettingsGeneralConfigSection,\r\n SystemSettingsGeneralSection,\r\n SystemSettingsSmtpSection,\r\n SystemSettingsTimeSheetSection,\r\n ],\r\n templateUrl: './system-settings.html',\r\n styleUrl: './system-settings.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class SystemSettings implements OnInit {\r\n private readonly http = inject(HttpClient);\r\n private readonly router = inject(Router);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly toast = inject(ToastService);\r\n\r\n readonly apiBasePath = input('settings');\r\n readonly backRoute = input<string | null>('/control-panel/product-settings');\r\n readonly formatSchema = input<SystemSettingsFormatSchema | null>(null);\r\n\r\n readonly breadcrumbItems: {\r\n label?: string;\r\n routerLink?: string;\r\n icon?: string;\r\n }[] = [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.transloco.translate('product-settings.product-settings'),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n {\r\n label: this.transloco.translate('system-settings.page-title'),\r\n },\r\n ];\r\n\r\n readonly form: SystemSettingsForm = new FormGroup(\r\n {\r\n generalConfiguration: new FormGroup({\r\n defaultExploreView: new FormControl<ExploreDefaultView>('cards', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n }),\r\n timezone: new FormGroup({\r\n regionId: new FormControl<string | null>(null, Validators.required),\r\n dateFormat: new FormControl<string | null>(null, Validators.required),\r\n timeFormat: new FormControl<string | null>(null, Validators.required),\r\n }),\r\n currency: new FormGroup({\r\n code: new FormControl<string | null>(null, Validators.required),\r\n format: new FormControl<string | null>(null, Validators.required),\r\n }),\r\n weekend: new FormGroup({\r\n days: new FormControl<number[]>([], { nonNullable: true }),\r\n }),\r\n smtp: new FormGroup({\r\n mail: new FormControl('', { nonNullable: true }),\r\n name: new FormControl('', { nonNullable: true }),\r\n password: new FormControl('', { nonNullable: true }),\r\n host: new FormControl('', { nonNullable: true }),\r\n port: new FormControl('', { nonNullable: true }),\r\n }),\r\n timeSheetPolicy: new FormGroup({\r\n frequency: new FormControl<TimeSheetFrequency | null>(\r\n 'Weekly',\r\n Validators.required,\r\n ),\r\n maxDailyHours: new FormControl<number | null>(24, [\r\n Validators.required,\r\n Validators.min(1),\r\n Validators.max(24),\r\n ]),\r\n requireDescription: new FormControl(false, { nonNullable: true }),\r\n allowFutureEntry: new FormControl(false, { nonNullable: true }),\r\n allowBackdatedEntry: new FormControl(true, { nonNullable: true }),\r\n autoLockOnApprove: new FormControl(true, { nonNullable: true }),\r\n submissionDeadlineDays: new FormControl<number | null>(3, [\r\n Validators.required,\r\n Validators.min(0),\r\n Validators.max(90),\r\n ]),\r\n }),\r\n globalWorkingHours: new FormGroup({\r\n timeZoneId: new FormControl<string | null>(null, Validators.required),\r\n workingDays: new FormControl<number[]>([0, 1, 2, 3, 4], {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n hoursPerDay: new FormControl<number | null>(8, [\r\n Validators.required,\r\n Validators.min(0),\r\n Validators.max(24),\r\n ]),\r\n holidaysCsv: new FormControl('', { nonNullable: true }),\r\n }),\r\n },\r\n maxDailyHoursGteHoursPerDay,\r\n );\r\n\r\n readonly settings = signal<SystemSetting[] | null>(null);\r\n readonly settingsLoading = signal(false);\r\n readonly settingsError = signal<string | null>(null);\r\n readonly settingsLastUpdated = signal<string | null>(null);\r\n readonly updating = signal(false);\r\n readonly updateError = signal<string | null>(null);\r\n readonly timezones = signal<TimezoneRegionOption[]>([]);\r\n readonly timezonesLoading = signal(false);\r\n readonly timezonesError = signal<string | null>(null);\r\n readonly holidayItems = signal<HolidayItem[]>([]);\r\n readonly initialSnapshot = signal<SystemSettingsSnapshot | null>(null);\r\n readonly hydrationVersion = signal<string | null>(null);\r\n\r\n readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n readonly formStatus = toSignal(this.form.statusChanges, {\r\n initialValue: this.form.status,\r\n });\r\n readonly selectedDateFormat = toSignal(\r\n this.form.controls.timezone.controls.dateFormat.valueChanges,\r\n {\r\n initialValue: this.form.controls.timezone.controls.dateFormat.value,\r\n },\r\n );\r\n readonly selectedTimeFormat = toSignal(\r\n this.form.controls.timezone.controls.timeFormat.valueChanges,\r\n {\r\n initialValue: this.form.controls.timezone.controls.timeFormat.value,\r\n },\r\n );\r\n readonly selectedCurrencyCode = toSignal(\r\n this.form.controls.currency.controls.code.valueChanges,\r\n {\r\n initialValue: this.form.controls.currency.controls.code.value,\r\n },\r\n );\r\n readonly formValue = toSignal(this.form.valueChanges, {\r\n initialValue: this.form.getRawValue(),\r\n });\r\n\r\n /**\r\n * The `Identity` record. It is shared with `@masterteam/brand-display`, which\r\n * owns every other field in it — we only read/write the General Configuration\r\n * slice and must preserve the rest verbatim.\r\n */\r\n readonly generalConfigurationSetting = computed(() =>\r\n this.findSettingByKey(GENERAL_CONFIGURATION_SETTING_KEY),\r\n );\r\n readonly holidaysSetting = computed(() => this.findSettingByKey('Holidays'));\r\n readonly timezoneSetting = computed(() => this.findSettingByKey('Timezone'));\r\n readonly currencySetting = computed(() => this.findSettingByKey('Currency'));\r\n readonly weekendSetting = computed(() => this.findSettingByKey('Weekend'));\r\n readonly smtpSetting = computed(() => this.findSettingByKey('SMTP'));\r\n readonly timeSheetPolicySetting = computed(() =>\r\n this.findSettingByKey('TimeSheetPolicy'),\r\n );\r\n readonly globalWorkingHoursSetting = computed(() =>\r\n this.findSettingByKey('GlobalWorkingHours'),\r\n );\r\n\r\n readonly resolvedFormatSchema = computed<SystemSettingsFormatSchema>(() => {\r\n const schema = this.formatSchema();\r\n return {\r\n dateFormats: schema?.dateFormats ?? DEFAULT_DATE_FORMAT_OPTIONS,\r\n timeFormats: schema?.timeFormats ?? DEFAULT_TIME_FORMAT_OPTIONS,\r\n };\r\n });\r\n\r\n readonly timezoneOptions = computed(() =>\r\n this.timezones().map((timezone) => ({\r\n ...timezone,\r\n name: timezone.name ?? timezone.displayName,\r\n })),\r\n );\r\n\r\n readonly dateFormatOptions = computed(() =>\r\n this.mapFormatOptions(\r\n this.resolvedFormatSchema().dateFormats,\r\n this.selectedDateFormat(),\r\n ),\r\n );\r\n\r\n readonly timeFormatOptions = computed(() =>\r\n this.mapFormatOptions(\r\n this.resolvedFormatSchema().timeFormats,\r\n this.selectedTimeFormat(),\r\n ),\r\n );\r\n\r\n readonly currencyOptions = computed<SelectOption[]>(() => {\r\n const lang = this.activeLang();\r\n return FIXED_CURRENCIES.map((currency) => ({\r\n id: currency.code,\r\n name: lang === 'ar' ? currency.arabicLabel : currency.englishLabel,\r\n }));\r\n });\r\n\r\n readonly currencyFormatOptions = computed(() => {\r\n const currency = FIXED_CURRENCIES.find(\r\n (item) => item.code === this.selectedCurrencyCode(),\r\n );\r\n\r\n return this.buildCurrencyFormatOptions(currency);\r\n });\r\n\r\n readonly weekendOptions = computed<WeekendDayOption[]>(() => {\r\n this.activeLang();\r\n\r\n return WEEKEND_DAY_DEFINITIONS.map((day) => ({\r\n id: `${day.dayNumber}`,\r\n dayNumber: day.dayNumber,\r\n name: this.transloco.translate(`system-settings.${day.translationKey}`),\r\n }));\r\n });\r\n\r\n readonly dotnetDayOptions = computed<WeekendDayOption[]>(() => {\r\n this.activeLang();\r\n\r\n return DOTNET_DAY_DEFINITIONS.map((day) => ({\r\n id: `${day.dayNumber}`,\r\n dayNumber: day.dayNumber,\r\n name: this.transloco.translate(`system-settings.${day.translationKey}`),\r\n }));\r\n });\r\n\r\n readonly exploreDefaultViewOptions = computed<IconSelectOption[]>(() => {\r\n this.activeLang();\r\n\r\n return EXPLORE_DEFAULT_VIEW_OPTIONS.map((option) => ({\r\n id: option.id,\r\n name: this.transloco.translate(\r\n `system-settings.${option.translationKey}`,\r\n ),\r\n icon: option.icon,\r\n }));\r\n });\r\n\r\n readonly frequencyOptions = computed<SelectOption[]>(() => {\r\n this.activeLang();\r\n\r\n return TIMESHEET_FREQUENCY_OPTIONS.map((item) => ({\r\n id: item.id,\r\n name: this.transloco.translate(`system-settings.${item.translationKey}`),\r\n }));\r\n });\r\n\r\n readonly isReady = computed(\r\n () => this.hydrationVersion() !== null && this.initialSnapshot() !== null,\r\n );\r\n\r\n readonly isLoading = computed(\r\n () => this.settingsLoading() || this.timezonesLoading() || !this.isReady(),\r\n );\r\n\r\n readonly hasChanges = computed(() => {\r\n this.formValue();\r\n this.holidayItems();\r\n\r\n const initial = this.initialSnapshot();\r\n if (!initial) {\r\n return false;\r\n }\r\n\r\n const current = this.buildCurrentSnapshot();\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n return (\r\n !this.areEqual(\r\n initial.generalConfiguration,\r\n current.generalConfiguration,\r\n ) ||\r\n !this.areEqual(initial.holidays, current.holidays) ||\r\n !this.areEqual(initial.timezone, current.timezone) ||\r\n !this.areEqual(initial.currency, current.currency) ||\r\n !this.areEqual(initial.weekend, current.weekend) ||\r\n !this.areEqual(initial.smtp, current.smtp) ||\r\n !this.areEqual(initial.timeSheetPolicy, current.timeSheetPolicy) ||\r\n !this.areEqual(initial.globalWorkingHours, current.globalWorkingHours)\r\n );\r\n });\r\n\r\n readonly canSaveSettings = computed(\r\n () =>\r\n !this.isLoading() &&\r\n !this.updating() &&\r\n this.formStatus() === 'VALID' &&\r\n this.hasChanges(),\r\n );\r\n\r\n readonly holidayTableRows = computed<HolidayTableRow[]>(() =>\r\n this.holidayItems().map((holiday, index) => ({\r\n rowKey: `${index}`,\r\n rowIndex: index,\r\n label: holiday.label,\r\n from: formatDateOnly(holiday.from),\r\n to: formatDateOnly(holiday.to),\r\n })),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const version = [\r\n this.settingsLastUpdated() ?? 'none',\r\n this.settingsError() ?? 'none',\r\n this.timezonesError() ?? 'none',\r\n String(this.timezones().length),\r\n JSON.stringify(this.resolvedFormatSchema()),\r\n ].join('::');\r\n\r\n if (this.settingsLoading() || this.timezonesLoading()) {\r\n return;\r\n }\r\n\r\n if (version === this.hydrationVersion()) {\r\n return;\r\n }\r\n\r\n this.hydrateForm(\r\n this.generalConfigurationSetting() ??\r\n this.createFallbackSetting(GENERAL_CONFIGURATION_SETTING_KEY),\r\n this.holidaysSetting() ?? this.createFallbackSetting('Holidays'),\r\n this.timezoneSetting() ?? this.createFallbackSetting('Timezone'),\r\n this.currencySetting() ?? this.createFallbackSetting('Currency'),\r\n this.weekendSetting() ?? this.createFallbackSetting('Weekend'),\r\n this.smtpSetting() ?? this.createFallbackSetting('SMTP'),\r\n this.timeSheetPolicySetting() ??\r\n this.createFallbackSetting('TimeSheetPolicy'),\r\n this.globalWorkingHoursSetting() ??\r\n this.createFallbackSetting('GlobalWorkingHours'),\r\n );\r\n\r\n this.hydrationVersion.set(version);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadSettings();\r\n this.loadTimezones();\r\n }\r\n\r\n goBack(): void {\r\n const backRoute = this.backRoute();\r\n if (!backRoute) {\r\n return;\r\n }\r\n\r\n this.router.navigateByUrl(backRoute);\r\n }\r\n\r\n openAddHoliday(): void {\r\n const modalRef = this.modal.openModal(\r\n SystemSettingsHolidayEditor,\r\n 'dialog',\r\n {\r\n header: this.transloco.translate('system-settings.add-holiday'),\r\n width: '42rem',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n holiday: null,\r\n isEditMode: false,\r\n },\r\n },\r\n );\r\n\r\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.holidayItems.update((items) => [...items, result]);\r\n });\r\n }\r\n\r\n editHoliday(index: number): void {\r\n const holiday = this.holidayItems()[index];\r\n if (!holiday) {\r\n return;\r\n }\r\n\r\n const modalRef = this.modal.openModal(\r\n SystemSettingsHolidayEditor,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('system-settings.edit-holiday'),\r\n styleClass: '!w-[30rem] !absolute !shadow-none',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n holiday,\r\n isEditMode: true,\r\n },\r\n },\r\n );\r\n\r\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.holidayItems.update((items) =>\r\n items.map((item, itemIndex) => (itemIndex === index ? result : item)),\r\n );\r\n });\r\n }\r\n\r\n deleteHoliday(index: number): void {\r\n this.holidayItems.update((items) =>\r\n items.filter((_, itemIndex) => itemIndex !== index),\r\n );\r\n }\r\n\r\n onSave(): void {\r\n this.form.markAllAsTouched();\r\n\r\n const nextSnapshot = this.buildCurrentSnapshot();\r\n const initialSnapshot = this.initialSnapshot();\r\n if (!nextSnapshot || !initialSnapshot) {\r\n return;\r\n }\r\n\r\n const values: UpdateSystemSettingItem[] = [];\r\n\r\n if (\r\n !this.areEqual(\r\n initialSnapshot.generalConfiguration,\r\n nextSnapshot.generalConfiguration,\r\n )\r\n ) {\r\n // `Identity` is shared with brand-display and is saved by full\r\n // replacement, so merge our slice onto the record as last loaded instead\r\n // of sending it alone — sending only our fields would wipe the branding.\r\n values.push({\r\n key: GENERAL_CONFIGURATION_SETTING_KEY,\r\n value: {\r\n ...this.getIdentityRecord(),\r\n ...nextSnapshot.generalConfiguration,\r\n },\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.holidays, nextSnapshot.holidays)) {\r\n values.push({\r\n key: 'Holidays',\r\n value: this.serializeHolidaysValue(nextSnapshot.holidays),\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.timezone, nextSnapshot.timezone)) {\r\n values.push({\r\n key: 'Timezone',\r\n value: nextSnapshot.timezone,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.currency, nextSnapshot.currency)) {\r\n values.push({\r\n key: 'Currency',\r\n value: nextSnapshot.currency,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.weekend, nextSnapshot.weekend)) {\r\n values.push({\r\n key: 'Weekend',\r\n value: nextSnapshot.weekend,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.smtp, nextSnapshot.smtp)) {\r\n values.push({\r\n key: 'SMTP',\r\n value: nextSnapshot.smtp,\r\n });\r\n }\r\n\r\n if (\r\n !this.areEqual(\r\n initialSnapshot.timeSheetPolicy,\r\n nextSnapshot.timeSheetPolicy,\r\n )\r\n ) {\r\n values.push({\r\n key: 'TimeSheetPolicy',\r\n value: nextSnapshot.timeSheetPolicy,\r\n });\r\n }\r\n\r\n if (\r\n !this.areEqual(\r\n initialSnapshot.globalWorkingHours,\r\n nextSnapshot.globalWorkingHours,\r\n )\r\n ) {\r\n values.push({\r\n key: 'GlobalWorkingHours',\r\n value: nextSnapshot.globalWorkingHours,\r\n });\r\n }\r\n\r\n if (!values.length) {\r\n this.toast.info(\r\n this.transloco.translate('system-settings.no-changes-message'),\r\n );\r\n return;\r\n }\r\n\r\n this.updateSettings(values);\r\n }\r\n\r\n private loadSettings(): void {\r\n this.settingsLoading.set(true);\r\n this.settingsError.set(null);\r\n\r\n this.http\r\n .get<\r\n ApiResponse<SystemSetting[]>\r\n >(this.buildEndpoint('getsystemsettings'))\r\n .subscribe({\r\n next: (response) => {\r\n const settings = response.data ?? [];\r\n this.settings.set(settings);\r\n synchronizeSystemSettingsStorage(\r\n resolveBrowserLocalStorage(),\r\n settings,\r\n );\r\n this.settingsLoading.set(false);\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n },\r\n error: (error) => {\r\n this.settingsLoading.set(false);\r\n this.settingsError.set(\r\n error?.message ?? 'Failed to load system settings',\r\n );\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n },\r\n });\r\n }\r\n\r\n private loadTimezones(): void {\r\n this.timezonesLoading.set(true);\r\n this.timezonesError.set(null);\r\n\r\n this.http\r\n .get<ApiResponse<TimezoneRegionOption[]>>(this.buildEndpoint('timezones'))\r\n .subscribe({\r\n next: (response) => {\r\n this.timezones.set(response.data ?? []);\r\n this.timezonesLoading.set(false);\r\n },\r\n error: (error) => {\r\n this.timezonesLoading.set(false);\r\n this.timezonesError.set(\r\n error?.message ?? 'Failed to load timezone options',\r\n );\r\n },\r\n });\r\n }\r\n\r\n private updateSettings(values: UpdateSystemSettingItem[]): void {\r\n this.updating.set(true);\r\n this.updateError.set(null);\r\n\r\n this.http\r\n .put<ApiResponse<boolean>>(this.buildEndpoint('updatesystemsettings'), {\r\n values,\r\n })\r\n .subscribe({\r\n next: () => {\r\n const nextSettings = this.applyUpdatedSettings(\r\n this.settings() ?? [],\r\n values,\r\n );\r\n this.settings.set(nextSettings);\r\n synchronizeSystemSettingsStorage(\r\n resolveBrowserLocalStorage(),\r\n nextSettings,\r\n );\r\n this.updating.set(false);\r\n this.updateError.set(null);\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n },\r\n error: (error) => {\r\n this.updating.set(false);\r\n this.updateError.set(\r\n error?.message ?? 'Failed to update system settings',\r\n );\r\n },\r\n });\r\n }\r\n\r\n private hydrateForm(\r\n generalConfigurationSetting: SystemSetting,\r\n holidaysSetting: SystemSetting,\r\n timezoneSetting: SystemSetting,\r\n currencySetting: SystemSetting,\r\n weekendSetting: SystemSetting,\r\n smtpSetting: SystemSetting,\r\n timeSheetPolicySetting: SystemSetting,\r\n globalWorkingHoursSetting: SystemSetting,\r\n ): void {\r\n const generalConfiguration = this.normalizeGeneralConfigurationSnapshot(\r\n this.extractGeneralConfigurationValue(generalConfigurationSetting),\r\n );\r\n const holidays = this.extractHolidaysValue(holidaysSetting);\r\n const timezone = this.normalizeTimezoneSnapshot(\r\n this.extractTimezoneValue(timezoneSetting),\r\n );\r\n const currency = this.normalizeCurrencySnapshot(\r\n this.extractCurrencyValue(currencySetting),\r\n );\r\n const weekend = this.normalizeWeekendSnapshot(\r\n this.extractWeekendValue(weekendSetting),\r\n );\r\n const smtp = this.normalizeSmtpSnapshot(this.extractSmtpValue(smtpSetting));\r\n const globalWorkingHours = this.normalizeGlobalWorkingHoursSnapshot(\r\n this.extractGlobalWorkingHoursValue(globalWorkingHoursSetting),\r\n );\r\n const timeSheetPolicy = this.normalizeTimeSheetPolicySnapshot(\r\n this.extractTimeSheetPolicyValue(timeSheetPolicySetting),\r\n globalWorkingHours.hoursPerDay,\r\n );\r\n\r\n this.holidayItems.set(holidays.data);\r\n this.form.controls.generalConfiguration.setValue({\r\n defaultExploreView: generalConfiguration.defaultExploreView,\r\n });\r\n this.form.controls.timezone.setValue({\r\n regionId: timezone.region?.id ?? null,\r\n dateFormat: timezone.dateFormat,\r\n timeFormat: timezone.timeFormat,\r\n });\r\n this.form.controls.currency.setValue({\r\n code: this.resolveCurrencyCode(currency),\r\n format: currency.format,\r\n });\r\n this.form.controls.weekend.setValue({\r\n days: weekend.days,\r\n });\r\n this.form.controls.smtp.setValue({\r\n mail: smtp.mail,\r\n name: smtp.name,\r\n password: smtp.password,\r\n host: smtp.host,\r\n port: smtp.port === null ? '' : String(smtp.port),\r\n });\r\n this.form.controls.timeSheetPolicy.setValue({\r\n frequency: timeSheetPolicy.frequency,\r\n maxDailyHours: timeSheetPolicy.maxDailyHours,\r\n requireDescription: timeSheetPolicy.requireDescription,\r\n allowFutureEntry: timeSheetPolicy.allowFutureEntry,\r\n allowBackdatedEntry: timeSheetPolicy.allowBackdatedEntry,\r\n autoLockOnApprove: timeSheetPolicy.autoLockOnApprove,\r\n submissionDeadlineDays: timeSheetPolicy.submissionDeadlineDays,\r\n });\r\n this.form.controls.globalWorkingHours.setValue({\r\n timeZoneId: globalWorkingHours.timeZoneId,\r\n workingDays: globalWorkingHours.workingDays,\r\n hoursPerDay: globalWorkingHours.hoursPerDay,\r\n holidaysCsv: globalWorkingHours.holidays.join(', '),\r\n });\r\n\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n this.initialSnapshot.set({\r\n generalConfiguration,\r\n holidays,\r\n timezone,\r\n currency,\r\n weekend,\r\n smtp,\r\n timeSheetPolicy,\r\n globalWorkingHours,\r\n });\r\n }\r\n\r\n private buildCurrentSnapshot(): SystemSettingsSnapshot | null {\r\n const timezone = this.buildTimezoneValue();\r\n const currency = this.buildCurrencyValue();\r\n if (!timezone || !currency || this.form.invalid) {\r\n return null;\r\n }\r\n\r\n return {\r\n generalConfiguration: this.buildGeneralConfigurationValue(),\r\n holidays: {\r\n data: this.holidayItems().map((item) => ({\r\n label: item.label.trim(),\r\n from: item.from,\r\n to: item.to,\r\n })),\r\n },\r\n timezone,\r\n currency,\r\n weekend: this.buildWeekendValue(),\r\n smtp: this.buildSmtpValue(),\r\n timeSheetPolicy: this.buildTimeSheetPolicyValue(),\r\n globalWorkingHours: this.buildGlobalWorkingHoursValue(),\r\n };\r\n }\r\n\r\n private buildTimezoneValue(): TimezoneSettingValue | null {\r\n const timezoneForm = this.form.controls.timezone.getRawValue();\r\n if (\r\n !timezoneForm.regionId ||\r\n !timezoneForm.dateFormat ||\r\n !timezoneForm.timeFormat\r\n ) {\r\n return null;\r\n }\r\n\r\n const region = this.timezones().find(\r\n (item) => item.id === timezoneForm.regionId,\r\n );\r\n if (!region) {\r\n return null;\r\n }\r\n\r\n return {\r\n region: {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n },\r\n dateFormat: timezoneForm.dateFormat,\r\n timeFormat: timezoneForm.timeFormat,\r\n };\r\n }\r\n\r\n private buildCurrencyValue(): CurrencySettingValue | null {\r\n const currencyForm = this.form.controls.currency.getRawValue();\r\n if (!currencyForm.code || !currencyForm.format) {\r\n return null;\r\n }\r\n\r\n const currency = FIXED_CURRENCIES.find(\r\n (item) => item.code === currencyForm.code,\r\n );\r\n if (!currency) {\r\n return null;\r\n }\r\n\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: currencyForm.format,\r\n };\r\n }\r\n\r\n /**\r\n * The `Identity` value exactly as last returned by the API (or written by a\r\n * previous save in this session), used as the base every save merges onto so\r\n * branding fields this page does not model survive round-trips.\r\n */\r\n private getIdentityRecord(): SystemSettingObject {\r\n const value = this.generalConfigurationSetting()?.value;\r\n return isRecord(value) ? value : {};\r\n }\r\n\r\n private buildGeneralConfigurationValue(): GeneralConfigurationSettingValue {\r\n return {\r\n defaultExploreView: normalizeExploreDefaultView(\r\n this.form.controls.generalConfiguration.controls.defaultExploreView\r\n .value,\r\n ),\r\n };\r\n }\r\n\r\n private buildWeekendValue(): WeekendSettingValue {\r\n return {\r\n days: normalizeWeekendDays(\r\n this.form.controls.weekend.controls.days.value,\r\n ),\r\n };\r\n }\r\n\r\n private buildSmtpValue(): SmtpSettingValue {\r\n const smtpForm = this.form.controls.smtp.getRawValue();\r\n return {\r\n mail: smtpForm.mail.trim(),\r\n name: smtpForm.name.trim(),\r\n password: smtpForm.password,\r\n host: smtpForm.host.trim(),\r\n port: parsePort(smtpForm.port),\r\n };\r\n }\r\n\r\n private buildTimeSheetPolicyValue(): TimeSheetPolicySettingValue {\r\n const policyForm = this.form.controls.timeSheetPolicy.getRawValue();\r\n const hoursPerDay = clampNumber(\r\n this.form.controls.globalWorkingHours.controls.hoursPerDay.value ?? 8,\r\n 0,\r\n 24,\r\n );\r\n return {\r\n frequency: normalizeFrequency(policyForm.frequency),\r\n maxDailyHours: Math.max(\r\n hoursPerDay,\r\n clampNumber(policyForm.maxDailyHours ?? 24, 1, 24),\r\n ),\r\n requireDescription: policyForm.requireDescription,\r\n allowFutureEntry: policyForm.allowFutureEntry,\r\n allowBackdatedEntry: policyForm.allowBackdatedEntry,\r\n autoLockOnApprove: policyForm.autoLockOnApprove,\r\n submissionDeadlineDays: clampNumber(\r\n policyForm.submissionDeadlineDays ?? 0,\r\n 0,\r\n 90,\r\n ),\r\n };\r\n }\r\n\r\n private buildGlobalWorkingHoursValue(): GlobalWorkingHoursSettingValue {\r\n const globalForm = this.form.controls.globalWorkingHours.getRawValue();\r\n return {\r\n timeZoneId: globalForm.timeZoneId ?? 'UTC',\r\n workingDays: normalizeDotnetDays(globalForm.workingDays),\r\n hoursPerDay: clampNumber(globalForm.hoursPerDay ?? 8, 0, 24),\r\n holidays: parseCsv(globalForm.holidaysCsv),\r\n };\r\n }\r\n\r\n private findSettingByKey(key: string): SystemSetting | null {\r\n const normalizedKey = key.trim().toLowerCase();\r\n return (\r\n this.settings()?.find(\r\n (setting) => setting.key.trim().toLowerCase() === normalizedKey,\r\n ) ?? null\r\n );\r\n }\r\n\r\n private extractGeneralConfigurationValue(\r\n setting: SystemSetting,\r\n ): GeneralConfigurationSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return { ...DEFAULT_GENERAL_CONFIGURATION };\r\n }\r\n\r\n return {\r\n defaultExploreView: normalizeExploreDefaultView(\r\n setting.value['defaultExploreView'] ??\r\n setting.value['DefaultExploreView'],\r\n ),\r\n };\r\n }\r\n\r\n private extractHolidaysValue(setting: SystemSetting): HolidaysSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return { data: [] };\r\n }\r\n\r\n const rawData = setting.value['data'];\r\n if (!Array.isArray(rawData)) {\r\n return { data: [] };\r\n }\r\n\r\n return {\r\n data: rawData\r\n .map((item) => this.normalizeHolidayItem(item))\r\n .filter((item): item is HolidayItem => item !== null),\r\n };\r\n }\r\n\r\n private extractTimezoneValue(setting: SystemSetting): TimezoneSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return {\r\n region: null,\r\n dateFormat: null,\r\n timeFormat: null,\r\n };\r\n }\r\n\r\n return {\r\n region: this.normalizeTimezoneRegion(\r\n setting.value['region'] ?? setting.value['Region'],\r\n ),\r\n dateFormat: getNullableString(\r\n setting.value['dateFormat'] ??\r\n setting.value['DateFormat'] ??\r\n setting.value['dateformat'],\r\n ),\r\n timeFormat: getNullableString(\r\n setting.value['timeFormat'] ??\r\n setting.value['TimeFormat'] ??\r\n setting.value['timeformat'],\r\n ),\r\n };\r\n }\r\n\r\n private extractCurrencyValue(setting: SystemSetting): CurrencySettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultCurrencyValue();\r\n }\r\n\r\n return {\r\n name: getString(setting.value['name']) ?? FIXED_CURRENCIES[0].code,\r\n unit: this.normalizeCurrencyUnit(setting.value['unit']),\r\n format: getNullableString(setting.value['format']),\r\n };\r\n }\r\n\r\n private extractWeekendValue(setting: SystemSetting): WeekendSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return { days: [] };\r\n }\r\n\r\n return {\r\n days: normalizeWeekendDays(\r\n setting.value['days'] ?? setting.value['Days'],\r\n ),\r\n };\r\n }\r\n\r\n private extractSmtpValue(setting: SystemSetting): SmtpSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultSmtpValue();\r\n }\r\n\r\n return {\r\n mail:\r\n getNullableString(setting.value['mail'] ?? setting.value['Mail']) ?? '',\r\n name:\r\n getNullableString(setting.value['name'] ?? setting.value['Name']) ?? '',\r\n password:\r\n getNullableString(\r\n setting.value['password'] ?? setting.value['Password'],\r\n ) ?? '',\r\n host:\r\n getNullableString(setting.value['host'] ?? setting.value['Host']) ?? '',\r\n port: getNullableNumber(setting.value['port'] ?? setting.value['Port']),\r\n };\r\n }\r\n\r\n private extractTimeSheetPolicyValue(\r\n setting: SystemSetting,\r\n ): TimeSheetPolicySettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultTimeSheetPolicyValue();\r\n }\r\n\r\n const value = setting.value;\r\n const defaults = this.getDefaultTimeSheetPolicyValue();\r\n return {\r\n frequency: normalizeFrequency(value['frequency'] ?? value['Frequency']),\r\n maxDailyHours:\r\n getNumber(value['maxDailyHours'] ?? value['MaxDailyHours']) ??\r\n defaults.maxDailyHours,\r\n requireDescription:\r\n getBoolean(\r\n value['requireDescription'] ?? value['RequireDescription'],\r\n ) ?? defaults.requireDescription,\r\n allowFutureEntry:\r\n getBoolean(value['allowFutureEntry'] ?? value['AllowFutureEntry']) ??\r\n defaults.allowFutureEntry,\r\n allowBackdatedEntry:\r\n getBoolean(\r\n value['allowBackdatedEntry'] ?? value['AllowBackdatedEntry'],\r\n ) ?? defaults.allowBackdatedEntry,\r\n autoLockOnApprove:\r\n getBoolean(value['autoLockOnApprove'] ?? value['AutoLockOnApprove']) ??\r\n defaults.autoLockOnApprove,\r\n submissionDeadlineDays:\r\n getNumber(\r\n value['submissionDeadlineDays'] ?? value['SubmissionDeadlineDays'],\r\n ) ?? defaults.submissionDeadlineDays,\r\n };\r\n }\r\n\r\n private extractGlobalWorkingHoursValue(\r\n setting: SystemSetting,\r\n ): GlobalWorkingHoursSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultGlobalWorkingHoursValue();\r\n }\r\n\r\n const value = setting.value;\r\n const defaults = this.getDefaultGlobalWorkingHoursValue();\r\n return {\r\n timeZoneId:\r\n getString(value['timeZoneId'] ?? value['TimeZoneId']) ??\r\n defaults.timeZoneId,\r\n workingDays:\r\n getNumberArray(value['workingDays'] ?? value['WorkingDays']) ??\r\n defaults.workingDays,\r\n hoursPerDay:\r\n getNumber(value['hoursPerDay'] ?? value['HoursPerDay']) ??\r\n defaults.hoursPerDay,\r\n holidays:\r\n getStringArray(value['holidays'] ?? value['Holidays']) ??\r\n defaults.holidays,\r\n };\r\n }\r\n\r\n private normalizeHolidayItem(value: unknown): HolidayItem | null {\r\n if (!isRecord(value)) {\r\n return null;\r\n }\r\n\r\n const label = getString(value['label'] ?? value['name']);\r\n const from = normalizeDateInput(value['from']);\r\n const to = normalizeDateInput(value['to']);\r\n if (!label || !from || !to) {\r\n return null;\r\n }\r\n\r\n return { label, from, to };\r\n }\r\n\r\n private normalizeTimezoneRegion(value: unknown): TimezoneRegionOption | null {\r\n if (typeof value === 'string' && value.trim()) {\r\n const normalizedValue = value.trim().toLowerCase();\r\n const region =\r\n this.timezones().find(\r\n (item) => item.id.trim().toLowerCase() === normalizedValue,\r\n ) ?? null;\r\n\r\n return region\r\n ? {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n }\r\n : null;\r\n }\r\n\r\n if (!isRecord(value)) {\r\n return null;\r\n }\r\n\r\n const id = getString(value['id'] ?? value['Id']);\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n const matchedRegion = this.timezones().find(\r\n (item) => item.id.trim().toLowerCase() === id.trim().toLowerCase(),\r\n );\r\n\r\n if (matchedRegion) {\r\n return {\r\n ...matchedRegion,\r\n name:\r\n getString(value['name'] ?? value['Name']) ??\r\n matchedRegion.name ??\r\n matchedRegion.displayName,\r\n };\r\n }\r\n\r\n const standardName =\r\n getString(value['standardName'] ?? value['StandardName']) ?? id;\r\n const displayName =\r\n getString(value['displayName'] ?? value['DisplayName']) ?? id;\r\n\r\n return {\r\n id,\r\n baseUtcOffset:\r\n getString(value['baseUtcOffset'] ?? value['BaseUtcOffset']) ?? '',\r\n standardName,\r\n displayName,\r\n daylightName:\r\n getString(value['daylightName'] ?? value['DaylightName']) ??\r\n standardName,\r\n name: getString(value['name'] ?? value['Name']) ?? displayName,\r\n };\r\n }\r\n\r\n private normalizeCurrencyUnit(value: unknown): CurrencySettingValue['unit'] {\r\n if (!isRecord(value)) {\r\n return FIXED_CURRENCIES[0].unit;\r\n }\r\n\r\n return {\r\n en: getString(value['en']) ?? FIXED_CURRENCIES[0].unit.en,\r\n ar: getString(value['ar']) ?? FIXED_CURRENCIES[0].unit.ar,\r\n };\r\n }\r\n\r\n private normalizeGeneralConfigurationSnapshot(\r\n value: GeneralConfigurationSettingValue,\r\n ): GeneralConfigurationSettingValue {\r\n return {\r\n defaultExploreView: normalizeExploreDefaultView(value.defaultExploreView),\r\n };\r\n }\r\n\r\n private normalizeTimezoneSnapshot(\r\n value: TimezoneSettingValue,\r\n ): TimezoneSettingValue {\r\n const defaults = this.getDefaultTimezoneValue();\r\n return {\r\n region: value.region ?? defaults.region,\r\n dateFormat: value.dateFormat ?? defaults.dateFormat,\r\n timeFormat: value.timeFormat ?? defaults.timeFormat,\r\n };\r\n }\r\n\r\n private normalizeCurrencySnapshot(\r\n value: CurrencySettingValue,\r\n ): CurrencySettingValue {\r\n const code = this.resolveCurrencyCode(value);\r\n const currency =\r\n FIXED_CURRENCIES.find((item) => item.code === code) ??\r\n FIXED_CURRENCIES[0];\r\n const defaultFormat =\r\n this.buildCurrencyFormatOptions(currency)[0]?.id ?? null;\r\n\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: value.format ?? defaultFormat,\r\n };\r\n }\r\n\r\n private normalizeWeekendSnapshot(\r\n value: WeekendSettingValue,\r\n ): WeekendSettingValue {\r\n return {\r\n days: normalizeWeekendDays(value.days),\r\n };\r\n }\r\n\r\n private normalizeSmtpSnapshot(value: SmtpSettingValue): SmtpSettingValue {\r\n return {\r\n mail: value.mail.trim(),\r\n name: value.name.trim(),\r\n password: value.password,\r\n host: value.host.trim(),\r\n port: value.port,\r\n };\r\n }\r\n\r\n private normalizeTimeSheetPolicySnapshot(\r\n value: TimeSheetPolicySettingValue,\r\n hoursPerDay: number,\r\n ): TimeSheetPolicySettingValue {\r\n return {\r\n frequency: normalizeFrequency(value.frequency),\r\n maxDailyHours: Math.max(\r\n clampNumber(hoursPerDay, 0, 24),\r\n clampNumber(value.maxDailyHours, 1, 24),\r\n ),\r\n requireDescription: value.requireDescription,\r\n allowFutureEntry: value.allowFutureEntry,\r\n allowBackdatedEntry: value.allowBackdatedEntry,\r\n autoLockOnApprove: value.autoLockOnApprove,\r\n submissionDeadlineDays: clampNumber(value.submissionDeadlineDays, 0, 90),\r\n };\r\n }\r\n\r\n private normalizeGlobalWorkingHoursSnapshot(\r\n value: GlobalWorkingHoursSettingValue,\r\n ): GlobalWorkingHoursSettingValue {\r\n const defaults = this.getDefaultGlobalWorkingHoursValue();\r\n return {\r\n timeZoneId: value.timeZoneId || defaults.timeZoneId,\r\n workingDays: normalizeDotnetDays(value.workingDays),\r\n hoursPerDay: clampNumber(value.hoursPerDay, 0, 24),\r\n holidays: value.holidays,\r\n };\r\n }\r\n\r\n private createFallbackSetting(\r\n key:\r\n | 'Identity'\r\n | 'Holidays'\r\n | 'Timezone'\r\n | 'Currency'\r\n | 'Weekend'\r\n | 'SMTP'\r\n | 'TimeSheetPolicy'\r\n | 'GlobalWorkingHours',\r\n ): SystemSetting {\r\n switch (key) {\r\n case 'Identity':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: { ...DEFAULT_GENERAL_CONFIGURATION },\r\n };\r\n case 'Holidays':\r\n return { key, label: key, description: key, value: { data: [] } };\r\n case 'Timezone':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultTimezoneValue(),\r\n };\r\n case 'Currency':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultCurrencyValue(),\r\n };\r\n case 'Weekend':\r\n return { key, label: key, description: key, value: { days: [] } };\r\n case 'SMTP':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultSmtpValue(),\r\n };\r\n case 'TimeSheetPolicy':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultTimeSheetPolicyValue(),\r\n };\r\n case 'GlobalWorkingHours':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultGlobalWorkingHoursValue(),\r\n };\r\n }\r\n }\r\n\r\n private getDefaultTimezoneValue(): TimezoneSettingValue {\r\n const region = this.timezones()[0] ?? null;\r\n const defaultDateFormat =\r\n this.dateFormatOptions().find((option) => option.isSelected)?.id ??\r\n this.dateFormatOptions()[0]?.id ??\r\n null;\r\n const defaultTimeFormat =\r\n this.timeFormatOptions().find((option) => option.isSelected)?.id ??\r\n this.timeFormatOptions()[0]?.id ??\r\n null;\r\n\r\n return {\r\n region: region\r\n ? {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n }\r\n : null,\r\n dateFormat: defaultDateFormat,\r\n timeFormat: defaultTimeFormat,\r\n };\r\n }\r\n\r\n private getDefaultCurrencyValue(): CurrencySettingValue {\r\n const currency = FIXED_CURRENCIES[0];\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: this.buildCurrencyFormatOptions(currency)[0]?.id ?? null,\r\n };\r\n }\r\n\r\n private getDefaultSmtpValue(): SmtpSettingValue {\r\n return {\r\n mail: '',\r\n name: '',\r\n password: '',\r\n host: '',\r\n port: null,\r\n };\r\n }\r\n\r\n private getDefaultTimeSheetPolicyValue(): TimeSheetPolicySettingValue {\r\n return {\r\n frequency: 'Weekly',\r\n maxDailyHours: 24,\r\n requireDescription: false,\r\n allowFutureEntry: false,\r\n allowBackdatedEntry: true,\r\n autoLockOnApprove: true,\r\n submissionDeadlineDays: 3,\r\n };\r\n }\r\n\r\n private getDefaultGlobalWorkingHoursValue(): GlobalWorkingHoursSettingValue {\r\n return {\r\n timeZoneId: this.timezones()[0]?.id ?? 'UTC',\r\n workingDays: [0, 1, 2, 3, 4],\r\n hoursPerDay: 8,\r\n holidays: [],\r\n };\r\n }\r\n\r\n private resolveCurrencyCode(value: CurrencySettingValue): string {\r\n const candidates = [value.name, value.unit.en, value.unit.ar].filter(\r\n (candidate): candidate is string => !!candidate,\r\n );\r\n\r\n for (const candidate of candidates) {\r\n const normalizedCandidate = candidate.trim().toLowerCase();\r\n const extractedCode =\r\n candidate.match(/\\(([A-Za-z]{3})\\)/)?.[1]?.toUpperCase() ?? null;\r\n if (extractedCode) {\r\n const directCodeMatch = FIXED_CURRENCIES.find(\r\n (item) => item.code === extractedCode,\r\n );\r\n\r\n if (directCodeMatch) {\r\n return directCodeMatch.code;\r\n }\r\n }\r\n\r\n const match = FIXED_CURRENCIES.find(\r\n (item) =>\r\n item.code.toLowerCase() === normalizedCandidate ||\r\n item.englishLabel.toLowerCase() === normalizedCandidate ||\r\n item.arabicLabel.toLowerCase() === normalizedCandidate ||\r\n item.unit.en.toLowerCase() === normalizedCandidate ||\r\n item.unit.ar.toLowerCase() === normalizedCandidate,\r\n );\r\n\r\n if (match) {\r\n return match.code;\r\n }\r\n }\r\n\r\n return FIXED_CURRENCIES[0].code;\r\n }\r\n\r\n private mapFormatOptions(\r\n options: FormatSchemaOption[],\r\n selectedKey: string | null,\r\n ): SelectOption[] {\r\n // Read active language so the label re-translates on language switch.\r\n this.activeLang();\r\n return options.map((option) => ({\r\n id: option.key,\r\n name: this.formatOptionLabel(option.key),\r\n isSelected: selectedKey ? option.key === selectedKey : option.isSelected,\r\n }));\r\n }\r\n\r\n /**\r\n * Builds a localized, human-readable label for a date/time format key by\r\n * translating each format token (e.g. `dd-MM-yyyy` → `يوم-شهر-سنة`) while\r\n * preserving the original separators. Unknown characters are left as-is.\r\n */\r\n private formatOptionLabel(formatKey: string): string {\r\n const tokenKeyByLetter: Record<string, string> = {\r\n y: 'format-token-year',\r\n M: 'format-token-month',\r\n d: 'format-token-day',\r\n H: 'format-token-hour',\r\n h: 'format-token-hour',\r\n m: 'format-token-minute',\r\n s: 'format-token-second',\r\n t: 'format-token-period',\r\n };\r\n\r\n return formatKey.replace(/y+|M+|d+|H+|h+|m+|s+|t+/g, (token) => {\r\n const translationKey = tokenKeyByLetter[token[0]];\r\n return translationKey\r\n ? this.transloco.translate(`system-settings.${translationKey}`)\r\n : token;\r\n });\r\n }\r\n\r\n private serializeHolidaysValue(value: HolidaysSettingValue): {\r\n data: Array<{ label: string; from: string; to: string }>;\r\n } {\r\n return {\r\n data: value.data.map((item) => ({\r\n label: item.label,\r\n from: formatDateOnly(item.from),\r\n to: formatDateOnly(item.to),\r\n })),\r\n };\r\n }\r\n\r\n private buildCurrencyFormatOptions(\r\n currency: CurrencyCatalogItem | undefined,\r\n ): SelectOption[] {\r\n const unitLabel = this.getCurrencyFormatLabel(currency);\r\n\r\n return [\r\n { id: '{0:0}', name: `1000 ${unitLabel}` },\r\n { id: '{0:0.0}', name: `1000.0 ${unitLabel}` },\r\n { id: '{0:0.00}', name: `1000.00 ${unitLabel}` },\r\n { id: '{0:#,0}', name: `1,000 ${unitLabel}` },\r\n { id: '{0:#,0.0}', name: `1,000.0 ${unitLabel}` },\r\n { id: '{0:#,0.00}', name: `1,000.00 ${unitLabel}` },\r\n { id: '{0:#,0, K}', name: `1 K ${unitLabel}` },\r\n { id: '{0:N3}', name: `1,000 N3 ${unitLabel}` },\r\n ];\r\n }\r\n\r\n private getCurrencyFormatLabel(\r\n currency: CurrencyCatalogItem | undefined,\r\n ): string {\r\n if (!currency) {\r\n return '';\r\n }\r\n\r\n return this.activeLang() === 'ar' ? currency.unit.ar : currency.unit.en;\r\n }\r\n\r\n private buildEndpoint(path: string): string {\r\n return `${this.apiBasePath().replace(/\\/$/, '')}/${path}`;\r\n }\r\n\r\n private applyUpdatedSettings(\r\n settings: SystemSetting[],\r\n values: UpdateSystemSettingItem[],\r\n ): SystemSetting[] {\r\n const valueMap = new Map(values.map((item) => [item.key, item.value]));\r\n const nextSettings: SystemSetting[] = settings.map((setting) => {\r\n if (!valueMap.has(setting.key)) {\r\n return setting;\r\n }\r\n\r\n return {\r\n ...setting,\r\n value: valueMap.get(setting.key)!,\r\n };\r\n });\r\n\r\n const existingKeys = new Set(nextSettings.map((setting) => setting.key));\r\n\r\n for (const item of values) {\r\n if (existingKeys.has(item.key)) {\r\n continue;\r\n }\r\n\r\n nextSettings.push({\r\n key: item.key,\r\n label: item.key,\r\n description: item.key,\r\n value: item.value,\r\n });\r\n }\r\n\r\n return nextSettings.sort((left, right) =>\r\n left.key.localeCompare(right.key),\r\n );\r\n }\r\n\r\n private areEqual(left: unknown, right: unknown): boolean {\r\n return JSON.stringify(left) === JSON.stringify(right);\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is SystemSettingObject {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction getString(value: unknown): string | null {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalizedValue = value.trim();\r\n return normalizedValue ? normalizedValue : null;\r\n}\r\n\r\nfunction getNullableString(value: unknown): string | null {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n return value.trim() || null;\r\n}\r\n\r\nfunction getNullableNumber(value: unknown): number | null {\r\n if (typeof value === 'number' && !Number.isNaN(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim()) {\r\n const parsedValue = Number(value);\r\n return Number.isNaN(parsedValue) ? null : parsedValue;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction getNumber(value: unknown): number | null {\r\n return getNullableNumber(value);\r\n}\r\n\r\nfunction getBoolean(value: unknown): boolean | null {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalizedValue = value.trim().toLowerCase();\r\n if (normalizedValue === 'true') {\r\n return true;\r\n }\r\n if (normalizedValue === 'false') {\r\n return false;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction getStringArray(value: unknown): string[] | null {\r\n if (!Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n return value\r\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\r\n .filter(Boolean);\r\n}\r\n\r\nfunction getNumberArray(value: unknown): number[] | null {\r\n if (!Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n return value\r\n .map((item) => (typeof item === 'number' ? item : Number(item)))\r\n .filter((item) => Number.isInteger(item));\r\n}\r\n\r\nfunction parsePort(value: string): number | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const parsedValue = Number(normalizedValue);\r\n return Number.isNaN(parsedValue) ? null : parsedValue;\r\n}\r\n\r\nfunction normalizeExploreDefaultView(value: unknown): ExploreDefaultView {\r\n return EXPLORE_DEFAULT_VIEW_OPTIONS.some((option) => option.id === value)\r\n ? (value as ExploreDefaultView)\r\n : DEFAULT_GENERAL_CONFIGURATION.defaultExploreView;\r\n}\r\n\r\nfunction normalizeWeekendDays(value: unknown): number[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .map((item) => (typeof item === 'number' ? item : Number(item)))\r\n .filter((item) => Number.isInteger(item) && item >= 1 && item <= 7)\r\n .sort((left, right) => left - right);\r\n}\r\n\r\nfunction normalizeDotnetDays(value: unknown): number[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return Array.from(\r\n new Set(\r\n value\r\n .map((item) => (typeof item === 'number' ? item : Number(item)))\r\n .filter((item) => Number.isInteger(item) && item >= 0 && item <= 6),\r\n ),\r\n ).sort((left, right) => left - right);\r\n}\r\n\r\nfunction clampNumber(value: number, min: number, max: number): number {\r\n if (!Number.isFinite(value)) {\r\n return min;\r\n }\r\n\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nconst TIMESHEET_FREQUENCIES: readonly TimeSheetFrequency[] = [\r\n 'Daily',\r\n 'Weekly',\r\n 'BiWeekly',\r\n 'Monthly',\r\n];\r\n\r\nfunction normalizeFrequency(value: unknown): TimeSheetFrequency {\r\n return typeof value === 'string' &&\r\n (TIMESHEET_FREQUENCIES as readonly string[]).includes(value)\r\n ? (value as TimeSheetFrequency)\r\n : 'Weekly';\r\n}\r\n\r\nfunction maxDailyHoursGteHoursPerDay(\r\n group: AbstractControl,\r\n): ValidationErrors | null {\r\n const maxDailyHours = group.get('timeSheetPolicy.maxDailyHours')?.value;\r\n const hoursPerDay = group.get('globalWorkingHours.hoursPerDay')?.value;\r\n\r\n if (\r\n typeof maxDailyHours === 'number' &&\r\n typeof hoursPerDay === 'number' &&\r\n maxDailyHours < hoursPerDay\r\n ) {\r\n return { maxDailyBelowDaily: true };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction parseCsv(value: string): string[] {\r\n return value\r\n .split(',')\r\n .map((item) => item.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction normalizeDateInput(value: unknown): Date | null {\r\n if (value instanceof Date) {\r\n if (Number.isNaN(value.getTime())) {\r\n return null;\r\n }\r\n\r\n return createLocalDate(\r\n value.getFullYear(),\r\n value.getMonth() + 1,\r\n value.getDate(),\r\n );\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const dateOnlyMatch = normalizedValue.match(/^(\\d{4})[-/](\\d{2})[-/](\\d{2})/);\r\n if (dateOnlyMatch) {\r\n const [, year, month, day] = dateOnlyMatch;\r\n return createLocalDate(Number(year), Number(month), Number(day));\r\n }\r\n\r\n const parsedDate = new Date(normalizedValue);\r\n if (Number.isNaN(parsedDate.getTime())) {\r\n return null;\r\n }\r\n\r\n return createLocalDate(\r\n parsedDate.getFullYear(),\r\n parsedDate.getMonth() + 1,\r\n parsedDate.getDate(),\r\n );\r\n}\r\n\r\nfunction createLocalDate(year: number, month: number, day: number): Date {\r\n return new Date(year, month - 1, day, 12, 0, 0, 0);\r\n}\r\n\r\nfunction formatDateOnly(value: Date): string {\r\n const year = value.getFullYear();\r\n const month = String(value.getMonth() + 1).padStart(2, '0');\r\n const day = String(value.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-page\r\n [title]=\"t('page-title')\"\r\n [avatarIcon]=\"'general.settings-02'\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-emerald-100)',\r\n '--p-avatar-color': 'var(--p-emerald-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\"\r\n >\r\n <div>\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n />\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [tooltip]=\"t('save-tooltip')\"\r\n [badge]=\"hasChanges() ? '!' : ''\"\r\n badgeSeverity=\"warn\"\r\n [loading]=\"updating()\"\r\n [disabled]=\"!canSaveSettings()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n\r\n @if (isLoading()) {\r\n <div class=\"space-y-4\">\r\n <p-skeleton width=\"100%\" height=\"12rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"18rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"14rem\" borderRadius=\"0.75rem\" />\r\n </div>\r\n } @else {\r\n <!--\r\n BE/HTTP errors (timezonesError, settingsError, updateError) are already\r\n surfaced as toasts by the HTTP interceptor, so they are intentionally\r\n not rendered as top-of-page banners here to avoid duplicate messaging.\r\n -->\r\n <div class=\"space-y-6\">\r\n <mt-system-settings-holidays-section\r\n [holidays]=\"holidayTableRows()\"\r\n (addHoliday)=\"openAddHoliday()\"\r\n (editHoliday)=\"editHoliday($event)\"\r\n (deleteHoliday)=\"deleteHoliday($event)\"\r\n />\r\n\r\n <mt-system-settings-general-config-section\r\n [generalConfigurationForm]=\"form.controls.generalConfiguration\"\r\n [exploreDefaultViewOptions]=\"exploreDefaultViewOptions()\"\r\n />\r\n\r\n <mt-system-settings-general-section\r\n [timezoneForm]=\"form.controls.timezone\"\r\n [currencyForm]=\"form.controls.currency\"\r\n [weekendForm]=\"form.controls.weekend\"\r\n [timezoneOptions]=\"timezoneOptions()\"\r\n [dateFormatOptions]=\"dateFormatOptions()\"\r\n [timeFormatOptions]=\"timeFormatOptions()\"\r\n [currencyOptions]=\"currencyOptions()\"\r\n [currencyFormatOptions]=\"currencyFormatOptions()\"\r\n [weekendOptions]=\"weekendOptions()\"\r\n />\r\n\r\n <mt-system-settings-timesheet-section\r\n [policyForm]=\"form.controls.timeSheetPolicy\"\r\n [globalWorkingHoursForm]=\"form.controls.globalWorkingHours\"\r\n [dayOptions]=\"dotnetDayOptions()\"\r\n [frequencyOptions]=\"frequencyOptions()\"\r\n [timezoneOptions]=\"timezoneOptions()\"\r\n [maxDailyBelowDaily]=\"form.errors?.['maxDailyBelowDaily'] ?? false\"\r\n />\r\n\r\n <mt-system-settings-smtp-section [smtpForm]=\"form.controls.smtp\" />\r\n </div>\r\n }\r\n </div>\r\n </mt-page>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}