{"version":3,"file":"772.7ccd3e42ec40ee71.js","mappings":"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","names":["ClientDomainService","BehaviorSubject","constructor","http","super","this","serverUrl","window","location","host","version","_url","replace","getDomains","get","getEmailCount","domain","params","HttpParams","set","deleteDomain","domainKey","Observable","subscriber","post","subscribe","next","response","error","insertDomain","insertModel","convertToInsertModel","formattedModel","formatInsertModel","model","updateDomain","updateModel","convertToUpdateModel","formatUpdateModel","clientDomainKey","i0","i1","factory","ɵfac","providedIn","staffPosition_r1","staffPositionKey","position","AddJobTitleMappingDialogComponent","formBuilder","positionService","toast","saveSuccessful","EventEmitter","closeClicked","ngOnInit","form","createFormGroup","getStaffPositions","ngAfterViewInit","document","getElementById","focus","getPositions","staffPositions","Error","group","jobTitle","UntypedFormControl","Validators","required","maxLength","jobCode","onSubmit","submitting","markAsPristine","newJobTitleModel","value","updateEmployeePositionMapping","_","success","emit","warning","closeClickedHandler","jobTitleChangeHandler","jobTitleIsNotUnique","clientStaffPositions","some","x","clientPosition","toLowerCase","i2","i3","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","AddJobTitleMappingDialogComponent_div_11_Template","AddJobTitleMappingDialogComponent_div_12_Template","AddJobTitleMappingDialogComponent_div_18_Template","AddJobTitleMappingDialogComponent_option_24_Template","AddJobTitleMappingDialogComponent_div_25_Template","AddJobTitleMappingDialogComponent_i_31_Template","_c0","errors","dirty","touched","_c1","valid","pristine","$event","_r1","ctx_r1","newJobTitleHandler","showAddJobTitle","_r4","preventDefault","menu_r5","_r6","menu2_r7","EmployeeRecordViewComponent_div_7_div_1_button_2_Template","_r3","mailto","selectedEmployee","loginEmail","editing","addEditOrViewOnly","EmployeeRecordViewComponent_div_7_div_1_button_15_Template","editSimpleContact","userProfileView","firstName","lastName","_c2","EmployeeRecordViewComponent_div_7_div_9_li_2_Template","EmployeeRecordViewComponent_div_7_div_14_li_2_Template","firstNameProper","preferredName","EmployeeRecordViewComponent_div_7_div_19_li_2_Template","_r8","employeeEmailChangeHandler","primaryEmail","EmployeeRecordViewComponent_div_7_div_24_li_2_Template","EmployeeRecordViewComponent_div_7_div_24_li_3_Template","EmployeeRecordViewComponent_div_7_div_24_li_4_Template","EmployeeRecordViewComponent_div_7_div_24_li_5_Template","email","notUnique","noDomain","mobilePhone","_r9","EmployeeRecordViewComponent_div_7_div_29_li_2_Template","EmployeeRecordViewComponent_div_7_div_29_li_3_Template","EmployeeRecordViewComponent_div_7_div_29_li_4_Template","minlength","maxlength","_r10","clientStaffPosition_r11","EmployeeRecordViewComponent_div_7_div_36_option_2_Template","_c3","EmployeeRecordViewComponent_div_7_div_37_li_2_Template","hierarchy_r12","hierarchyIdentifier","name","EmployeeRecordViewComponent_div_7_div_41_option_2_Template","locationIdentifier","hierarchies","EmployeeRecordViewComponent_div_7_div_42_li_2_Template","isSupervisor","val_r13","EmployeeRecordViewComponent_div_7_div_46_option_2_Template","_c4","EmployeeRecordViewComponent_div_7_div_47_li_2_Template","supervisorLFName","supervisor_r14","primaryIdentifier","lfName","EmployeeRecordViewComponent_div_7_div_51_select_1_option_3_Template","supervisorIdentifier","supervisors","EmployeeRecordViewComponent_div_7_div_51_select_1_Template","EmployeeRecordViewComponent_div_7_div_51_ng_template_2_Template","length","NoSupervisors_r15","EmployeeRecordViewComponent_div_7_div_52_li_2_Template","city","EmployeeRecordViewComponent_div_7_div_57_li_2_Template","state","state_r16","abbreviation","EmployeeRecordViewComponent_div_7_div_61_option_2_Template","states","EmployeeRecordViewComponent_div_7_div_62_li_2_Template","EmployeeRecordViewComponent_div_7_div_1_Template","EmployeeRecordViewComponent_div_7_div_7_Template","EmployeeRecordViewComponent_div_7_div_8_Template","EmployeeRecordViewComponent_div_7_div_9_Template","EmployeeRecordViewComponent_div_7_div_12_Template","EmployeeRecordViewComponent_div_7_div_13_Template","EmployeeRecordViewComponent_div_7_div_14_Template","EmployeeRecordViewComponent_div_7_div_17_Template","EmployeeRecordViewComponent_div_7_div_18_Template","EmployeeRecordViewComponent_div_7_div_19_Template","EmployeeRecordViewComponent_div_7_div_22_Template","EmployeeRecordViewComponent_div_7_div_23_Template","EmployeeRecordViewComponent_div_7_div_24_Template","EmployeeRecordViewComponent_div_7_div_27_Template","EmployeeRecordViewComponent_div_7_div_28_Template","EmployeeRecordViewComponent_div_7_div_29_Template","EmployeeRecordViewComponent_div_7_span_34_Template","EmployeeRecordViewComponent_div_7_div_35_Template","EmployeeRecordViewComponent_div_7_div_36_Template","EmployeeRecordViewComponent_div_7_div_37_Template","EmployeeRecordViewComponent_div_7_div_40_Template","EmployeeRecordViewComponent_div_7_div_41_Template","EmployeeRecordViewComponent_div_7_div_42_Template","EmployeeRecordViewComponent_div_7_div_45_Template","EmployeeRecordViewComponent_div_7_div_46_Template","EmployeeRecordViewComponent_div_7_div_47_Template","EmployeeRecordViewComponent_div_7_div_50_Template","EmployeeRecordViewComponent_div_7_div_51_Template","EmployeeRecordViewComponent_div_7_div_52_Template","EmployeeRecordViewComponent_div_7_div_55_Template","EmployeeRecordViewComponent_div_7_div_56_Template","EmployeeRecordViewComponent_div_7_div_57_Template","EmployeeRecordViewComponent_div_7_div_60_Template","EmployeeRecordViewComponent_div_7_div_61_Template","EmployeeRecordViewComponent_div_7_div_62_Template","employeeForm","_r17","employeeDetailsExpanded","_r18","employeeStatus","onLeave","EmployeeRecordViewComponent_div_8_div_12_li_2_Template","hireDate","_c5","EmployeeRecordViewComponent_div_8_div_16_li_2_Template","terminationDate","EmployeeRecordViewComponent_div_8_div_20_li_2_Template","fullTime","type_r19","EmployeeRecordViewComponent_div_8_div_23_option_2_Template","employmentType","_c6","EmployeeRecordViewComponent_div_8_div_24_li_2_Template","lengthOfEmployment","_r20","identityDetailsExpanded","_r21","identityGroup_r22","controls","identifier","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_td_2_span_1_Template","_r23","i_r24","index","employeeIdentifierChangeHandler","employeeIdentifierChangeWarning","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_template_3_span_1_Template","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_template_3_span_2_Template","identities","zeroPaddingLength","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_container_11_tr_1_Template","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_container_11_tr_2_Template","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_container_11_tr_3_Template","zeroPaddingRequired","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_td_2_Template","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_template_3_Template","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_ng_container_11_Template","clientIntegrationSource","notNMLS_r25","identifierType","description","EmployeeRecordViewComponent_div_8_div_33_ng_container_12_Template","_r26","userDetailsExpanded","_r27","userGUID","userStatus","status_r28","EmployeeRecordViewComponent_div_8_div_42_div_3_option_2_Template","_c7","createDate","EmployeeRecordViewComponent_div_8_div_42_div_1_Template","EmployeeRecordViewComponent_div_8_div_42_div_2_Template","EmployeeRecordViewComponent_div_8_div_42_div_3_Template","EmployeeRecordViewComponent_div_8_div_42_div_4_Template","EmployeeRecordViewComponent_div_8_div_42_div_5_Template","_r29","cancelClicked","EmployeeRecordViewComponent_div_8_div_43_i_5_Template","checkingIDForUniqueness","checkingEmailForUniqueness","loading","_r30","reloadComponentOnEditAndSave","submitNonPowerUserEdit","EmployeeRecordViewComponent_div_8_div_44_i_5_Template","canSubmitNonPowerUserEdit","EmployeeRecordViewComponent_div_8_i_3_Template","EmployeeRecordViewComponent_div_8_i_4_Template","EmployeeRecordViewComponent_div_8_div_7_Template","EmployeeRecordViewComponent_div_8_div_8_Template","EmployeeRecordViewComponent_div_8_div_9_Template","EmployeeRecordViewComponent_div_8_div_10_Template","EmployeeRecordViewComponent_div_8_div_11_Template","EmployeeRecordViewComponent_div_8_div_12_Template","EmployeeRecordViewComponent_div_8_div_13_Template","EmployeeRecordViewComponent_div_8_div_14_Template","EmployeeRecordViewComponent_div_8_div_15_Template","EmployeeRecordViewComponent_div_8_div_16_Template","EmployeeRecordViewComponent_div_8_div_17_Template","EmployeeRecordViewComponent_div_8_div_18_Template","EmployeeRecordViewComponent_div_8_div_19_Template","EmployeeRecordViewComponent_div_8_div_20_Template","EmployeeRecordViewComponent_div_8_div_21_Template","EmployeeRecordViewComponent_div_8_div_22_Template","EmployeeRecordViewComponent_div_8_div_23_Template","EmployeeRecordViewComponent_div_8_div_24_Template","EmployeeRecordViewComponent_div_8_div_25_Template","EmployeeRecordViewComponent_div_8_div_26_Template","EmployeeRecordViewComponent_div_8_i_29_Template","EmployeeRecordViewComponent_div_8_i_30_Template","EmployeeRecordViewComponent_div_8_div_33_Template","EmployeeRecordViewComponent_div_8_i_36_Template","EmployeeRecordViewComponent_div_8_i_37_Template","EmployeeRecordViewComponent_div_8_div_40_Template","EmployeeRecordViewComponent_div_8_div_41_Template","EmployeeRecordViewComponent_div_8_div_42_Template","EmployeeRecordViewComponent_div_8_div_43_Template","EmployeeRecordViewComponent_div_8_div_44_Template","EmployeeRecordViewComponent","onPopState","event","_employeeService","_employeePositionService","_activatedRoute","dialog","_toastr","_reusableFunctions","_formBuilder","_clientIntegrationSourceService","_clientIntegrationService","_domainService","currentUserStateService","impersonationService","router","cancelClickedEvent","employeeModEvent","zeroPaddingFlag","ngOnChanges","changes","currentValue","supervisor","find","e","filter","getAllEmployeeIdentityRecords","identifiers","employeeIdentifiers","addEmployeeIdentifiersFormControls","setSupervisorLFName","scroll","updateOn","isIdentifierUnique","concat","getUSAStatesJson","Array","from","Set","map","h","hierarchyKey","item","hierarchyManagementKey","costCenterIdentifier","nmlsIdentifier","nameAbbreviated","owner","ownerIdentifier","level","levelOrder","parentHierarchyKey","parentName","activeDate","inActiveDate","alternateEntityNumber","simpleNexusIdentifier","hierarchyListSettings","singleSelection","enableSearchFilter","showCheckbox","labelKey","primaryKey","top","escapeToClose","data","approvedDomains","onChanges","isLBAUser","fileMaxSizeInMB","currentUser","snapshot","url","path","clientShortName","isImpersonatingUser","isImpersonatingClient","populateFormControls","getClientIntegrationSources","sources","clientIntegrationSources","getCurrentUsersEmployeeRecord","record","getPrimaryEmployeeIdentifier","clearPhoneNumberIfInvalid","tmpHierarchy","impersonation","getClientStaffPositions","getZeroPadding","getClientStaffPositionDDL","positions","getClientIntegrationTypeByIntegrationType","integration","zeroPaddedIdentifier","zeroPaddedLen","valueChanges","val","setValue","calculateLengthOfEmployment","calculateEmploymentStatus","updateUserStatus","disable","epochDays","Math","floor","Date","now","millisecondsInDay","origPrimaryIdentifier","getDateFromDateTimeOffset","isUser","phoneNumber","getClientStaffPositionKey","clientStaffPosition","clientStaffPositionKey","contactInformation","validators","minLength","employeeIdentifierDetails","array","employeeDetails","userDetails","userCreateDate","forEach","integrationSource","identityGroup","isPrimaryForEmployeeIdentifier","EmployeeRecordViewRequirementsValidators","IdentitiferRequired","isPrimary","ZeroPaddingRequired","source","push","identity","employeeIdentifierKey","markAsDirty","endDate","remainingDaysOfEmployment","employmentYears","employmentMonths","toString","keyEvent","keyCode","href","reset","identifiersInThisFormMatch","saveIsSupervisor","formatValue","formatRawFormValue","hasValidDomain","isDomainValid","insertEmployee","updateSelectedEmployee","updateEmployeeRequest","primaryIdentifer","formValues","getRawValue","ex","identityValues","id","indexOf","integrationDescription","checkIdentifierForUniqueness","open","ConfirmationDialogComponent","title","message","afterClosed","toPromise","then","result","zeroPadEmployeeIdentifier","paddedIdentifier","padStart","checkEmailForUniqueness","setErrors","domainName","split","findIndex","isEmailUnique","isUnique","isIdentifierUniqueForSource","updateEmployeeSimpleContact","res","currentUrl","routeReuseStrategy","shouldReuseRoute","onSameUrlNavigation","navigate","i4","i5","i6","i7","i8","i9","i10","i11","i12","hostBindings","EmployeeRecordViewComponent_app_add_job_title_mapping_dialog_1_Template","EmployeeRecordViewComponent_div_5_Template","EmployeeRecordViewComponent_div_7_Template","EmployeeRecordViewComponent_div_8_Template","EmployeeRecordViewComponent_div_9_Template","KPIConfigService","getKPIConfig","saveKPIConfig","isDelete","mostRecentClientKPIKey","saveKPITimeboxing","currentClientKPIKey","stopDate","isTimeboxing","deleteKPITimeboxing","previousClientKPIKey","makePreviousKPINull","isAllDataValid","row","MatProgressBar_Conditional_2_Template","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","InjectionToken","MatProgressBar","_elementRef","_ngZone","_changeDetectorRef","_animationMode","defaults","_isNoopAnimation","_defaultColor","_value","_bufferValue","animationEnd","_mode","_transitionendHandler","observers","target","classList","contains","mode","run","color","_color","v","clamp","markForCheck","bufferValue","runOutsideAngular","nativeElement","addEventListener","ngOnDestroy","removeEventListener","_getPrimaryBarTransform","_isIndeterminate","_getBufferBarFlexBasis","t","ANIMATION_MODULE_TYPE","ɵcmp","type","hostAttrs","hostVars","numberAttribute","exportAs","standalone","features","styles","encapsulation","changeDetection","min","max","MatProgressBarModule","ɵmod","ɵinj","imports","MatCommonModule","KpiDistributionAnalysisService","getKpiDistributions","parameters","headers","HttpHeaders","setDistributionParameters","cleanedByMinAndMax","getCleanedData","isShowNonZeroDataOnly","parametes","fromDatePeriod","staffingKey","milestoneKey","category","toMilestoneKey","displayShort","kpiDisplayShort","ddbIdentifier","positionAbbv","customTag","kpiCustomTag","bpsDisplay","kpiBpsDisplay","Object","assign","btn_r2","$implicit","ctx_r2","distributionButtonClick","class","disabled","DistributionAnalyzeDialogComponent_div_0_ng_template_76_span_1_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_76_span_2_Template","dataItem_r4","bestScore","formatNumber","range1End","precision","kpiFormat","_r5","dataItem_r6","range2Start","updatingToValueChange","DistributionAnalyzeDialogComponent_div_0_ng_template_78_i_1_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_78_span_2_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_78_span_3_Template","range2StartError","rowIndex_r7","range2End","dataItem_r9","range3Start","_r11","range3End","DistributionAnalyzeDialogComponent_div_0_ng_template_80_i_1_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_2_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_3_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_5_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_6_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_7_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_8_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_10_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_11_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_12_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_span_13_Template","range3StartError","range3EndError","rowIndex_r12","_r13","dataItem_r14","range4End","DistributionAnalyzeDialogComponent_div_0_ng_template_82_i_1_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_82_span_6_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_82_span_7_Template","range4EndError","range4Start","rowIndex_r15","DistributionAnalyzeDialogComponent_div_0_ng_template_84_span_3_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_84_span_4_Template","dataItem_r16","range5Start","DistributionAnalyzeDialogComponent_div_0_button_71_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_76_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_78_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_80_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_82_Template","DistributionAnalyzeDialogComponent_div_0_ng_template_84_Template","clientKPIDescription","saveMessageColor","saveMessage","histogramCard","metrics","mean","median","std","count","outlierCount","boxplotCard","buttonOptions","gridData","_c8","_c9","_c10","DistributionAnalyzeDialogComponent","incomingData","_distributionService","_KPIService","_currentUserStateService","_impersonationService","_kpiConfigService","sortable","allowUnsort","sort","field","dir","dataCleaned","isErrorFree","dataToChild","isAuthorized","isLBASuperUser","isPowerUser","isPlatformUser","status","orderBy","total","configValueSet","action","NoDataActionType","pageStart","initializeLargeCard","distributionInfo","getDistributionValues","distributionParameters","givenMin","givenMax","interQuartileMax","interQuartileMin","formatVal","format","cards","card","hasData","isDataReady","updateCardData","outliersArray","setChartData","setButtonActiveState","componentTitle","chartTitleData","searchTerm","showTitle","accessToUrl","uniqueId","heightPercent","minHeight","histogramChartOptions","setHistogramChartOptions","bellCurveChartOptiions","setBoxplotChartOptions","chart","Highcharts","binInfoArray","splineData","obj","sumForMA","begin","end","dataFractionForMA","slice","calculateSumByProperty","y","toFixed","defaultSeriesType","borderWidth","borderColor","plotBorderWidth","plotBorderColor","height","credits","enabled","exporting","text","tooltip","backgroundColor","plotOptions","column","shadow","showInLegend","histogram","xAxis","numberOfBins","labels","style","fontSize","fontWeight","lineWidth","opposite","plotLines","width","label","rotation","yAxis","gridLineColor","tickColor","lineColor","series","visible","outliers","outlierArray","boxplotData","quartile1","quartile2","quartile3","inverted","scatter","boxplot","categories","formatter","colors","marker","fillColor","pointFormat","updateKpiGrid","checkForErrors","saveToDatabase","updatedData","dataBackToParent","removeSaveMessage","setTimeout","setKPIValues","kpiValues","deviationFactor","nextValueDifference","pow","a","b","changingFieldId","changeToFieldId","operator","fieldSequence","fieldId","fieldOrder","isAdjustable","errorFieldId","dataSet","errorCount","isDataValid","valueBefore","thisValue","valueAfter","cleanBtn","btn","applyBtn","saveBtn","resetBtn","MAT_DIALOG_DATA","DistributionAnalyzeDialogComponent_div_0_Template","error_r2","KpiVersionDialogComponent_ng_template_7_span_1_p_1_Template","dataItem_r3","KpiVersionDialogComponent_ng_template_7_span_1_Template","ctx_r3","isInvalid","getFriendlyDate","dataItem_r5","startDate","dataItem_r7","KpiVersionDialogComponent_ng_template_13_span_1_Template","KpiVersionDialogComponent_ng_template_13_span_2_Template","KpiVersionDialogComponent_ng_template_13_span_3_Template","KpiVersionDialogComponent_ng_template_13_span_4_Template","isPercentage","KpiVersionDialogComponent_ng_template_15_div_0_i_2_Template","rangeChange","KpiVersionDialogComponent_ng_template_15_div_0_span_9_Template","KpiVersionDialogComponent_ng_template_15_div_0_span_10_Template","_c11","KpiVersionDialogComponent_ng_template_15_div_1_span_1_Template","KpiVersionDialogComponent_ng_template_15_div_1_span_4_Template","KpiVersionDialogComponent_ng_template_15_div_1_span_5_Template","KpiVersionDialogComponent_ng_template_15_div_0_Template","KpiVersionDialogComponent_ng_template_15_div_1_Template","canEdit","dataItem_r11","KpiVersionDialogComponent_ng_template_17_div_0_i_2_Template","KpiVersionDialogComponent_ng_template_17_div_0_span_8_Template","KpiVersionDialogComponent_ng_template_17_div_0_span_9_Template","KpiVersionDialogComponent_ng_template_17_div_0_span_10_Template","KpiVersionDialogComponent_ng_template_17_div_0_span_16_Template","KpiVersionDialogComponent_ng_template_17_div_0_span_17_Template","targetError","KpiVersionDialogComponent_ng_template_17_div_1_span_1_Template","KpiVersionDialogComponent_ng_template_17_div_1_span_4_Template","KpiVersionDialogComponent_ng_template_17_div_1_span_5_Template","KpiVersionDialogComponent_ng_template_17_div_0_Template","KpiVersionDialogComponent_ng_template_17_div_1_Template","dataItem_r13","KpiVersionDialogComponent_ng_template_19_div_0_i_2_Template","KpiVersionDialogComponent_ng_template_19_div_0_span_3_Template","KpiVersionDialogComponent_ng_template_19_div_0_span_4_Template","_r12","KpiVersionDialogComponent_ng_template_19_div_1_span_1_Template","KpiVersionDialogComponent_ng_template_19_div_1_span_4_Template","KpiVersionDialogComponent_ng_template_19_div_1_span_5_Template","KpiVersionDialogComponent_ng_template_19_div_0_Template","KpiVersionDialogComponent_ng_template_19_div_1_Template","KpiVersionDialogComponent_ng_template_21_span_1_Template","KpiVersionDialogComponent_ng_template_21_span_2_Template","KpiVersionDialogComponent_ng_template_21_span_3_Template","KpiVersionDialogComponent_ng_template_21_span_4_Template","_r15","delete","KpiVersionDialogComponent_ng_template_23_i_0_Template","canDelete","day_r17","date","friendlyDate","KpiVersionDialogComponent","dialogRef","kpiConfigService","reusableFunctions","allResults","scrollable","canAddNewVersion","dialogData","dialogItem","allData","getFriendlyDateYearFirst","reloadGrid","undefined","previousValue","getSixMonthsDates","today","dates","i","getFullYear","getMonth","toLocaleDateString","getFriendlyDateMonthFirst","sixMonthDates","selectedDate","getScenarioProperties","scenarios","clientKPIKey","currentKPI","previousKPI","latestScenarioStartMonth","firstDayOfNextMonth","getTime","initialLoad","relevantScenarios","results","sortChange","destination","origin","isStart","amountToChange","determinePrecision","rangeNumber","Number","flipSelectedDate","ymcArr","month","day","getLastDate","lastDate","setDate","add","newScenario","JSON","parse","stringify","save","firstDayOfCurrentMonth","previousKPITime","isPreviousKPIPast","formData","formatDataForSave","dataItem","isNewVersion","saveEdit","relevantData","close","newVersion","ClientKPIKey","KPIMasterKey","kpiMasterKey","KPIMilestoneStaffingKey","kpiMilestoneStaffingKey","KPIMilestoneKey","kpiMilestoneKey","KPIMilestoneBPSKey","kpiMilestoneBPSKey","KPIMilestoneCustomKey","kpiMilestoneCustomKey","ClientKPIDescription","Target","ActiveDate","InActiveDate","IsActive","isActive","isDeleted","IsWeightedByLA","isWeightedByLA","NewVersion","Range1End","Range2Start","Range2End","Range3Start","Range3End","Range4Start","Range4End","Range5Start","StartDate","StopDate","viewQuery","GridComponent","KpiVersionDialogComponent_ng_template_7_Template","KpiVersionDialogComponent_ng_template_9_Template","KpiVersionDialogComponent_ng_template_11_Template","KpiVersionDialogComponent_ng_template_13_Template","KpiVersionDialogComponent_ng_template_15_Template","KpiVersionDialogComponent_ng_template_17_Template","KpiVersionDialogComponent_ng_template_19_Template","KpiVersionDialogComponent_ng_template_21_Template","KpiVersionDialogComponent_ng_template_23_Template","KpiVersionDialogComponent_mat_option_32_Template","_r2","isLocked","error_r4","KpiConfigOneComponent_ng_template_8_span_1_p_1_Template","KpiConfigOneComponent_ng_template_8_span_1_Template","ctx_r5","KpiConfigOneComponent_ng_template_12_i_1_Template","dataItem_r8","_r7","dataItem_r10","isWeightedByLADisabled","dataItem_r12","openDistributionAnalyzeDialog","ddbiAvailable","getAnalyticIconTooltip","KpiConfigOneComponent","cdr","distributionAnalyzeDialog","matDialog","userService","_toastService","updatedKPIfData","returnDataFromRetrieveDialog","isSuperUser","getUserByEmail","impersonateUser","loadGrid","detectChanges","grid","returnDataFromRetrieveDialog$","asObservable","updatedRowCount","closeDistributionAnalyzeDialog","unsubscribe","openTimeboxDialog","panelClass","KpiConfigOneComponent_ng_template_6_Template","KpiConfigOneComponent_ng_template_8_Template","KpiConfigOneComponent_ng_template_12_Template","KpiConfigOneComponent_ng_template_14_Template","KpiConfigOneComponent_ng_template_16_Template","KpiConfigThreeComponent_ng_template_7_span_1_p_1_Template","KpiConfigThreeComponent_ng_template_7_span_1_Template","KpiConfigThreeComponent_ng_template_9_span_1_Template","KpiConfigThreeComponent_ng_template_9_span_2_Template","KpiConfigThreeComponent_ng_template_9_span_3_Template","KpiConfigThreeComponent_ng_template_9_span_4_Template","KpiConfigThreeComponent_ng_template_11_i_1_Template","KpiConfigThreeComponent_ng_template_11_span_8_Template","KpiConfigThreeComponent_ng_template_11_span_9_Template","KpiConfigThreeComponent_ng_template_13_i_1_Template","KpiConfigThreeComponent_ng_template_13_span_7_Template","KpiConfigThreeComponent_ng_template_13_span_8_Template","KpiConfigThreeComponent_ng_template_13_span_9_Template","KpiConfigThreeComponent_ng_template_13_span_10_Template","KpiConfigThreeComponent_ng_template_13_span_12_Template","KpiConfigThreeComponent_ng_template_13_span_13_Template","KpiConfigThreeComponent_ng_template_15_i_1_Template","KpiConfigThreeComponent_ng_template_15_span_2_Template","KpiConfigThreeComponent_ng_template_15_span_3_Template","KpiConfigThreeComponent_ng_template_17_span_0_Template","KpiConfigThreeComponent_ng_template_17_span_1_Template","KpiConfigThreeComponent","KpiConfigThreeComponent_ng_template_7_Template","KpiConfigThreeComponent_ng_template_9_Template","KpiConfigThreeComponent_ng_template_11_Template","KpiConfigThreeComponent_ng_template_13_Template","KpiConfigThreeComponent_ng_template_15_Template","KpiConfigThreeComponent_ng_template_17_Template","dataItem_r2","KpiConfigFourComponent_ng_template_7_span_0_Template","KpiConfigFourComponent_ng_template_7_span_1_Template","KpiConfigFourComponent_ng_template_9_span_1_Template","KpiConfigFourComponent_ng_template_9_span_2_Template","KpiConfigFourComponent_ng_template_9_span_3_Template","KpiConfigFourComponent_ng_template_9_span_4_Template","KpiConfigFourComponent_ng_template_11_span_0_Template","KpiConfigFourComponent_ng_template_11_span_1_Template","KpiConfigFourComponent_ng_template_13_span_0_Template","KpiConfigFourComponent_ng_template_13_span_1_Template","KpiConfigFourComponent_ng_template_15_span_0_Template","KpiConfigFourComponent_ng_template_15_span_1_Template","KpiConfigFourComponent_ng_template_17_span_1_Template","KpiConfigFourComponent_ng_template_17_span_2_Template","KpiConfigFourComponent_ng_template_17_span_3_Template","KpiConfigFourComponent_ng_template_17_span_4_Template","KpiConfigFourComponent","KpiConfigFourComponent_ng_template_7_Template","KpiConfigFourComponent_ng_template_9_Template","KpiConfigFourComponent_ng_template_11_Template","KpiConfigFourComponent_ng_template_13_Template","KpiConfigFourComponent_ng_template_15_Template","KpiConfigFourComponent_ng_template_17_Template","t_r2","KpiConfigComponent_mat_tab_6_ng_template_1_Template","updateKPIfData","KpiConfigComponent_ng_container_7_app_kpi_config_one_2_Template","KpiConfigComponent_ng_container_7_app_kpi_config_three_3_Template","KpiConfigComponent_ng_container_7_app_kpi_config_four_4_Template","tab","isSaving","back","KpiConfigComponent_mat_button_toggle_group_13_span_4_Template","KpiConfigComponent_mat_button_toggle_group_13_span_5_Template","backDisabled","canSave","KpiConfigComponent","tabs","hasInvalidData","dataSaved","progress","getData","originalData","handleTabChange","nextDisabled","info","changedData","checkForChangedData","excludedProperties","isSameValue","obj1","obj2","excludedProperty","keys1","keys","key","includes","keys2","KpiConfigComponent_mat_tab_6_Template","KpiConfigComponent_ng_container_7_Template","KpiConfigComponent_ng_template_8_Template","KpiConfigComponent_span_12_Template","KpiConfigComponent_mat_button_toggle_group_13_Template","elseBlock_r7","UserCreateModel","ctx_r0","ConfirmationAlertDialogComponent","valueType","acceptTerm","rejectTerm","ConfirmationAlertDialogComponent_span_5_Template","emp_r2","sendEmail","i_r4","ctx_r4","removeEmail","EmailConfirmationDialogComponent","emailDialogRef","_router","_location","emails","filteredEmails","send","itemSize","updateEmailsFromDialog","emp","splice","emailIndex","filterByEmail","filterResult","emailTrack","EmailConfirmationDialogComponent_mat_list_item_5_Template","EmailConfirmationDialogComponent_span_16_Template","WelcomeEmailSendStatus","Pending","Expired","NotSent","Delivered","EmployeeTerminated","Unknown","UserPermissionsService","getPermissionSets","getPermissionSetName","permissionName","getClientPermissionSet","addPermissionSet","inputName","inputDesc","getUsersAssigned","permissionSetKey","deletePermissionSet","getPermissionSetPages","getHomePages","updatePermissionSetPages","pages","getEmployeeAssignment","getPositionPermissionSets","getPositionDefaults","updatePositionPermissionSets","body","UserExtendedAccessService","Email","noDataType","eAccess_r2","employee","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_1_span_6_Template","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_1_span_7_Template","roleOrder","roleName","hierarchyName","updateExtendedAccess","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_2_i_8_Template","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_2_i_9_Template","clientCustomRoles","roleListSettings","entities","entityListSettings","employees","employeeListSettings","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_1_Template","UserExtendedAccessMenuComponent_ng_container_30_tr_1_ng_container_2_Template","isPrimaryOwner","isDefaultAccess","UserExtendedAccessMenuComponent_ng_container_30_tr_1_Template","userExtendedAccess","UserExtendedAccessMenuComponent","hierarchyService","userExtendedAccessService","clientService","cancel","saved","inputSource","NoDataSourceType","table","enableFilterSelectAll","tempEmployees","user","getAccessLevelsForClient","getExtendedAccess","extendedAccessLoaded","defaultRoleOrder","levelEntities","userExtendedAccessOriginal","getCustomRoles","roles","userRole","r","clientCustomRoleName","getHierarchyEntities","getEntitiesByRoleOrder","_this","userExtendedAccessUpdate","extendedAccessKey","indexOfExisting","removeModelFromUpdateIfExists","originalModel","newModel","indexOfExistingUpdate","canSaveExtendedAccess","saveExtendedAccess","updateData","clientUserAccessKey","cancelMenu","UserExtendedAccessMenuComponent_tr_28_Template","UserExtendedAccessMenuComponent_tr_29_Template","UserExtendedAccessMenuComponent_ng_container_30_Template","UserExtendedAccessMenuComponent_p_31_Template","UserManagementComponent_div_3_ng_template_21_div_0_Template","noEmployees","isClientAdmin","welcomeEmailStatus","checkAll","emailAllCheckbox","checkChange","UserManagementComponent_div_3_ng_template_37_div_0_Template","canSeePowerUserValues","employeeSearchTerm","filterEmployees","activeUserFilter","kendoGrid_r3","exportToExcel","openChangeClientDialog","UserManagementComponent_div_3_span_16_Template","employeeSelectionChangeHandler","employeeSortChange","employeePageChange","onStateChange","UserManagementComponent_div_3_ng_template_21_Template","UserManagementComponent_div_3_ng_template_27_Template","UserManagementComponent_div_3_ng_template_29_Template","UserManagementComponent_div_3_ng_template_34_Template","UserManagementComponent_div_3_ng_template_36_Template","UserManagementComponent_div_3_ng_template_37_Template","UserManagementComponent_div_3_ng_template_39_Template","activeUserFilterOptions","readyToEmail","multipleEmails","employeeGridView","pageSize","skip","loadingEmployees","employeeSort","previousNext","exportFileName","getExcelExportData","permission_r12","permissionSetName","UserManagementComponent_div_4_select_50_option_1_Template","hasDefaultPermissions","clientPermissionSets","hasDefaultPermissionsChangeEvent","role_r15","_r14","lowerHierarchyLevelChangeHandler","UserManagementComponent_div_4_select_59_option_1_Template","hasDefaultAccess","_r16","hasDefaultAccessChangeEvent","hasGLAccess","glDataSelectChangeHandler","extendedAccessMenuToggle","_r19","isClientOwner","clientOwnerSelectChangeHandler","powerUserSelectChangeHandler","updateSendStatus","_r22","resetPassword","UserManagementComponent_div_4_tr_79_td_1_Template","UserManagementComponent_div_4_tr_79_td_2_Template","UserManagementComponent_div_4_tr_79_td_3_Template","UserManagementComponent_div_4_tr_79_td_4_Template","UserManagementComponent_div_4_tr_79_td_5_Template","lastLoginDate","alternateLoginEmail","hasAlternateLoginEmail","hasDefaultEmailChangeEvent","UserManagementComponent_div_4_select_50_Template","UserManagementComponent_div_4_span_51_Template","UserManagementComponent_div_4_span_52_Template","UserManagementComponent_div_4_span_54_Template","UserManagementComponent_div_4_select_59_Template","UserManagementComponent_div_4_span_60_Template","UserManagementComponent_div_4_span_62_Template","UserManagementComponent_div_4_tr_63_Template","UserManagementComponent_div_4_tr_64_Template","isDisabled","UserManagementComponent_div_4_tr_77_Template","UserManagementComponent_div_4_tr_78_Template","UserManagementComponent_div_4_tr_79_Template","positionName","canSeeClientOwnerValues","canExtendAccess","useSSO","_r24","goToPreviousStep","_r25","createUser","canCreateUser","editExistingUser","saveDisabled","extendedAccessMenuCanceled","extendedAccessMenuSaved","UserManagementComponent","employeeService","resetPasswordService","toastService","permissionService","pageSizes","mySelection","clientSort","extendAccessMenu","filters","logic","editUserForm","bind","chartCard","currentDate","setAuthenticationMethod","onFinalStep","stepNumber","showSelectEmployeeStep","getPermissionSetsForClient","getEmployeesForClient","getAuthenticationMethod","getAllEmployees","loadEmployeesIntoGridView","getAvailableToEmail","toUpperCase","welcomeEmailExpirationDate","empEmailsAvailable","filteredEmpEmailsAvailable","updateButtonAndCheckAll","employeeGrid","orderedData","filteredEmployees","setGridView","exportData","take","searchTermTokens","filterBy","ignoreCase","filterEmailsAvailable","anyFalse","anyTrue","username","sendWelcomeEmail","showAll","employeeIdentifier","selectedRows","prepareFinalStep","clientSearchTerm","newPassword","_asyncToGenerator","prepareEditUserStep","prepareCreateUserStep","_this2","emailAddressCheck","emailAddress","isLoginEmailAvailable","getUserByUsername","originalUser","impersonateClient","clientCustomRolesNoMinMax","shift","pop","unshift","clientKey","defaultPositionValues","customPermissionSetKey","editUser","requestPasswordReset","u","ou","clicked","defaultPositionRole","originalRole","newRole","hasView","isImpersonatingClientAdmin","confirmList","emailConfirmationDialogRef","componentInstance","kendoGrid","dateTime","getCurrentDateTimeStamp","excelExport","workbook","sheets","columns","c","autoWidth","saveAsExcel","UserManagementComponent_div_3_Template","UserManagementComponent_div_4_Template","UserManagementComponent_div_5_Template","UserManagementComponent_button_7_Template","UserManagementComponent_button_8_Template","UserManagementComponent_button_9_Template","UserManagementComponent_app_user_extended_access_menu_10_Template","TabComponent","change","selectedTab","validateSetDefaultIndex","setDefaultIndex","tabActivated","TabComponent_mat_tab_2_Template","ProfileAccountDetailsComponent","alertClickHandler","alertIcon","alertDescription","alertDate","readAllCheckbox","checkAllRead","record_r9","isRead","toggleRead","deleteChecked","dataStateChange","ProfileNotificationsComponent_ng_container_9_ng_template_11_Template","ProfileNotificationsComponent_ng_container_9_ng_template_13_Template","ProfileNotificationsComponent_ng_container_9_ng_template_15_Template","ProfileNotificationsComponent_ng_container_9_ng_template_16_Template","isLoadingAlertType","notificationGridView","notificationState","pageable","toggleCheckbox","alertTypeKey","isInactive","profileHasMobileNumber","useText","ProfileNotificationsComponent_ng_container_10_ng_template_14_div_0_Template","ProfileNotificationsComponent_ng_container_10_ng_template_14_p_checkbox_1_Template","ProfileNotificationsComponent_ng_container_10_ng_template_7_Template","ProfileNotificationsComponent_ng_container_10_ng_template_10_Template","ProfileNotificationsComponent_ng_container_10_ng_template_11_Template","ProfileNotificationsComponent_ng_container_10_ng_template_13_Template","ProfileNotificationsComponent_ng_container_10_ng_template_14_Template","alertGridView","alertTypeState","ProfileNotificationsComponent","notificationService","route","listOfLoansService","groupable","refresh","AlertValueTypes","updateNotificationGrid","getUserTypes","getMobileNumber","notificationAlert","getNotificationAlert","clearNotificationAlert","getNotifications","isLoading","filteredNotifications","alertEventKey","userNotifications","formatAlerts","loadUserNotifications","process","notifications","notification","insertAlertValue","formatAlertTypes","alertTypes","removeAlertPlaceholder","el","alertValue","replacementText","getUserNotificationTypes","loadAlertTypes","alert","updateAlertStatus","console","log","updateAlert","deleteNotification","deleteAlert","alertKey","alertType","openLoanModal","forceNavigation","destinationRouteUrl","defaultOnSameUrlNavigation","navigateByUrl","replaceUrl","catch","loanNumber","changeListOfLoans","loanNumbers","outlets","modal","deleteAllCheckbox","readyToDelete","multipleSelected","not","deleteCheckbox","userNotification","showConfirmationDialog","upsertUserAlertType","actionText","mobileNumber","err","clearGrid","TooltipDirective","ProfileNotificationsComponent_ng_container_9_Template","ProfileNotificationsComponent_ng_container_10_Template","oldPasswordError","newPasswordError","ChangePasswordComponent","authenticationService","passwordResetForm","setLoginEmail","changePasswordRequest","oldPassword","newPassword1","newPassword2","validator","checkNewPasswordIsConfirmed","doNotAllowRecyledPassword","notSame","newPasswordSameAsOld","formControl","changePassword","usernameError","property","incorrect","logForm","ChangePasswordComponent_div_11_Template","ChangePasswordComponent_div_18_Template","ChangePasswordComponent_div_19_Template","ChangePasswordComponent_div_26_Template","ChangePasswordComponent_i_30_Template","mainCancelClicked","mainSaveClicked","isMainSaveBtnDisabled","SideSheetComponent","isHierarchySaveBtnDisabled","mainCancelClick","mainSaveClick","sideSheetCancelClick","sideSheetSaveClick","sideSheetDeleteClick","isMainButtonSetHidden","isMainSaveButtonClicked","isSideSheetSaveButtonClicked","closeDialog","isEditDialogClose","sideSheetCancelClicked","sideSheetSaveClicked","sideSheetDeleteClicked","isSideSheetSaveBtnDisabled","isDeleteButtonHidden","sideSheetTitle","ngContentSelectors","SideSheetComponent_div_19_Template","HierarchyTileComponent","editClicked","isEditClicked","tileClass","tileIconClass","activeShadow","trimDescription","hideTitleIcon","hideEditIcon","editIconClick","tileName","fontIcon","fontSet","HierarchyTileComponent_div_5_Template","TileConnectorComponent","addNewOrCancel","isAddNewHidden","isCancelHidden","addNew","iconClicked","isAllBtnHidden","tile_r4","cancelButton","hideCancelButton","HierarchySetupComponent_div_4_div_1_tile_connector_1_Template","openEditSidesheet","isTopLevel","addNewButton","hideAddButton","HierarchySetupComponent_div_4_div_2_tile_connector_1_Template","tileData","HierarchySetupComponent_div_4_div_1_Template","HierarchySetupComponent_div_4_div_2_Template","hierarchyData","HierarchySetupComponent","_hierarchyService","isEditHierarchyDialogClose","setHierarchyLevels","sideSheetOpenStatus","permenatlyHideMainButtonSet","getEntities","corporateHierarchy","resetFormData","getCorporateHierarchy","getCorporateAllHierarchy","maxOrder","getMaxValue","minOrder","getMinValue","initializecorporateHierarchy","emitHierarchyLevels","sortcorporateHierarchy","hideAllNewAddButton","isMaxLevel","toCamelCase","isChanged","reference","roleNameOriginal","isActiveOriginal","descriptionOriginal","roleOrderOriginal","isRoleInUse","setButtonDissableStatus","hierarchy","isDataDifferent","tile","activeLevelList","openDialog","doesLevelContainEntities","setActiveStatusForCurrentTiles","closeNotUsingNewLevelTiles","setDataForEdit","setEditSaveButtonDissableStatus","showHiddenAddButton","ref","openNewEntrySidesheet","addTileposition","displayNewEntryTile","resetEditActiveStatus","addButtonToShow","activeHierarchies","hideNewEntryTile","currentTile","isAddnewClicked","otherTiles","addNewTile","display","getUpdatedHierarchiesAndSaveToDatabase","changedCorpHierarchy","changedCorpHierarchyAll","saveUpdatedHierarchies","isUpdated","updateHierarchyLevels","updateOriginalData","showMessage","cancelAllChanges","cancelSidesheetChanges","getNewReference","newreference","checkForDuplicatesAndUpdate","tileDataToCheckDuplicate","roleOrderToCheck","duplicateHierarchy","updatedHierarchy","copyOfCorporateHierarchy","nextRoleOrder","adjustAndReorder","updatedReference","updatedRoleOrder","tiles","addChangesToTiles","corporateHierarchyLevel","deleteSelectedLevel","deleteHierarchyLevels","deletedLevel","activeCustomRoleNames","msgType","isSuccess","timeout","dataChanged","isRoleNameValid","isRoleNameTooShort","isRoleNameUnique","isRoleNameInUse","saveNewHieararchyToDatabase","HierarchySetupComponent_div_4_Template","HierarchySetupComponent_div_11_Template","HierarchySetupComponent_div_12_Template","onKeydown","csvUploadSuccessHandler","csvUploadErrorHandler","csvUploadFailHandler","csvValidationErrorHandler","branch","HierarchyConfigComponent","isLevelSetUpButtonSetHidden","entitySort","showHierarchySetup","isButtonSetHidden","createView","editView","entitySearchTerm","parentSearchTerm","loadLevelsAndEntities","showCsvUploadDialog","fileMaxCount","uploadType","reloadLevels","reloadEntities","setCorporateEntity","corporateEntity","setParentToCorporateEntity","addOrEditEntityForm","isNextLevelUpCorporate","shouldParentBeCorporateEntity","levels","getRoleOrder","tabBarItems","setTopTabBarItems","activeTabIndex","addUnknownTabIfNeeded","unknownEntities","setNextButtonDisableStatus","isNextBtnDisabled","setSaveButtonDisableStatus","isSaveBtnDisabled","isCancelBtnDisabled","setCancelButtonDisableStatus","sideSheetStatus","parentKey","cancelEditCreateView","selectedEntity","filterEntities","greaterThanCurrentLevel","filteredEntities","onUnknownTab","parentGridView","entityGridView","loadEntitiesIntoGridView","entityPageChange","parentPageChange","loadParentEntitiesIntoGridView","parentSelectionChangeHandler","parent","forkJoin","separateOutUnknownEntities","entity","removeOwnerFromFormControl","switchToCsvUploadView","HierarchyConfigComponent_csv_upload_0_Template","ClientSubscriptionService","getSubscriptionTypes","getSubscriptionPage","updateSubscription","modules","cloneSubscription","clientSubscriptionTypeKey","cloneKey","getClientSubscriptionDetail","updateClientSubscription","subs","subscriptions","createType","editType","patch","record_r2","page","hasPage","clickUpdateModule","record_r5","record2_r7","ClientSubscriptionPageComponent_div_13_div_6_ng_template_5_Template","dataItem2_r8","ClientSubscriptionPageComponent_div_13_ng_template_5_Template","ClientSubscriptionPageComponent_div_13_div_6_Template","ClientSubscriptionPageComponent","clientSubscriptionService","edit","d","formatData","update","applicationPageTypeKey","mod","subMod","parentApplicationPageKey","applicationPageKey","updateGrid","gridView","editSubscription","m","itemIndex","ClientSubscriptionPageComponent_ng_template_12_Template","ClientSubscriptionPageComponent_div_13_Template","LbaSubscriptionsComponent_ng_container_7_ng_template_9_span_0_Template","LbaSubscriptionsComponent_ng_container_7_ng_template_9_span_1_Template","toggleEditMenu","toggleAddMenu","LbaSubscriptionsComponent_ng_container_7_ng_template_9_Template","LbaSubscriptionsComponent_ng_container_7_div_10_Template","sub_r11","record_r10","LbaSubscriptionsComponent_ng_container_8_ng_template_15_mat_option_1_Template","subscriptionType","LbaSubscriptionsComponent_ng_container_8_span_4_Template","search","filterSearch","clientPageChange","LbaSubscriptionsComponent_ng_container_8_ng_template_15_Template","gridViewClients","selectedSubscription","onItemSelect","subscriptionListSettings","newSubscriptionModel","setNameField","LbaSubscriptionsComponent_div_9_div_17_Template","LbaSubscriptionsComponent_div_9_div_18_Template","cloneFlag","LbaSubscriptionsComponent_div_9_angular2_multiselect_31_Template","LbaSubscriptionsComponent_div_9_p_32_Template","addSubscription","LbaSubscriptionsComponent_div_9_i_40_Template","hasName","nameField_r14","editSubscriptionModel","LbaSubscriptionsComponent_div_10_p_32_Template","LbaSubscriptionsComponent","addMenuOpen","editMenuOpen","getTypes","getClients","clients","originalClients","loadClientsIntoGridView","filteredClients","getPages","subscriptionPages","subName","subDesc","logTab","sub","s","clientSubscriptionKey","LbaSubscriptionsComponent_mat_tab_6_Template","LbaSubscriptionsComponent_ng_container_7_Template","LbaSubscriptionsComponent_ng_container_8_Template","LbaSubscriptionsComponent_div_9_Template","LbaSubscriptionsComponent_div_10_Template","convertToUser","employee_r3","labelClick","welcomeEmail","UserActionsDialogComponent","userActionsDialog","userCount","employeeText","userText","actionTextProper","actionTextPastTense","dialogTitle","showWelcomeEmailCheck","BulkUserActions","ConvertFromEmployee","updateLabels","convertEmployees","convertEmployeesAction","users","createBulkUsers","employeeToggle","toggle","updateUserCount","checked","UserActionsDialogComponent_mat_list_item_5_Template","UserActionsDialogComponent_div_11_Template","EmployeeComponent_div_1_ng_template_28_div_0_Template","onSelectHeaderChange","selectHeaderState","isSelected","activeEmployeeFilter","switchToConvertUsersView","switchToAddEmployeeView","EmployeeComponent_div_1_ng_template_28_Template","EmployeeComponent_div_1_ng_template_38_Template","EmployeeComponent_div_1_ng_template_39_Template","EmployeeComponent_div_1_ng_template_52_Template","quickview","activeEmployeeFilterOptions","disableCreateUserButton","closeEmployeeQuickview","EmployeeComponent_div_2_div_6_Template","EmployeeComponent_div_2_div_7_Template","recordView","openRecordView","handleCancelClicked","handleEmployeeModEvent","EmployeeComponent","queryParams","loadEmployeesForClient","p","eventsSubscription","events","employeesSubModuleClickedHandler","navigationTrigger","createEmployeeView","employeeIdToRetrieve","allEmployeesForClient","showEmployeeQuickview","createEmptyEmployee","nmls","formattedHireDate","formatDate","formattedTermDate","convertList","actionToggle","EmployeeComponent_div_1_Template","EmployeeComponent_div_2_Template","EmployeeComponent_app_employee_record_view_4_Template","defaultPermissions","PermissionSetUsersComponent_ng_container_0_ng_template_10_Template","permission","PermissionSetUsersComponent","permissionSetService","PermissionSetUsersComponent_ng_container_0_Template","record_r1","icon","record_r3","clickGrantAccess","column_r6","checkFlag","record2_r8","routerURL","PermissionSetPagesComponent_div_6_ng_template_4_Template","PermissionSetPagesComponent_div_6_ng_template_6_Template","dataItem2_r10","PermissionSetPagesComponent","service","updatePage","pg","elements","querySelector","getElementsByTagName","mainCheck","className","click","editPermission","DOCUMENT","PermissionSetPagesComponent_ng_template_2_Template","PermissionSetPagesComponent_ng_template_4_Template","PermissionSetPagesComponent_ng_template_5_Template","PermissionSetPagesComponent_div_6_Template","PermissionSetManagementComponent_tr_26_span_4_span_2_Template","access_r4","i_r5","row_r3","access","showAssignedUsers","numUsers","clickPermissionSet","PermissionSetManagementComponent_tr_26_span_4_Template","PermissionSetManagementComponent_tr_26_span_5_Template","PermissionSetManagementComponent_tr_26_span_7_Template","PermissionSetManagementComponent_tr_26_span_8_Template","PermissionSetManagementComponent_tr_26_span_10_Template","PermissionSetManagementComponent_tr_26_span_11_Template","tab_r9","PermissionSetManagementComponent_div_27_mat_tab_group_18_ng_container_1_Template","moduleTabs","tab_r11","clickTab","module_r13","PermissionSetManagementComponent_div_27_ng_container_22_app_permission_set_pages_1_Template","isActiveTab","PermissionSetManagementComponent_div_27_div_28_div_1_Template","setName","PermissionSetManagementComponent_div_27_div_29_div_1_Template","PermissionSetManagementComponent_div_27_div_30_div_1_Template","PermissionSetManagementComponent_div_27_span_3_Template","PermissionSetManagementComponent_div_27_span_4_Template","exit","typeName","PermissionSetManagementComponent_div_27_mat_tab_group_18_Template","PermissionSetManagementComponent_div_27_button_20_Template","PermissionSetManagementComponent_div_27_ng_container_22_Template","PermissionSetManagementComponent_div_27_div_27_Template","PermissionSetManagementComponent_div_27_div_28_Template","PermissionSetManagementComponent_div_27_div_29_Template","PermissionSetManagementComponent_div_27_div_30_Template","smallScreen","moduleData","savingData","PermissionSetManagementComponent","Matdialog","newPermissionMenu","isPageLoaded","moduleTab","onResize","getPageData","innerWidth","pageData","formatPageData","moduleDataOriginal","module","searchTab","editPermissionSet","newValue","addOrRemoveFromUpdateData","parentModule","anySubModulesEnabled","subModule","PermissionSetManagementComponent_tr_24_Template","PermissionSetManagementComponent_tr_25_Template","PermissionSetManagementComponent_tr_26_Template","PermissionSetManagementComponent_div_27_Template","permission_r7","role_r8","page_r9","RoleManagementComponent_ng_container_8_ng_container_24_tr_1_ng_container_22_option_1_Template","position_r5","permissionSetPages","updatePositionPermissionMapping","RoleManagementComponent_ng_container_8_ng_container_24_tr_1_option_14_Template","RoleManagementComponent_ng_container_8_ng_container_24_tr_1_option_17_Template","homePageKey","RoleManagementComponent_ng_container_8_ng_container_24_tr_1_ng_container_22_Template","jobTitles","permissionSetData","hierarchyRoleLevels","RoleManagementComponent_ng_container_8_ng_container_24_tr_1_Template","allPositionsData","RoleManagementComponent_ng_container_8_tr_23_Template","RoleManagementComponent_ng_container_8_ng_container_24_Template","savePositionPermissionMapping","cancelPositionPermissionMapping","positionPermissionMappingUpdateData","option_r11","pos_r14","row_r13","RoleManagementComponent_ng_container_10_ng_container_27_ng_container_1_tr_1_option_7_Template","positionTypes","RoleManagementComponent_ng_container_10_ng_container_27_ng_container_1_tr_1_Template","positionMappingData","RoleManagementComponent_ng_container_10_ng_container_27_ng_container_1_Template","RoleManagementComponent_ng_container_10_ng_container_27_ng_template_2_Template","noJobFound_r15","searchTerms","selectedItem","filterPosition","RoleManagementComponent_ng_container_10_option_14_Template","RoleManagementComponent_ng_container_10_tr_26_Template","RoleManagementComponent_ng_container_10_ng_container_27_Template","searchFilterPositionOptions","RoleManagementComponent","employeePosition","pageSizeJobMapping","skipJobMapping","loadPositionConfiguration","getPositionPermissions","getHierarchyRoleLevels","loadJobMapping","getPositionMappingData","unloadPositionConfiguration","allPositionsDataOriginal","unloadJobMapping","originalPositionMappingData","getEmployeePositionMapping","getHierarchyLevels","permissionSetPageModels","charAt","getHomePagesByPermission","positionModel","permissions","existingItem","job","updateItem","pageChangeJobMapping","RoleManagementComponent_mat_tab_6_Template","RoleManagementComponent_ng_container_8_Template","RoleManagementComponent_ng_container_9_Template","RoleManagementComponent_ng_container_10_Template","BranchProjectionsConfigComponent_tr_19_span_2_Template","BranchProjectionsConfigComponent_tr_19_span_4_Template","currentYearOpenDate","currentYearClosingDate","BranchProjectionsConfigComponent","projectionService","projectionsDateForm","currentYear","getUTCFullYear","getBranchProjectionOpenCloseDates","significantDatesHandler","openDate","closingDate","nextYearOpenDate","nextYearClosingDate","setOpenClosedDates","formatFormData","projectionYear","BranchProjectionsConfigComponent_tr_19_Template","BranchProjectionsConfigComponent_i_32_Template","col_r1","fieldName","col_r2","DynamicDialogComponent_tr_7_td_1_Template","tableColumns","DynamicDialogComponent","tableData","columnList","crossClicked","DynamicDialogComponent_th_6_Template","DynamicDialogComponent_tr_7_Template","CsvUploadService","uploadCsv","reportProgress","uploadFile","file","uploadPath","FormData","append","getCurrentUploadedDataAsCsv","fileName","returnData","responseType","getFileUploadStatus","downloadCsvFile","upload_r2","confirmDownloadType","FileUploadIntegrationComponent_ng_container_12_p_progressbar_6_Template","uploadElement_r4","onUpload","downloading","uploading","tab_r5","FileUploadIntegrationComponent_mat_tab_16_ng_template_1_Template","FileUploadIntegrationComponent","_csvUploadService","_dialog","messageService","confirmationService","_customMatTableService","uploadBranchesUrl","uploadEmployeesUrl","uploadGeneralLedgerUrl","uploadOptions","tabIndex","logTabIndex","requiredFileType","fileManagementTabs","fileUploadTypeLogTab","isUploaded","initiateTableProperties","columnInfoList","dataType","isSortable","headerAlignment","dataAlignment","isHyperlink","cellClickEventType","customTableInfo","tableId","tableHeight","bandColorList","dataHandleInUiSide","showSummary","cellClickedEvent","dataString","cellData","uploadData","columnInfo","popupDialogData","ColumnName","Value","minWidth","maxHeight","maxWidth","handleLogTabChange","refreshCustomMatTable","setLogTableData","logData","preStatus","initialCheckStatus","postStatus","uploadStatus","records","getLogTab","uploadOption","confirm","acceptLabel","rejectLabel","rejectButtonProps","severity","accept","onDownload","reject","saveAs","summary","detail","life","getCurrentlyAvailableData","elementRef","files","clear","isHeaderValid","dataMessage","FileUploadIntegrationComponent_ng_container_12_Template","FileUploadIntegrationComponent_mat_tab_16_Template","HolidayService","getHolidays","updateHoliday","upModel","convertHolidayModelToHolidayUpdateModel","insertHoliday","convertHolidayModelToHolidayInsertModel","deleteHoliday","holidayModel","deleteModel","convertHolidayModelToHolidayDeleteModel","formatDeleteModel","holidayKey","holidayDate","holiday","lastMod","lastModUserKey","nbrOfHours","userKey","HolidayHoursComponent_ng_template_22_div_0_Template","noHolidaysForCompany","selectedHoliday_r3","selectedHoliday_r4","formGroup","invalid","isNew_r5","HolidayHoursComponent","holidayService","gridState","holidayEntrySort","cShortName","showAddButton","holidays","holidayEntries","loadHolidaysIntoGridView","holidayPageChange","reloadHolidaysIntoGridView","view","filterHolidays","holidaySearchTerm","filteredHolidays","addHoliday","closeEditor","UntypedFormGroup","compose","addRow","addHandler","sender","editHandler","rowIndex","pattern","editedRowIndex","editRow","cancelHandler","saveHandler","isNew","product","closeRow","removeHandler","HolidayHoursComponent_ng_template_22_Template","HolidayHoursComponent_ng_template_24_Template","HolidayHoursComponent_ng_template_26_Template","HolidayHoursComponent_ng_template_29_Template","HolidayHoursComponent_ng_template_30_Template","DeleteLoanService","getPendingLoans","deleteLoan","put","LoanNumber","cellClickHandler","deleteHandler","requestedByEmail","DeleteLoanComponent_ng_template_14_button_0_Template","DeleteLoanComponent_ng_template_14_span_1_Template","DeleteLoanComponent","siteSearchService","deleteLoanService","pendingLoans","loadData","getSiteSearchResults","getSortField","mergedResults","mergeArrays","totalRows","sortCol","arr1","arr2","openPage","searchRows","DeleteLoanComponent_ng_template_11_Template","DeleteLoanComponent_ng_template_14_Template","LBASuperUserService","getLBAUsers","addLBAUser","isSuperAdmin","isDemoUser","updateUser","getAllPlatformUsers","requestType","changeEnabled","showEnabled","userType_r6","user_r5","userType","LbaUsersComponent_ng_container_39_tr_1_mat_option_6_Template","LbaUsersComponent_ng_container_39_tr_1_button_10_Template","LbaUsersComponent_ng_container_39_tr_1_span_11_Template","LbaUsersComponent_ng_container_39_tr_1_Template","lbaUsersDisplay","errorMessage","userType_r9","userEmail","userPassword","newUserModel","LbaUsersComponent_div_42_span_14_Template","LbaUsersComponent_div_42_mat_option_21_Template","saveUser","LbaUsersComponent_div_42_div_37_Template","userAdded","LbaUsersComponent","_superUserService","_resetPasswordService","_toast","_reportingService","lbaUsers","filterDisplayByEnabled","newUser","emailSearch","columnId","columnIdName","columnName","setQuickExportData","arrayToFilter","LbaUsersComponent_div_15_Template","LbaUsersComponent_ng_container_39_Template","LbaUsersComponent_ng_template_40_Template","LbaUsersComponent_div_42_Template","noUserFound_r10","companyFullModel","clientDetails","shortName","companyURL","compenSafeUrl","hubSpotUrl","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_div_7_div_6_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_div_7_ng_container_11_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_div_7_ng_container_16_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_div_7_ng_container_21_Template","fullName","isLBA","clientAccountStatus","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_div_7_Template","addBlankIdentity","submitIdentityForm","cancelEditedIdentities","editIdentities","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_3_ng_container_3_Template","hmdaIdentityControlsArray","i_r9","removeIdentity","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_3_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_4_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_6_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_7_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_9_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_ng_container_10_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_div_12_Template","hmdaIsEditing","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_ng_container_13_Template","hmdaIdentityForm","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_2_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_3_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_ng_container_4_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_4_ng_container_3_Template","nmlsIdentityControlsArray","j_r15","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_3_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_4_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_6_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_7_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_9_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_ng_container_10_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_div_12_Template","nmlsIsEditing","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_3_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_4_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_5_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_ng_container_17_Template","nmlsIdentityForm","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_6_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_ng_container_11_Template","clientHmdaIdentities","clientNmlsIdentities","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_div_4_Template","updatePageFromSideBar","CompanyAccountDetailsComponent_mat_card_0_span_1_Template","tabChangeHandler","CompanyAccountDetailsComponent_mat_card_0_ng_container_4_Template","CompanyAccountDetailsComponent_mat_card_0_ng_container_5_Template","CompanyAccountDetailsComponent_mat_card_0_div_7_Template","CompanyAccountDetailsComponent_mat_card_0_div_8_Template","dataReady","isEditMenuOpen","tabActiveIndex","fromClient","CompanyAccountDetailsComponent","integrationSourceService","clientContactsService","companyModEvent","isMainMenuQuickOpen","editingMain","editMenuTitle","isEditing","isAdding","addOrEditClientForm","getFullModelForClient","createIdentityForms","getAccountDetails","accountDetails","subscriptionTypeList","hubspotUrl","companyUrl","editBasicForm","updateClient","formResult","checkClientHasCompenSafe","getContactsByName","getClientIdentifierRecords","getClientIntegrationSourcesByName","details","contacts","leiIds","nmlsIds","enable","createHmdaIdentityForm","createNmlsIdentityForm","populateIdentityControls","createIdentityGroup","setDeleted","getThisIsIsNewControl","getThisIdSetDeletedControl","getThisIdIdentityControl","getThisIdActiveDateControl","getThisIdInActiveDateControl","removeAt","deleteClientIdentifier","insertClientIdentifier","identifierOld","updateClientIdentifier","compenSafeIdentifiers","hubSpotIdentifiers","grp","selectedCompanyDetails","CompanyAccountDetailsComponent_mat_card_0_Template","IntegrationSourceHelper","setupSources","clientModel","clientInfo","primaryEmployeeSource","getPrimaryEmployeeSource","primaryBranchSource","getPrimaryBranchSource","technicalEmail","getTechnicalContactEmail","getPrimaryContactEmail","idHmdaLEI","getHmdaLeiId","idNMLS","getNmlsId","idAnalytics","getIdAnalytics","isPrimaryForBranchIdentifier","contact","contactTypeAbbr","contactValue","ClientIntegrationTypeService","_http","getClientIntegrationTypes","errorMessageStyle","control","optionalInput","ValidatorComponent_div_0_div_1_Template","ValidatorComponent_div_0_div_2_Template","ValidatorComponent_div_0_div_3_Template","ValidatorComponent_div_0_div_4_Template","ValidatorComponent_div_0_div_5_Template","ValidatorComponent_div_0_div_6_Template","ValidatorComponent_div_0_div_7_Template","ValidatorComponent_div_0_div_8_Template","ValidatorComponent_div_0_div_9_Template","ValidatorComponent_div_0_div_10_Template","rightOffset","leftOffset","topOffset","bottomOffset","hasZero","shortNameNotUnique","clientKeyNotUnique","zeroPaddingEntityRule","ValidatorComponent","showOnTouch","ValidatorComponent_div_0_Template","ClientEditContactsComponent_div_3_div_2_Template","ClientEditContactsComponent_div_3_div_3_Template","ClientEditContactsComponent_div_3_div_4_Template","ClientEditContactsComponent_div_3_div_6_Template","ClientEditContactsComponent_div_3_div_7_Template","ClientEditContactsComponent_div_3_div_8_Template","ClientEditContactsComponent","clientContactService","initControlsFlag","formGroupEvent","constructGroup","hasOwnProperty","initControls","patchValues","getContactTypes","types","contactTypes","patchValue","clientInfoSources","ClientEditContactsComponent_div_3_Template","updateShortName","updateClientKey","entityClassification_r4","dataSwapKey","subscriptionType_r5","ClientEditDetailsComponent_div_3_div_63_option_2_Template","nvLite","updateNvLiteSettings","use_Hourly_KPI","ClientEditDetailsComponent_div_3_mat_form_field_6_Template","ClientEditDetailsComponent_div_3_mat_form_field_8_Template","ClientEditDetailsComponent_div_3_option_15_Template","ClientEditDetailsComponent_div_3_mat_form_field_41_Template","ClientEditDetailsComponent_div_3_div_62_Template","ClientEditDetailsComponent_div_3_div_63_Template","ClientEditDetailsComponent_div_3_div_67_Template","ClientEditDetailsComponent_div_3_div_68_Template","ClientEditDetailsComponent_div_3_div_72_Template","ClientEditDetailsComponent_div_3_div_73_Template","ClientEditDetailsComponent_div_3_div_77_Template","ClientEditDetailsComponent_div_3_div_78_Template","entityClassificationList","entityClassification","cS_CompanyID","contractDate","loanSeedDate","isLoginDisabled","ClientEditDetailsComponent","clientsService","formatDates","setDefaults","getAndSetSuggestedClientKey","goLiveDate","is_nvlite","customerNumber","subscriptionTypeListCopy","setAvailableSubscriptionTypes","lgDataSwapKey","setDefaultAuth","setDefaultHourlyKPI","setIsNvLite","setDefaultActiveStatus","getSuggestedClientKey","suggestedKey","isClientShortNameUnique","isClientKeyUnique","clickDisableAllUsers","ClientEditDetailsComponent_div_3_Template","checkbox_r3","clickIsPrimary","employeeIdentity_r4","i_r7","clickIdentifierType","identifierType_r8","ClientEditIdentitiesComponent_div_3_div_2_Template","ClientEditIdentitiesComponent_div_3_div_3_Template","ClientEditIdentitiesComponent_div_3_div_4_Template","ClientEditIdentitiesComponent_div_3_div_6_Template","ClientEditIdentitiesComponent_div_3_div_7_Template","ClientEditIdentitiesComponent_div_3_div_8_Template","ClientEditIdentitiesComponent_div_3_div_10_Template","ClientEditIdentitiesComponent_div_3_div_11_Template","ClientEditIdentitiesComponent_div_3_div_12_Template","ClientEditIdentitiesComponent_div_3_tr_31_Template","ClientEditIdentitiesComponent_div_3_button_37_Template","menu_r9","clientIdentifierTypesNonEntry","ClientEditIdentitiesComponent","currentEmployeeIdentifiers","getClientIdentifierTypeByClientKey","patchEmployeeIdentifiers","getClientIdentifierTypeSelectNonEntryByClientKey","getClientIdentifierType","integrationSourceDesc","getClientIdentifierTypes","clientIdentifierTypes","employeeIdentifierGroup","buildEmployeeIdentifiersGroup","identifierDescription","clientIntegrationSourceKey","_disabled","_checked","ClientEditIdentitiesComponent_div_3_Template","EditRequirementsValidators","IntegrationOptionType","Compensafe","LosTalker","None","originalSource","SourceNameUnique","newSourceName","existingSource","ZeroPadding","ZeroPaddingEntityRule","val_r1","ClientEditIntegrationsComponent_form_2_div_7_select_7_option_1_Template","val_r2","ClientEditIntegrationsComponent_form_2_div_7_select_8_option_1_Template","integrationOptions","val_r4","ClientEditIntegrationsComponent_form_2_div_7_div_11_option_5_Template","getZeroPaddedIdentifierTitle","integration_r5","val_r6","ClientEditIntegrationsComponent_form_2_div_7_div_18_option_5_Template","getCSExportTitle","val_r7","ClientEditIntegrationsComponent_form_2_div_7_div_19_option_5_Template","getXMLExistingSelectTitle","ClientEditIntegrationsComponent_form_2_div_7_select_7_Template","ClientEditIntegrationsComponent_form_2_div_7_select_8_Template","ClientEditIntegrationsComponent_form_2_div_7_div_11_Template","ClientEditIntegrationsComponent_form_2_div_7_div_18_Template","ClientEditIntegrationsComponent_form_2_div_7_div_19_Template","i_r8","getIngestTitle","tmp_17_0","ClientEditIntegrationsComponent_form_2_div_7_Template","integrations","integrationSettings","integrationsArray","ClientEditIntegrationsComponent","clientIntegrationService","clientIntegrationTypeService","isNVLite","doEmployeesExistForClient","doHierarchyEntitiesExistForClient","setIntegrationTypes","clientIntegrationTypes","setIntegrationFields","addIntegrationsForSource","patchIntegrations","clientKeyValue","getClientIntegrations","currentIntegrations","populateIntegrationArray","integrationType","currentIntegration","clientIntegrationTypeKey","integrationTypeKey","integrationValues","patchIntegrationValues","clientIntegrationType","ingestOption","integrationActive","isLoansIngest","integrationOption","clientIntegrationKey","ingestSelect","csExportSelect","compensafeExport","xmlExistingSelect","new_Records_Only","zeroPaddedSelect","useZeroPaddedSelect","useZeroPadding","useCSExportSelect","useCompensafeExport","useXMLExistingSelect","filteredBranchSources","integrationSourceList","sourceTypeList","canBePrimaryForBranch","isAlternateForEmployeeIdentifier","filteredEmployeeSources","canBePrimaryForEmployee","clientIntegration","inputWord","getInputWord","yes","no","ClientEditIntegrationsComponent_form_2_Template","isSaveDisabled","ClientEditScreenComponent","setIsNVBase","buildDetailsGroup","addControl","buildContactsGroup","buildIdentifiersGroup","buildIntegrationsGroup","closeForm","sendResultToParent","useSSOValue","useHourlyKPIValue","loanSeedDateValue","formatClientDates","parseInt","primaryEmailValue","technicalEmailValue","idNMLSValue","idHmdaLEIValue","employeeIdentifiersArray","savedClient","formatContacts","formatIdentities","upsertClient","uploadIntegrations","arrayControls","assignIntegrationTypeKeys","upsertClientIntegration","primary","techAdmin","contactType","lei","formValue","ClientEditScreenComponent_span_2_Template","ClientEditScreenComponent_span_5_Template","ClientEditScreenComponent_ng_container_24_Template","ClientEditScreenComponent_ng_container_25_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_22_div_0_Template","noClients","calculateStatus","record_r6","record_r7","grid_r4","addClientHandler","handleCellClick","LbaClientsComponent_ng_container_0_div_2_ng_template_22_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_28_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_30_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_32_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_34_Template","LbaClientsComponent_ng_container_0_div_2_ng_template_43_Template","selectedClientFullModel","LbaClientsComponent_ng_container_0_div_2_Template","LbaClientsComponent_ng_container_0_div_3_Template","LbaClientsComponent_ng_container_0_ng_container_6_Template","createClientView","isSideViewOpen","LbaClientsComponent","_clientsService","_clientContactService","loadClients","getAllClientAccountDetails","client","filterClients","formattedGoLiveDate","formattedActiveDate","calculatedStatus","columnIndex","recordClicked","showClientQuickview","selectedClient","closeClientQuickview","isDateInTheFuture","LbaClientsComponent_ng_container_0_Template","ClientProductService","submitChanges","changedOrAddedProducts","getClientProducts","getProductTypes","ClientProductMappingComponent","_clientProductService","_reportService","saveBtnDisabled","checkForLBAClient","getProductData","filterable","dropdownInfo","valueKey","isCellDependentDdl","widthPercent","decimalPlaces","setNoDataScreen","productTypes","clientProducts","products","contentChanged","colInf","itemList","dropdownSelectEvent","prodType","typeKey","cellValue","productType","productCategory","productTypeChangeHandler","changedProduct","isDirty","setExportColumnsAndExportToExcel","field_r1","getHeaderStyles","tableRow","node","tagName","DragndropTableComponent","renderer","zone","isDragable","resetData","emitModifidedObjectArray","selectedNodePos","isNodePosSet","isNodeRemoved","dataObjectArrayDragZoneCopy","dataObjectArray","setGridData","dataObjectArrayInternalUse","updateTheOrder","sortArray","orderIndex","currentSubscription","handleDragAndDrop","rowCallback","context","dragging","Subscription","draggedItemIndex","querySelectorAll","setAttribute","dragStart","fromEvent","dragOver","dragEnd","mouseOver","mouseDown","mouseUp","pipe","tap","dataTransfer","setData","dropIndex","closest","predicate","parentNode","DragndropTableComponent_kendo_grid_column_3_Template","tab_r1","clickCancel","saveChanges","tab_r4","isCancelDisabled","MilestonesEventsComponent_div_8_div_1_Template","tabIdex","checkBoxToggle","allowInactivate","isAuthorisedUser","MilestonesEventsComponent_ng_container_10_div_2_ng_template_4_Template","MilestonesEventsComponent_ng_container_10_spin_loader_1_Template","MilestonesEventsComponent_ng_container_10_div_2_Template","milestones","getReSortedArray","milestonesToSetOrder","staffPosition","position_r10","modelChange","MilestonesEventsComponent_ng_container_12_ng_template_5_select_2_option_1_Template","positionList","MilestonesEventsComponent_ng_container_12_ng_template_5_span_1_Template","MilestonesEventsComponent_ng_container_12_ng_template_5_select_2_Template","allowSetPrimaryOwner","MilestonesEventsComponent_ng_container_12_ng_template_5_Template","primaryOwnerGridData","MilestonesEventsComponent","_milestoneService","milestoneTabs","roleSettings","selectAllText","unSelectAllText","classes","badgeShowLimit","milestoneCheckChangedData","milestoneChangedOwnerdData","isDataInnitiated","milestonesReodered","setButtons","getPositionsByClient","getMilestoneModelsByClient","setCheckedGridData","milestonesCheckedData","milestoneOrder","setPrimaryOwnerGridData","sortPrimaryOwnerGridData","milestonesPrimaryOwner","updateMilestonesToSetOrder","allowSorting","updateMilestonesToPrimaryOwner","activeTab","milestone","isChecked","updateCheckedData","updateMilestone","checkInf","saveCheckedMilestoneOrderNumber","saveReorderedMilestones","updateMilestoneOwner","changedValue","ownerInf","editMilestonesOrder","editedMilestones","activeMilestones","itm","toOrderMilestone","milestoneReOderedList","getSortedMilestoneList","saveOrdering","sortedMilestones","mst","milston","MilestonesEventsComponent_ng_container_6_Template","MilestonesEventsComponent_div_8_Template","MilestonesEventsComponent_ng_container_10_Template","MilestonesEventsComponent_ng_container_11_Template","MilestonesEventsComponent_ng_container_12_Template","LbaLoginActivityComponent","intl","datePipe","groups","range","start","addMonths","animation","duration","setTimeZoneByUser","timeZoneGMTVariance","getLoginActivity","filteredData","groupedData","friendlyTime","transform","filterLoginActivity","loginActivitySearchTerm","groupChange","pageChange","onChange","grid_r2","popup_r3","LbaLoginActivityComponent_ng_template_30_Template","LbaLoginActivityComponent_kendo_grid_column_33_Template","LbaLoginActivityComponent_ng_template_38_Template","LbaLoginActivityComponent_ng_template_39_Template","LbaLoginActivityComponent_kendo_excelexport_column_41_Template","KpiScorecardService","getKPIScorecards","getClientKPIScorecards","getClientKPIScorecardStaffPositions","upsertKPIScorecard","kpiScorecardKey","positionKeys","clientKPIScorecardKey","selectedPositions","upsertKPIScorecardProfileChanges","paramString","getPossibleKPIsForScorecard","scorecard","selectedKPIScorecard","kpiScorecard","KpiScorecardComponent_div_5_div_1_Template","KpiScorecardComponent_div_5_div_2_Template","selectKPIs","setKPIWeights","viewKPIs","returnToKpiProfilesClicked","editButtonCliecked","backToSelectKPIs","onNext","KpiScorecardComponent_div_7_button_6_i_2_Template","totalWeightPercentage","KpiScorecardComponent_div_7_button_1_Template","KpiScorecardComponent_div_7_button_2_Template","KpiScorecardComponent_div_7_button_3_Template","KpiScorecardComponent_div_7_button_4_Template","KpiScorecardComponent_div_7_button_5_Template","KpiScorecardComponent_div_7_button_6_Template","viewKPIScorecardProfile","selectDatesAndPositions","searchSummaryGrid","KpiScorecardComponent_div_10_div_6_div_1_Template","KpiScorecardComponent_div_10_div_6_div_2_Template","KpiScorecardComponent_div_10_div_9_ng_container_4_Template","KpiScorecardComponent_div_10_span_5_Template","KpiScorecardComponent_div_10_div_6_Template","KpiScorecardComponent_div_10_div_9_Template","KpiScorecardComponent_div_11_ng_template_3_div_0_Template","KpiScorecardComponent_div_11_ng_template_5_0_ng_template_0_Template","record_r13","viewScorecardClicked","KpiScorecardComponent_div_11_ng_template_5_0_Template","KpiScorecardComponent_div_11_ng_template_5_ng_template_1_Template","KpiScorecardComponent_div_11_ng_template_5_ng_template_3_Template","isAssigned","Assigned_r14","NotAssigned_r15","KpiScorecardComponent_div_11_ng_template_7_0_ng_template_0_Template","record_r16","join","rowIndex_r18","editScorecardClicked","KpiScorecardComponent_div_11_ng_template_7_ng_template_3_span_0_Template","kpiScorecardType","KpiScorecardComponent_div_11_ng_template_7_0_Template","KpiScorecardComponent_div_11_ng_template_7_ng_template_1_Template","KpiScorecardComponent_div_11_ng_template_7_ng_template_3_Template","Assigned_r19","NotAssigned_r20","effectiveDate","rowIndex_r24","KpiScorecardComponent_div_11_ng_template_3_Template","KpiScorecardComponent_div_11_ng_template_5_Template","KpiScorecardComponent_div_11_ng_template_7_Template","KpiScorecardComponent_div_11_ng_template_11_Template","KpiScorecardComponent_div_11_ng_template_13_Template","KpiScorecardComponent_div_11_ng_template_15_Template","getHeaderStyle","position_r26","positionCheckboxChangeHandler","selectedPositionKeys","has","KpiScorecardComponent_div_12_ng_container_17_Template","scorecardForm","KpiScorecardComponent_div_13_div_3_Template","profileDataChangeEvent","profileTableDataProperties","KpiScorecardComponent","scorecardService","kpiService","commKendoTbleService","reportService","checkedStaffPositions","scorecardInfoData","changedProileData","scorecardListView","getKPIScorecardData","getClientKPIData","setProfileSummaryTableParams","setKpiProfileTablesParams","checkBoxProperties","hidden","allowSearch","aggregationTitle","aggregationType","inputProperties","hideFooterValue","hideIf","backgroundDefaultColor","backgroundColorThresholdFileldId","headerBackgroundColor","isHierarchyEntity","summaryTableDataProperties","initialPageSize","initialSkip","recordSelection","kendoGridSelectById","isDataLoaded","useLGScroll","summaryTableColumnProperties","columnProperties","iconClass","profileTableColumnProperties","columnBackgroundColor","getKPIAssignedCounts","scorecards","clientScorecards","scorecardStaffPositions","positionMap","kpiScorecards","updateSummaryGrid","clientKPIScorecards","clientKPIScorecardStaffPositions","setKPIScorecardsAssignedAndPositions","summarySearchTerm","getCurrentKPIConfiguration","getKPIMasterList","getKPIMilestoneStaffingKeyMap","config","list","staffMap","kpiMasterList","kpiMilestoneStaffingKeyMap","clientKPIData","clientScorecard","assignedScorecard","numKPIs","checkedPosition","scorecardPosition","nbr","numEmployees","refreshPageData","resetKPIScorecardData","kpis","calculateTotalWeightPercentage","weight","scorecardWeight","kpiScoreCardKey","savePositionChange","inactiveDate","selectedKPIs","isNaN","getClientKPICategory","clientKPI","kpi","kpiCategory","setPositionKeys","loadPositionNames","setDates","updateKPIGrid","searchHandler","setScorecardSelection","kpiInf","resetTableData","scorecardInfoDataOriginal","setScorecardInfoTableData","preserveOriginalKPIProfileData","pos","backToPositions","positionKey","selectedStaffPosition","updateSelectedPosition","changedRow","clearTimeout","font","KpiScorecardComponent_div_3_Template","KpiScorecardComponent_div_4_Template","KpiScorecardComponent_div_5_Template","KpiScorecardComponent_div_7_Template","KpiScorecardComponent_div_9_Template","KpiScorecardComponent_div_10_Template","KpiScorecardComponent_div_11_Template","KpiScorecardComponent_div_12_Template","KpiScorecardComponent_div_13_Template","DomainManagementComponent_ng_template_22_div_0_Template","noDomains","isNew_r4","DomainManagementComponent","domainService","headerStyle","domainEntrySort","domains","domainEntries","loadDomainsInGrid","filterDomains","domainSearchTerm","filteredDomains","addDomain","domainCheck","foundDomain","DomainManagementComponent_ng_template_22_Template","DomainManagementComponent_ng_template_24_Template","DomainManagementComponent_ng_template_26_Template","isActiveSuperUserControl","lbaToggleClientNotification","CompanyNotificationsComponent_kendo_grid_column_9_ng_template_1_Template","toggleNotification","CompanyNotificationsComponent","currentUserService","getAlertTypes","getClientNotificationTypes","ntfc","updateClientAlertType","updateClientAlertTypeLBAControl","deleteUserAlert","deleteUserAlertType","CompanyNotificationsComponent_kendo_grid_column_9_Template","CompanyNotificationsComponent_ng_template_11_Template","ScheduledReportsComponent_ng_container_9_ng_template_9_span_1_Template","ScheduledReportsComponent_ng_container_9_ng_template_9_span_2_Template","ScheduledReportsComponent_ng_container_9_ng_template_9_span_3_Template","frequency","enterDt","download","pageChangeExports","ScheduledReportsComponent_ng_container_9_ng_template_4_Template","ScheduledReportsComponent_ng_container_9_ng_template_9_Template","ScheduledReportsComponent_ng_container_9_ng_template_11_Template","ScheduledReportsComponent_ng_container_9_ng_template_13_Template","loadingExports","exportsGrid","pageSizeE","skipE","ScheduledReportsComponent_ng_container_10_ng_template_9_span_1_Template","ScheduledReportsComponent_ng_container_10_ng_template_9_span_2_Template","ScheduledReportsComponent_ng_container_10_ng_template_9_span_3_Template","getDayOfWeek","dayOfWeek","getHour","dataItem_r15","cancelConfirm","pageChangeSchedules","ScheduledReportsComponent_ng_container_10_ng_template_4_Template","ScheduledReportsComponent_ng_container_10_ng_template_9_Template","ScheduledReportsComponent_ng_container_10_ng_template_11_Template","ScheduledReportsComponent_ng_container_10_ng_template_13_Template","ScheduledReportsComponent_ng_container_10_ng_template_15_Template","loadingSchedules","schedulesGrid","pageSizeS","skipS","ScheduledReportsComponent","scheduledReportService","activatedRoute","directDownloadIdentifier","scheduleOptions","getOptions","load","getSchedules","getExports","getScheduledByUser","schedules","setGridViewSchedules","exports","setGridViewExports","matchingExport","blobIdentifier","dayItem","hour","utcOffset","reportName","deleteSchedule","userScheduledReportKey","ScheduledReportsComponent_ng_container_9_Template","ScheduledReportsComponent_ng_container_10_Template","ClientLookupService","getClientLookupMappings","getLookupValues","getLookupDataTypes","clientLookupParamsArray","type_r5","typeValue","item_r3","mappingChangeHandler","MappingTableComponent_ng_template_15_option_1_Template","mappingTypes","MappingTableComponent","clientLookupService","mappingTitle","listOfEntities","mappingSearchTerm","filterMappings","filteredMappings","mappingData","mappingSort","changedMapping","mapping","clientTag","changedMappings","lookupValueKey","lookupDataTypeAbbv","mappingDescription","MappingTableComponent_ng_template_15_Template","MappingTableComponent_ng_template_16_Template","LoanCharacteristicsMappingComponent_div_2_mat_tab_3_Template","selectedMapping","clientLookupDataModel","LoanCharacteristicsMappingComponent","mappings","getClientMappings","lookupDataTypes","lookupDataType","abbv","lookupTypeAbbv","lookupAbbv","getLookupTypes","lookupData","formatMappingData","lookupValueToMappingType","lookupValue","previousClicked","mappingTabBar","selectedIndex","nextClicked","LoanCharacteristicsMappingComponent_div_2_Template","GeneralLedgerService","getGLAccts","insertGLAcct","glAcct","cancelNewAccount","GeneralLedgerMappingComponent_ng_template_24_div_0_Template","noAccts","item_r6","accountName","accountTypes","formGroup_r7","suggestion_r11","item_r9","accountCategory","category_r10","reqNameChanged","GeneralLedgerMappingComponent_ng_template_31_mat_option_4_Template","auto_r12","filteredSuggestions","item_r14","isLoanAccount","matches","selector","msMatchesSelector","call","GeneralLedgerMappingComponent","generalLedgerService","suggestionMap","suggestions","reqNameSubject","Subject","glAcctSort","docClickSubscription","listen","onDocumentClick","startWith","_filter","glAcctData","accountTypeKey","accountType","values","filteredAccts","glAccts","addNewAccount","accountNumber","getTypeKey","filterAccts","glAcctSearchTerm","saveCurrent","filterValue","option","kendoGrid_r2","GeneralLedgerMappingComponent_button_16_Template","GeneralLedgerMappingComponent_button_17_Template","GeneralLedgerMappingComponent_ng_template_24_Template","GeneralLedgerMappingComponent_ng_template_27_Template","GeneralLedgerMappingComponent_ng_template_29_Template","GeneralLedgerMappingComponent_ng_template_31_Template","GeneralLedgerMappingComponent_ng_template_33_Template","GeneralLedgerMappingComponent_ng_template_34_Template","GeneralLedgerMappingComponent_ng_template_41_Template","ClientHealthComponent_mat_tab_group_7_mat_tab_2_Template","ClientHealthComponent","defaultSorting","resultsOriginal","uniqueTypes","dataLoadType","self","textLabel","clientSearch","timeOutHolder","clientFullName","ClientHealthComponent_mat_tab_group_7_Template","toggleTask","overallPositionsSelected","clientSubscriptionTaskKey","onSelectPosition","onDeselectPosition","allPositions","dropdownListSettings","SubscriptionsComponent","subscriptionsService","enableCheckAll","positionsSelected","loadSubscriptionTasksData","loadPositionsData","getClientSubscriptionTask","getSubscriptionTasks","clientSubscriptionData","subscriptionData","prepareSubscriptionData","prepareGridData","subscription","associatedClientSubscription","subscriptionTaskKey","getClientSubscriptionTaskPositions","positionsData","clientSubscriptionTaskPositionsData","clientTask","clientSubscriptionTaskPositions","preparePositionData","task","savePositionData","upsertClientSubscriptionTaskPosition","positionIdentifier","positionToAdd","clientSubTaskPosition","upsertClientSubscriptionTask","SubscriptionsComponent_ng_template_10_Template","SubscriptionsComponent_ng_template_15_Template","UserSubscriptionsComponent","hasNoUserSub","getUserSubscriptionTasks","userSubscriptionTasksData","staffPositionData","employeeRecord","newClientSubscriptionTasks","userPosition","newClientData","associatedUserSubData","subscriptionTask","enabledStaffPositions","doesPositionMatch","filteredGridData","upsertUserSubscriptionTask","UserSubscriptionsComponent_ng_template_10_Template","ECloseRoiSettingsComponent_ng_template_10_span_1_Template","eCloseOption","ECloseRoiSettingsComponent_ng_template_12_span_0_Template","roi","updateInput","ECloseRoiSettingsComponent","eCloseService","hasErrors","getClientECloseOptions","clientECloseData","prepareGrid","saveOptions","updateClientECloseOptions","num","ECloseRoiSettingsComponent_ng_template_10_Template","ECloseRoiSettingsComponent_ng_template_12_Template","InvoicedLoansComponent","hideExcelExport","pageTitle","dateFilterSettings","initializeTable","getDateFilters","getInvoiceData","onDateFilterChange","dateArray","thisMonth","thisYear","lastDayOfMonth","startDateOfMonth","optionOrder","friendlyName","hyperLinkTo_FieldId","currentDateFilter","item_r5","subSectionExpand","expanded","selectItem","SettingsComponent_div_4_div_5_div_1_span_2_Template","subModules","subItem_r8","SettingsComponent_div_4_div_5_div_2_ng_container_1_div_1_Template","SettingsComponent_div_4_div_5_div_2_ng_container_1_Template","SettingsComponent_div_4_div_5_div_1_Template","SettingsComponent_div_4_div_5_div_2_Template","section_r2","sectionExpand","SettingsComponent_div_4_div_5_Template","eventsSubject","SettingsComponent","_route","userAccessService","defaultItem","underConstruction","NavigationEnd","originalPage","paramMap","isClientPowerUser","isLoggedIn","settings","powerUserRequired","lbaOnly","setting","hasAccessToPage","sm","setDefaultSelectedItem","subItem","hasAccess","emitEventToChild","linkTitle","moduleLink","moduleHasNotBeenCreated","itemKey","SettingsComponent_div_4_Template","SettingsComponent_app_employee_record_view_6_Template","SettingsComponent_app_profile_account_details_7_Template","SettingsComponent_app_change_password_8_Template","SettingsComponent_app_profile_notifications_9_Template","SettingsComponent_app_user_subscriptions_10_Template","SettingsComponent_app_scheduled_reports_11_Template","SettingsComponent_app_client_product_mapping_12_Template","SettingsComponent_app_loan_characteristics_mapping_13_Template","SettingsComponent_app_general_ledger_mapping_14_Template","SettingsComponent_app_integration_15_Template","SettingsComponent_file_upload_integration_16_Template","SettingsComponent_delete_loan_17_Template","SettingsComponent_invoiced_loans_18_Template","SettingsComponent_holiday_hours_19_Template","SettingsComponent_app_kpi_config_20_Template","SettingsComponent_app_kpi_scorecard_21_Template","SettingsComponent_app_branch_projections_config_22_Template","SettingsComponent_app_domain_management_23_Template","SettingsComponent_app_user_management_24_Template","SettingsComponent_app_employee_25_Template","SettingsComponent_app_role_management_26_Template","SettingsComponent_milestones_events_27_Template","SettingsComponent_app_lba_clients_28_Template","SettingsComponent_hierarchy_config_29_Template","SettingsComponent_app_company_notifications_30_Template","SettingsComponent_app_e_close_roi_settings_31_Template","SettingsComponent_app_subscriptions_32_Template","SettingsComponent_app_lba_subscriptions_33_Template","SettingsComponent_app_lba_users_34_Template","SettingsComponent_app_client_health_35_Template","SettingsComponent_app_lba_login_activity_36_Template","SettingsComponent_app_lba_login_activity_37_Template","SettingsComponent_mat_card_38_Template","settingsRoutes","component","SettingsRoutingModule","RouterModule","forChild","ApplicationModuleService","getClientModules","updateClientModule","FileListItemActionButtonComponent_span_1_Template","FileListItemActionButtonComponent_button_2_Template","onRetryClick","retrySVGIcon","retryButtonTitle","FileListItemActionButtonComponent_button_3_Template","onPauseResumeClick","isPaused","playSVGIcon","pauseSVGIcon","pauseResumeButtonTitle","FileListItemActionButtonComponent_button_4_Template","onRemoveCancelClick","isUploading","cancelSVGIcon","deleteSVGIcon","actionButtonTitle","a0","a1","a2","templateRef","FileListMultipleItemsComponent_ng_container_4_span_1_Template","file_r1","validationErrors","fileStatusText","FileListMultipleItemsComponent_ng_container_4_Template","batchStatusText","FileListMultipleItemsComponent_ng_container_5_Template","fileInfoTemplate","FileListSingleItemComponent_ng_container_4_Template","isNotYetUploaded","isUploadSuccessful","isUploadFailed","FileListSingleItemComponent_ng_container_5_Template","FileListComponent_ng_template_0_kendo_upload_file_list_single_item_1_Template","files_r1","FileListComponent_ng_template_0_kendo_upload_file_list_multiple_items_2_Template","FileListComponent_ng_template_0_ng_container_3_Template","fileTemplate","FileListComponent_ng_template_0_Template","index_r3","UploadComponent_kendo_upload_status_total_8_Template","fileList","UploadComponent_ul_11_Template","fileListId","UploadComponent_kendo_upload_action_buttons_12_Template","actionsLayout","FileSelectComponent_ul_10_Template","FileState","Failed","Initial","Selected","Uploaded","Uploading","Paused","FileMap","_files","uid","remove","allFiles","httpSubscription","setFilesState","setFilesStateByUid","f","getOwnPropertyNames","initial","transformed","filesFlat","filesToUpload","notUploaded","currentFiles","currentFilesValid","firstFileToUpload","getFilesWithState","hasFileWithState","fileStates","CancelEvent","PreventableEvent","prevented","isDefaultPrevented","ClearEvent","ErrorEvent","operation","PauseEvent","RemoveEvent","ResumeEvent","SelectEvent","SuccessEvent","UploadEvent","UploadProgressEvent","percentComplete","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","zip","discImage","fileSVGGroupMap","fileAudioIcon","fileVideoIcon","fileImageIcon","fileTxtIcon","filePresentationIcon","fileDataIcon","fileProgrammingIcon","filePdfIcon","fileConfigIcon","fileZipIcon","fileDiscImageIcon","stripPath","slashIndex","lastIndexOf","substr","getFileExtension","match","validateInitialFileInfo","validateInitialFileSelectFile","File","getInitialFileInfo","fakeFile","extension","size","guid","getFileInfo","rawFile","fileSize","getAllFileInfo","rawFiles","allFileInfo","fileHasValidationErrors","filesHaveValidationErrors","assignGuidToFiles","focusableRegex","IGNORE_TARGET_CLASSES","UPLOAD_CLASSES","toClassList","classNames","String","trim","hasClasses","element","namesList","isFocusable","checkVisibility","getAttribute","validTabIndex","focusable","test","rect","getBoundingClientRect","getComputedStyle","visibility","isVisible","isPresent","ChunkMap","totalChunks","initialChunkInfo","retries","UploadService","cancelEvent","clearEvent","completeEvent","errorEvent","pauseEvent","removeEvent","resumeEvent","selectEvent","successEvent","uploadEvent","uploadProgressEvent","changeEvent","async","autoUpload","batch","chunk","concurrent","removeField","removeHeaders","removeMethod","removeUrl","saveField","saveHeaders","saveMethod","saveUrl","withCredentials","autoRetryAfter","maxAutoRetries","resumable","chunkMap","setChunkSettings","addFiles","selectEventArgs","uploadFiles","flatFiles","addInitialFiles","initialFiles","addInitialFileSelectFiles","fileInfo","convertFileToFileInfo","resumeFile","fileToResume","_uploadFiles","pauseFile","pausedFile","removeFiles","removedFiles","removeEventArgs","cloneRequestHeaders","performRemove","cancelFiles","canceledFiles","cancelEventArgs","checkAllComplete","clearFiles","clearEventArgs","triggerChange","retryFiles","filesToRetry","uploadEventArgs","httpSubcription","performUpload","fileNames","populateRemoveFormData","options","populateRequestOptions","removeRequest","HttpRequest","request","onSuccess","onError","populateUploadFormData","uploadRequest","HttpEventType","UploadProgress","HttpResponse","onProgress","successResponse","onChunkProgress","isChunkUploadComplete","updateChunkInfo","removeChunkInfo","successArgs","errorResponse","maxRetries","chunkInfo","errorArgs","round","loaded","progressArgs","areAllSelectedFilesHandled","shouldUploadNextFile","cloned","clientData","populateClientFormData","getNextChunk","getChunkMetadata","getChunkInfo","ceil","chunkIndex","contentType","fileUid","ɵprov","token","NavigationService","uploadService","onActionButtonFocus","onFileAction","onFileFocus","onTabOut","onWrapperFocus","onSelectButtonFocus","actionButtonsVisible","fileListVisible","focused","focusedFileIndex","_focusedIndex","keyBindings","handler","computeKeys","Keys","Space","handleSpace","Enter","handleEnter","Escape","handleEscape","Delete","handleDelete","Tab","handleTab","ArrowUp","handleUpDown","ArrowDown","focusSelectButton","lastIndex","focusedIndex","lastFileIndex","shifted","shiftKey","direction","fileCount","components","DropZoneService","addComponent","zoneId","clearComponent","componentIdx","getComponents","INVALIDMAXFILESIZE","INVALIDMINFILESIZE","INVALIDFILEEXTENSION","validateFileExtension","allowedExtensions","validateFileSize","minFileSize","maxFileSize","validateFiles","restrictionInfo","extensions","ext","substring","parseAllowedExtensions","packageMetadata","productName","productCodes","publishDate","licensingDocsUrl","FileTemplateDirective","ɵdir","FileInfoTemplateDirective","UploadFileSelectBase","navigation","injector","multiple","showFileList","tabindex","focusableId","hostDefaultClasses","onBlur","onFocus","select","_restrictions","onTouchedCallback","onChangeCallback","restrictions","parsedRestrictions","hostDisabledClass","NgControl","isControlRequired","hasFileList","writeValue","validation","callback","isValid","registerOnChange","fn","registerOnTouched","setDisabledState","onFileSelectButtonFocus","fileSelectButton","focusComponent","blur","activeElement","blurComponent","contentQueries","dirIndex","_t","first","ElementRef","UploadActionButtonsComponent","localization","hostDefaultClass","actionButtonsEndClassName","actionButtonsStretchedClassName","actionButtonsStartClassName","actionButtonsCenterClassName","onUploadButtonFocus","onUploadButtonClick","stopImmediatePropagation","onClearButtonClick","textFor","i1$1","clearButton","uploadButton","FileListItemDirective","navigationService","fileClass","uidAttribute","kFileError","kFileInvalid","kFileProgress","kFileSuccess","kStateFocused","onClick","FileListItemBase","progressComplete","subscribeUploadProgress","uploadProgressHandler","uploadProgressSubscription","getFileValidationMessage","validationMessage","getTotalFilesSizeMessage","totalSize","FileListItemActionButtonComponent","arrowRotateCwSmallIcon","playSmIcon","pauseSmIcon","cancelIcon","xIcon","isFailed","isResumable","isActionButtonVisible","dependencies","NgIf","ButtonComponent","FileListMultipleItemsComponent","copySVGIcon","copyIcon","args","showProgress","filesHaveErrors","ProgressBarComponent","IconWrapperComponent","NgFor","NgClass","NgTemplateOutlet","trigger","opacity","transition","animate","FileListSingleItemComponent","fileGroupClass","fileExtension","getFileGroupCssClass","fileSVGGroupIcon","fileIcon","FileListComponent","fileListRole","onItemFocus","onItemAction","focusSubscription","fileListItems","toArray","actionSubscription","itemActionHandler","filesArray","numberOfFiles","hasDelete","getElementsByClassName","attrs","UploadStatusTotalComponent","checkmarkIcon","checkIcon","exceptionSVGIcon","exclamationCircleIcon","uploadSVGIcon","uploadIcon","SVGIconClass","ngDoCheck","statusText","FileSelectDirective","autocomplete","ariaHidden","nameAttribute","multipleAttribute","dirAttribute","disabledAttribute","acceptAttribute","requiredAttribute","onInputChange","ua","navigator","userAgent","selectedFiles","input","inputFiles","native","DropZoneBase","cssClass","hideIntervalElement","hoverClass","onElementDragEnterListener","addClass","lastDragElement","setInterval","calculateTimeDiff","removeClass","clearInterval","onElementDragOverListener","prevEvent","DropZoneInternalDirective","ngZone","initialClassName","hideIntervalDocument","activeClass","unsubscribeDocumentDragEnter","onDocumentDragEnter","unsubscribeDocumentDragOver","onDocumentDragOver","lastDragDocument","onDropListener","droppedFiles","Messages","ComponentMessages","ɵMessages_BaseFactory","clearSelectedFiles","dropFilesHere","externalDropFilesHere","filesBatchStatus","filesBatchStatusFailed","filesBatchStatusUploaded","fileStatusFailed","fileStatusUploaded","headerStatusPaused","headerStatusUploaded","headerStatusUploading","invalidFileExtension","invalidMaxFileSize","invalidMinFileSize","pause","resume","retry","uploadSelectedFiles","LocalizedMessagesDirective","provide","useExisting","forwardRef","UPLOAD_VALUE_ACCESSOR","multi","NG_VALUE_ACCESSOR","UploadComponent","idx$1","dropZoneService","wrapper","chunkable","complete","upload","uploadProgress","valueChange","validatePackage","localizationChangeSubscription","rtl","subscribeBlur","subscribeFocus","attachEventHandlers","verifySettings","buttonId","getIds","handleKeydown","newChunkable","blurSubscription","wrapperFocusSubscription","selectButtonFocusSubscription","showActionButtons","areVisible","hasFilesToUpload","uploadingFiles","showTotalStatus","pauseFileByUid","resumeFileByUid","removeFilesByUid","retryUploadByUid","cancelUploadByUid","isEmpty","isDevMode","isDocumentAvailable","documentClick","merge","fileSelectInput","LocalizationService","L10N_PREFIX","useValue","KendoInput","i18n_0","i18n_1","i18n_2","i18n_3","i18n_4","i18n_5","i18n_6","i18n_7","i18n_8","i18n_9","i18n_10","i18n_11","i18n_12","i18n_13","i18n_14","i18n_15","i18n_16","i18n_17","i18n_18","i18n_19","$localize","fileSelectInput_r2","UploadDropZoneDirective","onElementDragEnter","onElementDragOver","fileSelectZoneId","UploadDropZoneComponent","hostClass","_svgIcon","svgIcon","iconClasses","i18n_20","FILESELECT_VALUE_ACCESSOR","FileSelectComponent","idx","setDefaultSettings","removeFileByUid","selectButtonTabIndex","i18n_21","i18n_22","i18n_23","i18n_24","i18n_25","i18n_26","CustomMessagesComponent","override","UploadModule","providers","IconsService","PopupService","ResizeBatchService","FilterSetupService","getApplicationModules","getApplicationModulePagesByApplicationModuleKey","applicationModuleKey","getDisplayOptionsByApplicationModulePageKey","applicationModulePageKey","getDisplayOptionFilterItemsByDisplayOptionKey","displayOptionKey","SettingsModule","DatePipe","ClientIntegrationService","HierarchyService","IntegrationSourceService","EmployeePositionService","ClientContactsService","CurrencyPipe","DecimalPipe","CommonModule","SharedModule","ReactiveFormsModule","MatTabsModule","IntlModule","DateInputsModule","NgxMaskModule","forRoot","MatTooltipModule","GridModule","ThirdPartyModule","MatCardModule","MatIconModule"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/modules/settings/services/client-domain.service.ts","./src/app/modules/shared/components/add-job-title-mapping-dialog/add-job-title-mapping-dialog.component.html","./src/app/modules/shared/components/add-job-title-mapping-dialog/add-job-title-mapping-dialog.component.ts","./src/app/modules/settings/components/profile/my-record/employee-record-view/employee-record-view.component.html","./src/app/modules/settings/components/profile/my-record/employee-record-view/employee-record-view.component.ts","./src/app/modules/settings/services/kpi-config.service.ts","./node_modules/@angular/material/fesm2022/progress-bar.mjs","./src/app/modules/settings/services/kpi-distribution-analysis.service.ts","./src/app/modules/settings/components/kpi-distribution-analyze-dialog/distribution-analyze-dialog.component.html","./src/app/modules/settings/components/kpi-distribution-analyze-dialog/distribution-analyze-dialog.component.ts","./src/app/modules/settings/components/kpi-config/kpi-version-dialog/kpi-version-dialog.component.html","./src/app/modules/settings/components/kpi-config/kpi-version-dialog/kpi-version-dialog.component.ts","./src/app/modules/settings/components/kpi-config/kpi-config-one/kpi-config-one.component.html","./src/app/modules/settings/components/kpi-config/kpi-config-one/kpi-config-one.component.ts","./src/app/modules/settings/components/kpi-config/kpi-config-three/kpi-config-three.component.html","./src/app/modules/settings/components/kpi-config/kpi-config-three/kpi-config-three.component.ts","./src/app/modules/settings/components/kpi-config/kpi-config-four/kpi-config-four.component.html","./src/app/modules/settings/components/kpi-config/kpi-config-four/kpi-config-four.component.ts","./src/app/modules/settings/components/kpi-config/kpi-config.component.html","./src/app/modules/settings/components/kpi-config/kpi-config.component.ts","./src/app/modules/settings/interfaces/user.ts","./src/app/modules/settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component.html","./src/app/modules/settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component.ts","./src/app/modules/shared/components/email-confirmation-dialog/email-confirmation-dialog.component.html","./src/app/modules/shared/components/email-confirmation-dialog/email-confirmation-dialog.component.ts","./src/app/modules/shared/interfaces/client-data.ts","./src/app/modules/settings/services/user-permissions.service.ts","./src/app/modules/settings/services/user-extended-access.service.ts","./src/app/modules/settings/components/user-management/user-extended-access-menu/user-extended-access-menu.component.html","./src/app/modules/settings/components/user-management/user-extended-access-menu/user-extended-access-menu.component.ts","./src/app/modules/settings/components/user-management/user-management.component.html","./src/app/modules/settings/components/user-management/user-management.component.ts","./src/app/modules/shared/components/tab/tab.component.html","./src/app/modules/shared/components/tab/tab.component.ts","./src/app/modules/settings/components/profile/account-details/account-details.component.ts","./src/app/modules/settings/components/profile/account-details/account-details.component.html","./src/app/modules/settings/components/profile/notifications/notifications.component.html","./src/app/modules/settings/components/profile/notifications/notifications.component.ts","./src/app/modules/settings/components/change-password/change-password.component.html","./src/app/modules/settings/components/change-password/change-password.component.ts","./src/app/modules/shared/components/side-sheet/side-sheet.component.html","./src/app/modules/shared/components/side-sheet/side-sheet.component.ts","./src/app/modules/settings/components/hierarchy-setup/hierarchy-tile/hierarchy-tile.component.html","./src/app/modules/settings/components/hierarchy-setup/hierarchy-tile/hierarchy-tile.component.ts","./src/app/modules/settings/components/hierarchy-setup/tile-connector/tile-connector.component.ts","./src/app/modules/settings/components/hierarchy-setup/tile-connector/tile-connector.component.html","./src/app/modules/settings/components/hierarchy-setup/hierarchy-setup.component.html","./src/app/modules/settings/components/hierarchy-setup/hierarchy-setup.component.ts","./src/app/modules/settings/components/hierarchy-config/hierarchy-config.component.html","./src/app/modules/settings/components/hierarchy-config/hierarchy-config.component.ts","./src/app/modules/settings/services/client-subscription.service.ts","./src/app/modules/settings/components/lba-shared/client-subscription-page/client-subscription-page.component.html","./src/app/modules/settings/components/lba-shared/client-subscription-page/client-subscription-page.component.ts","./src/app/modules/settings/components/lba-subscriptions/lba-subscriptions.component.html","./src/app/modules/settings/components/lba-subscriptions/lba-subscriptions.component.ts","./src/app/modules/shared/components/user-actions-dialog/user-actions-dialog.component.html","./src/app/modules/shared/components/user-actions-dialog/user-actions-dialog.component.ts","./src/app/modules/settings/components/employee/employee.component.html","./src/app/modules/settings/components/employee/employee.component.ts","./src/app/modules/settings/components/role-management/permission-set-users/permission-set-users.component.html","./src/app/modules/settings/components/role-management/permission-set-users/permission-set-users.component.ts","./src/app/modules/settings/components/role-management/permission-set-pages/permission-set-pages.component.html","./src/app/modules/settings/components/role-management/permission-set-pages/permission-set-pages.component.ts","./src/app/modules/settings/components/role-management/permission-set-management/permission-set-management.component.html","./src/app/modules/settings/components/role-management/permission-set-management/permission-set-management.component.ts","./src/app/modules/settings/components/role-management/role-management.component.html","./src/app/modules/settings/components/role-management/role-management.component.ts","./src/app/modules/settings/components/branch-projections-config/branch-projections-config.component.html","./src/app/modules/settings/components/branch-projections-config/branch-projections-config.component.ts","./src/app/modules/shared/components/dynamic-dialog/dynamic-dialog.component.html","./src/app/modules/shared/components/dynamic-dialog/dynamic-dialog.component.ts","./src/app/modules/settings/services/csv-upload.service.ts","./src/app/modules/settings/components/integration-setup/file-upload-integration/file-upload-integration.component.html","./src/app/modules/settings/components/integration-setup/file-upload-integration/file-upload-integration.component.ts","./src/app/modules/settings/services/holiday.service.ts","./src/app/modules/settings/components/integration-setup/holiday-hours/holiday-hours.component.html","./src/app/modules/settings/components/integration-setup/holiday-hours/holiday-hours.component.ts","./src/app/modules/shared/services/delete-loan.service.ts","./src/app/modules/settings/components/integration-setup/delete-loan/delete-loan.component.html","./src/app/modules/settings/components/integration-setup/delete-loan/delete-loan.component.ts","./src/app/modules/settings/services/lba-super-user.service.ts","./src/app/modules/settings/components/lba-users/lba-users.component.html","./src/app/modules/settings/components/lba-users/lba-users.component.ts","./src/app/modules/settings/components/company-account-details/company-account-details.component.html","./src/app/modules/settings/components/company-account-details/company-account-details.component.ts","./src/app/modules/shared/classes/client-data.ts","./src/app/modules/settings/services/client-integration-type.service.ts","./src/app/modules/shared/components/validator/validator.component.html","./src/app/modules/shared/components/validator/validator.component.ts","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-contacts/client-edit-contacts.component.html","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-contacts/client-edit-contacts.component.ts","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-details/client-edit-details.component.html","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-details/client-edit-details.component.ts","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-identities/client-edit-identities.component.html","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-identities/client-edit-identities.component.ts","./src/app/modules/settings/interfaces/client-integration.ts","./src/app/modules/shared/Validators/client-edit-requirements.validator.ts","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-integrations/client-edit-integrations.component.html","./src/app/modules/settings/components/client-edit-screen/form-groups/client-edit-integrations/client-edit-integrations.component.ts","./src/app/modules/settings/components/client-edit-screen/client-edit-screen.component.html","./src/app/modules/settings/components/client-edit-screen/client-edit-screen.component.ts","./src/app/modules/settings/components/lba-clients/lba-clients.component.html","./src/app/modules/settings/components/lba-clients/lba-clients.component.ts","./src/app/modules/settings/services/client-product.service.ts","./src/app/modules/settings/components/client-product-mapping/client-product-mapping.component.ts","./src/app/modules/settings/components/client-product-mapping/client-product-mapping.component.html","./src/app/modules/shared/components/dragndrop-table/dragndrop-table.component.html","./src/app/modules/shared/components/dragndrop-table/dragndrop-table.component.ts","./src/app/modules/settings/components/milestones-events/milestones-events.component.html","./src/app/modules/settings/components/milestones-events/milestones-events.component.ts","./src/app/modules/settings/components/lba-login-activity/lba-login-activity.component.html","./src/app/modules/settings/components/lba-login-activity/lba-login-activity.component.ts","./src/app/modules/settings/services/kpi-scorecard.service.ts","./src/app/modules/settings/components/kpi-scorecard/kpi-scorecard.component.html","./src/app/modules/settings/components/kpi-scorecard/kpi-scorecard.component.ts","./src/app/modules/settings/components/domains/domain-management/domain-management.component.html","./src/app/modules/settings/components/domains/domain-management/domain-management.component.ts","./src/app/modules/settings/components/company-notifications/company-notifications.component.html","./src/app/modules/settings/components/company-notifications/company-notifications.component.ts","./src/app/modules/settings/components/scheduled-reports/scheduled-reports.component.html","./src/app/modules/settings/components/scheduled-reports/scheduled-reports.component.ts","./src/app/modules/settings/services/client-lookup.service.ts","./src/app/modules/shared/components/mapping-table/mapping-table.component.html","./src/app/modules/shared/components/mapping-table/mapping-table.component.ts","./src/app/modules/settings/components/loan-characteristics-mapping/loan-characteristics-mapping.component.html","./src/app/modules/settings/components/loan-characteristics-mapping/loan-characteristics-mapping.component.ts","./src/app/modules/settings/services/general-ledger.service.ts","./src/app/modules/settings/components/general-ledger-mapping/general-ledger-mapping.component.html","./src/app/modules/settings/components/general-ledger-mapping/general-ledger-mapping.component.ts","./src/app/modules/settings/components/client-health/client-health.component.html","./src/app/modules/settings/components/client-health/client-health.component.ts","./src/app/modules/settings/components/subscriptions/subscriptions.component.html","./src/app/modules/settings/components/subscriptions/subscriptions.component.ts","./src/app/modules/settings/components/user-subscriptions/user-subscriptions.component.html","./src/app/modules/settings/components/user-subscriptions/user-subscriptions.component.ts","./src/app/modules/settings/components/e-close-roi-settings/e-close-roi-settings.component.html","./src/app/modules/settings/components/e-close-roi-settings/e-close-roi-settings.component.ts","./src/app/modules/settings/components/invoiced-loans/invoiced-loans.component.ts","./src/app/modules/settings/components/invoiced-loans/invoiced-loans.component.html","./src/app/modules/settings/components/settings/settings.component.html","./src/app/modules/settings/components/settings/settings.component.ts","./src/app/modules/settings/settings.routing.module.ts","./src/app/modules/settings/services/application-module.service.ts","./node_modules/@progress/kendo-angular-upload/fesm2020/progress-kendo-angular-upload.mjs","./src/app/modules/settings/services/filter-setup.service.ts","./src/app/modules/settings/settings.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport {\n ClientDomainModel,\n ClientDomainUpdateModel,\n ClientDomainInsertModel,\n} from '../interfaces/client-domain-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClientDomainService extends BehaviorSubject {\n private serverUrl = 'https://' + window.location.host; // TODO Get url and version number from appsettings.\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/clientdomain/').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {\n super([]);\n }\n\n getDomains(): Observable {\n return this.http.get(this._url + 'GetClientDomains');\n }\n\n getEmailCount(domain: string): Observable {\n const params = new HttpParams().set('domain', domain);\n return this.http.get(this._url + 'GetEmailCount', {\n params: params,\n });\n }\n\n deleteDomain(domainKey: number): Observable {\n return new Observable((subscriber) => {\n this.http.post(this._url + 'DeleteClientDomain', domainKey).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n insertDomain(domain: ClientDomainModel): Observable {\n let insertModel = this.convertToInsertModel(domain);\n let formattedModel: JSON = this.formatInsertModel(insertModel);\n return new Observable((subscriber) => {\n this.http.post(this._url + 'InsertClientDomain', formattedModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n convertToInsertModel(model: ClientDomainModel): ClientDomainInsertModel {\n var insertModel: ClientDomainInsertModel = {\n domain: model.domain,\n };\n\n return insertModel;\n }\n\n formatInsertModel(insertModel: ClientDomainInsertModel): any {\n return {\n domain: insertModel.domain,\n };\n }\n\n updateDomain(domain: ClientDomainModel): Observable {\n var updateModel = this.convertToUpdateModel(domain);\n let formattedModel: JSON = this.formatUpdateModel(updateModel);\n return new Observable((subscriber) => {\n this.http.post(this._url + 'UpdateClientDomain', formattedModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n convertToUpdateModel(model: ClientDomainModel): ClientDomainUpdateModel {\n var updateModel: ClientDomainUpdateModel = {\n clientDomainKey: model.clientDomainKey,\n domain: model.domain,\n };\n\n return updateModel;\n }\n\n formatUpdateModel(updateModel: ClientDomainUpdateModel): any {\n return {\n clientDomainKey: updateModel.clientDomainKey,\n domain: updateModel.domain,\n };\n }\n}\n","
\n
\n \n
\n
\n Create new Job Title Mapping.\n
\n
\n
\n
Job Title*
\n
\n \n
\n \n * Required\n
\n
\n * Already exists.\n
\n
\n
\n
Job Code
\n
\n \n
\n \n * Required\n
\n \n
\n
Position*
\n
\n \n \n {{ staffPosition.position }}\n \n \n
\n \n * Required\n
\n \n
\n \n CANCEL\n \n \n SAVE\n \n \n
\n \n\n","import { Component, OnInit, EventEmitter, Output, Input } from '@angular/core';\nimport {\n UntypedFormBuilder,\n UntypedFormGroup,\n UntypedFormControl,\n Validators,\n} from '@angular/forms';\nimport {\n StaffPosition,\n EmployeePositionService,\n IClientStaffPositionDdl,\n EmployeePositionLookupForm,\n} from 'app/modules/settings/services/employee-position.service';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n selector: 'app-add-job-title-mapping-dialog',\n templateUrl: './add-job-title-mapping-dialog.component.html',\n styleUrls: ['./add-job-title-mapping-dialog.component.scss'],\n})\nexport class AddJobTitleMappingDialogComponent implements OnInit {\n form: UntypedFormGroup;\n staffPositions: StaffPosition[];\n submitting: boolean;\n @Input() clientStaffPositions: IClientStaffPositionDdl[];\n @Output() saveSuccessful?: EventEmitter = new EventEmitter();\n @Output() closeClicked?: EventEmitter = new EventEmitter();\n jobTitleIsNotUnique: boolean;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private positionService: EmployeePositionService,\n private toast: ToastService\n ) {}\n\n ngOnInit() {\n this.form = this.createFormGroup();\n this.getStaffPositions();\n }\n\n ngAfterViewInit() {\n document.getElementById('jobTitleInput').focus();\n }\n\n getStaffPositions() {\n this.positionService.getPositions().subscribe(\n (staffPositions) => {\n this.staffPositions = staffPositions;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n createFormGroup(): UntypedFormGroup {\n return this.formBuilder.group({\n jobTitle: new UntypedFormControl('', [Validators.required, Validators.maxLength(100)]),\n jobCode: new UntypedFormControl('', [Validators.maxLength(5)]),\n staffPositionKey: new UntypedFormControl('', Validators.required),\n });\n }\n\n get jobTitle() {\n return this.form.get('jobTitle');\n }\n get jobCode() {\n return this.form.get('jobCode');\n }\n get staffPositionKey() {\n return this.form.get('staffPositionKey');\n }\n\n onSubmit() {\n this.submitting = true;\n this.form.markAsPristine();\n let newJobTitleModel: EmployeePositionLookupForm = {\n staffPositionKey: this.staffPositionKey.value,\n jobTitle: this.jobTitle.value,\n jobCode: this.jobCode.value,\n };\n this.positionService.updateEmployeePositionMapping([newJobTitleModel]).subscribe(\n (_) => {\n this.toast.success('Job title created.');\n this.submitting = false;\n this.saveSuccessful.emit(newJobTitleModel.jobTitle);\n },\n (error) => {\n this.submitting = false;\n this.toast.warning('Problem created job title.');\n throw new Error(error);\n }\n );\n }\n\n closeClickedHandler() {\n this.closeClicked.emit();\n }\n\n jobTitleChangeHandler() {\n this.jobTitleIsNotUnique = false;\n if (\n this.clientStaffPositions.some(\n (x) => x.clientPosition.toLowerCase() === this.jobTitle.value.toLowerCase()\n )\n ) {\n this.jobTitleIsNotUnique = true;\n }\n }\n}\n","\n\n\n\n\n\n\n\n
\n
\n
\n \n Add New Employee\n
\n
\n
\n \n \n
\n \n more_vert\n \n \n \n \n edit\n Edit Record\n \n \n\n \n more_vert\n \n \n \n \n
\n
\n {{ selectedEmployee.firstName }} {{ selectedEmployee.lastName }}\n
\n
\n {{ selectedEmployee.jobTitle }}\n
\n \n
\n
\n
Contact Information
\n
First Name
\n
\n {{ selectedEmployee.firstName }}\n
\n
\n \n
\n
\n
    \n
  • * Required
  • \n
\n
\n
Last Name
\n
\n {{ selectedEmployee.lastName }}\n
\n
\n \n
\n
\n
    \n
  • * Required
  • \n
\n
\n
Preferred Name
\n
\n {{ selectedEmployee.firstNameProper }}\n
\n
\n \n
\n
\n
    \n
  • * Required
  • \n
\n
\n
Primary Email
\n \n {{ selectedEmployee.loginEmail }}\n
\n \n \n \n
\n
    \n
  • * Required
  • \n \n * {{ primaryEmail.value }} is not a valid email.\n \n
  • \n * {{ primaryEmail.value }} is already in use. Please try a\n different value.\n
  • \n
  • \n * {{ primaryEmail.value }} does not have valid domain.\n
  • \n
\n
\n\n
Mobile Phone
\n
\n {{ selectedEmployee.mobilePhone | mask : '(000) 000-0000' }}\n
\n
\n \n
\n
\n
    \n
  • * Required
  • \n
  • \n * Phone number must be 10 digits.\n
  • \n
  • \n * Phone number must be 10 digits.\n
  • \n
\n
\n
Job Title
\n \n   \n Add New\n \n \n {{ selectedEmployee.jobTitle }}\n \n \n \n \n {{ clientStaffPosition.clientPosition }}\n \n \n \n \n
    \n
  • * Required
  • \n
\n \n
\n Location\n
\n \n {{ selectedEmployee.location }}\n \n \n \n \n {{ hierarchy.name }}\n \n \n \n \n
    \n
  • \n * Required\n
  • \n
\n \n
Is Supervisor?
\n \n {{\n !selectedEmployee.isSupervisor\n ? 'Unknown'\n : selectedEmployee.isSupervisor\n }}\n \n \n \n \n {{ val }}\n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n
Reports To
\n \n {{ supervisorLFName ? supervisorLFName : 'N/A' }}\n \n \n 0; else NoSupervisors\"\n formControlName=\"supervisorIdentifier\"\n style=\"width: 338px\"\n >\n \n \n {{ supervisor.lfName }}\n \n \n .\n \n
\n
    \n
  • * Required
  • \n
\n
\n
City
\n \n {{ selectedEmployee.city }}\n \n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n
State
\n \n {{ selectedEmployee.state }}\n \n \n \n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n \n \n \n
\n
\n \n \n Employee Details \n
\n \n Employment Status\n
\n \n {{ employeeStatus.value }}\n \n \n On Leave\n \n \n {{ selectedEmployee.onLeave ? 'Yes' : 'No' }}\n \n \n Yes\n No\n \n
\n
    \n
  • * Required
  • \n
\n
\n \n Hire Date\n \n \n {{ selectedEmployee.hireDate | date : 'MM/dd/yyy' }}\n \n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n \n Termination Date\n \n \n {{\n selectedEmployee.terminationDate\n ? (selectedEmployee.terminationDate | date : 'MM/dd/yyy')\n : 'N/A'\n }}\n \n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n \n Employment Type\n \n \n {{ selectedEmployee.fullTime ? 'Full-time' : 'Part-time' }}\n \n \n \n \n {{ type }}\n \n \n \n
\n
    \n
  • * Required
  • \n
\n
\n \n Length of Employment\n \n \n {{ selectedEmployee.lengthOfEmployment }}\n \n \n
\n
\n \n \n Employee Identities \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{\n identityGroup.controls.identifier.value\n }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Employee NumberTypeDescription
\n \n {{\n identityGroup.controls.identifier.value\n }}\n \n \n \n \n \n {{ identityGroup.controls.identifierType.value }}\n \n {{ identityGroup.controls.description.value }}\n \n \n {{\n identityGroup.controls.isPrimary.value ? '' : ''\n }}\n
* Required
\n *\n {{ identities[i].get('identifier').value }}\n is already in use. Please try a different value.\n
\n * Identifier must be padded to at least\n {{ zeroPaddingLength }} characters.\n
\n
\n
\n
\n
\n \n \n User Details \n
\n \n User\n
\n \n {{ selectedEmployee.userGUID ? 'Yes' : 'No' }}\n \n
\n \n User Status\n
\n \n {{ selectedEmployee.userStatus }}\n \n \n \n \n {{ status }}\n \n \n \n \n Create Date\n \n \n {{ selectedEmployee.createDate | date : 'MM/dd/yyy' }}\n \n \n \n \n \n CANCEL\n \n \n SAVE\n \n \n \n\n \n \n CANCEL\n \n \n SAVE\n \n \n \n \n \n \n \n
\n System Users do not have employee records. You must view as a user from one of our clients\n to see their information.\n
\n
\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ClientIntegrationSource,\n Employee,\n EmployeeIdentifier,\n} from '../../../../../shared/interfaces/client-data';\nimport { EmployeeService } from '../../../../../shared/services/employee.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToastService } from '../../../../../shared/services/toast.service';\nimport { ReusableFunctions, USAState } from '../../../../../shared/classes/reusable-functions';\nimport {\n UntypedFormArray,\n UntypedFormBuilder,\n UntypedFormControl,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport { HierarchyEntity } from '../../../../interfaces/hierarchy-data';\nimport { IntegrationSourceService } from '../../../../services/integration-source.service';\nimport {\n EmployeePositionService,\n IClientStaffPositionDdl,\n} from '../../../../services/employee-position.service';\nimport { ClientDomainService } from '../../../../services/client-domain.service';\nimport { ClientDomainModel } from '../../../../interfaces/client-domain-data';\nimport { CurrentUserStateService } from '../../../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../../../shared/services/impersonation.service';\nimport { EmployeeRecordViewRequirementsValidators } from '../../../../../shared/Validators/employee-record-view.validator';\nimport { ClientIntegrationService } from 'app/modules/settings/services/client-integration.service';\nimport { ClientIntegration } from 'app/modules/settings/interfaces/client-integration';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationDialogComponent } from 'app/modules/shared/components/confirmation-dialog/confirmation-dialog.component';\n\n@Component({\n selector: 'app-employee-record-view',\n templateUrl: './employee-record-view.component.html',\n styleUrls: ['./employee-record-view.component.scss'],\n})\nexport class EmployeeRecordViewComponent implements OnInit, OnChanges {\n @Input() selectedEmployee: Employee;\n @Input() editing: boolean;\n @Input() hierarchies: HierarchyEntity[];\n @Input() addEditOrViewOnly: 'add' | 'edit' | 'viewOnly' | 'nonPowerUserEdit';\n @Input() supervisors: Employee[];\n @Output() cancelClickedEvent = new EventEmitter();\n @Output() employeeModEvent = new EventEmitter();\n\n @HostListener('window:popstate', ['$event'])\n onPopState(event) {\n this.cancelClicked();\n }\n\n employeeDetailsExpanded: boolean;\n identityDetailsExpanded: boolean;\n userDetailsExpanded: boolean;\n isLBAUser: boolean;\n showProfilePicUploadDialog: boolean;\n profilePicSrc: string;\n userProfileView: boolean;\n fileMaxSizeInMB: number;\n menuClicked: boolean;\n employeeForm: UntypedFormGroup;\n hierarchyListSettings: any;\n states: USAState[];\n employeeIdentifiers: EmployeeIdentifier[];\n clientIntegrationSources: ClientIntegrationSource[];\n checkingIDForUniqueness: boolean;\n isIdentifierUnique: boolean;\n checkingEmailForUniqueness: boolean;\n updateOn: 'change' | 'blur' | 'submit';\n loading: boolean = false;\n clientStaffPositions: IClientStaffPositionDdl[];\n error: any;\n submitting: boolean;\n showAddJobTitle: boolean;\n supervisorLFName: string;\n approvedDomains: ClientDomainModel[];\n primaryIdentifier: string;\n zeroPaddingFlag: boolean = false;\n zeroPaddingLength: number;\n\n constructor(\n private _employeeService: EmployeeService,\n private _employeePositionService: EmployeePositionService,\n private _activatedRoute: ActivatedRoute,\n public dialog: MatDialog,\n private _toastr: ToastService,\n private _reusableFunctions: ReusableFunctions,\n private _formBuilder: UntypedFormBuilder,\n private _clientIntegrationSourceService: IntegrationSourceService,\n private _clientIntegrationService: ClientIntegrationService,\n private _domainService: ClientDomainService,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private router: Router\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.addEditOrViewOnly) {\n if (changes.selectedEmployee && changes.selectedEmployee.currentValue) {\n if (this.supervisors) {\n let supervisor = this.supervisors.find(\n (e) => e.primaryIdentifier === this.selectedEmployee.supervisorIdentifier\n );\n if (supervisor) {\n this.supervisorLFName = supervisor.lfName;\n }\n this.supervisors = this.supervisors.filter(\n (e) => e.primaryIdentifier !== this.selectedEmployee.primaryIdentifier\n );\n }\n this._employeeService\n .getAllEmployeeIdentityRecords(this.selectedEmployee.primaryIdentifier)\n .subscribe(\n (identifiers) => {\n this.employeeIdentifiers = identifiers;\n if (this.addEditOrViewOnly !== 'add') {\n this.addEmployeeIdentifiersFormControls();\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n }\n\n setSupervisorLFName() {\n if (this.supervisors) {\n let supervisor = this.supervisors.find(\n (e) => e.primaryIdentifier === this.supervisorIdentifier.value\n );\n if (supervisor) {\n this.supervisorLFName = supervisor.lfName;\n } else {\n this.supervisorLFName = null;\n }\n }\n }\n\n ngOnInit() {\n scroll(0, 0);\n if (this.addEditOrViewOnly === 'edit') {\n this.updateOn = 'change';\n } else {\n this.updateOn = 'blur';\n }\n\n this.checkingIDForUniqueness = false;\n this.checkingEmailForUniqueness = false;\n this.isIdentifierUnique = true;\n if (!this.addEditOrViewOnly) {\n this.addEditOrViewOnly = 'viewOnly';\n }\n this.states = [{ name: '', abbreviation: '' }].concat(\n this._reusableFunctions.getUSAStatesJson()\n );\n\n // Remove duplicate hierarchy entities\n // The reused sproc has the potential to return duplicates\n if (this.hierarchies != null && this.hierarchies.length > 0) {\n this.hierarchies = Array.from(new Set(this.hierarchies.map((h) => h.hierarchyKey))).map(\n (hierarchyKey) => {\n let item = this.hierarchies.find((h) => h.hierarchyKey === hierarchyKey);\n return {\n hierarchyKey: hierarchyKey,\n hierarchyManagementKey: item.hierarchyManagementKey,\n hierarchyIdentifier: item.hierarchyIdentifier,\n costCenterIdentifier: item.costCenterIdentifier,\n nmlsIdentifier: item.nmlsIdentifier,\n name: item.name,\n nameAbbreviated: item.nameAbbreviated,\n owner: item.owner,\n ownerIdentifier: item.ownerIdentifier,\n level: item.level,\n levelOrder: item.levelOrder,\n parentHierarchyKey: item.parentHierarchyKey,\n parentName: item.parentName,\n activeDate: item.activeDate,\n inActiveDate: item.inActiveDate,\n alternateEntityNumber: item.alternateEntityNumber,\n simpleNexusIdentifier: item.simpleNexusIdentifier,\n };\n }\n );\n }\n\n this.hierarchyListSettings = {\n singleSelection: true,\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'name',\n primaryKey: 'hierarchyIdentifier',\n position: top,\n escapeToClose: true,\n };\n this._domainService.getDomains().subscribe(\n (data) => {\n this.approvedDomains = data;\n },\n (error) => {\n throw new Error(error);\n }\n );\n this.employeeForm = this.createFormGroup();\n\n this.onChanges();\n this.isLBAUser = false;\n this.employeeDetailsExpanded = true;\n this.userDetailsExpanded = true;\n this.identityDetailsExpanded = true;\n this.fileMaxSizeInMB = 250;\n\n let currentUser = this.currentUserStateService.currentUser;\n let clientShortName = currentUser.clientShortName;\n\n if (\n (this._activatedRoute.snapshot.url.length === 0 ||\n this._activatedRoute.snapshot.url[0].path !== 'employees') &&\n clientShortName === 'LBA' &&\n !this.impersonationService.isImpersonatingUser()\n ) {\n if (!this.impersonationService.isImpersonatingClient() || !this.selectedEmployee) {\n this.isLBAUser = true;\n return;\n }\n }\n\n if (!this.selectedEmployee && this.addEditOrViewOnly === 'viewOnly') {\n this._employeeService.getCurrentUsersEmployeeRecord().subscribe((record) => {\n this.selectedEmployee = record;\n\n this._employeeService\n .getAllEmployeeIdentityRecords(this.selectedEmployee.primaryIdentifier)\n .subscribe(\n (identifiers) => {\n this.employeeIdentifiers = identifiers;\n if (this.addEditOrViewOnly !== 'add') {\n this.addEmployeeIdentifiersFormControls();\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n\n this.primaryIdentifier = this.getPrimaryEmployeeIdentifier();\n this.populateFormControls();\n });\n } else if (this.addEditOrViewOnly !== 'add') {\n this.populateFormControls();\n } else if (this.addEditOrViewOnly === 'add') {\n this._clientIntegrationSourceService\n .getClientIntegrationSources()\n .subscribe((sources) => {\n this.clientIntegrationSources = sources;\n this.addEmployeeIdentifiersFormControls();\n });\n }\n if (this.selectedEmployee) {\n this.selectedEmployee.mobilePhone = this.clearPhoneNumberIfInvalid(\n this.selectedEmployee.mobilePhone\n );\n\n if (this.hierarchies && this.hierarchies.length > 0) {\n let tmpHierarchy = this.hierarchies.find(\n (h) => h.hierarchyIdentifier === this.locationIdentifier.value\n );\n\n if (tmpHierarchy && tmpHierarchy.name) {\n this.selectedEmployee.location = tmpHierarchy.name;\n }\n }\n }\n this.userProfileView =\n (this._activatedRoute.snapshot.url.length === 0 ||\n (this._activatedRoute.snapshot.url.length > 0 &&\n this._activatedRoute.snapshot.url[0].path !== 'employees')) &&\n !currentUser.impersonation;\n this.getClientStaffPositions();\n this.getZeroPadding();\n }\n\n getClientStaffPositions() {\n this._employeePositionService.getClientStaffPositionDDL().subscribe(\n (positions) => {\n this.clientStaffPositions = positions;\n },\n (error) => {\n this.error = error;\n throw new Error(error);\n }\n );\n }\n\n getZeroPadding() {\n this._clientIntegrationService\n .getClientIntegrationTypeByIntegrationType('Employees')\n .subscribe(\n (data) => {\n let integration: ClientIntegration = data;\n this.zeroPaddingFlag = integration.zeroPaddedIdentifier;\n this.zeroPaddingLength = integration.zeroPaddedLen;\n },\n (error) => {\n this.error = error;\n throw new Error(error);\n }\n );\n }\n\n onChanges() {\n this.firstName.valueChanges.subscribe((val) => {\n if (this.addEditOrViewOnly === 'add') {\n this.preferredName.setValue(val);\n }\n });\n this.hireDate.valueChanges.subscribe((_) => {\n this.selectedEmployee.lengthOfEmployment = this.calculateLengthOfEmployment();\n });\n this.terminationDate.valueChanges.subscribe(() => {\n this.employeeStatus.setValue(this.calculateEmploymentStatus());\n this.selectedEmployee.lengthOfEmployment = this.calculateLengthOfEmployment();\n this.updateUserStatus();\n });\n this.hireDate.valueChanges.subscribe(() => {\n this.employeeStatus.setValue(this.calculateEmploymentStatus());\n this.selectedEmployee.lengthOfEmployment = this.calculateLengthOfEmployment();\n });\n this.onLeave.valueChanges.subscribe((_) => {\n this.employeeStatus.setValue(this.calculateEmploymentStatus());\n });\n this.supervisorIdentifier.valueChanges.subscribe((_) => {\n this.setSupervisorLFName();\n });\n }\n\n updateUserStatus() {\n if (this.employeeStatus.value == 'Terminated') {\n this.userStatus.setValue('Inactive');\n this.userStatus.disable();\n } else {\n this.userStatus.setValue(this.selectedEmployee.userStatus);\n }\n }\n\n calculateEmploymentStatus(): string {\n const millisecondsInDay = 86400000;\n let hireDate: number = +(this.hireDate.value ?? this.selectedEmployee.hireDate);\n let terminationDate: number = +(\n this.terminationDate.value ?? this.selectedEmployee.terminationDate\n );\n let epochDays: number = Math.floor(Date.now() / millisecondsInDay);\n if (!hireDate || hireDate === 0) {\n return this.selectedEmployee.employeeStatus;\n }\n if (!terminationDate || terminationDate === 0) {\n if (this.onLeave.value === 'true') {\n return 'On Leave';\n } else {\n return 'Active';\n }\n }\n let terminatedDays = Math.floor(terminationDate / millisecondsInDay);\n if (terminatedDays <= epochDays) {\n return 'Terminated';\n }\n\n if (this.onLeave.value === 'true') {\n return 'On Leave';\n }\n\n return 'Active';\n }\n\n populateFormControls() {\n if (this.selectedEmployee) {\n this.firstName.setValue(this.selectedEmployee.firstName);\n this.lastName.setValue(this.selectedEmployee.lastName);\n this.preferredName.setValue(this.selectedEmployee.firstNameProper);\n this.primaryEmail.setValue(this.selectedEmployee.loginEmail);\n this.origPrimaryIdentifier.setValue(this.selectedEmployee.primaryIdentifier);\n this.jobTitle.setValue(this.selectedEmployee.jobTitle);\n\n // Numbers were coming in as \"-\" for some employees\n if (this.selectedEmployee.mobilePhone && this.selectedEmployee.mobilePhone.length < 3) {\n this.selectedEmployee.mobilePhone = null;\n }\n\n this.mobilePhone.setValue(\n this.clearPhoneNumberIfInvalid(this.selectedEmployee.mobilePhone)\n );\n\n this.locationIdentifier.setValue(this.selectedEmployee.locationIdentifier);\n this.isSupervisor.setValue(\n this.selectedEmployee.isSupervisor == null\n ? 'Unknown'\n : this.selectedEmployee.isSupervisor\n ? 'True'\n : 'False'\n );\n this.supervisorIdentifier.setValue(this.selectedEmployee.supervisorIdentifier);\n this.city.setValue(this.selectedEmployee.city);\n this.state.setValue(this.selectedEmployee.state);\n this.onLeave.setValue(this.selectedEmployee.onLeave ? 'true' : 'false');\n this.hireDate.setValue(\n this._reusableFunctions.getDateFromDateTimeOffset(this.selectedEmployee.hireDate)\n );\n this.terminationDate.setValue(\n this._reusableFunctions.getDateFromDateTimeOffset(\n this.selectedEmployee.terminationDate\n )\n );\n this.employmentType.setValue(\n this.selectedEmployee.fullTime ? 'Full-Time' : 'Part-Time'\n );\n this.isUser.setValue(this.selectedEmployee.userGUID ? true : false);\n this.updateUserStatus();\n this.userGUID.setValue(this.selectedEmployee.userGUID);\n this.employeeStatus.setValue(this.calculateEmploymentStatus());\n this.selectedEmployee.lengthOfEmployment = this.calculateLengthOfEmployment();\n } else {\n throw new Error('this.selectedEmployee is undefined.');\n }\n }\n clearPhoneNumberIfInvalid(phoneNumber: string) {\n if (phoneNumber && phoneNumber.length < 10) {\n return '';\n }\n return phoneNumber;\n }\n getClientStaffPositionKey(): number {\n if (!this.selectedEmployee) {\n throw new Error('Selected employee must be defined.');\n }\n if (!this.clientStaffPositions) {\n throw new Error('ClientStaffPositions are undefined.');\n }\n let clientStaffPosition = this.clientStaffPositions.find(\n (position) => position.clientPosition === this.selectedEmployee.jobTitle\n );\n if (clientStaffPosition) {\n return clientStaffPosition.clientStaffPositionKey;\n } else {\n throw new Error('ClientStaffPosition not found.');\n }\n }\n\n createFormGroup(): UntypedFormGroup {\n return this._formBuilder.group({\n contactInformation: this._formBuilder.group({\n firstName: new UntypedFormControl('', {\n validators: [Validators.required, Validators.maxLength(25)],\n updateOn: this.updateOn,\n }),\n lastName: new UntypedFormControl('', {\n validators: [Validators.required, Validators.maxLength(25)],\n updateOn: this.updateOn,\n }),\n preferredName: new UntypedFormControl('', {\n validators: [Validators.required, Validators.maxLength(25)],\n updateOn: this.updateOn,\n }),\n origPrimaryIdentifier: new UntypedFormControl(),\n primaryEmail: new UntypedFormControl('', {\n validators: [Validators.required, Validators.email, Validators.maxLength(100)],\n updateOn: 'blur',\n }),\n mobilePhone: new UntypedFormControl('', {\n validators: [Validators.minLength(10), Validators.maxLength(10)],\n updateOn: 'blur',\n }),\n jobTitle: new UntypedFormControl('', {\n validators: [Validators.required, Validators.maxLength(100)],\n updateOn: 'change',\n }),\n locationIdentifier: new UntypedFormControl('', {\n validators: [Validators.required],\n updateOn: 'change',\n }),\n supervisor: new UntypedFormControl(),\n isSupervisor: new UntypedFormControl('False'),\n supervisorIdentifier: new UntypedFormControl(''),\n city: new UntypedFormControl('', {\n validators: [Validators.maxLength(75)],\n updateOn: this.updateOn,\n }),\n state: new UntypedFormControl('', {\n validators: [Validators.maxLength(2)],\n updateOn: this.updateOn,\n }),\n }),\n employeeIdentifierDetails: this._formBuilder.array([], Validators.required),\n employeeDetails: this._formBuilder.group({\n employeeStatus: new UntypedFormControl('Active', {\n validators: Validators.required,\n updateOn: 'change',\n }),\n onLeave: new UntypedFormControl(false),\n hireDate: new UntypedFormControl('', {\n validators: Validators.required,\n updateOn: 'change',\n }),\n terminationDate: new UntypedFormControl(null, {\n validators: [],\n updateOn: 'change',\n }),\n employmentType: new UntypedFormControl('Full-Time', {\n validators: Validators.required,\n updateOn: 'change',\n }),\n }),\n userDetails: this._formBuilder.group({\n isUser: new UntypedFormControl(),\n userStatus: new UntypedFormControl(),\n userGUID: new UntypedFormControl(),\n userCreateDate: new UntypedFormControl(),\n }),\n });\n }\n\n addEmployeeIdentifiersFormControls() {\n if (this.addEditOrViewOnly === 'add') {\n this.clientIntegrationSources.forEach((integrationSource) => {\n const identityGroup: UntypedFormGroup = this._formBuilder.group({\n identifier: new UntypedFormControl('', {\n validators: integrationSource.isPrimaryForEmployeeIdentifier\n ? [\n EmployeeRecordViewRequirementsValidators.IdentitiferRequired(\n integrationSource.isPrimary == null\n ? integrationSource.isPrimaryForEmployeeIdentifier\n : integrationSource.isPrimary\n ),\n Validators.maxLength(20),\n ]\n : [\n EmployeeRecordViewRequirementsValidators.ZeroPaddingRequired(\n this.zeroPaddingFlag,\n this.zeroPaddingLength\n ),\n Validators.maxLength(20),\n ],\n updateOn: 'change',\n }),\n identifierType: new UntypedFormControl(\n integrationSource.identifierType,\n Validators.required\n ),\n clientIntegrationSource: new UntypedFormControl(integrationSource.source),\n description: new UntypedFormControl(\n integrationSource.description,\n Validators.required\n ),\n isPrimary: new UntypedFormControl(\n integrationSource.isPrimaryForEmployeeIdentifier,\n Validators.required\n ),\n });\n\n (this.employeeForm.controls.employeeIdentifierDetails as UntypedFormArray).push(\n identityGroup\n );\n });\n } else {\n this.employeeIdentifiers.forEach((identity) => {\n const identityGroup: UntypedFormGroup = this._formBuilder.group({\n identifier: new UntypedFormControl(identity.identifier, {\n validators: identity.isPrimary\n ? [\n EmployeeRecordViewRequirementsValidators.IdentitiferRequired(\n identity.isPrimary\n ),\n EmployeeRecordViewRequirementsValidators.ZeroPaddingRequired(\n this.zeroPaddingFlag,\n this.zeroPaddingLength\n ),\n Validators.maxLength(20),\n ]\n : [\n EmployeeRecordViewRequirementsValidators.ZeroPaddingRequired(\n this.zeroPaddingFlag,\n this.zeroPaddingLength\n ),\n Validators.maxLength(20),\n ],\n updateOn: 'change',\n }),\n identifierType: new UntypedFormControl(\n identity.identifierType,\n Validators.required\n ),\n clientIntegrationSource: new UntypedFormControl(\n identity.clientIntegrationSource\n ),\n description: new UntypedFormControl(identity.description, Validators.required),\n isPrimary: new UntypedFormControl(identity.isPrimary, Validators.required),\n employeeIdentifierKey: new UntypedFormControl(identity.employeeIdentifierKey),\n });\n\n identityGroup.get('identifier').markAsDirty();\n (this.employeeForm.controls.employeeIdentifierDetails as UntypedFormArray).push(\n identityGroup\n );\n });\n }\n }\n\n get identities() {\n return (this.employeeForm.get('employeeIdentifierDetails')).controls;\n }\n\n get firstName() {\n return this.employeeForm.get('contactInformation').get('firstName');\n }\n\n get lastName() {\n return this.employeeForm.get('contactInformation').get('lastName');\n }\n\n get preferredName() {\n return this.employeeForm.get('contactInformation').get('preferredName');\n }\n\n get primaryEmail() {\n return this.employeeForm.get('contactInformation').get('primaryEmail');\n }\n\n get mobilePhone() {\n return this.employeeForm.get('contactInformation').get('mobilePhone');\n }\n\n get origPrimaryIdentifier() {\n return this.employeeForm.get('contactInformation').get('origPrimaryIdentifier');\n }\n n;\n get jobTitle() {\n return this.employeeForm.get('contactInformation').get('jobTitle');\n }\n\n get locationIdentifier() {\n return this.employeeForm.get('contactInformation').get('locationIdentifier');\n }\n\n get isSupervisor() {\n return this.employeeForm.get('contactInformation').get('isSupervisor');\n }\n\n get supervisorIdentifier() {\n return this.employeeForm.get('contactInformation').get('supervisorIdentifier');\n }\n\n get supervisor() {\n return this.employeeForm.get('contactInformation').get('supervisor');\n }\n\n get city() {\n return this.employeeForm.get('contactInformation').get('city');\n }\n\n get state() {\n return this.employeeForm.get('contactInformation').get('state');\n }\n\n get employeeStatus() {\n return this.employeeForm.get('employeeDetails').get('employeeStatus');\n }\n\n get hireDate() {\n return this.employeeForm.get('employeeDetails').get('hireDate');\n }\n\n get terminationDate() {\n return this.employeeForm.get('employeeDetails').get('terminationDate');\n }\n\n get onLeave() {\n return this.employeeForm.get('employeeDetails').get('onLeave');\n }\n\n get employmentType() {\n return this.employeeForm.get('employeeDetails').get('employmentType');\n }\n\n get isUser() {\n return this.employeeForm.get('userDetails').get('isUser');\n }\n\n get userStatus() {\n return this.employeeForm.get('userDetails').get('userStatus');\n }\n\n get userGUID() {\n return this.employeeForm.get('userDetails').get('userGUID');\n }\n\n calculateLengthOfEmployment(): string {\n const millisecondsInDay = 86400000;\n let hireDate: number = +(this.hireDate.value ?? this.selectedEmployee.hireDate);\n if (!hireDate || hireDate === 0) {\n return '';\n }\n let endDate = +new Date();\n if (this.terminationDate.value) {\n endDate = +new Date(this.terminationDate.value);\n }\n let duration = endDate - hireDate;\n let remainingDaysOfEmployment = Math.floor(duration / millisecondsInDay);\n let employmentYears = Math.floor(remainingDaysOfEmployment / 365);\n remainingDaysOfEmployment -= employmentYears * 365;\n let employmentMonths = Math.floor(remainingDaysOfEmployment / 30);\n\n return employmentYears > 0\n ? employmentYears.toString() + ' years, ' + employmentMonths.toString() + ' months'\n : employmentMonths.toString() + ' months';\n }\n\n @HostListener('window:keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.keyCode === 27) {\n //keyCode 27 is the escape key.\n this.cancelClicked();\n }\n }\n\n mailto(email: string) {\n window.location.href = 'mailto: ' + email;\n }\n\n cancelClicked() {\n this.editing = false;\n this.cancelClickedEvent.emit();\n this.employeeForm.reset();\n }\n\n onSubmit() {\n this.submitting = true;\n this.employeeForm.markAsPristine();\n if (this.identifiersInThisFormMatch()) {\n this._toastr.warning('You have two matching Employee Numbers.');\n //I chose to handle this in a toast because the logic will\n //be changing to allow IDs to match as long as the ID is not\n //in use for the specific integration system.\n return;\n }\n let saveIsSupervisor = this.isSupervisor.value;\n this.isSupervisor.setValue(\n this.isSupervisor.value == 'Unknown'\n ? null\n : this.isSupervisor.value == 'True'\n ? true\n : false\n );\n let formatValue = this.formatRawFormValue();\n let hasValidDomain = this.isDomainValid();\n if (this.addEditOrViewOnly === 'add' && hasValidDomain) {\n this._employeeService.insertEmployee(formatValue).subscribe(\n () => {\n this._toastr.success('Employee created.');\n this.addEditOrViewOnly = 'viewOnly';\n this.editing = false;\n this.employeeModEvent.emit();\n this.employeeForm.markAsPristine();\n this.submitting = false;\n this.updateSelectedEmployee();\n },\n (error) => {\n this._toastr.warning('Employee create error.');\n this.submitting = false;\n throw new Error(error);\n }\n );\n } else if (this.addEditOrViewOnly !== 'add' && hasValidDomain) {\n this._employeeService.updateEmployeeRequest(formatValue).subscribe(\n () => {\n this._toastr.success('Employee updated.');\n this.editing = false;\n this.addEditOrViewOnly = 'viewOnly';\n let primaryIdentifer = this.getPrimaryEmployeeIdentifier();\n this.origPrimaryIdentifier.setValue(primaryIdentifer);\n this.employeeModEvent.emit(primaryIdentifer);\n this.employeeForm.markAsPristine();\n this.submitting = false;\n this.updateSelectedEmployee();\n },\n (error) => {\n this._toastr.warning('Employee update error.');\n this.submitting = false;\n throw new Error(error);\n }\n );\n } else {\n this._toastr.warning('Email domain not in Client list of acceptable domains');\n }\n\n this.isSupervisor.setValue(saveIsSupervisor);\n }\n updateSelectedEmployee() {\n this.selectedEmployee.mobilePhone = this.clearPhoneNumberIfInvalid(this.mobilePhone.value);\n this.selectedEmployee.firstName = this.firstName.value;\n this.selectedEmployee.lastName = this.lastName.value;\n this.selectedEmployee.firstNameProper = this.preferredName.value;\n\n let tmpHierarchy = this.hierarchies.find(\n (h) => h.hierarchyIdentifier === this.locationIdentifier.value\n );\n\n if (tmpHierarchy && tmpHierarchy.name) {\n this.selectedEmployee.location = tmpHierarchy.name;\n }\n\n this.selectedEmployee.loginEmail = this.primaryEmail.value;\n this.selectedEmployee.jobTitle = this.jobTitle.value;\n this.selectedEmployee.locationIdentifier = this.locationIdentifier.value;\n this.selectedEmployee.isSupervisor = this.isSupervisor.value;\n this.selectedEmployee.supervisorIdentifier = this.supervisorIdentifier.value;\n this.selectedEmployee.city = this.city.value;\n this.selectedEmployee.state = this.state.value;\n this.selectedEmployee.onLeave = this.onLeave.value;\n this.selectedEmployee.hireDate = this.hireDate.value;\n this.selectedEmployee.terminationDate = this.terminationDate.value;\n this.selectedEmployee.fullTime = this.employmentType.value === 'Full-Time';\n this.selectedEmployee.lengthOfEmployment = this.calculateLengthOfEmployment();\n this.selectedEmployee.userStatus = this.userStatus.value;\n }\n\n formatRawFormValue(): any {\n let formValues: any = this.employeeForm.getRawValue();\n try {\n formValues.contactInformation.clientStaffPositionKey = this.clientStaffPositions.find(\n (x) => x.clientPosition === formValues.contactInformation.jobTitle\n ).clientStaffPositionKey;\n if (formValues.contactInformation.supervisorIdentifier === 'N/A')\n formValues.contactInformation.supervisorIdentifier = null;\n } catch (ex) {\n throw new Error(ex);\n }\n formValues.employeeDetails.onLeave = formValues.employeeDetails.onLeave === 'true';\n return formValues;\n }\n\n identifiersInThisFormMatch() {\n let identityValues = this.identities\n .map((identity) => identity.get('identifier').value)\n .filter((id) => id);\n var matchExists = identityValues.some((id, index) => {\n return id.length > 0 && identityValues.indexOf(id) !== index;\n });\n return matchExists;\n }\n\n getPrimaryEmployeeIdentifier(): any {\n if (this.identities.length > 0) {\n return this.identities.find((identity) => identity.get('isPrimary')).value.identifier;\n }\n return null;\n }\n\n employeeIdentifierChangeHandler(index: number) {\n let integrationSource = this.identities[index].get('clientIntegrationSource').value;\n let integrationDescription = this.identities[index].get('description').value;\n let identifier = this.identities[index].get('identifier').value;\n if (!identifier) {\n return;\n //don't check empty string;\n }\n if (\n this.employeeIdentifiers &&\n this.employeeIdentifiers.length > index &&\n this.identities[index].get('identifier').value !==\n this.employeeIdentifiers[index].identifier\n ) {\n this.checkingIDForUniqueness = true;\n this.checkIdentifierForUniqueness(\n integrationSource,\n integrationDescription,\n identifier,\n index\n );\n } else if (this.addEditOrViewOnly === 'add') {\n this.checkingIDForUniqueness = true;\n this.checkIdentifierForUniqueness(\n integrationSource,\n integrationDescription,\n identifier,\n index\n );\n }\n\n if (this.zeroPaddingFlag && identifier.length < this.zeroPaddingLength) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Zero Padding',\n message: `Your identifier will be zero padded to satisfy the minimum length requirement of ${this.zeroPaddingLength} characters. Continue?`,\n },\n });\n\n dialogRef\n .afterClosed()\n .toPromise()\n .then((result) => {\n this.zeroPadEmployeeIdentifier(result, identifier, index);\n });\n }\n }\n\n employeeIdentifierChangeWarning(index: number) {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n message: `You are about to update an Employee Identifier. Please ensure that the new identifier corresponds with the applicable platform. Continue?`,\n },\n });\n }\n\n zeroPadEmployeeIdentifier(result: any, identifier: string, index: number) {\n if (\n result == 'accept' &&\n identifier?.length > 0 &&\n this.zeroPaddingFlag == true &&\n this.zeroPaddingLength != 0\n ) {\n let paddedIdentifier = identifier.padStart(this.zeroPaddingLength, '0');\n this.identities[index].get('identifier').setValue(paddedIdentifier);\n } else {\n this.identities[index].get('identifier').setValue(identifier);\n }\n }\n\n employeeEmailChangeHandler() {\n if (!this.primaryEmail.value) {\n return;\n }\n if (\n this.primaryEmail.dirty &&\n this.primaryEmail.value &&\n (!this.selectedEmployee.loginEmail ||\n this.selectedEmployee.loginEmail.toLowerCase() !==\n this.primaryEmail.value.toLowerCase())\n ) {\n this.checkEmailForUniqueness(this.primaryEmail.value);\n }\n if (!this.isDomainValid()) {\n this.primaryEmail.setErrors({ noDomain: true });\n }\n }\n\n isDomainValid() {\n if (this.primaryEmail.value) {\n let domainName = this.primaryEmail.value.split('@')[1]; // Get domain out of email\n if (domainName) {\n return (\n this.approvedDomains.findIndex(\n (domain) => domain.domain.toLowerCase() == domainName.toLowerCase()\n ) !== -1\n );\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n private checkEmailForUniqueness(email: any) {\n this.checkingEmailForUniqueness = true;\n this._employeeService.isEmailUnique(email, this.origPrimaryIdentifier.value).subscribe(\n (isUnique) => {\n if (!isUnique) {\n this.primaryEmail.setErrors({ notUnique: true });\n } else {\n }\n this.checkingEmailForUniqueness = false;\n },\n (error) => {\n this.checkingEmailForUniqueness = false;\n throw new Error(error);\n }\n );\n }\n\n private checkIdentifierForUniqueness(\n integrationSource: any,\n integrationDescription: any,\n identifier: any,\n index: number\n ) {\n this._clientIntegrationSourceService\n .isIdentifierUniqueForSource(integrationSource, integrationDescription, identifier)\n .subscribe((isUnique) => {\n if (!isUnique) {\n this.identities[index].get('identifier').setErrors({ notUnique: true });\n } else {\n this.identities[index].get('identifier').setErrors(null);\n }\n this.checkingIDForUniqueness = false;\n });\n }\n\n newJobTitleHandler(jobTitle: string) {\n this.jobTitle.setValue(jobTitle);\n this.employeeForm.markAsDirty();\n this.showAddJobTitle = false;\n this.getClientStaffPositions();\n }\n\n // Used by [disabled] on save button for non power user employee edit\n canSubmitNonPowerUserEdit(): boolean {\n if (\n this.firstName.value == this.selectedEmployee.firstName &&\n this.lastName.value == this.selectedEmployee.lastName &&\n this.preferredName.value == this.selectedEmployee.firstNameProper &&\n this.mobilePhone.value == this.selectedEmployee.mobilePhone\n ) {\n return false; // no changes made\n }\n\n return (\n this.firstName.valid &&\n this.lastName.valid &&\n this.preferredName.valid &&\n this.mobilePhone.valid\n );\n }\n\n // Save employee w/ non power user fields:\n // FirstName, LastName, PreferredName, Phone\n submitNonPowerUserEdit() {\n if (this.canSubmitNonPowerUserEdit()) {\n this.submitting = true;\n\n let data = {\n firstName: this.firstName.value,\n lastName: this.lastName.value,\n preferredName: this.preferredName.value,\n mobilePhone: this.mobilePhone.value,\n };\n\n this._employeeService.updateEmployeeSimpleContact(data).subscribe(\n (res) => {\n this.submitting = false;\n this.editing = false;\n this.addEditOrViewOnly = 'viewOnly';\n\n this._toastr.success('Your employee record has been updated!');\n this.reloadComponentOnEditAndSave();\n },\n (error) => {\n this.submitting = false;\n this.editing = false;\n this.addEditOrViewOnly = 'viewOnly';\n throw new Error(error);\n }\n );\n }\n }\n\n editSimpleContact() {\n this.editing = true;\n this.addEditOrViewOnly = 'nonPowerUserEdit';\n }\n\n // This is bad practice but I can't figure out this component.\n reloadComponentOnEditAndSave() {\n let currentUrl = this.router.url;\n this.router.routeReuseStrategy.shouldReuseRoute = () => false;\n this.router.onSameUrlNavigation = 'reload';\n this.router.navigate([currentUrl]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KPIConfigService {\n private _url = `https://${window.location.host}/api/v0.5/KPIConfig/`;\n\n constructor(private http: HttpClient) {}\n\n getKPIConfig(): Observable {\n return this.http.get(this._url);\n }\n\n saveKPIConfig(data: IKPIConfigData[], isDelete = false, mostRecentClientKPIKey = 0) {\n return this.http.post(this._url, {\n data,\n isDelete,\n mostRecentClientKPIKey,\n });\n }\n saveKPITimeboxing(\n data: IKPIConfigData[],\n isDelete,\n currentClientKPIKey,\n stopDate,\n isTimeboxing\n ) {\n return this.http.post(this._url + 'SaveKPITimeboxing', {\n data,\n isDelete,\n currentClientKPIKey,\n stopDate,\n isTimeboxing,\n });\n }\n\n deleteKPITimeboxing(data: IKPIConfigData[], previousClientKPIKey, makePreviousKPINull) {\n return this.http.post(this._url + 'DeleteKPITimeboxing', {\n data,\n previousClientKPIKey,\n makePreviousKPINull,\n });\n }\n\n isAllDataValid(data: IKPIConfigData[]) {\n for (let row of data) {\n if (row.errors?.length > 0) {\n return false;\n }\n }\n return true;\n }\n}\n\nexport interface IKPIConfigData {\n activeDate: Date;\n bestScore: string;\n category: string;\n clientKPIDescription: string;\n clientKPIKey: number;\n errors: string[];\n inActiveDate: Date;\n isActive: boolean;\n isDeleted: boolean;\n isLocked: boolean;\n isPercentage: boolean;\n isWeightedByLA: boolean;\n isWeightedByLADisabled: boolean;\n kpiCategory: string;\n kpiFormat: string;\n kpiMasterKey: number;\n kpiMilestoneBPSKey: number;\n kpiMilestoneCustomKey: number;\n kpiMilestoneKey: number;\n kpiMilestoneStaffingKey: number;\n milestoneKey: number;\n toMilestoneKey: number;\n staffingKey: number;\n lastMod: Date;\n lastModUserKey: number;\n kpiBpsDisplay: string;\n kpiDisplayShort: string;\n staffingPositionKey: number;\n positionAbbv: string;\n kpiCustomTag: string;\n ddbIdentifier: string;\n ddbiAvailable: boolean;\n max: number;\n min: number;\n precision: number;\n range1End: number;\n range2End: number;\n range2Start: number;\n range3End: number;\n range3Start: number;\n range4End: number;\n range4Start: number;\n range5Start: number;\n startDate: string;\n stopDate: string;\n target: number;\n targetError: boolean;\n range2StartError: boolean;\n range3StartError: boolean;\n range3EndError: boolean;\n range4EndError: boolean;\n thirdPartyTypeKey: boolean;\n canEdit?: boolean;\n canDelete?: boolean;\n}\n\nexport interface IDistributionDialogData {\n dataBackToParent: BehaviorSubject;\n dataToChild: IKPIConfigData;\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, ANIMATION_MODULE_TYPE, numberAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Injection token to be used to override the default options for `mat-progress-bar`. */\nconst MAT_PROGRESS_BAR_DEFAULT_OPTIONS = new InjectionToken('MAT_PROGRESS_BAR_DEFAULT_OPTIONS');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = new InjectionToken('mat-progress-bar-location', { providedIn: 'root', factory: MAT_PROGRESS_BAR_LOCATION_FACTORY });\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => (_location ? _location.pathname + _location.search : ''),\n };\n}\nclass MatProgressBar {\n constructor(_elementRef, _ngZone, _changeDetectorRef, _animationMode, defaults) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n this._isNoopAnimation = false;\n this._defaultColor = 'primary';\n this._value = 0;\n this._bufferValue = 0;\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n this.animationEnd = new EventEmitter();\n this._mode = 'determinate';\n /** Event handler for `transitionend` events. */\n this._transitionendHandler = (event) => {\n if (this.animationEnd.observers.length === 0 ||\n !event.target ||\n !event.target.classList.contains('mdc-linear-progress__primary-bar')) {\n return;\n }\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this._ngZone.run(() => this.animationEnd.next({ value: this.value }));\n }\n };\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n if (defaults) {\n if (defaults.color) {\n this.color = this._defaultColor = defaults.color;\n }\n this.mode = defaults.mode || this.mode;\n }\n }\n // TODO: should be typed as `ThemePalette` but internal apps pass in arbitrary strings.\n /**\n * Theme color of the progress bar. This API is supported in M2 themes only, it\n * has no effect in M3 themes.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/theming#using-component-color-variants.\n */\n get color() {\n return this._color || this._defaultColor;\n }\n set color(value) {\n this._color = value;\n }\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n get value() {\n return this._value;\n }\n set value(v) {\n this._value = clamp(v || 0);\n this._changeDetectorRef.markForCheck();\n }\n /** Buffer value of the progress bar. Defaults to zero. */\n get bufferValue() {\n return this._bufferValue || 0;\n }\n set bufferValue(v) {\n this._bufferValue = clamp(v || 0);\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n // Note that we don't technically need a getter and a setter here,\n // but we use it to match the behavior of the existing mat-progress-bar.\n this._mode = value;\n this._changeDetectorRef.markForCheck();\n }\n ngAfterViewInit() {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular(() => {\n this._elementRef.nativeElement.addEventListener('transitionend', this._transitionendHandler);\n });\n }\n ngOnDestroy() {\n this._elementRef.nativeElement.removeEventListener('transitionend', this._transitionendHandler);\n }\n /** Gets the transform style that should be applied to the primary bar. */\n _getPrimaryBarTransform() {\n return `scaleX(${this._isIndeterminate() ? 1 : this.value / 100})`;\n }\n /** Gets the `flex-basis` value that should be applied to the buffer bar. */\n _getBufferBarFlexBasis() {\n return `${this.mode === 'buffer' ? this.bufferValue : 100}%`;\n }\n /** Returns whether the progress bar is indeterminate. */\n _isIndeterminate() {\n return this.mode === 'indeterminate' || this.mode === 'query';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_PROGRESS_BAR_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"18.2.0-next.2\", type: MatProgressBar, isStandalone: true, selector: \"mat-progress-bar\", inputs: { color: \"color\", value: [\"value\", \"value\", numberAttribute], bufferValue: [\"bufferValue\", \"bufferValue\", numberAttribute], mode: \"mode\" }, outputs: { animationEnd: \"animationEnd\" }, host: { attributes: { \"role\": \"progressbar\", \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\", \"tabindex\": \"-1\" }, properties: { \"attr.aria-valuenow\": \"_isIndeterminate() ? null : value\", \"attr.mode\": \"mode\", \"class\": \"\\\"mat-\\\" + color\", \"class._mat-animation-noopable\": \"_isNoopAnimation\", \"class.mdc-linear-progress--animation-ready\": \"!_isNoopAnimation\", \"class.mdc-linear-progress--indeterminate\": \"_isIndeterminate()\" }, classAttribute: \"mat-mdc-progress-bar mdc-linear-progress\" }, exportAs: [\"matProgressBar\"], ngImport: i0, template: \"\\n
\\n
\\n \\n @if (mode === 'buffer') {\\n
\\n }\\n\\n\\n \\n\\n
\\n \\n
\\n\", styles: [\".mat-mdc-progress-bar{display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mdc-linear-progress-track-height),var(--mdc-linear-progress-active-indicator-height))}.cdk-high-contrast-active .mdc-linear-progress{outline-color:CanvasText}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mdc-linear-progress-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mdc-linear-progress-track-height);border-radius:var(--mdc-linear-progress-track-shape, var(--mat-app-corner-none))}.mdc-linear-progress__buffer-dots{-webkit-mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering 250ms infinite linear;background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.cdk-high-contrast-active .mdc-linear-progress__buffer-dots{background-color:ButtonBorder}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mdc-linear-progress-track-height) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-progress-bar', exportAs: 'matProgressBar', host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n // set tab index to -1 so screen readers will read the aria-label\n // Note: there is a known issue with JAWS that does not read progressbar aria labels on FireFox\n 'tabindex': '-1',\n '[attr.aria-valuenow]': '_isIndeterminate() ? null : value',\n '[attr.mode]': 'mode',\n 'class': 'mat-mdc-progress-bar mdc-linear-progress',\n '[class]': '\"mat-\" + color',\n '[class._mat-animation-noopable]': '_isNoopAnimation',\n '[class.mdc-linear-progress--animation-ready]': '!_isNoopAnimation',\n '[class.mdc-linear-progress--indeterminate]': '_isIndeterminate()',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, template: \"\\n
\\n
\\n \\n @if (mode === 'buffer') {\\n
\\n }\\n\\n\\n \\n\\n
\\n \\n
\\n\", styles: [\".mat-mdc-progress-bar{display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mdc-linear-progress-track-height),var(--mdc-linear-progress-active-indicator-height))}.cdk-high-contrast-active .mdc-linear-progress{outline-color:CanvasText}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mdc-linear-progress-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mdc-linear-progress-track-height);border-radius:var(--mdc-linear-progress-track-shape, var(--mat-app-corner-none))}.mdc-linear-progress__buffer-dots{-webkit-mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering 250ms infinite linear;background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.cdk-high-contrast-active .mdc-linear-progress__buffer-dots{background-color:ButtonBorder}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mdc-linear-progress-track-height) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}}\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_DEFAULT_OPTIONS]\n }] }], propDecorators: { color: [{\n type: Input\n }], value: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], bufferValue: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], animationEnd: [{\n type: Output\n }], mode: [{\n type: Input\n }] } });\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\n\nclass MatProgressBarModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBarModule, imports: [MatProgressBar], exports: [MatProgressBar, MatCommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBarModule, imports: [MatCommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.0-next.2\", ngImport: i0, type: MatProgressBarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatProgressBar],\n exports: [MatProgressBar, MatCommonModule],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_DEFAULT_OPTIONS, MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport {IKPIConfigData} from \"app/modules/settings/services/kpi-config.service\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KpiDistributionAnalysisService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/KpiDistributions').replace(\n '{version}',\n this.version\n );\n constructor(private http: HttpClient) {}\n\n getKpiDistributions(parameters: IDistributionParameters): Observable {\n return this.http.post(this._url + '/GetKpiDistributions/', parameters, {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n });\n }\n\n setDistributionParameters(data: IKPIConfigData, \n cleanedByMinAndMax: '0' | '1',\n getCleanedData: '0' | '1',\n isShowNonZeroDataOnly: '0' | '1' = '1') {\n let parametes: IDistributionParameters = \n {\n fromDatePeriod: 'Trailing 36m',\n staffingKey: data.staffingKey.toString(),\n milestoneKey: data.milestoneKey.toString(),\n category: 'KPIValue',\n getCleanedData: getCleanedData,\n toMilestoneKey: data.toMilestoneKey ? data.toMilestoneKey.toString() : '',\n cleanedByMinAndMax: cleanedByMinAndMax,\n displayShort: data.kpiDisplayShort,\n ddbIdentifier: data.ddbIdentifier,\n positionAbbv: data.positionAbbv ?? 'LO',\n customTag: data.kpiCustomTag,\n bpsDisplay: data.kpiBpsDisplay,\n isShowNonZeroDataOnly: isShowNonZeroDataOnly,\n }; \n return Object.assign({} ,parametes);\n }\n}\n\nexport interface IDistributionParameters {\n fromDatePeriod: string;\n milestoneKey: string;\n staffingKey?: string;\n category: string;\n getCleanedData: '1' | '0';\n cleanedByMinAndMax: '1' | '0';\n displayShort: string;\n ddbIdentifier: string;\n interQuartileMin?: string;\n interQuartileMax?: string;\n toMilestoneKey: string;\n givenMin?: string;\n givenMax?: string;\n positionAbbv: string;\n bpsDisplay: string;\n customTag: string;\n isShowNonZeroDataOnly: '0' | '1'; \n}\n\nexport interface IKPIDistribution {\n binInfoArray?: Array;\n outliersArray?: Array;\n mean: number;\n std: number;\n min: number;\n max: number;\n interQuartileMin?: number;\n interQuartileMax?: number;\n quartile1?: number;\n quartile2?: number;\n quartile3?: number;\n median: number;\n mode: number;\n count: number;\n numberOfBins?: number;\n outlierCount: number;\n cleanedByMinAndMax: '1' | '0';\n}\n\nexport interface IDistributionValue {\n bin: string;\n name: string;\n y: number;\n x: number;\n count: number;\n binStart: number;\n binEnd: number;\n probability: number;\n}\n\nexport interface IDistributionData {\n yearMonthCalendar: string;\n employeeIdentifier: string;\n employeeName: string;\n units: number;\n volume: number;\n kpiType: string;\n kpiValue: number;\n}\n\nexport interface IDistributionMetrics {\n mean: string;\n median: string;\n min: string;\n max: string;\n std: string;\n mode: string;\n count: string;\n outlierCount: string;\n}","
\n
\n
\n
\n
{{ data.clientKPIDescription }}
\n
{{ saveMessage }}
\n
\n\n
\n
\n \n
\n
\n
\n
Calculated metrics
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
MetricValue
Mean (μ){{ metrics.mean }}
Median{{ metrics.median }}
Std (σ){{ metrics.std }}
Min{{ metrics.min }}
Max{{ metrics.max }}
Count{{ metrics.count }}
Outliers{{ metrics.outlierCount }}
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
Configuration values
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range1End, dataItem.precision, dataItem.kpiFormat)\n }}\n \n \n\n \n \n \n \n 0\">\n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range2Start, dataItem.precision, dataItem.kpiFormat)\n }}\n \n -\n {{\n _reusableFunctions.formatNumber(dataItem.range2End, dataItem.precision, dataItem.kpiFormat)\n }}\n \n \n\n \n \n \n \n \n\n 0\">\n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range3Start, dataItem.precision, dataItem.kpiFormat)\n }}\n \n\n \n <\n >\n \n {{\n _reusableFunctions.formatNumber(dataItem.target, dataItem.precision, dataItem.kpiFormat)\n }}\n \n 0\">\n \n \n\n \n <\n >\n \n 0\">\n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range3End, dataItem.precision, dataItem.kpiFormat)\n }}\n \n \n \n\n \n \n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range4Start, dataItem.precision, dataItem.kpiFormat)\n }}\n -\n\n 0\">\n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range4End, dataItem.precision, dataItem.kpiFormat)\n }}\n \n \n \n\n \n \n {{\n _reusableFunctions.formatNumber(dataItem.range5Start, dataItem.precision, dataItem.kpiFormat)\n }}\n \n \n \n \n \n \n \n
\n
\n
\n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA} from \"@angular/material/dialog\";\nimport * as Highcharts from 'highcharts';\nimport {GridDataResult} from \"@progress/kendo-angular-grid\";\nimport {orderBy, SortDescriptor} from \"@progress/kendo-data-query\";\nimport {IChartTitleData, ILargeCardInteriorOptions} from \"app/modules/shared/interfaces/card-data\";\nimport {NoDataActionType} from \"app/modules/shared/interfaces/no-data\";\nimport {\n IKPIDistribution,\n IDistributionParameters,\n KpiDistributionAnalysisService, IDistributionMetrics\n} from \"app/modules/settings/services/kpi-distribution-analysis.service\";\nimport {ReusableFunctions} from \"app/modules/shared/classes/reusable-functions\";\nimport {KPIService} from \"app/modules/shared/services/kpi.service\";\nimport {CurrentUserStateService} from \"app/modules/shared/services/current-user-state.service\";\nimport { ImpersonationService } from 'app/modules/shared/services/impersonation.service';\nimport {\n IDistributionDialogData,\n IKPIConfigData,\n KPIConfigService\n} from \"app/modules/settings/services/kpi-config.service\";\n\n@Component({\n selector: 'app-distribution-analyze-dialog',\n templateUrl: './distribution-analyze-dialog.component.html',\n styleUrls: ['./distribution-analyze-dialog.component.scss']\n})\nexport class DistributionAnalyzeDialogComponent implements OnInit {\n gridData: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'clientKPIDescription',\n dir: 'asc',\n },\n ];\n\n loading: boolean = false;\n histogramCard: ILargeCardInteriorOptions;\n boxplotCard: ILargeCardInteriorOptions;\n distributionInfo: IKPIDistribution;\n metrics: IDistributionMetrics;\n action: NoDataActionType;\n distributionParameters: IDistributionParameters;\n isAuthorized: boolean;\n configValueSet: number[];\n isErrorFree: boolean;\n dataCleaned: boolean;\n saveMessage: string;\n saveMessageColor: string;\n buttonOptions: Array<{\n id: string;\n name: string;\n disabled: boolean;\n class: string;\n }>;\n data: IKPIConfigData;\n \n constructor(\n @Inject(MAT_DIALOG_DATA) public incomingData: IDistributionDialogData,\n private _distributionService: KpiDistributionAnalysisService,\n private _KPIService: KPIService,\n private _reusableFunctions: ReusableFunctions,\n private _currentUserStateService: CurrentUserStateService,\n private _impersonationService: ImpersonationService,\n private _kpiConfigService: KPIConfigService,\n ) {\n }\n\n ngOnInit() {\n this.dataCleaned = false;\n this.isErrorFree = false;\n this.saveMessage = '';\n this.data = this.incomingData.dataToChild;\n this.isAuthorized = this._currentUserStateService.isLBASuperUser() || \n this._currentUserStateService.isPowerUser() || \n this._currentUserStateService.isPlatformUser();\n \n if (this.isAuthorized) {\n this.data['status'] = 'Current';\n this.gridData = {\n data: orderBy([this.data], this.sort),\n total: 0,\n };\n this.configValueSet = [];\n this.buttonOptions = [\n {\n id: 'reset',\n name: 'Reset Charts',\n disabled: true,\n class: '',\n },\n {\n id: 'clean',\n name: 'Clean data',\n disabled: true,\n class: '',\n },\n {\n id: 'apply',\n name: 'Apply to grid',\n disabled: true,\n class: '',\n },\n {\n id: 'save',\n name: 'Save',\n disabled: true,\n class: '',\n }, \n ];\n this.action = NoDataActionType.pageStart;\n this.initializeLargeCard();\n \n this.distributionInfo = {\n mean: 0,\n median: 0,\n min: 0,\n max: 0,\n std: 0,\n mode: 0,\n count: 0,\n outlierCount: 0,\n cleanedByMinAndMax: \"0\", \n }; \n this.getDistributionValues();\n }\n }\n\n setDistributionParameters(getCleanedData: '0' | '1') { \n this.metrics = {\n mean: '--',\n median: '--',\n min: '--',\n max: '--',\n std: '--',\n mode: '--',\n count: '--',\n outlierCount: '--', \n }; \n \n this.distributionParameters = this._distributionService.setDistributionParameters(\n this.data, \n this.distributionInfo.cleanedByMinAndMax, \n getCleanedData, '1');\n // TODO: Determine is zero is a valid data point for some KPIs.\n \n if (this.data.min !== null) {\n this.distributionParameters.givenMin = this.data.min.toString();\n }\n\n if (this.data.max !== null) {\n this.distributionParameters.givenMax = this.data.max.toString();\n }\n \n if (this.distributionInfo.interQuartileMax != null && this.distributionInfo.interQuartileMin != null) {\n this.distributionParameters.interQuartileMax = this.distributionInfo.interQuartileMax.toString();\n this.distributionParameters.interQuartileMin = this.distributionInfo.interQuartileMin.toString();\n }\n }\n\n formatVal(value: number, precision = this.data.precision, format = this.data.kpiFormat) {\n return this._reusableFunctions.formatNumber(value, precision, format);\n }\n getDistributionValues(getCleanedData: '0' | '1' = '0') {\n this.setDistributionParameters(getCleanedData);\n let cards = [this.histogramCard, this.boxplotCard];\n \n cards.forEach((card, index) => {\n card.hasData = false;\n card.isDataReady = false;\n this.updateCardData(card, index);\n })\n \n this._distributionService.getKpiDistributions(this.distributionParameters)\n .subscribe((res) => {\n if (res && res.count > 0) {\n this.distributionInfo = res;\n this.distributionInfo.outlierCount = res.outliersArray.length;\n\n this.metrics = {\n mean: this.formatVal(res.mean),\n median: this.formatVal(res.median),\n min: this.formatVal(res.min),\n max: this.formatVal(res.max),\n std: this.formatVal(res.std),\n mode: this.formatVal(res.mode),\n count: this.formatVal(res.count,0,'number'),\n outlierCount: this.formatVal(res.outliersArray.length, 0,'number'),\n };\n\n this.setChartData();\n this.setButtonActiveState();\n \n cards.forEach((card, index) => {\n card.hasData = true;\n card.isDataReady = true;\n this.updateCardData(card, index);\n })\n \n } else {\n cards.forEach((card, index) => {\n card.hasData = false;\n card.isDataReady = true;\n card.action = this.action;\n this.updateCardData(card, index);\n })\n }\n },\n (error) => {\n cards.forEach((card, index) => {\n card.hasData = false;\n card.isDataReady = true;\n card.action = NoDataActionType.error;\n this.updateCardData(card, index);\n })\n });\n }\n\n updateCardData(\n card: ILargeCardInteriorOptions, \n index: number) \n {\n if (index === 0) {\n this.histogramCard = Object.assign({}, card);\n }\n else {\n this.boxplotCard = Object.assign({}, card);\n }\n }\n\n initializeLargeCard() {\n let card: ILargeCardInteriorOptions = {\n action: NoDataActionType.pageStart,\n componentTitle: 'Histogram',\n chartTitleData: {} as IChartTitleData,\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: 'kpi-distribution-histogram',\n heightPercent: 99,\n minHeight: 269,\n };\n\n this.histogramCard = Object.assign({}, card);\n card.componentTitle = 'Normal Distribution';\n card.uniqueId = 'kpi-distribution-bellCurve';\n this.boxplotCard = Object.assign({}, card);\n }\n\n setChartData() {\n let histogramChartOptions = this.setHistogramChartOptions();\n let bellCurveChartOptiions = this.setBoxplotChartOptions();\n this.boxplotCard.chart = new Highcharts.Chart(this.boxplotCard.uniqueId, bellCurveChartOptiions);\n this.histogramCard.chart = new Highcharts.Chart(this.histogramCard.uniqueId, histogramChartOptions);\n }\n\n setHistogramChartOptions() {\n let data = this.distributionInfo.binInfoArray;\n let splineData = data.map((obj) => ({...obj}));\n let maLength = 15;\n let sumForMA = 0;\n splineData.map((obj, index) => {\n let begin = 0;\n let end = index + 1;\n if (index >= maLength) {\n begin = index + 1 - maLength;\n end = begin + maLength;\n }\n\n let dataFractionForMA = splineData.slice(begin, end);\n sumForMA = this._reusableFunctions.calculateSumByProperty(dataFractionForMA, 'probability');\n let ma = sumForMA / maLength;\n obj.y = +(ma * 100).toFixed(3)\n });\n let numberOfBins = this.distributionInfo.numberOfBins;\n let mean = this.distributionInfo.mean;\n let median = this.distributionInfo.median;\n\n return {\n chart: {\n defaultSeriesType: 'column',\n borderWidth: 0,\n borderColor: '#ccc',\n plotBorderWidth: 1,\n plotBorderColor: '#ccc',\n height: 250,\n },\n credits: {enabled: false},\n exporting: {enabled: false},\n title: {text: null},\n tooltip: {\n borderWidth: 1,\n backgroundColor: '#ffffff',\n },\n plotOptions: {\n column: {\n shadow: false,\n borderColor: 'rgba(204,204,204,.85)',\n color: 'rgba(204,204,204,.85)',\n showInLegend: false,\n },\n histogram: {\n showInLegend: false,\n color: 'rgba(204,204,204,.85)',\n },\n },\n xAxis: [{\n title: {text: 'No of Bins = ' + numberOfBins},\n labels: {\n style: {\n fontSize: '8px',\n fontWeight: 'normal',\n color: '#333'\n },\n },\n lineWidth: 0,\n opposite: false,\n plotLines: [\n {\n value: mean,\n color: 'orange',\n width: 1,\n label: {\n text: 'mean [ ' + this.formatVal(mean) + ' ]',\n rotation: 0,\n style: {\n color: 'orange',\n },\n }\n },\n {\n value: median,\n color: 'green',\n \n width: 1,\n label: {\n text: 'median [ ' + this.formatVal(median) + ' ]',\n rotation: 0,\n y: 25,\n style: {\n color: 'green',\n },\n }\n },\n ],\n },\n ],\n yAxis: [\n {\n title: {text: 'Occurence'},\n gridLineColor: '#e9e9e9',\n tickColor: '#ccc',\n lineColor: '#ccc',\n opposite: false,\n },\n {\n title: {text: 'Probability %'},\n gridLineColor: '#e9e9e9',\n tickColor: '#ccc',\n lineColor: '#ccc',\n opposite: true,\n },\n ],\n series: [\n {\n name: 'Occurence',\n type: 'column',\n xAxis: 0,\n yAxis: 0,\n data: data,\n },\n {\n data: splineData,\n name: 'Probability %',\n visible: true,\n type: \"spline\",\n showInLegend: false,\n yAxis: 1,\n color: '#D66BA0',\n },\n ]\n } as Highcharts.Options\n }\n \n setBoxplotChartOptions() { \n let category = this.distributionParameters.category;\n let outliers = [];\n let outlierArray = this.distributionInfo.outliersArray;\n let boxplotData = [\n this.distributionInfo.interQuartileMin,\n this.distributionInfo.quartile1,\n this.distributionInfo.quartile2,\n this.distributionInfo.quartile3,\n this.distributionInfo.interQuartileMax,\n ];\n if (outlierArray && outlierArray.length > 0) {\n //// ADD LOGIC TO MATCH CATEGORY NAMES; ex lowercase to camelcase\n outlierArray.forEach((item) => {\n outliers.push({\n x: 0,\n y: +item[category.toLowerCase()],\n }); \n });\n }\n return {\n chart: {\n defaultSeriesType: 'column',\n type: 'boxplot',\n inverted: true,\n borderWidth: 0,\n borderColor: '#ccc',\n plotBorderWidth: 1,\n plotBorderColor: '#ccc',\n height: 250,\n },\n credits: {enabled: false},\n exporting: {enabled: false},\n title: {text: null },\n tooltip: {\n borderWidth: 1,\n backgroundColor: '#ffffff',\n },\n plotOptions: {\n scatter: {\n shadow: false,\n showInLegend: false,\n },\n boxplot: {},\n },\n xAxis: [\n {\n type: \"category\",\n categories: ['Distribution stat'],\n title: {\n text: '',\n },\n visible: false, \n labels: {\n enabled: false,\n formatter: function(label) {\n return (+label.value).toFixed(3);\n }\n },\n },],\n yAxis: [\n {\n title: {\n text: category\n },\n visible: true, \n },\n ],\n series: [\n {\n name: '',\n type: 'boxplot', \n visible: true,\n color: '#D66BA0',\n showInLegend: false,\n data: [boxplotData],\n },\n {\n name: 'Outliers',\n color: Highcharts.getOptions().colors[0],\n type: 'scatter',\n data: outliers,\n marker: {\n fillColor: 'white',\n lineWidth: 1,\n lineColor: 'grey', \n },\n tooltip: {\n pointFormat: 'Observation: {point.y}'\n }\n }\n ]\n } as Highcharts.Options\n }\n\n distributionButtonClick(action: string) {\n if (action === 'clean') {\n this.dataCleaned = true;\n this.getDistributionValues('1');\n }\n \n if (action === 'reset') {\n this.dataCleaned = false;\n this.distributionInfo.cleanedByMinAndMax = \"0\";\n this.getDistributionValues('0');\n }\n \n if (action === 'apply') {\n this.updateKpiGrid();\n this.checkForErrors();\n }\n\n if (action === 'save') {\n if (this.isErrorFree) {\n this.saveToDatabase(); \n } \n }\n }\n \n saveToDatabase() {\n let data = this.gridData.data;\n if (data && data[1]) {\n let updatedData = data[1];\n this._kpiConfigService.saveKPIConfig([updatedData]).subscribe(\n (res: number) => {\n if (res !== null && res > 0) {\n this.saveMessageColor = 'green';\n this.saveMessage = 'Changes have been saved';\n this.incomingData.dataBackToParent.next(updatedData);\n }\n else {\n this.saveMessage = 'Something went wrong. Please check.';\n this.saveMessageColor = 'orange';\n }\n this.removeSaveMessage();\n },\n (error) => {\n this.saveMessageColor = 'orange';\n this.saveMessage = 'Something went wrong. Please check.';\n this.removeSaveMessage();\n throw new Error(error);\n } \n );\n }\n }\n \n removeSaveMessage() {\n setTimeout(() => {\n this.saveMessage = '';\n this.saveMessageColor = '';\n }, 5000);\n }\n \n updateKpiGrid() { \n let data = [this.data]; \n let updatedData = Object.assign({}, this.data);\n \n updatedData['status'] = 'Updating to';\n this.setKPIValues();\n let kpiValues = this.configValueSet;\n updatedData.range1End = kpiValues[0];\n updatedData.range2Start = kpiValues[1];\n updatedData.range2End = kpiValues[2];\n updatedData.range3Start = kpiValues[3]\n updatedData.target = kpiValues[4];\n updatedData.range3End = kpiValues[5];\n updatedData.range4Start = kpiValues[6];\n updatedData.range4End = kpiValues[7];\n updatedData.range5Start = kpiValues[8]; \n \n data.push(updatedData);\n this.gridData = {\n data: orderBy(data, this.sort),\n total: 0,\n }; \n }\n \n setKPIValues() {\n let precision = this.data.precision;\n let target = this.distributionInfo.mean;\n let stdFactor = 0.5;\n let deviationFactor = (this.distributionInfo.std * stdFactor);\n\n let nextValueDifference = Math.pow(10, precision * -1);\n this.configValueSet = [\n +((target - (2 * deviationFactor)).toFixed(precision)) - nextValueDifference,\n +(target - (2 * deviationFactor)).toFixed(precision),\n +((target - deviationFactor).toFixed(precision)) - nextValueDifference,\n +(target - deviationFactor).toFixed(precision),\n +(target.toFixed(precision)),\n +((target + deviationFactor).toFixed(precision)),\n +((target + deviationFactor).toFixed(precision)) + nextValueDifference,\n +(target + (2 * deviationFactor)).toFixed(precision),\n +((target + (2 * deviationFactor)).toFixed(precision)) + nextValueDifference,\n ]; \n \n if (this.data.bestScore === 'Lowest') {\n this.configValueSet.sort((a, b) => -1);\n }\n }\n\n updatingToValueChange(changingFieldId: string, changeToFieldId: string, position: number) {\n let precision = this.data.precision;\n let nextValueDifference = Math.pow(10, precision * -1);\n let operator = 1;\n if (this.data.bestScore === 'Lowest') {\n nextValueDifference = nextValueDifference * -1;\n } \n \n if (position > 4) {\n operator = 1;\n }\n else if (position < 4) {\n operator = -1;\n }\n\n let data = this.gridData.data;\n \n if (data[1]) {\n let changingValue = data[1][changingFieldId];\n if (position != 4) {\n data[1][changeToFieldId] = changingValue + nextValueDifference * operator;\n } \n }\n this.checkForErrors();\n }\n \n checkForErrors() {\n let fieldSequence = [\n {\n fieldId: 'range1End',\n fieldOrder: 0,\n isAdjustable: false,\n },\n {\n fieldId: 'range2Start',\n fieldOrder: 1,\n isAdjustable: true,\n errorFieldId: 'range2StartError',\n },\n {\n fieldId: 'range2End',\n fieldOrder: 2,\n isAdjustable: false,\n },\n {\n fieldId: 'range3Start',\n fieldOrder: 3,\n isAdjustable: true,\n errorFieldId: 'range3StartError',\n },\n {\n fieldId: 'target',\n fieldOrder: 4,\n isAdjustable: true,\n errorFieldId: 'targetError',\n },\n {\n fieldId: 'range3End',\n fieldOrder: 5,\n isAdjustable: true,\n errorFieldId: 'range3EndError',\n },\n {\n fieldId: 'range4Start',\n fieldOrder: 6,\n isAdjustable: false,\n },\n {\n fieldId: 'range4End',\n fieldOrder: 7,\n isAdjustable: true,\n errorFieldId: 'range4EndError',\n },\n {\n fieldId: 'range5Start',\n fieldOrder: 8,\n isAdjustable: false,\n },\n ];\n \n let dataSet: IKPIConfigData[] = this.gridData.data;\n if (dataSet[1]) {\n let data = dataSet[1];\n let errorCount = 0;\n\n fieldSequence.forEach((field, index) => { \n if (\n index > 0 \n && index < fieldSequence.length \n && field.isAdjustable\n && field.errorFieldId\n ) {\n let isDataValid = false;\n let valueBefore = data[fieldSequence[index - 1].fieldId];\n let thisValue = data[fieldSequence[index].fieldId];\n let valueAfter = data[fieldSequence[index + 1].fieldId];\n \n if (data.bestScore === 'Lowest') {\n isDataValid = valueBefore > thisValue && thisValue > valueAfter;\n }\n else {\n isDataValid = valueBefore < thisValue && thisValue < valueAfter;\n }\n data[field.errorFieldId] = !isDataValid;\n if (!isDataValid) {\n errorCount ++;\n }\n }\n });\n this.isErrorFree = errorCount === 0;\n }\n this.setButtonActiveState();\n }\n \n setButtonActiveState() {\n let cleanBtn = this.buttonOptions.find((btn) => btn.id === 'clean');\n let applyBtn = this.buttonOptions.find((btn) => btn.id === 'apply');\n let saveBtn = this.buttonOptions.find((btn) => btn.id === 'save');\n let resetBtn = this.buttonOptions.find((btn) => btn.id === 'reset');\n \n if (cleanBtn && this.distributionInfo.outlierCount === 0) {\n cleanBtn.disabled = true;\n }\n else {\n cleanBtn.disabled = false;\n }\n\n if (applyBtn && this.distributionInfo.count === 0) {\n applyBtn.disabled = true;\n }\n else {\n applyBtn.disabled = false;\n }\n \n if (saveBtn && !(this.gridData.data && this.gridData.data[1] && this.isErrorFree)) {\n saveBtn.disabled = true;\n }\n else {\n saveBtn.disabled = false;\n }\n \n if (this.dataCleaned) {\n resetBtn.disabled = false;\n }\n else {\n resetBtn.disabled = true;\n }\n }\n}\n","
\n \n
\n
\n \n \n \n {{ dataItem.clientKPIDescription }}\n\n \n

{{ error }}

\n
\n
\n \n \n \n {{ getFriendlyDate(dataItem.startDate) }}\n \n \n \n \n {{ getFriendlyDate(dataItem.stopDate) }}\n \n \n \n \n \n \n \n \n {{ dataItem.range1End | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range1End | currency: 'USD':'symbol':'1.0-0')\n : (dataItem.range1End | number)\n }}\n \n \n\n \n \n
\n \n \n \n Start\n \n \n\n -\n {{ dataItem.range2End | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range2End | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range2End\n }}\n
\n
\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range2Start | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range2Start\n }}\n -\n {{ dataItem.range2End | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range2End | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range2End\n }}\n
\n
\n \n\n \n \n
\n \n \n \n\n \n Start\n \n \n\n \n <\n >\n \n {{ dataItem.target | number }}%\n \n Target\n \n \n \n\n \n <\n >\n \n \n End\n \n \n
\n
\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range3Start | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range3Start\n }}\n -\n {{ dataItem.range3End | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range3End | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range3End\n }}\n
\n
\n \n\n \n \n
\n \n \n {{ dataItem.range4Start | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range4Start | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range4Start\n }}\n -\n\n \n End\n \n \n
\n
\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range4Start | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range4Start\n }}\n -\n {{ dataItem.range4End | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range4End | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range4End\n }}\n
\n
\n \n\n \n \n \n \n \n \n {{ dataItem.range5Start | number }}%\n {{\n dataItem.kpiFormat === 'currency'\n ? (dataItem.range5Start | currency: 'USD':'symbol':'1.0-0')\n : dataItem.range5Start\n }}\n \n \n \n \n \n \n \n \n
\n
\n
\n
\n Choose a start date for the new version. The new target and ranges will be affected on\n the first day of the month chosen.\n
\n
\n
New Version Start Date:
\n \n \n {{ day.friendlyDate }}\n \n \n
\n
\n ADD NEW VERSION\n SAVE\n
\n
\n
\n","import { Component, Inject, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { GridComponent, GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { IKPIConfigData, KPIConfigService } from 'app/modules/settings/services/kpi-config.service';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\n\n@Component({\n selector: 'app-kpi-version-dialog',\n templateUrl: './kpi-version-dialog.component.html',\n styleUrls: ['./kpi-version-dialog.component.scss'],\n})\nexport class KpiVersionDialogComponent implements OnInit {\n gridData: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'clientKPIDescription',\n dir: 'asc',\n },\n ];\n\n allResults: boolean = false;\n scrollable = 'scrollable';\n dialogData: IKPIConfigData;\n selectedDate: string;\n sixMonthDates: FurtureDateData[];\n stopDate: string;\n allData: IKPIConfigData[];\n currentKPI: IKPIConfigData;\n previousKPI: IKPIConfigData;\n getFriendlyDate: (date) => string;\n canAddNewVersion: boolean = true;\n\n @Input() loading: boolean;\n @ViewChild(GridComponent) grid: GridComponent;\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n public dialogRef: MatDialogRef,\n private kpiConfigService: KPIConfigService,\n private toast: ToastService,\n private reusableFunctions: ReusableFunctions\n ) {}\n\n ngOnInit() {\n let initialLoad = true;\n this.dialogData = this.data.dialogItem;\n this.allData = this.data.dialogData;\n this.getFriendlyDate = this.reusableFunctions.getFriendlyDateYearFirst;\n this.reloadGrid(initialLoad);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.data?.previousValue == undefined && changes?.data?.currentValue != undefined) {\n this.reloadGrid();\n }\n }\n\n getSixMonthsDates() {\n const today = new Date();\n const dates = [];\n for (let i = 0; i <= 5; i++) {\n const date = new Date(today.getFullYear(), today.getMonth() + i, 1)\n .toLocaleDateString()\n .replace(/\\//g, '-');\n dates.push({\n date,\n friendlyDate: this.reusableFunctions.getFriendlyDateMonthFirst(date),\n });\n }\n this.sixMonthDates = dates;\n this.selectedDate = this.sixMonthDates[0].date;\n }\n\n getScenarioProperties(scenarios) {\n scenarios.sort((a, b) => a.clientKPIKey - b.clientKPIKey);\n this.currentKPI = scenarios[scenarios.length - 1];\n this.previousKPI = scenarios[scenarios.length - 2];\n\n scenarios.forEach((x) => {\n if (x.stopDate === null && scenarios.length > 1) {\n const latestScenarioStartMonth = this.reusableFunctions.getFriendlyDateYearFirst(\n x.startDate\n );\n const index = this.sixMonthDates\n .map((e) => e.friendlyDate)\n .indexOf(latestScenarioStartMonth);\n this.sixMonthDates = this.sixMonthDates.slice(index + 1);\n this.selectedDate = this.sixMonthDates.length ? this.sixMonthDates[0].date : '';\n x.canDelete = true;\n x.canEdit = true;\n } else {\n const today = new Date();\n const firstDayOfNextMonth = new Date(\n today.getFullYear(),\n today.getMonth(),\n 0\n ).getTime();\n if (new Date(x.startDate).getTime() >= firstDayOfNextMonth) {\n x.canEdit = true;\n }\n }\n });\n\n this.canAddNewVersion = this.selectedDate === '' ? false : true;\n }\n\n reloadGrid(initialLoad = false) {\n if (initialLoad) {\n this.getSixMonthsDates();\n let relevantScenarios = this.allData.filter(\n (x) =>\n x.clientKPIDescription === this.dialogData.clientKPIDescription &&\n x.clientKPIKey !== 0\n );\n this.getScenarioProperties(relevantScenarios);\n this.gridData = {\n data: orderBy(relevantScenarios, this.sort),\n total: relevantScenarios.length,\n };\n initialLoad = false;\n } else {\n this.kpiConfigService.getKPIConfig().subscribe(\n (results) => {\n if (results && results.length !== 0) {\n this.allData = results.filter((x) => x.clientKPIKey !== 0);\n this.getSixMonthsDates();\n let relevantScenarios = this.allData.filter(\n (x) => x.clientKPIDescription === this.dialogData.clientKPIDescription\n );\n this.getScenarioProperties(relevantScenarios);\n\n this.gridData = {\n data: orderBy(relevantScenarios, this.sort),\n total: relevantScenarios.length,\n };\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.reloadGrid();\n }\n\n // Range1End == POOR\n // Range2Start == FAIR START\n // Range2End == FAIR END\n // Range3Start == GOOD START\n // Range3End == GOOD END\n // Range4Start == VERY GOOD START\n // Range4End == VERY GOOD END\n // Range5Start == EXCELLENT\n\n // ENFORCE BOUND CHECKING FOR INPUT FIELDS\n isInvalid(row) {\n row.errors = null;\n let result = false;\n row.errors = [];\n row.range3EndError = false;\n row.range3StartError = false;\n row.range2StartError = false;\n row.range4EndError = false;\n\n // Base case\n if (\n !row.target ||\n !row.range3Start ||\n !row.range3End ||\n !row.range2Start ||\n !row.range4End\n ) {\n row.errors = ['You must provide values for each field.'];\n return true;\n }\n\n // START scores must be greater than END scores\n if (row.bestScore == 'Lowest') {\n /*if (row.range2Start < row.range2End || row.range3Start < row.range3End || row.range4Start < row.range4End ) {\n result = true;\n row.errors.push('All start values must be less than their respective end values.')\n }*/\n\n // GOOD START must be greater than target\n if (row.range3Start <= row.target) {\n result = true;\n row.range3StartError = true;\n row.errors.push(\n `Enter a start value for GOOD that is greater than the TARGET value of ${row.target}.`\n );\n }\n\n // GOOD end must be less than target\n if (row.range3End >= row.target) {\n result = true;\n\n row.range3EndError = true;\n row.errors.push(\n `Enter an end value for GOOD that is less than the TARGET value of ${row.target}.`\n );\n }\n\n // FAIR start must be greater than FAIR end\n if (row.range2Start <= row.range2End) {\n result = true;\n\n row.range2StartError = true;\n row.errors.push(\n `Enter a start value for FAIR that is greater than the FAIR end value of ${row.range2End}.`\n );\n }\n\n // VERY GOOD start must be greater than VERY GOOD end\n if (row.range4End >= row.range4Start) {\n result = true;\n\n row.range4EndError = true;\n row.errors.push(\n `Enter an end value for VERY GOOD that is less than the VERY GOOD start value of ${row.range4Start}.`\n );\n }\n\n // START scores must be less than END scores\n } else if (row.bestScore == 'Highest') {\n row.errors = [];\n\n // GOOD start must be less than target\n if (row.range3Start >= row.target) {\n result = true;\n row.range3StartError = true;\n row.errors.push(\n `Enter a start value for GOOD that is less than the TARGET value of ${row.target}.`\n );\n }\n\n // GOOD end must be greater than target\n if (row.range3End <= row.target) {\n result = true;\n row.range3EndError = true;\n\n row.errors.push(\n `Enter an end value for GOOD that is greater than the TARGET value of ${row.target}.`\n );\n }\n\n // FAIR start must be less than FAIR end\n if (row.range2Start >= row.range2End) {\n result = true;\n\n row.range2StartError = true;\n row.errors.push(\n `Enter a start value for FAIR that is less than the FAIR end value of ${row.range2End}.`\n );\n }\n\n // VERY GOOD start must be greater than VERY GOOD end\n if (row.range4End <= row.range4Start) {\n result = true;\n\n row.range4EndError = true;\n row.errors.push(\n `Enter an end value for VERY GOOD that is greater than the VERY GOOD start value of ${row.range4Start}.`\n );\n }\n }\n return result;\n }\n\n //\n // AUTO SET RANGES FOR NON-INPUT BANDS\n //\n\n // If Highest is best, Starting scores should be higher than the score being compared to, ex. Fair should be higher than Poor.\n // If Lowest is best, Starting scores should be lower than the score being compared to, ex. Very Good should be higher than Excellent.\n rangeChange(row, destination: string, origin: string, error: string, isStart: boolean) {\n const amountToChange =\n row.kpiFormat === 'currency' || row.clientKPIDescription === 'FICO' ? 1 : 0.001;\n try {\n if (!row[error]) {\n if (row.bestScore == 'Highest') {\n if (isStart) {\n row[destination] = this.determinePrecision(row[origin] - amountToChange);\n } else {\n row[destination] = this.determinePrecision(row[origin] + amountToChange);\n }\n } else if (row.bestScore == 'Lowest') {\n if (isStart) {\n row[destination] = this.determinePrecision(row[origin] + amountToChange);\n } else {\n row[destination] = this.determinePrecision(row[origin] - amountToChange);\n }\n }\n }\n } catch (e) {}\n }\n\n determinePrecision(rangeNumber) {\n if (rangeNumber.toString().split('.')[1] > 3) {\n return Number(rangeNumber.toFixed(3));\n }\n return Number(rangeNumber);\n }\n\n flipSelectedDate(date) {\n const ymcArr = date.split('-');\n const month = Number(ymcArr[0]) >= 10 ? ymcArr[0] : `0${ymcArr[0]}`;\n const day = Number(ymcArr[1]) >= 10 ? ymcArr[1] : `0${ymcArr[1]}`;\n\n return `${ymcArr[2]}-${month}-${day}`;\n }\n\n getLastDate() {\n const ymcArr = this.selectedDate.split('-');\n const lastDate = new Date(Number(ymcArr[2]), Number(ymcArr[0]), 0).setDate(0);\n const stopDate = new Date(lastDate).toLocaleDateString().replace(/\\//g, '-');\n return this.flipSelectedDate(stopDate);\n }\n\n add() {\n if (this.selectedDate === '') return;\n const selectedDate = this.flipSelectedDate(this.selectedDate);\n const newScenario = JSON.parse(JSON.stringify(this.currentKPI));\n newScenario.startDate = selectedDate;\n newScenario.stopDate = null;\n newScenario.canDelete = true;\n newScenario.canEdit = true;\n this.save(newScenario, true);\n }\n\n delete() {\n const today = new Date();\n const firstDayOfCurrentMonth = new Date(today.getFullYear(), today.getMonth(), 1).getTime();\n const previousKPITime = new Date(this.previousKPI.stopDate).getTime();\n const isPreviousKPIPast =\n this.previousKPI.stopDate === null ? false : previousKPITime > firstDayOfCurrentMonth;\n let formData = this.formatDataForSave([this.currentKPI]);\n this.kpiConfigService\n .deleteKPITimeboxing(formData, this.previousKPI.clientKPIKey, isPreviousKPIPast)\n .subscribe(\n (_) => {\n this.reloadGrid();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n save(dataItem: IKPIConfigData, isNewVersion: boolean = false) {\n const isAllDataValid = this.kpiConfigService.isAllDataValid([dataItem]);\n if (isAllDataValid) {\n let formData = this.formatDataForSave([dataItem], isNewVersion);\n const today = new Date();\n const firstDayOfCurrentMonth = new Date(\n today.getFullYear(),\n today.getMonth(),\n 1\n ).getTime();\n const stopDate =\n new Date(this.currentKPI.stopDate).getTime() > firstDayOfCurrentMonth ||\n this.currentKPI.stopDate === null\n ? this.getLastDate()\n : this.currentKPI.stopDate;\n this.kpiConfigService\n .saveKPITimeboxing(formData, false, this.currentKPI.clientKPIKey, stopDate, true)\n .subscribe(\n (_) => {\n this.reloadGrid();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n\n saveEdit() {\n const relevantData = this.allData.filter(\n (x) =>\n x.clientKPIDescription === this.dialogData.clientKPIDescription &&\n x.canEdit === true\n );\n const isAllDataValid = this.kpiConfigService.isAllDataValid(relevantData);\n if (isAllDataValid) {\n let formData = this.formatDataForSave(relevantData);\n this.kpiConfigService.saveKPIConfig(formData).subscribe(\n (_) => {\n this.toast.success('KPI changes have been saved successfully');\n this.dialogRef.close();\n this.reloadGrid();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n\n formatDataForSave(data, newVersion = false): IKPIConfigData[] {\n let result = [];\n data.forEach((x) => {\n result.push({\n ClientKPIKey: x.clientKPIKey,\n KPIMasterKey: x.kpiMasterKey,\n KPIMilestoneStaffingKey: x.kpiMilestoneStaffingKey,\n KPIMilestoneKey: x.kpiMilestoneKey,\n KPIMilestoneBPSKey: x.kpiMilestoneBPSKey,\n KPIMilestoneCustomKey: x.kpiMilestoneCustomKey,\n ClientKPIDescription: x.clientKPIDescription,\n Target: x.target,\n ActiveDate: x.activeDate,\n InActiveDate: x.inActiveDate,\n IsActive: x.isActive,\n isDeleted: x.isDeleted,\n IsWeightedByLA: x.isWeightedByLA,\n NewVersion: newVersion,\n Range1End: x.range1End,\n Range2Start: x.range2Start,\n Range2End: x.range2End,\n Range3Start: x.range3Start,\n Range3End: x.range3End,\n Range4Start: x.range4Start,\n Range4End: x.range4End,\n Range5Start: x.range5Start,\n StartDate: x.startDate,\n StopDate: x.stopDate,\n });\n });\n return result;\n }\n}\n\nexport interface FurtureDateData {\n date: string;\n friendlyDate: string;\n}\n","

\n Select the KPIs you would like to track within the Performance Module along with their target\n value. Adjust the selection for Weighted by Loan Amount based on whether you would like to\n consider loan amount when calculating KPI values. If there is a KPI selected you do not wish to\n use, be sure it is removed from all KPI Profiles before you deselect it in this screen.\n

\n\n
\n \n \n \n \n \n \n \n \n {{ dataItem.clientKPIDescription }}\n\n \n

{{ error }}

\n
\n
\n \n\n \n \n \n \n \n\n \n Target\n \n \n \n \n\n \n \n \n \n \n \n \n
\n \n \n \n
\n
\n \n \n
\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { GridDataResult, SortSettings } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DistributionAnalyzeDialogComponent } from 'app/modules/settings/components/kpi-distribution-analyze-dialog/distribution-analyze-dialog.component';\nimport { CurrentUserStateService } from 'app/modules/shared/services/current-user-state.service';\nimport { ImpersonationService } from 'app/modules/shared/services/impersonation.service';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n IDistributionDialogData,\n IKPIConfigData,\n} from 'app/modules/settings/services/kpi-config.service';\nimport { KpiVersionDialogComponent } from '../kpi-version-dialog/kpi-version-dialog.component';\nimport { UserService } from 'app/modules/shared/services/user.service';\nimport { KpiDistributionAnalysisService } from 'app/modules/settings/services/kpi-distribution-analysis.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\n\n@Component({\n selector: 'app-kpi-config-one',\n templateUrl: './kpi-config-one.component.html',\n styleUrls: ['./kpi-config-one.component.scss'],\n})\nexport class KpiConfigOneComponent implements OnInit, OnChanges, OnDestroy {\n grid: GridDataResult;\n sortable: SortSettings = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'clientKPIDescription',\n dir: 'asc',\n },\n ];\n\n allResults: boolean = false;\n scrollable = 'scrollable';\n isSuperUser: boolean;\n isPowerUser: boolean;\n\n @Input() data: IKPIConfigData[];\n @Input() loading: boolean;\n @Output() updatedKPIfData = new EventEmitter();\n private returnDataFromRetrieveDialog = new BehaviorSubject(\n {} as IKPIConfigData\n );\n\n constructor(\n private cdr: ChangeDetectorRef,\n private distributionAnalyzeDialog: MatDialog,\n private matDialog: MatDialog,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private userService: UserService,\n private _distributionService: KpiDistributionAnalysisService,\n private _toastService: ToastService\n ) {}\n\n ngOnInit() {\n this.isSuperUser = this.currentUserStateService.isLBASuperUser();\n\n if (this.impersonationService.isImpersonatingClient()) {\n if (this.impersonationService.isImpersonatingUser()) {\n var clientUser = this.impersonationService.impersonateUser;\n\n this.userService.getUserByEmail(clientUser).subscribe((data) => {\n this.isSuperUser = data.isSuperUser;\n });\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.data?.previousValue == undefined && changes?.data?.currentValue != undefined) {\n this.loadGrid();\n this.cdr.detectChanges();\n }\n }\n\n loadGrid() {\n try {\n this.grid = {\n data: orderBy(this.data, this.sort),\n total: this.data.length,\n };\n } catch (e) {}\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.loadGrid();\n }\n\n isInvalid(row) {\n row.errors = [];\n let result = false;\n row.targetError = false;\n\n if (row.isActive && (!row.target || row.target == 0)) {\n row.errors = ['Target value cannot be empty or zero.'];\n row.targetError = true;\n result = true;\n }\n\n return result;\n }\n\n openDistributionAnalyzeDialog(dataItem) {\n this.returnDataFromRetrieveDialog = new BehaviorSubject(\n {} as IKPIConfigData\n );\n let returnDataFromRetrieveDialog$ = this.returnDataFromRetrieveDialog.asObservable();\n let data: IDistributionDialogData = {\n dataBackToParent: this.returnDataFromRetrieveDialog,\n dataToChild: dataItem,\n };\n let dialogRef = this.distributionAnalyzeDialog.open(DistributionAnalyzeDialogComponent, {\n data: data,\n });\n returnDataFromRetrieveDialog$.subscribe((value: IKPIConfigData) => {\n // TODO: Figure out why ClientKPIKey is not set after setting a KPI.\n // Then use ClientKPIKey instead of clientKPIDescription\n if (value && value.clientKPIDescription) {\n let updatedRowCount = 0;\n this.data.map((item) => {\n if (\n item.clientKPIDescription === value.clientKPIDescription &&\n item.milestoneKey === value.milestoneKey &&\n item.kpiMasterKey === value.kpiMasterKey &&\n item.kpiMilestoneKey === value.kpiMilestoneKey\n ) {\n item.range1End = value.range1End;\n item.range2Start = value.range2Start;\n item.range2End = value.range2End;\n item.range3Start = value.range3Start;\n item.range3End = value.range3End;\n item.range4Start = value.range4Start;\n item.range4End = value.range4End;\n item.range5Start = value.range5Start;\n item.target = value.target;\n updatedRowCount += 1;\n }\n });\n if (updatedRowCount === 1) {\n this.updatedKPIfData.emit(this.data);\n } else {\n throw Error(`Only one row must be updated. There are ${updatedRowCount} rows.`);\n }\n }\n });\n }\n\n closeDistributionAnalyzeDialog() {\n //this.dialogParametrs?.dialogref?.close();\n }\n\n ngOnDestroy() {\n this.returnDataFromRetrieveDialog.unsubscribe();\n }\n\n openTimeboxDialog(dataItem) {\n const dialogRef = this.matDialog.open(KpiVersionDialogComponent, {\n data: { dialogData: this.data, dialogItem: dataItem },\n panelClass: 'kpi-version-dialog',\n });\n }\n\n getAnalyticIconTooltip(dataItem: IKPIConfigData) {\n let tooltip = '';\n if (!dataItem.ddbiAvailable) {\n tooltip += 'Historical data is not available.';\n }\n if (!dataItem.isActive) {\n let separator = !dataItem.ddbiAvailable ? ' ' : '';\n tooltip += separator + 'This KPI is not enabled.';\n }\n\n if (dataItem.isActive && dataItem.ddbiAvailable) {\n tooltip = 'Click to get analytics.';\n }\n return tooltip;\n }\n}\n","

\n Performance bands for KPIs include Poor, Fair, Good, Very Good, and Excellent. The Poor and\n Excellent ranges will automatically populate based on your inputs.\n

\n\n
\n \n \n \n {{ dataItem.clientKPIDescription }}\n\n \n

{{ error }}

\n
\n
\n \n\n \n \n \n \n \n \n {{ dataItem.range1End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range1End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range1End | number) }}\n \n \n\n \n \n \n \n \n Start\n \n \n\n -\n {{ dataItem.range2End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range2End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range2End) }}\n \n \n\n \n \n \n \n \n\n \n Start\n \n \n\n \n <\n >\n \n {{ dataItem.target | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.target | currency: 'USD':'symbol':'1.0-0') : (dataItem.target) }}\n\n \n <\n >\n \n \n End\n \n \n \n \n\n \n \n \n \n {{ dataItem.range4Start | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range4Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range4Start) }}\n -\n\n \n End\n \n \n \n \n\n \n \n {{ dataItem.range5Start | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range5Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range5Start) }}\n \n \n \n \n
\n","import { Component, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { GridComponent, GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\n\n@Component({\n selector: 'app-kpi-config-three',\n templateUrl: './kpi-config-three.component.html',\n styleUrls: ['./kpi-config-three.component.scss'],\n})\nexport class KpiConfigThreeComponent implements OnInit {\n gridData: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'clientKPIDescription',\n dir: 'asc',\n },\n ];\n\n allResults: boolean = false;\n scrollable = 'scrollable';\n\n @Input() data: any[];\n @Input() loading: boolean;\n @ViewChild(GridComponent) grid: GridComponent;\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.data?.previousValue == undefined && changes?.data?.currentValue != undefined) {\n this.reloadGrid();\n }\n }\n\n reloadGrid() {\n try {\n let data = this.data.filter((x) => x.isActive === true);\n\n this.gridData = {\n data: orderBy(data, this.sort),\n total: data.length,\n };\n } catch (e) {}\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.reloadGrid();\n }\n\n // Range1End == POOR\n // Range2Start == FAIR START\n // Range2End == FAIR END\n // Range3Start == GOOD START\n // Range3End == GOOD END\n // Range4Start == VERY GOOD START\n // Range4End == VERY GOOD END\n // Range5Start == EXCELLENT\n\n // ENFORCE BOUND CHECKING FOR INPUT FIELDS\n isInvalid(row) {\n row.errors = null;\n let result = false;\n row.errors = [];\n row.range3EndError = false;\n row.range3StartError = false;\n row.range2StartError = false;\n row.range4EndError = false;\n\n // Base case\n if (\n !row.target ||\n !row.range3Start ||\n !row.range3End ||\n !row.range2Start ||\n !row.range4End\n ) {\n row.errors = ['You must provide values for each field.'];\n return true;\n }\n \n\n // START scores must be greater than END scores\n if (row.bestScore == 'Lowest') {\n /*if (row.range2Start < row.range2End || row.range3Start < row.range3End || row.range4Start < row.range4End ) {\n result = true;\n row.errors.push('All start values must be less than their respective end values.')\n }*/\n\n // GOOD START must be greater than target\n if (row.range3Start <= row.target) {\n result = true;\n row.range3StartError = true;\n row.errors.push(\n `Enter a start value for GOOD that is greater than the TARGET value of ${row.target}.`\n );\n }\n\n // GOOD end must be less than target\n if (row.range3End >= row.target) {\n result = true;\n\n row.range3EndError = true;\n row.errors.push(\n `Enter an end value for GOOD that is less than the TARGET value of ${row.target}.`\n );\n }\n\n // FAIR start must be greater than FAIR end\n if (row.range2Start <= row.range2End) {\n result = true;\n\n row.range2StartError = true;\n row.errors.push(\n `Enter a start value for FAIR that is greater than the FAIR end value of ${row.range2End}.`\n );\n }\n\n // VERY GOOD start must be greater than VERY GOOD end\n if (row.range4End >= row.range4Start) {\n result = true;\n\n row.range4EndError = true;\n row.errors.push(\n `Enter an end value for VERY GOOD that is less than the VERY GOOD start value of ${row.range4Start}.`\n );\n }\n\n // START scores must be less than END scores\n } else if (row.bestScore == 'Highest') {\n row.errors = [];\n\n // GOOD start must be less than target\n if (row.range3Start >= row.target) {\n result = true;\n row.range3StartError = true;\n row.errors.push(\n `Enter a start value for GOOD that is less than the TARGET value of ${row.target}.`\n );\n }\n\n // GOOD end must be greater than target\n if (row.range3End <= row.target) {\n result = true;\n row.range3EndError = true;\n\n row.errors.push(\n `Enter an end value for GOOD that is greater than the TARGET value of ${row.target}.`\n );\n }\n\n // FAIR start must be less than FAIR end\n if (row.range2Start >= row.range2End) {\n result = true;\n\n row.range2StartError = true;\n row.errors.push(\n `Enter a start value for FAIR that is less than the FAIR end value of ${row.range2End}.`\n );\n }\n\n // VERY GOOD start must be greater than VERY GOOD end\n if (row.range4End <= row.range4Start) {\n result = true;\n\n row.range4EndError = true;\n row.errors.push(\n `Enter an end value for VERY GOOD that is greater than the VERY GOOD start value of ${row.range4Start}.`\n );\n }\n }\n return result;\n }\n\n //\n // AUTO SET RANGES FOR NON-INPUT BANDS\n //\n\n // If Highest is best, Starting scores should be higher than the score being compared to, ex. Fair should be higher than Poor.\n // If Lowest is best, Starting scores should be lower than the score being compared to, ex. Very Good should be higher than Excellent.\n rangeChange(row, destination: string, origin: string, error: string, isStart: boolean) {\n const amountToChange =\n row.kpiFormat === 'currency' || row.clientKPIDescription === 'FICO' ? 1 : 0.001;\n try {\n if (!row[error]) {\n if (row.bestScore == 'Highest') {\n if (isStart) {\n row[destination] = this.determinePrecision(row[origin] - amountToChange);\n } else {\n row[destination] = this.determinePrecision(row[origin] + amountToChange);\n }\n } else if (row.bestScore == 'Lowest') {\n if (isStart) {\n row[destination] = this.determinePrecision(row[origin] + amountToChange);\n } else {\n row[destination] = this.determinePrecision(row[origin] - amountToChange);\n }\n }\n }\n } catch (e) {}\n }\n\n determinePrecision(rangeNumber) {\n if (rangeNumber.toString().split('.')[1] > 3) {\n return Number(rangeNumber.toFixed(3));\n }\n return Number(rangeNumber);\n }\n}\n","

\n Review your configurations below, and navigate to a previous tab to make any adjustments. Click\n the Submit button when you’re ready to save all of your changes.\n

\n\n
\n \n \n \n\n \n \n {{ dataItem.target | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.target | currency: 'USD':'symbol':'1.0-0') : (dataItem.target | number) }}\n \n \n\n \n \n \n \n \n \n {{ dataItem.range1End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range1End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range1End | number) }}\n \n \n\n \n \n {{ dataItem.range2Start | number }}% - {{ dataItem.range2End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range2Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range2Start | number) }} \n - {{ dataItem.kpiFormat === 'currency' ? (dataItem.range2End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range2End | number) }} \n \n \n\n \n \n {{ dataItem.range3Start | number }}% - {{ dataItem.range3End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range3Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range3Start | number) }} \n - {{ dataItem.kpiFormat === 'currency' ? (dataItem.range3End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range3End | number) }} \n \n \n\n \n \n {{ dataItem.range4Start | number }}% - {{ dataItem.range4End | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range4Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range4Start | number) }} \n - {{ dataItem.kpiFormat === 'currency' ? (dataItem.range4End | currency: 'USD':'symbol':'1.0-0') : (dataItem.range4End | number) }} \n \n \n\n \n \n \n \n \n \n {{ dataItem.range5Start | number }}%\n {{ dataItem.kpiFormat === 'currency' ? (dataItem.range5Start | currency: 'USD':'symbol':'1.0-0') : (dataItem.range5Start | number) }}\n \n \n\n \n \n
\n","import { Component, Input, OnInit, SimpleChanges } from '@angular/core';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\n\n@Component({\n selector: 'app-kpi-config-four',\n templateUrl: './kpi-config-four.component.html',\n styleUrls: ['./kpi-config-four.component.scss'],\n})\nexport class KpiConfigFourComponent implements OnInit {\n grid: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'clientKPIDescription',\n dir: 'asc',\n },\n ];\n\n allResults: boolean = false;\n scrollable = 'scrollable';\n\n @Input() data: any[];\n @Input() loading: boolean;\n constructor() {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.data?.previousValue == undefined && changes?.data?.currentValue != undefined) {\n this.reloadGrid();\n }\n }\n\n reloadGrid() {\n try {\n let data = this.data.filter((x) => x.isActive === true);\n\n this.grid = {\n data: orderBy(data, this.sort),\n total: data.length,\n };\n } catch (e) {}\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.reloadGrid();\n }\n}\n","\n\n\n\n \n \n Key Performance Indicators Setup\n \n \n\n \n \n \n \n \n {{ t.index + 1 }}\n \n
\n STEP {{ t.index + 1 }}
\n {{ t.label }}\n
\n
\n
\n \n \n \n
\n \n \n \n\n \n \n \n \n\n \n \n \n \n
\n
\n \n
\n Your KPI Configs have been saved.\n
\n
\n
\n \n Please fix errors on Step 2 before Proceeding.\n \n \n \n BACK\n \n NEXT\n {{\n isSaving ? 'SAVING...' : 'SAVE'\n }}\n \n \n
\n \n
\n\n","import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { IKPIConfigData, KPIConfigService } from 'app/modules/settings/services/kpi-config.service';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { timeout } from 'rxjs/operators';\n\n@Component({\n selector: 'app-kpi-config',\n templateUrl: './kpi-config.component.html',\n styleUrls: ['./kpi-config.component.scss'],\n})\nexport class KpiConfigComponent implements OnInit {\n tabs = [\n { label: 'Select KPIs', index: 0 },\n //{ label: 'Set Targets', index: 1 },\n { label: 'Define Ranges', index: 1 },\n { label: 'Review and Submit', index: 2 },\n ];\n originalData: IKPIConfigData[];\n data: IKPIConfigData[];\n loading: boolean = true;\n hasInvalidData: boolean = false;\n dataSaved: boolean = false;\n public tab: number = 0;\n public progress: number = 0;\n isSaving = false;\n constructor(private kpiConfigService: KPIConfigService, private toast: ToastService) {}\n\n ngOnInit() {\n this.getData();\n }\n\n // Fetch KPI data for display on all tabs. This list will be used and maintained on each tab.\n private getData() {\n this.loading = true;\n this.kpiConfigService.getKPIConfig().subscribe(\n (results) => {\n if (results && results.length !== 0) {\n this.originalData = JSON.parse(JSON.stringify(results));\n this.data = results;\n } else {\n this.data = null;\n }\n\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n\n public handleTabChange(event) {\n this.tab = event;\n this.progress = this.tab * 33;\n }\n\n public next() {\n if (this.tab !== 2) {\n if (!this.hasInvalidData) {\n this.handleTabChange(this.tab + 1);\n }\n }\n }\n\n public nextDisabled() {\n return this.tab == 2;\n }\n\n public back() {\n this.hasInvalidData = false;\n if (this.tab > 0) {\n this.handleTabChange(this.tab - 1);\n }\n }\n\n public backDisabled() {\n return this.tab == 0;\n }\n\n // Check for valid state on current or all pages\n canSave() {\n return true;\n }\n\n save() {\n if (!this.isSaving) {\n const isAllDataValid = this.kpiConfigService.isAllDataValid(this.data);\n if (isAllDataValid) {\n this.hasInvalidData = false;\n this.toast.info(\n 'KPI changes are being saved. This could take up to a minute or more'\n );\n this.isSaving = true;\n let changedData = this.checkForChangedData(this.data);\n let formData = this.formatDataForSave(changedData);\n this.kpiConfigService.saveKPIConfig(formData).subscribe(\n (_) => {\n this.dataSaved = true;\n this.toast.success('KPI changes have been saved successfully');\n this.isSaving = false;\n\n setTimeout(() => {\n this.dataSaved = false;\n }, 10000);\n },\n (error) => {\n this.isSaving = false;\n throw new Error(error);\n }\n );\n } else {\n this.hasInvalidData = true;\n }\n }\n }\n\n formatDataForSave(data): IKPIConfigData[] {\n let result = [];\n data.forEach((x) => {\n result.push({\n ClientKPIKey: x.clientKPIKey,\n KPIMasterKey: x.kpiMasterKey,\n KPIMilestoneStaffingKey: x.kpiMilestoneStaffingKey,\n KPIMilestoneKey: x.kpiMilestoneKey,\n KPIMilestoneBPSKey: x.kpiMilestoneBPSKey,\n KPIMilestoneCustomKey: x.kpiMilestoneCustomKey,\n ClientKPIDescription: x.clientKPIDescription,\n Target: x.target,\n ActiveDate: x.activeDate,\n InActiveDate: x.inActiveDate,\n IsActive: x.isActive,\n isDeleted: x.isDeleted,\n IsWeightedByLA: x.isWeightedByLA,\n Range1End: x.range1End,\n Range2Start: x.range2Start,\n Range2End: x.range2End,\n Range3Start: x.range3Start,\n Range3End: x.range3End,\n Range4Start: x.range4Start,\n Range4End: x.range4End,\n Range5Start: x.range5Start,\n });\n });\n\n return result;\n }\n\n updateKPIfData(event: IKPIConfigData[]) {\n this.data = event;\n }\n\n checkForChangedData(updatedData) {\n const changedData = [];\n const excludedProperties = [\n 'errors',\n 'targetError',\n 'range3EndError',\n 'range3StartError',\n 'range2StartError',\n 'range4EndError',\n ];\n for (let i = 0; i < updatedData.length; i++) {\n if (!this.isSameValue(updatedData[i], this.originalData[i], excludedProperties)) {\n changedData.push(updatedData[i]);\n }\n }\n return changedData;\n }\n\n isSameValue(obj1, obj2, excludedProperty) {\n const keys1 = Object.keys(obj1).filter((key) => !excludedProperty.includes(key));\n const keys2 = Object.keys(obj2).filter((key) => !excludedProperty.includes(key));\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (let key of keys1) {\n if (obj1[key] !== obj2[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n","export class UserCreateModel {\n loginEmail: string;\n clientShortName: string;\n employeeIdentifier: string;\n positionName: string;\n}\n","\n {{ title }}\n
\n {{ message }}\n {{ value | mask: '(000) 000-0000' }}\n
\n \n \n \n \n
\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-confirmation-alert-dialog',\n templateUrl: './confirmation-alert-dialog.component.html',\n styleUrls: ['./confirmation-alert-dialog.component.scss'],\n})\nexport class ConfirmationAlertDialogComponent implements OnInit {\n title: string;\n message: string;\n value: string;\n valueType: string;\n acceptTerm: string;\n rejectTerm: string;\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {\n this.title = data.title;\n this.message = data.message;\n this.value = data.value;\n this.valueType = data.valueType;\n this.acceptTerm = data.acceptTerm;\n this.rejectTerm = data.rejectTerm;\n }\n\n close(action: string) {\n this.dialogRef.close(action);\n }\n\n ngOnInit() {}\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n
\n Send {{ emails.length | number }} Email 1\">s\n \n
\n
\n","import { Component, OnInit, OnDestroy, EventEmitter, Output, Inject } from '@angular/core';\nimport { Employee } from '../../interfaces/client-data';\nimport { Router } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'email-confirmation-dialog',\n templateUrl: './email-confirmation-dialog.component.html',\n styleUrls: ['./email-confirmation-dialog.component.scss'],\n})\nexport class EmailConfirmationDialogComponent implements OnInit, OnDestroy {\n emails: Array = [];\n filteredEmails: Array = [];\n send: boolean = false;\n itemSize: number = 0;\n @Output() updateEmailsFromDialog = new EventEmitter();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n public emailDialogRef: MatDialogRef,\n public _router: Router,\n public _location: Location\n ) {}\n\n ngOnDestroy() {}\n\n ngOnInit() {\n this.emails = this.data.emails;\n this.filteredEmails = this.data.emails;\n }\n\n removeEmail(emp: Employee, index: number) {\n emp.sendEmail = false;\n this.filteredEmails.splice(index, 1);\n this.filteredEmails = [...this.filteredEmails];\n let emailIndex = this.emails.indexOf(emp);\n if (emailIndex >= 0) this.emails.splice(emailIndex, 1);\n this.updateEmailsFromDialog.emit(emp);\n if (!this.emails.filter((emp) => emp.sendEmail)?.length) this.emailDialogRef.close('empty');\n }\n\n filterByEmail(filterResult: Array) {\n this.filteredEmails = filterResult;\n }\n\n emailTrack(index: number, emp: Employee) {\n return emp.loginEmail;\n }\n}\n","import { SafeUrl } from '@angular/platform-browser';\nimport {\n ClientIntegration,\n IntegrationOptionType,\n} from 'app/modules/settings/interfaces/client-integration';\nimport { ContactModel } from '../../settings/interfaces/company-account-data';\n\nexport enum WelcomeEmailSendStatus {\n Pending = 0,\n Expired,\n NotSent,\n Delivered,\n EmployeeTerminated,\n Unknown,\n}\n\nexport interface ClientInterface {\n clientFullname: string;\n clientShortName: string;\n active: boolean;\n isSelected?: boolean;\n tabIndex?: number;\n nvLite: boolean;\n}\n\nexport enum WelcomeEmailState {\n Unknown,\n Pending,\n Expired,\n NotRequired,\n}\n\nexport interface Employee {\n lengthOfEmployment?: string;\n primaryIdentifier: string;\n firstName: string;\n lastName: string;\n lfName: string;\n firstNameProper: string;\n jobTitle: string;\n mobilePhone: string;\n nmls?: string;\n isUser: boolean;\n loginEmail: string;\n clientShortName?: string;\n location: string;\n locationIdentifier?: string;\n employeeStatus: string;\n userStatus: string;\n city?: string;\n state?: string;\n fullTime: boolean;\n hireDate: Date;\n createDate: Date;\n inActiveDate: Date;\n terminationDate: Date;\n userGUID?: string;\n pictureSrc?: SafeUrl;\n positionName: string;\n permissionSetName: string;\n isSupervisor?: boolean;\n supervisorIdentifier?: string;\n isClientPowerUser?: boolean;\n onLeave?: boolean;\n lastLoginDate?: Date;\n welcomeEmailExpirationDate?: Date;\n sendEmail?: boolean;\n convertToUser?: boolean;\n welcomeEmailStatus?: WelcomeEmailSendStatus;\n welcomeEmailState?: WelcomeEmailState;\n actionToggle?: boolean;\n isActive?: boolean;\n hierarchyLevel?: string;\n isClientAdmin?: boolean;\n isSelected?: boolean;\n}\nexport interface EmployeeIdentifier {\n employeeIdentifierKey: number;\n clientIntegrationSource: string;\n identifierType: string;\n description: string;\n identifier: string;\n isPrimary: boolean;\n}\n\nexport interface ClientCustomRole {\n roleOrder: number;\n roleName: string;\n description: string;\n}\nexport interface ClientIdentifier {\n identifierType: string;\n identifier: string;\n}\nexport interface ClientIdentifierType {\n identifierTypeKey: number;\n identifierType: string;\n}\nexport interface ClientIdentifierUpdate {\n identifierType: string;\n identifier: string;\n identifierOld?: string;\n isActive: boolean;\n activeDate?: Date;\n inActiveDate?: Date;\n lastMod?: Date;\n lastModUserKey?: number;\n}\nexport interface AccountDetails {\n fullName: string;\n shortName: string;\n companyURL?: string;\n hubSpotUrl?: string;\n compenSafeUrl?: string;\n clientKey?: number;\n subscriptionType: string;\n clientSubscriptionTypeKey: number;\n contractDate?: Date;\n renewalDate?: Date;\n activeDate?: Date;\n inActiveDate?: Date;\n goLiveDate?: Date;\n loanSeedDate?: Date;\n cS_CompanyID: string;\n use_Hourly_KPI?: boolean;\n identifiers?: ClientIdentifier[];\n useSSO?: boolean;\n nvLite: boolean;\n lgDataSwapKey?: string;\n isActive: boolean;\n isLoginDisabled: boolean;\n entityClassification: string;\n customerNumber: string;\n}\nexport interface ClientInformationInterface {\n action: string;\n clientDetails: AccountDetails;\n clientIntegrationSources: ClientIntegrationSource[];\n contacts: ContactModel[];\n identifiers: ClientIdentifier[];\n employeeIdentifiers: ClientIntegrationSource[];\n}\n\nexport interface ClientInformationSources {\n primaryEmployeeSource: string;\n primaryBranchSource: string;\n technicalEmail: string;\n primaryEmail?: string;\n idHmdaLEI: string;\n idNMLS: string;\n idAnalytics: string;\n}\n\nexport interface ClientIntegrationSource {\n source: string;\n description: string;\n id?: number;\n isNew?: boolean;\n isPrimaryForBranchIdentifier?: boolean;\n isPrimaryForEmployeeIdentifier?: boolean;\n isAlternateForEmployeeIdentifier?: boolean;\n alternateEmployeeIdentifierSource?: string;\n identifierType?: string;\n defaultParameters?: any;\n isPrimary?: boolean;\n integrationOption?: IntegrationOptionType;\n}\n\nexport interface IntegrationSource {\n integrationSourceKey: number;\n integrationSource: string;\n defaultParameters?: any;\n canBePrimaryForEmployee: boolean;\n canBePrimaryForBranch: boolean;\n}\n\nexport interface AlternateSourceType {\n alternateSourceType: string;\n alternateSourceIcon?: string;\n}\n\nexport interface ClientEmployeeIdentifier {\n identifierType: string;\n clientIntegrationSourceKey?: number;\n identifierDescription: string;\n integrationSourceDesc: string;\n isActive: boolean;\n isDeleted: boolean;\n isPrimaryForEmployeeIdentifier: boolean;\n isPrimaryForBranchIdentifier: boolean;\n isAlternateForEmployeeIdentifier: boolean;\n alternateEmployeeIdentifierSource: string;\n clientIdentifierTypeKey: number;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPermissionsService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/userpermissionset').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n getPermissionSets(): Observable {\n return this.http.get(`${this._url}/sets`);\n }\n\n getPermissionSetName(permissionName: string): Observable {\n const params = new HttpParams().set('permissionName', permissionName);\n return this.http.get(`${this._url}/nameSets`, { params: params });\n }\n\n getClientPermissionSet(): Observable {\n return this.http.get(`${this._url}`);\n }\n\n addPermissionSet(inputName, inputDesc): Observable {\n let data = {\n name: inputName,\n description: inputDesc,\n };\n return this.http.post(`${this._url}/set`, data);\n }\n\n getUsersAssigned(permissionSetKey): Observable {\n const params = new HttpParams().set('permissionSetKey', permissionSetKey.toString());\n\n return this.http.get(`${this._url}/set/assigned`, { params: params });\n }\n\n deletePermissionSet(permissionSetKey: number): Observable {\n return this.http.post(`${this._url}/delete`, permissionSetKey);\n }\n\n getPermissionSetPages(permissionSetKey: number): Observable {\n const params = new HttpParams().set('permissionSetKey', permissionSetKey.toString());\n return this.http.get(`${this._url}/pages`, {\n params: params,\n });\n }\n\n getHomePages(permissionSetKey: number): Observable {\n const params = new HttpParams().set('permissionSetKey', permissionSetKey.toString());\n return this.http.get(`${this._url}/pages/home`, {\n params: params,\n });\n }\n\n updatePermissionSetPages(\n name: string,\n key: number,\n pages: PermissionSetUpdateForm[]\n ): Observable {\n let dataBody = {\n name: name,\n permissionSetKey: key,\n pages: pages,\n };\n return this.http.post(`${this._url}/pages`, dataBody);\n }\n\n getEmployeeAssignment(): Observable {\n return this.http.get(`${this._url}/assignment`);\n }\n\n getPositionPermissionSets(): Observable {\n return this.http.get(`${this._url}/position`);\n }\n\n getPositionDefaults(position: string): Observable {\n const params = new HttpParams().set('position', position);\n return this.http.get(`${this._url}/position/name`, {\n params: params,\n });\n }\n\n updatePositionPermissionSets(body): Observable {\n return this.http.post(`${this._url}/position`, body);\n }\n}\n\nexport interface PermissionSetPage {\n applicationPageKey: number;\n name: string;\n routerURL: string;\n hasPage: boolean;\n applicationPageTypeKey: number;\n parentApplicationPageKey?: number;\n permissionSetPageKey?: number;\n isDeleted?: boolean;\n icon: string;\n module?: string;\n}\n\nexport interface PermissionSetUpdateForm {\n permissionSetKey: number;\n applicationPageKey: number;\n isActive: boolean;\n}\n\nexport interface Module {\n page: PermissionSetPage;\n pages: PermissionSetPage[] | Module[];\n}\n\nexport interface PositionPermissionUpdate {\n staffPositionKey: number;\n permissionSetKey: string;\n roleName: string;\n isActive: boolean;\n homePageKey: number;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { ExtendedAccessModel } from '../interfaces/hierarchy-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserExtendedAccessService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/UserExtendedAccess').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n save(body): Observable {\n return this.http.post(`${this._url}`, body);\n }\n\n get(loginEmail: string): Observable {\n return this.http.post(`${this._url}/get`, {\n Email: loginEmail,\n });\n }\n}\n","
\n
\n
\n \n   Extended Access\n \n \n \n
\n
\n

\n \n

\n\n
\n
\n \n ADD  \n \n \n
\n\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
LevelEntityEmployeeDelete    
\n
\n \n
\n
\n \n
\n {{ eAccess.roleOrder[0].roleName }}\n \n {{ eAccess.hierarchyIdentifier[0].hierarchyName }}\n \n All\n 0\">{{\n eAccess.employee[0].lfName\n }}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n 1\"\n style=\"color: red; font-size: 14px; padding-left: 16px;\"\n >\n {{ errors }}\n

\n\n
\n\n
\n \n   \n \n Save  \n \n \n
\n
\n
\n
\n","import { Component, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core';\nimport { HierarchyWebModel, ExtendedAccessModel } from '../../../interfaces/hierarchy-data';\nimport {\n NoDataTypes,\n NoDataSourceType,\n NoDataActionType,\n} from '../../../../shared/interfaces/no-data';\nimport { User } from '../../../../shared/services/user.service';\nimport { Employee, ClientCustomRole } from '../../../../shared/interfaces/client-data';\n\n// Services\nimport { UserExtendedAccessService } from '../../../services/user-extended-access.service';\nimport { HierarchyService } from '../../../services/hierarchy.service';\nimport { ClientsService } from '../../../../shared/services/clients.service';\n\n@Component({\n selector: 'app-user-extended-access-menu',\n templateUrl: './user-extended-access-menu.component.html',\n styleUrls: ['./user-extended-access-menu.component.scss'],\n})\nexport class UserExtendedAccessMenuComponent implements OnInit {\n userExtendedAccess: any[];\n userExtendedAccessUpdate: any[];\n userExtendedAccessOriginal: any[];\n noDataType: NoDataTypes;\n extendedAccessLoaded: boolean;\n errors: string = null;\n clientCustomRoles: ClientCustomRole[];\n levelEntities: any[];\n\n employeeListSettings: any;\n entityListSettings: any;\n roleListSettings: any;\n defaultRoleOrder: number;\n\n @Input() user: User;\n @Input() employees: Employee[];\n @Input() clientShortName: string;\n\n @Output() cancel = new EventEmitter();\n @Output() saved = new EventEmitter();\n\n constructor(\n private hierarchyService: HierarchyService,\n private userExtendedAccessService: UserExtendedAccessService,\n private clientService: ClientsService\n ) {}\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'extended access',\n inputSource: NoDataSourceType.table,\n };\n\n this.employeeListSettings = {\n singleSelection: true,\n text: 'All',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'lfName',\n primaryKey: 'primaryIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.entityListSettings = {\n singleSelection: true,\n text: 'All',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'hierarchyName',\n primaryKey: 'hierarchyIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.roleListSettings = {\n singleSelection: true,\n text: 'Select',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'roleName',\n primaryKey: 'roleOrder',\n enableFilterSelectAll: false,\n };\n\n const tempEmployees = this.employees.filter(\n (e) => e.employeeStatus != 'Terminated' && e.loginEmail != this.user.loginEmail\n );\n this.employees = JSON.parse(JSON.stringify(tempEmployees));\n\n this.getAccessLevelsForClient();\n }\n\n //\n\n getExtendedAccess() {\n this.extendedAccessLoaded = false;\n\n try {\n this.userExtendedAccessService.get(this.user.loginEmail).subscribe(\n (data) => {\n this.userExtendedAccess = JSON.parse(JSON.stringify(data));\n\n // Add role object for drop down\n // Defaults to branch for existing access\n this.userExtendedAccess.forEach((x) => {\n if (!x.roleOrder) {\n x.roleOrder = [this.clientCustomRoles.find((y) => y.roleOrder == 2)];\n } else {\n x.roleOrder = [\n this.clientCustomRoles.find((y) => y.roleOrder == x.roleOrder),\n ];\n }\n });\n\n // Remove items greater than the current user's hierarchy level (Per MGB)\n this.userExtendedAccess = this.userExtendedAccess.filter(\n (x) => x.roleOrder[0] && x.roleOrder[0].roleOrder <= this.defaultRoleOrder\n );\n\n // Set values compatable with angular2-multiselect\n this.userExtendedAccess.forEach((x) => {\n x.entities = this.levelEntities.find(\n (y) => y.roleOrder == x.roleOrder[0].roleOrder\n ).entities;\n\n if (x.hierarchyIdentifier == '0') {\n x.hierarchyIdentifier = null;\n } else {\n x.hierarchyIdentifier = [\n x.entities.find(\n (y) => y.hierarchyIdentifier == x.hierarchyIdentifier\n ),\n ];\n }\n\n if (x.employee == '0') {\n x.employee = null;\n } else {\n x.employee = [\n this.employees.find((y) => y.primaryIdentifier == x.employee),\n ];\n }\n });\n\n // Create copy of extended access array for later reference in update logic\n this.userExtendedAccessOriginal = JSON.parse(\n JSON.stringify(this.userExtendedAccess)\n );\n\n this.extendedAccessLoaded = true;\n },\n (error) => {\n throw error;\n }\n );\n } catch (e) {\n this.extendedAccessLoaded = true;\n this.cancel.emit('Something went wrong fetching extended access. Try again later.');\n throw new Error(e);\n }\n }\n\n getAccessLevelsForClient() {\n this.clientService.getCustomRoles().subscribe(\n (roles) => {\n if (!roles) {\n throw new Error('Client has not yet setup their custom role levels.');\n } else {\n // Filter out roles higher than the current user's hierarchy level\n const userRole = roles.find(\n (r) => r.roleName == this.user.clientCustomRoleName\n );\n this.defaultRoleOrder = userRole.roleOrder;\n this.clientCustomRoles = roles.filter(\n (r) =>\n r.roleOrder <= userRole.roleOrder &&\n r.roleOrder != 1 &&\n r.roleOrder != 10\n );\n\n // Fetch hierarchy Entities\n this.getHierarchyEntities();\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getHierarchyEntities() {\n this.levelEntities = [];\n\n this.clientCustomRoles.forEach((x) => {\n this.hierarchyService.getEntitiesByRoleOrder(x.roleOrder).subscribe(\n (entities) => {\n if (entities) {\n const model = {\n roleOrder: x.roleOrder,\n entities: entities,\n };\n this.levelEntities.push(model);\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n });\n\n const numRoles = this.clientCustomRoles.length;\n let numLevels = this.levelEntities.length;\n\n let _this = this;\n\n // Need to pause logic to wait for all hierarchy levels to be loaded\n if (numRoles != numLevels) {\n setTimeout(function () {\n _this.getExtendedAccess();\n }, 1000);\n } else {\n this.getExtendedAccess();\n }\n }\n\n updateExtendedAccess(model?: any, isDeleted?: boolean) {\n try {\n if (!this.userExtendedAccessUpdate) {\n this.userExtendedAccessUpdate = [];\n }\n\n if (model) {\n if (isDeleted && isDeleted === true) {\n model.isDeleted = true;\n const indexOfExistingOriginal = this.userExtendedAccessOriginal.findIndex(\n (x) => x.extendedAccessKey === model.extendedAccessKey\n );\n\n if (indexOfExistingOriginal < 0) {\n // Model is new, and was not here before edit:\n const indexOfExisting = this.userExtendedAccess.findIndex(\n (x) => x.extendedAccessKey === model.extendedAccessKey\n );\n if (indexOfExisting >= 0) {\n this.userExtendedAccess.splice(indexOfExisting, 1);\n }\n\n this.removeModelFromUpdateIfExists(model);\n } else {\n // Model is not new, and has since been deleted:\n this.removeModelFromUpdateIfExists(model);\n this.userExtendedAccessUpdate.push(model);\n }\n } else {\n model.isDeleted = false;\n this.removeModelFromUpdateIfExists(model);\n }\n\n // Regular update logic\n const originalModel = this.userExtendedAccessOriginal.find(\n (x) => x.extendedAccessKey === model.extendedAccessKey\n );\n\n if (originalModel && originalModel.isDeleted === model.isDeleted) {\n this.removeModelFromUpdateIfExists(model);\n\n if (\n originalModel.employee !== model.employee ||\n originalModel.hierarchyIdentifier !== model.hierarchyIdentifier ||\n originalModel.roleOrder[0].roleOrder !== model.roleOrder[0].roleOrder\n ) {\n if (model.roleOrder[0].roleOrder !== originalModel.roleOrder[0].roleOrder) {\n model.entities = this.levelEntities.find(\n (x) => x.roleOrder == model.roleOrder[0].roleOrder\n ).entities;\n\n if (\n model.hierarchyIdentifier &&\n model.hierarchyIdentifier.length >= 1\n ) {\n if (\n !model.entities.find(\n (x) =>\n x.hierarchyIdentifier ===\n model.hierarchyIdentifier[0].hierarchyIdentifier\n )\n ) {\n model.hierarchyIdentifier = null;\n }\n }\n }\n\n this.userExtendedAccessUpdate.push(model);\n }\n } else {\n if (!isDeleted) {\n this.removeModelFromUpdateIfExists(model);\n\n model.entities = this.levelEntities.find(\n (x) => x.roleOrder == model.roleOrder[0].roleOrder\n ).entities;\n\n if (model.hierarchyIdentifier && model.hierarchyIdentifier.length >= 1) {\n if (\n !model.entities.find(\n (x) =>\n x.hierarchyIdentifier ===\n model.hierarchyIdentifier[0].hierarchyIdentifier\n )\n ) {\n model.hierarchyIdentifier = null;\n }\n }\n\n this.userExtendedAccessUpdate.push(model);\n }\n }\n } else {\n // Add new template model\n const newModel = {\n extendedAccessKey: this.userExtendedAccess.length + 1,\n isDeleted: false,\n roleOrder: [\n this.clientCustomRoles.find((y) => y.roleOrder == this.defaultRoleOrder),\n ],\n hierarchyIdentifier: null,\n employee: null,\n entities: this.levelEntities.find((y) => y.roleOrder == this.defaultRoleOrder)\n .entities,\n };\n\n this.userExtendedAccess.push(newModel);\n this.userExtendedAccessUpdate.push(newModel);\n }\n\n let hasInvalid = this.userExtendedAccess.find(\n (x) =>\n (x.employee == null || x.employee.length == 0) &&\n (x.hierarchyIdentifier == null || x.hierarchyIdentifier.length == 0)\n );\n if (hasInvalid) {\n this.errors = 'You must select at least one hierarchy entity or one employee.';\n } else {\n this.errors = null;\n }\n } catch (e) {\n this.cancel.emit('Something went wrong. Try again later.');\n throw new Error(e);\n }\n }\n\n removeModelFromUpdateIfExists(model: ExtendedAccessModel) {\n const indexOfExistingUpdate = this.userExtendedAccessUpdate.findIndex(\n (x) => x.extendedAccessKey === model.extendedAccessKey\n );\n if (indexOfExistingUpdate >= 0) {\n this.userExtendedAccessUpdate.splice(indexOfExistingUpdate, 1);\n }\n }\n\n canSaveExtendedAccess() {\n if (this.errors) {\n return false;\n }\n\n return this.userExtendedAccessUpdate && this.userExtendedAccessUpdate.length > 0;\n }\n\n saveExtendedAccess() {\n if (this.canSaveExtendedAccess()) {\n try {\n let updateData = [];\n\n this.userExtendedAccessUpdate.forEach((x) => {\n let updateModel = {\n roleOrder: x.roleOrder[0].roleOrder,\n employee: null,\n hierarchyIdentifier: null,\n loginEmail: this.user.loginEmail,\n clientUserAccessKey: x.clientUserAccessKey,\n hierarchyManagementKey: x.hierarchyManagementKey,\n isDeleted: x.isDeleted,\n };\n\n if (x.employee && x.employee.length >= 1) {\n updateModel.employee = x.employee[0].primaryIdentifier;\n } else {\n updateModel.employee = '0';\n }\n\n if (x.hierarchyIdentifier && x.hierarchyIdentifier.length >= 1) {\n updateModel.hierarchyIdentifier =\n x.hierarchyIdentifier[0].hierarchyIdentifier;\n } else {\n updateModel.hierarchyIdentifier = '0';\n }\n\n updateData.push(updateModel);\n });\n\n this.userExtendedAccessService.save(updateData).subscribe(\n (data) => {\n this.saved.emit();\n },\n (error) => {\n throw error;\n }\n );\n } catch (e) {\n this.cancel.emit('Something went wrong saving extended access. Try again later.');\n throw new Error(e);\n }\n }\n }\n\n cancelMenu() {\n this.cancel.emit();\n }\n}\n","\n Users\n
\n
\n
\n \n \n \n \n\n
\n \n \n
\n\n \n \n \n
\n\n
\n \n Send Emails  \n \n \n
\n
\n\n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n {{ dataItem.isUser ? 'Yes' : 'No' }}\n \n \n \n \n {{ dataItem.isClientAdmin ? 'Yes' : 'No' }}\n \n \n \n \n\n \n \n\n \n \n\n \n \n {{ dataItem.welcomeEmailStatus === 0 ? 'Pending' : '' }}\n \n \n \n \n
\n \n
\n \n \n \n
\n
\n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n
\n
\n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n Welcome Email:\n \n \n Password\n \n \n Pending\n \n \n \n \n \n \n \n \n \n \n \n
Name:\n {{ selectedEmployee.value.lfName }}\n
Contact Email:\n {{ user.loginEmail }}\n
Login Email:\n \n\n \n Override Default:\n \n \n \n \n \n \n
Job Title:\n {{ selectedEmployee.value.jobTitle }}\n
Position:{{ selectedEmployee.value.positionName }}
Location:{{ selectedEmployee.value.location }}
Permission Set:\n \n \n {{ permission.name }}\n \n \n Power User\n Admin User\n  \n \n Override Default:\n \n \n \n \n \n \n
Hierarchy Level:\n \n \n \n {{ user.clientCustomRoleName }}\n\n  \n \n Override Default:\n \n \n \n \n \n \n
General Ledger Access:\n \n \n \n \n
Extended Access:\n \n Edit  \n \n \n
Enabled:\n \n
Admin User:\n \n \n \n \n
Power User:\n \n \n \n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Name:\n {{ selectedEmployee.value.lfName }}\n
Job Title:\n {{ selectedEmployee.value.jobTitle }}\n
Primary Email:\n {{ selectedEmployee.value.loginEmail }}\n
\n
\n\n
\n \n \n CREATE USER\n \n \n Save\n \n
\n
\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport {\n ClientCustomRole,\n ClientInterface,\n Employee,\n} from '../../../shared/interfaces/client-data';\nimport { ClientsService } from '../../../shared/services/clients.service';\nimport { UserCreateModel } from '../../interfaces/user';\nimport { UpdateUser, UserService } from '../../../shared/services/user.service';\nimport { EmployeeService } from '../../../shared/services/employee.service';\nimport { GridComponent, GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { filterBy, orderBy, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { ResetPasswordService } from '../../../shared/services/reset-password.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { UserPermissionsService } from '../../services/user-permissions.service';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from '../../../shared/interfaces/no-data';\nimport { LimegearUserModel } from '../../../shared/classes/limegearUser.model';\nimport { ConfirmationAlertDialogComponent } from '../confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { UserPasswordResetRequest } from 'app/modules/shared/classes/user-password-reset';\nimport { BehaviorSubject } from 'rxjs';\nimport { EmailConfirmationDialogComponent } from 'app/modules/shared/components/email-confirmation-dialog/email-confirmation-dialog.component';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\nimport { MatDialog } from '@angular/material/dialog';\nimport { WelcomeEmailSendStatus } from 'app/modules/shared/interfaces/client-data';\n\n@Component({\n selector: 'app-user-management',\n templateUrl: './user-management.component.html',\n styleUrls: ['./user-management.component.scss'],\n})\nexport class UserManagementComponent implements OnInit {\n editUserForm: UntypedFormGroup;\n clients: ClientInterface[];\n filteredClients: ClientInterface[];\n clientSearchTerm: string;\n employeeSearchTerm: string;\n employees: Employee[];\n empEmailsAvailable: Employee[];\n filteredEmpEmailsAvailable: Employee[];\n selectedEmployee: BehaviorSubject;\n filteredEmployees: Employee[];\n user: UpdateUser;\n originalUser: UpdateUser;\n employeeIdentifier: string;\n employeeGridView: GridDataResult;\n clientGridView: GridDataResult;\n info = true;\n type: 'numeric' | 'input' = 'input';\n pageSizes = true;\n previousNext = true;\n pageSize = 10;\n skip = 0;\n mySelection: number[] = [];\n clientSort: SortDescriptor[] = [{ field: 'clientFullName', dir: 'asc' }];\n employeeSort: SortDescriptor[] = [{ field: 'lastName', dir: 'asc' }];\n stepNumber: number;\n isSuperUser: boolean;\n showSelectEmployeeStep: boolean;\n newPassword: string;\n clientShortName: string;\n clientCustomRoles: ClientCustomRole[];\n clientCustomRolesNoMinMax: ClientCustomRole[];\n clientPermissionSets: any[];\n defaultPositionValues: any;\n onFinalStep: boolean;\n loadingEmployees: boolean = true;\n useSSO?: boolean;\n extendAccessMenu = false;\n noDataType: NoDataTypes;\n noEmployees: boolean;\n currentUser: LimegearUserModel;\n state: State = {\n filter: { filters: [], logic: 'and' },\n };\n readyToEmail: boolean = false;\n emailAllCheckbox: boolean = false;\n currentDate: Date;\n emails: UserPasswordResetRequest[] = [];\n multipleEmails: boolean = false;\n exportFileName: string;\n exportData: Employee[];\n canCreateUser: boolean = false;\n\n activeUserFilter = 1; // Defaults to Active\n\n activeUserFilterOptions = [\n { label: 'All', value: 0 },\n { label: 'Active', value: 1 },\n { label: 'Inactive', value: 2 },\n ];\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private userService: UserService,\n private clientService: ClientsService,\n private employeeService: EmployeeService,\n private resetPasswordService: ResetPasswordService,\n private toastService: ToastService,\n private permissionService: UserPermissionsService,\n public dialog: MatDialog,\n private currentUserStateService: CurrentUserStateService,\n private _reusableFunctions: ReusableFunctions,\n private impersonationService: ImpersonationService\n ) {\n this.editUserForm = this.createFormGroup();\n this.selectedEmployee = new BehaviorSubject(null);\n this.getExcelExportData = this.getExcelExportData.bind(this);\n }\n\n ngOnInit() {\n scroll(0, 0);\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'employees',\n inputSource: NoDataSourceType.chartCard,\n };\n this.currentDate = new Date();\n this.setAuthenticationMethod();\n this.onFinalStep = false;\n this.stepNumber = 1;\n this.showSelectEmployeeStep = true;\n this.getAccessLevelsForClient();\n this.getPermissionSetsForClient();\n this.getEmployeesForClient();\n }\n setAuthenticationMethod() {\n this.clientService.getAuthenticationMethod().subscribe(\n (useSSO) => {\n this.useSSO = useSSO;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getEmployeesForClient(): void {\n this.loadingEmployees = true;\n this.employeeService.getAllEmployees().subscribe(\n (employees) => {\n employees.forEach((employee) => {\n if (!employee.isClientAdmin) employee.isClientAdmin = false;\n });\n if (employees.length) {\n this.employees = employees;\n this.loadEmployeesIntoGridView(true);\n this.getAvailableToEmail();\n if (this.selectedEmployee.value) {\n this.selectedEmployee.next(\n employees.find(\n (emp) =>\n emp.primaryIdentifier ===\n this.selectedEmployee.value.primaryIdentifier\n )\n );\n }\n } else {\n this.noEmployees = true;\n }\n this.loadingEmployees = false;\n\n this.filterEmployees();\n },\n (error) => {\n this.loadingEmployees = false;\n throw new Error(error);\n }\n );\n }\n\n getAvailableToEmail() {\n // Do we care that an employee with an Employment Status of Terminated could get this email?\n for (let emp of this.employees) {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.Unknown;\n if (emp.employeeStatus.toUpperCase() === 'TERMINATED') {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.EmployeeTerminated;\n } else if (emp.lastLoginDate && emp.isUser) {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.Delivered;\n } else if (emp.isUser && !emp.welcomeEmailExpirationDate) {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.NotSent;\n } else if (\n emp.isUser &&\n emp.welcomeEmailExpirationDate &&\n this.currentDate.getTime() >= new Date(emp.welcomeEmailExpirationDate).getTime()\n ) {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.Expired;\n } else if (\n emp.isUser &&\n emp.welcomeEmailExpirationDate &&\n this.currentDate.getTime() < new Date(emp.welcomeEmailExpirationDate).getTime()\n ) {\n emp.welcomeEmailStatus = WelcomeEmailSendStatus.Pending;\n }\n }\n this.empEmailsAvailable = this.employees.filter(\n (emp) =>\n emp.welcomeEmailStatus === WelcomeEmailSendStatus.Pending ||\n emp.welcomeEmailStatus === WelcomeEmailSendStatus.Expired ||\n emp.welcomeEmailStatus === WelcomeEmailSendStatus.NotSent\n );\n this.filteredEmpEmailsAvailable = this.empEmailsAvailable;\n this.updateButtonAndCheckAll();\n }\n\n checkAll() {\n if (this.filteredEmpEmailsAvailable?.length) {\n this.emailAllCheckbox = !this.emailAllCheckbox;\n this.readyToEmail = this.emailAllCheckbox;\n this.multipleEmails = this.emailAllCheckbox;\n\n this.filteredEmpEmailsAvailable.forEach((emp) => {\n emp.sendEmail = this.emailAllCheckbox;\n });\n }\n }\n\n createFormGroup() {\n return this.formBuilder.group({\n user: this.formBuilder.group(new UserCreateModel()),\n });\n }\n\n // ... Employee page functions\n employeeSortChange(sort: SortDescriptor[]): void {\n this.employeeSort = sort;\n this.employeeGrid();\n }\n\n employeeGrid() {\n let orderedData = orderBy(\n this.filteredEmployees ? this.filteredEmployees : this.employees,\n this.employeeSort\n );\n\n this.setGridView(orderedData);\n }\n\n setGridView(orderedData: Employee[]) {\n this.exportData = orderedData.map((obj) => ({ ...obj }));\n this.employeeGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n employeePageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadEmployeesIntoGridView();\n }\n\n filterEmployees(): void {\n if (this.loadingEmployees || this.noEmployees) return;\n if (!this.employees || this.employees.length === 0) return;\n\n this.filteredEmployees = [...this.employees];\n let searchTermTokens = [];\n\n if (this.activeUserFilter !== 0) {\n this.filteredEmployees = this.filteredEmployees.filter((employee) =>\n this.activeUserFilter === 1 ? employee.isActive : !employee.isActive\n );\n }\n\n if (this.employeeSearchTerm && this.employeeSearchTerm.length > 0) {\n searchTermTokens = this.employeeSearchTerm.split(' ');\n this.filteredEmployees = filterBy(this.filteredEmployees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'primaryIdentifier',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'isUser',\n operator: 'eq',\n value: searchTermTokens[0].toLowerCase() === 'yes' ? true : '',\n ignoreCase: true,\n },\n ],\n });\n }\n\n if (searchTermTokens.length > 1) {\n this.filteredEmployees = filterBy(this.filteredEmployees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n\n let orderedData = orderBy(this.filteredEmployees, this.employeeSort);\n this.setGridView(orderedData);\n this.filterEmailsAvailable();\n }\n\n public onStateChange(state: State) {\n this.state = state;\n }\n\n checkChange(id: string) {\n this.selectedEmployee.next(this.employees.find((emp) => emp.primaryIdentifier === id));\n this.selectedEmployee.value.sendEmail = !this.selectedEmployee.value.sendEmail;\n this.updateButtonAndCheckAll();\n }\n\n updateButtonAndCheckAll() {\n if (this.filteredEmpEmailsAvailable?.length) {\n let anyFalse =\n this.filteredEmpEmailsAvailable.findIndex((emp) => !emp.sendEmail) !== -1\n ? true\n : false;\n let anyTrue =\n this.filteredEmpEmailsAvailable.findIndex((emp) => emp.sendEmail) !== -1\n ? true\n : false;\n if (this.emailAllCheckbox && anyFalse) this.emailAllCheckbox = false;\n else if (!anyFalse) this.emailAllCheckbox = true;\n\n if (!this.readyToEmail && anyTrue) this.readyToEmail = true;\n else if (this.readyToEmail && !anyTrue) this.readyToEmail = false;\n\n if (this.filteredEmpEmailsAvailable.filter((emp) => emp.sendEmail).length > 1)\n this.multipleEmails = true;\n else this.multipleEmails = false;\n } else {\n this.readyToEmail = false;\n this.emailAllCheckbox = false;\n }\n }\n\n updateSendStatus() {\n this.filteredEmpEmailsAvailable.forEach((emp, index) => {\n if (this.selectedEmployee.value.primaryIdentifier === emp.primaryIdentifier) {\n this.filteredEmpEmailsAvailable[index].sendEmail = true;\n } else {\n this.filteredEmpEmailsAvailable[index].sendEmail = false;\n }\n });\n this.openChangeClientDialog();\n }\n\n filterEmailsAvailable() {\n if (this.filterEmployees) {\n this.filteredEmpEmailsAvailable = this.empEmailsAvailable?.filter((emp) =>\n this.filteredEmployees.includes(emp)\n );\n } else {\n this.filteredEmpEmailsAvailable = this.empEmailsAvailable;\n }\n this.updateButtonAndCheckAll();\n }\n\n sendEmail() {\n let emails = [];\n\n this.filteredEmpEmailsAvailable\n .filter((emp) => emp.sendEmail)\n .forEach((emp) => emails.push({ username: emp.loginEmail }));\n\n this.userService.sendWelcomeEmail(emails).subscribe(\n () => {\n this.getEmployeesForClient();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n loadEmployeesIntoGridView(showAll: boolean = false) {\n if (showAll) {\n this.skip = 0;\n }\n let orderedData = orderBy(\n this.filteredEmployees && !showAll ? this.filteredEmployees : this.employees,\n this.employeeSort\n );\n this.setGridView(orderedData);\n }\n\n employeeSelectionChangeHandler(event: any): void {\n this.employeeIdentifier = event.selectedRows[0].dataItem.primaryIdentifier;\n this.showSelectEmployeeStep = false;\n this.stepNumber++;\n this.prepareFinalStep();\n }\n\n // ... \"Step\" functions\n goToPreviousStep() {\n this.clientSearchTerm = this.employeeSearchTerm = '';\n if (this.employeeIdentifier) {\n this.employeeIdentifier = undefined;\n this.showSelectEmployeeStep = true;\n this.loadEmployeesIntoGridView(true);\n }\n\n this.user = undefined;\n this.newPassword = undefined;\n this.stepNumber--;\n this.onFinalStep = false;\n this.mySelection = [];\n }\n\n async prepareFinalStep() {\n this.onFinalStep = true;\n this.selectedEmployee.next(\n this.employees.find(\n (employee) => employee.primaryIdentifier === this.employeeIdentifier\n )\n );\n if (this.selectedEmployee.value.userGUID) {\n this.prepareEditUserStep();\n } else {\n await this.prepareCreateUserStep();\n }\n }\n\n async prepareCreateUserStep() {\n if (this.selectedEmployee?.value?.loginEmail) {\n const emailAddressCheck = {\n emailAddress: this.selectedEmployee?.value?.loginEmail,\n };\n let data = await this.userService.isLoginEmailAvailable(emailAddressCheck).toPromise();\n this.canCreateUser = data;\n }\n }\n\n prepareEditUserStep() {\n this.userService\n .getUserByUsername(this.selectedEmployee.value.loginEmail)\n .subscribe((user) => {\n if (!user) {\n throw new Error(\n 'Could not find user with loginEmail: ' +\n this.selectedEmployee.value.loginEmail\n );\n }\n\n this.user = user;\n\n if (!this.user.permissionSetName) {\n this.user.permissionSetName = 'None';\n }\n\n if (this.user?.alternateLoginEmail) {\n this.user.hasAlternateLoginEmail = true;\n } else {\n this.user.hasAlternateLoginEmail = false;\n this.user.alternateLoginEmail = this.user.loginEmail;\n }\n\n this.originalUser = JSON.parse(JSON.stringify(this.user));\n\n this.getPositionDefaults();\n });\n }\n\n createUser() {\n if (\n this.currentUserStateService.isLBASuperUser() &&\n this.impersonationService.isImpersonatingClient()\n )\n this.clientShortName = this.impersonationService.impersonateClient;\n else {\n this.clientShortName = this.currentUserStateService.currentUser?.clientShortName;\n }\n\n const newUser: UserCreateModel = {\n loginEmail: this.selectedEmployee.value.loginEmail,\n clientShortName: this.clientShortName,\n employeeIdentifier: this.selectedEmployee.value.primaryIdentifier,\n positionName: this.selectedEmployee.value.positionName,\n };\n\n this.userService.createUser(newUser).subscribe((response) => {\n if (response === true) {\n this.toastService.success('User has been created.');\n this.getEmployeesForClient();\n this.prepareEditUserStep();\n } else {\n this.toastService.warning('Error creating new user.');\n }\n });\n }\n\n getAccessLevelsForClient() {\n this.clientService.getCustomRoles().subscribe((roles) => {\n if (!roles) {\n throw new Error('Client has not yet setup their custom role levels.');\n } else {\n this.clientCustomRoles = roles;\n\n // Make deep copy minus max and min role to determine if user can extend access\n this.clientCustomRolesNoMinMax = JSON.parse(JSON.stringify(this.clientCustomRoles));\n this.clientCustomRolesNoMinMax.shift(); // Remove first element (Corp)\n this.clientCustomRolesNoMinMax.pop(); // Remove last element (Emp)\n }\n });\n }\n\n getPermissionSetsForClient() {\n this.permissionService.getPermissionSets().subscribe((data) => {\n if (data) {\n this.clientPermissionSets = data;\n this.clientPermissionSets.unshift({\n permissionSetKey: 0,\n clientKey: 0,\n name: 'None',\n description: null,\n });\n }\n });\n }\n\n getPositionDefaults() {\n this.permissionService.getPositionDefaults(this.user.positionName).subscribe((data) => {\n if (data) {\n this.defaultPositionValues = data;\n }\n });\n }\n\n editExistingUser(): void {\n if (this.user.customPermissionSetKey) {\n this.user.customPermissionSetKey = +this.user.customPermissionSetKey;\n }\n this.userService.editUser(this.user).subscribe(\n (response) => {\n if (response === true) {\n this.toastService.success('User has been successfully updated.');\n this.getEmployeesForClient();\n this.prepareEditUserStep();\n }\n },\n (error) => {\n if (error.status == 409) {\n this.toastService.warning(error.error.error);\n } else {\n throw new Error(error);\n }\n }\n );\n }\n\n resetPassword(): void {\n this.resetPasswordService.requestPasswordReset(this.user.loginEmail).subscribe(\n () => {\n this.toastService.success('Password Reset Email has been sent.');\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n // Extended Access Menu\n extendedAccessMenuToggle() {\n this.extendAccessMenu = !this.extendAccessMenu;\n }\n\n extendedAccessMenuCanceled(event: string) {\n this.extendedAccessMenuToggle();\n\n if (event) {\n this.toastService.warning(event);\n }\n }\n\n extendedAccessMenuSaved() {\n this.extendedAccessMenuToggle();\n this.toastService.success('Extended access has been successfully saved!');\n }\n // End Extended Access Menu\n\n saveDisabled(): boolean {\n if (!this.user || !this.originalUser) {\n return true;\n }\n\n const u = this.user;\n const ou = this.originalUser;\n\n const powerUserMatch = u.isClientAdmin === ou.isClientAdmin;\n const defaultAccessMatch =\n u.hasDefaultAccess === ou.hasDefaultAccess &&\n u.hasDefaultPermissions === ou.hasDefaultPermissions;\n const enabledMatch = u.isDisabled === ou.isDisabled;\n const permissionsMatch = u.permissionSetName === ou.permissionSetName;\n const accessMatch = u.clientCustomRoleName === ou.clientCustomRoleName;\n const hasGLMatch = u.hasGLAccess === ou.hasGLAccess;\n const clientOwnerMatch = u.isClientOwner === ou.isClientOwner;\n let alternateEmailMatch =\n u.alternateLoginEmail === ou.alternateLoginEmail ||\n u.alternateLoginEmail === null ||\n u.alternateLoginEmail.length == 0;\n\n return (\n powerUserMatch &&\n defaultAccessMatch &&\n enabledMatch &&\n permissionsMatch &&\n accessMatch &&\n hasGLMatch &&\n clientOwnerMatch &&\n alternateEmailMatch\n );\n }\n\n canExtendAccess() {\n if (!this.user || !this.clientCustomRolesNoMinMax) {\n return false;\n }\n\n const roles = this.clientCustomRolesNoMinMax.filter(\n (r) => r.roleName === this.user.clientCustomRoleName\n );\n return roles.length !== 0;\n }\n\n hasDefaultEmailChangeEvent(event) {\n this.user.hasAlternateLoginEmail = event;\n\n if (this.user.hasAlternateLoginEmail) {\n if (this.originalUser.hasAlternateLoginEmail) {\n this.user.alternateLoginEmail = this.originalUser.alternateLoginEmail;\n } else {\n this.user.alternateLoginEmail = null;\n }\n } else {\n this.user.alternateLoginEmail = this.user.loginEmail;\n }\n }\n\n // Update custom value and/or reset role name to position default\n hasDefaultAccessChangeEvent(event, clicked?: boolean) {\n if (clicked) {\n if (!event) {\n let dialogRef1 = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Modify Hierarchy Level',\n message: `Are you sure you want to override default access level? Clicking 'YES' will unlock ${this.selectedEmployee.value.lfName} from the hierarchy level assigned by their position.`,\n },\n });\n\n dialogRef1.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.hasDefaultAccess = true;\n } else if (result === 'accept') {\n this.user.hasDefaultAccess = false;\n }\n });\n } else {\n let dialogRef2 = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Modify Hierarchy Level',\n message: `Are you sure you want to remove hierarchy level override? Clicking 'YES' will change ${this.selectedEmployee.value.lfName} to the hierarchy level assigned by their position. Any extended access greater than their new level will be removed.`,\n },\n });\n\n dialogRef2.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.hasDefaultAccess = false;\n } else if (result === 'accept') {\n this.user.hasDefaultAccess = true;\n this.user.clientCustomRoleName = this.defaultPositionValues.roleName;\n }\n });\n }\n }\n }\n\n // Update permission value and/or reset permission to position default\n hasDefaultPermissionsChangeEvent(event) {\n this.user.hasDefaultPermissions = event;\n\n if (this.originalUser.hasDefaultPermissions === this.user.hasDefaultPermissions) {\n this.user.permissionSetName = this.originalUser.permissionSetName;\n } else {\n if (this.user.hasDefaultPermissions) {\n if (!this.defaultPositionValues.permissionSetName) {\n this.user.permissionSetName = 'None';\n } else {\n this.user.permissionSetName = this.defaultPositionValues.permissionSetName;\n }\n }\n }\n }\n powerUserSelectChangeHandler(value: boolean) {\n if (value) {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Power User',\n message:\n \"Are you sure you want to give this user full access to all subscription features and all data for the organization? Clicking 'YES' will also change user's hierarchy level to Corporate, if not already.\",\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.isClientAdmin = false;\n } else if (result === 'accept') {\n this.user.hasDefaultAccess = false;\n this.user.hasDefaultPermissions = false;\n this.user.clientCustomRoleName = 'Corporate';\n }\n });\n } else {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Remove as Power User',\n message:\n \"Are you sure you want to remove power user abilities for this user? Clicking 'YES' will reset their hierarchy level and permission set to the default based on their position.\",\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.isClientAdmin = true;\n } else if (result === 'accept') {\n this.user.isClientAdmin = false;\n\n this.user.hasDefaultAccess = true;\n this.user.hasDefaultPermissions = true;\n\n let defaultPositionRole = this.defaultPositionValues.roleName;\n if (!defaultPositionRole) {\n defaultPositionRole = this.clientCustomRoles.find(\n (x) => x.roleName === 'Employee'\n );\n\n if (defaultPositionRole) {\n defaultPositionRole = defaultPositionRole.roleName;\n }\n }\n\n this.user.clientCustomRoleName = defaultPositionRole;\n this.user.permissionSetName = this.defaultPositionValues.permissionSetName;\n }\n });\n }\n }\n\n glDataSelectChangeHandler(event) {\n if (event) {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'General Ledger Access',\n message:\n 'Are you sure you want to give this user full access to General Ledger data?',\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.hasGLAccess = false;\n } else if (result === 'accept') {\n this.user.hasGLAccess = true;\n }\n });\n }\n }\n clientOwnerSelectChangeHandler(event) {\n if (event) {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Admin User',\n message:\n \"Are you sure you want to give this user administrator access to Mortgage Analytics? Clicking 'YES' will also upgrade the user to Power User, granting corporate level access to all pages, features, and data.\",\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.isClientOwner = false;\n } else if (result === 'accept') {\n this.user.hasDefaultAccess = false;\n this.user.hasDefaultPermissions = false;\n this.user.clientCustomRoleName = 'Corporate';\n this.user.isClientOwner = true;\n this.user.isClientAdmin = true;\n }\n });\n } else {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Remove as Admin User',\n message:\n \"Are you sure you want to remove admin user abilities for this user? Clicking 'YES' will reset their hierarchy level and permission set to the default based on their position.\",\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.isClientOwner = true;\n } else if (result === 'accept') {\n this.user.isClientAdmin = false;\n this.user.isClientOwner = false;\n\n this.user.hasDefaultAccess = true;\n this.user.hasDefaultPermissions = true;\n\n let defaultPositionRole = this.defaultPositionValues.roleName;\n if (!defaultPositionRole) {\n defaultPositionRole = this.clientCustomRoles.find(\n (x) => x.roleName === 'Employee'\n );\n\n if (defaultPositionRole) {\n defaultPositionRole = defaultPositionRole.roleName;\n }\n }\n\n this.user.clientCustomRoleName = defaultPositionRole;\n this.user.permissionSetName = this.defaultPositionValues.permissionSetName;\n }\n });\n }\n }\n\n lowerHierarchyLevelChangeHandler(value: boolean) {\n try {\n if (value) {\n let originalRole = this.clientCustomRoles.find(\n (x) => x.roleName === this.originalUser.clientCustomRoleName\n );\n let newRole = this.clientCustomRoles.find(\n (x) => x.roleName === this.user.clientCustomRoleName\n );\n\n if (originalRole && newRole) {\n if (newRole.roleOrder < originalRole.roleOrder) {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Review extended access',\n message:\n \"Are you sure you want to lower this user's hierarchy level? Clicking 'YES' will remove any extended access assigned to a higher level.\",\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'close') {\n this.user.clientCustomRoleName =\n this.originalUser.clientCustomRoleName;\n } else if (result === 'accept') {\n // nothing\n }\n });\n }\n }\n }\n } catch (error) {\n throw new Error(error);\n }\n }\n\n canSeePowerUserValues() {\n return (\n this.currentUserStateService.isLBASuperUser() ||\n this.currentUserStateService.isPowerUser() ||\n this.currentUserStateService.isPlatformUser()\n );\n }\n\n canSeeClientOwnerValues() {\n let hasView;\n\n if (this.impersonationService.isImpersonatingUser()) {\n hasView = this.impersonationService.isImpersonatingClientAdmin();\n } else {\n hasView =\n this.currentUserStateService.isLBASuperUser() ||\n this.currentUserStateService.isClientOwner();\n }\n\n return hasView;\n }\n\n openChangeClientDialog() {\n let confirmList = this.filteredEmpEmailsAvailable.filter((emp) => emp.sendEmail);\n\n const emailConfirmationDialogRef = this.dialog.open(EmailConfirmationDialogComponent, {\n data: { emails: confirmList },\n panelClass: 'email-confirmation-dialog-container',\n });\n\n emailConfirmationDialogRef.componentInstance.updateEmailsFromDialog.subscribe(\n (data: Employee) => {\n let index = this.filteredEmpEmailsAvailable.indexOf(data);\n if (index >= 0) this.filteredEmpEmailsAvailable[index] = data;\n }\n );\n\n emailConfirmationDialogRef.afterClosed().subscribe(\n (sendEmail: string) => {\n if (sendEmail || sendEmail.toLowerCase() === 'confirm') this.sendEmail();\n this.updateButtonAndCheckAll();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n updateEmailsFromDialog(emails: Employee[]) {\n this.filteredEmpEmailsAvailable = emails;\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName = 'nv-user-management-' + dateTime + '_.xlsx';\n\n kendoGrid.excelExport.subscribe((e) => {\n e.workbook.sheets[0].columns.forEach((c) => {\n delete c.width;\n c.autoWidth = true;\n });\n });\n\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n}\n","
\n \n \n \n
\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n\ninterface TabInfo {\n label: string;\n active: boolean;\n index: number;\n}\n\n@Component({\n selector: 'tab',\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n})\nexport class TabComponent implements OnInit {\n @Input() tabs: any[];\n @Input() setDefaultIndex?: number;\n selectedTab: number;\n @Output('tabChange') change: EventEmitter = new EventEmitter();\n constructor() {}\n\n ngOnInit() {\n this.selectedTab = 0;\n this.validateSetDefaultIndex();\n }\n\n validateSetDefaultIndex() {\n if (this.setDefaultIndex) {\n if (this.setDefaultIndex < this.tabs.length) {\n this.selectedTab = this.setDefaultIndex;\n }\n }\n }\n tabActivated(tab: MatTabChangeEvent) {\n this.selectedTab = tab.index;\n this.change.emit(this.selectedTab);\n }\n}\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CurrentUserStateService } from '../../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../../shared/services/impersonation.service';\n@Component({\n selector: 'app-profile-account-details',\n templateUrl: './account-details.component.html',\n styleUrls: ['./account-details.component.scss'],\n})\nexport class ProfileAccountDetailsComponent implements OnInit {\n tabs = [{ label: 'Info' }, { label: 'Roles & Permissions' }];\n\n constructor(\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService\n ) {}\n\n ngOnInit() {\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingUser()) {\n return;\n } else {\n if (this.impersonationService.isImpersonatingClient()) {\n clientShortName = this.impersonationService.impersonateClient;\n }\n }\n }\n}\n","\n \n \n Account Details\n \n \n \n\n","\n \n Notifications\n \n \n \n \n \n
\n\n \n \n
\n
\n

View all of your notifications.

\n
\n \n
\n
\n \n \n \n \n \n \n {{ dataItem.alertDescription }}\n \n \n \n \n \n {{ dataItem.alertDate | date : 'MM/dd/yyyy hh:mm aa' }}\n \n \n \n \n \n Read\n \n \n \n \n \n \n
\n
\n\n \n \n

\n Manage which notifications you want to receive. Unless specified, all notifications will\n only be sent in Mortgage Analytics.\n

\n
\n \n \n \n \n \n \n\n \n \n \n \n Send Email\n \n \n \n \n \n \n \n Send Text\n \n \n \n \n \n \n
\n \n \n \n \n \n
\n
\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NotificationService } from 'app/modules/shared/services/notification.service';\nimport { UserAlertTypeModel, AlertModel } from 'app/modules/settings/interfaces/notification';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { LoanDetailsListOfLoansService } from 'app/modules/shared/loan-details-modal/loan-details-list-of-loans.service';\nimport { GridDataResult, DataStateChangeEvent } from '@progress/kendo-angular-grid';\nimport { process, State } from '@progress/kendo-data-query';\nimport { EmployeeService } from 'app/modules/shared/services/employee.service';\nimport { TooltipDirective } from '@progress/kendo-angular-tooltip';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationAlertDialogComponent } from 'app/modules/settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { CurrentUserStateService } from 'app/modules/shared/services/current-user-state.service';\nimport { ImpersonationService } from 'app/modules/shared/services/impersonation.service';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n@Component({\n selector: 'app-profile-notifications',\n templateUrl: './notifications.component.html',\n styleUrls: ['./notifications.component.scss'],\n})\nexport class ProfileNotificationsComponent implements OnInit {\n deleteAllCheckbox: boolean;\n readAllCheckbox: boolean;\n readyToDelete: boolean;\n multipleSelected: boolean;\n mobileNumber: string;\n\n @ViewChild(TooltipDirective) kendoTooltip: TooltipDirective;\n\n constructor(\n private notificationService: NotificationService,\n private router: Router,\n private route: ActivatedRoute,\n private listOfLoansService: LoanDetailsListOfLoansService,\n private _employeeService: EmployeeService,\n private toastService: ToastService,\n public dialog: MatDialog,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService\n ) {}\n\n public tab: number;\n public alertTypes: UserAlertTypeModel[];\n public userNotifications: AlertModel[];\n notificationGridView: GridDataResult;\n alertGridView: GridDataResult;\n sortable = {\n mode: 'multiple',\n allowUnsort: true,\n };\n type: 'numeric' | 'input' = 'input';\n allResults: boolean = false;\n groupable = true;\n scrollable = 'scrollable';\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 25, 50],\n };\n isLoading: boolean;\n isLoadingAlertType: boolean;\n skip: 0;\n take: 10;\n notificationState: State = {\n skip: 0,\n take: 10,\n };\n alertTypeState: State = {\n skip: 0,\n take: 10,\n };\n AlertValueTypes = [\n '%LOAN_NUMBER',\n '%HIERARCHY_IDENTIFIER',\n '%PRODUCT_TYPE',\n '%GL_ACCOUNT_NUMBER',\n ];\n\n ngOnInit() {\n this.tab = 0;\n this.updateNotificationGrid();\n this.getUserTypes();\n this.getMobileNumber();\n this.router.onSameUrlNavigation = 'reload';\n let notificationAlert = this.notificationService.getNotificationAlert();\n if (notificationAlert) {\n this.alertClickHandler(notificationAlert);\n this.notificationService.clearNotificationAlert();\n }\n }\n\n updateNotificationGrid() {\n this.getNotifications();\n }\n\n getNotifications() {\n this.isLoading = true;\n this.notificationService.getNotifications().subscribe(\n (data) => {\n // filter out alerts that are not associated with an alertEvent, i.e. Daily summary\n let filteredNotifications = data.filter((event) => {\n return event.alertEventKey > 0;\n });\n this.userNotifications = this.formatAlerts(filteredNotifications);\n\n this.loadUserNotifications();\n this.isLoading = false;\n },\n (error) => {\n this.isLoading = false;\n throw new Error(error);\n }\n );\n }\n\n loadUserNotifications() {\n this.notificationGridView = {\n data: process(this.userNotifications, this.notificationState).data,\n total: this.userNotifications.length,\n };\n }\n\n formatAlerts(notifications: AlertModel[]): AlertModel[] {\n for (let notification of notifications) {\n notification.alertDescription = this.insertAlertValue(notification);\n }\n\n return notifications;\n }\n\n formatAlertTypes(alertTypes: UserAlertTypeModel[]): UserAlertTypeModel[] {\n for (let type of alertTypes) {\n type.alertDescription = this.removeAlertPlaceholder(type.alertDescription);\n }\n\n return alertTypes;\n }\n\n insertAlertValue(notification: AlertModel): string {\n this.AlertValueTypes.forEach((el) => {\n if (notification.alertDescription.includes(el))\n notification.alertDescription = notification.alertDescription.replace(\n el,\n notification.alertValue ? notification.alertValue : ''\n );\n });\n return notification.alertDescription;\n }\n\n removeAlertPlaceholder(description: string): string {\n this.AlertValueTypes.forEach((el) => {\n if (description.includes(el)) {\n let replacementText = '';\n if (el === '%LOAN_NUMBER') {\n replacementText = 'Loan';\n }\n description = description.replace(el, replacementText);\n }\n });\n return description;\n }\n\n getUserTypes(): void {\n this.isLoadingAlertType = true;\n this.notificationService.getUserNotificationTypes().subscribe(\n (data) => {\n this.alertTypes = this.formatAlertTypes(data);\n this.loadAlertTypes();\n this.isLoadingAlertType = false;\n },\n (error) => {\n this.isLoadingAlertType = false;\n throw new Error(error);\n }\n );\n }\n loadAlertTypes() {\n this.alertGridView = {\n data: process(this.alertTypes, this.alertTypeState).data,\n total: this.alertTypes.length,\n };\n }\n\n toggleRead(alert: AlertModel) {\n this.updateAlertStatus(alert);\n }\n\n /* Update the read status of a user notification */\n updateAlertStatus(alert: AlertModel): void {\n console.log('alert: ', alert);\n this.notificationService.updateAlert(alert).subscribe(\n () => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n /* Delete notification on click */\n deleteNotification(alert: AlertModel) {\n alert.isDeleted = true;\n this.notificationService.deleteAlert(alert.alertKey).subscribe(\n () => {\n this.updateNotificationGrid();\n },\n (error) => {\n throw new Error(error);\n }\n );\n // TODO: Add confirmation dialog before soft delete\n }\n\n alertClickHandler(notification: AlertModel) {\n if (notification.alertValue !== null && notification.alertType !== null) {\n notification.isRead = true;\n this.updateAlertStatus(notification);\n switch (notification.alertType.toLowerCase()) {\n case 'loannumber':\n this.openLoanModal(notification.alertValue);\n break;\n case 'hirereachy identier':\n this.forceNavigation(`/directory/record/${notification.alertValue}`);\n break;\n case 'product':\n this.forceNavigation('/settings/client-product-mapping');\n break;\n case 'glaccount':\n this.forceNavigation('/settings/general-ledger-mapping');\n break;\n default:\n break;\n }\n }\n }\n\n forceNavigation(destinationRouteUrl: string): void {\n const defaultOnSameUrlNavigation = this.router.onSameUrlNavigation;\n this.router.onSameUrlNavigation = 'reload';\n this.router.routeReuseStrategy.shouldReuseRoute = () => {\n return false;\n };\n this.router\n .navigateByUrl(destinationRouteUrl, {\n replaceUrl: true,\n })\n .then(() => {\n console.log('navigation complete.');\n })\n .catch((error) => {\n console.log(`navigation error: ${error}`);\n });\n\n this.router.onSameUrlNavigation = defaultOnSameUrlNavigation;\n }\n\n openLoanModal(identifier: string) {\n //identifier = \"borrowerName(space)LoanNumber\"\n\n //Put the loan number into an array\n let loanNumber = identifier.split(' ').pop();\n let index = 0;\n this.listOfLoansService.changeListOfLoans({\n loanNumbers: [loanNumber],\n index: index,\n });\n this.router.navigate([{ outlets: { modal: 'loanDetails' + '/' + loanNumber } }]);\n }\n\n public handleTabChange(event: MatTabChangeEvent): void {\n this.tab = event.index;\n }\n\n dataStateChange(state: DataStateChangeEvent): void {\n if (this.tab === 0) {\n this.notificationState = state;\n this.loadUserNotifications();\n } else {\n this.alertTypeState = state;\n this.loadAlertTypes();\n }\n }\n checkAll() {\n if (!!this.userNotifications) {\n this.deleteAllCheckbox = !this.deleteAllCheckbox;\n this.readyToDelete = this.deleteAllCheckbox;\n this.multipleSelected = this.multipleSelected;\n this.userNotifications.forEach((not) => {\n not.deleteCheckbox = this.deleteAllCheckbox;\n });\n }\n }\n\n checkAllRead() {\n if (!!this.userNotifications) {\n this.userNotifications.forEach((not) => {\n if (not.isRead !== this.readAllCheckbox) {\n not.isRead = this.readAllCheckbox;\n this.updateAlertStatus(not);\n }\n });\n }\n }\n checkChange(alert: AlertModel) {\n this.userNotifications.find(\n (userNotification) => userNotification.alertKey === alert.alertKey\n ).deleteCheckbox = !alert.deleteCheckbox;\n this.updateButtonAndCheckAll();\n }\n\n updateButtonAndCheckAll() {\n if (!!this.userNotifications) {\n let anyFalse =\n this.userNotifications.findIndex(\n (userNotification) => !userNotification.deleteCheckbox\n ) !== -1\n ? true\n : false;\n let anyTrue =\n this.userNotifications.findIndex(\n (userNotification) => userNotification.deleteCheckbox\n ) !== -1\n ? true\n : false;\n if (this.deleteAllCheckbox && anyFalse) this.deleteAllCheckbox = false;\n else if (!anyFalse) this.deleteAllCheckbox = true;\n\n if (!this.readyToDelete && anyTrue) this.readyToDelete = true;\n else if (this.readyToDelete && !anyTrue) this.readyToDelete = false;\n\n if (\n this.userNotifications.filter((userNotification) => userNotification.deleteCheckbox)\n .length > 1\n )\n this.multipleSelected = true;\n else this.multipleSelected = false;\n } else {\n this.readyToDelete = false;\n this.deleteAllCheckbox = false;\n }\n }\n\n deleteChecked() {\n // let deltedNotifications = this.userNotifications.filter(\n // (userNotification) => userNotification.deleteCheckbox\n // );\n\n // this.userNotifications = this.userNotifications.filter(\n // (userNotification) => !userNotification.deleteCheckbox\n // );\n this.userNotifications.forEach((notification) => {\n notification.deleteCheckbox = true;\n this.deleteNotification(notification);\n });\n }\n\n toggleCheckbox(item: UserAlertTypeModel, field: string) {\n if (field === 'useText') {\n if (!this.profileHasMobileNumber()) {\n this.toastService.warning('Mobile number needed for text notifications.', {\n location: '/settings/user-profile',\n actionText: 'navigate',\n });\n } else if (item.useText) {\n this.showConfirmationDialog(item, field);\n } else {\n item[field] = !item[field];\n this.notificationService.upsertUserAlertType(item).subscribe(\n () => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n } else {\n item[field] = !item[field];\n this.notificationService.upsertUserAlertType(item).subscribe(\n () => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n\n getMobileNumber() {\n if (\n !this.currentUserStateService.isLBASuperUser ||\n this.impersonationService.isImpersonatingUser()\n )\n this._employeeService.getCurrentUsersEmployeeRecord().subscribe(\n (record) => {\n this.mobileNumber = record.mobilePhone;\n },\n (err) => {\n throw new Error(err);\n }\n );\n else {\n //LBA users dont have employee records so we need a default mobile number\n this.mobileNumber = '0000000000';\n }\n }\n\n profileHasMobileNumber(): boolean {\n return !!this.mobileNumber;\n }\n\n showConfirmationDialog(item: UserAlertTypeModel, field: string) {\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Receive Text Messsages',\n message: `Are you sure you want to receive text messages to the number provided?`,\n value: this.mobileNumber,\n valueType: 'MobilePhone',\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result == 'accept') {\n item[field] = !item[field];\n this.notificationService.upsertUserAlertType(item).subscribe(\n () => {},\n (error) => {\n throw new Error(error);\n }\n );\n } else {\n this.clearGrid();\n this.getUserTypes();\n }\n });\n }\n clearGrid() {\n this.alertGridView = {\n data: [],\n total: 0,\n };\n }\n}\n","
Change Password
\n
\n
\n
\n
\n
\n \n Old Password\n \n \n
\n
\n {{ oldPasswordError }}\n
\n
\n
\n
\n \n New Password\n\n \n \n
\n
\n {{ newPasswordError }}\n
\n \n Please use a different password than your old password.\n
\n
\n
\n
\n \n Confirm New Password\n \n \n
\n \n Passwords must match.\n
\n
\n \n
\n \n SAVE CHANGES\n \n \n
\n \n\n","import { Component, OnInit } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n UntypedFormBuilder,\n AbstractControl,\n} from '@angular/forms';\nimport { LimegearUserModel } from '../../../shared/classes/limegearUser.model';\nimport { UserService } from 'app/modules/shared/services/user.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { LimegearAuthenticationService } from '../../../login/services/limegear-authentication.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\n\n@Component({\n selector: 'app-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n})\nexport class ChangePasswordComponent implements OnInit {\n passwordResetForm: UntypedFormGroup;\n loginEmail: string;\n usernameError: string;\n oldPasswordError: string;\n newPasswordError: string;\n success: boolean = false;\n loading: boolean = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private authenticationService: LimegearAuthenticationService,\n private currentUserStateService: CurrentUserStateService,\n private toastService: ToastService\n ) {\n this.passwordResetForm = this.createFormGroup();\n }\n\n ngOnInit() {\n this.setLoginEmail();\n }\n\n setLoginEmail() {\n this.loginEmail = this.currentUserStateService.currentUser.username;\n }\n\n createFormGroup() {\n return this.formBuilder.group({\n changePasswordRequest: this.formBuilder.group(\n {\n oldPassword: new UntypedFormControl(),\n newPassword1: new UntypedFormControl(),\n newPassword2: new UntypedFormControl(),\n },\n { validator: [this.checkNewPasswordIsConfirmed, this.doNotAllowRecyledPassword] }\n ),\n });\n }\n\n checkNewPasswordIsConfirmed(group: UntypedFormGroup) {\n let newPassword = group.get('newPassword1').value;\n let confirmNewPassword = group.get('newPassword2').value;\n\n return newPassword === confirmNewPassword ? null : { notSame: true };\n }\n\n doNotAllowRecyledPassword(group: UntypedFormGroup) {\n let newPassword = group.get('oldPassword').value;\n let confirmNewPassword = group.get('newPassword1').value;\n\n return newPassword !== confirmNewPassword ? null : { newPasswordSameAsOld: true };\n }\n\n get formControl() {\n return this.passwordResetForm.get('changePasswordRequest');\n }\n\n get oldPassword() {\n return this.passwordResetForm.get('changePasswordRequest').get('oldPassword');\n }\n\n get newPassword1() {\n return this.passwordResetForm.get('changePasswordRequest').get('newPassword1');\n }\n\n get newPassword2() {\n return this.passwordResetForm.get('changePasswordRequest').get('newPassword2');\n }\n\n onSubmit() {\n this.loading = true;\n this.passwordResetForm.markAsPristine();\n this.authenticationService\n .changePassword({\n username: this.loginEmail,\n oldPassword: this.oldPassword.value,\n newPassword: this.newPassword1.value,\n })\n .subscribe((result) => {\n if (result.success) {\n this.success = true;\n this.usernameError = this.oldPasswordError = this.newPasswordError = '';\n this.toastService.success('Password changed.');\n this.loading = false;\n } else {\n this.success = false;\n this.loading = false;\n switch (result.property) {\n case 'username':\n this.usernameError = result.errors;\n throw new Error(this.usernameError);\n case 'oldPassword':\n this.oldPasswordError = result.errors;\n this.oldPassword.setErrors({ incorrect: true });\n this.newPassword2.markAsPristine();\n break;\n case 'newPassword':\n this.newPasswordError = result.errors;\n this.newPassword1.setErrors({ incorrect: true });\n this.newPassword2.markAsPristine();\n break;\n default:\n throw new Error('Invalid property for this error.');\n }\n }\n });\n }\n\n logForm() {\n console.log(this.passwordResetForm);\n }\n}\n","
\n \n
\n \n \n
\n

{{ sideSheetTitle }}

\n \n
\n
\n
\n \n \n
\n
\n
\n \n CANCEL\n \n \n SAVE\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n SAVE\n \n
\n
\n \n\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationAlertDialogComponent } from '../../../settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component';\n\n@Component({\n selector: 'side-sheet',\n templateUrl: './side-sheet.component.html',\n styleUrls: ['./side-sheet.component.scss'],\n})\nexport class SideSheetComponent implements OnInit {\n isHierarchySaveBtnDisabled = false;\n\n @Output() mainCancelClick: EventEmitter = new EventEmitter();\n @Output() mainSaveClick: EventEmitter = new EventEmitter();\n @Output() sideSheetCancelClick: EventEmitter = new EventEmitter();\n @Output() sideSheetSaveClick: EventEmitter = new EventEmitter();\n @Output() sideSheetDeleteClick: EventEmitter = new EventEmitter();\n @Input() isSideSheetSaveBtnDisabled: boolean;\n @Input() isMainSaveBtnDisabled: boolean;\n @Input() isDeleteButtonHidden: boolean;\n @Input() sideSheetTitle: string;\n @Input() isEditDialogClose: boolean;\n @Input() isMainButtonSetHidden?: boolean = false;\n\n isMainSaveButtonClicked = false;\n isSideSheetSaveButtonClicked = false;\n\n constructor(public dialog: MatDialog) {}\n\n ngOnInit() {\n this.closeDialog();\n //this.isMainButtonSetHidden = false;\n }\n\n closeDialog() {\n //this.editHierarchy.nativeElement.style.visibility = 'hidden';\n this.isEditDialogClose = true;\n }\n\n mainCancelClicked() {\n this.closeDialog();\n this.mainCancelClick.emit(true);\n }\n\n sideSheetCancelClicked() {\n this.closeDialog();\n this.sideSheetCancelClick.emit(true);\n }\n\n mainSaveClicked() {\n this.isMainSaveButtonClicked = true;\n this.isSideSheetSaveButtonClicked = false;\n this.closeDialog();\n this.mainSaveClick.emit(this.isMainSaveButtonClicked);\n }\n\n sideSheetSaveClicked() {\n this.isMainSaveButtonClicked = false;\n this.isSideSheetSaveButtonClicked = true;\n this.sideSheetSaveClick.emit(this.isSideSheetSaveButtonClicked);\n }\n\n sideSheetDeleteClicked() {\n this.isMainSaveButtonClicked = false;\n this.isSideSheetSaveButtonClicked = false;\n\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n id: 'alert-dialog',\n data: {\n title: 'Delete level?',\n message: 'Are you sure you want to delete this hierarchy level?',\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.sideSheetDeleteClick.emit(result);\n }\n });\n }\n}\n","
\n \n \n
\n
{{ tileName }}
\n
\n {{ description }}\n
\n
\n
\n \n \n
\n
\n","import { Component, OnInit, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'hierarchy-tile',\n templateUrl: './hierarchy-tile.component.html',\n styleUrls: ['./hierarchy-tile.component.scss'],\n})\nexport class HierarchyTileComponent implements OnInit {\n constructor() {}\n\n @Input() hideEditIcon: boolean;\n @Input() tileName: string;\n @Input() description: string;\n @Input() fontIcon: string;\n @Input() fontSet: string;\n @Input() hideTitleIcon: boolean;\n @Input() activeShadow: string;\n @Output() editClicked: EventEmitter = new EventEmitter();\n tileClass: string;\n tileIconClass: string;\n isEditClicked: boolean;\n\n ngOnInit() {\n this.isEditClicked = false;\n this.tileClass = 'middle-level-tile';\n this.tileIconClass = 'middle-level-icon';\n this.activeShadow = 'regular-shadow';\n this.trimDescription();\n\n if (this.hideTitleIcon && this.hideEditIcon) {\n this.tileClass = 'new-level-tile';\n this.tileIconClass = '';\n this.activeShadow = 'active-shadow';\n } else if (!this.hideTitleIcon && this.hideEditIcon) {\n this.tileClass = 'main-level-tile';\n this.tileIconClass = 'main-level-icom';\n } else if (\n !this.hideTitleIcon &&\n !this.hideEditIcon &&\n (!this.description || this.description.length === 0)\n ) {\n this.tileClass = 'middle-level-tile-no-description';\n }\n }\n\n trimDescription() {\n if (!this.description) {\n return null;\n }\n this.description = this.description.slice(0, 15);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.hideTitleIcon && !this.hideEditIcon) {\n if (!this.description || this.description.length === 0) {\n this.tileClass = 'middle-level-tile-no-description';\n } else {\n this.tileClass = 'middle-level-tile';\n }\n }\n\n this.trimDescription();\n }\n\n editIconClick() {\n this.isEditClicked = true;\n this.editClicked.emit(this.isEditClicked);\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'tile-connector',\n templateUrl: './tile-connector.component.html',\n styleUrls: ['./tile-connector.component.scss'],\n})\nexport class TileConnectorComponent implements OnInit {\n constructor() {}\n\n @Input() addNew: boolean;\n @Input() isAllBtnHidden: boolean;\n @Output() addNewOrCancel: EventEmitter = new EventEmitter();\n isAddNewHidden = false;\n isCancelHidden = false;\n\n ngOnInit() {\n if (this.addNew) {\n this.isAddNewHidden = false;\n this.isCancelHidden = true;\n } else if (this.addNew === false) {\n this.isAddNewHidden = true;\n this.isCancelHidden = false;\n }\n }\n\n iconClicked(action: string) {\n this.addNewOrCancel.emit(action);\n }\n}\n","
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n","\n
\n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n
\n
Name of Level
\n
\n \n \n \n
\n *{{ hierarchyData.roleName }} is already in use.\n
\n \n *Required (at least 3 characters)\n
\n
\n\n
Description
\n
\n \n \n \n
\n \n\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport {\n ClientHierarchy,\n TileData,\n ClientHierarchyMain,\n} from '../../../shared/interfaces/user-location';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { HierarchyService } from '../../services/hierarchy.service';\nimport { HierarchyEntity } from 'app/modules/settings/interfaces/hierarchy-data';\n\n@Component({\n selector: 'hierarchy-setup',\n templateUrl: './hierarchy-setup.component.html',\n styleUrls: ['./hierarchy-setup.component.scss'],\n})\nexport class HierarchySetupComponent implements OnInit {\n isRoleNameTooShort: boolean;\n isRoleNameInUse: boolean;\n hierarchyData: ClientHierarchy;\n entities: HierarchyEntity[];\n corporateHierarchy: TileData[];\n copyOfCorporateHierarchy: TileData[];\n sideSheetDialog: any;\n isDeleteButtonHidden = true;\n isSideSheetSaveBtnDisabled = true;\n isMainSaveBtnDisabled = true;\n isEditHierarchyDialogClose = true;\n sideSheetTitle: string = '';\n isMainButtonSetHidden = false;\n addTileposition: number;\n maxOrder: number;\n minOrder: number;\n originalRoleorder: number;\n roleOrdertoChange: number;\n @Input() activeCustomRoleNames: string[];\n @Output() setHierarchyLevels?: EventEmitter = new EventEmitter();\n @Output() sideSheetOpenStatus?: EventEmitter = new EventEmitter();\n @Input() permenatlyHideMainButtonSet? = false;\n\n constructor(\n private _hierarchyService: HierarchyService,\n private reusableFunctions: ReusableFunctions,\n private toastService: ToastService\n ) {}\n\n ngOnInit() {\n this.getEntities();\n this.corporateHierarchy = [];\n this.resetFormData(null);\n\n if (this.permenatlyHideMainButtonSet) {\n this.isMainButtonSetHidden = true;\n }\n\n this.getCorporateHierarchy();\n }\n getCorporateHierarchy() {\n this._hierarchyService.getCorporateAllHierarchy().subscribe(\n (data) => {\n this.maxOrder = this.reusableFunctions.getMaxValue(data, 'roleOrder');\n this.minOrder = this.reusableFunctions.getMinValue(data, 'roleOrder');\n\n data.forEach((value, index) => {\n this.initializecorporateHierarchy(value, index);\n });\n\n this.emitHierarchyLevels();\n this.sortcorporateHierarchy(this.corporateHierarchy);\n this.hideAllNewAddButton();\n },\n (err) => console.log(err)\n );\n }\n getEntities() {\n this._hierarchyService.getHierarchyEntities().subscribe(\n (entities) => {\n this.entities = entities;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n emitHierarchyLevels() {\n this.setHierarchyLevels.emit(this.corporateHierarchy);\n }\n\n sortcorporateHierarchy(corporateHierarchy: TileData[]) {\n corporateHierarchy.sort((a, b) => b.roleOrder - a.roleOrder);\n }\n\n initializecorporateHierarchy(value: ClientHierarchy, index: number) {\n let isMaxLevel = false;\n let hideEditIcon = false;\n let hideTitleIcon = false;\n let fontIcon = 'fa-building';\n let fontSet = 'fa';\n\n if (value.roleOrder === this.maxOrder) {\n isMaxLevel = true;\n hideEditIcon = true;\n fontIcon = 'fa-university';\n value.description = null;\n }\n\n if (value.roleOrder === this.minOrder) {\n hideEditIcon = true;\n fontIcon = 'fa-user';\n value.description = null;\n }\n\n let tileName = null;\n if (value.roleName) {\n tileName = this.reusableFunctions.toCamelCase(value.roleName);\n }\n\n this.corporateHierarchy.push({\n isChanged: false,\n reference: value.reference,\n roleOrder: value.roleOrder,\n tileName: tileName,\n isTopLevel: isMaxLevel,\n tileData: {\n roleName: tileName,\n description: value.description,\n roleOrder: value.roleOrder,\n reference: value.reference,\n roleNameOriginal: tileName ? tileName.slice(0) : null,\n isActiveOriginal: value.isActive,\n descriptionOriginal: value.description ? value.description.slice(0) : null,\n roleOrderOriginal: value.roleOrder,\n isActive: value.isActive,\n isRoleInUse: value.isRoleInUse,\n },\n hideEditIcon: hideEditIcon,\n hideTitleIcon: hideTitleIcon,\n fontIcon: fontIcon,\n fontSet: fontSet,\n });\n }\n\n setButtonDissableStatus() {\n for (let hierarchy of this.corporateHierarchy) {\n let tile = hierarchy.tileData;\n if (this.isDataDifferent(tile)) {\n this.isSideSheetSaveBtnDisabled = false;\n } else {\n this.isSideSheetSaveBtnDisabled = true;\n }\n }\n }\n\n isDataDifferent(tile: ClientHierarchy): boolean {\n if (\n (tile.roleName != tile.roleNameOriginal ||\n tile.description != tile.descriptionOriginal ||\n tile.roleOrder != tile.roleOrderOriginal ||\n tile.isActive != tile.isActiveOriginal) &&\n tile.roleName &&\n tile.roleOrder\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n hideAllNewAddButton() {\n const activeLevelList = this.corporateHierarchy.filter(\n (item) => item.tileData.isActive === true\n );\n\n let isAllBtnHidden = false;\n if (this.maxOrder === activeLevelList.length) {\n isAllBtnHidden = true;\n this.isSideSheetSaveBtnDisabled = true;\n }\n\n for (let hierarchy of activeLevelList) {\n const tile = this.corporateHierarchy.find(\n (item) => item.reference === hierarchy.reference\n );\n\n tile.hideAddButton = false;\n tile.hideCancelButton = false;\n\n if (isAllBtnHidden) {\n tile.hideAddButton = true;\n tile.hideCancelButton = true;\n }\n }\n }\n\n openDialog() {\n this.isEditHierarchyDialogClose = false;\n this.isMainButtonSetHidden = true;\n this.sideSheetOpenStatus.emit(true);\n }\n\n closeDialog() {\n this.isEditHierarchyDialogClose = true;\n\n if (!this.permenatlyHideMainButtonSet) {\n this.isMainButtonSetHidden = false;\n }\n this.sideSheetOpenStatus.emit(false);\n }\n\n openEditSidesheet(event, tile: TileData) {\n this.sideSheetTitle = 'Edit Hierarchy Level';\n this.isDeleteButtonHidden = this.doesLevelContainEntities(tile.roleOrder);\n this.openDialog();\n this.setActiveStatusForCurrentTiles(tile.tileData);\n this.closeNotUsingNewLevelTiles(tile.tileData, false);\n this.setDataForEdit(tile.tileData);\n this.isDeleteButtonHidden = this.doesLevelContainEntities(tile.roleOrder);\n this.setEditSaveButtonDissableStatus(this.hierarchyData);\n this.showHiddenAddButton();\n }\n doesLevelContainEntities(roleOrder: number): boolean {\n return this.entities.findIndex((x) => x.levelOrder === roleOrder) !== -1;\n }\n\n resetFormData(ref) {\n this.hierarchyData = {\n roleName: null,\n description: null,\n roleOrder: -1,\n reference: ref,\n roleNameOriginal: null,\n descriptionOriginal: null,\n roleOrderOriginal: -1,\n isActive: false,\n isActiveOriginal: false,\n isRoleInUse: true,\n };\n }\n\n setDataForEdit(tile: ClientHierarchy) {\n this.resetFormData(null);\n this.hierarchyData = Object.assign(\n {},\n this.corporateHierarchy.find((item) => item.reference === tile.reference).tileData\n );\n }\n\n openNewEntrySidesheet(tile: ClientHierarchy) {\n this.sideSheetTitle = 'Add New Hierarchy Level';\n this.resetFormData(null);\n this.hierarchyData.roleOrder = tile.roleOrder + 1;\n this.openDialog();\n }\n\n addNewButton(event, tile: TileData) {\n this.addTileposition = tile.roleOrder;\n this.openNewEntrySidesheet(tile.tileData);\n this.displayNewEntryTile(tile.tileData);\n this.resetEditActiveStatus();\n this.closeNotUsingNewLevelTiles(tile.tileData, true);\n this.isDeleteButtonHidden = true;\n this.hideAllNewAddButton();\n this.hideAddButton();\n }\n\n showHiddenAddButton() {\n const addButtonToShow = this.corporateHierarchy.find(\n (item) => item.roleOrder === this.addTileposition\n );\n const activeHierarchies = this.corporateHierarchy.filter(\n (item) => item.tileData.isActive === true\n );\n if (addButtonToShow && this.maxOrder != activeHierarchies.length) {\n addButtonToShow.hideAddButton = false;\n }\n }\n\n hideAddButton() {\n const addButtonToShow = this.corporateHierarchy.find(\n (item) => item.roleOrder === this.addTileposition\n );\n if (addButtonToShow) {\n addButtonToShow.hideAddButton = true;\n }\n }\n\n cancelButton($event, tile: ClientHierarchy) {\n this.closeDialog();\n this.hideNewEntryTile(tile);\n this.resetEditActiveStatus();\n }\n\n resetEditActiveStatus() {\n for (let tile of this.corporateHierarchy) {\n tile.activeShadow = 'regular-shadow';\n }\n this.showHiddenAddButton();\n }\n\n closeNotUsingNewLevelTiles(currentTile: ClientHierarchy, isAddnewClicked = false) {\n let otherTiles = this.corporateHierarchy;\n if (isAddnewClicked) {\n otherTiles = this.corporateHierarchy.filter(\n (item) => item.roleOrder != currentTile.roleOrder\n );\n }\n\n for (let tile of otherTiles) {\n let addNewTile = document.getElementById('add-new-dialog-' + tile.roleOrder);\n if (addNewTile) {\n addNewTile.style.display = 'none';\n }\n }\n }\n\n setActiveStatusForCurrentTiles(currentTile: ClientHierarchy) {\n currentTile.activeShadow = 'active-shadow';\n let otherTiles = this.corporateHierarchy.filter(\n (item) => item.roleOrder != currentTile.roleOrder\n );\n\n for (let tile of otherTiles) {\n tile.activeShadow = 'regular-shadow';\n }\n }\n\n displayNewEntryTile(tile: ClientHierarchy) {\n document.getElementById('add-new-dialog-' + tile.roleOrder).style.display = 'block';\n }\n\n hideNewEntryTile(tile: ClientHierarchy) {\n document.getElementById('add-new-dialog-' + tile.roleOrder).style.display = 'none';\n }\n\n getUpdatedHierarchiesAndSaveToDatabase() {\n let changedCorpHierarchy: ClientHierarchyMain[] = [];\n let changedCorpHierarchyAll: ClientHierarchy[] = [];\n\n for (let tile of this.corporateHierarchy) {\n if (this.isDataDifferent(tile.tileData)) {\n changedCorpHierarchy.push(\n Object.assign(\n {},\n {\n reference: tile.tileData.reference,\n roleOrder: tile.tileData.roleOrder,\n roleName: tile.tileData.roleName,\n description: tile.tileData.description,\n isActive: tile.tileData.isActive,\n }\n )\n );\n\n changedCorpHierarchyAll.push(Object.assign({}, tile.tileData));\n }\n }\n\n if (changedCorpHierarchy.length > 0) {\n this.saveUpdatedHierarchies(changedCorpHierarchy, changedCorpHierarchyAll);\n }\n }\n\n saveUpdatedHierarchies(\n changedCorpHierarchy: ClientHierarchyMain[],\n changedCorpHierarchyAll: ClientHierarchy[]\n ) {\n let isUpdated: boolean;\n this._hierarchyService.updateHierarchyLevels(changedCorpHierarchy).subscribe(\n (data) => {\n if (data > 0) {\n isUpdated = true;\n } else {\n isUpdated = false;\n }\n this.getEntities();\n this.updateOriginalData(isUpdated, changedCorpHierarchyAll);\n this.showMessage('', isUpdated);\n },\n (err) => console.log(err)\n );\n }\n\n cancelAllChanges(event) {\n this.cancelSidesheetChanges(event);\n }\n\n getNewReference(): number {\n let newreference: number;\n this.corporateHierarchy.forEach((level) => {\n if (\n level.reference < this.maxOrder &&\n level.reference > 1 &&\n !level.tileData.isActive &&\n !level.tileData.isRoleInUse\n ) {\n newreference = level.reference;\n }\n });\n return newreference;\n }\n\n checkForDuplicatesAndUpdate(tileDataToCheckDuplicate: TileData[], roleOrderToCheck: number) {\n if (roleOrderToCheck > this.minOrder && roleOrderToCheck < this.maxOrder) {\n let duplicateHierarchy = tileDataToCheckDuplicate.find(\n (item) => item.roleOrder === roleOrderToCheck\n );\n // TODO: Add codes to update, if more than one duplicate roleorders are present\n if (duplicateHierarchy) {\n let updatedHierarchy = this.copyOfCorporateHierarchy.find(\n (item) => item.reference === duplicateHierarchy.reference\n );\n\n let nextRoleOrder = roleOrderToCheck + 1;\n\n if (nextRoleOrder < this.maxOrder && nextRoleOrder > this.minOrder) {\n updatedHierarchy.roleOrder = nextRoleOrder;\n updatedHierarchy.tileData.roleOrder = nextRoleOrder;\n this.adjustAndReorder(updatedHierarchy);\n }\n }\n }\n }\n\n adjustAndReorder(updatedHierarchy: TileData) {\n let updatedReference = updatedHierarchy.reference;\n let updatedRoleOrder = updatedHierarchy.roleOrder;\n let tileDataToCheckDuplicate = this.copyOfCorporateHierarchy.filter(\n (item) => item.reference != updatedReference\n );\n\n this.checkForDuplicatesAndUpdate(tileDataToCheckDuplicate, updatedRoleOrder);\n }\n\n updateOriginalData(isUpdated: boolean, tiles: ClientHierarchy[]) {\n if (isUpdated) {\n this.corporateHierarchy = this.copyOfCorporateHierarchy;\n\n for (let tile of tiles) {\n let hierarchy = this.corporateHierarchy.find(\n (item) => item.reference === tile.reference\n );\n hierarchy.tileData.isActive = true;\n hierarchy.isChanged = false;\n hierarchy.tileData.roleNameOriginal = tile.roleName ? tile.roleName.slice(0) : null;\n hierarchy.tileData.roleOrderOriginal = tile.roleOrder;\n hierarchy.tileData.descriptionOriginal = tile.description\n ? tile.description.slice(0)\n : null;\n }\n\n this.hideAllNewAddButton();\n this.emitHierarchyLevels();\n }\n }\n\n addChangesToTiles(event) {\n this.copyOfCorporateHierarchy = this.corporateHierarchy.filter(\n (item) => item.roleOrder != -1\n );\n\n if (!this.hierarchyData.reference) {\n this.hierarchyData.reference = this.getNewReference();\n }\n\n let corporateHierarchyLevel = this.copyOfCorporateHierarchy.find(\n (item) => item.reference === this.hierarchyData.reference\n );\n\n this.copyOfCorporateHierarchy.forEach((hierarchy) => {\n hierarchy.isChanged = false;\n });\n\n if (corporateHierarchyLevel) {\n corporateHierarchyLevel.reference = this.hierarchyData.reference;\n (corporateHierarchyLevel.isChanged = true),\n (corporateHierarchyLevel.roleOrder = this.hierarchyData.roleOrder);\n corporateHierarchyLevel.tileName = this.hierarchyData.roleName;\n corporateHierarchyLevel.tileData.reference = this.hierarchyData.reference;\n corporateHierarchyLevel.tileData.roleName = this.hierarchyData.roleName;\n corporateHierarchyLevel.tileData.roleOrder = this.hierarchyData.roleOrder;\n corporateHierarchyLevel.tileData.description = this.hierarchyData.description;\n corporateHierarchyLevel.tileData.isActive = true;\n } else {\n this.copyOfCorporateHierarchy.push({\n roleOrder: this.hierarchyData.roleOrder,\n hideEditIcon: false,\n hideTitleIcon: false,\n isChanged: true,\n tileName: this.hierarchyData.roleName,\n fontIcon: 'fa-building',\n fontSet: 'fa',\n tileData: {\n roleName: this.hierarchyData.roleName,\n roleOrder: this.hierarchyData.roleOrder,\n description: this.hierarchyData.description,\n reference: this.hierarchyData.reference,\n isActive: true,\n isRoleInUse: false,\n },\n reference: this.hierarchyData.reference,\n });\n }\n\n let updatedHierarchy = this.copyOfCorporateHierarchy.find(\n (item) => item.isChanged === true\n );\n this.adjustAndReorder(updatedHierarchy);\n this.sortcorporateHierarchy(this.copyOfCorporateHierarchy);\n this.closeNotUsingNewLevelTiles({} as ClientHierarchy, false);\n this.hideAllNewAddButton();\n this.resetFormData(null);\n this.closeDialog();\n\n if (this.permenatlyHideMainButtonSet) {\n this.getUpdatedHierarchiesAndSaveToDatabase();\n }\n }\n\n cancelSidesheetChanges(event) {\n this.resetFormData(null);\n this.closeDialog();\n this.setActiveStatusForCurrentTiles({} as ClientHierarchy);\n this.closeNotUsingNewLevelTiles({} as ClientHierarchy, false);\n this.showHiddenAddButton();\n }\n\n deleteSelectedLevel(event) {\n if (event === 'accept') {\n this._hierarchyService.deleteHierarchyLevels(this.hierarchyData).subscribe((result) => {\n if (result > 0 || result[0] > 0) {\n let deletedLevel = this.corporateHierarchy.find(\n (item) => item.reference === this.hierarchyData.reference\n );\n deletedLevel.tileData.isActive = false;\n deletedLevel.isChanged = false;\n this.activeCustomRoleNames.splice(\n this.activeCustomRoleNames.findIndex(\n (x) => x.toLowerCase() === this.hierarchyData.roleName.toLowerCase()\n ),\n 1\n );\n this.resetFormData(null);\n this.closeDialog();\n this.hideAllNewAddButton();\n this.corporateHierarchy = [];\n this.getCorporateHierarchy();\n this.getEntities();\n this.toastService.success('Level deleted.');\n } else {\n this.toastService.warning('Problem deleting level.');\n }\n });\n }\n }\n\n showMessage(msgType: string, isSuccess: boolean) {\n if (isSuccess) {\n this.toastService.success('Successfully saved!');\n this.emitHierarchyLevels();\n } else {\n this.toastService.warning('Problem updating levels.', {\n timeout: 0,\n });\n }\n }\n\n dataChanged() {\n this.setEditSaveButtonDissableStatus(this.hierarchyData);\n }\n\n setEditSaveButtonDissableStatus(tileData: ClientHierarchy) {\n if (this.isDataDifferent(tileData) && this.isRoleNameValid(tileData.roleName)) {\n this.isSideSheetSaveBtnDisabled = false;\n } else {\n this.isSideSheetSaveBtnDisabled = true;\n }\n }\n isRoleNameValid(roleName: string) {\n if (roleName.length < 3) {\n this.isRoleNameTooShort = true;\n return false;\n } else {\n this.isRoleNameTooShort = false;\n }\n if (!this.isRoleNameUnique(roleName)) {\n this.isRoleNameInUse = true;\n return false;\n } else {\n this.isRoleNameInUse = false;\n }\n return true;\n }\n isRoleNameUnique(roleName: string) {\n return (\n this.activeCustomRoleNames.findIndex(\n (name) => name.toLowerCase() === roleName.toLowerCase()\n ) === -1\n );\n }\n\n saveNewHieararchyToDatabase(event) {}\n}\n","\n\n\n
\n\n\n
Organizational Hierarchy Structure Setup
\n \n \n
\n","import { Component, OnInit, ViewEncapsulation, HostListener } from '@angular/core';\nimport { ClientHierarchy, TileData } from '../../../shared/interfaces/user-location';\nimport { HierarchyService } from '../../services/hierarchy.service';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { EmployeeService } from '../../../shared/services/employee.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { HierarchyEntity } from '../../interfaces/hierarchy-data';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { SortDescriptor, orderBy, filterBy } from '@progress/kendo-data-query';\nimport { Employee } from '../../../shared/interfaces/client-data';\nimport { forkJoin } from 'rxjs';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\n\ninterface TabList {\n id: number;\n name: string;\n icon?: string;\n disabled: boolean;\n activeTabIndex: number;\n roleOrder: number;\n}\n\ninterface TabHiererchy {\n roleOrder: string;\n tileName: string;\n reference: number;\n isActive: boolean;\n}\n\n@Component({\n selector: 'hierarchy-config',\n templateUrl: './hierarchy-config.component.html',\n styleUrls: ['./hierarchy-config.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class HierarchyConfigComponent implements OnInit {\n shouldParentBeCorporateEntity: boolean;\n tabBarItems: TabList[];\n corporateHierarchy: TabHiererchy[];\n isMainSaveBtnDisabled: boolean;\n isNextBtnDisabled: boolean;\n isSaveBtnDisabled: boolean;\n isCancelBtnDisabled: boolean;\n selectedTab: number;\n showHierarchySetup: boolean;\n isButtonSetHidden: boolean;\n isLevelSetUpButtonSetHidden: boolean = true;\n entities: HierarchyEntity[];\n unknownEntities: HierarchyEntity[];\n entitySearchTerm: string;\n parentSearchTerm: string;\n selectedEntity: HierarchyEntity;\n filteredEntities: HierarchyEntity[];\n filteredParents: HierarchyEntity[];\n id: string;\n entityGridView: GridDataResult;\n parentGridView: GridDataResult;\n info = true;\n type: 'numeric' | 'input' = 'input';\n pageSizes = true;\n previousNext = true;\n pageSize = 10;\n skip = 0;\n mySelection: number[] = [];\n entitySort: SortDescriptor[] = [{ field: 'levelOrder', dir: 'desc' }];\n stepNumber: number;\n createView: boolean;\n editView: boolean;\n addOrEditEntityForm: UntypedFormGroup;\n possibleOwners: Employee[];\n employeeSearchTerm: string;\n employees: Employee[];\n selectedEmployee: Employee;\n filteredEmployees: Employee[];\n employeeGridView: GridDataResult;\n employeeSort: SortDescriptor[] = [{ field: 'lastName', dir: 'asc' }];\n levels: ClientHierarchy[];\n levelLabel: string;\n showCsvUploadDialog: boolean;\n fileMaxSizeInMB: number;\n fileMaxCount: number;\n uploadType: string;\n corporateEntity: HierarchyEntity;\n onUnknownTab: boolean;\n loading: boolean = false;\n activeCustomRoleNames: string[];\n\n constructor(\n private _hierarchyService: HierarchyService,\n private employeeService: EmployeeService,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private toastService: ToastService\n ) {}\n\n ngOnInit() {\n this.selectedTab = 0;\n this.corporateHierarchy = [];\n this.showHierarchySetup = true;\n this.isButtonSetHidden = false;\n this.createView = false;\n this.editView = false;\n this.entitySearchTerm = '';\n this.parentSearchTerm = '';\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n if (this.impersonationService.isImpersonatingClient()) {\n clientShortName = this.impersonationService.impersonateClient;\n }\n this.loadLevelsAndEntities();\n this.showCsvUploadDialog = false;\n this.fileMaxSizeInMB = 500;\n this.fileMaxCount = 1;\n this.uploadType = 'CSV';\n this.getEmployeesForClient();\n }\n\n setHierarchyLevels(hierarchies: TileData[]) {\n if (hierarchies) {\n this.corporateHierarchy = [];\n for (let hierarchy of hierarchies) {\n this.initializecorporateHierarchy(hierarchy.tileData);\n }\n this.reloadLevels();\n this.reloadEntities();\n }\n }\n\n setCorporateEntity(): void {\n this.corporateEntity = this.entities.find((x) => x.levelOrder === 10);\n }\n\n setParentToCorporateEntity(): void {\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('parentName')\n .setValue(this.corporateEntity.name);\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('parentKey')\n .setValue(this.corporateEntity.hierarchyKey);\n }\n\n isNextLevelUpCorporate(): boolean {\n this.shouldParentBeCorporateEntity =\n this.levels.filter((level) => +level.roleOrder > this.getRoleOrder()).length === 1;\n return this.shouldParentBeCorporateEntity;\n }\n\n getRoleOrder(): number {\n return this.tabBarItems[this.selectedTab].roleOrder;\n }\n\n setTopTabBarItems() {\n this.tabBarItems = [];\n if (this.levels && this.levels.length) {\n this.levels.forEach((level, index) => {\n let name = level.roleName;\n\n if (level.isActive && level.roleName.toLowerCase() !== 'employee') {\n if (level.roleName.toLowerCase() === 'corporate') {\n name = 'Level Setup';\n }\n this.tabBarItems.push({\n name: name,\n id: index,\n roleOrder: +level.roleOrder,\n disabled: false,\n activeTabIndex: index,\n });\n }\n });\n }\n }\n\n log() {\n console.log(this.addOrEditEntityForm);\n }\n\n addUnknownTabIfNeeded(): void {\n if (this.unknownEntities.length) {\n this.tabBarItems.push({\n name: 'Unknown',\n id: this.tabBarItems[this.tabBarItems.length - 1].activeTabIndex + 1,\n roleOrder: -1,\n disabled: false,\n activeTabIndex: this.tabBarItems[this.tabBarItems.length - 1].activeTabIndex + 1,\n });\n }\n }\n\n initializecorporateHierarchy(value: ClientHierarchy) {\n this.corporateHierarchy.push({\n reference: value.reference,\n roleOrder: value.roleOrder.toString(),\n tileName: value.roleName,\n isActive: value.isActive,\n });\n }\n\n setNextButtonDisableStatus() {\n if (this.selectedTab === this.tabBarItems.length - 1) {\n this.isNextBtnDisabled = true;\n } else {\n this.isNextBtnDisabled = false;\n }\n }\n\n setSaveButtonDisableStatus() {\n if (this.selectedTab === 0) {\n this.isSaveBtnDisabled = true;\n this.isCancelBtnDisabled = true;\n } else {\n this.isSaveBtnDisabled = false;\n this.isCancelBtnDisabled = false;\n }\n }\n\n setCancelButtonDisableStatus() {\n if (this.selectedTab === 0) {\n this.isSaveBtnDisabled = true;\n } else {\n this.isSaveBtnDisabled = false;\n }\n }\n\n sideSheetOpenStatus(sideSheetStatus: boolean) {\n if (sideSheetStatus) {\n this.isButtonSetHidden = true;\n } else {\n this.isButtonSetHidden = false;\n }\n }\n\n getEmployeesForClient(): void {\n this.employeeService.getAllEmployees().subscribe(\n (employees) => {\n this.employees = employees;\n this.loadEmployeesIntoGridView(true);\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n employeeSelectionChangeHandler(event: any): void {\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('ownerIdentifier')\n .setValue(event.selectedRows[0].dataItem.primaryIdentifier);\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('owner')\n .setValue(event.selectedRows[0].dataItem.lfName);\n this.employeeSearchTerm = '';\n this.addOrEditEntityForm.markAsDirty();\n }\n\n loadEmployeesIntoGridView(showAll: boolean = false) {\n if (showAll) {\n this.skip = 0;\n }\n let orderedData = orderBy(\n this.filteredEmployees && !showAll ? this.filteredEmployees : this.employees,\n this.employeeSort\n );\n this.employeeGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n filterEmployees(): void {\n if (this.employeeSearchTerm === '') {\n this.loadEmployeesIntoGridView(true);\n } else {\n this.parentSearchTerm = '';\n let searchTermTokens = this.employeeSearchTerm.split(' ');\n this.filteredEmployees = filterBy(this.employees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n this.filteredEmployees = filterBy(this.filteredEmployees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n let orderedData = orderBy(this.filteredEmployees, this.employeeSort);\n this.employeeGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n }\n\n get hierarchyIdentifier() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('hierarchyIdentifier');\n }\n\n get parentKey() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('parentKey');\n }\n\n get parentName() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('parentName');\n }\n\n get name() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('name');\n }\n\n get nameAbbreviated() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('nameAbbreviated');\n }\n\n get activeDate() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('activeDate');\n }\n\n get ownerIdentifier() {\n return this.addOrEditEntityForm.get('createOrEditEntityRequest').get('ownerIdentifier');\n }\n\n cancelEditCreateView(): void {\n this.createView = false;\n this.editView = false;\n this.selectedEntity = undefined;\n this.addOrEditEntityForm.reset();\n }\n\n filterEntities(greaterThanCurrentLevel: boolean = false): void {\n if (greaterThanCurrentLevel) {\n this.employeeSearchTerm = '';\n this.filteredEntities = filterBy(this.entities, {\n logic: 'and',\n filters: [\n {\n field: 'levelOrder',\n operator: 'gt',\n value: this.getRoleOrder(),\n ignoreCase: true,\n },\n ],\n });\n } else {\n if (this.onUnknownTab) {\n this.filteredEntities = this.unknownEntities;\n } else {\n this.filteredEntities = filterBy(this.entities, {\n logic: 'and',\n filters: [\n {\n field: 'levelOrder',\n operator: 'eq',\n value: this.getRoleOrder(),\n ignoreCase: true,\n },\n ],\n });\n }\n }\n if (this.filteredEntities.length === 0) {\n this.entityGridView = {\n data: this.filteredEntities,\n total: 0,\n };\n return;\n }\n if (this.entitySearchTerm === '' && !greaterThanCurrentLevel) {\n this.loadEntitiesIntoGridView();\n } else {\n this.filteredEntities = filterBy(this.filteredEntities, {\n logic: 'or',\n filters: [\n {\n field: 'hierarchyIdentifier',\n operator: 'startswith',\n value: greaterThanCurrentLevel\n ? this.parentSearchTerm\n : this.entitySearchTerm,\n ignoreCase: true,\n },\n {\n field: 'name',\n operator: 'contains',\n value: greaterThanCurrentLevel\n ? this.parentSearchTerm\n : this.entitySearchTerm,\n ignoreCase: true,\n },\n {\n field: 'nameAbbreviated',\n operator: 'contains',\n value: greaterThanCurrentLevel\n ? this.parentSearchTerm\n : this.entitySearchTerm,\n ignoreCase: true,\n },\n {\n field: 'hierarchyIdentifier',\n operator: 'contains',\n value: greaterThanCurrentLevel\n ? this.parentSearchTerm\n : this.entitySearchTerm,\n ignoreCase: true,\n },\n {\n field: 'owner',\n operator: 'contains',\n value: greaterThanCurrentLevel\n ? this.parentSearchTerm\n : this.entitySearchTerm,\n ignoreCase: true,\n },\n ],\n });\n let orderedData = orderBy(this.filteredEntities, this.entitySort);\n if (greaterThanCurrentLevel) {\n this.parentGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n } else {\n this.entityGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n }\n }\n\n entityPageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadEntitiesIntoGridView();\n }\n\n parentPageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadParentEntitiesIntoGridView();\n }\n\n loadEntitiesIntoGridView() {\n let orderedData = orderBy(this.filteredEntities, this.entitySort);\n this.entityGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n loadParentEntitiesIntoGridView() {\n let orderedData = orderBy(this.filteredEntities, this.entitySort);\n this.parentGridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n parentSelectionChangeHandler(event: any): void {\n let parent: HierarchyEntity = event.selectedRows[0].dataItem;\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('parentName')\n .setValue(parent.name);\n this.addOrEditEntityForm\n .get('createOrEditEntityRequest')\n .get('parentKey')\n .setValue(parent.hierarchyKey);\n this.parentSearchTerm = '';\n this.addOrEditEntityForm.markAsDirty();\n }\n\n reloadLevels() {\n this._hierarchyService.getCorporateAllHierarchy().subscribe((levels) => {\n this.levels = levels.filter((level) => level.isActive);\n this.setTopTabBarItems();\n });\n }\n\n reloadEntities() {\n this._hierarchyService.getHierarchyEntities().subscribe((entities) => {\n this.entities = entities;\n this.setCorporateEntity();\n if (this.tabBarItems && this.tabBarItems.length) {\n this.filterEntities();\n }\n });\n }\n\n loadLevelsAndEntities() {\n forkJoin(\n this._hierarchyService.getCorporateAllHierarchy(),\n this._hierarchyService.getHierarchyEntities()\n ).subscribe(([levels, entities]) => {\n this.levels = levels.filter((level) => level.isActive);\n this.activeCustomRoleNames = this.levels.map((level) => level.roleName);\n this.entities = entities;\n this.setCorporateEntity();\n this.separateOutUnknownEntities();\n this.setTopTabBarItems();\n this.addUnknownTabIfNeeded();\n });\n }\n\n separateOutUnknownEntities() {\n this.unknownEntities = this.entities.filter((entity) => {\n return (\n entity.activeDate === null &&\n entity.inActiveDate === null &&\n entity.parentName === this.corporateEntity.name\n );\n });\n }\n\n removeOwnerFromFormControl(): void {\n this.addOrEditEntityForm.get('createOrEditEntityRequest').get('ownerIdentifier').reset();\n this.addOrEditEntityForm.get('createOrEditEntityRequest').get('owner').reset();\n }\n\n // csv functions\n csvUploadSuccessHandler(event) {\n this.toastService.success('Branch CSV File uploaded.');\n this.showCsvUploadDialog = false;\n }\n csvUploadErrorHandler(event) {\n this.toastService.error('Branch CSV File uploaded with errors.');\n this.showCsvUploadDialog = false;\n }\n csvUploadFailHandler(event) {\n this.toastService.error('Branch CSV File upload failed.');\n this.showCsvUploadDialog = false;\n }\n csvValidationErrorHandler(event) {\n this.showCsvUploadDialog = false;\n if (event.error === 'FILE_MAX_SIZE') {\n this.toastService.error(\n 'Size of file exceeds limit of ' + this.fileMaxSizeInMB + 'MB.'\n );\n } else if (event.error === 'FILE_MAX_COUNT') {\n this.toastService.error('Number of files exceeds limit of ' + this.fileMaxCount + '.');\n } else if (event.error === 'UPLOAD_TYPE') {\n this.toastService.error('File is not of type: ' + this.uploadType + '.');\n } else if (event.error === 'EXTENSIONS') {\n this.toastService.error('File is not of type: ' + this.uploadType + '.');\n } else {\n this.toastService.error('Error with file. Please check file and try again.');\n }\n }\n switchToCsvUploadView() {\n this.showCsvUploadDialog = true;\n }\n @HostListener('window:keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.keyCode === 27) {\n if (this.showCsvUploadDialog) {\n this.showCsvUploadDialog = false;\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClientSubscriptionService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/clientsubscription').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n getSubscriptionTypes(): Observable {\n return this.http.get(`${this._url}/type`);\n }\n\n getSubscriptionPage(key: number): Observable {\n const params = new HttpParams().set('clientSubscriptionTypeKey', key.toString());\n return this.http.get(`${this._url}/page`, {\n params: params,\n });\n }\n\n updateSubscription(modules: ClientSubscriptionForm[]): Observable {\n let data = {\n pages: modules,\n };\n\n return this.http.post(this._url + '/update', data);\n }\n\n cloneSubscription(clientSubscriptionTypeKey: number, cloneKey: number): Observable {\n const data = {\n clientSubscriptionTypeKey: clientSubscriptionTypeKey,\n cloneKey: cloneKey,\n };\n\n return this.http.post(`${this._url}` + '/clone', data);\n }\n\n getClientSubscriptionDetail(): Observable {\n return this.http.get(`${this._url}/detail`);\n }\n\n updateClientSubscription(subs: ClientSubscriptionDetailForm[]): Observable {\n let data = {\n subscriptions: subs,\n };\n\n return this.http.post(this._url + '/client/update', data);\n }\n\n createType(name: string, description: string): Observable {\n const data = {\n name: name,\n description: description,\n };\n\n return this.http.post(`${this._url}`, data);\n }\n\n editType(\n clientSubscriptionTypeKey: number,\n name: string,\n description: string,\n isActive: boolean\n ): Observable {\n const data = {\n clientSubscriptionTypeKey: clientSubscriptionTypeKey,\n name: name,\n description: description,\n isActive: isActive,\n };\n\n return this.http.patch(`${this._url}`, data);\n }\n}\n\nexport interface ClientSubscriptionType {\n clientSubscriptionTypeKey: number;\n name: string;\n description: string;\n activeDate: Date;\n inActiveDate?: Date;\n isActive: boolean;\n lastMod?: Date;\n lastModUserKey?: number;\n nvLite: boolean;\n}\n\nexport interface ClientSubscriptionPage {\n applicationPageKey: number;\n name: string;\n routerURL: string;\n hasPage: boolean;\n applicationPageTypeKey: number;\n parentApplicationPageKey?: number;\n}\n\nexport interface ClientSubscriptionForm {\n applicationPageKey: number;\n clientSubscriptionTypeKey: number;\n isActive: boolean;\n}\n\nexport interface ClientSubscriptionDetail {\n clientKey: number;\n clientFullName: string;\n clientShortName: string;\n clientSubscriptionKey?: number;\n clientSubscriptionTypeKey?: number;\n updated?: boolean;\n}\n\nexport interface ClientSubscriptionDetailForm {\n clientKey: number;\n clientSubscriptionTypeKey: number;\n clientSubscriptionKey?: number;\n}\n","
\n \n  \n \n Save Access\n \n

\n
\n\n\n \n \n \n \n \n \n \n\n
\n \n \n \n \n \n \n \n \n\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport {\n ClientSubscriptionType,\n ClientSubscriptionService,\n ClientSubscriptionPage,\n ClientSubscriptionForm,\n} from '../../../services/client-subscription.service';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { ToastService } from '../../../../shared/services/toast.service';\n\n@Component({\n selector: 'app-client-subscription-page',\n templateUrl: './client-subscription-page.component.html',\n styleUrls: ['./client-subscription-page.component.scss'],\n})\nexport class ClientSubscriptionPageComponent implements OnInit {\n @Input() public type: ClientSubscriptionType;\n @Output() public edit = new EventEmitter();\n\n private data: ClientSubscriptionPage[];\n public gridView: GridDataResult;\n public updateData: ClientSubscriptionForm[];\n\n constructor(\n private clientSubscriptionService: ClientSubscriptionService,\n private toast: ToastService\n ) {}\n\n ngOnInit() {\n this.getData();\n }\n\n getData() {\n this.clientSubscriptionService\n .getSubscriptionPage(this.type.clientSubscriptionTypeKey)\n .subscribe((d) => {\n this.data = d;\n this.formatData();\n });\n }\n\n update() {\n this.clientSubscriptionService.updateSubscription(this.updateData).subscribe((data) => {\n this.toast.success(`${this.type.name} subscription has been updated.`);\n this.updateData = [];\n });\n }\n\n formatData() {\n let modules: Module[] = this.data\n .filter((page: ClientSubscriptionPage) => page.applicationPageTypeKey == 1)\n .map((mod: ClientSubscriptionPage) => ({\n page: mod,\n pages: this.data\n .filter(\n (subMod: ClientSubscriptionPage) =>\n subMod.applicationPageTypeKey == 2 &&\n subMod.parentApplicationPageKey == mod.applicationPageKey\n )\n .map((subMod: ClientSubscriptionPage) => ({\n page: subMod,\n pages: this.data.filter(\n (page: ClientSubscriptionPage) =>\n page.applicationPageTypeKey == 3 &&\n page.parentApplicationPageKey == subMod.applicationPageKey\n ),\n })),\n }));\n\n this.updateGrid(modules);\n }\n\n updateGrid(data) {\n this.gridView = {\n data: data,\n total: data.length,\n };\n }\n\n editSubscription() {\n this.edit.emit();\n }\n\n clickUpdateModule(page: ClientSubscriptionPage) {\n if (!this.updateData) {\n this.updateData = [];\n }\n\n let value = page.hasPage;\n let item = this.updateData.find((m) => m.applicationPageKey == page.applicationPageKey);\n if (item) {\n let itemIndex = this.updateData.indexOf(item);\n if (itemIndex >= 0) {\n this.updateData.splice(itemIndex, 1);\n }\n } else {\n this.updateData.push({\n applicationPageKey: page.applicationPageKey,\n clientSubscriptionTypeKey: this.type.clientSubscriptionTypeKey,\n isActive: value,\n });\n }\n }\n}\n\nexport interface Module {\n page: ClientSubscriptionPage;\n pages: ClientSubscriptionPage[] | Module[];\n}\n","\n
\n
Manage Enrollments
\n\n \n \n \n\n \n
\n \n \n   NEW\n \n
\n \n \n \n \n \n Yes\n No\n \n \n\n
\n \n
\n \n
\n\n \n
\n \n Save  0\">\n {{ updateData.length }} Changes\n \n  \n\n \n Search Clients\n\n \n search\n \n
\n \n \n \n\n \n \n \n \n {{ sub.name }}\n \n \n \n \n \n
\n
\n
\n\n\n
\n
\n
\n   New Enrollment\n \n \n \n
\n\n
\n\n

\n Create a new enrollment type group. Access can be modified once the group has been\n created.\n

\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n Enrollment name already taken, please choose another.\n
\n
*Required
\n
\n \n \n \n
\n \n \n
\n
\n \n \n
\n
\n\n 1\"\n style=\"color: red; font-size: 14px; padding-left: 16px\"\n >\n {{ errors }}\n

\n\n
\n\n
\n \n   \n \n Save  \n \n \n
\n
\n
\n\n\n
\n
\n
\n \n   Edit Enrollment\n \n \n \n
\n\n
\n\n

\n Modify an enrollment type group. Access can be modified once the group has been created.\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n\n \n
\n \n \n \n \n
\n \n \n
\n\n 1\"\n style=\"color: red; font-size: 14px; padding-left: 16px\"\n >\n {{ errors }}\n

\n
\n
\n \n   \n \n Save  \n \n \n
\n
\n
\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport {\n ClientSubscriptionService,\n ClientSubscriptionType,\n ClientSubscriptionDetail,\n ClientSubscriptionDetailForm,\n} from '../../services/client-subscription.service';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { filterBy } from '@progress/kendo-data-query';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-lba-subscriptions',\n templateUrl: './lba-subscriptions.component.html',\n styleUrls: ['./lba-subscriptions.component.scss'],\n})\nexport class LbaSubscriptionsComponent implements OnInit {\n subscriptionType: ClientSubscriptionType[];\n subscriptionPages: any[];\n clients: ClientSubscriptionDetail[];\n originalClients: ClientSubscriptionDetail[];\n search: string;\n\n gridView: GridDataResult;\n gridViewClients: GridDataResult;\n public updateData: ClientSubscriptionDetailForm[];\n\n tabs = [{ label: 'Enrollments' }, { label: 'Client Assignment' }];\n\n tab: number = 0;\n\n pageSizes = true;\n previousNext = true;\n pageSize = 10;\n skip = 0;\n info = true;\n\n errors: string = null;\n addMenuOpen: boolean = false;\n editMenuOpen: boolean = false;\n newSubscriptionModel = null;\n editSubscriptionModel = null;\n\n /* Subscription Dropdown */\n selectedSubscription: ClientSubscriptionType[];\n subscriptionListSettings: any;\n cloneFlag: boolean;\n hasName: boolean = false;\n\n submitting: boolean = false;\n\n constructor(\n private clientSubscriptionService: ClientSubscriptionService,\n private toast: ToastService\n ) {}\n\n ngOnInit() {\n this.cloneFlag = false;\n this.getTypes();\n // -- Settings for Subscription dropdown\n this.subscriptionListSettings = {\n singleSelection: true,\n text: 'Select Enrollment',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'name',\n primaryKey: 'subscriptionIdentifier',\n enableFilterSelectAll: false,\n };\n }\n\n getTypes() {\n this.clientSubscriptionService.getSubscriptionTypes().subscribe((data) => {\n this.subscriptionType = data;\n this.gridView = {\n data: this.subscriptionType,\n total: this.subscriptionType.length,\n };\n });\n }\n\n getClients() {\n this.clientSubscriptionService.getClientSubscriptionDetail().subscribe((data) => {\n this.clients = data;\n this.originalClients = JSON.parse(JSON.stringify(data));\n this.loadClientsIntoGridView();\n });\n }\n\n filterSearch() {\n if (this.search === '') {\n this.loadClientsIntoGridView(true);\n } else {\n let filteredClients = filterBy(this.clients, {\n logic: 'or',\n filters: [\n {\n field: 'clientFullName',\n operator: 'contains',\n value: this.search,\n ignoreCase: true,\n },\n ],\n });\n\n this.gridViewClients = {\n data: filteredClients.slice(this.skip, this.skip + this.pageSize),\n total: filteredClients.length,\n };\n }\n }\n\n getPages(key: number) {\n this.clientSubscriptionService.getSubscriptionPage(key).subscribe((data) => {\n this.subscriptionPages = data;\n });\n }\n\n addSubscription() {\n let subName: string = this.newSubscriptionModel.name;\n let subDesc: string = this.newSubscriptionModel.description;\n let cloneKey: number = this.cloneFlag\n ? this.selectedSubscription[0].clientSubscriptionTypeKey\n : null;\n\n if (this.subscriptionType.some((e) => e.name == subName) == false) {\n this.hasName = false;\n this.submitting = true;\n this.clientSubscriptionService.createType(subName, subDesc).subscribe(\n (data) => {\n this.submitting = false;\n let clientSubscriptionTypeKey: number = data;\n if (this.cloneFlag && this.selectedSubscription) {\n this.cloneSubscription(clientSubscriptionTypeKey, cloneKey); // Clone all existing pages\n\n this.toggleAddMenu();\n this.getTypes();\n } else {\n this.toast.success('Enrollment type has been created.');\n this.toggleAddMenu();\n this.getTypes();\n }\n this.cloneFlag = false;\n },\n (error) => {\n this.submitting = false;\n this.cloneFlag = false;\n this.toast.warning('Something went wrong creating new enrollment type.');\n }\n );\n } else {\n this.hasName = true;\n }\n }\n\n cloneSubscription(clientSubscriptionTypeKey: number, cloneKey: number) {\n this.clientSubscriptionService\n .cloneSubscription(clientSubscriptionTypeKey, cloneKey)\n .subscribe(\n (data) => {\n this.toast.success('Enrollment type has been cloned.');\n },\n (error) => {\n this.toast.warning('Something went wrong cloning enrollment pages.');\n throw new Error(error);\n }\n );\n }\n\n /* Clone Multiselection */\n onItemSelect(event) {\n if (this.cloneFlag) {\n let count: number = 2;\n this.newSubscriptionModel.name = this.selectedSubscription[0].name + ' - (Clone)';\n\n while (\n this.subscriptionType.find((type) => type.name == this.newSubscriptionModel.name)\n ) {\n this.newSubscriptionModel.name =\n this.selectedSubscription[0].name + ' - (Clone ' + count.toString() + ')';\n count += 1;\n }\n\n this.newSubscriptionModel.description = this.selectedSubscription[0].description;\n }\n }\n\n editSubscription() {\n this.clientSubscriptionService\n .editType(\n this.editSubscriptionModel.clientSubscriptionTypeKey,\n this.editSubscriptionModel.name,\n this.editSubscriptionModel.description,\n this.editSubscriptionModel.isActive\n )\n .subscribe(\n (data) => {\n this.toast.success('Enrollment type has been updated.');\n this.toggleEditMenu();\n this.getTypes();\n },\n (error) => {\n this.toast.warning('Something went wrong updating enrollment type.');\n this.toggleEditMenu();\n }\n );\n }\n\n setNameField() {\n if (this.subscriptionType.some((type) => type.name == this.newSubscriptionModel.name)) {\n this.hasName = true;\n } else {\n this.hasName = false;\n }\n }\n\n logTab(event: MatTabChangeEvent): void {\n this.tab = event.index;\n\n if (this.tab === 1 && !this.gridViewClients) this.getClients();\n }\n\n clientPageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadClientsIntoGridView();\n }\n\n loadClientsIntoGridView(showAll: boolean = false) {\n if (showAll) {\n this.skip = 0;\n }\n\n let data = this.clients;\n\n this.gridViewClients = {\n data: data.slice(this.skip, this.skip + this.pageSize),\n total: data.length,\n };\n }\n\n updateSubscription(sub: ClientSubscriptionDetail) {\n if (!this.updateData) {\n this.updateData = [];\n }\n\n let value = sub.clientSubscriptionTypeKey;\n\n let item = this.originalClients.find((s) => s.clientKey === sub.clientKey);\n if (item.clientSubscriptionTypeKey === value) {\n let update = this.updateData.find((s) => s.clientKey === sub.clientKey);\n let itemIndex = this.updateData.indexOf(update);\n if (itemIndex >= 0) {\n this.updateData.splice(itemIndex, 1);\n }\n } else {\n let update = this.updateData.find((s) => s.clientKey === sub.clientKey);\n if (update) {\n update = {\n clientKey: sub.clientKey,\n clientSubscriptionTypeKey: value,\n clientSubscriptionKey: sub.clientSubscriptionKey\n ? sub.clientSubscriptionKey\n : null,\n };\n } else {\n this.updateData.push({\n clientKey: sub.clientKey,\n clientSubscriptionTypeKey: value,\n clientSubscriptionKey: sub.clientSubscriptionKey\n ? sub.clientSubscriptionKey\n : null,\n });\n }\n }\n }\n\n update() {\n this.clientSubscriptionService\n .updateClientSubscription(this.updateData)\n .subscribe((data) => {\n this.toast.success('Client enrollment assignment updated.');\n this.updateData = [];\n });\n }\n\n // Add Menu\n toggleAddMenu() {\n this.hasName = false;\n this.cloneFlag = false;\n this.newSubscriptionModel = {\n name: null,\n description: null,\n };\n\n this.addMenuOpen = !this.addMenuOpen;\n }\n\n toggleEditMenu(data?) {\n this.editMenuOpen = !this.editMenuOpen;\n\n if (this.editMenuOpen === false) {\n this.editSubscriptionModel = {\n clientSubscriptionTypeKey: null,\n name: null,\n description: null,\n isActive: true,\n };\n } else {\n this.editSubscriptionModel = {\n clientSubscriptionTypeKey: data.clientSubscriptionTypeKey,\n name: data.name,\n description: data.description,\n isActive: data.isActive,\n };\n }\n }\n}\n","\n {{ dialogTitle }} for the following {{ employeeText.toLowerCase() }}:\n\n\n \n \n \n \n \n \n \n \n\n\n \n \n {{ actionTextProper }} {{ userCount }} {{ userText.toLowerCase() }}\n \n
\n Also Send Welcome Email \n \n \n \n
\n
\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { ConfirmationAlertDialogComponent } from 'app/modules/settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { UserCreateModel } from 'app/modules/settings/interfaces/user';\nimport { UserPasswordResetRequest } from '../../classes/user-password-reset';\nimport { Employee } from '../../interfaces/client-data';\nimport { ToastService } from '../../services/toast.service';\nimport { UserService } from '../../services/user.service';\n\nimport { BulkUserActions } from 'app/modules/shared/classes/reusable-functions';\n\n@Component({\n selector: 'app-user-actions-dialog',\n templateUrl: './user-actions-dialog.component.html',\n styleUrls: ['./user-actions-dialog.component.scss'],\n})\nexport class UserActionsDialogComponent implements OnInit {\n action: BulkUserActions;\n employees: Employee[];\n welcomeEmail: boolean = false;\n userCount: number = 0;\n employeeText: string = 'Employees';\n userText: string = 'Users';\n actionText: string = 'create';\n actionTextProper: string = 'Create';\n actionTextPastTense: string = 'created';\n dialogTitle: string = '';\n showWelcomeEmailCheck: boolean = false;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n public router: Router,\n public userActionsDialog: MatDialogRef,\n private userService: UserService,\n public dialog: MatDialog,\n private toast: ToastService\n ) {}\n\n ngOnInit() {\n this.action = this.data.action;\n this.filterEmployees();\n }\n\n filterEmployees() {\n switch (this.action) {\n case BulkUserActions.ConvertFromEmployee:\n this.employees = this.data.employees.filter(\n (emp) => !emp.userGUID && !emp.terminationDate\n );\n for (let employee of this.employees) {\n employee.convertToUser = true;\n }\n this.showWelcomeEmailCheck = true;\n this.userCount = this.employees.length;\n\n this.updateLabels();\n break;\n case BulkUserActions.ResendWelcomeEmail:\n break;\n }\n }\n\n /* Convert employees to users in bulk */\n convertEmployees() {\n let message: string = `Are you sure you want to ${this.actionText} ${\n this.userCount\n } ${this.userText.toLowerCase()}?`;\n if (this.welcomeEmail) {\n message = `Are you sure you want to ${this.actionText} ${\n this.userCount\n } ${this.userText.toLowerCase()} and send them a welcome email?`;\n }\n\n const dialogRef = this.dialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: `${this.actionTextProper} ${this.userText}?`,\n message: message,\n },\n });\n\n this.userActionsDialog.close();\n\n dialogRef\n .afterClosed()\n .toPromise()\n .then((result) => {\n this.convertEmployeesAction(result);\n return result;\n });\n }\n\n convertEmployeesAction(result: any) {\n if (result === 'accept') {\n let employees: Employee[] = this.employees;\n let users: UserCreateModel[] = [];\n\n for (let employee of employees) {\n if (!employee.userGUID && employee.convertToUser) {\n let user: UserCreateModel = {\n loginEmail: employee.loginEmail,\n clientShortName: employee.clientShortName,\n employeeIdentifier: employee.primaryIdentifier,\n positionName: employee.positionName,\n };\n\n users.push(user);\n }\n }\n\n this.userService.createBulkUsers(users).subscribe((data) => {\n if (this.welcomeEmail) {\n let emails: UserPasswordResetRequest[] = [];\n for (let loginEmail of data) {\n emails.push({\n username: loginEmail,\n });\n }\n\n this.userService.sendWelcomeEmail(emails).subscribe(\n (data) => {\n this.toast.success(\n `Successfully ${\n this.actionTextPastTense\n } and sent welcome emails for ${\n this.userCount\n } ${this.userText.toLowerCase()}!`\n );\n this.reloadComponentOnEditAndSave();\n },\n (error) => {\n throw new Error(error);\n }\n );\n } else {\n this.toast.success(\n `Successfully ${this.actionTextPastTense} ${\n this.userCount\n } ${this.userText.toLowerCase()}!`\n );\n this.reloadComponentOnEditAndSave();\n }\n });\n } else if (result === 'close') {\n const actionDialogRef = this.dialog.open(UserActionsDialogComponent, {\n data: { employees: this.employees, action: BulkUserActions.ConvertFromEmployee },\n });\n }\n }\n\n labelClick(employeeToggle: any, emp: any) {\n employeeToggle.toggle();\n emp['convertToUser'] = !emp['convertToUser'];\n this.updateUserCount(employeeToggle);\n }\n\n checkChange(employeeToggle: any) {\n this.updateUserCount(employeeToggle);\n }\n\n updateLabels(): void {\n if (this.userCount == 1) {\n this.employeeText = 'Employee';\n this.userText = 'User';\n } else {\n this.employeeText = 'Employees';\n this.userText = 'Users';\n }\n\n switch (this.action) {\n case BulkUserActions.ConvertFromEmployee:\n this.actionText = 'create';\n this.actionTextProper = 'Create';\n this.actionTextPastTense = 'created';\n this.dialogTitle = `Create user ${this.userCount <= 1 ? 'account' : 'accounts'}`;\n break;\n }\n }\n\n updateUserCount(employee: any) {\n if (employee.checked) {\n this.userCount += 1;\n } else {\n this.userCount -= 1;\n }\n\n this.updateLabels();\n }\n\n reloadComponentOnEditAndSave() {\n let currentUrl = this.router.url;\n this.router.navigate(['']).then(() => {\n this.router.navigate([currentUrl]);\n });\n }\n}\n","\n \n
Employees
\n
\n
\n \n \n \n \n\n
\n \n \n
\n\n
\n \n \n
\n\n \n \n \n
\n\n
\n \n   CREATE USERS\n \n \n \n
\n
\n
\n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n
\n \n
\n
\n \n {{ selectedEmployee.firstName }} {{ selectedEmployee.lastName }}\n \n \n \n \n
\n
\n
\n {{ selectedEmployee.firstName }} {{ selectedEmployee.lastName }}\n
\n
\n {{ selectedEmployee.jobTitle }}\n
\n \n
\n
\n
First Name
\n
\n {{ selectedEmployee.firstName }}\n
\n
Last Name
\n
\n {{ selectedEmployee.lastName }}\n
\n
Email
\n
\n {{ selectedEmployee.loginEmail }}\n
\n
Location
\n
\n {{ selectedEmployee.location }}\n
\n
City
\n
{{ selectedEmployee.city }}
\n
State
\n
{{ selectedEmployee.state }}
\n
Employment Status
\n
\n {{ selectedEmployee.employeeStatus }}\n
\n
User Status
\n
\n {{ selectedEmployee.userStatus }}\n
\n
\n
\n \n EDIT\n \n \n
\n
\n
\n \n
\n","import { Component, OnInit, Input, HostListener } from '@angular/core';\nimport { formatDate } from '@angular/common';\n\nimport { EmployeeService } from '../../../shared/services/employee.service';\nimport { Employee, WelcomeEmailSendStatus } from '../../../shared/interfaces/client-data';\nimport { GridComponent, GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { SortDescriptor, orderBy, filterBy } from '@progress/kendo-data-query';\nimport { Observable } from 'rxjs';\nimport { ReusableFunctions, BulkUserActions } from '../../../shared/classes/reusable-functions';\nimport { HierarchyService } from '../../services/hierarchy.service';\nimport { HierarchyEntity } from '../../interfaces/hierarchy-data';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport { ActivatedRoute, NavigationStart, Router } from '@angular/router';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\n\nimport { UserActionsDialogComponent } from 'app/modules/shared/components/user-actions-dialog/user-actions-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserService } from 'app/modules/shared/services/user.service';\n\n@Component({\n selector: 'app-employee',\n templateUrl: './employee.component.html',\n styleUrls: ['./employee.component.scss'],\n})\nexport class EmployeeComponent implements OnInit {\n private eventsSubscription: any;\n @Input() events: Observable;\n gridView: GridDataResult;\n employeeSort: SortDescriptor[];\n pageSize = 10;\n skip = 0;\n type: 'numeric' | 'input' = 'input';\n employeeSearchTerm: string;\n filteredEmployees: Employee[];\n quickview: boolean;\n selectedEmployee: Employee;\n recordView: boolean;\n createEmployeeView: boolean;\n allEmployeesForClient: Employee[];\n hierarchies: HierarchyEntity[];\n editing: boolean;\n supervisors: Employee[];\n addEditOrViewOnly: string;\n loading: boolean;\n noEmployees: boolean;\n error: any;\n noDataType: NoDataTypes;\n exportFileName: string;\n exportData: Employee[];\n disableCreateUserButton: boolean = false;\n selectHeaderState = false;\n\n activeEmployeeFilter = 1; // Defaults to Active\n activeUserFilter = 0; // Defaults to All\n\n activeEmployeeFilterOptions = [\n { label: 'All', value: 0 },\n { label: 'Active', value: 1 },\n { label: 'Terminated', value: 2 },\n ];\n\n activeUserFilterOptions = [\n { label: 'All', value: 0 },\n { label: 'Active', value: 1 },\n { label: 'Inactive', value: 2 },\n ];\n\n constructor(\n private _employeeService: EmployeeService,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private _reusableFunctions: ReusableFunctions,\n private _hierarchyService: HierarchyService,\n private userService: UserService,\n private route: ActivatedRoute,\n private router: Router,\n private toast: ToastService,\n public dialog: MatDialog\n ) {\n this.getExcelExportData = this.getExcelExportData.bind(this);\n }\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Employees',\n inputSource: NoDataSourceType.table,\n };\n this.exportData = [];\n this.employeeSort = [{ field: 'lastName', dir: 'asc' }];\n this.quickview = false;\n this.recordView = false;\n this.addEditOrViewOnly = 'ViewOnly';\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n if (this.impersonationService.isImpersonatingClient()) {\n clientShortName = this.impersonationService.impersonateClient;\n }\n\n // Check router queryParams for employee id\n this.route.queryParams.subscribe((params) => {\n if (params && params['id']) {\n this.editing = false;\n this.loadEmployeesForClient(params['id']);\n } else {\n // if no queryParams exist, we must check normal route params\n this.route.params.subscribe((p) => {\n if (p && p['id']) {\n this.editing = false;\n this.loadEmployeesForClient(p['id']);\n } else {\n // If no query params and no route params, load all employees\n this.loadEmployeesForClient();\n }\n });\n }\n });\n\n this.eventsSubscription = this.events.subscribe(() =>\n this.employeesSubModuleClickedHandler()\n );\n this._hierarchyService.getHierarchyEntities().subscribe((entities) => {\n this.hierarchies = entities;\n });\n\n // Go back to employees table on back click\n this.router.events.subscribe((event: NavigationStart) => {\n if (event.navigationTrigger === 'popstate') {\n this.recordView = false;\n }\n });\n }\n\n handleCancelClicked() {\n this.recordView = false;\n this.quickview = false;\n this.createEmployeeView = false;\n this.addEditOrViewOnly = 'viewOnly';\n }\n\n loadEmployeesForClient(employeeIdToRetrieve: string = '') {\n this.loading = true;\n this.error = undefined;\n this.noEmployees = false;\n this._employeeService.getAllEmployees().subscribe(\n (employees) => {\n if (employees && employees.length) {\n this.noEmployees = false;\n this.allEmployeesForClient = employees;\n\n if (employeeIdToRetrieve) {\n this.selectedEmployee = this.allEmployeesForClient.find(\n (x) => x.primaryIdentifier === employeeIdToRetrieve\n );\n if (this.selectedEmployee) {\n this.supervisors = this.allEmployeesForClient.filter(\n (emp) => emp.isSupervisor\n );\n this.openRecordView();\n } else {\n this.toast.warning('Employee record not found.');\n this.loadEmployeesIntoGridView();\n }\n } else {\n this.supervisors = this.allEmployeesForClient.filter(\n (emp) => emp.isSupervisor\n );\n this.loadEmployeesIntoGridView();\n }\n } else {\n this.noEmployees = true;\n }\n this.loading = false;\n\n this.filterEmployees();\n },\n (error) => {\n this.error = error;\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n employeesSubModuleClickedHandler(): void {\n //treat like a cancel click\n this.handleCancelClicked();\n }\n\n employeeSelectionChangeHandler(event: any): void {\n if (event) {\n this.selectedEmployee = event.dataItem;\n\n let tmpHierarchy = this.hierarchies.find(\n (h) => h.hierarchyIdentifier === this.selectedEmployee.locationIdentifier\n );\n\n if (tmpHierarchy && tmpHierarchy.name) {\n this.selectedEmployee.location = tmpHierarchy.name;\n }\n\n this.showEmployeeQuickview();\n }\n }\n\n showEmployeeQuickview() {\n this.quickview = true;\n }\n\n closeEmployeeQuickview() {\n this.quickview = false;\n this.selectedEmployee = null;\n }\n\n employeePageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadEmployeesIntoGridView();\n }\n\n loadEmployeesIntoGridView() {\n let orderedData = orderBy(this.allEmployeesForClient, this.employeeSort);\n this.setGridView(orderedData);\n }\n\n switchToAddEmployeeView() {\n this.createEmployeeView = true;\n this.recordView = true;\n this.editing = true;\n this.addEditOrViewOnly = 'add';\n this.selectedEmployee = this.createEmptyEmployee();\n }\n\n createEmptyEmployee(): Employee {\n return {\n firstName: '',\n lastName: '',\n clientShortName: null,\n primaryIdentifier: '',\n firstNameProper: '',\n employeeStatus: '',\n createDate: null,\n mobilePhone: '',\n terminationDate: null,\n isSupervisor: null,\n supervisorIdentifier: '',\n city: '',\n state: '',\n fullTime: null,\n hireDate: null,\n inActiveDate: null,\n isUser: false,\n jobTitle: '',\n lfName: '',\n location: '',\n locationIdentifier: '',\n loginEmail: '',\n nmls: '',\n permissionSetName: '',\n positionName: '',\n userGUID: '',\n userStatus: '',\n lastLoginDate: null,\n welcomeEmailExpirationDate: null,\n sendEmail: false,\n welcomeEmailStatus: WelcomeEmailSendStatus.Unknown,\n isActive: true,\n onLeave: false,\n isSelected: false,\n };\n }\n\n filterEmployees(): void {\n if (this.loading) return;\n if (!this.allEmployeesForClient || this.allEmployeesForClient.length === 0) return;\n\n this.filteredEmployees = [...this.allEmployeesForClient];\n let searchTermTokens = [];\n\n if (this.activeEmployeeFilter !== 0) {\n this.filteredEmployees = this.filteredEmployees.filter((employee) =>\n this.activeEmployeeFilter === 1\n ? employee.employeeStatus == 'Active'\n : employee.employeeStatus !== 'Active'\n );\n }\n\n if (this.activeUserFilter !== 0) {\n this.filteredEmployees = this.filteredEmployees.filter((employee) =>\n this.activeUserFilter === 1 ? employee.isActive : !employee.isActive\n );\n }\n\n if (this.employeeSearchTerm && this.employeeSearchTerm.length > 0) {\n searchTermTokens = this.employeeSearchTerm.split(' ');\n\n this.filteredEmployees = filterBy(this.filteredEmployees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'primaryIdentifier',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'positionName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'location',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n }\n\n if (searchTermTokens.length > 1) {\n this.filteredEmployees = filterBy(this.filteredEmployees, {\n logic: 'or',\n filters: [\n {\n field: 'firstName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'lfName',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'positionName',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'location',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n let orderedData = orderBy(this.filteredEmployees, this.employeeSort);\n this.setGridView(orderedData);\n }\n\n openRecordView() {\n this.recordView = true;\n this.quickview = false;\n this.editing = false;\n this.addEditOrViewOnly = 'viewOnly';\n }\n\n @HostListener('window:keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.keyCode === 27) {\n //keyCode 27 is the escape key.\n if (this.quickview) {\n this.quickview = false;\n } else if (this.recordView) {\n this.recordView = false;\n }\n this.createEmployeeView = false;\n this.addEditOrViewOnly = 'viewOnly';\n }\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.employeeSort = sort;\n this.updateGrid();\n }\n\n updateGrid() {\n let orderedData = orderBy(\n this.filteredEmployees ? this.filteredEmployees : this.allEmployeesForClient,\n this.employeeSort\n );\n this.setGridView(orderedData);\n }\n\n setGridView(orderedData: Employee[]) {\n this.exportData = orderedData.map((obj) => ({\n ...obj,\n formattedHireDate: !obj.hireDate ? '' : formatDate(obj.hireDate, 'MM/dd/yyyy', 'en-US'),\n formattedTermDate: !obj.terminationDate\n ? ''\n : formatDate(obj.terminationDate, 'MM/dd/yyyy', 'en-US'),\n }));\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n handleEmployeeModEvent() {\n this.createEmployeeView = false;\n this.addEditOrViewOnly = 'viewOnly';\n this.loadEmployeesForClient();\n this.recordView = true;\n this.editing = false;\n }\n\n ngOnDestroy() {\n if (this.eventsSubscription) {\n this.eventsSubscription.unsubscribe();\n }\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName = 'nv-employees_' + dateTime + '_.xlsx';\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n\n async switchToConvertUsersView() {\n let convertList: Employee[] = [];\n this.disableCreateUserButton = true;\n try {\n for (const employee of this.allEmployeesForClient) {\n if (\n //this.currentSelection.includes(employee.primaryIdentifier) &&\n employee.isSelected &&\n !employee.userGUID\n ) {\n employee.actionToggle = employee.convertToUser;\n employee.convertToUser = true;\n // Check user table to prevent duplicate Users (email)\n const emailAddressCheck = {\n emailAddress: employee.loginEmail,\n };\n let data = await this.userService\n .isLoginEmailAvailable(emailAddressCheck)\n .toPromise();\n if (data) {\n convertList.push(employee);\n }\n }\n }\n } catch (err) {\n } finally {\n this.disableCreateUserButton = false;\n }\n\n /*this.allEmployeesForClient.filter((employee) =>\n this.currentSelection.includes(employee.primaryIdentifier)\n );\n */\n\n const convertDialogRef = this.dialog.open(UserActionsDialogComponent, {\n data: { employees: convertList, action: BulkUserActions.ConvertFromEmployee },\n });\n }\n\n onSelectHeaderChange() {\n this.allEmployeesForClient?.forEach((item) => {\n item.isSelected = this.selectHeaderState;\n });\n }\n}\n","\n

Users Assigned to {{ data.permission.name }}

\n \n \n \n \n \n \n \n {{ dataItem.defaultPermissions ? 'Yes' : 'No' }}\n \n \n \n \n
\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { UserPermissionsService } from 'app/modules/settings/services/user-permissions.service';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\n\n@Component({\n selector: 'app-permission-set-users',\n templateUrl: './permission-set-users.component.html',\n styleUrls: ['./permission-set-users.component.scss'],\n})\nexport class PermissionSetUsersComponent implements OnInit {\n grid: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n\n sort: SortDescriptor[] = [\n {\n field: 'lFName',\n dir: 'asc',\n },\n ];\n\n allResults: boolean = false;\n scrollable = 'scrollable';\n\n results: any[];\n loading = true;\n\n constructor(\n private permissionSetService: UserPermissionsService,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n\n ngOnInit(): void {\n if (this.data) {\n this.getData();\n }\n }\n\n getData() {\n this.permissionSetService.getUsersAssigned(this.data.permission.permissionSetKey).subscribe(\n (result) => {\n this.results = result;\n this.reloadGrid();\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n\n reloadGrid() {\n try {\n this.grid = {\n data: orderBy(this.results, this.sort),\n total: this.results.length,\n };\n } catch (e) {}\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.reloadGrid();\n }\n}\n","\n \n \n \n  \n {{ record.page.name }}\n \n \n\n \n \n \n \n \n {{ column.title }}\n \n \n \n
\n \n \n\n \n \n \n \n \n \n \n {{ dataItem.routerURL }}\n \n \n \n
\n
\n","import {\n Component,\n OnInit,\n ViewEncapsulation,\n Input,\n Output,\n EventEmitter,\n AfterViewInit,\n ApplicationRef,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport {\n PermissionSetPage,\n UserPermissionsService,\n PermissionSetUpdateForm,\n Module,\n} from '../../../services/user-permissions.service';\nimport { ToastService } from '../../../../shared/services/toast.service';\nimport { Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'app-permission-set-pages',\n templateUrl: './permission-set-pages.component.html',\n styleUrls: ['./permission-set-pages.component.scss'],\n})\nexport class PermissionSetPagesComponent implements OnInit {\n public gridView: GridDataResult;\n public data: PermissionSetPage[];\n\n constructor(\n private service: UserPermissionsService,\n private toast: ToastService,\n @Inject(DOCUMENT) document\n ) {}\n\n @Input() modules: Module[];\n @Output() updatePage = new EventEmitter();\n checkFlag: boolean = false;\n\n ngOnInit() {\n this.updateGrid(this.modules);\n }\n\n updateGrid(data) {\n let d = data.pages;\n this.checkFlag = true;\n for (let pg of d) {\n if (pg.page.hasPage == false) {\n this.checkFlag = false;\n }\n }\n this.gridView = {\n data: d,\n total: d.length,\n };\n }\n\n // Determines which pages need to be updated (IsActive: true/false)\n clickGrantAccess(page: PermissionSetPage, pages: PermissionSetPage[] | Module[]) {\n this.updatePage.emit({ page, pages });\n }\n\n checkAll() {\n var appName = 'app-permission-set-pages';\n var query = document.querySelector(appName);\n var elements = query.getElementsByTagName('input');\n var mainCheck = elements[0];\n // Skip the first element because it is the header checkbox\n if (mainCheck && mainCheck.checked == false) {\n for (let i = 1; i < elements.length; i++) {\n // If it is a checkbox and not a submodule\n if (\n elements[i].type == 'checkbox' &&\n elements[i].checked == true &&\n !elements[i].className.includes('subModule')\n ) {\n elements[i].click();\n }\n }\n } else if (mainCheck && mainCheck.checked == true) {\n for (let i = 1; i < elements.length; i++) {\n // If it is a checkbox and not a submodule\n if (\n elements[i].type == 'checkbox' &&\n elements[i].checked == false &&\n !elements[i].className.includes('subModule')\n ) {\n elements[i].click();\n }\n }\n }\n }\n\n editPermission() {}\n}\n","
\n
\n

\n Create permission sets that define what users have the ability to access in Nexus\n Vision.\n

\n
\n
\n
\n \n
\n
\n
\n\n
\n
\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameModulesPositionsUsers
\n
\n \n
\n
\n \n
\n {{ row.name }}\n \n \n {{ access }}\n | \n \n None\n \n {{ row.positions }}\n None\n \n {{\n row.numUsers\n }}\n 0\n \n 0 ? 'none' : '1px solid rgba(0, 0, 0, 0.12)'\n }\"\n [disabled]=\"row.numUsers > 0\"\n >\n Delete\n \n
\n\n
\n
\n
\n Add \n Edit \n Permission Set\n \n \n \n
\n\n
\n
\n
\n \n Permission Set Name\n \n \n
\n\n

\n \n \n \n \n \n \n \n\n
\n \n
\n
\n\n \n \n \n\n

\n\n \n
\n
\n
\n

\n \n Permission Set Name is empty\n

\n
\n
\n
\n
\n

\n \n Permission Set Name is too short\n

\n
\n
\n
\n
32\" class=\"field-incorrect\">\n

\n \n Permission Set Name is too long\n

\n
\n
\n
\n
\n

\n \n Permission Set Name is taken\n

\n
\n
\n
\n\n
\n \n   \n \n Save  \n \n \n
\n
\n
\n
\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport {\n UserPermissionsService,\n PermissionSetPage,\n Module,\n PermissionSetUpdateForm,\n} from '../../../services/user-permissions.service';\nimport { ToastService } from '../../../../shared/services/toast.service';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from 'app/modules/shared/interfaces/no-data';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmationAlertDialogComponent } from '../../confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { PermissionSetUsersComponent } from 'app/modules/settings/components/role-management/permission-set-users/permission-set-users.component';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n\n@Component({\n selector: 'app-permission-set-management',\n templateUrl: './permission-set-management.component.html',\n styleUrls: ['./permission-set-management.component.scss'],\n})\nexport class PermissionSetManagementComponent implements OnInit {\n data: any[];\n search = '';\n newPermissionMenu = false;\n isPageLoaded = false;\n\n permissionSetKey = 0;\n noDataType: NoDataTypes;\n\n // Permission Set Data\n pageData: PermissionSetPage[];\n moduleData: Module[];\n moduleDataOriginal: Module[];\n setName: string = null;\n hasName: boolean = false;\n\n //\n public updateData: PermissionSetUpdateForm[];\n public savingData = false;\n\n // Modules\n moduleTabs = [];\n moduleTab = 0;\n //\n\n smallScreen: boolean = false;\n\n constructor(\n private service: UserPermissionsService,\n private toast: ToastService,\n public Matdialog: MatDialog\n ) {}\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'permission sets',\n inputSource: NoDataSourceType.table,\n };\n\n this.onResize(null);\n this.getPermissionSets();\n this.getPageData(); // This should be moved somewhere else; Base case for new Permission Set\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event?) {\n let screenWidth: number = window.innerWidth;\n let maxWidth: number = 1300;\n\n if (screenWidth < maxWidth) {\n this.smallScreen = true;\n } else {\n this.smallScreen = false;\n }\n }\n\n /* Function hooked to Set Permission Name field */\n typeName() {\n // Check if permission name is taken\n this.service.getPermissionSetName(this.setName).subscribe((data) => {\n if (data.length > 0) {\n this.hasName = true;\n } else {\n this.hasName = false;\n }\n });\n }\n\n getPermissionSets() {\n this.service.getPermissionSets().subscribe((data) => {\n if (data) {\n this.data = data;\n this.isPageLoaded = true;\n }\n });\n }\n\n deletePermissionSet(set, permissionSetKey: number, permissionSetName: string) {\n const dialogRef = this.Matdialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Delete Permission Set ',\n message: `Are you sure you want to permanently delete this permission set? If you're not sure, please click Cancel.`,\n acceptTerm: 'DELETE',\n rejectTerm: 'CANCEL',\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'accept') {\n set.isDeleted = true;\n this.service.deletePermissionSet(permissionSetKey).subscribe(\n (data) => {\n this.toast.success('Permission Set ' + permissionSetName + ' deleted.');\n this.getPageData();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n });\n }\n\n getPageData() {\n this.service.getPermissionSetPages(this.permissionSetKey).subscribe((data) => {\n if (data) {\n this.pageData = data;\n this.formatPageData();\n }\n });\n }\n\n // Server returns 1D array of ApplicationPage records.\n // We need to format this into a 3D array by TypeKey: Modules -> Sub Modules -> Pages\n formatPageData() {\n const pages = JSON.parse(JSON.stringify(this.pageData));\n const modules: Module[] = pages\n .filter((page: PermissionSetPage) => page.applicationPageTypeKey == 1)\n .map((mod: PermissionSetPage) => ({\n page: mod,\n pages: pages\n .filter(\n (subMod: PermissionSetPage) =>\n subMod.applicationPageTypeKey == 2 &&\n subMod.parentApplicationPageKey == mod.applicationPageKey\n )\n .map((subMod: PermissionSetPage) => ({\n page: subMod,\n pages: pages.filter(\n (page: PermissionSetPage) =>\n page.applicationPageTypeKey == 3 &&\n page.parentApplicationPageKey == subMod.applicationPageKey\n ),\n })),\n }));\n\n this.moduleData = modules;\n this.moduleDataOriginal = JSON.parse(JSON.stringify(this.moduleData));\n\n this.moduleTabs = [];\n this.moduleData.forEach((m) => {\n this.moduleTabs.push({ label: m.page.name, icon: m.page.icon });\n });\n\n this.moduleTab = 0;\n }\n\n isActiveTab(module) {\n const tab = this.moduleTabs[this.moduleTab];\n return module === tab.label;\n }\n\n logTab(event: MatTabChangeEvent): void {\n this.moduleTab = event.index;\n }\n\n clickTab(tab: any) {\n let index: number = this.moduleTabs.findIndex((searchTab) => searchTab == tab);\n this.moduleTab = index;\n }\n\n //\n clickPermissionSet(set) {\n this.permissionSetKey = set.permissionSetKey;\n this.setName = set.name;\n this.editPermissionSet();\n }\n\n addNew() {\n this.newPermissionMenu = true;\n this.setName = null;\n this.permissionSetKey = 0;\n this.getPageData(); // This should be moved somewhere else; Base case for new Permission Set\n }\n\n editPermissionSet() {\n this.newPermissionMenu = true;\n this.getPageData();\n }\n\n exit() {\n this.updateData = [];\n this.newPermissionMenu = false;\n }\n\n // Determines which pages need to be updated (IsActive: true/false)\n // If parent module is selected, it will cascade down to children.\n // If any sub-module is selected, it will select parent, but not cascade down.\n clickGrantAccess(event) {\n const page = event.page;\n const pages = event.pages;\n\n if (!this.updateData) {\n this.updateData = [];\n }\n\n // Update selected row\n const newValue = !page.hasPage;\n page.hasPage = newValue;\n\n this.addOrRemoveFromUpdateData(page, newValue);\n\n // If module, iterate through sub module and sub module pages\n if (page.applicationPageTypeKey == 2) {\n const parentModule = this.moduleData.find(\n (parent) => parent.page.applicationPageKey === page.parentApplicationPageKey\n );\n if (newValue) {\n // Set parentModule == true\n this.addOrRemoveFromUpdateData(parentModule.page, true);\n } else {\n // Check other sub-modules\n const subModules = parentModule.pages;\n let anySubModulesEnabled = false;\n\n subModules.forEach((subModule) => {\n if (subModule.page.hasPage) {\n anySubModulesEnabled = true;\n }\n });\n\n if (!anySubModulesEnabled) {\n // set parent hasPage = false\n this.addOrRemoveFromUpdateData(parentModule.page, false);\n }\n }\n\n if (pages) {\n // Iterate through sub modules\n pages.forEach((p) => {\n if (p.hasPage !== newValue) {\n p.hasPage = newValue;\n this.addOrRemoveFromUpdateData(p, newValue);\n }\n });\n }\n }\n }\n\n // Determines if value is the same as original.\n // If different, add to update array. Else, remove from update array.\n addOrRemoveFromUpdateData(page: PermissionSetPage, val: boolean) {\n const originalItem = this.pageData.find(\n (p) => p.applicationPageKey == page.applicationPageKey\n );\n\n // If original value is equal to new value, remove this page from the updated data array.\n if (originalItem.hasPage == val) {\n const item = this.updateData.find(\n (p) => p.applicationPageKey == page.applicationPageKey\n );\n if (item) {\n const itemIndex = this.updateData.indexOf(item);\n this.updateData.splice(itemIndex, 1);\n }\n } else if (\n this.updateData.find(\n (u) => u.applicationPageKey == page.applicationPageKey && u.isActive == val\n )\n ) {\n // ignore so the same module isn't added twice!\n } else {\n // If original not equal to new, add it to the update array.\n this.updateData.push({\n permissionSetKey: this.permissionSetKey,\n applicationPageKey: page.applicationPageKey,\n isActive: val,\n });\n }\n }\n\n // Send array of updated pages to server.\n update() {\n this.savingData = true;\n\n this.service\n .updatePermissionSetPages(this.setName, this.permissionSetKey, this.updateData)\n .subscribe((data) => {\n this.exit();\n this.toast.success(`Permissions have been updated.`);\n this.updateData = [];\n this.data = null;\n this.getPermissionSets();\n this.savingData = false;\n });\n }\n\n showAssignedUsers(row) {\n let permissionUsersDiaglog = this.Matdialog.open(PermissionSetUsersComponent, {\n width: '1100px',\n data: {\n permission: row,\n },\n });\n }\n}\n","\n
\n
Position Management
\n\n \n \n \n
\n\n \n \n

\n Set the default permission set for each position by selecting the permission set\n from the Default Permission dropdown list. All positions must have a default\n permission set.\n

\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PositionCategoryClassJob TitlesDefault PermissionHierarchy Level\n Home Page\n
\n \n
{{ position.position }}{{ position.category }}{{ position.class }}\n {{\n position.jobTitles == null ? 0 : position.jobTitles.length\n }}\n \n \n \n \n {{ permission.name }}\n \n \n \n \n \n \n {{ role.roleName }}\n \n \n \n \n \n \n \n {{ page.module }} {{ page.name }}\n \n \n \n
\n
\n \n Save  \n \n \n   \n \n Cancel\n \n
\n
\n\n \n \n \n \n\n \n \n

\n Assign each Job Title to a default Position by selecting the Position from the\n dropdown list. Job Titles can only be assigned to one Position. For each Job Title,\n add its Job Code (optional) in the corresponding text box. By default, new employees\n will automatically be assigned to the default Position based on the employees’ job\n titles.\n

\n\n \n \n Find Job Title\n \n search\n \n\n
\n Position: \n \n
\n\n \n
\n\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0; else noJobFound\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Job TitleJob CodePosition
\n \n
{{ row.jobTitle }}\n \n \n \n \n {{ pos.position }}\n \n \n
\n Job Title Not Found\n
\n \n \n
\n","import { Component, OnInit, ViewEncapsulation, AfterViewInit } from '@angular/core';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport {\n EmployeePositionService,\n StaffPosition,\n EmployeePositionLookupForm,\n EmployeePositionMapping,\n} from '../../services/employee-position.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport {\n UserPermissionsService,\n PositionPermissionUpdate,\n PermissionSetPage,\n} from '../../services/user-permissions.service';\nimport { ConfirmationDialogComponent } from '../../../shared/components/confirmation-dialog/confirmation-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n\n@Component({\n selector: 'app-role-management',\n templateUrl: './role-management.component.html',\n styleUrls: ['./role-management.component.scss'],\n})\nexport class RoleManagementComponent implements OnInit, AfterViewInit {\n tabs = [\n { label: 'Position Configuration' },\n { label: 'Permissions' },\n { label: 'Job Title Mapping' },\n ];\n tab: number = 0;\n\n positionMappingData: EmployeePositionMapping[];\n originalPositionMappingData: EmployeePositionMapping[];\n positionTypes: StaffPosition[];\n updateData: EmployeePositionLookupForm[];\n permissionSetData: any[];\n search: string;\n allPositionsData: any[];\n allPositionsDataOriginal: any[];\n hierarchyRoleLevels: any[];\n positionPermissionMappingUpdateData: PositionPermissionUpdate[];\n permissionSetPageModels: any[];\n searchTerms: string;\n searchFilterPositionOptions: StaffPosition[];\n selectedItem: number = -1;\n\n public pageSizeJobMapping = 15;\n public skipJobMapping = 0;\n\n constructor(\n private employeePosition: EmployeePositionService,\n private toast: ToastService,\n private permissionService: UserPermissionsService,\n public dialog: MatDialog\n ) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n // Load default tab; this must be updated if tabs are re-ordered\n this.loadPositionConfiguration();\n }\n\n // Data Handlers\n loadPositionConfiguration() {\n this.getPositionPermissions();\n this.getPermissionSets();\n this.getHierarchyRoleLevels();\n //this.getPermissionSetPages();\n }\n\n loadJobMapping() {\n this.getPositionMappingData();\n this.getPositions();\n }\n\n unloadPositionConfiguration() {\n this.allPositionsData = null;\n this.allPositionsDataOriginal = null;\n this.permissionSetData = null;\n }\n\n unloadJobMapping() {\n this.originalPositionMappingData = null;\n this.positionMappingData = null;\n this.searchTerms = null;\n }\n\n // Data\n getPositionMappingData() {\n this.employeePosition.getEmployeePositionMapping().subscribe((data) => {\n if (data) {\n data.forEach((p) => {\n if (!p.staffPositionKey) {\n p.staffPositionKey = 10;\n }\n });\n\n this.originalPositionMappingData = data;\n this.positionMappingData = this.originalPositionMappingData;\n }\n });\n }\n\n getPositions() {\n this.employeePosition.getPositions().subscribe((data) => {\n if (data) {\n this.positionTypes = data;\n\n this.searchFilterPositionOptions = [];\n\n this.searchFilterPositionOptions.push({\n staffPositionKey: -1,\n position: 'All',\n class: 'All',\n category: 'All',\n });\n\n this.searchFilterPositionOptions.push(...this.positionTypes);\n }\n });\n }\n\n getPositionPermissions() {\n this.permissionService.getPositionPermissionSets().subscribe((data) => {\n if (data) {\n this.allPositionsData = data;\n\n this.allPositionsData.forEach((x) => {\n if (x.homePageKey == null) {\n x.homePageKey = 0;\n }\n });\n\n this.allPositionsDataOriginal = JSON.parse(JSON.stringify(data));\n\n this.allPositionsData.forEach((d) => {\n if (!d.roleName || d.roleName.length < 1) {\n d.roleName = 'Employee';\n }\n });\n\n this.getPermissionSetPages();\n }\n });\n }\n\n getPermissionSets() {\n this.permissionService.getPermissionSets().subscribe((data) => {\n if (data) {\n this.permissionSetData = data;\n }\n });\n }\n\n getHierarchyRoleLevels() {\n this.employeePosition.getHierarchyLevels().subscribe((data) => {\n if (data) {\n this.hierarchyRoleLevels = data.filter((d) => d.isActive === true);\n this.hierarchyRoleLevels.sort((a, b) => a.roleOrder - b.roleOrder);\n }\n });\n }\n\n getPermissionSetPages() {\n this.permissionService.getHomePages(0).subscribe((res) => {\n this.permissionSetPageModels = res;\n\n this.permissionSetPageModels.forEach((x) => {\n x.pages.forEach((y) => {\n y.module = y.module.charAt(0).toUpperCase() + y.module.slice(1);\n });\n });\n\n this.getHomePagesByPermission();\n });\n }\n // End Data\n\n getHomePagesByPermission(positionModel?: any) {\n if (!positionModel) {\n // Handle initial load\n\n if (this.permissionSetPageModels) {\n this.allPositionsData.forEach((x) => {\n if (x.permissionSetKey != null && x.permissionSetKey != 0) {\n let permissions = this.permissionSetPageModels.find(\n (y) => y.permissionSetKey == x.permissionSetKey\n );\n\n if (permissions) {\n x.permissionSetPages = permissions.pages;\n } else {\n x.homePageKey = 0;\n }\n\n let pageAvailabeInPermission = permissions.pages.find(\n (page) => page.applicationPageKey == x.homePageKey\n );\n\n if (!pageAvailabeInPermission && x.homePageKey != 0) {\n x.homePageKey = 0;\n }\n } else {\n x.homePageKey = 0;\n }\n });\n }\n } else {\n // Handle single position change\n if (positionModel.permissionSetKey != null && positionModel.permissionSetKey != 0) {\n let permissions = this.permissionSetPageModels.find(\n (y) => y.permissionSetKey == positionModel.permissionSetKey\n );\n\n if (permissions) {\n positionModel.permissionSetPages = permissions.pages;\n } else {\n positionModel.homePageKey = 0;\n }\n\n let pageAvailabeInPermission = permissions.pages.find(\n (page) => page.applicationPageKey == positionModel.homePageKey\n );\n\n if (!pageAvailabeInPermission && positionModel.homePageKey != 0) {\n positionModel.homePageKey = 0;\n }\n } else {\n positionModel.homePageKey = 0;\n }\n }\n }\n\n updatePositionPermissionMapping(position) {\n if (!this.positionPermissionMappingUpdateData) {\n this.positionPermissionMappingUpdateData = [];\n }\n\n let updateModel: PositionPermissionUpdate = {\n permissionSetKey: position.permissionSetKey.toString(),\n staffPositionKey: position.staffPositionKey,\n roleName: position.roleName,\n isActive: true,\n homePageKey: position.homePageKey,\n };\n\n let existingItem = this.positionPermissionMappingUpdateData.find(\n (p) => p.staffPositionKey === position.staffPositionKey\n );\n\n if (existingItem) {\n let itemIndex = this.positionPermissionMappingUpdateData.indexOf(existingItem);\n this.positionPermissionMappingUpdateData.splice(itemIndex, 1);\n }\n\n this.getHomePagesByPermission(position);\n\n this.positionPermissionMappingUpdateData.push(updateModel);\n }\n\n savePositionPermissionMapping() {\n this.permissionService\n .updatePositionPermissionSets(this.positionPermissionMappingUpdateData)\n .subscribe((data) => {\n this.toast.success(`Successfully updated position defaults.`);\n this.positionPermissionMappingUpdateData = [];\n this.allPositionsDataOriginal = JSON.parse(JSON.stringify(this.allPositionsData));\n });\n }\n\n cancelPositionPermissionMapping() {\n this.positionPermissionMappingUpdateData = [];\n this.allPositionsData = JSON.parse(JSON.stringify(this.allPositionsDataOriginal));\n this.getHomePagesByPermission();\n\n this.allPositionsData.forEach((d) => {\n if (!d.roleName || d.roleName.length < 1) {\n d.roleName = 'none';\n }\n });\n }\n\n handleTabChange(event: MatTabChangeEvent): void {\n this.tab = event.index;\n\n if (this.tab == 0) {\n this.loadPositionConfiguration();\n this.unloadJobMapping();\n } else if (this.tab == 1) {\n this.unloadJobMapping();\n this.unloadPositionConfiguration();\n } else if (this.tab == 2) {\n this.unloadPositionConfiguration();\n this.loadJobMapping();\n }\n }\n\n filterSearch() {\n this.positionMappingData = this.originalPositionMappingData.filter((x) =>\n x.jobTitle.toLowerCase().includes(this.searchTerms.toLowerCase())\n );\n this.selectedItem = -1;\n }\n\n filterPosition() {\n if (this.selectedItem == -1) {\n this.positionMappingData = this.originalPositionMappingData;\n return;\n }\n\n if (this.selectedItem == 0) {\n this.positionMappingData = this.originalPositionMappingData.filter(\n (x) => x.staffPositionKey == 0\n );\n return;\n }\n\n this.positionMappingData = this.originalPositionMappingData.filter(\n (x) => x.staffPositionKey == this.selectedItem\n );\n }\n\n update(job: EmployeePositionMapping) {\n let updateItem: EmployeePositionLookupForm = {\n staffPositionKey: job.staffPositionKey.toString(),\n jobTitle: job.jobTitle,\n jobCode: job.jobCode,\n };\n\n this.employeePosition.updateEmployeePositionMapping([updateItem]).subscribe(\n (data) => {\n this.toast.success('Job title to position mapping updated.');\n this.updateData = [];\n },\n (error) => {\n this.toast.warning('Something went wrong updating job title to position mapping.');\n throw new Error(error);\n }\n );\n }\n\n public pageChangeJobMapping(event: PageChangeEvent): void {\n this.skipJobMapping = event.skip;\n }\n\n //Deprecated with NV8236 (feature/NV-8236-PositionManagementAutoSave)\n /*autoMapJobTitleClick() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n data: {\n title: 'Automatically Map Job Titles',\n message: `The system will attempt to map job titles to nCino Mortgage Analytics positions. You will need to review these changes before saving. Continue?`,\n },\n });\n\n dialogRef\n .afterClosed()\n .toPromise()\n .then((result) => {\n if (result) {\n this.autoMapJobTitles();\n }\n });\n }*/\n\n /*autoMapJobTitles() {\n this.employeePosition.getAutomaticJobTitleMapping().subscribe((res) => {\n let numberMapped = 0;\n\n if (res && res.length !== 0) {\n res.forEach((title) => {\n let matchingTitle = this.positionMappingData.find(\n (x) => x.jobTitle == title.clientPosition\n );\n\n if (matchingTitle) {\n if (matchingTitle.staffPositionKey != title.staffPositionKey) {\n matchingTitle.staffPositionKey = title.staffPositionKey;\n numberMapped++;\n this.updateMapping(matchingTitle);\n }\n }\n });\n }\n\n this.toast.info(\n `${numberMapped} job titles were mapped. Please review these changes before saving.`\n );\n });\n }*/\n}\n","\n Branch Projections\n\n
\n
\n To change when you would like to allow branch managers to be able to enter projections, you\n may change the opening and closing dates below.\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
{{ currentYear }} Opening Date
\n \n
\n
{{ currentYear }} Closing Date:
\n \n
\n \n * Required\n \n \n \n * Required\n \n
\n
{{ currentYear + 1 }} Opening Date:
\n \n
\n
{{ currentYear + 1 }} Closing Date:
\n \n
\n
\n
\n \n SAVE CHANGES\n \n \n
\n
\n
\n
\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n Validators,\n UntypedFormBuilder,\n} from '@angular/forms';\nimport { ProjectionService } from '../../../performance/services/projection.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { BranchProjectionOpenCloseDates } from '../../../performance/components/performance-projections-config/performance-projection.data';\n\n@Component({\n selector: 'app-branch-projections-config',\n templateUrl: './branch-projections-config.component.html',\n styleUrls: ['./branch-projections-config.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class BranchProjectionsConfigComponent implements OnInit {\n projectionsDateForm: UntypedFormGroup;\n currentYear: number;\n loading: boolean = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private projectionService: ProjectionService,\n private toast: ToastService,\n private reusableFunctions: ReusableFunctions\n ) {\n this.projectionsDateForm = this.createFormGroup();\n }\n\n ngOnInit() {\n scroll(0, 0);\n this.currentYear = new Date().getUTCFullYear();\n this.projectionService.getBranchProjectionOpenCloseDates().subscribe((dates) => {\n this.significantDatesHandler(dates);\n });\n this.onChanges();\n }\n\n significantDatesHandler(dates: BranchProjectionOpenCloseDates[]) {\n if (dates) {\n this.currentYearOpenDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(dates[0].openDate)\n );\n this.currentYearClosingDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(dates[0].closingDate)\n );\n this.nextYearOpenDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(dates[1].openDate)\n );\n this.nextYearClosingDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(dates[1].closingDate)\n );\n } else {\n throw new Error('The branch projection service failed to return open/close dates.');\n }\n }\n\n createFormGroup(): UntypedFormGroup {\n return this.formBuilder.group({\n currentYearOpenDate: new UntypedFormControl('', Validators.required),\n currentYearClosingDate: new UntypedFormControl('', Validators.required),\n nextYearOpenDate: new UntypedFormControl('', Validators.required),\n nextYearClosingDate: new UntypedFormControl('', Validators.required),\n });\n }\n\n get currentYearOpenDate() {\n return this.projectionsDateForm.get('currentYearOpenDate');\n }\n\n get currentYearClosingDate() {\n return this.projectionsDateForm.get('currentYearClosingDate');\n }\n\n get nextYearOpenDate() {\n return this.projectionsDateForm.get('nextYearOpenDate');\n }\n\n get nextYearClosingDate() {\n return this.projectionsDateForm.get('nextYearClosingDate');\n }\n\n onChanges() {\n this.currentYearOpenDate.valueChanges.subscribe((val) => {\n //validation\n });\n this.currentYearClosingDate.valueChanges.subscribe((val) => {\n //validation\n });\n this.nextYearOpenDate.valueChanges.subscribe((val) => {\n //validation\n });\n this.nextYearClosingDate.valueChanges.subscribe((val) => {\n //validation\n });\n }\n\n onSubmit() {\n this.loading = true;\n this.projectionsDateForm.markAsPristine();\n this.projectionService.setOpenClosedDates(this.formatFormData()).subscribe(\n () => {\n this.toast.success('Dates changed successfully.');\n this.loading = false;\n },\n () => {\n this.toast.warning('Something went wrong saving these dates.');\n this.loading = false;\n }\n );\n }\n\n formatFormData(): BranchProjectionOpenCloseDates[] {\n return [\n {\n projectionYear: this.currentYear,\n openDate: this.currentYearOpenDate.value,\n closingDate: this.currentYearClosingDate.value,\n },\n {\n projectionYear: this.currentYear + 1,\n openDate: this.nextYearOpenDate.value,\n closingDate: this.nextYearClosingDate.value,\n },\n ];\n }\n}\n","
\n
\n \n
\n
\n \n \n \n \n \n \n \n
{{ col.fieldName }}
{{ dataItem[col.fieldId] }}
\n
\n
\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\n\n@Component({\n selector: 'dynamic-dialog',\n templateUrl: './dynamic-dialog.component.html',\n styleUrl: './dynamic-dialog.component.scss',\n})\nexport class DynamicDialogComponent implements OnInit {\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: IDynamicDialogData,\n private dialogRef: MatDialogRef\n ) {}\n\n tableColumns: ITableColumns[] = [];\n tableData: Array = [];\n\n ngOnInit() {\n this.tableColumns = this.data?.columnList;\n this.tableData = this.data?.tableData;\n }\n\n crossClicked() {\n this.dialogRef.close();\n }\n}\n\nexport interface IDynamicDialogData {\n columnList: ITableColumns[];\n tableData: Array;\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CsvUploadService {\n private _url = `https://${window.location.host}/api/v0.5/csvupload/`;\n\n constructor(private http: HttpClient) {}\n\n uploadCsv(uploadType: UploadType, formData: FormData): Observable {\n let params = new HttpParams().set('uploadType', uploadType.toString());\n return this.http.post(this._url + 'UploadCsv', formData, {\n params: params,\n reportProgress: true,\n });\n }\n\n uploadFile(file: any, uploadPath: string) {\n let form = new FormData();\n form.append('file', file);\n\n return this.http.post(`${this._url}${uploadPath}`, form);\n }\n\n getCurrentUploadedDataAsCsv(\n uploadType: UploadType,\n fileName: string,\n returnData: boolean\n ): Observable {\n const params = new HttpParams()\n .set('uploadType', uploadType.toString())\n .set('fileName', fileName)\n .set('returnData', returnData);\n return this.http.get(this._url + 'GetCurrentUploadedDataAsCsv', {\n params: params,\n responseType: 'blob' as 'json',\n });\n }\n\n getFileUploadStatus(uploadType: UploadType): Observable {\n let params = new HttpParams().set('uploadType', uploadType.toString());\n return this.http.get(this._url + 'GetFileUploadStatus', {\n params: params,\n });\n }\n\n downloadCsvFile(type: string, returnData: boolean): Observable {\n const params = new HttpParams().set('type', type).set('returnData', returnData);\n return this.http.get(`${this._url}data`, {\n params: params,\n responseType: 'blob' as 'json',\n });\n }\n}\n\nexport type UploadType = 'ProductMapping' | 'GeneralLedger' | 'Hierarchy' | 'Employees';\n\nexport interface IDataValidationResult {\n isHeaderValid: boolean;\n headerMessage: string;\n dataMessage: string;\n}\n\nexport interface ISavedCsvUploadStatus {\n uploadStatus: string;\n reason: string;\n initialCheckStatus: string;\n uploadData: string;\n insertTime: Date;\n fileName: string;\n rowNumber: string;\n}\n\nexport interface IUploadTypeInfo {\n index: number;\n title: string;\n uploadType: UploadType;\n isUploaded: boolean;\n}\n\nexport interface IFileUploadItemInfo {\n title: string;\n uploadType: UploadType;\n id: string;\n showSpinner: boolean;\n maxFileSize: string;\n downloadMessage: string;\n}\n","\n \n \n Upload\n History\n \n \n \n \n

\n This page enables internal administrators to upload various integration and\n mapping files for the client being impersonated. After a successful upload, the\n file will undergo additional processing. Please allow time for this to complete\n and then proceed to the History tab for review.\n

\n\n \n\n \n \n \n\n
\n {{ upload.label }}\n \n
\n\n \n\n \n
\n
\n\n \n \n
\n \n \n \n
\n {{ tab.title }}\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n
\n
\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ToastService } from '../../../../shared/services/toast.service';\nimport {\n CsvUploadService,\n ISavedCsvUploadStatus,\n IUploadTypeInfo,\n UploadType,\n} from 'app/modules/settings/services/csv-upload.service';\nimport { saveAs } from 'file-saver';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport {\n ICellClickEventInfo,\n ICustomTableInfoExtend,\n} from 'app/modules/shared/components/custom-mat-table/custom-mat-table.component';\nimport { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\nimport { CustomMatTableService } from 'app/modules/shared/services/custom-mat-table.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n DynamicDialogComponent,\n IDynamicDialogData,\n} from 'app/modules/shared/components/dynamic-dialog/dynamic-dialog.component';\n\n@Component({\n selector: 'file-upload-integration',\n templateUrl: './file-upload-integration.component.html',\n styleUrls: ['./file-upload-integration.component.scss'],\n})\nexport class FileUploadIntegrationComponent implements OnInit {\n constructor(\n private _toastService: ToastService,\n private _csvUploadService: CsvUploadService,\n private _reusableFunctions: ReusableFunctions,\n private _dialog: MatDialog,\n private messageService: MessageService,\n private confirmationService: ConfirmationService,\n private _customMatTableService: CustomMatTableService\n ) {}\n\n uploadBranchesUrl = 'api/v0.5/csvupload/branch';\n uploadEmployeesUrl = 'employee';\n uploadGeneralLedgerUrl = 'api/v0.5/csvupload/glaccount';\n requiredFileType: string;\n fileManagementTabs: string[];\n tabIndex: number;\n logTabIndex: number;\n fileUploadTypeLogTab: IUploadTypeInfo[];\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n searchTerm: string;\n action: NoDataActionType;\n\n uploadOptions = [\n {\n name: 'hierarchyUpload',\n uploading: false,\n downloading: false,\n label: 'Hierarchy',\n url: 'branch',\n fileName: 'MA_Hierarchy',\n },\n {\n name: 'employeeUpload',\n uploading: false,\n downloading: false,\n label: 'Employee',\n url: 'employee',\n fileName: 'MA_Employee',\n },\n {\n name: 'glUpload',\n uploading: false,\n downloading: false,\n label: 'General Ledger',\n url: 'GeneralLedger',\n fileName: 'MA_GeneralLedger',\n },\n {\n name: 'productMappingUpload',\n uploading: false,\n downloading: false,\n label: 'Product Mapping',\n url: 'ProductMapping',\n fileName: 'MA_ProductMapping',\n },\n ];\n\n @ViewChild('uploadElement') uploadForm: any;\n\n ngOnInit() {\n this.tabIndex = 0;\n this.logTabIndex = 0;\n this.requiredFileType = '.csv';\n this.fileManagementTabs = ['File Management', 'Logs'];\n\n /*\n Add to fileUploadTypeLogTab when supported:\n\n {\n index: 0,\n title: 'Hierarchy',\n uploadType: 'Hierarchy',\n isUploaded: false,\n },\n {\n index: 1,\n title: 'Employees',\n uploadType: 'Employees',\n isUploaded: false,\n },\n */\n\n this.fileUploadTypeLogTab = [\n {\n index: 0,\n title: 'General Ledger',\n uploadType: 'GeneralLedger',\n isUploaded: false,\n },\n {\n index: 1,\n title: 'Product Mapping',\n uploadType: 'ProductMapping',\n isUploaded: false,\n },\n ];\n\n this.searchTerm = '';\n this.action = NoDataActionType.pageStart;\n this.initiateTableProperties();\n }\n\n initiateTableProperties() {\n this.columnInfoList = [\n {\n fieldId: 'insertTime',\n fieldName: 'Time',\n dataType: 'dateTime',\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n },\n {\n fieldId: 'fileName',\n fieldName: 'File Name',\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 300,\n dataType: 'string',\n },\n {\n fieldId: 'rowNumber',\n fieldName: 'Row #',\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n width: 75,\n dataType: 'number',\n },\n {\n fieldId: 'initialCheckStatus',\n fieldName: 'Pre-upload status',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 120,\n dataType: 'string',\n },\n {\n fieldId: 'uploadStatus',\n fieldName: 'Post-upload Status',\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 120,\n dataType: 'string',\n },\n {\n fieldId: 'reason',\n fieldName: 'Failure Reason',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 350,\n dataType: 'string',\n },\n {\n fieldId: 'records',\n fieldName: 'Records',\n isHyperlink: true,\n fieldOrder: 6,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 120,\n dataType: 'string',\n cellClickEventType: 'modelOpen',\n },\n ];\n\n this.customTableInfo = {\n tableId: 'file-upload-log-table',\n tableHeight: 600,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: this.searchTerm,\n action: this.action,\n title: 'File Upload History',\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: false,\n };\n }\n\n cellClickedEvent(event: ICellClickEventInfo) {\n console.log(event);\n let dataString = event?.cellData['uploadData'];\n if (event?.columnInfo?.cellClickEventType === 'modelOpen' && dataString?.length > 0) {\n let tableColumns: ITableColumns[] = [\n {\n fieldId: 'key',\n fieldName: 'Key',\n dataType: 'string',\n fieldOrder: 0,\n dataAlignment: 'left',\n isSortable: true,\n headerAlignment: 'left',\n },\n {\n fieldId: 'value',\n fieldName: 'Value',\n dataType: 'string',\n fieldOrder: 1,\n dataAlignment: 'left',\n isSortable: true,\n headerAlignment: 'left',\n },\n ];\n\n let popupDialogData = [];\n\n try {\n let cellData = JSON.parse(dataString);\n cellData.forEach((item) => {\n popupDialogData.push({\n key: item['ColumnName'],\n value: item['Value'],\n });\n });\n } catch (e) {\n this._toastService.warning('Error reading record data');\n }\n\n this._dialog.open(DynamicDialogComponent, {\n data: {\n columnList: tableColumns,\n tableData: popupDialogData,\n } as IDynamicDialogData,\n minWidth: '250px',\n minHeight: '200px',\n maxHeight: '500px',\n maxWidth: '500px',\n });\n }\n }\n\n handleLogTabChange(event: number) {\n let selectedTab = this.fileUploadTypeLogTab.find((t) => t.index === event);\n //TODO: Minimize redundancy of code\n\n this.logTabIndex = event;\n if (selectedTab) {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n false,\n this.action,\n this.searchTerm\n );\n\n this._csvUploadService.getFileUploadStatus(selectedTab.uploadType).subscribe(\n (res) => {\n if (res && res.length > 0) {\n this.setLogTableData(res);\n\n this.customTableInfo.dataSet = res;\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action,\n this.searchTerm\n );\n } else {\n this._toastService.info('No data available');\n\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n this.action,\n this.searchTerm\n );\n }\n },\n (error) => {\n this._toastService.warning('Unable to find data');\n\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n NoDataActionType.error,\n this.searchTerm\n );\n }\n );\n }\n }\n\n setLogTableData(logData: ISavedCsvUploadStatus[]) {\n logData.map((log) => {\n let preStatus = log['initialCheckStatus'];\n let postStatus = log['uploadStatus'];\n if (\n (preStatus && preStatus.toLowerCase() === 'failed') ||\n (postStatus &&\n (postStatus.toLowerCase() === 'failed' ||\n postStatus.toLowerCase() === 'success'))\n ) {\n log['records'] = 'View data';\n } else {\n log['records'] = '';\n }\n });\n }\n\n getLogTab(uploadType: UploadType) {\n return this.fileUploadTypeLogTab.find((tab) => tab.uploadType === uploadType);\n }\n\n confirmDownloadType(event: any, uploadOption: any) {\n this.confirmationService.confirm({\n target: event.target,\n message: 'Would you like to download with existing data or an empty template file?',\n acceptLabel: 'Data',\n rejectLabel: 'Template',\n rejectButtonProps: { severity: 'secondary' },\n position: 'top-center',\n accept: () => {\n this.onDownload(uploadOption, true);\n },\n reject: () => {\n this.onDownload(uploadOption, false);\n },\n });\n }\n\n // Has to support new (ProductMapping,GL) and old (Emp,Hierarchy) way of handling download\n onDownload(uploadOption: any, returnData: boolean) {\n uploadOption.downloading = true;\n\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n let fileName = '';\n\n if (returnData) {\n fileName = uploadOption.fileName.toString() + '_' + dateTime + '.csv';\n } else {\n fileName = uploadOption.fileName.toString() + '_template.csv';\n }\n\n if (uploadOption.name === 'hierarchyUpload' || uploadOption.name == 'employeeUpload') {\n this._csvUploadService.downloadCsvFile(uploadOption.url, returnData).subscribe({\n next: (res) => {\n if (res) {\n saveAs(res, fileName);\n uploadOption.downloading = false;\n }\n },\n error: (error) => {\n this.messageService.add({\n severity: 'error',\n summary: 'Error downloading file',\n detail: `Something went wrong downloading ${uploadOption.label} data`,\n life: 10000,\n });\n\n uploadOption.downloading = false;\n },\n });\n } else {\n if (uploadOption.name == 'productMappingUpload') {\n this.getCurrentlyAvailableData('ProductMapping', returnData, fileName);\n } else if (uploadOption.name == 'glUpload') {\n this.getCurrentlyAvailableData('GeneralLedger', returnData, fileName);\n }\n }\n }\n\n getCurrentlyAvailableData(uploadType: UploadType, returnData: boolean, fileName: string) {\n this._csvUploadService\n .getCurrentUploadedDataAsCsv(uploadType, fileName, returnData)\n .subscribe((res) => {\n if (res) {\n saveAs(res, fileName);\n } else {\n this._toastService.warning('Unable to download data');\n }\n\n this.uploadOptions.forEach((x) => (x.downloading = false));\n });\n }\n\n onUpload(event: any, uploadOption: any, elementRef: any) {\n let file = event.files[0];\n\n if (!file) {\n return;\n }\n\n uploadOption.uploading = true;\n\n if (uploadOption.name === 'hierarchyUpload' || uploadOption.name == 'employeeUpload') {\n this._csvUploadService.uploadFile(file, uploadOption.url).subscribe({\n next: (response) => {\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail: `${uploadOption.label} CSV has been sent off for processing`,\n });\n\n uploadOption.uploading = false;\n elementRef.clear();\n },\n error: (error) => {\n this.messageService.add({\n severity: 'error',\n summary: 'Error uploading file',\n detail: error.error,\n life: 10000,\n });\n\n uploadOption.uploading = false;\n },\n });\n } else {\n let formData = new FormData();\n formData.append('file', file);\n this._csvUploadService.uploadCsv(uploadOption.url, formData).subscribe({\n next: (response) => {\n if (response && response.isHeaderValid) {\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail: `${uploadOption.label} CSV has been sent off for processing. ${response.dataMessage}`,\n life: 10000,\n });\n } else {\n this.messageService.add({\n severity: 'error',\n summary: 'Error uploading file',\n detail: response.dataMessage,\n life: 10000,\n });\n }\n\n elementRef.clear();\n uploadOption.uploading = false;\n },\n error: (error) => {\n this.messageService.add({\n severity: 'error',\n summary: 'Error uploading file',\n detail: error.error,\n life: 10000,\n });\n\n uploadOption.uploading = false;\n },\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport {\n HolidayModel,\n HolidayUpdateModel,\n HolidayInsertModel,\n HolidayDeleteModel,\n} from '../interfaces/holiday-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HolidayService extends BehaviorSubject {\n private serverUrl = 'https://' + window.location.host; // TODO Get url and version number from appsettings.\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/holidayhours/').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {\n super([]);\n }\n\n getHolidays(clientShortName: string): Observable {\n const params = new HttpParams().set('clientShortName', clientShortName);\n return this.http.get(this._url + 'GetHolidays', {\n params: params,\n });\n }\n\n updateHoliday(model: HolidayModel): Observable {\n var upModel = this.convertHolidayModelToHolidayUpdateModel(model);\n let formattedModel: JSON = this.formatUpdateModel(upModel);\n return new Observable((subscriber) => {\n this.http.post(this._url + 'UpdateHoliday', formattedModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n insertHoliday(model: HolidayModel): Observable {\n var insertModel = this.convertHolidayModelToHolidayInsertModel(model);\n let formattedModel: JSON = this.formatInsertModel(insertModel);\n return new Observable((subscriber) => {\n this.http.post(this._url + 'InsertHoliday', formattedModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n deleteHoliday(holidayModel: HolidayModel): Observable {\n var deleteModel = this.convertHolidayModelToHolidayDeleteModel(holidayModel);\n let formattedModel: JSON = this.formatDeleteModel(deleteModel);\n return new Observable((subscriber) => {\n this.http.post(this._url + 'DeleteHoliday', formattedModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n formatUpdateModel(updateModel: HolidayUpdateModel): any {\n return {\n holidayKey: updateModel.holidayKey,\n clientKey: updateModel.clientKey,\n holidayDate: updateModel.holidayDate,\n holiday: updateModel.holiday,\n isDeleted: updateModel.isDeleted ? updateModel.isDeleted : false,\n lastMod: updateModel.lastMod,\n lastModUserKey: updateModel.lastModUserKey ? updateModel.lastModUserKey : null,\n nbrOfHours: updateModel.nbrOfHours,\n };\n }\n\n formatInsertModel(updateModel: HolidayInsertModel): any {\n return {\n holiday: updateModel.holiday ? updateModel.holiday : null,\n clientKey: updateModel.clientKey,\n holidayDate: updateModel.holidayDate,\n isDeleted: updateModel.isDeleted ? updateModel.isDeleted : false,\n lastMod: updateModel.lastMod,\n lastModUserKey: updateModel.lastModUserKey ? updateModel.lastModUserKey : null,\n nbrOfHours: updateModel.nbrOfHours,\n };\n }\n\n formatDeleteModel(updateModel: HolidayDeleteModel): any {\n return {\n holidayKey: updateModel.holidayKey,\n clientKey: updateModel.clientKey,\n userKey: updateModel.userKey,\n };\n }\n\n convertHolidayModelToHolidayUpdateModel(model: HolidayModel): HolidayUpdateModel {\n var updateModel: HolidayUpdateModel = {\n holidayKey: model.holidayKey,\n clientKey: model.clientKey,\n holidayDate: model.holidayDate,\n holiday: model.holiday,\n isDeleted: model.isDeleted,\n lastMod: model.lastMod,\n lastModUserKey: model.lastModUserKey,\n nbrOfHours: model.nbrOfHours,\n };\n return updateModel;\n }\n\n convertHolidayModelToHolidayInsertModel(model: HolidayModel): HolidayInsertModel {\n var insertModel: HolidayInsertModel = {\n clientKey: model.clientKey,\n holidayDate: model.holidayDate,\n holiday: model.holiday ? model.holiday : null,\n isDeleted: model.isDeleted ? model.isDeleted : false,\n lastMod: model.lastMod ? model.lastMod : new Date(),\n lastModUserKey: model.lastModUserKey ? model.lastModUserKey : null,\n nbrOfHours: model.nbrOfHours,\n };\n return insertModel;\n }\n\n convertHolidayModelToHolidayDeleteModel(model: HolidayModel): HolidayDeleteModel {\n var deleteModel: HolidayDeleteModel = {\n holidayKey: model.holidayKey,\n clientKey: model.clientKey,\n userKey: model.lastModUserKey,\n };\n return deleteModel;\n }\n}\n","\n
\n Holiday Hours\n
\n
\n Enter Holidays where the business hours differ from the default Business Day Hours.\n
\n
\n
\n
\n \n Find Holiday \n \n search\n \n
\n \n
\n
\n
\n \n \n
\n \n
\n
\n \n \n \n
\n {{ selectedHoliday.holidayDate | date: 'MM/dd/yyyy':'UTC' }}\n
\n
\n \n \n \n \n
\n {{ selectedHoliday.nbrOfHours | number: '1.2-2' }}\n
\n
\n \n \n \n \n \n \n \n \n Edit\n \n \n Remove\n \n \n {{ isNew ? 'Add' : 'Update' }}\n \n \n {{ isNew ? 'Discard changes' : 'Cancel' }}\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n","import { Component, OnInit, ViewEncapsulation, ViewChild } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { HolidayService } from '../../../services/holiday.service';\nimport { UserService } from '../../../../shared/services/user.service';\nimport { ToastService } from '../../../../shared/services/toast.service';\nimport { HolidayModel } from '../../../interfaces/holiday-data';\nimport { GridDataResult, PageChangeEvent, GridComponent } from '@progress/kendo-angular-grid';\nimport { SortDescriptor, State, orderBy, filterBy } from '@progress/kendo-data-query';\nimport {\n NoDataTypes,\n NoDataSourceType,\n NoDataActionType,\n} from 'app/modules/shared/interfaces/no-data';\nimport { CurrentUserStateService } from '../../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../../shared/services/impersonation.service';\n\n@Component({\n selector: 'holiday-hours',\n templateUrl: './holiday-hours.component.html',\n styleUrls: ['./holiday-hours.component.scss'],\n})\nexport class HolidayHoursComponent implements OnInit {\n @ViewChild(GridComponent, { static: false })\n private grid: GridComponent;\n holidayEntrySort: SortDescriptor[];\n pageSize = 10;\n skip = 0;\n take: 10;\n type: 'numeric' | 'input' = 'input';\n holidaySearchTerm: string;\n filteredHolidays: HolidayModel[];\n cShortName: string;\n clientKey: number;\n public view: GridDataResult;\n public gridState: State = {\n sort: [],\n skip: 0,\n take: 10,\n };\n public formGroup: UntypedFormGroup;\n selectedHoliday: HolidayModel;\n private editedRowIndex: number;\n holidayEntries: HolidayModel[];\n showAddButton: boolean;\n addActive: boolean;\n loading: boolean;\n noHolidaysForCompany: boolean;\n noDataType: NoDataTypes;\n error: any;\n\n constructor(\n private currentUserStateService: CurrentUserStateService,\n private toastService: ToastService,\n private holidayService: HolidayService,\n private impersonationService: ImpersonationService\n ) {}\n\n public ngOnInit(): void {\n scroll(0, 0);\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Holiday Hours',\n inputSource: NoDataSourceType.table,\n };\n this.holidayEntrySort = [{ field: 'holidayDate', dir: 'desc' }];\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n this.cShortName = clientShortName;\n if (this.impersonationService.isImpersonatingClient()) {\n clientShortName = this.impersonationService.impersonateClient;\n this.cShortName = clientShortName;\n }\n\n this.showAddButton = false;\n this.getHolidays();\n }\n\n getHolidays() {\n this.loading = true;\n this.holidayService.getHolidays(this.cShortName).subscribe(\n (holidays) => {\n if (holidays && holidays.length) {\n this.noHolidaysForCompany = false;\n this.holidayEntries = holidays;\n this.loadHolidaysIntoGridView();\n } else {\n this.noHolidaysForCompany = true;\n }\n this.loading = false;\n },\n (error) => {\n this.error = error;\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n holidayPageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadHolidaysIntoGridView();\n }\n\n reloadHolidaysIntoGridView() {\n this.getHolidays();\n }\n\n loadHolidaysIntoGridView() {\n let orderedData = orderBy(this.holidayEntries, this.holidayEntrySort);\n this.view = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.loadHolidaysIntoGridView();\n }\n\n filterHolidays(): void {\n let searchTermTokens = this.holidaySearchTerm.split(' ');\n this.filteredHolidays = filterBy(this.holidayEntries, {\n logic: 'or',\n filters: [\n {\n field: 'holiday',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'holidayDate',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'nbrOfHours',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n this.filteredHolidays = filterBy(this.filteredHolidays, {\n logic: 'or',\n filters: [\n {\n field: 'holiday',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'holidayDate',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n {\n field: 'nbrOfHours',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n let orderedData = orderBy(this.filteredHolidays, this.holidayEntrySort);\n this.view = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n this.updateGrid();\n }\n\n updateGrid() {\n let orderedData = orderBy(\n this.filteredHolidays ? this.filteredHolidays : this.holidayEntries,\n this.holidayEntrySort\n );\n this.view = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.holidayEntrySort = sort;\n this.updateGrid();\n }\n\n public addHoliday() {\n this.closeEditor(this.grid);\n this.formGroup = new UntypedFormGroup({\n holiday: new UntypedFormControl('', Validators.maxLength(100)),\n nbrOfHours: new UntypedFormControl(\n 8.0,\n Validators.compose([Validators.required, Validators.min(0), Validators.max(8)])\n ),\n holidayDate: new UntypedFormControl(new Date()),\n clientKey: new UntypedFormControl(4),\n isDeleted: new UntypedFormControl(false),\n lastMod: new UntypedFormControl(new Date()),\n lastModUserKey: new UntypedFormControl(7270),\n });\n this.grid.addRow(this.formGroup);\n }\n\n public addHandler({ sender }) {\n this.closeEditor(sender);\n\n this.formGroup = new UntypedFormGroup({\n holiday: new UntypedFormControl('', Validators.maxLength(100)),\n nbrOfHours: new UntypedFormControl(\n 8.0,\n Validators.compose([Validators.required, Validators.min(0), Validators.max(8)])\n ),\n holidayDate: new UntypedFormControl(new Date()),\n clientKey: new UntypedFormControl(4),\n isDeleted: new UntypedFormControl(false),\n lastMod: new UntypedFormControl(new Date()),\n lastModUserKey: new UntypedFormControl(7270),\n });\n\n sender.addRow(this.formGroup);\n }\n\n public editHandler({ sender, rowIndex, dataItem }) {\n this.closeEditor(sender);\n this.formGroup = new UntypedFormGroup({\n holidayKey: new UntypedFormControl(dataItem.holidayKey),\n clientKey: new UntypedFormControl(dataItem.clientKey),\n holidayDate: new UntypedFormControl(new Date(dataItem.holidayDate)),\n holiday: new UntypedFormControl(\n dataItem.holiday,\n Validators.compose([Validators.required, Validators.maxLength(100)])\n ),\n isDeleted: new UntypedFormControl(dataItem.isDeleted),\n lastMod: new UntypedFormControl(dataItem.lastMod),\n lastModUserKey: new UntypedFormControl(dataItem.lastModUserKey),\n nbrOfHours: new UntypedFormControl(\n dataItem.nbrOfHours,\n Validators.compose([\n Validators.required,\n Validators.min(0),\n Validators.max(8),\n Validators.pattern(\n '((([0]*.?((25)|(50)|(5)|(75))))|([1-7]*.?((25)|(50)|(5)|(75)|(0)|(00)))|(8.00)|([0-8]))'\n ),\n ])\n ),\n });\n this.editedRowIndex = rowIndex;\n sender.editRow(rowIndex, this.formGroup);\n }\n\n public cancelHandler({ sender, rowIndex }) {\n this.closeEditor(sender, rowIndex);\n }\n\n public saveHandler({ sender, rowIndex, formGroup, isNew }) {\n const product: HolidayModel = formGroup.value;\n\n if (!isNew) {\n this.holidayService.updateHoliday(product).subscribe(\n () => {\n sender.closeRow(rowIndex);\n this.toastService.success('Holiday ' + product.holiday + ' updated.');\n this.reloadHolidaysIntoGridView();\n },\n () => {\n this.toastService.error('Error updating ' + product.holiday + ' holiday.');\n }\n );\n } else {\n this.holidayService.insertHoliday(product).subscribe(\n () => {\n this.toastService.success('Holiday ' + product.holiday + ' created.');\n sender.closeRow(rowIndex);\n this.reloadHolidaysIntoGridView();\n },\n () => {\n this.toastService.error('Error creating ' + product.holiday + ' holiday.');\n }\n );\n }\n }\n\n public removeHandler({ dataItem }) {\n this.holidayService.deleteHoliday(dataItem).subscribe(\n () => {\n this.toastService.success('Holiday ' + dataItem.holiday + ' deleted.');\n this.reloadHolidaysIntoGridView();\n },\n () => {\n this.toastService.error('Error deleting ' + dataItem.holiday + ' holiday.');\n }\n );\n }\n\n private closeEditor(grid, rowIndex = this.editedRowIndex) {\n grid.closeRow(rowIndex);\n this.editedRowIndex = undefined;\n this.formGroup = undefined;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { SiteSearchDataModel } from 'app/modules/shared/services/site-search.service';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DeleteLoanService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/deleteLoan').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n getPendingLoans(): Observable {\n return this.http.get(this._url + '/getPendingLoans');\n }\n\n deleteLoan(loanNumber: string): Observable {\n return this.http.put(this._url + '/deleteloan', {\n LoanNumber: loanNumber,\n });\n }\n}\n","\n
\n Delete Loans\n
\n
\n
\n \n \n
\n
\n \n
\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { GridDataResult, DataStateChangeEvent } from '@progress/kendo-angular-grid';\nimport { orderBy, process } from '@progress/kendo-data-query';\nimport { LoanDetailsListOfLoansService } from 'app/modules/shared/loan-details-modal/loan-details-list-of-loans.service';\nimport {\n SiteSearchService,\n SiteSearchDataModel,\n} from 'app/modules/shared/services/site-search.service';\nimport { Router } from '@angular/router';\nimport { State } from '@progress/kendo-data-query';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ConfirmationAlertDialogComponent } from 'app/modules/settings/components/confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { DeleteLoanService } from 'app/modules/shared/services/delete-loan.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\n\n@Component({\n selector: 'delete-loan',\n templateUrl: './delete-loan.component.html',\n styleUrls: ['./delete-loan.component.scss'],\n})\nexport class DeleteLoanComponent implements OnInit {\n results: SiteSearchDataModel[] = [];\n pendingLoans: SiteSearchDataModel[] = [];\n gridView: GridDataResult;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n type: 'numeric' | 'input' = 'input';\n allResults: boolean = false;\n groupable = true;\n scrollable = 'scrollable';\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 20],\n };\n loading: boolean = false;\n searchTerm: string = '';\n state: State = {\n skip: 0,\n take: 10,\n sort: [\n {\n field: 'name',\n dir: 'asc',\n },\n ],\n };\n keys: string[] = ['identifier', 'name'];\n total: number = 0;\n constructor(\n private listOfLoansService: LoanDetailsListOfLoansService,\n private router: Router,\n private siteSearchService: SiteSearchService,\n public Matdialog: MatDialog,\n private deleteLoanService: DeleteLoanService,\n private toastService: ToastService\n ) {}\n\n ngOnInit() {}\n\n getPendingLoans() {\n this.deleteLoanService.getPendingLoans().subscribe((pendingLoans) => {\n this.pendingLoans = pendingLoans ?? [];\n this.loadData();\n });\n }\n\n updateGrid() {\n this.loading = true;\n this.siteSearchService\n .getSiteSearchResults(\n this.searchTerm,\n 'L', //Only looking at loans\n this.state.skip,\n this.state.take,\n this.getSortField(),\n this.allResults\n )\n .subscribe(\n (data) => {\n this.loading = false;\n this.results = data;\n this.getPendingLoans();\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n loadData() {\n let mergedResults = this.mergeArrays(this.results, this.pendingLoans);\n this.gridView = {\n data: orderBy(mergedResults, this.state.sort),\n total: this.results[0]?.totalRows ?? 0,\n };\n this.loading = false;\n }\n\n deleteHandler(loanNumber) {\n const dialogRef = this.Matdialog.open(ConfirmationAlertDialogComponent, {\n data: {\n title: 'Delete Loan ' + loanNumber + '?',\n message: `You're about to permanently delete this loan from nCino Mortgage Analytics. It is not recoverable without the extensive\n coordinated efforts of both your LOS administrator and nCino. Deletes are processed hourly.\n If you're not sure, please click Cancel.`,\n acceptTerm: 'DELETE',\n rejectTerm: 'CANCEL',\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === 'accept') {\n this.deleteLoanService.deleteLoan(loanNumber).subscribe(\n () => {\n this.toastService.success('Loan in queue for deletion.');\n this.updateGrid();\n },\n () => {\n this.toastService.warning('Error deleting loan.');\n }\n );\n }\n });\n }\n\n getSortField(): string {\n if (this.state.sort.length && this.gridView?.data?.length) {\n let sortCol = this.keys.indexOf(this.state.sort[0].field) + 1; //sql index starts at 1;\n if (sortCol > 0) {\n let sortDir = this.state.sort[0].dir ? this.state.sort[0].dir.charAt(0) : 'a';\n return sortCol + sortDir;\n }\n }\n return '2a';\n }\n\n mergeArrays(arr1: SiteSearchDataModel[], arr2: SiteSearchDataModel[]) {\n let res: SiteSearchDataModel[] = arr1.map((obj) => {\n const index = arr2.findIndex((el) => el.loanNumber == obj.identifier);\n obj.requestedByEmail = index !== -1 ? arr2[index].requestedByEmail : '';\n return Object.assign({}, obj);\n });\n return res;\n }\n\n dataStateChange(state: DataStateChangeEvent): void {\n this.state = state;\n this.updateGrid();\n }\n\n cellClickHandler(record) {\n this.openLoanModal(record.identifier);\n }\n\n openLoanModal(identifier: string) {\n this.router.navigate([{ outlets: { modal: 'loanDetails' + '/' + identifier } }]);\n }\n\n openPage(route: string, id: string) {\n this.router.navigate([`${route}${id}`]);\n }\n\n searchRows(event) {\n this.searchTerm = event;\n this.updateGrid();\n }\n\n ngOnDestroy() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LBASuperUserService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}').replace('{version}', this.version);\n\n constructor(private http: HttpClient) {}\n\n getLBAUsers(): Observable {\n return this.http.get(`${this._url}/superuser`);\n }\n\n addLBAUser(params): Observable {\n const data = {\n loginEmail: params.loginEmail,\n isSuperUser: params.isSuperAdmin,\n isDemoUser: params.isDemoUser,\n isActive: params.isActive,\n isPlatformUser: params.isPlatformUser,\n };\n return this.http.post(`${this._url}/superuser`, data);\n }\n\n updateUser(params) {\n const data = {\n loginEmail: params.loginEmail,\n isSuperUser: params.isSuperAdmin,\n isPlatformUser: params.isPlatformUser,\n isDemoUser: params.isDemoUser,\n isActive: params.isActive,\n };\n\n return this.http.patch(`${this._url}/superuser/`, data);\n }\n\n getAllPlatformUsers(requestType: string): Observable {\n const data = { requestType: requestType };\n return this.http.post(`${this._url}/superuser/GetAllPlatformUsers/`, data);\n }\n}\n\nexport interface IUserShort {\n userKey?: string;\n clientFullname?: string;\n lfName?: string;\n loginEmail?: string;\n userType?: string;\n isActive?: boolean;\n lastLoginDate?: Date;\n}\n","\n
\n
System Users
\n\n

\n Internal users assigned to the SimpleNexus client. Users marked as enabled have the\n ability to log in. Users set to Platform User act as global power users. They have the\n ability to change clients, impersonate, and have access to all client data. Super Users\n have the ability to change the settings of the client.\n

\n\n
\n
\n \n Find Email\n \n search\n \n
\n
\n \n \n \n \n
\n \n \n   ADD SYSTEM USER\n \n
\n
\n \n \n System Users\n \n
\n
\n \n \n Power users\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n 0);\n else noUserFound\n \"\n >\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n
EmailUser TypeEnabledPassword
\n {{ user.loginEmail }}\n \n \n \n \n {{ userType.type }}\n \n \n \n \n \n \n \n Reset\n \n {{ user.newPassword }}\n
\n System User Not Found\n
\n\n \n\n
\n
\n
\n ADD SYSTEM USER\n \n \n \n
\n\n
\n
\n
Email:
\n
\n \n \n \n
\n {{\n errorMessage\n }}\n\n
\n\n
User Type:
\n
\n \n \n \n {{ userType.type }}\n \n \n \n
\n\n
\n
\n\n \n \n
\n\n
\n
\n \n   \n \n
\n\n


\n\n
\n

\n User account has been created for {{ userEmail }}. Copy the password below:\n

\n

\n {{ userPassword }}\n

\n
\n
\n
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { LBASuperUserService } from '../../services/lba-super-user.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { ResetPasswordService } from 'app/modules/shared/services/reset-password.service';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\nimport { IExportColumnInfo } from 'app/modules/reports/interfaces/reporting-data';\n\n@Component({\n selector: 'app-lba-users',\n templateUrl: './lba-users.component.html',\n styleUrls: ['./lba-users.component.scss'],\n})\nexport class LbaUsersComponent implements OnInit {\n lbaUsers: any[];\n lbaUsersDisplay: any[];\n addMenuOpen = false;\n newUserModel = {\n loginEmail: '',\n isSuperAdmin: false,\n isPlatformUser: false,\n isDemoUser: false,\n isActive: true,\n userType: 0,\n };\n userAdded = false;\n userEmail: string;\n userPassword: string;\n errorMessage: string = null;\n showEnabled = true;\n searchTerms: string = '';\n\n constructor(\n private _superUserService: LBASuperUserService,\n private _resetPasswordService: ResetPasswordService,\n private _toast: ToastService,\n private _reusableFunctions: ReusableFunctions,\n private _reportingService: ReportingService\n ) {}\n\n ngOnInit() {\n this.getLBAUsers();\n }\n\n getLBAUsers() {\n this._superUserService.getLBAUsers().subscribe(\n (users) => {\n if (users) {\n users.forEach((x) => {\n if (x.isPlatformUser) {\n x.userType = 1;\n } else if (x.isSuperUser) {\n x.userType = 2;\n } else if (x.isDemoUser) {\n x.userType = 3;\n } else {\n x.userType = 0;\n }\n });\n\n this.lbaUsers = users;\n\n this.filterDisplayByEnabled(this.lbaUsers);\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n newUser() {\n this.addMenuOpen = true;\n\n this.userAdded = false;\n this.newUserModel = {\n loginEmail: '',\n isSuperAdmin: false,\n isPlatformUser: false,\n isDemoUser: false,\n isActive: true,\n userType: 0,\n };\n }\n\n saveUser() {\n if (this.newUserModel.loginEmail) {\n if (this.newUserModel.userType == 0) {\n // None\n this.newUserModel.isSuperAdmin = false;\n this.newUserModel.isPlatformUser = false;\n this.newUserModel.isDemoUser = false;\n } else if (this.newUserModel.userType == 1) {\n // Platform User (both flags need to be true)\n this.newUserModel.isSuperAdmin = true;\n this.newUserModel.isPlatformUser = true;\n this.newUserModel.isDemoUser = false;\n } else if (this.newUserModel.userType == 3) {\n this.newUserModel.isSuperAdmin = true;\n this.newUserModel.isPlatformUser = false;\n this.newUserModel.isDemoUser = true;\n } else {\n // Super User\n this.newUserModel.isSuperAdmin = true;\n this.newUserModel.isPlatformUser = false;\n this.newUserModel.isDemoUser = false;\n }\n\n this._superUserService.addLBAUser(this.newUserModel).subscribe(\n (_) => {\n this.newUserModel = {\n loginEmail: '',\n isSuperAdmin: false,\n isPlatformUser: false,\n isDemoUser: false,\n isActive: true,\n userType: 0,\n };\n this.addMenuOpen = false;\n this._toast.success('User created.');\n this.getLBAUsers();\n },\n (error) => {\n this._toast.warning('Problem creating user.');\n throw new Error(error);\n }\n );\n }\n }\n\n resetPassword(user) {\n this._resetPasswordService.requestPasswordReset(user.loginEmail).subscribe(\n () => {\n this._toast.success('Password Reset Email has been sent.');\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n updateUser(user) {\n if (!user.isActive) {\n user.userType = 0;\n }\n\n if (user.userType == 0) {\n // None\n user.isSuperAdmin = false;\n user.isPlatformUser = false;\n user.isDemoUser = false;\n } else if (user.userType == 1) {\n // Platform User (both flags need to be true)\n user.isSuperAdmin = true;\n user.isDemoUser = false;\n user.isPlatformUser = true;\n } else if (user.userType == 3) {\n user.isSuperAdmin = true;\n user.isDemoUser = true;\n user.isPlatformUser = false;\n } else {\n // Super User\n user.isSuperAdmin = true;\n user.isPlatformUser = false;\n user.isDemoUser = false;\n }\n\n const params = {\n loginEmail: user.loginEmail,\n isSuperAdmin: user.isSuperAdmin,\n isPlatformUser: user.isPlatformUser,\n isDemoUser: user.isDemoUser,\n isActive: user.isActive,\n };\n\n this._superUserService.updateUser(params).subscribe(\n (_) => {\n this._toast.success(`Updated ${user.loginEmail}.`);\n },\n (error) => {\n this._toast.warning('Problem saving user.');\n throw new Error(error);\n }\n );\n }\n\n saveDisabled() {\n if (!this.newUserModel.loginEmail || this.newUserModel.loginEmail.length < 10) {\n return true;\n }\n\n let validEmail =\n this.newUserModel.loginEmail.includes('@lbaware.com') ||\n this.newUserModel.loginEmail.includes('@simplenexus.com') ||\n this.newUserModel.loginEmail.includes('@ncino.com');\n return !validEmail;\n }\n\n changeEnabled() {\n this.showEnabled = !this.showEnabled;\n\n this.emailSearch();\n }\n\n exportToExcel(requestType: 'house-system-users' | 'clients-power-users') {\n this._toast.info('Export started.');\n this._superUserService.getAllPlatformUsers(requestType).subscribe((res) => {\n let exportName = 'user-export-' + requestType;\n let columnInfo: IExportColumnInfo[] = [];\n\n if (requestType === 'house-system-users') {\n columnInfo = [\n {\n columnId: 1,\n columnIdName: 'userKey',\n columnName: 'UserKey',\n dataType: 'String',\n },\n {\n columnId: 2,\n columnIdName: 'loginEmail',\n columnName: 'Login Email',\n dataType: 'String',\n },\n {\n columnId: 3,\n columnIdName: 'userType',\n columnName: 'User Type',\n dataType: 'String',\n },\n {\n columnId: 4,\n columnIdName: 'isActive',\n columnName: 'Active Status',\n dataType: 'String',\n },\n {\n columnId: 5,\n columnIdName: 'lastLoginDate',\n columnName: 'Last Login Date',\n dataType: 'String',\n },\n ];\n } else if (requestType === 'clients-power-users') {\n columnInfo = [\n {\n columnId: 1,\n columnIdName: 'clientFullname',\n columnName: 'Client Full Name',\n dataType: 'String',\n },\n {\n columnId: 2,\n columnIdName: 'lfName',\n columnName: 'Last, First Name',\n dataType: 'String',\n },\n {\n columnId: 3,\n columnIdName: 'loginEmail',\n columnName: 'Login Email',\n dataType: 'String',\n },\n {\n columnId: 4,\n columnIdName: 'lastLoginDate',\n columnName: 'Last Login Date',\n dataType: 'String',\n },\n ];\n }\n\n this._reportingService.setQuickExportData(columnInfo, res, exportName);\n });\n }\n\n filterDisplayByEnabled(arrayToFilter: any[]) {\n if (this.showEnabled) {\n this.lbaUsersDisplay = arrayToFilter.filter((x) => x.isActive == true);\n } else {\n this.lbaUsersDisplay = arrayToFilter;\n }\n }\n\n emailSearch() {\n this.filterDisplayByEnabled(\n this.lbaUsers.filter((x) =>\n x.loginEmail.toLowerCase().includes(this.searchTerms.toLowerCase())\n )\n );\n }\n}\n","\n Account Details\n \n \n \n Company Information\n \n \n Save\n \n \n Cancel\n \n \n \n \n Add\n \n \n \n Edit\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n
IdentifierActive DateInactive Date
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n \n \n \n\n
\n
Company NMLS ID
\n
\n \n \n
\n \n \n Add\n \n \n Save\n \n \n Cancel\n \n \n \n \n Add\n \n \n \n Edit\n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n
IdentifierActive DateInactive Date
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n \n \n \n
\n
\n Company Integrations\n \n \n \n \n
\n
\n \n
\n \n \n \n\n","import { Component, OnInit, ViewEncapsulation, Output, Input, EventEmitter } from '@angular/core';\n//import { EmployeeService } from '../../../shared/services/employee.service';\nimport {\n AccountDetails,\n ClientIdentifier,\n ClientIdentifierUpdate,\n ClientInformationInterface,\n} from '../../../shared/interfaces/client-data';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { ClientsService } from '../../../shared/services/clients.service';\nimport { UserService } from '../../../shared/services/user.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { ClientContactsService } from '../../services/client-contacts.service';\nimport { forkJoin } from 'rxjs';\nimport {\n UntypedFormGroup,\n UntypedFormBuilder,\n UntypedFormControl,\n Validators,\n UntypedFormArray,\n} from '@angular/forms';\nimport { IntegrationSourceService } from '../../services/integration-source.service';\nimport {\n ClientSubscriptionService,\n ClientSubscriptionType,\n} from '../../services/client-subscription.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\n\n@Component({\n selector: 'app-company-account-details',\n templateUrl: './company-account-details.component.html',\n styleUrls: ['./company-account-details.component.scss'],\n})\nexport class CompanyAccountDetailsComponent implements OnInit {\n // for if coming in from lba-clients view\n @Input() selectedCompanyDetails: AccountDetails;\n @Input() companyFullModel: ClientInformationInterface;\n @Input() editing: boolean;\n @Input() addEditOrViewOnly: string;\n @Output() cancelClickedEvent = new EventEmitter();\n @Output() companyModEvent = new EventEmitter();\n fromClient: boolean;\n leiIds: ClientIdentifier;\n nmlsIds: ClientIdentifier;\n clientFullInfo: ClientInformationInterface;\n accountDetails: AccountDetails;\n subscriptionTypeList: ClientSubscriptionType[];\n savingData: boolean;\n isMainMenuQuickOpen = false;\n clientShortName: string;\n dataReady: boolean;\n\n tabs = [{ label: 'Company Info' }, { label: 'Contacts' }, { label: 'Systems & Integrations' }];\n tabActiveIndex: number;\n editMenuTitle: string;\n editingMain: boolean = false;\n isEditMenuOpen: boolean;\n isEditing: boolean;\n isAdding: boolean;\n addOrEditClientForm: UntypedFormGroup;\n isLBA: boolean = true;\n isSuperUser: boolean;\n isSuperAdmin: boolean;\n // identifier variables\n clientHmdaIdentities: ClientIdentifier[];\n clientNmlsIdentities: ClientIdentifier[];\n compenSafeIdentifiers: ClientIdentifier[];\n hubSpotIdentifiers: ClientIdentifier[];\n companyIdentityForm: UntypedFormGroup;\n hmdaIdentityForm: UntypedFormGroup;\n nmlsIdentityForm: UntypedFormGroup;\n hmdaIsEditing: boolean = false;\n nmlsIsEditing: boolean = false;\n\n constructor(\n private integrationSourceService: IntegrationSourceService,\n private clientSubscriptionService: ClientSubscriptionService,\n private clientContactsService: ClientContactsService,\n private clientService: ClientsService,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private toastService: ToastService,\n private reusableFunctions: ReusableFunctions,\n private formBuilder: UntypedFormBuilder\n ) {}\n ngOnInit() {\n this.dataReady = false;\n this.editingMain = false;\n this.tabActiveIndex = 0;\n // if view not passed in then set it\n if (!this.addEditOrViewOnly) {\n this.addEditOrViewOnly = 'viewOnly';\n }\n this.isEditMenuOpen = false;\n this.editMenuTitle = '';\n this.isEditing = false;\n this.isAdding = false;\n this.addOrEditClientForm = this.createFormGroup();\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n if (this.impersonationService.isImpersonatingClient()) {\n clientShortName = this.impersonationService.impersonateClient;\n }\n\n if (\n this.currentUserStateService.isLBASuperUser() &&\n !this.impersonationService.isImpersonatingUser()\n ) {\n this.isSuperAdmin = true;\n }\n this.clientShortName = clientShortName;\n if (this.companyFullModel) {\n this.fromClient = true;\n this.clientShortName = this.companyFullModel.clientDetails.shortName;\n }\n if (!this.companyFullModel) {\n this.fromClient = false;\n this.companyFullModel = this.getFullModelForClient(clientShortName);\n }\n this.createIdentityForms();\n this.dataReady = true;\n }\n // account details - tab 1\n getAccountDetails(): void {\n this.clientService.getAccountDetails(this.clientShortName).subscribe((data) => {\n this.accountDetails = data;\n });\n }\n getSubscriptionTypes() {\n this.clientSubscriptionService.getSubscriptionTypes().subscribe((data) => {\n this.subscriptionTypeList = data;\n });\n }\n createFormGroup(): UntypedFormGroup {\n return this.formBuilder.group({\n fullName: new UntypedFormControl(this.companyFullModel.clientDetails.fullName, [\n Validators.required,\n Validators.maxLength(100),\n ]),\n hubspotUrl: new UntypedFormControl(\n this.companyFullModel.clientDetails.hubSpotUrl,\n Validators.maxLength(150)\n ),\n companyUrl: new UntypedFormControl(\n this.companyFullModel.clientDetails.companyURL,\n Validators.maxLength(200)\n ),\n compenSafeUrl: new UntypedFormControl(\n this.companyFullModel.clientDetails.compenSafeUrl,\n Validators.maxLength(200)\n ),\n subscriptionType: new UntypedFormControl(\n this.companyFullModel.clientDetails.subscriptionType\n ),\n });\n }\n logForm() {\n console.log(this.addOrEditClientForm);\n this.editingMain = false;\n }\n get fullName() {\n return this.addOrEditClientForm.get('fullName');\n }\n get hubspotUrl() {\n return this.addOrEditClientForm.get('hubspotUrl');\n }\n get compenSafeUrl() {\n return this.addOrEditClientForm.get('compenSafeUrl');\n }\n get subscriptionType() {\n return this.addOrEditClientForm.get('subscriptionType');\n }\n\n // cancel edit client info\n cancel() {\n this.editingMain = false;\n this.isEditMenuOpen = false;\n this.isEditing = false;\n this.isAdding = false;\n this.addOrEditClientForm.reset();\n }\n // edit client info\n edit() {\n this.isEditing = true;\n this.isAdding = false;\n this.isEditMenuOpen = true;\n this.editingMain = false;\n }\n editBasicForm() {\n this.editingMain = true;\n }\n // update client information\n updateClient() {\n this.savingData = true;\n this.editingMain = false;\n this.logForm();\n }\n // go back to client list\n cancelClicked() {\n this.cancelClickedEvent.emit();\n }\n showContact: boolean;\n tabChangeHandler(index: number) {\n this.tabActiveIndex = index;\n }\n // if return true, changes were made\n updatePageFromSideBar(event) {\n const result = event.formResult;\n this.isEditMenuOpen = false;\n this.isEditing = false;\n this.isAdding = false;\n if (result == true) {\n this.getAccountDetails();\n }\n }\n checkClientHasCompenSafe(data: ClientIdentifier[]): boolean {\n var comp = data.find((c) => c.identifierType == 'CompenSafe');\n return comp != null;\n }\n // for if not navigating to here from client list\n getFullModelForClient(shortName: string): ClientInformationInterface {\n var data: ClientInformationInterface;\n forkJoin(\n this.clientService.getAccountDetails(shortName),\n this.clientContactsService.getContactsByName(shortName),\n this.clientService.getClientIdentifierRecords(shortName),\n this.integrationSourceService.getClientIntegrationSourcesByName(shortName)\n ).subscribe(([details, contacts, identifiers, clientIntegrationSources]) => {\n this.companyFullModel.clientDetails = details;\n this.companyFullModel.contacts = contacts;\n this.companyFullModel.identifiers = identifiers;\n this.companyFullModel.clientIntegrationSources = clientIntegrationSources;\n this.leiIds = data.identifiers.find((x) => x.identifierType == 'LEI');\n this.nmlsIds = data.identifiers.find((x) => x.identifierType == 'NMLS');\n this.clientShortName = this.companyFullModel.clientDetails.shortName;\n this.dataReady = true;\n return data;\n });\n return data;\n }\n\n // Functions for Identifier Form\n editIdentities(type: string) {\n if (type == 'HMDA') {\n this.hmdaIsEditing = true;\n this.hmdaIdentityForm.enable();\n }\n if (type == 'NMLS') {\n this.nmlsIsEditing = true;\n this.nmlsIdentityForm.enable();\n }\n }\n cancelEditedIdentities(type: string) {\n if (type == 'HMDA') {\n this.hmdaIsEditing = false;\n this.hmdaIdentityForm.disable();\n }\n if (type == 'NMLS') {\n this.nmlsIsEditing = false;\n this.nmlsIdentityForm.disable();\n }\n }\n createIdentityForms() {\n this.hmdaIdentityForm = this.createHmdaIdentityForm();\n this.nmlsIdentityForm = this.createNmlsIdentityForm();\n this.populateIdentityControls();\n }\n createHmdaIdentityForm(): UntypedFormGroup {\n return this.formBuilder.group({\n hmdaIdentityControlsArray: this.formBuilder.array([this.createIdentityGroup()]),\n });\n }\n createNmlsIdentityForm(): UntypedFormGroup {\n return this.formBuilder.group({\n nmlsIdentityControlsArray: this.formBuilder.array([this.createIdentityGroup()]),\n });\n }\n createIdentityGroup(id?: any): UntypedFormGroup {\n if (id) {\n return this.formBuilder.group({\n identifier: new UntypedFormControl(id.identifier, Validators.required),\n activeDate: new UntypedFormControl(id.activeDate, Validators.required),\n inActiveDate: new UntypedFormControl(id.inActiveDate, Validators.required),\n isNew: new UntypedFormControl(false),\n setDeleted: new UntypedFormControl(false),\n });\n } else {\n return this.formBuilder.group({\n identifier: new UntypedFormControl('', Validators.required),\n activeDate: new UntypedFormControl(new Date('1/1/1900'), Validators.required),\n inActiveDate: new UntypedFormControl(new Date('12/31/9999'), Validators.required),\n isNew: new UntypedFormControl(true),\n setDeleted: new UntypedFormControl(false),\n });\n }\n }\n getThisIsIsNewControl(type: string, index: number) {\n if (type == 'HMDA') return this.hmdaIdentityControlsArray[index].get('isNew');\n if (type == 'NMLS') return this.nmlsIdentityControlsArray[index].get('isNew');\n }\n getThisIdSetDeletedControl(type: string, index: number) {\n if (type == 'HMDA') return this.hmdaIdentityControlsArray[index].get('setDeleted');\n if (type == 'NMLS') return this.nmlsIdentityControlsArray[index].get('setDeleted');\n }\n getThisIdIdentityControl(type: string, index: number) {\n if (type == 'HMDA') return this.hmdaIdentityControlsArray[index].get('identifier');\n if (type == 'NMLS') return this.nmlsIdentityControlsArray[index].get('identifier');\n }\n getThisIdActiveDateControl(type: string, index: number) {\n if (type == 'HMDA') return this.hmdaIdentityControlsArray[index].get('activeDate');\n if (type == 'NMLS') return this.nmlsIdentityControlsArray[index].get('activeDate');\n }\n getThisIdInActiveDateControl(type: string, index: number) {\n if (type == 'HMDA') return this.hmdaIdentityControlsArray[index].get('inActiveDate');\n if (type == 'NMLS') return this.nmlsIdentityControlsArray[index].get('inActiveDate');\n }\n get hmdaIdentityControlsArray() {\n return (this.hmdaIdentityForm.get('hmdaIdentityControlsArray')).controls;\n }\n get nmlsIdentityControlsArray() {\n return (this.nmlsIdentityForm.get('nmlsIdentityControlsArray')).controls;\n }\n // insert blank identity\n addBlankIdentity(type: string) {\n type = type.toUpperCase();\n if (type == 'HMDA') {\n (this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray).push(\n this.createIdentityGroup()\n );\n this.hmdaIsEditing = true;\n this.editIdentities('HMDA');\n }\n if (type == 'NMLS') {\n (this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray).push(\n this.createIdentityGroup()\n );\n this.editIdentities('NMLS');\n }\n }\n // set identity for removal\n removeIdentity(type: string, index: number) {\n type = type.toUpperCase();\n if (type == 'HMDA') {\n if (\n (this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray)[\n index\n ].get('isNew') == true\n ) {\n (\n this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray\n ).removeAt(index);\n } else {\n (this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray)[\n index\n ].disable();\n (this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray)[\n index\n ]\n .get('setDelete')\n .setValue(true);\n }\n }\n if (type == 'NMLS') {\n if (\n (this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray)[\n index\n ].get('isNew') == true\n ) {\n (\n this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray\n ).removeAt(index);\n } else {\n (this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray)[\n index\n ].disable();\n (this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray)[\n index\n ]\n .get('setDelete')\n .setValue(true);\n }\n }\n }\n // submit identities for update/insert/removal\n submitIdentityForm(type: string) {\n let shortName = this.clientShortName;\n if (this.companyFullModel) shortName = this.companyFullModel.clientDetails.shortName;\n if (type == 'HMDA') {\n this.hmdaIdentityControlsArray.forEach((id, index) => {\n // delete\n if (this.getThisIdSetDeletedControl('HMDA', index).value) {\n this.clientService\n .deleteClientIdentifier(this.clientHmdaIdentities[index], shortName)\n .subscribe(\n () => {\n this.toastService.success('Identity deleted.');\n (\n this.hmdaIdentityForm.controls\n .hmdaIdentityControlsArray as UntypedFormArray\n ).removeAt(index);\n },\n () => {\n this.toastService.warning('Identity could not be deleted.');\n }\n );\n } else if (this.getThisIsIsNewControl('HMDA', index).value) {\n // new\n let c: ClientIdentifier = {} as ClientIdentifier;\n c.identifier = this.getThisIdIdentityControl('HMDA', index).value;\n c.identifierType = 'LEI';\n this.clientService.insertClientIdentifier(c, shortName).subscribe(\n () => {\n this.toastService.success('Identity added.');\n },\n () => {\n this.toastService.warning('Identity could not be added.');\n }\n );\n } else {\n // update\n let c: ClientIdentifierUpdate = {} as ClientIdentifierUpdate;\n c.identifier = this.getThisIdIdentityControl('HMDA', index).value;\n c.activeDate = this.getThisIdActiveDateControl('HMDA', index).value;\n c.inActiveDate = this.getThisIdInActiveDateControl('HMDA', index).value;\n c.identifierOld = this.clientHmdaIdentities[index].identifier;\n c.identifierType = 'LEI';\n this.clientService.updateClientIdentifier(c, shortName).subscribe(\n () => {\n this.toastService.success('Identity updated.');\n },\n () => {\n this.toastService.warning('Identity could not be deleted.');\n }\n );\n }\n });\n this.hmdaIsEditing = false;\n this.hmdaIdentityForm.disable();\n }\n if (type == 'NMLS') {\n this.nmlsIdentityControlsArray.forEach((id, index) => {\n // delete\n if (this.getThisIdSetDeletedControl('NMLS', index).value) {\n this.clientService\n .deleteClientIdentifier(this.clientNmlsIdentities[index], shortName)\n .subscribe(\n () => {\n this.toastService.success('Identity deleted.');\n (\n this.nmlsIdentityForm.controls\n .nmlsIdentityControlsArray as UntypedFormArray\n ).removeAt(index);\n },\n () => {\n this.toastService.warning('Identity could not be deleted.');\n }\n );\n } else if (this.getThisIsIsNewControl('NMLS', index).value) {\n // new\n let c: ClientIdentifier = {} as ClientIdentifier;\n c.identifier = this.getThisIdIdentityControl('NMLS', index).value;\n c.identifierType = 'NMLS';\n this.clientService.insertClientIdentifier(c, shortName).subscribe(\n () => {\n this.toastService.success('Identity added.');\n },\n () => {\n this.toastService.warning('Identity could not be added.');\n }\n );\n } else {\n // update\n let c: ClientIdentifierUpdate = {} as ClientIdentifierUpdate;\n c.identifier = this.getThisIdIdentityControl('NMLS', index).value;\n c.activeDate = this.getThisIdActiveDateControl('NMLS', index).value;\n c.inActiveDate = this.getThisIdInActiveDateControl('NMLS', index).value;\n c.identifierOld = this.clientNmlsIdentities[index].identifier;\n c.identifierType = 'NMLS';\n c.isActive = true;\n this.clientService.updateClientIdentifier(c, shortName).subscribe(\n () => {\n this.toastService.success('Identity updated.');\n },\n () => {\n this.toastService.warning('Identity could not be deleted.');\n }\n );\n }\n });\n this.nmlsIsEditing = false;\n this.nmlsIdentityForm.disable();\n }\n }\n // populate identity variables\n populateIdentityControls() {\n // setup arrays and clear forms\n this.clientHmdaIdentities = [];\n this.clientNmlsIdentities = [];\n this.compenSafeIdentifiers = [];\n this.hubSpotIdentifiers = [];\n (this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray).clear();\n (this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray).clear();\n // populate emptied arrays and form arrays\n if (this.companyFullModel) {\n this.companyFullModel.identifiers.forEach((id) => {\n const grp = this.formBuilder.group({\n identifier: new UntypedFormControl(id.identifier, Validators.required),\n isNew: new UntypedFormControl(false),\n });\n if (id.identifierType == 'LEI') {\n this.clientHmdaIdentities.push(id);\n (\n this.hmdaIdentityForm.controls.hmdaIdentityControlsArray as UntypedFormArray\n ).push(grp);\n } else if (id.identifierType == 'NMLS') {\n this.clientNmlsIdentities.push(id);\n (\n this.nmlsIdentityForm.controls.nmlsIdentityControlsArray as UntypedFormArray\n ).push(grp);\n } else if (id.identifierType == 'HubSpot') {\n this.hubSpotIdentifiers.push(id);\n } else if (id.identifierType == 'CompenSafe') {\n this.compenSafeIdentifiers.push(id);\n } else {\n console.log(\n 'Identifier type not defined: ' + id.identifierType + ' ' + id.identifier\n );\n }\n });\n this.nmlsIdentityForm.disable();\n this.hmdaIdentityForm.disable();\n }\n }\n}\n","import { ClientInformationInterface, ClientInformationSources } from \"../interfaces/client-data\";\n\nexport module IntegrationSourceHelper {\n export function setupSources(clientModel: ClientInformationInterface): ClientInformationSources {\n let clientInfo: ClientInformationSources;\n clientInfo = {\n primaryEmployeeSource: IntegrationSourceHelper.getPrimaryEmployeeSource(clientModel),\n primaryBranchSource: IntegrationSourceHelper.getPrimaryBranchSource(clientModel),\n technicalEmail: IntegrationSourceHelper.getTechnicalContactEmail(clientModel),\n primaryEmail: IntegrationSourceHelper.getPrimaryContactEmail(clientModel),\n idHmdaLEI: IntegrationSourceHelper.getHmdaLeiId(clientModel),\n idNMLS: IntegrationSourceHelper.getNmlsId(clientModel),\n idAnalytics: IntegrationSourceHelper.getIdAnalytics(clientModel),\n }\n return clientInfo;\n }\n\n export function getPrimaryEmployeeSource(clientModel: ClientInformationInterface): string {\n var result = clientModel.clientIntegrationSources?.find(\n (s) => s.isPrimaryForEmployeeIdentifier\n )?.description;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n\n export function getPrimaryBranchSource(clientModel: ClientInformationInterface): string {\n var result = clientModel.clientIntegrationSources?.find(\n (s) => s.isPrimaryForBranchIdentifier\n )?.description;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n\n export function getTechnicalContactEmail(clientModel: ClientInformationInterface): string {\n var result = clientModel.contacts?.find(\n (contact) => contact.contactTypeAbbr === 'Technical'\n )?.contactValue;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n\n export function getPrimaryContactEmail(clientModel: ClientInformationInterface): string {\n var result = clientModel.contacts?.find(\n (contact) => contact.contactTypeAbbr === 'Primary'\n )?.contactValue;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n\n export function getHmdaLeiId(clientModel: ClientInformationInterface): string {\n var result = clientModel.identifiers?.find((id) => id.identifierType === 'LEI')?.identifier;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n\n export function getNmlsId(clientModel: ClientInformationInterface): string {\n var result = clientModel.identifiers?.find((id) => id.identifierType === 'NMLS')?.identifier;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n \n export function getIdAnalytics(clientModel: ClientInformationInterface) {\n var result = clientModel.identifiers?.find((id) => id.identifierType === 'IdAnalytics')?.identifier;\n if(result) {\n return result;\n } else {\n return \"\";\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ClientIntegrationType } from '../interfaces/client-integration-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClientIntegrationTypeService {\n private serverUrl = 'https://' + window.location.host; // TODO Get url and version number from appsettings.\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/ClientIntegrationType/').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n\n getClientIntegrationTypes(): Observable {\n return this._http.get(this._url + 'GetClientIntegrationTypes');\n }\n}\n","\n
* {{ name }} is required
\n
\n * {{ name }} is too long\n
\n
\n * {{ name }} is too small\n
\n
\n * {{ name }} must not be equal to zero.\n
\n
\n * {{ control.value }} is not a valid email.\n
\n
\n * {{ control.value }} must be unique.\n
\n
\n * {{ control.value }} must be unique.\n
\n
\n * {{ control.value }} must be unique\n
\n
\n * Cannot enable zero padding after there is more than one entity or employee\n
\n
\n * {{ control.value }} must be padded to at least {{ optionalInput }} characters.\n
\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'validator',\n templateUrl: './validator.component.html',\n styleUrls: ['./validator.component.scss'],\n})\nexport class ValidatorComponent implements OnInit {\n @Input() control: UntypedFormControl;\n @Input() name: string;\n @Input() optionalInput: string = null;\n @Input() topOffset: number = 15;\n @Input() bottomOffset: number = 0;\n @Input() rightOffset: number = 0;\n @Input() leftOffset: number = 0;\n @Input() showOnTouch: boolean = false;\n @Input() errorMessageStyle = 'error-message';\n\n constructor() {}\n\n ngOnInit() {}\n}\n","
\n
Contacts
\n
\n
\n
\n Primary Contact Email\n
\n
\n {{ primaryEmail.value }}\n
\n
\n \n Primary Contact Email\n \n \n \n
\n
\n
\n
\n Technical Contact Email\n
\n
\n {{ technicalEmail.value }}\n
\n
\n \n Technical Contact Email\n \n \n \n
\n
\n
\n
","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core';\nimport {\n UntypedFormBuilder,\n UntypedFormControl,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport { ContactTypeModel } from 'app/modules/settings/interfaces/company-account-data';\nimport { ClientContactsService } from 'app/modules/settings/services/client-contacts.service';\nimport { ClientInformationSources } from 'app/modules/shared/interfaces/client-data';\n\n@Component({\n selector: 'client-edit-contacts',\n templateUrl: './client-edit-contacts.component.html',\n styleUrls: ['../../client-edit-screen.component.scss', './client-edit-contacts.component.scss'],\n})\nexport class ClientEditContactsComponent implements OnInit {\n initControlsFlag: boolean = false;\n contactTypes: ContactTypeModel[];\n\n @Input() form: UntypedFormGroup;\n @Input() clientInfoSources: ClientInformationSources;\n @Input() action: string;\n @Output() formGroupEvent = new EventEmitter();\n\n contacts: UntypedFormGroup;\n primaryEmail: UntypedFormControl;\n technicalEmail: UntypedFormControl;\n\n constructor(\n private clientContactService: ClientContactsService,\n private formBuilder: UntypedFormBuilder\n ) {}\n\n ngOnInit() {\n this.getPageData();\n this.constructGroup();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n setTimeout(() => {\n if (changes['form']?.currentValue?.controls?.hasOwnProperty('contacts')) {\n this.initControls();\n this.patchValues();\n this.initControlsFlag = true;\n }\n }, 0);\n }\n\n constructGroup() {\n let group: UntypedFormGroup = this.formBuilder.group({\n primaryEmail: ['', [Validators.email, Validators.maxLength(120)]],\n technicalEmail: ['', [Validators.email, Validators.maxLength(120)]],\n });\n\n this.formGroupEvent.emit(group);\n }\n\n initControls() {\n this.contacts = this.form.get('contacts') as UntypedFormGroup;\n this.primaryEmail = this.contacts.get('primaryEmail') as UntypedFormControl;\n this.technicalEmail = this.contacts.get('technicalEmail') as UntypedFormControl;\n }\n\n getPageData() {\n this.clientContactService.getContactTypes().subscribe(\n (types) => {\n this.contactTypes = types;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n patchValues() {\n this.contacts.patchValue(this.clientInfoSources);\n }\n}\n","
\n
Client Information
\n
\n \n \n Client Name\n \n \n \n\n \n \n Client Short Name\n \n \n \n\n \n ClientKey\n \n \n \n
\n
\n
Entity Classification
\n \n \n {{ entityClassification }}\n \n \n \n
\n
\n \n Customer Number\n \n \n \n \n Client Website\n \n \n \n\n \n \n HubSpot URL\n \n \n \n\n \n \n CompenSafe URL\n \n \n \n\n \n \n CompenSafe Company ID\n \n \n \n\n \n \n Data Swap Key\n \n \n\n \n
\n Contract Date\n \n \n \n
\n\n \n
\n Launch Date\n \n \n
\n\n \n
\n Loan Seed Date\n \n \n \n
\n\n \n
\n
Subscription Type
\n
\n {{ clientModel.clientDetails.subscriptionType }}\n
\n
\n \n \n
\n
\n\n \n
\n
NV Base
\n
\n {{ clientModel.clientDetails.nvLite == true ? 'Yes' : 'No' }}\n
\n
\n \n Yes\n \n No\n
\n
\n\n \n
\n
Authentication Method
\n
\n {{\n useSSO?.value === 'Both'\n ? 'Both'\n : useSSO?.value === 'false'\n ? 'Username and Password'\n : 'MSFT Azure AD'\n }}\n
\n
\n MSFT Azure AD\n Username and Password\n Both\n \n
\n
\n \n
\n
Use Hourly KPI
\n
\n {{ use_Hourly_KPI?.value == 'true' ? 'Enabled' : 'Disabled' }}\n
\n
\n \n Enable\n \n Disable\n
\n
\n
\n
\n
Active
\n \n \n
\n
\n
\n
\n
Login disabled
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n UntypedFormBuilder,\n UntypedFormControl,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport {\n ClientSubscriptionService,\n ClientSubscriptionType,\n} from 'app/modules/settings/services/client-subscription.service';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { ClientInformationInterface } from 'app/modules/shared/interfaces/client-data';\nimport { ClientsService } from 'app/modules/shared/services/clients.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\n\n@Component({\n selector: 'client-edit-details',\n templateUrl: './client-edit-details.component.html',\n styleUrls: ['../../client-edit-screen.component.scss', './client-edit-details.component.scss'],\n})\nexport class ClientEditDetailsComponent implements OnInit {\n initControlsFlag: boolean = false;\n subscriptionTypeListCopy: ClientSubscriptionType[];\n subscriptionTypeList: ClientSubscriptionType[];\n\n @Input() form: UntypedFormGroup;\n @Input() clientModel: ClientInformationInterface;\n @Input() action: string;\n @Output() formGroupEvent = new EventEmitter();\n\n clientDetails: UntypedFormGroup;\n clientKey: UntypedFormControl;\n fullName: UntypedFormControl;\n shortName: UntypedFormControl;\n hubSpotUrl: UntypedFormControl;\n compenSafeUrl: UntypedFormControl;\n contractDate: UntypedFormControl;\n goLiveDate: UntypedFormControl;\n loanSeedDate: UntypedFormControl;\n cS_CompanyID: UntypedFormControl;\n use_Hourly_KPI: UntypedFormControl;\n clientSubscriptionTypeKey: UntypedFormControl;\n useSSO: UntypedFormControl;\n companyURL: UntypedFormControl;\n is_nvlite: UntypedFormControl;\n isLoginDisabled: UntypedFormControl;\n isActive: UntypedFormControl;\n dataSwapKey: string;\n entityClassificationList: Array;\n entityClassification: UntypedFormControl;\n customerNumber: UntypedFormControl;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private clientsService: ClientsService,\n private reusableFunctions: ReusableFunctions,\n private toastService: ToastService,\n private clientSubscriptionService: ClientSubscriptionService\n ) {}\n\n ngOnInit() {\n this.getPageData();\n this.constructGroup();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Seems like this part is not hitting due to 'OnChanges' has not implemented on the header.\n // So this function can be removed.\n setTimeout(() => {\n if (changes['form']?.currentValue?.controls?.hasOwnProperty('clientDetails')) {\n this.initControls();\n if (this.action != 'Add') {\n this.patchValues();\n this.formatDates();\n }\n this.setDefaults();\n this.getAndSetSuggestedClientKey();\n this.initControlsFlag = true;\n }\n }, 0);\n }\n\n constructGroup() {\n let group: UntypedFormGroup = this.formBuilder.group({\n clientKey: ['', Validators.required],\n fullName: ['', [Validators.required, Validators.maxLength(100)]],\n shortName: ['', [Validators.required, Validators.maxLength(50)]],\n companyURL: ['', Validators.maxLength(200)],\n clientSubscriptionTypeKey: ['', Validators.required],\n contractDate: ['', Validators.required],\n goLiveDate: [''],\n loanSeedDate: ['', Validators.required],\n cS_CompanyID: [''],\n use_Hourly_KPI: [''],\n is_nvlite: ['false'],\n useSSO: ['true'],\n hubSpotUrl: ['', Validators.maxLength(150)],\n compenSafeUrl: ['', Validators.maxLength(150)],\n isLoginDisabled: ['false'],\n isActive: ['false'],\n entityClassification: ['', [Validators.required]],\n customerNumber: [''],\n });\n\n this.formGroupEvent.emit(group);\n }\n\n getPageData() {\n this.entityClassificationList = ['IMB', 'Bank', 'Credit Union', ''];\n this.clientSubscriptionService.getSubscriptionTypes().subscribe(\n (data) => {\n this.subscriptionTypeListCopy = data;\n this.subscriptionTypeList = this.setAvailableSubscriptionTypes();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n setAvailableSubscriptionTypes(): ClientSubscriptionType[] {\n if (this.is_nvlite.value == 'true') {\n return this.subscriptionTypeListCopy.filter((x) => x.nvLite == true);\n }\n\n return this.subscriptionTypeListCopy;\n }\n\n updateNvLiteSettings(event) {\n this.subscriptionTypeList = this.setAvailableSubscriptionTypes();\n let firstSubscriptionInList = this.subscriptionTypeList[0];\n this.clientSubscriptionTypeKey.setValue(\n firstSubscriptionInList.clientSubscriptionTypeKey.toString()\n );\n //this.clientModel.clientDetails.nvLite\n this.formGroupEvent.emit(this.clientDetails);\n }\n\n initControls() {\n this.clientDetails = this.form.get('clientDetails') as UntypedFormGroup;\n this.clientKey = this.clientDetails.get('clientKey') as UntypedFormControl;\n this.fullName = this.clientDetails.get('fullName') as UntypedFormControl;\n this.shortName = this.clientDetails.get('shortName') as UntypedFormControl;\n this.hubSpotUrl = this.clientDetails.get('hubSpotUrl') as UntypedFormControl;\n this.compenSafeUrl = this.clientDetails.get('compenSafeUrl') as UntypedFormControl;\n this.contractDate = this.clientDetails.get('contractDate') as UntypedFormControl;\n this.goLiveDate = this.clientDetails.get('goLiveDate') as UntypedFormControl;\n this.loanSeedDate = this.clientDetails.get('loanSeedDate') as UntypedFormControl;\n this.cS_CompanyID = this.clientDetails.get('cS_CompanyID') as UntypedFormControl;\n this.use_Hourly_KPI = this.clientDetails.get('use_Hourly_KPI') as UntypedFormControl;\n this.is_nvlite = this.clientDetails.get('is_nvlite') as UntypedFormControl;\n this.clientSubscriptionTypeKey = this.clientDetails.get(\n 'clientSubscriptionTypeKey'\n ) as UntypedFormControl;\n this.useSSO = this.clientDetails.get('useSSO') as UntypedFormControl;\n this.companyURL = this.clientDetails.get('companyURL') as UntypedFormControl;\n this.isLoginDisabled = this.clientDetails.get('isLoginDisabled') as UntypedFormControl;\n this.isActive = this.clientDetails.get('isActive') as UntypedFormControl;\n this.entityClassification = this.clientDetails.get(\n 'entityClassification'\n ) as UntypedFormControl;\n this.customerNumber = this.clientDetails.get('customerNumber') as UntypedFormControl;\n\n if (this.clientModel?.clientDetails?.lgDataSwapKey) {\n this.dataSwapKey = this.clientModel.clientDetails.lgDataSwapKey;\n } else {\n this.dataSwapKey = '';\n }\n }\n\n setDefaults() {\n this.setDefaultAuth();\n this.setDefaultHourlyKPI();\n this.setIsNvLite();\n this.setDefaultActiveStatus();\n }\n\n patchValues() {\n this.clientDetails.patchValue(this.clientModel.clientDetails);\n }\n\n /* Fetch the next available clientKey & set the form if action is \"Add\" */\n getAndSetSuggestedClientKey() {\n if (this.action == 'Add') {\n this.clientsService.getSuggestedClientKey().subscribe((res) => {\n if (res && res.suggestedKey) {\n this.clientKey.setValue(res.suggestedKey);\n }\n });\n }\n }\n\n setDefaultAuth() {\n if (this.action == 'Add') {\n this.useSSO.setValue('false');\n } else if (this.clientModel.clientDetails.useSSO == null) {\n this.useSSO.setValue('Both');\n } else {\n this.useSSO.setValue(this.clientModel.clientDetails.useSSO.toString());\n }\n }\n\n setDefaultHourlyKPI() {\n if (\n !this.clientModel.clientDetails ||\n this.clientModel.clientDetails.use_Hourly_KPI == null\n ) {\n this.use_Hourly_KPI.setValue('false');\n } else {\n this.use_Hourly_KPI.setValue(this.clientModel.clientDetails.use_Hourly_KPI.toString());\n }\n }\n\n setIsNvLite() {\n if (this.action == 'Add') {\n this.is_nvlite.setValue('false');\n } else if (this.clientModel.clientDetails.nvLite == null) {\n this.is_nvlite.setValue('false');\n } else {\n this.is_nvlite.setValue(this.clientModel.clientDetails.nvLite.toString());\n }\n }\n\n setDefaultActiveStatus() {\n if (this.action == 'Add') {\n this.isActive.setValue(true);\n this.isLoginDisabled.setValue(false);\n } else {\n this.isActive.setValue(this.clientModel.clientDetails.isActive);\n this.isLoginDisabled.setValue(this.clientModel.clientDetails.isLoginDisabled);\n }\n }\n\n /* Date Formatting */\n formatDates() {\n let contractDate: Date = this.clientModel.clientDetails.contractDate;\n let goLiveDate: Date = this.clientModel.clientDetails.goLiveDate;\n let loanSeedDate: Date = this.clientModel.clientDetails.loanSeedDate;\n\n if (contractDate) {\n contractDate = this.reusableFunctions.getDateFromDateTimeOffset(contractDate);\n this.clientModel.clientDetails.contractDate = contractDate;\n this.contractDate.setValue(contractDate);\n }\n\n if (goLiveDate) {\n goLiveDate = this.reusableFunctions.getDateFromDateTimeOffset(goLiveDate);\n this.clientModel.clientDetails.goLiveDate = goLiveDate;\n this.goLiveDate.setValue(goLiveDate);\n }\n\n if (loanSeedDate) {\n loanSeedDate = this.reusableFunctions.getDateFromDateTimeOffset(loanSeedDate);\n this.clientModel.clientDetails.loanSeedDate = loanSeedDate;\n this.loanSeedDate.setValue(loanSeedDate);\n }\n }\n\n updateShortName() {\n let clientShortName = this.shortName.value;\n this.clientsService.isClientShortNameUnique(clientShortName).subscribe(\n (data) => {\n if (data == true) {\n this.shortName.setErrors({ shortNameNotUnique: true });\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n updateClientKey() {\n let clientKey = this.clientKey.value;\n this.clientsService.isClientKeyUnique(clientKey).subscribe(\n (data) => {\n if (data == false) {\n this.clientKey.setErrors({ clientKeyNotUnique: true });\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n clickDisableAllUsers(event) {\n // this.toastService.resetAll();\n // if (event?.checked) {\n // this.toastService.warning(\n // 'Login will be disabled for: ' + this.fullName.value,\n // { dismiss: true, timeout: 4000 }\n // );\n // } else {\n // this.toastService.warning(\n // 'Login will be enabled for: ' + this.fullName.value,\n // { dismiss: true, timeout: 4000 }\n // );\n // }\n }\n}\n","
\n
Client Identities
\n
\n
\n
HMDA LEI
\n
\n {{ idHmdaLEI?.value }}\n
\n
\n \n HMDA LEI\n \n \n \n
\n
\n
\n
Client NMLS ID
\n
\n {{ idNMLS?.value }}\n
\n
\n \n Client NMLS ID\n \n \n \n
\n
\n
\n
Analytics ID
\n
\n {{ idAnalytics?.value }}\n
\n
\n \n Analytics ID\n \n \n \n
\n
\n
\n
\n
Employee Identities
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
NameIntegration FieldDescriptionActivePrimary For UI
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n isPrimaryForEmployeeIdentifier\n \n
\n
\n \n \n \n \n \n {{ identifierType.identifierType }}\n \n \n
\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n UntypedFormArray,\n UntypedFormBuilder,\n UntypedFormControl,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport {\n ClientEmployeeIdentifier,\n ClientIdentifierType,\n ClientInformationSources,\n} from 'app/modules/shared/interfaces/client-data';\nimport { ClientsService } from 'app/modules/shared/services/clients.service';\n\n@Component({\n selector: 'client-edit-identities',\n templateUrl: './client-edit-identities.component.html',\n styleUrls: [\n '../../client-edit-screen.component.scss',\n './client-edit-identities.component.scss',\n ],\n})\nexport class ClientEditIdentitiesComponent implements OnInit {\n initControlsFlag: boolean = false;\n clientIdentifierTypes: ClientIdentifierType[];\n clientIdentifierTypesNonEntry: ClientEmployeeIdentifier[];\n currentEmployeeIdentifiers: ClientEmployeeIdentifier[] = [];\n\n @Input() form: UntypedFormGroup;\n @Input() clientInfoSources: ClientInformationSources;\n @Input() action: string;\n @Input() clientKey: number;\n @Output() formGroupEvent = new EventEmitter();\n\n identifiers: UntypedFormGroup;\n idNMLS: UntypedFormControl;\n idAnalytics: UntypedFormControl;\n idHmdaLEI: UntypedFormControl;\n employeeIdentifiers: UntypedFormArray;\n\n constructor(private clientsService: ClientsService, private formBuilder: UntypedFormBuilder) {}\n\n ngOnInit() {\n this.getPageData();\n this.constructGroup();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n setTimeout(() => {\n let hasControls =\n changes['form']?.currentValue?.controls?.hasOwnProperty('identifiers');\n if (hasControls) {\n this.initControls();\n this.patchValues();\n this.initControlsFlag = true;\n }\n\n if (this.clientKey && this.action != 'Add') {\n this.clientsService.getClientIdentifierTypeByClientKey(this.clientKey).subscribe(\n (data) => {\n this.currentEmployeeIdentifiers = data;\n this.patchEmployeeIdentifiers();\n },\n (error) => {\n throw new Error(error);\n }\n );\n\n this.clientsService\n .getClientIdentifierTypeSelectNonEntryByClientKey(this.clientKey)\n .subscribe(\n (data) => {\n this.clientIdentifierTypesNonEntry = data;\n },\n (error) => {\n throw new Error(error);\n }\n );\n } else {\n this.clientsService.getClientIdentifierType().subscribe(\n (data) => {\n this.currentEmployeeIdentifiers = data.slice(0, 1);\n this.currentEmployeeIdentifiers[0].isPrimaryForEmployeeIdentifier = true;\n this.currentEmployeeIdentifiers[0].integrationSourceDesc = 'Default';\n this.currentEmployeeIdentifiers.forEach((identifier) => {\n identifier.isActive = true;\n });\n this.clientIdentifierTypesNonEntry = data.slice(1, data.length);\n this.patchEmployeeIdentifiers();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }, 0);\n }\n\n constructGroup() {\n let group: UntypedFormGroup = this.formBuilder.group({\n idHmdaLEI: ['', Validators.maxLength(20)],\n idNMLS: ['', Validators.maxLength(12)],\n idAnalytics: ['', Validators.maxLength(20)],\n employeeIdentifiers: this.formBuilder.array([]),\n });\n\n this.formGroupEvent.emit(group);\n }\n\n initControls() {\n this.identifiers = this.form.get('identifiers') as UntypedFormGroup;\n this.idNMLS = this.identifiers.get('idNMLS') as UntypedFormControl;\n this.idAnalytics = this.identifiers.get('idAnalytics') as UntypedFormControl;\n this.idHmdaLEI = this.identifiers.get('idHmdaLEI') as UntypedFormControl;\n this.employeeIdentifiers = this.identifiers.get('employeeIdentifiers') as UntypedFormArray;\n this.clientKey = this.form.get('clientDetails').get('clientKey').value;\n }\n\n getPageData() {\n this.clientsService.getClientIdentifierTypes().subscribe(\n (types) => {\n this.clientIdentifierTypes = types;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n patchValues() {\n this.identifiers.patchValue(this.clientInfoSources);\n }\n\n patchEmployeeIdentifiers() {\n let employeeIdentifierGroup: UntypedFormGroup;\n\n this.employeeIdentifiers.clear();\n this.currentEmployeeIdentifiers.forEach((employeeIdentifier) => {\n employeeIdentifierGroup = this.buildEmployeeIdentifiersGroup(employeeIdentifier);\n this.employeeIdentifiers.push(employeeIdentifierGroup);\n });\n }\n\n buildEmployeeIdentifiersGroup(employeeIdentifier: ClientEmployeeIdentifier) {\n return this.formBuilder.group({\n identifierType: [employeeIdentifier.identifierType],\n identifierDescription: [employeeIdentifier.identifierDescription],\n integrationSourceDesc: [employeeIdentifier.integrationSourceDesc, Validators.required],\n isActive: [employeeIdentifier.isActive],\n isPrimaryForEmployeeIdentifier: [employeeIdentifier.isPrimaryForEmployeeIdentifier],\n clientIntegrationSourceKey: [employeeIdentifier.clientIntegrationSourceKey],\n });\n }\n\n clickIdentifierType(index: any) {\n let selectedIdentity = this.clientIdentifierTypesNonEntry[index];\n let employeeIdentifierGroup = this.buildEmployeeIdentifiersGroup(selectedIdentity);\n this.clientIdentifierTypesNonEntry.splice(index, 1);\n this.employeeIdentifiers.push(employeeIdentifierGroup);\n }\n\n clickIsPrimary(control: any) {\n if (control._disabled == false && control._checked == false) {\n this.employeeIdentifiers.controls.forEach((employeeIdentifier) => {\n employeeIdentifier.get('isPrimaryForEmployeeIdentifier').setValue(false);\n });\n }\n }\n}\n","export interface ClientIntegration {\n clientIntegrationKey: number;\n clientIntegrationType?: string;\n integrationTypeKey: number;\n integrationActive: boolean;\n zeroPaddedIdentifier?: boolean;\n zeroPaddedLen?: number;\n new_Records_Only?: boolean;\n compensafeExport?: boolean;\n isNew?: boolean;\n integrationOption?: IntegrationOptionType;\n}\n\nexport interface IClientIntegrationParameters {\n clientKey: string;\n integrationTypeKey: string;\n clientIntegrationKey: string;\n integrationActive: string;\n zeroPaddedIdentifier?: string;\n zeroPaddedLen?: string;\n new_Records_Only?: 'true' | 'false';\n compensafeExport?: string;\n action: string;\n integrationOption?: IntegrationOptionType;\n}\n\nexport enum IntegrationOptionType {\n 'Compensafe' = 'Compensafe',\n 'LosTalker' = 'Los Talker',\n 'None' = 'None',\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { HierarchyEntity } from 'app/modules/settings/interfaces/hierarchy-data';\nimport { ClientIntegrationSource, Employee } from '../interfaces/client-data';\n\nexport module EditRequirementsValidators {\n let originalSource: string = '';\n export function SourceNameUnique(sources: ClientIntegrationSource[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n // Get the original source by checking the field when it has not been touched\n if (control.pristine == true) {\n originalSource = control.value;\n }\n\n if (!control || !control.value) {\n return null;\n }\n\n let newSourceName = control.value;\n let existingSource = sources?.find((source) => source.description == newSourceName);\n if (newSourceName && existingSource && existingSource.description != originalSource) {\n return { notUnique: true };\n }\n };\n }\n\n export function ZeroPadding(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control || !control.value) {\n return null;\n }\n\n if(control.value == 0) {\n return { hasZero: true };\n }\n };\n }\n \n export function ZeroPaddingEntityRule(employees: Employee[], entities: HierarchyEntity[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control || !control.value) {\n return null;\n }\n\n if((employees?.length > 1 || entities?.length > 1) && control.value == 'Yes') {\n return { zeroPaddingEntityRule: true };\n }\n };\n }\n}\n","
\n \n \n
\n
\n \n
Integration Settings
\n
\n
\n
\n \n \n \n
\n
\n
\n Ingest\n {{ integration.get('clientIntegrationType').value }}\n
\n \n \n {{ val }}\n \n \n\n \n \n {{ val }}\n \n \n
\n
\n {{ getIngestTitle(integration) }}\n
\n
\n \n
\n
\n Zero Padded Identifier\n
\n \n \n {{ val }}\n \n \n
\n
\n {{ getZeroPaddedIdentifierTitle(integration) }}\n
\n
\n \n \n
Zero Padded Length
\n \n
\n \n \n
\n
\n Import from Compensafe\n
\n \n \n {{ val }}\n \n \n
\n
\n {{ getCSExportTitle(integration) }}\n
\n
\n \n
\n
\n Handling for existing records\n
\n \n \n {{ val }}\n \n \n
\n
\n {{ getXMLExistingSelectTitle(integration) }}\n
\n
\n \n \n \n \n
\n \n \n \n \n \n \n\n
\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport {\n ClientIntegration,\n IntegrationOptionType,\n} from 'app/modules/settings/interfaces/client-integration';\nimport { ClientIntegrationType } from 'app/modules/settings/interfaces/client-integration-type';\nimport { ClientIntegrationTypeService } from 'app/modules/settings/services/client-integration-type.service';\nimport { ClientIntegrationService } from 'app/modules/settings/services/client-integration.service';\nimport { ClientSubscriptionType } from 'app/modules/settings/services/client-subscription.service';\nimport { HierarchyService } from 'app/modules/settings/services/hierarchy.service';\nimport { IntegrationSourceHelper } from 'app/modules/shared/classes/client-data';\nimport {\n ClientInformationInterface,\n ClientInformationSources,\n IntegrationSource,\n} from 'app/modules/shared/interfaces/client-data';\nimport { EmployeeService } from 'app/modules/shared/services/employee.service';\nimport { EditRequirementsValidators } from 'app/modules/shared/Validators/client-edit-requirements.validator';\n\n@Component({\n selector: 'client-edit-integrations',\n templateUrl: './client-edit-integrations.component.html',\n styleUrls: [\n '../../client-edit-screen.component.scss',\n './client-edit-integrations.component.scss',\n ],\n})\nexport class ClientEditIntegrationsComponent implements OnInit, OnChanges {\n initControlsFlag: boolean = false;\n subscriptionTypeList: ClientSubscriptionType[];\n\n @Input() form: UntypedFormGroup;\n @Input() clientModel: ClientInformationInterface;\n @Input() clientInfoSources: ClientInformationSources;\n @Input() action: string;\n @Input() isNVLite: boolean;\n @Output() formGroupEvent = new EventEmitter();\n\n integrationSourceList: IntegrationSource[];\n currentIntegrations: ClientIntegration[];\n clientIntegrationTypes: ClientIntegrationType[];\n integrations: UntypedFormGroup;\n integrationSettings: UntypedFormGroup;\n integrationsArray: UntypedFormArray;\n integrationOptions: Array;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private clientIntegrationService: ClientIntegrationService,\n private clientIntegrationTypeService: ClientIntegrationTypeService,\n private employeeService: EmployeeService,\n private hierarchyService: HierarchyService\n ) {}\n\n ngOnInit() {\n this.integrationOptions = [\n IntegrationOptionType.Compensafe,\n IntegrationOptionType.LosTalker,\n IntegrationOptionType.None,\n ];\n this.constructGroup();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n setTimeout(() => {\n let hasControls =\n changes['form']?.currentValue?.controls?.hasOwnProperty('integrations');\n if (hasControls || changes.isNVLite) {\n this.initControls();\n this.patchValues();\n this.initControlsFlag = true;\n }\n }, 0);\n }\n\n constructGroup() {\n let group: UntypedFormGroup = this.formBuilder.group({\n integrationSettings: this.formBuilder.group({\n integrationsArray: this.formBuilder.array([]),\n }),\n });\n\n this.formGroupEvent.emit(group);\n }\n\n initControls() {\n this.integrations = this.form.get('integrations') as UntypedFormGroup;\n this.integrationSettings = this.integrations.get('integrationSettings') as UntypedFormGroup;\n this.integrationsArray = this.integrationSettings.get(\n 'integrationsArray'\n ) as UntypedFormArray;\n }\n\n getPageData() {\n if (this.action != 'Add') {\n // Get all employees\n this.employeeService\n .doEmployeesExistForClient(this.clientModel.clientDetails.shortName)\n .subscribe(\n (data) => {\n if (data) {\n this.integrationsArray.controls.forEach((array) => {\n array.get('zeroPaddedSelect').disable();\n array.get('zeroPaddedLen').disable();\n });\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n\n // Get all hierarchy entities\n this.hierarchyService\n .doHierarchyEntitiesExistForClient(this.clientModel.clientDetails.shortName)\n .subscribe(\n (data) => {\n if (data) {\n this.integrationsArray.controls.forEach((array) => {\n array.get('zeroPaddedSelect').disable();\n array.get('zeroPaddedLen').disable();\n });\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n }\n\n setIntegrationTypes() {\n this.clientIntegrationTypeService.getClientIntegrationTypes().subscribe(\n (data) => {\n this.clientIntegrationTypes = data;\n if (this.action !== 'Add') {\n this.setIntegrationFields();\n } else {\n this.addIntegrationsForSource();\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n patchValues() {\n if (this.action !== 'Add') {\n this.clientInfoSources = IntegrationSourceHelper.setupSources(this.clientModel); // Populate a helper data model for patching the form controls\n } else {\n this.clientModel.clientIntegrationSources = [];\n }\n this.setIntegrationTypes();\n\n if (this.action !== 'Add') {\n this.integrations.patchValue(this.clientInfoSources);\n }\n }\n\n patchIntegrations() {\n this.integrationsArray.clear();\n\n if (this.action != 'Add') {\n let clientKeyValue = this.form.get('clientDetails').get('clientKey').value;\n this.clientIntegrationService.getClientIntegrations(clientKeyValue).subscribe(\n (data) => {\n this.currentIntegrations = data;\n this.populateIntegrationArray();\n },\n (error) => {\n throw new Error(error);\n }\n );\n } else {\n this.populateIntegrationArray();\n }\n }\n\n populateIntegrationArray() {\n this.clientIntegrationTypes.forEach((integrationType) => {\n let currentIntegration = this.currentIntegrations.find(\n (integration) =>\n integrationType.clientIntegrationTypeKey == integration.integrationTypeKey\n );\n\n if (currentIntegration) {\n let integrationValues = this.patchIntegrationValues(\n currentIntegration,\n integrationType\n );\n\n if (\n (this.isNVLite && integrationType?.integrationType === 'Loans') ||\n this.isNVLite === null ||\n this.isNVLite === false\n ) {\n this.integrationsArray.push(integrationValues);\n }\n }\n });\n }\n\n patchIntegrationValues(\n integration: ClientIntegration,\n clientIntegrationType: ClientIntegrationType\n ) {\n let ingestOption = integration.integrationActive ? 'Yes' : 'No';\n let isLoansIngest = clientIntegrationType.integrationType === 'Loans';\n if (isLoansIngest) {\n let integrationOption = integration.integrationOption;\n if (!integrationOption || (integrationOption && integrationOption.toString() === '')) {\n ingestOption = 'None';\n } else {\n ingestOption = integration.integrationOption?.toString();\n }\n }\n\n let zeroPaddedActive = integration.zeroPaddedIdentifier ? 'Yes' : 'No';\n let new_Records_Only = integration.new_Records_Only ? 'Ignore' : 'Update';\n let compensafeExport = integration.compensafeExport ? 'Yes' : 'No';\n\n return this.formBuilder.group({\n clientIntegrationKey: [integration.clientIntegrationKey],\n clientIntegrationType: [clientIntegrationType.integrationType],\n integrationTypeKey: [],\n ingestSelect: [ingestOption],\n isLoansIngest: isLoansIngest,\n csExportSelect: [compensafeExport],\n xmlExistingSelect: [new_Records_Only],\n zeroPaddedSelect: [zeroPaddedActive],\n zeroPaddedLen: [integration.zeroPaddedLen, EditRequirementsValidators.ZeroPadding()],\n useZeroPaddedSelect: [clientIntegrationType.useZeroPadding],\n useCSExportSelect: [clientIntegrationType.useCompensafeExport],\n useXMLExistingSelect: [clientIntegrationType.new_Records_Only],\n });\n }\n\n filteredBranchSources() {\n if (this.integrationSourceList && this.clientModel.clientIntegrationSources) {\n let sourceTypeList: string[] = this.integrationSourceList\n .filter((source) => source.canBePrimaryForBranch == true)\n .map((source) => source.integrationSource); // Filter out possible primary source types\n\n return this.clientModel.clientIntegrationSources.filter(\n (source) =>\n sourceTypeList.includes(source.source) &&\n !source.isAlternateForEmployeeIdentifier\n );\n }\n }\n\n filteredEmployeeSources() {\n if (this.integrationSourceList && this.clientModel.clientIntegrationSources) {\n let sourceTypeList: string[] = this.integrationSourceList\n .filter((source) => source.canBePrimaryForEmployee == true)\n .map((source) => source.integrationSource); // Filter out possible primary source types\n\n return this.clientModel.clientIntegrationSources.filter(\n (source) =>\n sourceTypeList.includes(source.source) &&\n !source.isAlternateForEmployeeIdentifier\n );\n }\n }\n\n addIntegrationsForSource() {\n let clientIntegration: ClientIntegration;\n\n this.currentIntegrations = [];\n this.clientIntegrationTypes.forEach((type) => {\n clientIntegration = {\n clientIntegrationKey: 0,\n integrationActive: false,\n integrationTypeKey: type.clientIntegrationTypeKey,\n zeroPaddedIdentifier: false,\n zeroPaddedLen: null,\n new_Records_Only: false,\n compensafeExport: false,\n isNew: true,\n };\n\n this.currentIntegrations.push(clientIntegration);\n });\n\n this.setIntegrationFields();\n }\n\n setIntegrationFields() {\n this.patchIntegrations();\n this.getPageData();\n }\n\n getIngestTitle(integration: any) {\n let inputWord = this.getInputWord(integration);\n if (inputWord.charAt(inputWord.length - 1) == 's') {\n inputWord = inputWord.slice(0, -1);\n }\n let yes = 'yes';\n let no = 'no';\n let isLoanIngest = integration?.controls?.clientIntegrationType?.value === 'Loans';\n if (isLoanIngest) {\n yes = 'Compensafe or LOS Talker';\n no = 'None';\n }\n let tooltipTitle = `If ${yes} is selected, all inbound ${inputWord} XML messages will be processed. \\\n Choose ${no} to stop processing inbound XML messages.`;\n return tooltipTitle;\n }\n\n getZeroPaddedIdentifierTitle(integration: any) {\n let inputWord = this.getInputWord(integration);\n if (inputWord.charAt(inputWord.length - 1) == 's') {\n inputWord = inputWord.slice(0, -1);\n }\n let tooltipTitle = `If yes is selected, ${inputWord} identifiers will be zero padded to minimum length. \\\n A field will appear to define this length.`;\n return tooltipTitle;\n }\n\n getCSExportTitle(integration: any) {\n let inputWord = this.getInputWord(integration);\n let tooltipTitle = `If yes is selected, Mortgage Analytics will look to CompenSafe on a nightly basis to import ${inputWord}.`;\n return tooltipTitle;\n }\n\n getXMLExistingSelectTitle(integration: any) {\n let inputWord = this.getInputWord(integration);\n if (inputWord.charAt(inputWord.length - 1) == 's') {\n inputWord = inputWord.slice(0, -1);\n }\n let tooltipTitle = `If ignore is selected, we'll only do nothing when an XML message is received with an ${inputWord} \\\n identifier that is already in the database. If Update is selected, we'll update that record according to the message.`;\n return tooltipTitle;\n }\n\n getInputWord(integration: any) {\n let integrationType = integration.controls.clientIntegrationType.value;\n let inputWord = integrationType;\n return inputWord;\n }\n}\n","
\n
\n {{ action }} \n\n Client Information\n — {{ clientModel.clientDetails.shortName }}\n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n\n \n
\n \n \n \n \n   \n \n \n \n   \n \n \n
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { MatTabGroup } from '@angular/material/tabs';\nimport { IntegrationSourceHelper } from 'app/modules/shared/classes/client-data';\nimport {\n AccountDetails,\n ClientIdentifier,\n ClientInformationInterface,\n ClientInformationSources,\n} from 'app/modules/shared/interfaces/client-data';\nimport { ClientsService } from 'app/modules/shared/services/clients.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { IClientIntegrationParameters } from '../../interfaces/client-integration';\nimport { ClientIntegrationType } from '../../interfaces/client-integration-type';\nimport { ContactModel } from '../../interfaces/company-account-data';\nimport { ClientIntegrationTypeService } from '../../services/client-integration-type.service';\nimport { ClientIntegrationService } from '../../services/client-integration.service';\n\n@Component({\n selector: 'client-edit-screen',\n templateUrl: './client-edit-screen.component.html',\n styleUrls: ['./client-edit-screen.component.scss'],\n})\nexport class ClientEditScreenComponent implements OnInit {\n @Input() action: 'View' | 'Add' | 'Edit';\n @Input() clientModel: ClientInformationInterface;\n @Output() updatePage = new EventEmitter(); // pass whether it updated or not\n\n clientInfoSources: ClientInformationSources;\n @ViewChild('upsertTabBar') upsertTabBar: MatTabGroup;\n tabActiveIndex: number = 0;\n form: UntypedFormGroup;\n clientKey: number;\n\n clientIntegrationTypes: ClientIntegrationType[];\n isNVLite: boolean;\n\n constructor(\n private clientsService: ClientsService,\n private clientIntegrationService: ClientIntegrationService,\n private clientIntegrationTypeService: ClientIntegrationTypeService,\n private toastService: ToastService,\n private formBuilder: UntypedFormBuilder\n ) {}\n\n ngOnInit() {\n this.form = this.formBuilder.group({});\n this.getClientIntegrationTypes();\n if (this.action !== 'Add') {\n this.clientInfoSources = IntegrationSourceHelper.setupSources(this.clientModel); // Populate a helper data model for patching the form controls\n this.getAndSetSuggestedClientKey();\n } else {\n this.isNVLite = false;\n }\n }\n\n setIsNVBase() {\n if (this.action === 'Add') {\n let is_nvlite = this.form.get('clientDetails').get('is_nvlite').value;\n this.isNVLite = is_nvlite === 'true';\n } else if (this.clientModel?.clientDetails) {\n this.isNVLite = this.clientModel.clientDetails.nvLite;\n } else {\n this.isNVLite = false;\n }\n }\n\n buildDetailsGroup(group: UntypedFormGroup) {\n this.form.addControl('clientDetails', group);\n this.setIsNVBase();\n }\n\n buildContactsGroup(group: UntypedFormGroup) {\n this.form.addControl('contacts', group);\n }\n\n buildIdentifiersGroup(group: UntypedFormGroup) {\n this.form.addControl('identifiers', group);\n }\n\n buildIntegrationsGroup(group: UntypedFormGroup) {\n this.form.addControl('integrations', group);\n }\n\n closeForm() {\n this.form.reset();\n this.sendResultToParent(false);\n }\n\n // TODO: Break this out into more functions\n onSubmit() {\n this.form.markAsPristine();\n let formData = this.form.getRawValue();\n let clientDetails = formData.clientDetails;\n\n let useSSOValue = this.form.get('clientDetails').get('useSSO').value;\n let useHourlyKPIValue = this.form.get('clientDetails').get('use_Hourly_KPI').value;\n\n clientDetails.useSSO =\n useSSOValue === 'Both' ? null : useSSOValue === 'true' ? true : false;\n clientDetails.use_Hourly_KPI = useHourlyKPIValue === 'false' ? false : true;\n clientDetails.clientSubscriptionTypeKey = +clientDetails.clientSubscriptionTypeKey;\n\n clientDetails.nvLite = clientDetails.is_nvlite == 'true' ? true : false;\n\n let loanSeedDateValue = this.form.get('clientDetails').get('loanSeedDate').value;\n clientDetails.isActive = this.form.get('clientDetails').get('isActive').value;\n clientDetails.isLoginDisabled = this.form.get('clientDetails').get('isLoginDisabled').value;\n\n this.formatClientDates(formData);\n formData.clientDetails.loanSeedDate = loanSeedDateValue;\n\n if (clientDetails && clientDetails.clientKey) {\n clientDetails.clientKey = parseInt(clientDetails.clientKey);\n }\n let primaryEmailValue = this.form.get('contacts').get('primaryEmail').value;\n let technicalEmailValue = this.form.get('contacts').get('technicalEmail').value;\n let idNMLSValue = this.form.get('identifiers').get('idNMLS').value;\n let idAnalytics = this.form.get('identifiers').get('idAnalytics').value;\n let idHmdaLEIValue = this.form.get('identifiers').get('idHmdaLEI').value;\n\n let employeeIdentifiersArray = [];\n let employeeIdentifiers = this.form.get('identifiers').get('employeeIdentifiers')[\n 'controls'\n ];\n employeeIdentifiers.forEach((employeeIdentifier) => {\n let patchedIdentifier = {\n identifierDescription: employeeIdentifier.controls.identifierDescription.value,\n identifierType: employeeIdentifier.controls.identifierType.value,\n integrationSourceDesc: employeeIdentifier.controls.integrationSourceDesc.value,\n isActive: employeeIdentifier.controls.isActive.value,\n isPrimaryForEmployeeIdentifier:\n employeeIdentifier.controls.isPrimaryForEmployeeIdentifier.value,\n clientIntegrationSourceKey:\n employeeIdentifier.controls.clientIntegrationSourceKey.value,\n };\n employeeIdentifiersArray.push(patchedIdentifier);\n });\n\n // Format a data object with the values from the form\n let savedClient: ClientInformationInterface = {\n action: this.action,\n clientDetails: clientDetails,\n contacts: this.formatContacts(primaryEmailValue, technicalEmailValue),\n identifiers: this.formatIdentities(idNMLSValue, idHmdaLEIValue, idAnalytics),\n clientIntegrationSources: this.clientModel.clientIntegrationSources,\n employeeIdentifiers: employeeIdentifiersArray, // TODO: Add identifiers here\n };\n\n this.clientsService.upsertClient(savedClient).subscribe(\n () => {\n this.uploadIntegrations(clientDetails);\n this.toastService.success('Client saved.');\n this.sendResultToParent(true);\n },\n (response) => {\n this.toastService.warning('Problem saving client.');\n throw new Error(response);\n }\n );\n }\n\n uploadIntegrations(clientDetails: AccountDetails) {\n let arrayControls = this.form\n .get('integrations')\n .get('integrationSettings')\n .get('integrationsArray')['controls'];\n\n let currentIntegrations = [];\n arrayControls.forEach((control) => {\n let integrationType = control.controls.clientIntegrationType.value;\n let ingestSelect = control.controls.ingestSelect.value;\n\n let patchedControl = {\n clientIntegrationKey: control.controls.clientIntegrationKey.value,\n clientIntegrationType: integrationType,\n ingestSelect: control.controls.ingestSelect.value,\n csExportSelect: control.controls.csExportSelect.value,\n xmlExistingSelect: control.controls.xmlExistingSelect.value,\n zeroPaddedSelect: control.controls.zeroPaddedSelect.value,\n zeroPaddedLen: control.controls.zeroPaddedLen.value,\n integrationOption: ingestSelect,\n };\n currentIntegrations.push(patchedControl);\n });\n this.assignIntegrationTypeKeys(currentIntegrations);\n let parameters: IClientIntegrationParameters;\n currentIntegrations.forEach((integration) => {\n parameters = {\n action: this.action,\n clientKey: clientDetails.clientKey.toString(),\n integrationTypeKey: integration.integrationTypeKey.toString(),\n clientIntegrationKey: integration.clientIntegrationKey?.toString(),\n integrationActive: integration.ingestSelect,\n zeroPaddedIdentifier: integration.zeroPaddedSelect,\n zeroPaddedLen: integration.zeroPaddedLen\n ? integration.zeroPaddedLen.toString()\n : '',\n new_Records_Only: integration.xmlExistingSelect,\n compensafeExport: integration.csExportSelect,\n integrationOption: integration.integrationOption,\n };\n this.clientIntegrationService.upsertClientIntegration(parameters).subscribe(\n (data) => {},\n (error) => {\n throw new Error(error);\n }\n );\n });\n }\n\n /* Converts type names to type keys on client integrations */\n assignIntegrationTypeKeys(currentIntegrations: any[]) {\n for (let integration of currentIntegrations) {\n let integrationType = this.clientIntegrationTypes.find(\n (type) => type.integrationType == integration.clientIntegrationType\n );\n integration.integrationTypeKey = integrationType.clientIntegrationTypeKey;\n }\n }\n\n sendResultToParent(value: boolean) {\n this.updatePage.emit({ result: value });\n }\n\n formatContacts(primary: string, techAdmin: string): ContactModel[] {\n const data: ContactModel[] = [];\n data.push({\n contactTypeAbbr: 'Primary',\n contactType: 'Primary Contact',\n contactValue: primary,\n });\n data.push({\n contactTypeAbbr: 'Technical',\n contactType: 'Technical Admin',\n contactValue: techAdmin,\n });\n return data;\n }\n\n formatIdentities(nmls: string, lei: string, idAnalytics): ClientIdentifier[] {\n const data: ClientIdentifier[] = [];\n data.push({\n identifierType: 'NMLS',\n identifier: nmls,\n });\n data.push({\n identifierType: 'LEI',\n identifier: lei,\n });\n data.push({\n identifierType: 'IdAnalytics',\n identifier: idAnalytics,\n });\n return data;\n }\n\n formatClientDates(formValue: any) {\n try {\n formValue.clientDetails.goLiveDate =\n formValue.clientDetails.goLiveDate == '' ||\n formValue.clientDetails.goLiveDate.length < 3\n ? null\n : formValue.clientDetails.goLiveDate;\n\n formValue.clientDetails.loanSeedDate =\n formValue.clientDetails.loanSeedDate == '' ||\n formValue.clientDetails.loanSeedDate < 3\n ? null\n : formValue.clientDetails.loanSeedDate;\n } catch (e) {\n formValue.clientDetails.goLiveDate = null;\n formValue.clientDetails.loanSeedDate = null;\n }\n }\n\n tabChangeHandler(event) {\n this.tabActiveIndex = event.index;\n }\n\n isActiveTab(index: number) {\n return this.tabActiveIndex === index;\n }\n\n /* Fetch the next available clientKey & set the form if action is \"Add\" */\n getAndSetSuggestedClientKey() {\n if (this.action == 'Add') {\n this.clientsService.getSuggestedClientKey().subscribe((res) => {\n this.clientKey = res.suggestedKey;\n });\n }\n }\n\n getClientIntegrationTypes() {\n this.clientIntegrationTypeService.getClientIntegrationTypes().subscribe(\n (data) => {\n this.clientIntegrationTypes = data;\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n isSaveDisabled() {\n return (\n (this.form.get('clientDetails') && !this.form.get('clientDetails').valid) ||\n (this.form.get('contacts') && !this.form.get('contacts').valid) ||\n (this.form.get('identifiers') && !this.form.get('identifiers').valid) ||\n (this.form.get('integrations') && !this.form.get('integrations').valid)\n );\n }\n}\n","\n \n \n
Clients
\n
\n
\n \n Find Client\n\n \n search\n \n
\n\n
\n \n \n \n
\n
\n \n
\n
\n\n
\n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n {{\n calculateStatus(\n record.activeDate,\n record.inActiveDate,\n record.isActive\n )\n }}\n
\n
\n \n \n \n
\n {{ record.goLiveDate | date: 'MM/dd/yyyy':'UTC' }}\n
\n
\n \n \n \n
\n {{ record.activeDate | date: 'MM/dd/yyyy':'UTC' }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n
\n","import { Component, OnInit, Input, HostListener } from '@angular/core';\nimport { formatDate } from '@angular/common';\nimport { ClientsService } from '../../../shared/services/clients.service';\nimport { ClientContactsService } from '../../services/client-contacts.service';\nimport { AccountDetails, ClientInformationInterface } from '../../../shared/interfaces/client-data';\nimport {\n GridComponent,\n GridDataResult,\n PageChangeEvent,\n CellClickEvent,\n} from '@progress/kendo-angular-grid';\nimport { SortDescriptor, orderBy, filterBy } from '@progress/kendo-data-query';\nimport { Observable } from 'rxjs';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { forkJoin } from 'rxjs';\nimport { IntegrationSourceService } from '../../services/integration-source.service';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from 'app/modules/shared/interfaces/no-data';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\n\n@Component({\n selector: 'app-lba-clients',\n templateUrl: './lba-clients.component.html',\n styleUrls: ['./lba-clients.component.scss'],\n})\nexport class LbaClientsComponent implements OnInit {\n @Input() events: Observable;\n gridView: GridDataResult;\n pageSize = 10;\n skip = 0;\n isSideViewOpen: boolean = false;\n type: 'numeric' | 'input' = 'input';\n quickview: boolean;\n recordView: boolean;\n action: 'Edit' | 'Add' | 'View';\n addEditOrViewOnly: string;\n isLBA: boolean;\n clientSort: SortDescriptor[];\n clientSearchTerm: string;\n selectedClient: AccountDetails;\n selectedClientFullModel: ClientInformationInterface;\n createClientView: boolean;\n clients: AccountDetails[];\n loading: boolean;\n noDataType: NoDataTypes;\n noClients: boolean;\n exportFileName: string;\n exportData: AccountDetails[];\n\n constructor(\n private _clientsService: ClientsService,\n private currentUserStateService: CurrentUserStateService,\n private _clientContactService: ClientContactsService,\n private _reusableFunctions: ReusableFunctions,\n private _clientIntegrationService: IntegrationSourceService\n ) {\n this.getExcelExportData = this.getExcelExportData.bind(this);\n }\n ngOnInit() {\n scroll(0, 0);\n this.selectedClientFullModel = {} as ClientInformationInterface;\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Clients',\n inputSource: NoDataSourceType.table,\n };\n this.clientSort = [{ field: 'clientFullname', dir: 'asc' }];\n this.quickview = false;\n this.recordView = false;\n this.addEditOrViewOnly = 'ViewOnly';\n if (this.currentUserStateService.currentUser.clientShortName == 'LBA') this.isLBA = true;\n else this.isLBA = false;\n this.loadClients();\n }\n\n // get basic account details for clients\n loadClients() {\n this.loading = true;\n this._clientsService.getAllClientAccountDetails().subscribe(\n (data) => {\n if (data && data.length) {\n this.clients = data.map((client: AccountDetails) => {\n return { ...client, activeDate: client.contractDate };\n });\n this.loadClientsIntoGridView();\n } else {\n this.noClients = true;\n }\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n @HostListener('window:keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.keyCode === 27) {\n //keyCode 27 is the escape key.\n if (this.quickview) {\n this.quickview = false;\n this.isSideViewOpen = false;\n } else if (this.recordView) {\n this.recordView = false;\n this.isSideViewOpen = false;\n }\n this.addEditOrViewOnly = 'viewOnly';\n }\n }\n clientPageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.loadClientsIntoGridView();\n }\n sortChange(sort: SortDescriptor[]): void {\n this.clientSort = sort;\n this.updateGrid();\n }\n filterClients() {\n if (this.clientSearchTerm && this.clientSearchTerm.length > 0) {\n return filterBy(this.clients, {\n logic: 'or',\n filters: [\n {\n field: 'fullName',\n operator: 'contains',\n value: this.clientSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'shortName',\n operator: 'contains',\n value: this.clientSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'subscriptionType',\n operator: 'contains',\n value: this.clientSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'clientKey',\n operator: 'contains',\n value: this.clientSearchTerm,\n ignoreCase: true,\n },\n ],\n });\n }\n return this.clients;\n }\n\n loadClientsIntoGridView() {\n this.updateGrid();\n\n this.exportData = this.clients.map((client) => ({\n ...client,\n formattedGoLiveDate: !client.goLiveDate\n ? ''\n : formatDate(client.goLiveDate, 'MM/dd/yyyy', 'en-US'),\n formattedActiveDate: !client.activeDate\n ? ''\n : formatDate(client.activeDate, 'MM/dd/yyyy', 'en-US'),\n calculatedStatus: this.calculateStatus(\n client.activeDate,\n client.inActiveDate,\n client.isActive\n ),\n }));\n }\n updateGrid() {\n let filteredClients = this.filterClients();\n let orderedData = orderBy(filteredClients, this.clientSort);\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n handleCellClick({ columnIndex, dataItem }: CellClickEvent) {\n if (columnIndex == 7) {\n this.action = 'Edit';\n } else {\n this.action = 'View';\n }\n this.isSideViewOpen = true;\n this.recordClicked(dataItem);\n }\n showClientQuickview() {\n this.quickview = true;\n this.isSideViewOpen = true;\n }\n recordClicked(dataItem: any) {\n this.selectedClient = dataItem;\n let shortName = this.selectedClient.shortName;\n forkJoin(\n this._clientsService.getAccountDetails(shortName),\n this._clientContactService.getContactsByName(shortName),\n this._clientsService.getClientIdentifierRecords(shortName),\n this._clientIntegrationService.getClientIntegrationSourcesByName(shortName)\n ).subscribe(([details, contacts, identifiers, clientIntegrationSources]) => {\n this.selectedClientFullModel.clientDetails = details;\n this.selectedClientFullModel.contacts = contacts;\n this.selectedClientFullModel.identifiers = identifiers;\n this.selectedClientFullModel.clientIntegrationSources = clientIntegrationSources;\n this.showClientQuickview();\n });\n }\n closeClientQuickview() {\n this.quickview = false;\n this.isSideViewOpen = false;\n this.selectedClient = null;\n }\n handleCancelClicked() {\n this.recordView = false;\n this.quickview = false;\n this.createClientView = false;\n }\n\n addClientHandler() {\n this.quickview = true;\n this.isSideViewOpen = true;\n this.action = 'Add';\n }\n updatePageFromSideBar() {\n this.quickview = false;\n this.isSideViewOpen = false;\n this.loadClients();\n }\n\n calculateStatus(activeDate: Date, inActiveDate: Date, isActive: boolean) {\n activeDate = this._reusableFunctions.getDateFromDateTimeOffset(activeDate);\n inActiveDate = this._reusableFunctions.getDateFromDateTimeOffset(inActiveDate);\n if (!activeDate) {\n return '';\n } else if (this._reusableFunctions.isDateInTheFuture(activeDate) && isActive) {\n return 'Pending';\n } else if (isActive) {\n return 'Active';\n } else if (!isActive) {\n return 'Inactive';\n } else {\n return '';\n }\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName = 'lg-clients_' + dateTime + '_.xlsx';\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport {\n ClientProduct,\n ProductType,\n} from '../components/client-product-mapping/client-product-mapping-data-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClientProductService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/clientproduct/').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n submitChanges(changedOrAddedProducts) {\n return new Observable((subscriber) => {\n this.http.post(this._url + 'SubmitChanges', changedOrAddedProducts).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n getClientProducts(): Observable {\n return this.http.get(this._url + 'GetClientProducts/');\n }\n\n getProductTypes(): Observable {\n return this.http.get(this._url + 'GetProductTypes/');\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ClientProduct, ProductType } from './client-product-mapping-data-model';\nimport { ClientProductService } from '../../services/client-product.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { NoDataTypes, NoDataActionType } from '../../../shared/interfaces/no-data';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport {\n ICellClickEventInfo,\n ICustomTableInfoExtend,\n} from 'app/modules/shared/components/custom-mat-table/custom-mat-table.component';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\n\n@Component({\n selector: 'app-client-product-mapping',\n templateUrl: './client-product-mapping.component.html',\n styleUrls: ['./client-product-mapping.component.scss'],\n})\nexport class ClientProductMappingComponent implements OnInit {\n clientProducts: ClientProduct[];\n productTypes: ProductType[];\n saveBtnDisabled: boolean;\n noDataType: NoDataTypes;\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n searchTerm: string;\n action: NoDataActionType;\n\n constructor(\n private _clientProductService: ClientProductService,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private _toast: ToastService,\n private _reportService: ReportingService\n ) {}\n\n ngOnInit() {\n this.saveBtnDisabled = true;\n this.searchTerm = '';\n this.action = NoDataActionType.pageStart;\n this.checkForLBAClient();\n this.initiateTableProperties();\n this.getProductData();\n }\n\n initiateTableProperties() {\n this.columnInfoList = [\n {\n fieldId: 'product',\n fieldName: 'Product Name',\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 350,\n filterable: false,\n },\n {\n fieldId: 'productType',\n fieldName: 'Category',\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'dropdown',\n width: 200,\n filterable: false,\n dropdownInfo: {\n key: 'typeKey',\n valueKey: 'type',\n isCellDependentDdl: false,\n widthPercent: 50,\n },\n },\n {\n fieldId: 'productCategory',\n fieldName: 'Type',\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n decimalPlaces: 0,\n width: 200,\n filterable: false,\n },\n {\n fieldId: 'entryDate',\n fieldName: 'Entry Date',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'dateTime',\n decimalPlaces: 0,\n width: 200,\n },\n {\n fieldId: 'lastMod',\n fieldName: 'Modified Date',\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'dateTime',\n width: 200,\n },\n ];\n\n this.customTableInfo = {\n tableId: 'client-product-mapping-table',\n tableHeight: 600,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: this.searchTerm,\n action: this.action,\n title: 'Product Mapping',\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: false,\n };\n }\n\n setNoDataScreen(action: NoDataActionType) {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n action,\n this.searchTerm\n );\n }\n\n getProductData() {\n this.customTableInfo.dataSet = [];\n this.productTypes = [];\n this.clientProducts = [];\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n false,\n this.action,\n this.searchTerm\n );\n\n this._clientProductService.getClientProducts().subscribe({\n next: (products) => {\n if (products && products.length > 0) {\n this.clientProducts = products;\n this._clientProductService.getProductTypes().subscribe({\n next: (types) => {\n if (types && types.length > 0) {\n this.productTypes = types;\n this.customTableInfo.dataSet = products;\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action,\n this.searchTerm\n );\n } else {\n this.setNoDataScreen(NoDataActionType.pageStart);\n }\n },\n error: (error) => {\n this.setNoDataScreen(NoDataActionType.error);\n },\n });\n } else {\n this.setNoDataScreen(NoDataActionType.pageStart);\n }\n },\n error: (error) => {\n this.setNoDataScreen(NoDataActionType.error);\n },\n });\n }\n\n contentChanged(event: ClientProduct[]) {\n this.columnInfoList.forEach((colInf) => {\n if (colInf.dataType === 'dropdown' && colInf.dropdownInfo) {\n event.map((item) => {\n if (colInf.dropdownInfo.isCellDependentDdl) {\n //TODO: Add logic to populate cell dependant ddl\n } else {\n item['itemList'] = this.productTypes;\n }\n });\n }\n });\n }\n\n dropdownSelectEvent(event: ICellClickEventInfo) {\n let cellData = event.cellData as ClientProduct;\n let prodType = this.productTypes.find(\n (t) => t.typeKey.toString() === event.cellValue.toString()\n );\n if (prodType) {\n cellData.productType = prodType.type;\n cellData.productCategory = prodType.category;\n }\n\n this.productTypeChangeHandler(cellData);\n }\n\n searchRows(event) {\n this.action = NoDataActionType.search;\n this.searchTerm = event;\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action,\n this.searchTerm\n );\n }\n\n checkForLBAClient() {\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n }\n\n productTypeChangeHandler(changedProduct: ClientProduct) {\n this.clientProducts.find((product) => product.product === changedProduct.product).isDirty =\n true;\n this.saveBtnDisabled = false;\n }\n\n submitChanges() {\n let changedOrAddedProducts = this.clientProducts\n .filter((product) => product.isDirty)\n .map((product) => {\n return {\n product: product.product,\n typeKey: +product.typeKey,\n };\n });\n this._clientProductService.submitChanges(changedOrAddedProducts).subscribe(\n () => {\n this._toast.success('Product Mapping changes saved.');\n this.searchTerm = '';\n this.getProductData();\n this.saveBtnDisabled = true;\n scroll(0, 0);\n },\n (response) => {\n this._toast.error('Error saving changes.');\n console.log(response);\n }\n );\n }\n\n exportToExcel() {\n this._reportService.setExportColumnsAndExportToExcel(\n this.columnInfoList,\n this.customTableInfo.dataSet,\n 'product-mappings_'\n );\n }\n}\n","
\n
Product Mapping
\n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n \n SAVE CHANGES\n \n
\n
\n
\n \n
\n
\n","
\n
\n \n \n \n \n
\n
\n","import {\n Component,\n Renderer2,\n NgZone,\n AfterViewInit,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport { State, process } from '@progress/kendo-data-query';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { RowClassArgs } from '@progress/kendo-angular-grid';\n\nconst tableRow = (node) => node.tagName.toLowerCase() === 'tr';\n\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n\n return node;\n};\n\nexport interface IColumnNames {\n columnName: string;\n columnId: string;\n width: number;\n}\n\n@Component({\n selector: 'dragndrop-table',\n templateUrl: './dragndrop-table.component.html',\n styleUrls: ['./dragndrop-table.component.scss'],\n})\nexport class DragndropTableComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n constructor(private renderer: Renderer2, private zone: NgZone) {}\n\n @Input() dataObjectArray: Array;\n @Input() isDragable?: boolean = false;\n @Input() resetData?: boolean = false;\n @Input() columnList: IColumnNames[] = [];\n @Output() emitModifidedObjectArray: EventEmitter> = new EventEmitter>();\n dataObjectArrayInternalUse: Array;\n state: State;\n gridData: any;\n pageable: boolean;\n private currentSubscription: Subscription;\n\n dataObjectArrayDragZoneCopy: Array;\n dragableNodes: HTMLCollectionOf;\n selectedNodePos = 0;\n isNodePosSet = false;\n isNodeRemoved = false;\n\n ngOnInit() {\n this.dataObjectArrayDragZoneCopy = this.dataObjectArray.map((obj) => ({\n ...obj,\n }));\n this.setGridData();\n }\n\n setGridData() {\n let take = 100;\n this.state = {\n skip: 0,\n take: take,\n };\n\n this.pageable = this.dataObjectArray.length > take ? true : false;\n this.dataObjectArrayInternalUse = this.updateTheOrder(this.dataObjectArray);\n this.gridData = process(this.dataObjectArrayInternalUse, this.state);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.resetData) {\n let change: boolean = changes.resetData.currentValue;\n if (change) {\n this.setGridData();\n }\n }\n }\n\n sortArray(array: Array) {\n return array.map((obj) => ({ ...obj })).sort((a, b) => a.orderIndex - b.orderIndex);\n }\n\n updateTheOrder(array: Array) {\n let indexColName = 'orderIndex';\n array.map((obj, index) => {\n obj[indexColName] = index;\n });\n\n return this.sortArray(array);\n }\n\n public ngAfterViewInit(): void {\n this.currentSubscription = this.handleDragAndDrop();\n }\n\n public ngOnDestroy(): void {\n this.currentSubscription.unsubscribe();\n }\n\n public rowCallback(context: RowClassArgs) {\n return {\n dragging: context.dataItem.dragging,\n };\n }\n\n private handleDragAndDrop(): Subscription {\n const sub = new Subscription(() => {});\n if (this.isDragable) {\n let draggedItemIndex;\n\n const tableRows = Array.from(document.querySelectorAll('.k-grid tr'));\n tableRows.forEach((item) => {\n this.renderer.setAttribute(item, 'draggable', 'true');\n const dragStart = fromEvent(item, 'dragstart');\n const dragOver = fromEvent(item, 'dragover');\n const dragEnd = fromEvent(item, 'dragend');\n const mouseOver = fromEvent(item, 'mouseover');\n const mouseDown = fromEvent(item, 'mousedown');\n const mouseUp = fromEvent(item, 'mouseup');\n\n sub.add(\n dragStart\n .pipe(\n tap(({ dataTransfer }) => {\n try {\n } catch (err) {\n // IE doesn't support setDragImage\n }\n try {\n // Firefox won't drag without setting data\n dataTransfer.setData('application/json', '{}');\n } catch (err) {\n // IE doesn't support MIME types in setData\n }\n })\n )\n .subscribe((e: Event) => {\n const row: HTMLTableRowElement = e.target;\n item.setAttribute(\n 'style',\n 'cursor: -webkit-grabbing; cursor: grabbing; background-color: #223540;'\n );\n draggedItemIndex = row.rowIndex;\n const dataItem = this.gridData.data[draggedItemIndex];\n dataItem.dragging = true;\n })\n );\n\n sub.add(\n dragOver.subscribe((e: Event) => {\n e.preventDefault();\n item.setAttribute(\n 'style',\n 'background-color: \"\"; cursor: grabbing; cursor: -webkit-grabbing;'\n );\n const dataItem = this.gridData.data.splice(draggedItemIndex, 1)[0];\n const dropIndex = closest(e.target, tableRow).rowIndex;\n const dropItem = this.gridData.data[dropIndex];\n draggedItemIndex = dropIndex;\n this.zone.run(() => {\n this.gridData.data.splice(dropIndex, 0, dataItem);\n });\n })\n );\n\n sub.add(\n dragEnd.subscribe((e: Event) => {\n e.preventDefault();\n item.setAttribute(\n 'style',\n 'background-color: \"\"; cursor: -webkit-grab; cursor: grab;'\n );\n const dataItem = this.gridData.data[draggedItemIndex];\n dataItem.dragging = false;\n this.dataObjectArrayInternalUse = this.updateTheOrder(this.gridData.data);\n this.emitModifidedObjectArray.emit(this.dataObjectArrayInternalUse);\n })\n );\n\n sub.add(\n mouseOver.subscribe((e: Event) => {\n item.setAttribute('style', 'cursor: -webkit-grab; cursor: grab;');\n })\n );\n\n sub.add(\n mouseDown.subscribe((e: Event) => {\n item.setAttribute(\n 'style',\n 'cursor: -webkit-grabbing; cursor: grabbing; background-color: #223540; color: #FFFFFF'\n );\n })\n );\n\n sub.add(\n mouseUp.subscribe((e: Event) => {\n item.setAttribute(\n 'style',\n 'cursor: -webkit-grab; cursor: grab; background-color: \"\";'\n );\n })\n );\n });\n }\n return sub;\n }\n\n getHeaderStyles() {\n return {\n 'text-transform': 'uppercase',\n color: '#223540',\n 'font-weight': '600',\n };\n }\n}\n","
\n \n
\n
Milestones Management
\n \n \n \n \n \n
\n
\n
\n \n CANCEL\n \n \n SAVE CHANGES\n \n
\n
\n
\n
\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n
\n\n \n \n \n \n\n \n
\n \n \n \n \n \n
\n {{ dataItem.staffPosition }}\n \n \n {{ position.staffPosition }}\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { MilestoneService } from '../../../shared/services/milestone.service';\nimport {\n IMilestoneEvents,\n IPosition,\n IMilestoneReOrder,\n IChangedData,\n} from '../../../shared/interfaces/milestone';\nimport { State, process, SortDescriptor } from '@progress/kendo-data-query';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { IColumnNames } from '../../../shared/components/dragndrop-table/dragndrop-table.component';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\n\ninterface ITabInfo {\n tabIdex: number;\n label: string;\n isSaveDisabled: boolean;\n isCancelDisabled: boolean;\n}\n\n@Component({\n selector: 'milestones-events',\n templateUrl: './milestones-events.component.html',\n styleUrls: ['./milestones-events.component.scss'],\n})\nexport class MilestonesEventsComponent implements OnInit, OnDestroy {\n state: State;\n pageable: boolean;\n milestones: IMilestoneEvents[];\n milestonesToSetOrder: IMilestoneEvents[];\n milestonesReodered: IMilestoneEvents[];\n milestonesPrimaryOwner: IMilestoneEvents[];\n milestonesCheckedData: IMilestoneEvents[];\n gridData: any;\n primaryOwnerGridData: any;\n activeTabIndex: number;\n loading = false;\n isAuthorisedUser: boolean;\n resetData = false;\n sort: SortDescriptor[] = [];\n sortable = {\n mode: 'single',\n allowUnsort: false,\n };\n isDataInnitiated: boolean;\n\n milestoneTabs: ITabInfo[] = [\n {\n tabIdex: 0,\n label: 'Select Milestones',\n isSaveDisabled: true,\n isCancelDisabled: true,\n },\n {\n tabIdex: 1,\n label: 'Order Milestones',\n isSaveDisabled: true,\n isCancelDisabled: true,\n },\n {\n tabIdex: 2,\n label: 'Set Primary Owner per Milestone',\n isSaveDisabled: true,\n isCancelDisabled: true,\n },\n ];\n positionList: IPosition[];\n\n roleSettings = {\n singleSelection: true,\n text: '',\n selectAllText: '',\n unSelectAllText: '',\n enableSearchFilter: false,\n classes: '',\n badgeShowLimit: 3,\n showCheckbox: false,\n labelKey: 'staffPosition',\n primaryKey: 'staffPositionKey',\n };\n\n milestoneCheckChangedData: IChangedData[] = [];\n milestoneChangedOwnerdData: IChangedData[] = [];\n columnList: IColumnNames[];\n\n constructor(\n private _milestoneService: MilestoneService,\n private _toastService: ToastService,\n private _reusableFunctions: ReusableFunctions,\n private _currentUserStateService: CurrentUserStateService\n ) {}\n\n ngOnInit() {\n this.columnList = [\n {\n columnId: 'milestone',\n columnName: 'Milestone',\n width: 200,\n },\n ];\n\n let take = 50;\n this.state = {\n skip: 0,\n take: take,\n };\n\n this.sort = [\n //{ dir: \"asc\", field: \"milestone\" },\n ];\n\n this.loading = true;\n this.isDataInnitiated = false;\n this.isAuthorisedUser =\n this._currentUserStateService.isPowerUser() ||\n this._currentUserStateService.isLBASuperUser(); //TODO: Determine all the autorized users\n this.milestonesReodered = [];\n this.pageable = false;\n this.activeTabIndex = 0;\n this.setButtons(true, true);\n\n this._milestoneService.getPositionsByClient().subscribe(\n (res) => {\n this.positionList = res;\n },\n (error) => {\n throw new Error(error);\n }\n );\n\n this._milestoneService.getMilestoneModelsByClient().subscribe(\n (res) => {\n this.milestones = res;\n this.isDataInnitiated = true;\n this.pageable = this.milestones.length > take ? true : false;\n this.setCheckedGridData();\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n ngOnDestroy() {}\n\n setCheckedGridData() {\n this.milestonesCheckedData = this.milestones.map((obj) => ({ ...obj }));\n this.milestonesCheckedData.sort((a, b) => a.milestoneOrder - b.milestoneOrder);\n this.gridData = process(this.milestonesCheckedData, this.state);\n }\n\n setPrimaryOwnerGridData() {\n this.sortPrimaryOwnerGridData();\n this.primaryOwnerGridData = process(this.milestonesPrimaryOwner, this.state);\n }\n\n sortPrimaryOwnerGridData() {\n this.milestonesPrimaryOwner.sort((a, b) => a.milestoneOrder - b.milestoneOrder);\n }\n\n updateMilestonesToSetOrder() {\n this.milestonesToSetOrder = this.milestones\n .map((obj) => ({ ...obj }))\n .filter((item) => item.isActive === true && item.allowSorting === true);\n this.milestonesToSetOrder.sort((a, b) => a.milestoneOrder - b.milestoneOrder);\n }\n\n updateMilestonesToPrimaryOwner() {\n this.milestonesPrimaryOwner = this.milestones\n .map((obj) => ({ ...obj }))\n .filter((item) => item.isActive === true && item.allowSetPrimaryOwner === true);\n }\n\n setButtons(isSaveDisabled: boolean, isCancelDisabled: boolean) {\n let activeTab = this.milestoneTabs.find((item) => item.tabIdex === this.activeTabIndex);\n activeTab.isCancelDisabled = isCancelDisabled;\n activeTab.isSaveDisabled = isSaveDisabled;\n }\n\n handleTabChange(event: MatTabChangeEvent): void {\n this.setButtons(true, true);\n this.activeTabIndex = event.index;\n this.milestoneCheckChangedData = [];\n this.milestoneChangedOwnerdData = [];\n\n if (this.activeTabIndex === 0 && this.isDataInnitiated) {\n this.setCheckedGridData();\n }\n\n if (this.activeTabIndex === 1) {\n this.updateMilestonesToSetOrder();\n }\n\n if (this.activeTabIndex === 2) {\n this.updateMilestonesToPrimaryOwner();\n this.setPrimaryOwnerGridData();\n }\n }\n\n checkBoxToggle(event: MatCheckboxChange, dataItem: IMilestoneEvents) {\n // TODO: Check super user\n this.setButtons(false, false);\n let milestone = this.milestoneCheckChangedData.find(\n (item) => item.milestoneKey === dataItem.milestoneKey\n );\n if (milestone) {\n milestone.isChecked = event.checked;\n } else {\n this.milestoneCheckChangedData.push({\n milestoneKey: dataItem.milestoneKey,\n isChecked: event.checked,\n });\n }\n }\n\n updateCheckedData() {\n this._milestoneService\n .updateMilestone('IsActive', this.milestoneCheckChangedData)\n .subscribe(\n (res) => {\n if (res === 1) {\n this.milestoneCheckChangedData.forEach((checkInf) => {\n let milestone = this.milestones.find(\n (item) => item.milestoneKey === checkInf.milestoneKey\n );\n if (milestone) {\n milestone.isActive = checkInf.isChecked;\n }\n });\n\n this.saveCheckedMilestoneOrderNumber();\n } else {\n this._toastService.warning('Some changes were NOT saved!');\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n clickCancel() {\n this.milestoneCheckChangedData = [];\n this.milestoneChangedOwnerdData = [];\n if (this.activeTabIndex === 0) {\n this.setCheckedGridData();\n }\n\n if (this.activeTabIndex === 1) {\n this.updateMilestonesToSetOrder();\n this.resetData = true;\n }\n\n if (this.activeTabIndex === 2) {\n this.updateMilestonesToPrimaryOwner();\n this.setPrimaryOwnerGridData();\n }\n\n this.setButtons(true, true);\n }\n\n saveChanges() {\n if (this.activeTabIndex === 0) {\n this.updateCheckedData();\n }\n\n if (this.activeTabIndex === 1) {\n this.saveReorderedMilestones();\n }\n\n if (this.activeTabIndex === 2) {\n this.updateMilestoneOwner();\n }\n }\n\n modelChange(event, dataItem: IMilestoneEvents) {\n this.setButtons(false, false);\n\n let milestone = this.milestoneChangedOwnerdData.find(\n (item) => item.milestoneKey === dataItem.milestoneKey\n );\n if (milestone) {\n milestone.changedValue = event;\n } else {\n this.milestoneChangedOwnerdData.push({\n milestoneKey: dataItem.milestoneKey,\n changedValue: event,\n });\n }\n }\n\n updateMilestoneOwner() {\n this._milestoneService\n .updateMilestone('ClientStaffPositionKey', this.milestoneChangedOwnerdData)\n .subscribe(\n (res) => {\n if (res === 1) {\n this.milestoneChangedOwnerdData.forEach((ownerInf) => {\n let milestone = this.milestones.find(\n (item) => item.milestoneKey === ownerInf.milestoneKey\n );\n if (milestone) {\n milestone.staffPositionKey = ownerInf.changedValue;\n }\n });\n this.updateMilestonesToPrimaryOwner();\n this.setPrimaryOwnerGridData();\n this.setButtons(true, true);\n this._toastService.success('Changes were successfully saved!');\n } else {\n this._toastService.warning('Changes were NOT saved!');\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n editMilestonesOrder(editedMilestones: IMilestoneEvents[]) {\n this.milestonesReodered = editedMilestones;\n this.resetData = false;\n this.setButtons(false, false);\n }\n\n saveCheckedMilestoneOrderNumber() {\n let activeMilestones = this.milestones.filter(\n (itm) => itm.isActive === true && itm.allowSorting == true\n );\n let maxOrder = this._reusableFunctions.getMaxValue(activeMilestones, 'milestoneOrder');\n\n this.milestoneCheckChangedData.forEach((toOrderMilestone) => {\n let milestone = this.milestones.find(\n (itm) => itm.milestoneKey === toOrderMilestone.milestoneKey\n );\n\n if (milestone) {\n let milestoneOrder =\n toOrderMilestone.isChecked && milestone.allowSorting\n ? maxOrder + 1\n : milestone.milestoneOrder;\n milestone.milestoneOrder = milestoneOrder;\n maxOrder += 1;\n }\n });\n\n this.updateMilestonesToSetOrder();\n let milestoneReOderedList = this.getSortedMilestoneList(this.milestonesToSetOrder);\n\n this._milestoneService.saveOrdering(milestoneReOderedList).subscribe(\n (res) => {\n if (res === 1) {\n this.updateMilestonesToPrimaryOwner();\n this.setButtons(true, true);\n this._toastService.success('Changes were successfully saved!');\n } else {\n this._toastService.warning('Some changes were NOT saved!');\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getSortedMilestoneList(sortedMilestones: IMilestoneReOrder[]) {\n let milestoneReOderedList: IMilestoneReOrder[] = [];\n sortedMilestones.forEach((mst, index) => {\n let orderIndex = index + 1;\n milestoneReOderedList.push({\n milestoneKey: mst.milestoneKey,\n milestoneOrder: orderIndex,\n });\n });\n return milestoneReOderedList;\n }\n\n saveReorderedMilestones() {\n let milestoneReOderedList = this.getSortedMilestoneList(this.milestonesReodered);\n\n this._milestoneService.saveOrdering(milestoneReOderedList).subscribe(\n (res) => {\n if (res === 1) {\n this.milestonesReodered.forEach((mst, index) => {\n let orderIndex = index + 1;\n let milston = this.milestones.find(\n (item) => item.milestoneKey === mst.milestoneKey\n );\n\n if (milston) {\n milston.milestoneOrder = orderIndex;\n }\n });\n\n this.updateMilestonesToSetOrder();\n this.updateMilestonesToPrimaryOwner();\n this.setButtons(true, true);\n this._toastService.success('Changes were successfully saved!');\n } else {\n this._toastService.warning('Changes were NOT saved!');\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getHeaderStyles() {\n return {\n 'text-transform': 'uppercase',\n color: '#223540',\n 'font-weight': '600',\n };\n }\n\n getReSortedArray(event: IMilestoneEvents[]) {\n this.editMilestonesOrder(event);\n }\n}\n","\n
\n
Login Activity
\n
\n \n Search\n\n \n search\n \n \n \n \n
\n \n
\n
Start
\n \n \n
\n
\n
End
\n \n \n
\n \n \n \n \n \n \n
\n
\n
\n \n \n \n\n \n\n \n\n \n\n \n \n {{ record.lastLoginDate | date: 'MM/dd/yyyy hh:mm a' }}\n \n \n Logged In: {{ value | date: 'MM/dd/yyyy':'UTC' }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n","import { Component, OnInit, ViewEncapsulation, Input } from '@angular/core';\nimport {\n LoginActivity,\n LoginActivityService,\n} from '../../../shared/services/login-activity.service';\nimport { GridComponent, GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport {\n SortDescriptor,\n GroupDescriptor,\n orderBy,\n filterBy,\n process,\n} from '@progress/kendo-data-query';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport { addMonths } from '@progress/kendo-date-math';\nimport { SelectionRange } from '@progress/kendo-angular-dateinputs';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { DatePipe } from '@angular/common';\n\n@Component({\n selector: 'app-lba-login-activity',\n templateUrl: './lba-login-activity.component.html',\n styleUrls: ['./lba-login-activity.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LbaLoginActivityComponent implements OnInit {\n @Input() view: string;\n\n data: LoginActivity[];\n exportData: LoginActivity[];\n gridView: GridDataResult;\n filteredData: LoginActivity[];\n groups: GroupDescriptor[] = [{ field: 'fullName' }];\n exportFileName: string;\n sort: SortDescriptor[];\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n loginActivitySearchTerm: string;\n type: 'numeric' | 'input' = 'input';\n skip = 0;\n pageSize = 10;\n groupable = true;\n scrollable = true;\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 20, 100],\n };\n range: SelectionRange = {\n start: addMonths(new Date(), -1),\n end: new Date(),\n };\n animation = {\n type: 'slide',\n duration: 200,\n };\n timeZoneGMTVariance: string;\n\n constructor(\n private service: LoginActivityService,\n private intl: IntlService,\n private currentUserStateService: CurrentUserStateService,\n private _reusableFunctions: ReusableFunctions,\n private datePipe: DatePipe\n ) {\n this.getExcelExportData = this.getExcelExportData.bind(this);\n }\n\n ngOnInit() {\n this.setTimeZoneByUser();\n this.getData();\n if (this.view === 'admin') {\n this.sort = [\n {\n field: 'clientShortName',\n dir: 'asc',\n },\n ];\n } else {\n this.sort = [\n {\n field: 'fullName',\n dir: 'asc',\n },\n ];\n }\n this.exportData = [];\n }\n\n setTimeZoneByUser(): void {\n this.timeZoneGMTVariance =\n this.currentUserStateService.currentUser.timeZoneGMTVariance.toString();\n }\n\n getData() {\n //pass utc dates\n this.service\n .getLoginActivity(\n this.formatDate(this.range.start),\n this.formatDate(this.range.end),\n this.timeZoneGMTVariance,\n this.view === 'client' // if view = client then we want to filterByClient, otherwise we return all activity (LBA User)\n )\n .subscribe((res) => {\n this.data = res;\n this.updateGrid();\n });\n }\n\n updateGrid() {\n let localData = this.filteredData ? this.filteredData : this.data;\n let orderedData = orderBy(localData, this.sort);\n let groupedData = process(orderedData, {\n group: this.groups,\n });\n\n this.exportData = this.data;\n this.exportData.forEach(\n (d) => (d.friendlyTime = this.datePipe.transform(d.lastLoginDate, 'short'))\n );\n\n //total elements(bottom right of grid) is now the # of grouped arrays inside collection\n //this increases number of records shown\n let length = groupedData.data.length;\n groupedData.data = groupedData.data.slice(this.skip, this.skip + this.pageSize);\n this.gridView = {\n data: groupedData.data,\n total: length,\n };\n }\n\n filterLoginActivity(): void {\n let searchTermTokens = this.loginActivitySearchTerm.split(' ');\n this.filteredData = filterBy(this.data, {\n logic: 'or',\n filters: [\n {\n field: 'clientShortName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'firstName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'loginCount',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n this.filteredData = filterBy(this.data, {\n logic: 'or',\n filters: [\n {\n field: 'clientShortName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'lastName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'firstName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n {\n field: 'jobTitle',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n }\n this.skip = 0;\n this.updateGrid();\n }\n\n groupChange(groups: GroupDescriptor[]): void {\n this.groups = groups;\n this.updateGrid();\n }\n\n pageChange(event: PageChangeEvent): void {\n this.pageSize = event.take;\n this.skip = event.skip;\n this.updateGrid();\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.skip = 0;\n this.updateGrid();\n }\n\n onChange(value?: Date) {\n this.getData();\n }\n\n formatDate(value?: Date): string {\n return value ? this.intl.formatDate(value, 'MM/dd/yyyy') : '';\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName = 'NV_LoginActivity_' + dateTime + '_.xlsx';\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport {\n KPIScorecard,\n ClientKPIScorecard,\n ClientKPIScorecardStaffPosition,\n IScorecardKPIInfo,\n IKPIScorecardChangeUpsertParams,\n} from '../components/kpi-scorecard/kpi-scorecard-models';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KpiScorecardService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/kpiscorecard').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n getKPIScorecards(): Observable {\n return this.http.get(this._url + '/KPIScorecardSelect');\n }\n\n getClientKPIScorecards(): Observable {\n return this.http.get(this._url + '/ClientKPIScorecardSelect');\n }\n\n getClientKPIScorecardStaffPositions(): Observable {\n return this.http.get(\n this._url + '/ClientKPIScorecardStaffPositionSelect'\n );\n }\n\n upsertKPIScorecard(\n kpiScorecardKey: number,\n formValue: any,\n positionKeys: number[],\n clientKPIScorecardKey?: number\n ) {\n formValue.kpiScorecardKey = kpiScorecardKey;\n formValue.selectedPositions = positionKeys;\n return new Observable((subscriber) => {\n this.http.post(this._url + '/UpsertClientKPIScorecard', formValue).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n upsertKPIScorecardProfileChanges(\n parameters: IKPIScorecardChangeUpsertParams[]\n ): Observable {\n let params = {\n paramString: JSON.stringify(parameters),\n };\n return this.http.post(this._url + '/ClientKPIScoreccardChangeUpsert/', params, {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n });\n }\n\n getPossibleKPIsForScorecard(scorecard: string): Observable {\n const params = new HttpParams().set('scorecard', scorecard);\n return this.http.get(this._url + '/GetPossibleKPIsForScorecard', {\n params: params,\n });\n }\n}\n","\n
\n
\n
\n
KPI Profiles
\n
\n
\n
\n Set Up KPI Profile - {{ selectedKPIScorecard.kpiScorecard }}\n
\n
\n
\n
\n
\n Set Up KPI Profile - {{ selectedKPIScorecard.kpiScorecard }}\n
\n
\n
\n
\n Edit KPI Profile - {{ selectedKPIScorecard.kpiScorecard }}\n
\n
\n
\n
\n\n
\n
\n \n Return to all KPI Profiles\n \n \n EDIT\n \n\n \n CANCEL\n \n \n \n NEXT\n \n \n SUBMIT\n \n \n
\n
\n
\n
\n
\n
\n KPI Profiles outline the KPIs, KPI weight if applicable, and the employee position\n type assigned to each Scorecard. Scorecard assignment is also used for Rankings.\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n Key Performance Indicators\n Weights\n
\n
\n
\n Select the key performance indicators (KPI) to be used for scorecard.\n
\n
\n
\n Set the Weight for each KPI to be used in the weighted score\n calculation. The sum of all weights must equal 100%. To exclude a\n KPI from weighted scores, leave Weight blank or set to 0.\n
\n
\n
\n
\n
\n \n \n
\n
\n
0\">\n
Position(s)
\n
\n \n
{{ position }}
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
Scorecard Not Found
\n
\n \n \n \n \n \n {{ record?.kpiScorecard }}\n \n \n \n {{ record?.kpiScorecard }}\n \n \n \n\n \n \n 0; then Assigned; else NotAssigned\"\n >\n \n {{ record?.positions?.join(' | ') }}\n \n \n \n Assign Now\n \n \n \n \n\n \n \n\n \n \n\n \n \n {{ record.effectiveDate | date : 'MM/dd/yyyy' : 'UTC' }}\n \n \n\n \n \n {{ record.inActiveDate | date : 'MM/dd/yyyy' : 'UTC' }}\n \n \n \n \n \n \n \n \n
\n \n
\n
\n
Effective Date
\n \n \n
\n
\n
Inactive Date
\n \n \n
\n
\n
Position(s)
\n
\n Select the position(s) to be assigned the KPI profile.\n
\n
\n
\n \n \n \n \n \n \n \n
\n \n \n {{ position.position }}\n
\n
\n
\n \n
\n
12 }\">\n
\n \n
\n The total percentage must be 100%\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { KpiScorecardService } from '../../services/kpi-scorecard.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport {\n KPIScorecard,\n ClientKPIScorecard,\n ClientKPIScorecardStaffPosition,\n IScorecardKPIInfo,\n IKPIScorecardChangeUpsertParams,\n} from './kpi-scorecard-models';\nimport { forkJoin } from 'rxjs';\nimport {\n UntypedFormGroup,\n UntypedFormBuilder,\n Validators,\n UntypedFormControl,\n} from '@angular/forms';\nimport { EmployeePositionService, StaffPosition } from '../../services/employee-position.service';\nimport {\n ClientKPIConfigWebModel,\n ClientKPIWebModelComplete,\n MilestoneStaffingMap,\n PositionMap,\n} from '../../../shared/interfaces/kpi-data';\nimport { KPIService } from '../../../shared/services/kpi.service';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport { ITableColumns } from '../../../reports/interfaces/reporting-data';\nimport {\n IDataChange,\n ITableColumnProperties,\n ITableDataProperties,\n} from '../../../shared/components/common-kendo-table/common-kendo-table.component';\nimport { CommonKendoTableService } from '../../../shared/services/common-kendo-table.service';\nimport { ICustomTableInfoExtend } from 'app/modules/shared/components/custom-mat-table/custom-mat-table.component';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\n@Component({\n selector: 'app-kpi-scorecard',\n templateUrl: './kpi-scorecard.component.html',\n styleUrls: ['./kpi-scorecard.component.scss'],\n})\nexport class KpiScorecardComponent implements OnInit {\n tabs = [{ label: 'Employees' }, { label: 'Partners' }];\n kpiScorecards: KPIScorecard[];\n clientKPIScorecards: ClientKPIScorecard[];\n clientKPIScorecardStaffPositions: ClientKPIScorecardStaffPosition[];\n staffPositions: StaffPosition[];\n scorecardListView: boolean;\n selectedKPIScorecard: KPIScorecard;\n selectDatesAndPositions: boolean;\n scorecardForm: UntypedFormGroup;\n config: ClientKPIConfigWebModel;\n kpiMasterList: IScorecardKPIInfo[];\n selectedPositionKeys = new Set();\n selectKPIs: boolean;\n setKPIWeights: boolean;\n viewKPIs: boolean;\n weightEqual100: boolean;\n totalWeightPercentage: number = 0;\n kpiMilestoneStaffingKeyMap: MilestoneStaffingMap[];\n viewKPIScorecardProfile: boolean;\n loading: boolean = true;\n gridView: GridDataResult;\n scorecardInfoData: IScorecardKPIInfo[];\n scorecardInfoDataOriginal: IScorecardKPIInfo[];\n sort: SortDescriptor[] = [\n {\n field: 'kpiScorecard',\n dir: 'asc',\n },\n ];\n sortable = {\n mode: 'single',\n allowUnsort: false,\n };\n noDataType: NoDataTypes;\n positionMap: PositionMap[];\n summaryTableColumnProperties: ITableColumnProperties;\n summaryTableDataProperties: ITableDataProperties;\n profileTableColumnProperties: ITableColumnProperties;\n profileTableDataProperties: ITableDataProperties;\n action: NoDataActionType;\n changedProileData: IScorecardKPIInfo[];\n searchTerm: string;\n checkedStaffPositions = new Set();\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n\n constructor(\n private scorecardService: KpiScorecardService,\n private toast: ToastService,\n private kpiService: KPIService,\n private formBuilder: UntypedFormBuilder,\n private positionService: EmployeePositionService,\n private reusableFunctions: ReusableFunctions,\n private commKendoTbleService: CommonKendoTableService,\n private reportService: ReportingService\n ) {}\n\n ngOnInit() {\n this.action = NoDataActionType.pageStart;\n this.searchTerm = '';\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: this.searchTerm,\n componentTitle: 'KPI',\n inputSource: NoDataSourceType.table,\n };\n\n scroll(0, 0);\n this.scorecardInfoData = [];\n this.changedProileData = [];\n this.scorecardListView = true;\n this.viewKPIScorecardProfile = false;\n this.scorecardForm = this.createFormGroup();\n this.initiateTableProperties();\n this.getKPIScorecardData();\n this.getClientKPIData();\n\n this.setProfileSummaryTableParams();\n this.setKpiProfileTablesParams();\n }\n\n initiateTableProperties() {\n this.columnInfoList = [\n {\n fieldId: 'isSelected',\n fieldName: '',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'checkbox',\n width: 50,\n filterable: false,\n checkBoxProperties: {\n checked: false,\n disabled: false,\n title: '',\n },\n hidden: true,\n },\n {\n fieldId: 'clientKPIDescription',\n fieldName: 'KEY PERFORMANCE INDICATOR',\n isHyperlink: false,\n fieldOrder: 0.5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 250,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'scorecardWeight',\n fieldName: 'WEIGHT',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'input',\n decimalPlaces: 1,\n width: 120,\n filterable: false,\n filter: 'text',\n aggregationTitle: 'Total: ',\n aggregationType: 'sum',\n inputProperties: {\n style: {\n width: '70px',\n height: '57px',\n },\n type: 'number',\n },\n hidden: false,\n allowSearch: true,\n hideFooterValue: true,\n label: '%',\n },\n {\n fieldId: 'targetFormatted',\n fieldName: 'TARGET',\n isHyperlink: false,\n fieldOrder: 1.5,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 1,\n width: 120,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'poor',\n fieldName: 'POOR',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n backgroundDefaultColor: '#fddbdb',\n backgroundColorThresholdFileldId: 'poor',\n headerBackgroundColor: '#fddbdb',\n allowSearch: true,\n },\n {\n fieldId: 'fair',\n fieldName: 'FAIR',\n fieldOrder: 3,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n backgroundDefaultColor: '#fff9e7',\n backgroundColorThresholdFileldId: 'fair',\n headerBackgroundColor: '#fff9e7',\n allowSearch: true,\n },\n {\n fieldId: 'good',\n fieldName: 'GOOD',\n isHyperlink: false,\n fieldOrder: 4,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n backgroundDefaultColor: '#e0f3f3',\n backgroundColorThresholdFileldId: 'good',\n headerBackgroundColor: '#e0f3f3',\n allowSearch: true,\n },\n {\n fieldId: 'veryGood',\n fieldName: 'VERY GOOD',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 5,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n backgroundDefaultColor: '#f7efff',\n backgroundColorThresholdFileldId: 'veryGood',\n headerBackgroundColor: '#f7efff',\n allowSearch: true,\n },\n {\n fieldId: 'excellent',\n fieldName: 'EXCELLENT',\n isHyperlink: false,\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n backgroundDefaultColor: '#f3f9ed',\n backgroundColorThresholdFileldId: 'excellent',\n headerBackgroundColor: '#f3f9ed',\n allowSearch: true,\n },\n ];\n\n this.customTableInfo = {\n tableId: 'kpi-edit',\n tableHeight: 700,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: '',\n action: NoDataActionType.pageStart,\n title: '',\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: true,\n };\n }\n\n setProfileSummaryTableParams() {\n this.summaryTableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: '',\n initialPageSize: 500,\n initialSkip: 0,\n maxHeight: 700,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: false,\n class: 'common-kendo-table-no-box-shadow',\n pageable: false,\n useLGScroll: false,\n };\n\n let summaryTableColumnProperties: ITableColumns[] = [\n {\n fieldId: 'kpiScorecard',\n fieldName: 'SCORECARD',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 150,\n filterable: false,\n },\n {\n fieldId: 'positions',\n fieldName: 'Positions',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 200,\n filterable: false,\n },\n {\n fieldId: 'numKPIs',\n fieldName: '# KPIS',\n isHyperlink: false,\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n width: 60,\n filterable: false,\n },\n {\n fieldId: 'numEmployees',\n fieldName: '# ASSIGNED',\n isHyperlink: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n width: 80,\n filterable: false,\n },\n {\n fieldId: 'effectiveDate',\n fieldName: 'EFFECTIVE',\n isHyperlink: false,\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'date',\n width: 90,\n filterable: false,\n },\n {\n fieldId: 'inActiveDate',\n fieldName: 'INACTIVE',\n isHyperlink: false,\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'date',\n width: 90,\n filterable: false,\n },\n {\n fieldId: 'edit',\n fieldName: '',\n isHyperlink: false,\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'icon',\n iconClass: 'far fa-pencil-alt',\n width: 50,\n filterable: false,\n },\n ];\n\n this.summaryTableColumnProperties = {\n columnProperties: summaryTableColumnProperties,\n };\n }\n\n setKpiProfileTablesParams() {\n this.profileTableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: this.searchTerm,\n componentTitle: '',\n initialPageSize: 500,\n initialSkip: 0,\n maxHeight: 700,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: false,\n class: 'common-kendo-table-no-box-shadow',\n pageable: false,\n useLGScroll: false,\n };\n\n let profileTableColumnProperties: ITableColumns[] = [\n {\n fieldId: 'isSelected',\n fieldName: '',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'checkbox',\n width: 50,\n filterable: false,\n checkBoxProperties: {\n checked: false,\n disabled: false,\n title: '',\n },\n hidden: true,\n },\n {\n fieldId: 'clientKPIDescription',\n fieldName: 'KEY PERFORMANCE INDICATOR',\n isHyperlink: false,\n fieldOrder: 0.5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 250,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'scorecardWeight',\n fieldName: 'WEIGHT',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'input',\n decimalPlaces: 1,\n width: 120,\n filterable: false,\n filter: 'text',\n aggregationTitle: 'Total: ',\n aggregationType: 'sum',\n inputProperties: {\n style: {\n width: '70px',\n height: '57px',\n },\n type: 'number',\n },\n hidden: false,\n allowSearch: true,\n hideFooterValue: true,\n label: '%',\n },\n {\n fieldId: 'targetFormatted',\n fieldName: 'TARGET',\n isHyperlink: false,\n fieldOrder: 1.5,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 1,\n width: 120,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'poor',\n fieldName: 'POOR',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n columnBackgroundColor: '#fddbdb',\n headerBackgroundColor: '#fddbdb',\n allowSearch: true,\n },\n {\n fieldId: 'fair',\n fieldName: 'FAIR',\n fieldOrder: 3,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n columnBackgroundColor: '#fff9e7',\n headerBackgroundColor: '#fff9e7',\n allowSearch: true,\n },\n {\n fieldId: 'good',\n fieldName: 'GOOD',\n isHyperlink: false,\n fieldOrder: 4,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n columnBackgroundColor: '#e0f3f3',\n headerBackgroundColor: '#e0f3f3',\n allowSearch: true,\n },\n {\n fieldId: 'veryGood',\n fieldName: 'VERY GOOD',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 5,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n columnBackgroundColor: '#f7efff',\n headerBackgroundColor: '#f7efff',\n allowSearch: true,\n },\n {\n fieldId: 'excellent',\n fieldName: 'EXCELLENT',\n isHyperlink: false,\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n hideIf: 'excel',\n columnBackgroundColor: '#f3f9ed',\n headerBackgroundColor: '#f3f9ed',\n allowSearch: true,\n },\n ];\n\n this.profileTableColumnProperties = {\n columnProperties: profileTableColumnProperties,\n };\n }\n\n getKPIScorecardData() {\n this.loading = true;\n forkJoin(\n this.scorecardService.getKPIScorecards(),\n this.scorecardService.getClientKPIScorecards(),\n this.positionService.getPositions(),\n this.scorecardService.getClientKPIScorecardStaffPositions(),\n this.kpiService.getKPIAssignedCounts()\n ).subscribe(\n ([scorecards, clientScorecards, positions, scorecardStaffPositions, positionMap]) => {\n if (positions && positions.length) {\n this.staffPositions = positions;\n } else {\n this.toast.warning('No staff positions found.');\n }\n\n if (positionMap && positionMap.length) {\n this.positionMap = positionMap;\n }\n if (scorecards && scorecards.length) {\n this.kpiScorecards = scorecards;\n this.gridView = {\n data: orderBy(scorecards, this.sort),\n total: scorecards.length,\n };\n this.updateSummaryGrid();\n\n if (\n clientScorecards &&\n clientScorecards.length &&\n scorecardStaffPositions &&\n scorecardStaffPositions.length\n ) {\n this.clientKPIScorecards = clientScorecards;\n this.clientKPIScorecardStaffPositions = scorecardStaffPositions;\n this.setKPIScorecardsAssignedAndPositions();\n } else {\n //no client scorecards found\n }\n } else {\n //no scorecards\n this.toast.error('No scorecards found.');\n }\n\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n updateSummaryGrid() {\n this.summaryTableColumnProperties = Object.assign({}, this.summaryTableColumnProperties);\n this.summaryTableDataProperties.gridData = this.kpiScorecards;\n this.summaryTableDataProperties.hasData = this.kpiScorecards.length > 0;\n this.summaryTableDataProperties.isDataLoaded = true;\n this.summaryTableDataProperties = Object.assign({}, this.summaryTableDataProperties);\n }\n\n searchSummaryGrid(summarySearchTerm) {\n this.gridView.data = this.kpiScorecards.filter((x) =>\n x.kpiScorecard.toLowerCase().includes(summarySearchTerm.toLowerCase())\n );\n this.sortChange(this.sort);\n }\n\n getClientKPIData() {\n forkJoin(\n this.kpiService.getCurrentKPIConfiguration(),\n this.kpiService.getKPIMasterList(),\n this.kpiService.getKPIMilestoneStaffingKeyMap()\n ).subscribe(([config, list, staffMap]) => {\n this.kpiMasterList = list;\n if (staffMap && staffMap.length) {\n this.kpiMilestoneStaffingKeyMap = staffMap;\n } else {\n this.toast.warning('Could not retrieve staff map.');\n }\n if (this.kpiMasterList.length === 0) {\n this.toast.error('There was a problem retrieving KPIs.');\n return;\n }\n if (config && config.clientKPIData && config.clientKPIData.length) {\n //client has configured KPIs\n this.config = config;\n //this.sortKPIConfig();\n } else {\n //client has NOT configured KPIs\n this.toast.warning('You must configure your KPIs.');\n }\n });\n }\n\n setKPIScorecardsAssignedAndPositions() {\n this.clientKPIScorecards.forEach((clientScorecard) => {\n let assignedScorecard = this.kpiScorecards.find(\n (scorecard) => scorecard.kpiScorecardKey === clientScorecard.kpiScorecardKey\n );\n assignedScorecard.isAssigned = true;\n assignedScorecard.inActiveDate = clientScorecard.inActiveDate;\n assignedScorecard.effectiveDate = clientScorecard.activeDate;\n assignedScorecard.numKPIs\n ? (assignedScorecard.numKPIs = ++assignedScorecard.numKPIs)\n : (assignedScorecard.numKPIs = 1);\n assignedScorecard.positions = [];\n });\n this.clientKPIScorecardStaffPositions.forEach((position) => {\n let assignedScorecard = this.kpiScorecards.find(\n (scorecard) => scorecard.kpiScorecardKey === position.kpiScorecardKey\n );\n const checkedPosition = this.staffPositions.find(\n (p) => p.staffPositionKey === position.staffPositionKey\n ).position;\n this.checkedStaffPositions.add(checkedPosition);\n assignedScorecard?.positions?.push(checkedPosition);\n });\n this.staffPositions.forEach(\n (position) => (position.checked = this.checkedStaffPositions.has(position.position))\n );\n this.kpiScorecards.forEach((scorecard) => {\n if (\n scorecard.positions &&\n scorecard.positions.length &&\n scorecard.kpiScorecardType === 'Employee'\n ) {\n scorecard.positions.forEach((scorecardPosition) => {\n let count =\n this.positionMap.find(\n (positionMap) => positionMap.position === scorecardPosition\n )?.nbr ?? 0;\n scorecard.numEmployees = count + (scorecard.numEmployees ?? 0);\n });\n } else if (scorecard.kpiScorecardType !== 'Employee') {\n let count =\n this.positionMap.find(\n (positionMap) => positionMap.position === scorecard.kpiScorecard\n )?.nbr ?? 0;\n scorecard.numEmployees = count + (scorecard.numEmployees ?? 0);\n }\n });\n }\n\n refreshPageData() {\n this.resetKPIScorecardData();\n forkJoin(\n this.scorecardService.getClientKPIScorecards(),\n this.scorecardService.getClientKPIScorecardStaffPositions()\n ).subscribe(([kpis, positions]) => {\n if (kpis && kpis.length && positions && positions.length) {\n this.clientKPIScorecards = kpis;\n this.clientKPIScorecardStaffPositions = positions;\n this.setKPIScorecardsAssignedAndPositions();\n } else {\n this.toast.warning('Unexpected error retrieving page data.');\n }\n });\n }\n\n resetKPIScorecardData() {\n this.kpiScorecards.forEach((scorecard) => {\n scorecard.numKPIs = 0;\n scorecard.positions = [];\n scorecard.effectiveDate = null;\n scorecard.inActiveDate = null;\n scorecard.isAssigned = false;\n scorecard.numEmployees = undefined;\n });\n }\n\n //getBandDescriptionFromClientKPIKey(clientKPIKey: number, bandNumber: number) {\n // if (clientKPIKey) {\n // return this.getBandDescription(\n // this.config.clientKPIData.find((kpi) => kpi.clientKPIKey === clientKPIKey),\n // bandNumber\n // );\n // }\n // return '';\n //}\n\n //getBandDescription(clientKPI: ClientKPIWebModelComplete, bandNumber: number): string {\n // let kpiMaster = this.kpiMasterList.find(\n // (kpi) => kpi.kpiMasterKey === clientKPI.kpiMasterKey\n // );\n // let bestHigh = kpiMaster.bestScore === 'Highest';\n // let isPercentage = kpiMaster.isPercentage;\n // let band = clientKPI.performanceBands[bandNumber - 1];\n // let bandDescription: string;\n // switch (band.kpiBandKey) {\n // case 1:\n // return bestHigh\n // ? ' ' +\n // this.formatKPIValue(\n // this.getOuterBandValue(band),\n // isPercentage,\n // kpiMaster.kpiFormat\n // )\n // : ' ' + this.getOuterBandValue(band);\n // case 2:\n // case 3:\n // case 4:\n // return this.getRangeDescription(band, bestHigh, isPercentage, kpiMaster.kpiFormat);\n // case 5:\n // return bestHigh\n // ? ' ' +\n // this.formatKPIValue(\n // this.getOuterBandValue(band),\n // isPercentage,\n // kpiMaster.kpiFormat\n // )\n // : ' ' +\n // this.formatKPIValue(\n // this.getOuterBandValue(band),\n // isPercentage,\n // kpiMaster.kpiFormat\n // );\n // default:\n // console.log(band.kpiBandKey + ' is not a valid band number');\n // }\n //}\n\n //getRangeDescription(\n // band: ClientKPIBandDataModel,\n // bestHigh: boolean,\n // isPercentage: boolean,\n // kpiFormat: string\n //): string {\n // if (bestHigh) {\n // return (\n // this.formatKPIValue(\n // this.getMinValue(band.rangeStart, band.rangeEnd),\n // isPercentage,\n // kpiFormat\n // ) +\n // ' - ' +\n // this.formatKPIValue(\n // this.getMaxValue(band.rangeStart, band.rangeEnd),\n // isPercentage,\n // kpiFormat\n // )\n // );\n // } else {\n // return (\n // this.formatKPIValue(\n // this.getMaxValue(band.rangeStart, band.rangeEnd),\n // isPercentage,\n // kpiFormat\n // ) +\n // ' - ' +\n // this.formatKPIValue(\n // this.getMinValue(band.rangeStart, band.rangeEnd),\n // isPercentage,\n // kpiFormat\n // )\n // );\n // }\n //}\n\n //getMinValue(rangeStart: number, rangeEnd: number): number {\n // return rangeStart < rangeEnd ? rangeStart : rangeEnd;\n //}\n\n //getMaxValue(rangeStart: number, rangeEnd: number): number {\n // return rangeStart > rangeEnd ? rangeStart : rangeEnd;\n //}\n\n //getOuterBandValue(band: ClientKPIBandDataModel) {\n // //data from db will have null for either pctStart or pctEnd\n // //but we don't care. only 1 value is legit so use either one\n // return band.rangeEnd ? band.rangeEnd : band.rangeStart;\n //}\n\n //getTargetDescription(target: number, kpiMasterKey: number): string {\n // let kpiMaster = this.kpiMasterList.find((kpi) => kpi.kpiMasterKey === kpiMasterKey);\n // return this.formatKPIValue(target, kpiMaster.isPercentage, kpiMaster.kpiFormat);\n //}\n\n //formatKPIValue(value: number, isPercentage: boolean, kpiFormat: string): string {\n // if (isPercentage) {\n // return value + '%';\n // } else if (kpiFormat === 'currency') {\n // return this.currencyPipe.transform(value, '$', 'symbol-narrow', '1.0-0');\n // } else {\n // return value.toString();\n // }\n //}\n\n onSubmit() {\n this.calculateTotalWeightPercentage();\n if (\n this.viewKPIScorecardProfile &&\n !this.scorecardListView &&\n !this.selectDatesAndPositions &&\n this.totalWeightPercentage === 100\n ) {\n //TODO: Simplify above if logic. One condition should be sufficient\n\n let params: IKPIScorecardChangeUpsertParams[] = [];\n this.changedProileData.forEach((change) => {\n params.push({\n clientKPIKey: change.clientKPIKey ? change.clientKPIKey.toString() : '',\n weight:\n change.scorecardWeight !== null ? change.scorecardWeight.toString() : '',\n isActive: change.isSelected === true ? '1' : '0',\n kpiScoreCardKey: change.kpiScorecardKey\n ? change.kpiScorecardKey.toString()\n : '',\n });\n });\n this.loading = true;\n this.scorecardService.upsertKPIScorecardProfileChanges(params).subscribe(\n (res) => {\n if (res >= 0) {\n this.toast.success(\n this.selectedKPIScorecard.kpiScorecard + ' scorecard profile saved.'\n );\n this.scorecardListView = true;\n this.selectDatesAndPositions = false;\n this.viewKPIScorecardProfile = false;\n this.selectKPIs = this.setKPIWeights = this.viewKPIs = false;\n this.changedProileData = [];\n this.getKPIScorecardData();\n } else {\n this.toast.info('Please select a scorecard profile.');\n this.loading = false;\n }\n },\n (error) => {\n this.toast.warning('Unexpected error saving positions.');\n this.loading = false;\n }\n );\n }\n }\n\n savePositionChange() {\n let positionKeys = Array.from(this.selectedPositionKeys);\n\n this.loading = true;\n this.scorecardService\n .upsertKPIScorecard(\n this.selectedKPIScorecard.kpiScorecardKey,\n this.scorecardForm.getRawValue(),\n positionKeys as number[]\n )\n .subscribe(\n (r) => {\n this.scorecardForm.reset();\n this.selectedPositionKeys.clear();\n this.loading = false;\n },\n () => {\n this.toast.warning('Unexpected error.');\n this.loading = false;\n }\n );\n }\n\n createFormGroup(): UntypedFormGroup {\n return this.formBuilder.group({\n effectiveDate: new UntypedFormControl(null, Validators.required),\n inactiveDate: new UntypedFormControl(null, Validators.required),\n selectedKPIs: this.formBuilder.array([], Validators.required),\n });\n }\n\n get effectiveDate() {\n return this.scorecardForm.get('effectiveDate');\n }\n\n get inactiveDate() {\n return this.scorecardForm.get('inactiveDate');\n }\n\n calculateTotalWeightPercentage() {\n this.totalWeightPercentage = 0;\n this.scorecardInfoData.forEach((data) => {\n if (data.isSelected) {\n let weight = +data.scorecardWeight;\n if (Number.isNaN(weight)) {\n weight = 0;\n }\n this.totalWeightPercentage += weight;\n }\n });\n }\n\n getClientKPICategory(clientKPI: ClientKPIWebModelComplete): any {\n let kpiMaster = this.kpiMasterList.find((kpi) => {\n return (\n kpi.kpiMasterKey === clientKPI.kpiMasterKey &&\n kpi.kpiMilestoneKey === clientKPI.kpiMilestoneKey &&\n kpi.kpiMilestoneStaffingKey === clientKPI.kpiMilestoneStaffingKey\n );\n });\n return kpiMaster.kpiCategory;\n }\n\n editScorecardClicked(i?: number) {\n if (i >= 0) {\n this.selectedKPIScorecard = this.gridView.data[i];\n }\n\n if (this.selectedKPIScorecard.isAssigned) {\n this.setPositionKeys();\n this.loadPositionNames();\n this.setDates();\n }\n scroll(0, 0);\n if (this.selectedKPIScorecard.kpiScorecardType !== 'Employee') {\n this.selectDatesAndPositions = false;\n this.viewScorecardClicked(this.selectedKPIScorecard);\n this.viewKPIScorecardProfile = true;\n } else {\n this.setPositionKeys();\n this.loadPositionNames();\n this.setDates();\n\n this.selectDatesAndPositions = true;\n this.viewKPIScorecardProfile = false;\n }\n this.scorecardListView = false;\n }\n\n editButtonCliecked() {\n this.searchTerm = '';\n this.selectKPIs = true;\n this.setKPIWeights = false;\n this.viewKPIs = false;\n this.totalWeightPercentage = 0;\n this.updateKPIGrid();\n }\n\n updateKPIGrid() {\n this.profileTableDataProperties.isDataLoaded = false;\n this.profileTableDataProperties.hasData = false;\n let data: IScorecardKPIInfo[] = this.scorecardInfoData;\n\n if (this.viewKPIs || this.setKPIWeights) {\n data = this.scorecardInfoData.filter((item) => item.isSelected === true);\n }\n let columnProperties = this.profileTableColumnProperties.columnProperties;\n if (this.searchTerm && this.searchTerm.length > 0) {\n data = this.commKendoTbleService.searchHandler(data, columnProperties, this.searchTerm);\n }\n\n columnProperties.forEach((item) => {\n // TODO: set type / hidden status more dynamic\n if (this.viewKPIs && item.inputProperties) {\n item.dataType = 'number';\n } else {\n item.dataType = item.dataType;\n }\n\n if (this.viewKPIs && item.checkBoxProperties) {\n item.hidden = true;\n }\n\n if (this.selectKPIs && item.checkBoxProperties) {\n item.hidden = false;\n }\n\n if (this.selectKPIs && item.inputProperties) {\n item.dataType = 'number';\n }\n\n if (this.setKPIWeights && item.checkBoxProperties) {\n item.hidden = true;\n }\n item.hideFooterValue = true;\n if (this.setKPIWeights && item.inputProperties) {\n item.dataType = 'input';\n item.hideFooterValue = false;\n }\n });\n\n this.customTableInfo.dataSet = data;\n this.customTableInfo = this.reportService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action,\n this.searchTerm\n );\n\n this.profileTableColumnProperties = Object.assign({}, this.profileTableColumnProperties);\n this.profileTableDataProperties.gridData = data;\n this.profileTableDataProperties.hasData = data.length > 0;\n this.profileTableDataProperties.isDataLoaded = true;\n this.profileTableDataProperties = Object.assign({}, this.profileTableDataProperties);\n }\n\n setDates() {\n this.effectiveDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(\n this.selectedKPIScorecard.effectiveDate\n )\n );\n this.inactiveDate.setValue(\n this.reusableFunctions.getDateFromDateTimeOffset(this.selectedKPIScorecard.inActiveDate)\n );\n }\n\n setScorecardSelection() {\n this.scorecardInfoData.forEach((kpiInf) => {\n if (\n kpiInf.clientKPIScorecardKey &&\n kpiInf.clientKPIScorecardKey !== null &&\n kpiInf.isActive === true &&\n kpiInf.isDeleted === false\n ) {\n kpiInf.isSelected = true;\n } else {\n kpiInf.isSelected = false;\n }\n });\n }\n\n viewScorecardClicked(record: KPIScorecard) {\n scroll(0, 0);\n this.selectDatesAndPositions = false;\n this.scorecardListView = false;\n this.setKPIWeights = false;\n this.selectKPIs = false;\n this.viewKPIs = true;\n this.selectedKPIScorecard = record;\n this.searchTerm = '';\n\n this.profileTableDataProperties.gridData = [];\n this.resetTableData();\n this.scorecardService.getPossibleKPIsForScorecard(record.kpiScorecard).subscribe(\n (res) => {\n if (res && res.length > 0) {\n this.scorecardInfoDataOriginal = this.kpiService.setScorecardInfoTableData(\n res,\n record.kpiScorecardKey\n );\n this.preserveOriginalKPIProfileData();\n this.setScorecardSelection();\n this.updateKPIGrid();\n } else {\n this.profileTableDataProperties.gridData = [];\n this.profileTableDataProperties.hasData = false;\n this.profileTableDataProperties.isDataLoaded = true;\n this.profileTableDataProperties = Object.assign(\n {},\n this.profileTableDataProperties\n );\n }\n },\n (err) => {\n this.profileTableDataProperties.gridData = [];\n this.profileTableDataProperties.action = NoDataActionType.error;\n this.profileTableDataProperties.hasData = false;\n this.profileTableDataProperties.isDataLoaded = true;\n this.profileTableDataProperties = Object.assign(\n {},\n this.profileTableDataProperties\n );\n throw new Error(err);\n }\n );\n this.viewKPIScorecardProfile = true;\n this.calculateTotalWeightPercentage();\n }\n\n loadPositionNames() {\n this.selectedKPIScorecard.positions = this.staffPositions\n .filter((p) => this.selectedPositionKeys.has(p.staffPositionKey))\n .map((pos) => pos.position);\n }\n\n setPositionKeys() {\n this.selectedPositionKeys.clear();\n this.clientKPIScorecardStaffPositions.forEach((position) => {\n if (position.kpiScorecardKey === this.selectedKPIScorecard.kpiScorecardKey) {\n this.selectedPositionKeys.add(position.staffPositionKey);\n }\n });\n }\n\n onNext(record) {\n scroll(0, 0);\n this.searchTerm = '';\n if (this.selectDatesAndPositions) {\n this.loadPositionNames();\n this.setDates();\n this.selectDatesAndPositions = false;\n this.viewKPIScorecardProfile = true;\n this.viewScorecardClicked(record);\n this.viewKPIs = false;\n this.selectKPIs = true;\n this.savePositionChange();\n } else {\n this.setKPIWeights = true;\n this.selectKPIs = false;\n this.viewKPIs = false;\n this.updateKPIGrid();\n this.calculateTotalWeightPercentage();\n }\n }\n\n preserveOriginalKPIProfileData() {\n this.scorecardInfoData = this.scorecardInfoDataOriginal.map((obj) => ({ ...obj }));\n }\n\n cancelClicked() {\n scroll(0, 0);\n if (this.selectDatesAndPositions) {\n this.scorecardListView = true;\n this.selectDatesAndPositions = false;\n this.viewKPIScorecardProfile = false;\n this.getKPIScorecardData();\n } else {\n this.setKPIWeights = false;\n this.selectKPIs = false;\n this.viewKPIs = true;\n this.changedProileData = [];\n this.preserveOriginalKPIProfileData();\n this.setScorecardSelection();\n this.updateKPIGrid();\n }\n }\n\n returnToKpiProfilesClicked() {\n this.viewKPIScorecardProfile = false;\n this.selectKPIs = false;\n this.selectDatesAndPositions = false;\n this.viewKPIScorecardProfile = false;\n\n this.updateSummaryGrid();\n\n this.scorecardListView = true;\n this.setKPIWeights = false;\n this.selectedPositionKeys.clear();\n }\n\n backToPositions() {\n //Non EMployee types do no set positions\n if (this.selectedKPIScorecard.kpiScorecardType !== 'Employee') {\n this.scorecardListView = true;\n } else {\n this.selectDatesAndPositions = true;\n }\n this.viewKPIScorecardProfile = false;\n\n scroll(0, 0);\n }\n\n backToSelectKPIs() {\n this.searchTerm = '';\n this.setKPIWeights = false;\n this.selectKPIs = true;\n this.viewKPIs = false;\n scroll(0, 0);\n this.updateKPIGrid();\n }\n\n positionCheckboxChangeHandler(checked: boolean, positionKey: number) {\n const selectedStaffPosition = this.staffPositions.find(\n (position) => position.staffPositionKey === positionKey\n );\n this.scorecardForm.markAsDirty();\n if (!checked) {\n this.selectedPositionKeys.add(positionKey);\n } else {\n this.selectedPositionKeys.delete(positionKey);\n }\n selectedStaffPosition.checked = !checked;\n }\n\n updateSelectedPosition(checked: boolean, staffPositionKey: number) {\n if (checked) {\n this.selectedPositionKeys.add(staffPositionKey);\n } else {\n this.selectedPositionKeys.delete(staffPositionKey);\n }\n this.positionCheckboxChangeHandler(checked, staffPositionKey);\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.sort = sort;\n this.gridView = {\n data: orderBy(this.gridView.data, this.sort),\n total: this.gridView.data.length,\n };\n }\n\n profileDataChangeEvent(change: IDataChange) {\n let changedRow: IScorecardKPIInfo = change.value;\n this.calculateTotalWeightPercentage();\n\n this.changedProileData = this.changedProileData.filter(\n (item) => item.clientKPIKey != changedRow.clientKPIKey\n );\n this.changedProileData.push(changedRow);\n }\n\n searchRows(searchTerm) {\n this.searchTerm = searchTerm;\n let timeout = null;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n this.noDataType.action = NoDataActionType.search;\n this.noDataType.searchTerm = this.searchTerm;\n this.updateKPIGrid();\n }, 1000);\n }\n\n getHeaderStyle() {\n return {\n 'background-color': '#FFFFFF',\n color: '#223540',\n 'border-width': '0 0 medium 0',\n font: 'Bold 14px/19px Roboto',\n };\n }\n\n resetTableData() {\n let customTableInfo = Object.assign({}, this.customTableInfo);\n customTableInfo.dataSet = [];\n return this.reportService.refreshCustomMatTable(\n customTableInfo,\n false,\n false,\n this.action,\n this.searchTerm\n );\n }\n}\n","\n \n
\n Domain Management\n
\n
Manage and view your company domains
\n
\n
\n \n
\n \n \n Find Domain\n \n search\n \n\n
\n \n
\n
\n \n
\n \n \n
\n \n
\n
\n\n \n \n \n {{ dataItem.domain }}\n \n \n\n \n \n \n \n Edit\n \n \n Remove\n \n \n {{ isNew ? 'Add' : 'Update' }}\n \n \n {{ isNew ? 'Discard changes' : 'Cancel' }}\n \n \n \n \n
\n
\n
\n
\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { SortDescriptor, orderBy, filterBy, State } from '@progress/kendo-data-query';\nimport { PageChangeEvent, GridDataResult, GridComponent } from '@progress/kendo-angular-grid';\nimport { ClientDomainService } from '../../../services/client-domain.service';\nimport { ClientDomainModel } from '../../../interfaces/client-domain-data';\nimport { ToastService } from '../../../../shared/services/toast.service';\nimport { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport {\n NoDataSourceType,\n NoDataTypes,\n NoDataActionType,\n} from '../../../../shared/interfaces/no-data';\n\n@Component({\n selector: 'app-domain-management',\n templateUrl: './domain-management.component.html',\n styleUrls: ['./domain-management.component.scss'],\n})\nexport class DomainManagementComponent implements OnInit {\n /* Domain Search */\n domainSearchTerm: string;\n filteredDomains: ClientDomainModel[];\n approvedDomains: ClientDomainModel[];\n\n /* Domain API */\n loading: boolean;\n error: any;\n domainEntries: ClientDomainModel[];\n domainEntrySort: SortDescriptor[];\n hasName: boolean;\n\n /* Kendo Grid */\n gridView: GridDataResult;\n headerStyle: { [key: string]: string } = {\n 'text-align': 'left',\n 'background-color': '#223540',\n color: '#FFFFFF',\n 'border-color': '#223540',\n };\n skip = 0;\n pageSize = 10;\n sort: SortDescriptor[] = [];\n sortable = {\n mode: 'single',\n allowUnsort: false,\n };\n scrollable = false;\n type: 'numeric' | 'input' = 'input';\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 20],\n };\n gridState: State = {\n sort: [],\n skip: 0,\n take: 10,\n };\n\n public formGroup: UntypedFormGroup;\n private editedRowIndex: number;\n @ViewChild(GridComponent, { static: false })\n private grid: GridComponent;\n\n noDataType: NoDataTypes;\n\n constructor(private toastService: ToastService, private domainService: ClientDomainService) {}\n\n ngOnInit() {\n scroll(0, 0);\n this.domainService.getDomains().subscribe(\n (data) => {\n this.approvedDomains = data;\n },\n (error) => {\n throw new Error(error);\n }\n );\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Domains',\n inputSource: NoDataSourceType.table,\n };\n this.domainEntrySort = [{ field: 'domain', dir: 'desc' }];\n this.getDomains();\n }\n\n /* Domain Methods */\n getDomains() {\n this.loading = true;\n this.domainService.getDomains().subscribe(\n (domains) => {\n this.loading = false;\n this.domainEntries = domains;\n this.loadDomainsInGrid();\n },\n (error) => {\n this.error = error;\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n\n /* Search */\n filterDomains(): void {\n let searchTermTokens = this.domainSearchTerm.split(' ');\n this.filteredDomains = filterBy(this.domainEntries, {\n logic: 'or',\n filters: [\n {\n field: 'domain',\n operator: 'startswith',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n this.filteredDomains = filterBy(this.filteredDomains, {\n logic: 'or',\n filters: [\n {\n field: 'domain',\n operator: 'startswith',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n let orderedData = orderBy(this.filteredDomains, this.domainEntrySort);\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n this.updateGrid();\n }\n\n /* Kendo Grid */\n\n // -- Update the Kendo Grid\n updateGrid() {\n let orderedData = orderBy(\n this.filteredDomains ? this.filteredDomains : this.domainEntries,\n this.domainEntrySort\n );\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n loadDomainsInGrid() {\n let orderedData = orderBy(this.domainEntries, this.domainEntrySort);\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.loadDomainsInGrid();\n }\n\n pageChange(event: PageChangeEvent): void {\n this.pageSize = event.take;\n this.skip = event.skip;\n this.updateGrid();\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.domainEntrySort = sort;\n this.updateGrid();\n }\n\n removeHandler({ dataItem }) {\n this.domainService.getEmailCount(dataItem.domain).subscribe(\n (data) => {\n if (+data == 0) {\n this.domainService.deleteDomain(dataItem.clientDomainKey).subscribe(\n () => {\n this.toastService.success('Domain ' + dataItem.domain + ' deleted.');\n this.getDomains();\n },\n () => {\n this.toastService.error('Error deleting ' + dataItem.domain);\n }\n );\n } else {\n this.toastService.error('Error: Domain has at least one employee');\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n public addDomain() {\n this.closeEditor(this.grid);\n this.formGroup = new UntypedFormGroup({\n domain: new UntypedFormControl('', Validators.pattern('(^.+[.].+$)')),\n });\n this.grid.addRow(this.formGroup);\n }\n\n public addHandler({ sender, dataItem }) {\n this.closeEditor(sender);\n this.formGroup = new UntypedFormGroup({\n domain: new UntypedFormControl('', Validators.pattern('(^.+[.].+$)')),\n });\n sender.addRow(this.formGroup);\n }\n\n public editHandler({ sender, rowIndex, dataItem }) {\n this.closeEditor(sender);\n this.formGroup = new UntypedFormGroup({\n clientDomainKey: new UntypedFormControl(dataItem.clientDomainKey),\n clientKey: new UntypedFormControl(dataItem.clientKey),\n domain: new UntypedFormControl(dataItem.domain, Validators.pattern('(^.+[.].+$)')),\n });\n this.editedRowIndex = rowIndex;\n sender.editRow(rowIndex, this.formGroup);\n }\n\n public saveHandler({ sender, rowIndex, formGroup, isNew }) {\n const domain: ClientDomainModel = formGroup.value;\n let domainCheck = this.approvedDomains.find(\n (foundDomain) => foundDomain.domain == domain.domain\n );\n if (!isNew && domainCheck === undefined) {\n this.domainService.updateDomain(domain).subscribe(\n () => {\n sender.closeRow(rowIndex);\n this.toastService.success('Domain ' + domain.domain + ' updated.');\n this.getDomains();\n },\n (error) => {\n this.toastService.error('Error updating ' + domain.domain);\n throw new Error(error);\n }\n );\n } else if (isNew && domainCheck === undefined) {\n this.domainService.insertDomain(domain).subscribe(\n () => {\n this.toastService.success('Domain ' + domain.domain + ' created.');\n sender.closeRow(rowIndex);\n this.getDomains();\n },\n (error) => {\n this.toastService.error('Error creating ' + domain.domain);\n throw new Error(error);\n }\n );\n } else {\n this.toastService.error('ERROR: Domain name already exist');\n }\n }\n\n cancelHandler({ sender, rowIndex }) {\n this.closeEditor(sender, rowIndex);\n }\n\n private closeEditor(grid, rowIndex = this.editedRowIndex) {\n grid.closeRow(rowIndex);\n this.editedRowIndex = undefined;\n this.formGroup = undefined;\n }\n}\n","\n
Company Notifications
\n\n

\n Manage which notifications your users can receive. Anything disabled here will be\n unavailable for users.\n

\n
\n\n
\n \n \n \n
\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n\n \n \n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { NotificationService } from 'app/modules/shared/services/notification.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { ClientAlertTypeModel, UserAlertTypeModel } from '../../interfaces/notification';\nimport { GridDataResult, DataStateChangeEvent } from '@progress/kendo-angular-grid';\nimport { orderBy, process, State } from '@progress/kendo-data-query';\nimport { CurrentUserStateService } from 'app/modules/shared/services/current-user-state.service';\nimport { ImpersonationService } from 'app/modules/shared/services/impersonation.service';\n\n@Component({\n selector: 'app-company-notifications',\n templateUrl: './company-notifications.component.html',\n styleUrls: ['./company-notifications.component.scss'],\n})\nexport class CompanyNotificationsComponent implements OnInit {\n constructor(\n private notificationService: NotificationService,\n private toast: ToastService,\n private currentUserService: CurrentUserStateService,\n private impersonationService: ImpersonationService\n ) {}\n\n isPowerUser: boolean;\n gridView: GridDataResult;\n sortable = {\n mode: 'multiple',\n allowUnsort: true,\n };\n type: 'numeric' | 'input' = 'input';\n allResults: boolean = false;\n groupable = true;\n scrollable = 'scrollable';\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 25, 50],\n };\n state: State = {\n skip: 0,\n take: 10,\n };\n public notifications: ClientAlertTypeModel[];\n public isLoading: boolean;\n isSuperUser = false;\n AlertValueTypes = [\n '%LOAN_NUMBER',\n '%HIERARCHY_IDENTIFIER',\n '%PRODUCT_TYPE',\n '%GL_ACCOUNT_NUMBER',\n ];\n ngOnInit() {\n this.getAlertTypes();\n this.isPowerUser = this.impersonationService.isPowerUser();\n if (this.impersonationService.isImpersonatingUser()) this.isSuperUser = false;\n else this.isSuperUser = this.currentUserService.isLBASuperUser();\n }\n\n // Get Alert types for client\n getAlertTypes(): void {\n this.isLoading = true;\n this.notificationService.getClientNotificationTypes().subscribe(\n (data) => {\n if (!this.currentUserService.isLBASuperUser) {\n this.notifications = data.filter(\n (ntfc) => ntfc.isActiveSuperUserControl === true\n );\n } else {\n this.notifications = data;\n }\n this.notifications = this.formatAlerts(this.notifications);\n this.loadData();\n this.isLoading = false;\n },\n (error) => {\n this.isLoading = false;\n this.toast.warning('Something went wrong loading this page. Try again later!');\n throw new Error(error);\n }\n );\n }\n\n formatAlerts(notifications: ClientAlertTypeModel[]): ClientAlertTypeModel[] {\n for (let notification of notifications) {\n if (notification && notification.alertDescription) {\n notification.alertDescription = this.removeAlertPlaceholder(\n notification.alertDescription\n );\n }\n }\n\n return notifications;\n }\n\n removeAlertPlaceholder(description: string): string {\n this.AlertValueTypes.forEach((el) => {\n if (description.includes(el)) {\n let replacementText = '';\n if (el === '%LOAN_NUMBER') {\n replacementText = 'Loan';\n }\n description = description.replace(el, replacementText);\n }\n });\n return description;\n }\n\n loadData() {\n this.gridView = {\n data: process(this.notifications, this.state).data,\n total: this.notifications.length,\n };\n }\n\n /* Update alert's active state */\n toggleNotification(alertType: ClientAlertTypeModel): void {\n //Reverse field so user sees checked = Enabled\n alertType.isInactive = alertType.isInactive;\n this.notificationService.updateClientAlertType(alertType).subscribe(\n (data) => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n lbaToggleClientNotification(alertType: ClientAlertTypeModel): void {\n alertType.isActiveSuperUserControl = alertType.isActiveSuperUserControl;\n this.notificationService.updateClientAlertTypeLBAControl(alertType).subscribe(\n (data) => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n /* Delete User alerts */\n deleteUserAlert(alertTypeKey: number): void {\n this.notificationService.deleteUserAlertType(alertTypeKey).subscribe(\n (data) => {},\n (error) => {\n throw new Error(error);\n }\n );\n }\n dataStateChange(state: DataStateChangeEvent): void {\n this.state = state;\n this.loadData();\n }\n}\n","\n \n Scheduled Reports\n \n \n \n \n \n
\n\n \n \n \n \n \n {{ dataItem.module | titlecase }}\n \n \n\n \n\n \n \n\n \n\n \n \n \n Weekly\n Monthly\n Daily\n \n \n \n\n \n \n {{ dataItem.enterDt | date }}\n \n \n\n \n \n \n Download\n \n \n \n \n \n\n \n \n \n \n \n {{ dataItem.module | titlecase }}\n \n \n\n \n\n \n \n\n \n\n \n \n \n Weekly\n Monthly\n Daily\n \n \n \n\n \n \n {{ getDayOfWeek(dataItem.dayOfWeek) }}\n \n \n\n \n \n {{ getHour(dataItem) }}\n \n \n\n \n \n \n \n \n \n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { ConfirmationDialogComponent } from '../../../shared/components/confirmation-dialog/confirmation-dialog.component';\nimport { ScheduledReportsService } from '../../../shared/services/scheduled-reports.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { saveAs } from 'file-saver';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatTabChangeEvent } from '@angular/material/tabs';\n\n@Component({\n selector: 'app-scheduled-reports',\n templateUrl: './scheduled-reports.component.html',\n styleUrls: ['./scheduled-reports.component.css'],\n})\nexport class ScheduledReportsComponent implements OnInit {\n tab: number = 0;\n schedules: any[];\n exports: any[];\n\n directDownloadIdentifier: string;\n\n schedulesGrid: GridDataResult;\n exportsGrid: GridDataResult;\n\n loadingSchedules = true;\n loadingExports = true;\n\n scheduleOptions: any;\n\n pageSizeS = 10;\n skipS = 0;\n pageSizeE = 10;\n skipE = 0;\n\n constructor(\n private scheduledReportService: ScheduledReportsService,\n private dialogRef: MatDialog,\n private toastService: ToastService,\n private reusableFunctions: ReusableFunctions,\n private activatedRoute: ActivatedRoute\n ) {\n this.activatedRoute.queryParams.subscribe((res) => {\n if (res && res['download']) {\n this.directDownloadIdentifier = res['download'];\n }\n });\n }\n\n ngOnInit(): void {\n this.scheduleOptions = this.scheduledReportService.getOptions();\n this.load();\n }\n\n public handleTabChange(event: MatTabChangeEvent): void {\n this.tab = event.index;\n }\n\n load() {\n this.getSchedules();\n this.getExports();\n }\n\n public getSchedules() {\n this.loadingSchedules = true;\n this.scheduledReportService.getScheduledByUser().subscribe(\n (res) => {\n this.schedules = res;\n\n this.setGridViewSchedules();\n\n this.loadingSchedules = false;\n },\n (error) => {\n this.loadingSchedules = false;\n }\n );\n }\n\n public getExports() {\n this.loadingExports = true;\n this.scheduledReportService.getExports().subscribe(\n (res) => {\n this.exports = res;\n\n this.setGridViewExports();\n\n if (this.directDownloadIdentifier) {\n let matchingExport = this.exports.find(\n (x) => x.blobIdentifier == this.directDownloadIdentifier\n );\n\n if (matchingExport) {\n this.download(matchingExport);\n this.directDownloadIdentifier = null;\n }\n }\n this.loadingExports = false;\n },\n (error) => {\n this.loadingExports = false;\n }\n );\n }\n\n getDayOfWeek(day) {\n let dayItem = this.scheduleOptions.day.find((x) => x.value == day);\n\n if (dayItem) {\n return dayItem.name;\n }\n\n return '';\n }\n\n getHour(row) {\n let hour = parseInt(row.hour) + row.utcOffset;\n\n if (hour < 0) {\n hour = 24 + hour;\n }\n\n let item = this.scheduleOptions.hour.find((x) => x.value == hour);\n if (item) {\n return item.name;\n }\n\n return '';\n }\n\n cancelConfirm(item) {\n let ref = this.dialogRef.open(ConfirmationDialogComponent, {\n data: { message: `You are about to delete a scheduled report for ${item.reportName}.` },\n });\n\n ref.afterClosed().subscribe((result) => {\n if (result) {\n this.deleteSchedule(item);\n }\n });\n }\n\n deleteSchedule(item) {\n this.scheduledReportService.deleteSchedule(item.userScheduledReportKey).subscribe(\n (res) => {\n this.toastService.success(\n `Scheduled report for ${item.reportName} has been deleted`\n );\n this.load();\n },\n (error) => {\n this.toastService.warning(\n `Something went wrong deleting scheduled report for ${item.reportName}`\n );\n }\n );\n }\n\n download(item) {\n item.loading = true;\n\n try {\n this.toastService.info(`${item.reportName} export is downloading`);\n\n this.scheduledReportService.download(item.blobIdentifier).subscribe((res) => {\n if (res) {\n let reportName =\n item.reportName +\n '_' +\n this.reusableFunctions.getCurrentDateTimeStamp(item.enterDt) +\n '_.xlsx';\n saveAs(res, reportName);\n\n this.toastService.success(`${item.reportName} export has finished downloading`);\n } else {\n throw 'Nothing';\n }\n\n item.loading = false;\n });\n } catch (e) {\n this.toastService.warning(`Something went wrong downloading ${item.reportName} export`);\n }\n }\n\n pageChangeSchedules({ skip, take }: PageChangeEvent): void {\n this.skipS = skip;\n this.pageSizeS = take;\n this.setGridViewSchedules();\n }\n\n setGridViewSchedules() {\n this.schedulesGrid = {\n data: this.schedules.slice(this.skipS, this.skipS + this.pageSizeS),\n total: this.schedules.length,\n };\n }\n\n pageChangeExports({ skip, take }: PageChangeEvent): void {\n this.skipE = skip;\n this.pageSizeE = take;\n this.setGridViewExports();\n }\n\n setGridViewExports() {\n this.exportsGrid = {\n data: this.exports.slice(this.skipE, this.skipE + this.pageSizeE),\n total: this.exports.length,\n };\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ClientLookupDataModel, ClientLookupParamsModel } from '../interfaces/client-lookup';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientLookupService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/ClientLookup/').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) { }\n\n getClientLookupMappings(parameters: ClientLookupParamsModel) {\n return this._http.post(\n this._url + 'GetClientLookupMappings',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n }\n );\n }\n\n getLookupValues(parameters: ClientLookupParamsModel) {\n return this._http.post(\n this._url + 'GetLookupValues',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n }\n );\n }\n\n getLookupDataTypes() {\n return this._http.post(\n this._url + 'GetLookupDataTypes',\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n }\n );\n }\n\n submitChanges(clientLookupParamsArray: ClientLookupParamsModel[]) {\n return this._http.post(\n this._url + 'SubmitChanges',\n clientLookupParamsArray,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n }\n );\n }\n}\n","\n \n Find Mapping\n \n search\n \n
\n
{{ mappingDescription }}
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n SAVE CHANGES\n \n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { filterBy, orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { ClientLookupParamsModel } from 'app/modules/settings/interfaces/client-lookup';\nimport { ClientLookupService } from 'app/modules/settings/services/client-lookup.service';\nimport { MappingType } from '../../interfaces/mapping-type';\nimport { NoDataActionType, NoDataSourceType, NoDataTypes } from '../../interfaces/no-data';\nimport { ToastService } from '../../services/toast.service';\n\n@Component({\n selector: 'mapping-table',\n templateUrl: './mapping-table.component.html',\n styleUrls: ['./mapping-table.component.scss']\n})\nexport class MappingTableComponent implements OnInit {\n // NOTE: Mapping table not fully component agnostic yet\n @Input() mappingDescription: string;\n @Input() mappingData: any[];\n @Input() mappingTypes: MappingType[];\n @Input() mappingSort: SortDescriptor[];\n @Input() mappingTitle: string;\n @Input() loading: boolean = false;\n\n mappingSearchTerm: string;\n filteredMappings: MappingType[];\n saveBtnDisabled: boolean = true;\n tableData: { data: any, total: any };\n noDataType: NoDataTypes;\n pageSize = 10;\n skip = 0;\n\n constructor(private clientLookupService: ClientLookupService,\n private toastService: ToastService) { }\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.mappingTitle,\n inputSource: NoDataSourceType.listOfEntities,\n };\n this.updateGrid();\n }\n\n ngOnChanges() {\n if(this.mappingSearchTerm && this.mappingSearchTerm.length != 0) {\n this.filterMappings()\n } else {\n this.filteredMappings = null;\n }\n this.updateGrid();\n }\n\n updateGrid() {\n if(this.mappingData != null) {\n let orderedData = orderBy(\n this.filteredMappings ? this.filteredMappings : this.mappingData, \n this.mappingSort);\n this.tableData = {\n data: orderedData?.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length\n };\n }\n } \n\n pageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.updateGrid();\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.mappingSort = sort;\n this.updateGrid();\n }\n\n mappingChangeHandler(changedMapping: any) {\n this.mappingData.find(\n (mapping) => mapping.clientTag === changedMapping.clientTag\n ).isDirty = true;\n this.saveBtnDisabled = false;\n }\n\n filterMappings() {\n this.filteredMappings = filterBy(this.mappingData, {\n logic: 'or',\n filters: [\n {\n field: 'clientTag',\n operator: 'contains',\n value: this.mappingSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'lookupValue',\n operator: 'contains',\n value: this.mappingSearchTerm,\n ignoreCase: true,\n },\n ],\n });\n let orderedData = orderBy(this.filteredMappings, this.mappingSort);\n this.tableData = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n // TODO: Make this more dynamic, pass in a callback function from a Input() parameter\n submitChanges() {\n let changedMappings: ClientLookupParamsModel[] = this.mappingData\n .filter((mapping) => mapping.isDirty)\n .map((mapping) => {\n return {\n clientTag: mapping.clientTag,\n lookupValueKey: +mapping.typeKey,\n lookupDataTypeAbbv: null\n }\n });\n\n this.clientLookupService.submitChanges(changedMappings).subscribe(\n (data) => {\n this.saveBtnDisabled = true;\n this.toastService.success(`Updated ${this.mappingTitle} mappings successfully`)\n },\n (error) => {\n throw new Error(error);\n }\n )\n }\n}\n","
Loan Characteristics Mapping
\n
\n \n \n \n \n \n
\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatTabGroup } from '@angular/material/tabs';\nimport { SortDescriptor } from '@progress/kendo-data-query';\nimport { MappingType } from 'app/modules/shared/interfaces/mapping-type';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { ClientLookupDataModel, ClientLookupMappingModel, ClientLookupParamsModel } from '../../interfaces/client-lookup';\nimport { ClientLookupService } from '../../services/client-lookup.service';\n\n@Component({\n selector: 'app-loan-characteristics-mapping',\n templateUrl: './loan-characteristics-mapping.component.html',\n styleUrls: ['./loan-characteristics-mapping.component.scss']\n})\nexport class LoanCharacteristicsMappingComponent implements OnInit {\n /* Tab Scroller */\n @ViewChild('mappingTabBar') mappingTabBar: MatTabGroup;\n tabs = [];\n tabActiveIndex: number = 0;\n mappingTypes: MappingType[];\n mappingSort: SortDescriptor[] = [\n { field: 'clientTag', dir: 'asc' }\n ];\n mappingTitle: string = 'Test';\n mappings: Array = [];\n selectedMapping: ClientLookupMappingModel;\n loading: boolean = false;\n\n constructor(private clientLookupService: ClientLookupService) { }\n\n ngOnInit() {\n this.getClientMappings();\n }\n\n getClientMappings() {\n this.loading = true;\n this.clientLookupService.getLookupDataTypes().subscribe(\n (lookupDataTypes) => {\n lookupDataTypes.forEach(\n (lookupDataType, index) => {\n this.tabs.push({ label: lookupDataType.lookupDataType, \n abbv: lookupDataType.lookupTypeAbbv });\n let lookupAbbv = lookupDataType.lookupTypeAbbv;\n let clientLookupParams: ClientLookupParamsModel = {\n lookupDataTypeAbbv: lookupAbbv\n };\n this.clientLookupService.getClientLookupMappings(clientLookupParams).subscribe(\n (data) => {\n this.getLookupTypes(data, lookupDataType.lookupDataType, lookupAbbv, index);\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n }\n )\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n )\n }\n\n getLookupTypes(lookupData: any, mappingTitle: string, lookupAbbv: string, index: number): object[] {\n let clientLookupParams: ClientLookupParamsModel = {\n lookupDataTypeAbbv: lookupAbbv\n };\n\n this.clientLookupService.getLookupValues(clientLookupParams).subscribe(\n (data) => {\n this.mappings[index] = {\n clientLookupDataModel: lookupData.map(value => this.formatMappingData(value)),\n mappingDescription: `See your list of ${mappingTitle} mappings here`,\n mappingTypes: data.map((value) => this.lookupValueToMappingType(value)),\n mappingTitle: mappingTitle, \n lookupAbbv: lookupAbbv\n };\n\n // Set the first selected mapping\n if(index == 0) {\n this.selectedMapping = this.mappings[index];\n this.loading = false;\n }\n },\n (error) => {\n this.loading = false;\n throw new Error(error);\n }\n );\n\n return null;\n }\n\n lookupValueToMappingType(lookupValue: ClientLookupDataModel): MappingType {\n return {\n typeKey: lookupValue.lookupValueKey,\n typeValue: lookupValue.lookupValue\n };\n }\n\n formatMappingData(value: ClientLookupDataModel) {\n return {\n clientTag: value.clientTag,\n lookupValue: value.lookupValue,\n lookupValueKey: value.lookupValueKey,\n typeKey: value.lookupValueKey\n }\n }\n\n /* Tab Scroller */\n tabChangeHandler(event) {\n let index: number = event.index;\n this.tabActiveIndex = index;\n this.selectedMapping = this.mappings[index];\n }\n\n previousClicked() {\n this.mappingTabBar.selectedIndex = --this.tabActiveIndex;\n }\n\n nextClicked() {\n this.mappingTabBar.selectedIndex = ++this.tabActiveIndex;\n }\n\n isActiveTab(index: number) {\n return this.tabActiveIndex === index;\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GLAcctDataModel } from '../interfaces/general-ledger';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GeneralLedgerService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/GLAcct/').replace('{version}', this.version);\n\n constructor(private http: HttpClient) {}\n\n getGLAccts(): Observable {\n return this.http.get(this._url + 'Get/');\n }\n\n insertGLAcct(glAcct: GLAcctDataModel): Observable {\n return this.http.post(this._url + 'InsertGlAcct/', glAcct, {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n });\n }\n\n submitChanges(changedOrAddedProducts) {\n return new Observable((subscriber) => {\n this.http.post(this._url + 'SubmitChanges', changedOrAddedProducts).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n}\n","\n
\n
General Ledger Mapping
\n
\n
\n \n Find General Ledger\n \n search\n \n
\n \n \n \n
\n
\n\n \n \n CANCEL\n \n \n
\n\n
\n \n \n
\n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ suggestion }}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n
\n \n SAVE CHANGES\n \n
\n
\n
\n","import { Component, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\nimport { GridComponent, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { filterBy, orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport { Observable, Subject } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { AccountType, GLAcctDataModel } from '../../interfaces/general-ledger';\nimport { GeneralLedgerService } from '../../services/general-ledger.service';\n\nconst createFormGroup = (dataItem) =>\n new UntypedFormGroup({\n accountNumber: new UntypedFormControl(dataItem.accountNumber, Validators.required),\n accountName: new UntypedFormControl(dataItem.accountName),\n accountType: new UntypedFormControl(dataItem.accountType),\n accountCategory: new UntypedFormControl(dataItem.accountCategory),\n isLoanAccount: new UntypedFormControl(dataItem.isLoanAccount),\n });\n\nconst matches = (el, selector) => (el.matches || el.msMatchesSelector).call(el, selector);\n\n@Component({\n selector: 'app-general-ledger-mapping',\n templateUrl: './general-ledger-mapping.component.html',\n styleUrls: ['./general-ledger-mapping.component.scss'],\n})\nexport class GeneralLedgerMappingComponent implements OnInit {\n @ViewChild(GridComponent)\n private grid: GridComponent;\n public formGroup: UntypedFormGroup;\n private docClickSubscription: any;\n private editedRowIndex: number;\n\n noAccts: boolean;\n noDataType: NoDataTypes;\n glAccts: { data: any; total: any };\n glAcctData: GLAcctDataModel[];\n filteredAccts: GLAcctDataModel[];\n exportData: GLAcctDataModel[];\n addNew: boolean = false;\n exportFileName: string;\n glAcctSearchTerm: string;\n // TODO: Move the bellow account types to a uidb table;\n // Until then please compare the account type values in the ui sproc GLAcctUpsert\n accountTypes: AccountType[] = [\n { typeKey: 0, type: 'Asset' },\n { typeKey: 1, type: 'Liability' },\n { typeKey: 2, type: 'Revenue' },\n { typeKey: 3, type: 'Expense' },\n ];\n suggestionMap: Set = new Set();\n suggestions: string[] = [];\n filteredSuggestions: Observable;\n reqNameSubject: Subject = new Subject();\n glAcctSort: SortDescriptor[];\n loading: boolean;\n pageSize = 10;\n skip = 0;\n\n constructor(\n private generalLedgerService: GeneralLedgerService,\n private reusableFunctions: ReusableFunctions,\n private toast: ToastService,\n private renderer: Renderer2\n ) {\n this.getExcelExportData = this.getExcelExportData.bind(this);\n }\n\n ngOnInit() {\n this.exportData = [];\n this.glAcctSort = [];\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'General Ledger Mapping',\n inputSource: NoDataSourceType.listOfEntities,\n };\n this.getData();\n this.docClickSubscription = this.renderer.listen(\n 'document',\n 'click',\n this.onDocumentClick.bind(this)\n );\n this.filteredSuggestions = this.reqNameSubject.pipe(\n startWith(''),\n map((name) => (name ? this._filter(name) : this.suggestions.slice()))\n );\n }\n\n ngOnDestroy(): void {\n this.docClickSubscription();\n }\n\n getData() {\n this.loading = true;\n this.generalLedgerService.getGLAccts().subscribe(\n (data) => {\n if (data && data.length > 0) {\n this.glAcctData = data;\n for (var obj of this.glAcctData) {\n obj.accountTypeKey = this.accountTypes.findIndex(\n (val) => val.type == obj.accountType\n );\n this.suggestionMap.add(obj.accountCategory);\n }\n this.suggestions = Array.from(this.suggestionMap.values());\n } else {\n this.noAccts = true;\n this.glAcctData = [];\n this.suggestions = [];\n }\n this.updateGrid();\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n this.noDataType.action = NoDataActionType.error;\n this.glAcctData = [];\n throw new Error(error);\n }\n );\n }\n\n updateGrid() {\n let orderedData = orderBy(\n this.filteredAccts ? this.filteredAccts : this.glAcctData,\n this.glAcctSort\n );\n this.exportData = orderedData.map((obj) => ({ ...obj }));\n this.glAccts = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n pageChange({ skip, take }: PageChangeEvent): void {\n this.skip = skip;\n this.pageSize = take;\n this.updateGrid();\n }\n\n addNewAccount() {\n this.addNew = true;\n this.formGroup = createFormGroup({\n accountNumber: '',\n accountName: '',\n accountType: '',\n accountCategory: '',\n isLoanAccount: null,\n });\n\n this.grid.addRow(this.formGroup);\n }\n\n cancelNewAccount() {\n this.closeEditor();\n this.addNew = false;\n }\n\n getTypeKey(accountType: string) {\n return this.accountTypes.find((type) => type.type == accountType);\n }\n\n submitChanges() {\n this.generalLedgerService.submitChanges(this.glAcctData).subscribe(\n (data) => {\n this.toast.success('General ledger mapping changes saved.');\n },\n (error) => {\n this.toast.warning('Error saving general ledger mapping changes.');\n throw new Error(error);\n }\n );\n }\n\n insertGLAcct(data: GLAcctDataModel) {\n this.generalLedgerService.insertGLAcct(data).subscribe(\n (data) => {\n this.toast.success('General ledger mapping changes saved.');\n this.getData();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n filterAccts() {\n this.filteredAccts = filterBy(this.glAcctData, {\n logic: 'or',\n filters: [\n {\n field: 'accountNumber',\n operator: 'contains',\n value: this.glAcctSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'accountName',\n operator: 'contains',\n value: this.glAcctSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'accountType',\n operator: 'contains',\n value: this.glAcctSearchTerm,\n ignoreCase: true,\n },\n {\n field: 'accountCategory',\n operator: 'contains',\n value: this.glAcctSearchTerm,\n ignoreCase: true,\n },\n ],\n });\n let orderedData = orderBy(this.filteredAccts, this.glAcctSort);\n this.glAccts = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n }\n\n sortChange(sort: SortDescriptor[]): void {\n this.glAcctSort = sort;\n this.updateGrid();\n }\n\n reqNameChanged(value: string) {\n this.reqNameSubject.next(value);\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this.reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName = 'general-ledger-mappings_' + dateTime + '_.xlsx';\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n\n public cellClickHandler({ rowIndex }): void {\n this.editedRowIndex = rowIndex;\n }\n\n private closeEditor(): void {\n this.grid.closeRow(this.editedRowIndex);\n this.editedRowIndex = undefined;\n this.formGroup = undefined;\n }\n\n private onDocumentClick(e: any): void {\n if (\n this.formGroup &&\n this.formGroup.valid &&\n (matches(e.target, '#saveNewAccount') ||\n matches(e.target, '#saveNewAccount > span.mat-button-wrapper'))\n ) {\n this.saveCurrent();\n }\n }\n\n private saveCurrent(): void {\n if (this.formGroup) {\n this.insertGLAcct(this.formGroup.value);\n this.closeEditor();\n this.addNew = false;\n }\n }\n\n private _filter(value: string): string[] {\n const filterValue = value.toLowerCase();\n return this.suggestions.filter((option) => option.toLowerCase().includes(filterValue));\n }\n}\n","\n \n Client Health\n
\n \n \n \n
\n
\n \n \n \n\n
\n \n Find Client\n \n search\n \n
\n\n
\n
\n \n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { MatTab } from '@angular/material/tabs';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport { ICustomTableInfoExtend } from 'app/modules/shared/components/custom-mat-table/custom-mat-table.component';\nimport { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\nimport { CustomMatTableService } from 'app/modules/shared/services/custom-mat-table.service';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\n\n@Component({\n selector: 'app-client-health',\n templateUrl: './client-health.component.html',\n styleUrls: ['./client-health.component.scss'],\n})\nexport class ClientHealthComponent implements OnInit {\n constructor(\n private http: HttpClient,\n private _reportService: ReportingService,\n private _customMatTableService: CustomMatTableService\n ) {}\n\n tab: string;\n tabs: string[];\n results: any[];\n resultsOriginal: any[];\n searchTerms: string = '';\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n action: NoDataActionType;\n timeOutHolder: any;\n\n ngOnInit() {\n this.initiateTableProperties();\n this.getData();\n }\n\n initiateTableProperties() {\n this.columnInfoList = [\n {\n fieldId: 'clientFullName',\n fieldName: 'Client Name',\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 250,\n },\n {\n fieldId: 'dataLoadType',\n fieldName: 'Data Load Type',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n decimalPlaces: 0,\n width: 90,\n hideIf: 'ui',\n },\n {\n fieldId: 'numOfInserts',\n fieldName: '# of Inserts',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 0,\n width: 70,\n },\n {\n fieldId: 'numOfUpdates',\n fieldName: '# of Updates',\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 0,\n width: 70,\n },\n {\n fieldId: 'lastLOSUpdate',\n fieldName: 'Last Update',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'date',\n decimalPlaces: 0,\n width: 110,\n },\n ];\n\n this.customTableInfo = {\n tableId: 'settings-client-health-table',\n tableHeight: 600,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: this.searchTerms,\n action: NoDataActionType.pageStart,\n title: 'Client Health',\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: false,\n };\n }\n\n getData() {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n false,\n this.action,\n this.searchTerms\n );\n\n this.http.get(`https://${window.location.host}/api/v0.5/ClientHealth`).subscribe({\n next: (res) => {\n if (res && res.length > 0) {\n this.resultsOriginal = res;\n this.results = this.resultsOriginal;\n let uniqueTypes = res\n .map((item) => item.dataLoadType)\n .filter((value, index, self) => self.indexOf(value) === index);\n\n if (uniqueTypes?.length != 0) {\n this.tabs = uniqueTypes;\n this.tab = uniqueTypes[0];\n } else {\n this.tabs = null;\n }\n this.reloadGrid();\n } else {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n this.action,\n this.searchTerms\n );\n }\n },\n error: (error) => {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n NoDataActionType.error,\n this.searchTerms\n );\n\n throw new Error(error);\n },\n });\n }\n\n reloadGrid() {\n let data = this.results.filter((item) => item.dataLoadType === this.tab);\n\n this.customTableInfo.dataSet = data;\n this.customTableInfo = this._customMatTableService.refreshCustomMatTable(\n this.customTableInfo,\n data?.length > 0,\n true,\n this.action,\n this.searchTerms\n );\n }\n\n handleTabChange(event): void {\n let selectedTab: MatTab = event.tab;\n if (selectedTab.textLabel !== this.tab) {\n this.tab = event.tab.textLabel;\n this.reloadGrid();\n }\n }\n\n exportToExcel() {\n this._reportService.setExportColumnsAndExportToExcel(\n this.columnInfoList,\n this.results,\n 'client-health-'\n );\n }\n\n clientSearch() {\n if (this.timeOutHolder) {\n clearTimeout(this.timeOutHolder);\n }\n\n this.timeOutHolder = setTimeout(() => {\n this.results = this.resultsOriginal.filter((x) =>\n x.clientFullName.toLowerCase().includes(this.searchTerms.toLowerCase())\n );\n this.reloadGrid();\n }, 800);\n }\n}\n","\n
Email Subscriptions
\n

\n Manage which subscriptions your users can activate. Disabling subscriptions here will\n prevent emails from being sent.\n

\n
\n
\n \n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {\n IGetClientSubscriptionTask,\n IGetClientSubscriptionTaskPositions,\n SubscriptionsService,\n} from 'app/modules/shared/services/subscriptions.service';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { forkJoin } from 'rxjs';\nimport { EmployeePositionService, StaffPosition } from '../../services/employee-position.service';\n\n@Component({\n selector: 'app-subscriptions',\n templateUrl: './subscriptions.component.html',\n styleUrls: ['./subscriptions.component.scss'],\n})\nexport class SubscriptionsComponent implements OnInit {\n constructor(\n private subscriptionsService: SubscriptionsService,\n private employeePosition: EmployeePositionService\n ) {}\n data: IGetClientSubscriptionTask[];\n gridData: GridDataResult;\n staffPositions: StaffPosition[];\n dropdownListSettings: any = {\n singleSelection: false,\n text: 'Select Positions to receive emails',\n enableSearchFilter: false,\n showCheckbox: true,\n labelKey: 'position',\n primaryKey: 'positionIdentifier',\n enableFilterSelectAll: false,\n enableCheckAll: false,\n };\n positionsSelected: IPositionsData[] = [];\n allPositions: IPositionsData[] = [];\n clientSubscriptionTaskPositions: IGetClientSubscriptionTaskPositions[];\n overallPositionsSelected = {};\n\n ngOnInit(): void {\n this.loadSubscriptionTasksData();\n this.loadPositionsData();\n }\n\n loadSubscriptionTasksData() {\n forkJoin([\n this.subscriptionsService.getClientSubscriptionTask(),\n this.subscriptionsService.getSubscriptionTasks(),\n ]).subscribe(\n ([clientSubscriptionData, subscriptionData]) => {\n this.prepareSubscriptionData(clientSubscriptionData, subscriptionData);\n this.prepareGridData();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n prepareSubscriptionData(clientSubscriptionData, subscriptionData) {\n const data = [];\n for (let subscription of subscriptionData) {\n const associatedClientSubscription = clientSubscriptionData.find(\n (i) => i.subscriptionTaskKey === subscription.subscriptionTaskKey\n );\n if (associatedClientSubscription) {\n data.push(associatedClientSubscription);\n } else {\n data.push(subscription);\n }\n }\n this.data = data;\n }\n\n loadPositionsData() {\n forkJoin([\n this.employeePosition.getPositions(),\n this.subscriptionsService.getClientSubscriptionTaskPositions(),\n this.subscriptionsService.getClientSubscriptionTask(),\n ]).subscribe(\n ([positionsData, clientSubscriptionTaskPositionsData, clientTask]) => {\n this.staffPositions = positionsData;\n this.clientSubscriptionTaskPositions = clientSubscriptionTaskPositionsData;\n if (clientTask.length === 0) {\n this.preparePositionData(-1);\n }\n\n for (let task of clientTask) {\n this.preparePositionData(Number(task.clientSubscriptionTaskKey));\n }\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n savePositionData(event, clientSubscriptionTaskKey: number, isActive: boolean) {\n const params = {\n clientSubscriptionTaskKey,\n staffPositionKey: event.positionIdentifier,\n isActive,\n };\n this.subscriptionsService.upsertClientSubscriptionTaskPosition(params).subscribe(\n () => {},\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n prepareGridData() {\n for (let sub of this.data) {\n sub.dropdownListSettings = JSON.parse(JSON.stringify(this.dropdownListSettings));\n sub.dropdownListSettings.disabled = !sub.hasOwnProperty('isActive');\n }\n\n this.gridData = {\n data: this.data,\n total: this.data.length,\n };\n }\n\n preparePositionData(clientKey: number) {\n this.allPositions.length = 0;\n this.positionsSelected.length = 0;\n for (let i = 0; i < this.staffPositions.length; i++) {\n const positionToAdd = {\n position: this.staffPositions[i].position,\n positionIdentifier: this.staffPositions[i].staffPositionKey,\n };\n this.allPositions.push(positionToAdd);\n for (let clientSubTaskPosition of this.clientSubscriptionTaskPositions) {\n if (\n clientSubTaskPosition.staffPositionKey ===\n this.staffPositions[i].staffPositionKey &&\n clientSubTaskPosition.isActive &&\n clientSubTaskPosition.clientSubscriptionTaskKey === clientKey\n ) {\n this.positionsSelected.push(positionToAdd);\n }\n }\n }\n\n this.overallPositionsSelected[clientKey] = JSON.parse(\n JSON.stringify(this.positionsSelected)\n );\n }\n\n toggleTask(record) {\n const params = {\n subscriptionTaskKey: record.subscriptionTaskKey,\n isActive: record.isActive,\n };\n this.subscriptionsService.upsertClientSubscriptionTask(params).subscribe(\n () => {\n this.loadSubscriptionTasksData();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n onSelectPosition(event, clientSubscriptionTaskKey: number) {\n this.savePositionData(event, clientSubscriptionTaskKey, true);\n }\n\n onDeselectPosition(event, clientSubscriptionTaskKey: number) {\n this.savePositionData(event, clientSubscriptionTaskKey, false);\n }\n}\n\nexport interface IPositionsData {\n position: string;\n positionIdentifier: number;\n}\n","\n
User Subscriptions
\n

\n Manage which subscriptions you want to enable. Disabling subscriptions here will prevent\n emails from being sent.\n

\n
\n
\n \n \n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { EmployeeService } from 'app/modules/shared/services/employee.service';\nimport {\n IGetClientSubscriptionTask,\n IGetClientSubscriptionTaskPositions,\n IGetUserSubscriptionTasks,\n SubscriptionsService,\n} from 'app/modules/shared/services/subscriptions.service';\nimport { forkJoin } from 'rxjs';\n\n@Component({\n selector: 'app-user-subscriptions',\n templateUrl: './user-subscriptions.component.html',\n styleUrls: ['./user-subscriptions.component.scss'],\n})\nexport class UserSubscriptionsComponent implements OnInit {\n constructor(\n private subscriptionsService: SubscriptionsService,\n private employeeService: EmployeeService\n ) {}\n gridData: GridDataResult;\n data: Array;\n staffPositionData: IGetClientSubscriptionTaskPositions[];\n userPosition: string;\n hasNoUserSub: boolean = false;\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData() {\n forkJoin([\n this.subscriptionsService.getUserSubscriptionTasks(),\n this.subscriptionsService.getClientSubscriptionTaskPositions(),\n this.employeeService.getCurrentUsersEmployeeRecord(),\n this.subscriptionsService.getClientSubscriptionTask(),\n ]).subscribe(\n ([\n userSubscriptionTasksData,\n staffPositionData,\n employeeRecord,\n newClientSubscriptionTasks,\n ]) => {\n this.prepareSubscriptionData(userSubscriptionTasksData, newClientSubscriptionTasks);\n this.userPosition = employeeRecord.positionName;\n this.staffPositionData = staffPositionData;\n this.prepareGridData();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n prepareSubscriptionData(userSubscriptionTasksData, newClientSubscriptionTasks) {\n const data = [];\n for (let newClientData of newClientSubscriptionTasks) {\n const associatedUserSubData = userSubscriptionTasksData.find(\n (i) => i.clientSubscriptionTaskKey == newClientData.clientSubscriptionTaskKey\n );\n if (associatedUserSubData) {\n data.push(associatedUserSubData);\n } else {\n newClientData.hasNoUserSub = true;\n data.push(newClientData);\n }\n }\n this.data = data;\n }\n\n prepareGridData() {\n for (let subscriptionTask of this.data) {\n const clientSubscriptionTaskKey = Number(subscriptionTask.clientSubscriptionTaskKey);\n\n const enabledStaffPositions = this.staffPositionData\n .filter(\n (position) =>\n position.clientSubscriptionTaskKey === clientSubscriptionTaskKey &&\n position.isActive\n )\n .map((position) => position.position)\n .join(', ');\n const doesPositionMatch = this.staffPositionData.some(\n (position) =>\n position.position === this.userPosition &&\n position.isActive &&\n subscriptionTask.clientSubscriptionTaskKey == position.clientSubscriptionTaskKey\n );\n subscriptionTask.enabledStaffPositions = enabledStaffPositions;\n subscriptionTask.doesPositionMatch = doesPositionMatch;\n if (subscriptionTask.hasNoUserSub) {\n subscriptionTask.enabled = true;\n }\n }\n\n const filteredGridData = this.data.filter((data) => data.doesPositionMatch);\n\n this.gridData = {\n data: filteredGridData,\n total: this.data.length,\n };\n }\n\n toggleTask(record) {\n const params = {\n clientSubscriptionTaskKey: record.clientSubscriptionTaskKey,\n isActive: record.enabled,\n };\n\n this.subscriptionsService.upsertUserSubscriptionTask(params).subscribe(\n () => {\n this.loadData();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n}\n","\n
eClose ROI Settings
\n

\n Set the amount that you estimate you're saving versus traditional closing method for each\n eClose option. Default figures are based on SimpleNexus research.\n

\n
\n
\n \n \n \n {{ dataItem.eCloseOption }}\n \n

Maximum value is $1000.

\n
\n
\n \n \n \n \n \n Savings\n \n \n \n \n \n \n
\n \n Save\n \n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport {\n ECloseService,\n IClientECloseOptionData,\n} from 'app/modules/production/services/eClose.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\n\n@Component({\n selector: 'app-e-close-roi-settings',\n templateUrl: './e-close-roi-settings.component.html',\n styleUrls: ['./e-close-roi-settings.component.scss'],\n})\nexport class ECloseRoiSettingsComponent implements OnInit {\n constructor(private eCloseService: ECloseService, private toast: ToastService) {}\n gridData: GridDataResult;\n clientECloseData: IClientECloseOptionData[];\n hasErrors: boolean = false;\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData() {\n this.eCloseService.getClientECloseOptions().subscribe(\n (data) => {\n this.clientECloseData = data;\n this.prepareGrid();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n prepareGrid() {\n this.gridData = {\n data: this.clientECloseData,\n total: this.clientECloseData.length,\n };\n }\n\n saveOptions() {\n this.eCloseService.updateClientECloseOptions(this.clientECloseData).subscribe(\n (data) => {\n this.toast.success('ROI Settings Updated Successfully.');\n this.loadData();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n updateInput(value, dataItem) {\n dataItem.error = false;\n this.hasErrors = false;\n if (value > 1000) {\n dataItem.error = true;\n this.hasErrors = true;\n }\n const num = value.replace(/[$,]/g, '');\n return Number(num);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\nimport { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\nimport { IExportColumnInfo, ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport { ICustomTableInfoExtend } from 'app/modules/shared/components/custom-mat-table/custom-mat-table.component';\n\n@Component({\n selector: 'invoiced-loans',\n templateUrl: './invoiced-loans.component.html',\n styleUrls: ['./invoiced-loans.component.scss'],\n})\nexport class InvoicedLoansComponent implements OnInit {\n constructor(private _reportService: ReportingService) {}\n\n searchTerm: string = '';\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n action: NoDataActionType;\n pageTitle: string;\n dateFilterSettings: any;\n selectedDate: Array;\n dateArray: Array;\n hideExcelExport = true;\n\n ngOnInit() {\n this.pageTitle = 'Invoiced Loans';\n this.searchTerm = '';\n this.action = NoDataActionType.pageStart;\n this.dateFilterSettings = {\n singleSelection: true,\n text: '',\n selectAllText: '',\n unSelectAllText: '',\n enableSearchFilter: false,\n classes: '',\n badgeShowLimit: 5,\n enableCheckAll: false,\n showCheckbox: false,\n labelKey: 'friendlyName',\n primaryKey: 'optionOrder',\n enableFilterSelectAll: false,\n };\n\n this.initializeTable();\n this.getDateFilters();\n this.getInvoiceData();\n }\n\n searchRows(event) {\n setTimeout(() => {\n this.action = NoDataActionType.search;\n this.searchTerm = event;\n if (this.customTableInfo.isDataReady) {\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action\n );\n }\n }, 1000);\n }\n\n onDateFilterChange(event) {\n this.action = NoDataActionType.filter;\n this.selectedDate = [event];\n this.getInvoiceData();\n }\n\n getDateFilters() {\n let numberOfMonths = 20;\n this.dateArray = [];\n let date = new Date();\n let thisMonth = date.getMonth();\n let thisYear = date.getFullYear();\n\n for (let i = 0; i < numberOfMonths; i++) {\n let lastDayOfMonth = new Date(thisYear, thisMonth - i, 0);\n let startDateOfMonth = new Date(thisYear, thisMonth - i - 1, 1);\n this.dateArray.push({\n optionOrder: i.toString(),\n friendlyName: lastDayOfMonth.toLocaleDateString('en-US'),\n startDate: startDateOfMonth,\n endDate: lastDayOfMonth,\n });\n }\n this.selectedDate = [this.dateArray[0]];\n }\n\n initializeTable() {\n this.columnInfoList = [\n {\n fieldId: 'invoicedDate',\n fieldName: 'Invoice Date',\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'date',\n },\n {\n fieldId: 'lienType',\n fieldName: 'Lien Type',\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'string',\n },\n {\n fieldId: 'loanNumber',\n fieldName: 'Loan #',\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'string',\n isHyperlink: false,\n aggregationType: 'count',\n hyperLinkTo_FieldId: 'loanNumber',\n },\n {\n fieldId: 'channel',\n fieldName: 'Channel',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'string',\n },\n {\n fieldId: 'completedDate',\n fieldName: 'Effective Date',\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'date',\n },\n {\n fieldId: 'postedDate',\n fieldName: 'Posted as of Date',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n width: 200,\n dataType: 'date',\n },\n ];\n\n this.customTableInfo = {\n tableId: 'file-upload-table',\n tableHeight: 500,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: this.searchTerm,\n action: NoDataActionType.pageStart,\n title: this.pageTitle,\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: true,\n };\n }\n\n getInvoiceData() {\n let currentDateFilter = this.selectedDate[0];\n let customTableInfo = Object.assign({}, this.customTableInfo);\n customTableInfo.hasData = false;\n customTableInfo.isDataReady = false;\n customTableInfo.dataSet = [];\n this.hideExcelExport = false;\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n customTableInfo,\n false,\n false,\n this.action\n );\n this._reportService\n .getInvoiceData(currentDateFilter.startDate, currentDateFilter.endDate)\n .subscribe({\n next: (res) => {\n customTableInfo.dataSet = res;\n let hasData = res && res.length > 0;\n this.hideExcelExport = !hasData;\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n customTableInfo,\n hasData ?? false,\n true,\n this.action\n );\n },\n error: (err) => {\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n customTableInfo,\n false,\n true,\n NoDataActionType.error\n );\n },\n });\n }\n\n exportToExcel() {\n // let exportName = 'Invoiced-loans-';\n // let columnInfoArray: IExportColumnInfo[] = [];\n\n this._reportService.setExportColumnsAndExportToExcel(\n this.columnInfoList,\n this.customTableInfo.dataSet,\n 'Invoiced-loans-'\n );\n\n // this.customTableInfo.columnInfoList.forEach((column, index) => {\n // if (!column.excludeOnExport) {\n // columnInfoArray.push({\n // columnId: index,\n // columnName: column.fieldName,\n // columnIdName: column.fieldId,\n // precision: 0,\n // dataType: column.dataType as any,\n // });\n // }\n // });\n //\n // this._reportService.setQuickExportData(\n // columnInfoArray,\n // this.customTableInfo.dataSet,\n // exportName,\n // false\n // );\n }\n}\n\nexport interface IInvoicedLoanDate {\n friendlyName: string;\n optionOrder: string;\n startDate: Date;\n endDate: Date;\n}\n","\n
\n {{ pageTitle }}\n
\n
\n
\n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n","\n\n\n
\n
\n
\n
\n
\n {{ section.name }}\n \n \n \n
\n
\n \n \n {{ item.name }}\n \n \n \n
\n\n \n
\n \n \n {{ subItem.name }}\n
\n \n
\n
\n
\n
\n \n\n \n
\n \n \n \n \n\n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n \n\n \n \n\n \n\n \n\n \n\n \n \n\n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n
\n Placeholder Setting\n
\n
\n
\n\n","import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { Component, OnInit } from '@angular/core';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { Subject } from 'rxjs';\nimport { UserAccessService } from '../../../shared/services/user-access.service';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\n\n@Component({\n selector: 'app-settings',\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss'],\n})\nexport class SettingsComponent implements OnInit {\n settings: Settings[];\n selectedItem: string;\n isSuperUser: boolean;\n isClientPowerUser: boolean;\n public eventsSubject: Subject = new Subject();\n linkTitle: string;\n moduleLink: string;\n initialLoad = true;\n\n defaultItem: SettingModule = {\n name: 'My Record',\n underConstruction: false,\n key: 'user-profile',\n };\n\n constructor(\n private _route: ActivatedRoute,\n private router: Router,\n private userAccessService: UserAccessService,\n private impersonationService: ImpersonationService,\n private toastService: ToastService,\n private currentUserStateService: CurrentUserStateService\n ) {\n // This block allows page to reload to new sub-component when navigated through routerLink\n this.router.events.subscribe((event) => {\n if (this.initialLoad == false) {\n if (event instanceof NavigationEnd) {\n let originalPage: string = this._route.snapshot.paramMap.get('key');\n\n if (originalPage) {\n this.selectedItem = originalPage;\n }\n }\n }\n });\n }\n ngOnInit() {\n this.isClientPowerUser = this.impersonationService.isPowerUser();\n if (\n this.currentUserStateService.isLoggedIn() &&\n this.currentUserStateService.isLBASuperUser() &&\n !this.impersonationService.isImpersonatingUser()\n ) {\n this.isSuperUser = true;\n }\n\n // Data used by select menu.\n this.settings = [\n {\n name: 'Profile',\n expanded: true,\n modules: [\n {\n name: 'My Record',\n underConstruction: false,\n key: 'user-profile',\n },\n //{\n // name: 'Account',\n // key: 'account',\n // subModules: [\n // { name: 'Account Details', key: 'account-details' },\n // { name: 'Change Password', key: 'change-password' },\n // ],\n //},\n { name: 'Notifications', key: 'notifications' },\n { name: 'Scheduled Reports', key: 'scheduled-reports' },\n { name: 'Subscriptions', key: 'user-subscriptions' },\n ],\n },\n {\n name: 'Company',\n expanded: true,\n powerUserRequired: true,\n modules: [\n {\n name: 'Integration',\n key: 'integration-setup',\n subModules: [\n //{ name: 'Delete Loans', key: 'delete-loan' },\n {\n name: 'Product Mapping',\n key: 'client-product-mapping',\n },\n {\n name: 'Loan Characteristics Mapping',\n key: 'loan-characteristics-mapping',\n },\n {\n name: 'General Ledger Mapping',\n key: 'general-ledger-mapping',\n },\n ],\n },\n {\n name: 'Employees & Users',\n key: 'roles-users',\n subModules: [\n {\n name: 'Employee Hours',\n key: 'employee-hours',\n },\n {\n name: 'Employees',\n underConstruction: false,\n key: 'employees',\n },\n {\n name: 'Position Management',\n key: 'role-management',\n },\n { name: 'User Management', key: 'user-management' },\n { name: 'Login Activity', key: 'login-activity' },\n ],\n },\n {\n name: 'Performance',\n key: 'performance',\n subModules: [\n { name: 'KPIs', key: 'performance-kpi-config' },\n { name: 'KPI Profiles', key: 'kpi-profiles' },\n {\n name: 'Branch Projections',\n key: 'branch-projections-config',\n },\n ],\n },\n {\n name: 'Loans',\n key: 'loans',\n subModules: [\n { name: 'Invoiced Loans', key: 'invoiced-loans' },\n { name: 'Delete Loans', key: 'delete-loan' },\n ],\n },\n {\n name: 'Notifications',\n key: 'notification-options',\n subModules: [\n { name: 'Types', key: 'notification-types' },\n { name: 'Subscriptions', key: 'subscriptions' },\n ],\n },\n {\n name: 'eClose ROI Settings',\n key: 'eclose-roi-settings',\n },\n ],\n },\n {\n name: 'nCino Admin',\n lbaOnly: true,\n modules: [\n { name: 'Clients', key: 'lba-clients' },\n { name: 'Organizational Setup', key: 'hierarchy-levels' },\n { name: 'File Upload', key: 'file-upload' },\n { name: 'Manage Enrollments', key: 'lba-subscriptions' },\n { name: 'System Users', key: 'super-users' },\n { name: 'Login Activity', key: 'lba-login-activity' },\n {\n name: 'Domains',\n key: 'domains',\n subModules: [\n {\n name: 'Domain Management',\n key: 'domain-management',\n },\n ],\n },\n {\n name: 'Milestones & Events',\n key: 'milestones-events',\n subModules: [\n {\n name: 'Milestones Management',\n key: 'milestones-events',\n },\n ],\n },\n { name: 'Client Health', key: 'company-health' },\n ],\n },\n ];\n\n // Remove Super Admin settings for modules and sub modules.\n if (!this.isSuperUser) {\n this.settings = this.settings.filter((s) => !s.lbaOnly);\n this.settings.forEach((setting) => {\n setting.modules = setting.modules.filter((module) => !module.underConstruction);\n setting.modules.forEach((module) => {\n if (!module.subModules) {\n return;\n }\n module.subModules = module.subModules.filter(\n (subModule) =>\n !subModule.underConstruction &&\n this.userAccessService.hasAccessToPage(`/settings/${subModule.key}`)\n );\n });\n\n // Remove module if object used to have subModules but no longer does\n setting.modules = setting.modules.filter((sm) => {\n if (Object.keys(sm).includes('subModules')) {\n if (sm.subModules.length == 0) {\n return false;\n }\n }\n\n return true;\n });\n });\n }\n\n // Remove Company settings for modules and sub modules for non-power users.\n if (!(this.isClientPowerUser || this.isSuperUser)) {\n this.settings = this.settings.filter((s) => !s.powerUserRequired);\n }\n\n this.settings = this.settings.filter((x) => x.modules && x.modules.length !== 0);\n\n let originalPage: string = this._route.snapshot.paramMap.get('key');\n if (originalPage) {\n this.selectedItem = originalPage;\n } else {\n this.selectItem(this.defaultItem);\n }\n\n this.initialLoad = false;\n }\n\n setDefaultSelectedItem(): void {\n this._route.params.subscribe((p) => {\n if (p && p['key']) {\n if (\n this.settings.find((setting) => {\n return setting.modules.some((module) => {\n if (module.key === p['key']) {\n return true;\n } else if (module.subModules) {\n return (\n module.subModules.findIndex(\n (subModule) => subModule.key === p['key']\n ) !== -1\n );\n }\n });\n })\n ) {\n this.selectedItem = p['key'];\n }\n }\n\n if (!this.selectedItem) this.selectedItem = 'user-profile';\n });\n }\n\n selectItem(item: SettingModule, subItem?: SettingSubModule): void {\n if (item.subModules && item.subModules.length > 0) {\n if (!subItem) {\n this.sectionExpand(item);\n }\n }\n\n let hasAccess = false;\n\n if (subItem) {\n if (subItem.key === 'employees' || subItem.key === 'branch') {\n this.emitEventToChild();\n }\n\n hasAccess = this.userAccessService.hasAccessToPage(`/settings/${subItem.key}`);\n\n if (hasAccess || this.isSuperUser) {\n this.selectedItem = subItem.key;\n } else {\n this.toastService.warning(\"You don't have access to this page.\");\n }\n } else {\n if (!item.subModules) {\n hasAccess = this.userAccessService.hasAccessToPage(`/settings/${item.key}`);\n\n if (hasAccess || this.isSuperUser) {\n this.selectedItem = item.key;\n } else {\n this.toastService.warning(\"You don't have access to this page.\");\n }\n }\n }\n\n if (hasAccess || this.isSuperUser) {\n this.router.navigate(['settings', this.selectedItem]);\n }\n\n if (this.selectedItem === 'user-profile') {\n this.linkTitle = '';\n this.moduleLink = '';\n } else {\n this.linkTitle = this.moduleLink = 'settings';\n }\n }\n\n sectionExpand(item: Settings): void {\n item.expanded = !item.expanded;\n }\n\n subSectionExpand(item: SettingSubModule): void {\n item.expanded = !item.expanded;\n }\n\n isSelected(key: string): boolean {\n return this.selectedItem === key;\n }\n\n moduleHasNotBeenCreated(itemKey) {\n let items = [\n 'users',\n 'account',\n 'forecasting-planning',\n 'company-billing',\n 'company-integrations',\n 'company-templates',\n 'hierarchy-cost-center-mapping',\n 'hierarchy-branches',\n 'performance-scorecards',\n 'forecasting-ledger',\n 'forecasting-planning',\n ];\n return items.includes(itemKey);\n }\n\n emitEventToChild() {\n this.eventsSubject.next();\n }\n}\n\nexport interface Settings {\n name: string;\n modules?: SettingModule[];\n lbaOnly?: boolean;\n expanded?: boolean;\n powerUserRequired?: boolean;\n}\n\nexport interface SettingModule {\n name: string;\n key: string;\n subModules?: SettingSubModule[];\n expanded?: boolean;\n underConstruction?: boolean;\n}\n\nexport interface SettingSubModule {\n name: string;\n key: string;\n expanded?: boolean;\n underConstruction?: boolean;\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { SettingsComponent } from './components/settings/settings.component';\n\nconst settingsRoutes: Routes = [\n { path: '', component: SettingsComponent },\n { path: ':key', component: SettingsComponent },\n { path: ':key/:id', component: SettingsComponent },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(settingsRoutes)],\n exports: [RouterModule],\n})\nexport class SettingsRoutingModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplicationModuleService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/applicationmodule').replace(\n '{version}',\n this.version\n );\n\n constructor(private http: HttpClient) {}\n\n getClientModules(clientShortName: string): Observable {\n const params = new HttpParams().set('clientShortName', clientShortName);\n return this.http.get(this._url + '/access/client', { params: params });\n }\n\n updateClientModule(modules: ClientModuleForm[], clientShortName: string): Observable {\n let data: ClientModuleUpdateForm = {\n clientShortName: clientShortName,\n modules: modules,\n };\n\n return this.http.post(this._url + '/access/client', data);\n }\n}\n\nexport interface ApplicationModule {\n clientApplicationModuleKey: number;\n applicationModuleKey: number;\n minimumRoleKey?: number;\n activeDate?: Date;\n inActiveDate?: Date;\n isActive: boolean;\n lastMod?: Date;\n pages?: ApplicationModulePage[];\n moduleName: string;\n}\n\nexport interface ApplicationModulePage {}\n\nexport interface ClientModuleUpdateForm {\n clientShortName: string;\n modules: ClientModuleForm[];\n}\n\nexport interface ClientModuleForm {\n applicationModuleKey: number;\n clientApplicationModuleKey: number;\n isActive: boolean;\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2024 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders, HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Injectable, Directive, ElementRef, ContentChild, ViewChild, Input, HostBinding, Output, Component, HostListener, ViewChildren, Inject, forwardRef, isDevMode, NgModule } from '@angular/core';\nimport { guid, Keys, isControlRequired, isChanged, isDocumentAvailable, KendoInput, ResizeBatchService } from '@progress/kendo-angular-common';\nimport { fileAudioIcon, fileVideoIcon, fileImageIcon, fileTxtIcon, filePresentationIcon, fileDataIcon, fileProgrammingIcon, filePdfIcon, fileConfigIcon, fileZipIcon, fileDiscImageIcon, arrowRotateCwSmallIcon, playSmIcon, pauseSmIcon, cancelIcon, xIcon, copyIcon, fileIcon, checkIcon, exclamationCircleIcon, uploadIcon } from '@progress/kendo-svg-icons';\nimport { NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as i1$1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { fromEvent, merge } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ButtonComponent } from '@progress/kendo-angular-buttons';\nimport { NgIf, NgFor, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';\nimport { ProgressBarComponent } from '@progress/kendo-angular-progressbar';\nimport { PopupService } from '@progress/kendo-angular-popup';\n\n/**\n * Lists the possible states of a file.\n */\nvar FileState;\n(function (FileState) {\n /**\n * The file upload process has failed.\n */\n FileState[FileState[\"Failed\"] = 0] = \"Failed\";\n /**\n * An initially selected fake file without a set state.\n */\n FileState[FileState[\"Initial\"] = 1] = \"Initial\";\n /**\n * The file is selected.\n */\n FileState[FileState[\"Selected\"] = 2] = \"Selected\";\n /**\n * The file is successfully uploaded.\n */\n FileState[FileState[\"Uploaded\"] = 3] = \"Uploaded\";\n /**\n * The file is in the process of uploading.\n */\n FileState[FileState[\"Uploading\"] = 4] = \"Uploading\";\n /**\n * The file upload process has been paused.\n */\n FileState[FileState[\"Paused\"] = 5] = \"Paused\";\n})(FileState || (FileState = {}));\n\n/**\n * @hidden\n */\nclass FileMap {\n constructor() {\n this._files = {};\n }\n add(file) {\n const uid = file.uid;\n if (this.has(uid)) {\n if (file.validationErrors && file.validationErrors.length > 0) {\n this._files[uid].unshift(file);\n }\n else {\n this._files[uid].push(file);\n }\n }\n else {\n this._files[uid] = [file];\n }\n }\n remove(uid) {\n if (this.has(uid)) {\n this._files[uid] = null;\n delete this._files[uid];\n }\n }\n clear() {\n const allFiles = this._files;\n for (const uid in allFiles) {\n if (allFiles.hasOwnProperty(uid)) {\n for (const file of allFiles[uid]) {\n if (file.httpSubscription) {\n file.httpSubscription.unsubscribe();\n }\n }\n allFiles[uid] = null;\n delete allFiles[uid];\n }\n }\n }\n has(uid) {\n return uid in this._files;\n }\n get(uid) {\n return this._files[uid];\n }\n setFilesState(files, state) {\n for (const file of files) {\n this.setFilesStateByUid(file.uid, state);\n }\n }\n setFilesStateByUid(uid, state) {\n this.get(uid).forEach((f) => {\n f.state = state;\n });\n }\n get count() {\n return Object.getOwnPropertyNames(this._files).length;\n }\n get files() {\n const initial = this._files;\n const transformed = [];\n for (const uid in initial) {\n if (initial.hasOwnProperty(uid)) {\n transformed.push(initial[uid]);\n }\n }\n return transformed;\n }\n get filesFlat() {\n const initial = this._files;\n const transformed = [];\n for (const uid in initial) {\n if (initial.hasOwnProperty(uid)) {\n const current = initial[uid];\n current.forEach((file) => {\n transformed.push(file);\n });\n }\n }\n return transformed;\n }\n get filesToUpload() {\n const files = this._files;\n const notUploaded = [];\n for (const uid in files) {\n if (files.hasOwnProperty(uid)) {\n const currentFiles = files[uid];\n let currentFilesValid = true;\n for (const file of currentFiles) {\n if (file.state !== FileState.Selected || (file.validationErrors && file.validationErrors.length > 0)) {\n currentFilesValid = false;\n }\n }\n if (currentFilesValid) {\n notUploaded.push(currentFiles);\n }\n }\n }\n return notUploaded;\n }\n get firstFileToUpload() {\n const files = this._files;\n for (const uid in files) {\n if (files.hasOwnProperty(uid)) {\n const currentFiles = files[uid];\n let currentFilesValid = true;\n for (const file of currentFiles) {\n if (file.state !== FileState.Selected || (file.validationErrors && file.validationErrors.length > 0)) {\n currentFilesValid = false;\n }\n }\n if (currentFilesValid) {\n return currentFiles;\n }\n }\n }\n return null;\n }\n getFilesWithState(state) {\n return this.filesFlat.filter(file => file.state === state);\n }\n hasFileWithState(fileStates) {\n const files = this._files;\n for (const uid in files) {\n if (files.hasOwnProperty(uid)) {\n const currentFiles = files[uid];\n for (const file of currentFiles) {\n if (fileStates.indexOf(file.state) >= 0) {\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n\n/**\n * Arguments for the `cancel` event. The `cancel` event fires when\n * the user cancels the process of uploading a file or a batch of files.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n *

Click the icon during upload to trigger the event

\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * cancelEventHandler(e: CancelEvent) {\n * console.log('Canceling file upload', e.files);\n * }\n * }\n * ```\n */\nclass CancelEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `cancel` event.\n * @param files - The list of the files that were going to be uploaded.\n */\n constructor(files) {\n this.files = files;\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the `clear` event. The `clear` event fires when\n * the **Clear** button is clicked. At this point, the selected files are about to be cleared.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * clearEventHandler(e: ClearEvent) {\n * console.log('Clearing the file upload');\n * }\n * }\n * ```\n */\nclass ClearEvent extends PreventableEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `clear` event.\n */\n constructor() { super(); }\n}\n\n/**\n * Arguments for the `error` event. The `error` event fires when\n * an `upload` or `remove` operation fails.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * errorEventHandler(e: ErrorEvent) {\n * console.log('An error occurred');\n * }\n * }\n * ```\n */\nclass ErrorEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `error` event.\n *\n * @param files - The list of the files that failed to be uploaded or removed.\n * @param operation - The operation type (`upload` or `remove`).\n * @param response - The response object returned by the server.\n */\n constructor(files, operation, response) {\n this.files = files;\n this.operation = operation;\n this.response = response;\n }\n}\n\n/**\n * Arguments for the `pause` event. The `pause` event fires when the user\n * pauses a file that is currently uploading.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * pauseEventHandler(ev: PauseEvent) {\n * console.log('File paused');\n * }\n * }\n * ```\n *\n */\nclass PauseEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `pause` event.\n * @param file - The file that is going to be paused.\n */\n constructor(file) {\n this.file = file;\n }\n}\n\n/**\n * Arguments for the `remove` event. The `remove` event fires when an uploaded\n * or selected file is about to be removed. If you cancel the event, the removal is prevented.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * removeEventHandler(e: RemoveEvent) {\n * console.log('Removing a file');\n * }\n * }\n * ```\n */\nclass RemoveEvent extends PreventableEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `remove` event.\n * @param files - The list of the files that will be removed.\n * @param headers - The headers of the request.\n */\n constructor(files, headers) {\n super();\n this.files = files;\n this.headers = headers;\n }\n}\n\n/**\n * Arguments for the `resume` event. The `resume` event fires when the user\n * resumes the upload of a file that has been previously paused.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * resumeEventHandler(ev: ResumeEvent) {\n * console.log('File resumed');\n * }\n * }\n * ```\n *\n */\nclass ResumeEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `resume` event.\n * @param file - The file that is going to be resumed.\n */\n constructor(file) {\n this.file = file;\n }\n}\n\n/**\n * Arguments for the `select` event. The `select` event fires when the user\n * selects a file or multiple files for upload. If you cancel the event, the selection is prevented.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * selectEventHandler(e: SelectEvent) {\n * console.log('File selected');\n * }\n * }\n * ```\n */\nclass SelectEvent extends PreventableEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `select` event.\n * @param files - The list of the selected files.\n */\n constructor(files) {\n super();\n this.files = files;\n }\n}\n\n/**\n * Arguments for the `success` event. The `success` event fires when\n * the selected files are successfully uploaded or removed.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * successEventHandler(e: SuccessEvent) {\n * console.log('The ' + e.operation + ' was successful!');\n * }\n * }\n * ```\n */\nclass SuccessEvent extends PreventableEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `success` event.\n * @param files - The list of the files that were uploaded or removed.\n * @param operation - The operation type (`upload` or `remove`).\n * @param response - The response object returned by the server.\n */\n constructor(files, operation, response) {\n super();\n this.files = files;\n this.operation = operation;\n this.response = response;\n }\n}\n\n/**\n * Arguments for the `upload` event. The `upload` event fires when one or more files are about\n * to be uploaded. If you cancel the event, the upload is prevented. You can add headers to the request.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * uploadEventHandler(e: UploadEvent) {\n * e.headers = e.headers.append('X-Foo', 'Bar');\n * }\n * }\n * ```\n */\nclass UploadEvent extends PreventableEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `upload` event.\n * @param files - The list of the files that will be uploaded.\n * @param headers - The headers of the request.\n */\n constructor(files, headers) {\n super();\n this.files = files;\n this.headers = headers;\n }\n}\n\n/**\n * Arguments for the `uploadprogress` event. The `uploadprogress` event\n * fires when the files are in the process of uploading.\n *\n * ```ts-no-run\n * @Component({\n * selector: 'my-upload',\n * template: `\n * \n * \n * `\n * })\n * export class UploadComponent {\n * uploadSaveUrl = 'saveUrl'; // should represent an actual API endpoint\n * uploadRemoveUrl = 'removeUrl'; // should represent an actual API endpoint\n *\n * uploadProgressEventHandler(e: UploadProgressEvent) {\n * console.log(e.files[0].name + ' is ' + e.percentComplete + ' uploaded');\n * }\n * }\n * ```\n */\nclass UploadProgressEvent {\n /**\n * @hidden\n * Constructs the event arguments for the `uploadprogress` event.\n * @param files - The list of files that are being uploaded.\n * @param percentComplete - The portion that has been uploaded.\n */\n constructor(files, percentComplete) {\n this.files = files;\n this.percentComplete = percentComplete;\n }\n}\n\n/**\n * @hidden\n */\nconst fileGroupMap = {\n audio: [\n \".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"\n ],\n video: [\n \".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\", \".rm\", \".swf\", \".vob\", \".wmv\"\n ],\n image: [\n \".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\", \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"\n ],\n txt: [\n \".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"\n ],\n presentation: [\n \".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"\n ],\n data: [\n \".xlr\", \".xls\", \".xlsx\"\n ],\n programming: [\n \".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\", \".sys\", \".cfg\",\n \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\", \".php\", \".rss\", \".xhtml\"\n ],\n pdf: [\n \".pdf\"\n ],\n config: [\n \".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"\n ],\n zip: [\n \".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"\n ],\n discImage: [\n \".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"\n ]\n};\n/**\n * @hidden\n */\nconst fileSVGGroupMap = {\n audio: fileAudioIcon,\n video: fileVideoIcon,\n image: fileImageIcon,\n txt: fileTxtIcon,\n presentation: filePresentationIcon,\n data: fileDataIcon,\n programming: fileProgrammingIcon,\n pdf: filePdfIcon,\n config: fileConfigIcon,\n zip: fileZipIcon,\n discImage: fileDiscImageIcon\n};\n\n/* eslint-disable no-bitwise */\n/**\n * @hidden\n */\nconst getTotalFilesSizeMessage = (files) => {\n let totalSize = 0;\n let i;\n if (typeof files[0].size === \"number\") {\n for (i = 0; i < files.length; i++) {\n if (files[i].size) {\n totalSize += files[i].size;\n }\n }\n }\n else {\n return \"\";\n }\n totalSize /= 1024;\n if (totalSize < 1024) {\n return totalSize.toFixed(2) + \" KB\";\n }\n else {\n return (totalSize / 1024).toFixed(2) + \" MB\";\n }\n};\nconst stripPath = (name) => {\n const slashIndex = name.lastIndexOf(\"\\\\\");\n return (slashIndex !== -1) ? name.substr(slashIndex + 1) : name;\n};\nconst getFileExtension = (fileName) => {\n const rFileExtension = /\\.([^\\.]+)$/;\n const matches = fileName.match(rFileExtension);\n return matches ? matches[0] : \"\";\n};\n/**\n * @hidden\n */\nconst validateInitialFileInfo = (file) => {\n if (file instanceof Object && file.hasOwnProperty(\"name\")) {\n return true;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst validateInitialFileSelectFile = (file) => {\n if (file instanceof File || validateInitialFileInfo(file)) {\n return true;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst getInitialFileInfo = (fakeFile) => {\n fakeFile.extension = fakeFile.extension || getFileExtension(fakeFile.name);\n fakeFile.name = fakeFile.name; // eslint-disable-line no-self-assign\n fakeFile.size = fakeFile.size || 0;\n if (!fakeFile.hasOwnProperty(\"state\")) {\n fakeFile.state = FileState.Initial;\n }\n if (!fakeFile.hasOwnProperty(\"uid\")) {\n fakeFile.uid = guid();\n }\n return fakeFile;\n};\n/**\n * @hidden\n */\nconst convertFileToFileInfo = (file) => {\n const fileInfo = getFileInfo(file);\n fileInfo.uid = guid();\n // Used to differentiate initial FileInfo objects and actual Files\n fileInfo.state = FileState.Selected;\n return fileInfo;\n};\nconst getFileInfo = (rawFile) => {\n const fileName = rawFile.name;\n const fileSize = rawFile.size;\n return {\n extension: getFileExtension(fileName),\n name: fileName,\n rawFile: rawFile,\n size: fileSize,\n state: FileState.Selected\n };\n};\n/**\n * @hidden\n */\nconst getAllFileInfo = (rawFiles) => {\n const allFileInfo = new Array();\n let i;\n for (i = 0; i < rawFiles.length; i++) {\n allFileInfo.push(getFileInfo(rawFiles[i]));\n }\n return allFileInfo;\n};\n/**\n * @hidden\n */\nconst fileHasValidationErrors = (file) => {\n if (file.validationErrors && file.validationErrors.length > 0) {\n return true;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst filesHaveValidationErrors = (files) => {\n for (const file of files) {\n if (fileHasValidationErrors(file)) {\n return true;\n }\n }\n return false;\n};\n/**\n * @hidden\n */\nconst inputFiles = (input) => {\n if (input.files) {\n return getAllFileInfo(input.files);\n }\n else {\n //Required for testing\n const fileNames = input.value.split(\"|\").map((file, index) => {\n const fileName = file.trim();\n return {\n extension: getFileExtension(fileName),\n name: stripPath(fileName),\n rawFile: null,\n size: (index + 1) * 1000,\n state: FileState.Selected\n };\n });\n return fileNames;\n }\n};\n/**\n * @hidden\n */\nconst assignGuidToFiles = (files, isUnique) => {\n const uid = guid();\n return files.map((file) => {\n file.uid = isUnique ? guid() : uid;\n return file;\n });\n};\n/**\n * @hidden\n */\nconst supportsFormData = () => {\n return typeof (FormData) !== \"undefined\";\n};\n/**\n * @hidden\n */\nconst userAgent = () => {\n return navigator.userAgent;\n};\nconst focusableRegex = /^(?:a|input|select|textarea|button|object)$/i;\n/**\n * @hidden\n */\nconst IGNORE_TARGET_CLASSES = 'k-icon k-select k-input k-multiselect-wrap';\n/**\n * @hidden\n */\nconst UPLOAD_CLASSES = 'k-upload-button k-clear-selected k-upload-selected k-upload-action k-file';\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n return !!(rect.width && rect.height) && window.getComputedStyle(element).visibility !== 'hidden';\n};\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst isFocusable = (element, checkVisibility = true) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const validTabIndex = tabIndex !== null && !isNaN(tabIndex) && tabIndex > -1;\n let focusable = false;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled;\n }\n else {\n focusable = validTabIndex;\n }\n return focusable && (!checkVisibility || isVisible(element));\n }\n return false;\n};\n/**\n * @hidden\n */\nconst getFileGroupCssClass = (fileExtension) => {\n const initial = 'file';\n for (const group in fileGroupMap) {\n if (fileGroupMap[group].indexOf(fileExtension) >= 0) {\n if (group === 'discImage') {\n return `${initial}-disc-image`;\n }\n return `${initial}-${group}`;\n }\n }\n return initial;\n};\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n\n/**\n * @hidden\n */\nclass ChunkMap {\n constructor() {\n this._files = {};\n }\n add(uid, totalChunks) {\n const initialChunkInfo = {\n index: 0,\n position: 0,\n retries: 0,\n totalChunks: totalChunks\n };\n this._files[uid] = initialChunkInfo;\n return initialChunkInfo;\n }\n remove(uid) {\n if (this.has(uid)) {\n this._files[uid] = null;\n delete this._files[uid];\n }\n }\n has(uid) {\n return uid in this._files;\n }\n get(uid) {\n return this._files[uid];\n }\n}\n\n/**\n * @hidden\n */\nclass UploadService {\n constructor(http) {\n this.http = http;\n this.cancelEvent = new EventEmitter();\n this.clearEvent = new EventEmitter();\n this.completeEvent = new EventEmitter();\n this.errorEvent = new EventEmitter();\n this.pauseEvent = new EventEmitter();\n this.removeEvent = new EventEmitter();\n this.resumeEvent = new EventEmitter();\n this.selectEvent = new EventEmitter();\n this.successEvent = new EventEmitter();\n this.uploadEvent = new EventEmitter();\n this.uploadProgressEvent = new EventEmitter();\n /**\n * Required for the `ControlValueAccessor` integration\n */\n this.changeEvent = new EventEmitter();\n /**\n * Default async settings\n */\n this.async = {\n autoUpload: true,\n batch: false,\n chunk: false,\n concurrent: true,\n removeField: \"fileNames\",\n removeHeaders: new HttpHeaders(),\n removeMethod: \"POST\",\n removeUrl: \"\",\n responseType: \"json\",\n saveField: \"files\",\n saveHeaders: new HttpHeaders(),\n saveMethod: \"POST\",\n saveUrl: \"\",\n withCredentials: true\n };\n /**\n * Default chunk settings\n */\n this.chunk = {\n autoRetryAfter: 100,\n size: 1024 * 1024,\n maxAutoRetries: 1,\n resumable: true\n };\n this.component = 'Upload';\n this.chunkMap = new ChunkMap();\n this.fileList = new FileMap();\n }\n get files() {\n return this.fileList;\n }\n setChunkSettings(settings) {\n if (settings !== false) {\n this.async.chunk = true;\n if (typeof settings === \"object\") {\n this.chunk = Object.assign({}, this.chunk, settings);\n }\n }\n }\n onChange() {\n const files = this.fileList.filesFlat.filter((file) => {\n return file.state === FileState.Initial ||\n file.state === FileState.Uploaded;\n });\n this.changeEvent.emit(files.length > 0 ? files : null);\n }\n addFiles(files) {\n const selectEventArgs = new SelectEvent(files);\n this.selectEvent.emit(selectEventArgs);\n if (!selectEventArgs.isDefaultPrevented()) {\n for (const file of files) {\n this.fileList.add(file);\n }\n if (this.async.autoUpload) {\n this.uploadFiles();\n }\n }\n if (this.component === 'FileSelect') {\n const flatFiles = this.fileList.filesFlat;\n this.changeEvent.emit(flatFiles.length > 0 ? flatFiles : null);\n }\n }\n addInitialFiles(initialFiles) {\n this.fileList.clear();\n initialFiles.forEach((file) => {\n const fakeFile = getInitialFileInfo(file);\n this.fileList.add(fakeFile);\n });\n }\n addInitialFileSelectFiles(initialFiles) {\n this.fileList.clear();\n initialFiles.forEach((file) => {\n if (file instanceof File) {\n this.fileList.add(convertFileToFileInfo(file));\n }\n else {\n this.fileList.add(getInitialFileInfo(file));\n }\n });\n }\n resumeFile(uid) {\n const fileToResume = this.fileList.get(uid);\n this.resumeEvent.emit(new ResumeEvent(fileToResume[0]));\n this.fileList.setFilesStateByUid(uid, FileState.Uploading);\n this._uploadFiles([fileToResume]);\n }\n pauseFile(uid) {\n const pausedFile = this.fileList.get(uid)[0];\n this.pauseEvent.emit(new PauseEvent(pausedFile));\n this.fileList.setFilesStateByUid(uid, FileState.Paused);\n }\n removeFiles(uid) {\n const removedFiles = this.fileList.get(uid);\n // Clone the Headers so that the default ones are not overridden\n const removeEventArgs = new RemoveEvent(removedFiles, this.cloneRequestHeaders(this.async.removeHeaders));\n this.removeEvent.emit(removeEventArgs);\n if (!removeEventArgs.isDefaultPrevented()) {\n if (this.component === 'Upload' &&\n (removedFiles[0].state === FileState.Uploaded ||\n removedFiles[0].state === FileState.Initial)) {\n this.performRemove(removedFiles, removeEventArgs);\n }\n else {\n this.fileList.remove(uid);\n if (this.component === 'FileSelect') {\n const flatFiles = this.fileList.filesFlat;\n this.changeEvent.emit(flatFiles.length > 0 ? flatFiles : null);\n }\n }\n }\n }\n cancelFiles(uid) {\n const canceledFiles = this.fileList.get(uid);\n const cancelEventArgs = new CancelEvent(canceledFiles);\n this.cancelEvent.emit(cancelEventArgs);\n for (const file of canceledFiles) {\n if (file.httpSubscription) {\n file.httpSubscription.unsubscribe();\n }\n }\n this.fileList.remove(uid);\n this.checkAllComplete();\n }\n clearFiles() {\n const clearEventArgs = new ClearEvent();\n this.clearEvent.emit(clearEventArgs);\n if (!clearEventArgs.isDefaultPrevented()) {\n const triggerChange = this.fileList.hasFileWithState([\n FileState.Initial,\n FileState.Uploaded\n ]);\n this.fileList.clear();\n if (triggerChange) {\n this.onChange();\n }\n }\n }\n uploadFiles() {\n let filesToUpload = [];\n if (this.async.concurrent) {\n filesToUpload = this.fileList.filesToUpload;\n }\n if (!this.async.concurrent && !this.fileList.hasFileWithState([FileState.Uploading])) {\n filesToUpload = this.fileList.firstFileToUpload ? [this.fileList.firstFileToUpload] : [];\n }\n if (filesToUpload && filesToUpload.length > 0) {\n this._uploadFiles(filesToUpload);\n }\n }\n retryFiles(uid) {\n const filesToRetry = [this.fileList.get(uid)];\n if (filesToRetry) {\n this._uploadFiles(filesToRetry);\n }\n }\n _uploadFiles(allFiles) {\n for (const filesToUpload of allFiles) {\n if (filesToUpload[0].state === FileState.Paused) {\n return;\n }\n // Clone the Headers so that the default ones are not overridden\n const uploadEventArgs = new UploadEvent(filesToUpload, this.cloneRequestHeaders(this.async.saveHeaders));\n this.uploadEvent.emit(uploadEventArgs);\n if (!uploadEventArgs.isDefaultPrevented()) {\n this.fileList.setFilesState(filesToUpload, FileState.Uploading);\n const httpSubcription = this.performUpload(filesToUpload, uploadEventArgs);\n filesToUpload.forEach((file) => {\n file.httpSubscription = httpSubcription;\n });\n }\n else {\n this.fileList.remove(filesToUpload[0].uid);\n }\n }\n }\n performRemove(files, removeEventArgs) {\n const async = this.async;\n const fileNames = files.map((file) => {\n return file.name;\n });\n const formData = this.populateRemoveFormData(fileNames, removeEventArgs.data);\n const options = this.populateRequestOptions(removeEventArgs.headers, false);\n const removeRequest = new HttpRequest(async.removeMethod, async.removeUrl, formData, options);\n this.http.request(removeRequest)\n .subscribe(success => {\n this.onSuccess(success, files, \"remove\");\n }, error => {\n this.onError(error, files, \"remove\");\n });\n }\n performUpload(files, uploadEventArgs) {\n const async = this.async;\n const formData = this.populateUploadFormData(files, uploadEventArgs.data);\n const options = this.populateRequestOptions(uploadEventArgs.headers);\n const uploadRequest = new HttpRequest(async.saveMethod, async.saveUrl, formData, options);\n const httpSubscription = this.http.request(uploadRequest)\n .subscribe(event => {\n if (event.type === HttpEventType.UploadProgress && !this.async.chunk) {\n this.onProgress(event, files);\n }\n else if (event instanceof HttpResponse) {\n this.onSuccess(event, files, \"upload\");\n this.checkAllComplete();\n }\n }, error => {\n this.onError(error, files, \"upload\");\n this.checkAllComplete();\n });\n return httpSubscription;\n }\n onSuccess(successResponse, files, operation) {\n if (operation === \"upload\" && this.async.chunk) {\n this.onChunkProgress(files);\n if (this.isChunkUploadComplete(files[0].uid)) {\n this.removeChunkInfo(files[0].uid);\n }\n else {\n this.updateChunkInfo(files[0].uid);\n this._uploadFiles([files]);\n return;\n }\n }\n const successArgs = new SuccessEvent(files, operation, successResponse);\n this.successEvent.emit(successArgs);\n if (operation === \"upload\") {\n this.fileList.setFilesState(files, successArgs.isDefaultPrevented() ? FileState.Failed : FileState.Uploaded);\n }\n else {\n if (!successArgs.isDefaultPrevented()) {\n this.fileList.remove(files[0].uid);\n }\n }\n if (!successArgs.isDefaultPrevented()) {\n this.onChange();\n }\n }\n onError(errorResponse, files, operation) {\n if (operation === \"upload\" && this.async.chunk) {\n const maxRetries = this.chunk.maxAutoRetries;\n const chunkInfo = this.chunkMap.get(files[0].uid);\n if (chunkInfo.retries < maxRetries) {\n chunkInfo.retries += 1;\n setTimeout(() => {\n this.retryFiles(files[0].uid);\n }, this.chunk.autoRetryAfter);\n return;\n }\n }\n const errorArgs = new ErrorEvent(files, operation, errorResponse);\n this.errorEvent.emit(errorArgs);\n if (operation === \"upload\") {\n this.fileList.setFilesState(files, FileState.Failed);\n }\n }\n onProgress(event, files) {\n const percentComplete = Math.round(100 * event.loaded / event.total);\n const progressArgs = new UploadProgressEvent(files, percentComplete < 100 ? percentComplete : 100);\n this.uploadProgressEvent.emit(progressArgs);\n }\n onChunkProgress(files) {\n const chunkInfo = this.chunkMap.get(files[0].uid);\n let percentComplete = 0;\n if (chunkInfo) {\n if (chunkInfo.index === chunkInfo.totalChunks - 1) {\n percentComplete = 100;\n }\n else {\n percentComplete = Math.round(((chunkInfo.index + 1) / chunkInfo.totalChunks) * 100);\n }\n }\n const progressArgs = new UploadProgressEvent(files, percentComplete < 100 ? percentComplete : 100);\n this.uploadProgressEvent.emit(progressArgs);\n }\n checkAllComplete() {\n if (!this.fileList.hasFileWithState([\n FileState.Uploading,\n FileState.Paused\n ]) && this.areAllSelectedFilesHandled()) {\n this.completeEvent.emit();\n }\n else if (this.shouldUploadNextFile()) {\n this.uploadFiles();\n }\n }\n shouldUploadNextFile() {\n return !this.async.concurrent &&\n this.fileList.hasFileWithState([FileState.Selected]) &&\n !this.fileList.hasFileWithState([FileState.Uploading]);\n }\n areAllSelectedFilesHandled() {\n const validSelectedFiles = this.fileList.getFilesWithState(FileState.Selected).filter(file => !file.validationErrors);\n return validSelectedFiles.length === 0;\n }\n cloneRequestHeaders(headers) {\n const cloned = {};\n if (headers) {\n headers.keys().forEach((key) => {\n cloned[key] = headers.get(key);\n });\n }\n return new HttpHeaders(cloned);\n }\n populateRequestOptions(headers, reportProgress = true) {\n return {\n headers: headers,\n reportProgress: reportProgress,\n responseType: this.async.responseType,\n withCredentials: this.async.withCredentials\n };\n }\n populateUploadFormData(files, clientData) {\n const saveField = this.async.saveField;\n const data = new FormData();\n this.populateClientFormData(data, clientData);\n if (this.async.chunk) {\n data.append(saveField, this.getNextChunk(files[0]));\n data.append(\"metadata\", this.getChunkMetadata(files[0]));\n }\n else {\n for (const file of files) {\n data.append(saveField, file.rawFile);\n }\n }\n return data;\n }\n populateRemoveFormData(fileNames, clientData) {\n const data = new FormData();\n this.populateClientFormData(data, clientData);\n for (const fileName of fileNames) {\n data.append(this.async.removeField, fileName);\n }\n return data;\n }\n populateClientFormData(data, clientData) {\n for (const key in clientData) {\n if (clientData.hasOwnProperty(key)) {\n data.append(key, clientData[key]);\n }\n }\n }\n /* Chunking Helper Methods Section */\n getNextChunk(file) {\n const info = this.getChunkInfo(file);\n const newPosition = info.position + this.chunk.size;\n return file.rawFile.slice(info.position, newPosition);\n }\n getChunkInfo(file) {\n let chunkInfo = this.chunkMap.get(file.uid);\n if (!chunkInfo) {\n const totalChunks = file.size > 0 ? Math.ceil(file.size / this.chunk.size) : 1;\n chunkInfo = this.chunkMap.add(file.uid, totalChunks);\n }\n return chunkInfo;\n }\n updateChunkInfo(uid) {\n const chunkInfo = this.chunkMap.get(uid);\n if (chunkInfo.index < chunkInfo.totalChunks - 1) {\n chunkInfo.index += 1;\n chunkInfo.position += this.chunk.size;\n chunkInfo.retries = 0;\n }\n }\n removeChunkInfo(uid) {\n this.chunkMap.remove(uid);\n }\n getChunkMetadata(file) {\n const chunkInfo = this.chunkMap.get(file.uid);\n const chunkMetadata = {\n chunkIndex: chunkInfo.index,\n contentType: file.rawFile.type,\n fileName: file.name,\n fileSize: file.size,\n fileUid: file.uid,\n totalChunks: chunkInfo.totalChunks\n };\n return JSON.stringify(chunkMetadata);\n }\n isChunkUploadComplete(uid) {\n const chunkInfo = this.chunkMap.get(uid);\n if (chunkInfo) {\n return chunkInfo.index + 1 === chunkInfo.totalChunks;\n }\n return false;\n }\n}\nUploadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });\nUploadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(uploadService, zone) {\n this.uploadService = uploadService;\n this.zone = zone;\n this.onActionButtonFocus = new EventEmitter();\n this.onFileAction = new EventEmitter();\n this.onFileFocus = new EventEmitter();\n this.onTabOut = new EventEmitter();\n this.onWrapperFocus = new EventEmitter();\n this.onSelectButtonFocus = new EventEmitter();\n this.actionButtonsVisible = false;\n this.fileListVisible = false;\n this.focused = false;\n this.focusedFileIndex = 0;\n this._focusedIndex = -1;\n }\n action(event) {\n const key = event.keyCode;\n return this.keyBindings[key];\n }\n process(event, component) {\n const handler = this.action(event);\n if (handler) {\n handler(event, component);\n }\n }\n computeKeys() {\n this.keyBindings = {\n [Keys.Space]: () => this.handleSpace(),\n [Keys.Enter]: () => this.handleEnter(),\n [Keys.Escape]: () => this.handleEscape(),\n [Keys.Delete]: () => this.handleDelete(),\n [Keys.Tab]: (event, component) => this.handleTab(event, component),\n [Keys.ArrowUp]: (event) => this.handleUpDown(event, -1),\n [Keys.ArrowDown]: (event) => this.handleUpDown(event, 1)\n };\n }\n focusSelectButton() {\n this.focused = true;\n this._focusedIndex = -1;\n this.onSelectButtonFocus.emit();\n }\n handleEnter() {\n if (this.lastIndex >= 0 && this.focusedIndex >= 0 && this.focusedIndex <= this.lastFileIndex) {\n this.zone.run(() => this.onFileAction.emit(Keys.Enter));\n }\n }\n handleSpace() {\n if (this.lastIndex >= 0 && this.focusedIndex >= 0 && this.focusedIndex <= this.lastFileIndex) {\n this.zone.run(() => this.onFileAction.emit(Keys.Space));\n }\n }\n handleDelete() {\n if (this.focusedIndex >= 0 && this.focusedIndex <= this.lastFileIndex) {\n this.zone.run(() => this.onFileAction.emit(Keys.Delete));\n }\n }\n handleEscape() {\n if (this.focusedIndex >= 0 && this.focusedIndex <= this.lastFileIndex) {\n this.zone.run(() => this.onFileAction.emit(Keys.Escape));\n }\n }\n handleTab(event, component) {\n const shifted = event.shiftKey;\n /* Select Files button is focused */\n if (this.focusedIndex === -1 && this.fileListVisible && !shifted) {\n this.focusedIndex = this.focusedFileIndex;\n event.preventDefault();\n this.onFileFocus.emit(this.focusedFileIndex);\n return;\n }\n /* File in the list is focused */\n if (this.focusedIndex > -1 && this.focusedIndex <= this.lastFileIndex) {\n if (shifted) {\n this.focusedIndex = -1;\n }\n else if (component !== 'fileselect' && this.actionButtonsVisible) {\n this.focusedIndex = this.lastFileIndex + 1;\n return;\n }\n }\n /* Clear button is focused */\n if (this.focusedIndex === this.lastFileIndex + 1) {\n this.focusedIndex = shifted ? this.focusedFileIndex : this.lastIndex;\n if (shifted) {\n event.preventDefault();\n this.onFileFocus.emit(this.focusedFileIndex);\n }\n return;\n }\n /* Upload button is focused */\n if (this.focusedIndex === this.lastIndex && this.actionButtonsVisible && shifted) {\n this.focusedIndex -= 1;\n return;\n }\n this.onTabOut.emit();\n }\n handleUpDown(event, direction) {\n const focusOnFileList = this.focusedIndex > -1 && this.uploadService.files.count >= 0;\n const nextFocusableIndexInBoundaries = direction > 0 ? this.focusedFileIndex < this.lastFileIndex : this.focusedFileIndex > 0;\n const focusNextFile = focusOnFileList && nextFocusableIndexInBoundaries;\n if (focusNextFile) {\n event.preventDefault();\n this.zone.run(() => {\n this.focusedIndex += direction;\n this.focusedFileIndex += direction;\n });\n }\n }\n get focusedIndex() {\n return this._focusedIndex;\n }\n set focusedIndex(index) {\n if (!this.focused) {\n this.onWrapperFocus.emit();\n }\n this._focusedIndex = index;\n this.focused = true;\n if (this._focusedIndex >= 0 && this._focusedIndex <= this.lastFileIndex) {\n this.onFileFocus.emit(index);\n }\n }\n get lastFileIndex() {\n return this.actionButtonsVisible ? this.lastIndex - 2 : this.lastIndex;\n }\n get lastIndex() {\n const fileCount = this.uploadService.files.count;\n return this.actionButtonsVisible ? fileCount + 1 : fileCount - 1;\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: NavigationService, deps: [{ token: UploadService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: UploadService }, { type: i0.NgZone }]; } });\n\nconst components = {};\n/**\n * @hidden\n */\nclass DropZoneService {\n addComponent(component, zoneId) {\n if (this.has(zoneId)) {\n components[zoneId].push(component);\n }\n else {\n components[zoneId] = [component];\n }\n }\n clearComponent(component, zoneId) {\n if (this.has(zoneId)) {\n const componentIdx = components[zoneId].indexOf(component);\n components[zoneId].splice(componentIdx, 1);\n }\n }\n getComponents(zoneId) {\n return components[zoneId];\n }\n has(id) {\n return id in components;\n }\n}\nDropZoneService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDropZoneService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nconst INVALIDMAXFILESIZE = \"invalidMaxFileSize\";\n/**\n * @hidden\n */\nconst INVALIDMINFILESIZE = \"invalidMinFileSize\";\n/**\n * @hidden\n */\nconst INVALIDFILEEXTENSION = \"invalidFileExtension\";\nconst validateFileExtension = (file, allowedExtensions) => {\n if (allowedExtensions.length > 0) {\n if (allowedExtensions.indexOf(file.extension.toLowerCase()) < 0) {\n file.validationErrors = file.validationErrors || [];\n if (file.validationErrors.indexOf(INVALIDFILEEXTENSION) < 0) {\n file.validationErrors.push(INVALIDFILEEXTENSION);\n }\n }\n }\n};\nconst validateFileSize = (file, minFileSize, maxFileSize) => {\n if (minFileSize !== 0 && file.size < minFileSize) {\n file.validationErrors = file.validationErrors || [];\n if (file.validationErrors.indexOf(INVALIDMINFILESIZE) < 0) {\n file.validationErrors.push(INVALIDMINFILESIZE);\n }\n }\n if (maxFileSize !== 0 && file.size > maxFileSize) {\n file.validationErrors = file.validationErrors || [];\n if (file.validationErrors.indexOf(INVALIDMAXFILESIZE) < 0) {\n file.validationErrors.push(INVALIDMAXFILESIZE);\n }\n }\n};\nconst parseAllowedExtensions = (extensions) => {\n const allowedExtensions = extensions.map((ext) => {\n const parsedExt = (ext.substring(0, 1) === \".\") ? ext : (\".\" + ext);\n return parsedExt.toLowerCase();\n });\n return allowedExtensions;\n};\n/**\n * @hidden\n */\nconst validateFiles = (files, restrictionInfo) => {\n const allowedExtensions = parseAllowedExtensions(restrictionInfo.allowedExtensions);\n const maxFileSize = restrictionInfo.maxFileSize;\n const minFileSize = restrictionInfo.minFileSize;\n let i;\n for (i = 0; i < files.length; i++) {\n validateFileExtension(files[i], allowedExtensions);\n validateFileSize(files[i], minFileSize, maxFileSize);\n }\n};\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-upload',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1728372240,\n version: '16.11.0',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'\n};\n\n/**\n * Used to customize the rendering of the files in the list ([see example]({% slug templates_upload %}#toc-file-template)).\n */\nclass FileTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFileTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFileTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileTemplateDirective, isStandalone: true, selector: \"[kendoUploadFileTemplate], [kendoFileSelectFileTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoUploadFileTemplate], [kendoFileSelectFileTemplate]',\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used to customize the rendering of the file info section in the list. All other elements of the default template, such as file icon, action buttons, upload progress etc. will be preserved in place. ([see example]({% slug templates_upload %}#toc-file-info-template)).\n */\nclass FileInfoTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFileInfoTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileInfoTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFileInfoTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileInfoTemplateDirective, isStandalone: true, selector: \"[kendoUploadFileInfoTemplate], [kendoFileSelectFileInfoTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileInfoTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoUploadFileInfoTemplate], [kendoFileSelectFileInfoTemplate]',\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nclass UploadFileSelectBase {\n constructor(uploadService, navigation, cdr, injector, zone) {\n this.uploadService = uploadService;\n this.navigation = navigation;\n this.cdr = cdr;\n this.injector = injector;\n this.zone = zone;\n /**\n * Disables the component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Enables the selection of multiple files\n * If set to `false`, only one file can be selected at a time.\n * @default true\n */\n this.multiple = true;\n /**\n * Toggles the visibility of the file list.\n * @default true\n */\n this.showFileList = true;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n * @default 0\n */\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * @hidden\n */\n this.hostDefaultClasses = true;\n /**\n * Fires when the user navigates outside the component.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires when the component is focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires when files are selected. If prevented, the selected files will not be added to the list.\n */\n this.select = new EventEmitter();\n /**\n * Fires when a file is about to be removed. If prevented, the file will remain in the list.\n */\n this.remove = new EventEmitter();\n /**\n * @hidden\n */\n this._restrictions = {\n allowedExtensions: [],\n maxFileSize: 0,\n minFileSize: 0\n };\n this.onTouchedCallback = (_) => { };\n this.onChangeCallback = (_) => { };\n this.fileList = this.uploadService.files;\n }\n /**\n * Sets the restrictions for selected files.\n */\n set restrictions(restrictions) {\n const parsedRestrictions = Object.assign({}, this.restrictions, restrictions);\n this._restrictions = parsedRestrictions;\n }\n get restrictions() {\n return this._restrictions;\n }\n /**\n * @hidden\n */\n get hostDisabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get formControl() {\n const ngControl = this.injector.get(NgControl, null);\n return ngControl?.control || null;\n }\n /**\n * @hidden\n */\n get isControlRequired() {\n return isControlRequired(this.formControl);\n }\n /**\n * @hidden\n */\n get hasFileList() {\n const hasFileList = this.showFileList && this.fileList.count > 0;\n this.navigation.fileListVisible = hasFileList;\n return hasFileList;\n }\n /**\n * @hidden\n */\n writeValue(newValue, validation, callback) {\n let isValid = true;\n if (newValue instanceof Array) {\n newValue.forEach((file) => {\n if (!validation(file)) {\n isValid = false;\n }\n });\n if (isValid) {\n this.uploadService[callback](newValue);\n }\n }\n if (newValue === null) {\n this.fileList.clear();\n }\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n onFileSelectButtonFocus() {\n if (!this.navigation.focused) {\n this.navigation.focusedIndex = -1;\n }\n }\n /**\n * Focuses the component's `Select files` button.\n */\n focus() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.fileSelectButton.nativeElement.focus();\n this.navigation.focused = true;\n });\n });\n }\n /**\n * @hidden\n * @deprecated\n */\n focusComponent() {\n this.focus();\n }\n /**\n * Blurs the component if it was previously focused.\n */\n blur() {\n if (this.navigation.focused) {\n this.navigation.focused = false;\n document.activeElement.blur();\n }\n }\n /**\n * @hidden\n * @deprecated\n */\n blurComponent() {\n this.blur();\n }\n}\nUploadFileSelectBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadFileSelectBase, deps: [{ token: UploadService }, { token: NavigationService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nUploadFileSelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadFileSelectBase, inputs: { accept: \"accept\", disabled: \"disabled\", multiple: \"multiple\", showFileList: \"showFileList\", tabindex: \"tabindex\", restrictions: \"restrictions\", zoneId: \"zoneId\", focusableId: \"focusableId\" }, outputs: { onBlur: \"blur\", onFocus: \"focus\", select: \"select\", remove: \"remove\" }, host: { properties: { \"class.k-upload\": \"this.hostDefaultClasses\", \"class.k-disabled\": \"this.hostDisabledClass\" } }, queries: [{ propertyName: \"fileTemplate\", first: true, predicate: FileTemplateDirective, descendants: true }, { propertyName: \"fileInfoTemplate\", first: true, predicate: FileInfoTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"fileSelectButton\", first: true, predicate: [\"fileSelectButton\"], descendants: true, read: ElementRef, static: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadFileSelectBase, decorators: [{\n type: Directive,\n args: [{}]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: NavigationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.NgZone }]; }, propDecorators: { fileTemplate: [{\n type: ContentChild,\n args: [FileTemplateDirective]\n }], fileInfoTemplate: [{\n type: ContentChild,\n args: [FileInfoTemplateDirective]\n }], fileSelectButton: [{\n type: ViewChild,\n args: ['fileSelectButton', { static: true, read: ElementRef }]\n }], accept: [{\n type: Input\n }], disabled: [{\n type: Input\n }], multiple: [{\n type: Input\n }], showFileList: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], restrictions: [{\n type: Input\n }], zoneId: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], hostDefaultClasses: [{\n type: HostBinding,\n args: ['class.k-upload']\n }], hostDisabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], select: [{\n type: Output\n }], remove: [{\n type: Output\n }] } });\n\n/* eslint-disable no-debugger */\n/**\n * @hidden\n */\nclass UploadActionButtonsComponent {\n constructor(uploadService, localization, navigation) {\n this.uploadService = uploadService;\n this.localization = localization;\n this.navigation = navigation;\n this.hostDefaultClass = true;\n }\n get actionButtonsEndClassName() {\n return this.actionsLayout === 'end';\n }\n get actionButtonsStretchedClassName() {\n return this.actionsLayout === 'stretched';\n }\n get actionButtonsStartClassName() {\n return this.actionsLayout === 'start';\n }\n get actionButtonsCenterClassName() {\n return this.actionsLayout === 'center';\n }\n onUploadButtonFocus() {\n if (!this.navigation.focused) {\n this.navigation.focusedIndex = this.navigation.lastIndex;\n }\n }\n onUploadButtonClick(event) {\n event.stopImmediatePropagation();\n this.performUpload();\n }\n performUpload() {\n if (!this.disabled) {\n this.uploadService.uploadFiles();\n this.navigation.focusSelectButton();\n }\n }\n onClearButtonClick(event) {\n event.stopImmediatePropagation();\n this.clearFiles();\n }\n clearFiles() {\n if (!this.disabled) {\n this.uploadService.clearFiles();\n this.navigation.focusSelectButton();\n }\n }\n textFor(key) {\n return this.localization.get(key);\n }\n}\nUploadActionButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadActionButtonsComponent, deps: [{ token: UploadService }, { token: i1$1.LocalizationService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });\nUploadActionButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadActionButtonsComponent, isStandalone: true, selector: \"kendo-upload-action-buttons\", inputs: { disabled: \"disabled\", actionsLayout: \"actionsLayout\" }, host: { properties: { \"class.k-actions\": \"this.hostDefaultClass\", \"class.k-actions-end\": \"this.actionButtonsEndClassName\", \"class.k-actions-stretched\": \"this.actionButtonsStretchedClassName\", \"class.k-actions-start\": \"this.actionButtonsStartClassName\", \"class.k-actions-center\": \"this.actionButtonsCenterClassName\" } }, viewQueries: [{ propertyName: \"clearButton\", first: true, predicate: [\"clearButton\"], descendants: true, static: true }, { propertyName: \"uploadButton\", first: true, predicate: [\"uploadButton\"], descendants: true, static: true }], ngImport: i0, template: `\n \n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadActionButtonsComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-upload-action-buttons',\n template: `\n \n \n `,\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: i1$1.LocalizationService }, { type: NavigationService }]; }, propDecorators: { disabled: [{\n type: Input\n }], actionsLayout: [{\n type: Input\n }], clearButton: [{\n type: ViewChild,\n args: ['clearButton', { static: true }]\n }], uploadButton: [{\n type: ViewChild,\n args: ['uploadButton', { static: true }]\n }], hostDefaultClass: [{\n type: HostBinding,\n args: ['class.k-actions']\n }], actionButtonsEndClassName: [{\n type: HostBinding,\n args: ['class.k-actions-end']\n }], actionButtonsStretchedClassName: [{\n type: HostBinding,\n args: ['class.k-actions-stretched']\n }], actionButtonsStartClassName: [{\n type: HostBinding,\n args: ['class.k-actions-start']\n }], actionButtonsCenterClassName: [{\n type: HostBinding,\n args: ['class.k-actions-center']\n }] } });\n\n/**\n * @hidden\n */\nclass FileListItemDirective {\n constructor(el, navigationService, uploadService) {\n this.navigationService = navigationService;\n this.uploadService = uploadService;\n this.fileClass = true;\n this.focused = false;\n this.element = el;\n }\n focus() {\n this.element.nativeElement.focus();\n }\n get uidAttribute() {\n return this.files[0].uid;\n }\n get tabIndex() {\n return this.navigationService.focusedFileIndex === this.index ? '0' : '-1';\n }\n get kFileError() {\n return this.files[0].state === FileState.Failed;\n }\n get kFileInvalid() {\n return filesHaveValidationErrors(this.files);\n }\n get kFileProgress() {\n return this.files[0].state === FileState.Uploading ||\n this.files[0].state === FileState.Paused;\n }\n get kFileSuccess() {\n if (this.uploadService.component === 'Upload') {\n return this.files[0].state === FileState.Uploaded ||\n this.files[0].state === FileState.Initial;\n }\n return false;\n }\n get kStateFocused() {\n return this.focused;\n }\n onFocus() {\n this.focused = true;\n }\n onBlur() {\n this.focused = false;\n }\n onClick(event) {\n if ((!isFocusable(event.target) && !hasClasses(event.target, IGNORE_TARGET_CLASSES)) || !!event.target.closest('.k-upload-action')) {\n this.navigationService.focusedIndex = this.navigationService.focusedFileIndex = this.index;\n }\n }\n}\nFileListItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemDirective, deps: [{ token: i0.ElementRef }, { token: NavigationService }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Directive });\nFileListItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListItemDirective, isStandalone: true, selector: \"[kendoUploadFileListItem]\", inputs: { files: \"files\", index: \"index\" }, host: { listeners: { \"focus\": \"onFocus()\", \"blur\": \"onBlur()\", \"click\": \"onClick($event)\" }, properties: { \"class.k-file\": \"this.fileClass\", \"attr.data-uid\": \"this.uidAttribute\", \"attr.tabIndex\": \"this.tabIndex\", \"class.k-file-error\": \"this.kFileError\", \"class.k-file-invalid\": \"this.kFileInvalid\", \"class.k-file-progress\": \"this.kFileProgress\", \"class.k-file-success\": \"this.kFileSuccess\", \"class.k-focus\": \"this.kStateFocused\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoUploadFileListItem]',\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: NavigationService }, { type: UploadService }]; }, propDecorators: { files: [{\n type: Input\n }], index: [{\n type: Input\n }], fileClass: [{\n type: HostBinding,\n args: ['class.k-file']\n }], uidAttribute: [{\n type: HostBinding,\n args: ['attr.data-uid']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], kFileError: [{\n type: HostBinding,\n args: ['class.k-file-error']\n }], kFileInvalid: [{\n type: HostBinding,\n args: ['class.k-file-invalid']\n }], kFileProgress: [{\n type: HostBinding,\n args: ['class.k-file-progress']\n }], kFileSuccess: [{\n type: HostBinding,\n args: ['class.k-file-success']\n }], kStateFocused: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass FileListItemBase {\n constructor(uploadService) {\n this.uploadService = uploadService;\n this.progressComplete = 0;\n }\n subscribeUploadProgress(uploadProgressHandler) {\n this.uploadProgressSubscription = this.uploadService.uploadProgressEvent.subscribe(uploadProgressHandler);\n }\n fileHasValidationErrors(file) {\n return fileHasValidationErrors(file);\n }\n filesHaveValidationErrors(files) {\n return filesHaveValidationErrors(files);\n }\n ngOnDestroy() {\n this.uploadProgressSubscription.unsubscribe();\n }\n getFileValidationMessage(file) {\n let validationMessage;\n if (file.validationErrors && file.validationErrors.length > 0) {\n validationMessage = this.localization.get(file.validationErrors[0]);\n }\n return validationMessage;\n }\n getTotalFilesSizeMessage(files) {\n return getTotalFilesSizeMessage(files);\n }\n textFor(key) {\n return this.localization.get(key);\n }\n}\nFileListItemBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemBase, deps: [{ token: UploadService }], target: i0.ɵɵFactoryTarget.Component });\nFileListItemBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListItemBase, selector: \"ng-component\", ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemBase, decorators: [{\n type: Component,\n args: [{ template: '' }]\n }], ctorParameters: function () { return [{ type: UploadService }]; } });\n\n/**\n * @hidden\n */\nclass FileListItemActionButtonComponent {\n constructor(uploadService, localization, navigation) {\n this.uploadService = uploadService;\n this.localization = localization;\n this.navigation = navigation;\n this.retrySVGIcon = arrowRotateCwSmallIcon;\n this.playSVGIcon = playSmIcon;\n this.pauseSVGIcon = pauseSmIcon;\n this.cancelSVGIcon = cancelIcon;\n this.deleteSVGIcon = xIcon;\n }\n onRetryClick() {\n if (this.disabled) {\n return;\n }\n this.uploadService.retryFiles(this.file.uid);\n }\n onRemoveCancelClick(event) {\n if (this.disabled) {\n return;\n }\n event.stopImmediatePropagation();\n const uid = this.file.uid;\n if (this.file.state === FileState.Uploading) {\n this.uploadService.cancelFiles(uid);\n }\n else {\n this.uploadService.removeFiles(uid);\n }\n this.navigation.focusSelectButton();\n }\n onPauseResumeClick() {\n if (this.disabled) {\n return;\n }\n const uid = this.file.uid;\n if (this.file.state === FileState.Paused) {\n this.uploadService.resumeFile(uid);\n }\n else {\n this.uploadService.pauseFile(uid);\n }\n }\n get actionButtonTitle() {\n if (this.file.state === FileState.Uploading) {\n return this.localization.get('cancel');\n }\n return this.localization.get('remove');\n }\n get retryButtonTitle() {\n return this.localization.get('retry');\n }\n get pauseResumeButtonTitle() {\n if (this.file.state === FileState.Uploading) {\n return this.localization.get('pause');\n }\n return this.localization.get('resume');\n }\n get isUploading() {\n return this.file.state === FileState.Uploading;\n }\n get isFailed() {\n return this.file.state === FileState.Failed;\n }\n get isPaused() {\n return this.file.state === FileState.Paused;\n }\n get isResumable() {\n const service = this.uploadService;\n const isResumable = service.async.chunk && service.chunk.resumable;\n const isUploading = (this.file.state === FileState.Paused) || (this.file.state === FileState.Uploading);\n return isResumable && isUploading;\n }\n get isActionButtonVisible() {\n if ((this.file.state === FileState.Uploaded || this.file.state === FileState.Initial) &&\n !this.uploadService.async.removeUrl && this.uploadService.component === 'Upload') {\n return false;\n }\n return true;\n }\n}\nFileListItemActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemActionButtonComponent, deps: [{ token: UploadService }, { token: i1$1.LocalizationService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });\nFileListItemActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListItemActionButtonComponent, isStandalone: true, selector: \"kendo-upload-file-list-item-action-button\", inputs: { file: \"file\", disabled: \"disabled\", progress: \"progress\" }, ngImport: i0, template: `\n \n {{progress}}%\n\n \n\n \n\n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kendoButton], span[kendoButton], kendo-button\", inputs: [\"arrowIcon\", \"toggleable\", \"togglable\", \"selected\", \"tabIndex\", \"imageUrl\", \"iconClass\", \"icon\", \"disabled\", \"size\", \"rounded\", \"fillMode\", \"themeColor\", \"svgIcon\", \"role\", \"primary\", \"look\"], outputs: [\"selectedChange\", \"click\"], exportAs: [\"kendoButton\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListItemActionButtonComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-upload-file-list-item-action-button',\n template: `\n \n {{progress}}%\n\n \n\n \n\n \n \n `,\n standalone: true,\n imports: [NgIf, ButtonComponent]\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: i1$1.LocalizationService }, { type: NavigationService }]; }, propDecorators: { file: [{\n type: Input\n }], disabled: [{\n type: Input\n }], progress: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass FileListMultipleItemsComponent extends FileListItemBase {\n constructor(localization, uploadService) {\n super(uploadService);\n this.localization = localization;\n this.copySVGIcon = copyIcon;\n this.subscribeUploadProgress((args) => {\n if (args.files[0].uid === this.files[0].uid) {\n this.progressComplete = args.percentComplete;\n }\n });\n }\n get showProgress() {\n const showProgress = this.files[0].state === FileState.Uploading || this.files[0].state === FileState.Paused;\n return showProgress ? 'active' : 'inactive';\n }\n ngOnInit() {\n this.filesHaveErrors = super.filesHaveValidationErrors(this.files);\n }\n fileStatusText(file) {\n const errors = file.validationErrors;\n if (!isPresent(errors)) {\n return this.getTotalFilesSizeMessage([file]);\n }\n return this.getFileValidationMessage(file);\n }\n get batchStatusText() {\n const state = this.files[0].state;\n const fileCount = this.files.length;\n if (state === FileState.Uploaded) {\n return `${fileCount} ${this.textFor('filesBatchStatusUploaded')}`;\n }\n if (state === FileState.Failed) {\n return `${fileCount} ${this.textFor('filesBatchStatusFailed')}`;\n }\n return `${fileCount} ${this.textFor('filesBatchStatus')}`;\n }\n get isUploadSuccessful() {\n return this.files[0].state === FileState.Uploaded;\n }\n get isUploadFailed() {\n return this.files[0].state === FileState.Failed;\n }\n}\nFileListMultipleItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListMultipleItemsComponent, deps: [{ token: i1$1.LocalizationService }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Component });\nFileListMultipleItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListMultipleItemsComponent, isStandalone: true, selector: \"kendo-upload-file-list-multiple-items\", inputs: { disabled: \"disabled\", files: \"files\", fileInfoTemplate: \"fileInfoTemplate\" }, usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n {{file.name}}\n \n {{fileStatusText(file)}}\n \n {{batchStatusText}}\n \n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"component\", type: ProgressBarComponent, selector: \"kendo-progressbar\", inputs: [\"label\", \"progressCssStyle\", \"progressCssClass\", \"emptyCssStyle\", \"emptyCssClass\", \"animation\"], outputs: [\"animationEnd\"], exportAs: [\"kendoProgressBar\"] }, { kind: \"component\", type: IconWrapperComponent, selector: \"kendo-icon-wrapper\", inputs: [\"name\", \"svgIcon\", \"innerCssClass\", \"customFontClass\", \"size\"], exportAs: [\"kendoIconWrapper\"] }, { kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: NgFor, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: FileListItemActionButtonComponent, selector: \"kendo-upload-file-list-item-action-button\", inputs: [\"file\", \"disabled\", \"progress\"] }], animations: [\n trigger('progressState', [\n state('active', style({ opacity: 1 })),\n state('inactive', style({ opacity: 0 })),\n transition('void => active', style({ opacity: 0 })),\n transition('inactive => active', style({ opacity: 1 })),\n transition('active => inactive', animate('1s 2s ease-out'))\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListMultipleItemsComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('progressState', [\n state('active', style({ opacity: 1 })),\n state('inactive', style({ opacity: 0 })),\n transition('void => active', style({ opacity: 0 })),\n transition('inactive => active', style({ opacity: 1 })),\n transition('active => inactive', animate('1s 2s ease-out'))\n ])\n ],\n selector: 'kendo-upload-file-list-multiple-items',\n template: `\n \n \n \n \n \n \n \n \n \n \n {{file.name}}\n \n {{fileStatusText(file)}}\n \n {{batchStatusText}}\n \n \n \n \n \n `,\n standalone: true,\n imports: [ProgressBarComponent, IconWrapperComponent, NgIf, NgFor, NgClass, NgTemplateOutlet, FileListItemActionButtonComponent]\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: UploadService }]; }, propDecorators: { disabled: [{\n type: Input\n }], files: [{\n type: Input\n }], fileInfoTemplate: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass FileListSingleItemComponent extends FileListItemBase {\n constructor(localization, uploadService) {\n super(uploadService);\n this.localization = localization;\n this.subscribeUploadProgress((args) => {\n if (args.files[0].uid === this.file.uid) {\n this.progressComplete = args.percentComplete;\n }\n });\n }\n get fileStatusText() {\n const errors = this.file.validationErrors;\n if (this.file.state === FileState.Uploaded) {\n return `${this.textFor('fileStatusUploaded')}`;\n }\n if (this.file.state === FileState.Failed) {\n return `${this.textFor('fileStatusFailed')}`;\n }\n if (!isPresent(errors)) {\n return this.getTotalFilesSizeMessage([this.file]);\n }\n return this.getFileValidationMessage(this.file);\n }\n get showProgress() {\n const showProgress = this.file.state === FileState.Uploading || this.file.state === FileState.Paused;\n return showProgress ? 'active' : 'inactive';\n }\n get fileGroupClass() {\n return getFileGroupCssClass(this.file.extension ? this.file.extension : '');\n }\n get fileSVGGroupIcon() {\n const initial = fileIcon;\n if (this.file.extension) {\n for (const group in fileGroupMap) {\n if (fileGroupMap[group].indexOf(this.file.extension) >= 0) {\n return fileSVGGroupMap[group];\n }\n }\n }\n return initial;\n }\n get isUploadSuccessful() {\n return this.file.state === FileState.Uploaded;\n }\n get isUploadFailed() {\n return this.file.state === FileState.Failed;\n }\n get isNotYetUploaded() {\n return !this.isUploadFailed && !this.isUploadSuccessful;\n }\n}\nFileListSingleItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListSingleItemComponent, deps: [{ token: i1$1.LocalizationService }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Component });\nFileListSingleItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListSingleItemComponent, isStandalone: true, selector: \"kendo-upload-file-list-single-item\", inputs: { disabled: \"disabled\", file: \"file\", fileInfoTemplate: \"fileInfoTemplate\" }, usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n {{ file.name }}\n {{fileStatusText}}\n \n \n \n \n \n `, isInline: true, dependencies: [{ kind: \"component\", type: ProgressBarComponent, selector: \"kendo-progressbar\", inputs: [\"label\", \"progressCssStyle\", \"progressCssClass\", \"emptyCssStyle\", \"emptyCssClass\", \"animation\"], outputs: [\"animationEnd\"], exportAs: [\"kendoProgressBar\"] }, { kind: \"component\", type: IconWrapperComponent, selector: \"kendo-icon-wrapper\", inputs: [\"name\", \"svgIcon\", \"innerCssClass\", \"customFontClass\", \"size\"], exportAs: [\"kendoIconWrapper\"] }, { kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: FileListItemActionButtonComponent, selector: \"kendo-upload-file-list-item-action-button\", inputs: [\"file\", \"disabled\", \"progress\"] }], animations: [\n trigger('progressState', [\n state('active', style({ opacity: 1 })),\n state('inactive', style({ opacity: 0 })),\n transition('void => active', style({ opacity: 0 })),\n transition('inactive => active', style({ opacity: 1 })),\n transition('active => inactive', animate('1s 2s ease-out'))\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListSingleItemComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('progressState', [\n state('active', style({ opacity: 1 })),\n state('inactive', style({ opacity: 0 })),\n transition('void => active', style({ opacity: 0 })),\n transition('inactive => active', style({ opacity: 1 })),\n transition('active => inactive', animate('1s 2s ease-out'))\n ])\n ],\n selector: 'kendo-upload-file-list-single-item',\n template: `\n \n \n \n \n \n \n \n \n {{ file.name }}\n {{fileStatusText}}\n \n \n \n \n \n `,\n standalone: true,\n imports: [ProgressBarComponent, IconWrapperComponent, NgIf, NgClass, NgTemplateOutlet, FileListItemActionButtonComponent]\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: UploadService }]; }, propDecorators: { disabled: [{\n type: Input\n }], file: [{\n type: Input\n }], fileInfoTemplate: [{\n type: Input\n }] } });\n\n/* eslint-disable @angular-eslint/component-selector */\n/**\n * @hidden\n */\nclass FileListComponent {\n constructor(uploadService, navigation) {\n this.uploadService = uploadService;\n this.navigation = navigation;\n this.fileListRole = 'list';\n this.onItemFocus();\n this.onItemAction();\n }\n onItemFocus() {\n this.focusSubscription = this.navigation.onFileFocus.subscribe((index) => {\n this.fileListItems.toArray()[index].focus();\n });\n }\n onItemAction() {\n this.actionSubscription = this.navigation.onFileAction.subscribe((key) => {\n this.itemActionHandler(key);\n });\n }\n itemActionHandler(key) {\n const index = this.navigation.focusedIndex;\n const filesArray = this.fileListItems.toArray();\n const numberOfFiles = filesArray.length;\n const item = filesArray[index];\n const uid = item.uidAttribute;\n const files = this.uploadService.files.get(uid);\n if (key === Keys.Escape && files[0].state === FileState.Uploading) {\n this.uploadService.cancelFiles(uid);\n this.navigation.focusSelectButton();\n return;\n }\n if (key === Keys.Enter && files[0].state === FileState.Failed) {\n this.uploadService.retryFiles(uid);\n return;\n }\n if (key === Keys.Delete) {\n if (files[0].state === FileState.Uploading) {\n this.uploadService.cancelFiles(uid);\n }\n else if (this.hasDelete(item)) {\n this.uploadService.removeFiles(uid);\n }\n if (index < numberOfFiles - 1) {\n filesArray[index + 1].focus();\n }\n else if (numberOfFiles === 1) {\n this.navigation.focusSelectButton();\n }\n else if (index === numberOfFiles - 1) {\n this.navigation.focusedIndex = this.navigation.focusedFileIndex = index - 1;\n filesArray[index - 1].focus();\n }\n }\n const isUploadChunk = this.uploadService.async.chunk;\n const canTogglePauseResume = key === Keys.Space && files[0].state !== FileState.Uploaded;\n if (canTogglePauseResume && isUploadChunk) {\n if (files[0].state === FileState.Paused) {\n this.uploadService.resumeFile(uid);\n }\n else {\n this.uploadService.pauseFile(uid);\n }\n }\n }\n hasDelete(item) {\n return item.element.nativeElement.getElementsByClassName('k-svg-i-x').length > 0;\n }\n ngOnDestroy() {\n this.focusSubscription.unsubscribe();\n this.actionSubscription.unsubscribe();\n }\n}\nFileListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListComponent, deps: [{ token: UploadService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });\nFileListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileListComponent, isStandalone: true, selector: \"[kendo-upload-file-list]\", inputs: { disabled: \"disabled\", fileList: \"fileList\", fileTemplate: \"fileTemplate\", fileInfoTemplate: \"fileInfoTemplate\" }, host: { properties: { \"attr.role\": \"this.fileListRole\" } }, viewQueries: [{ propertyName: \"fileListItems\", predicate: FileListItemDirective, descendants: true }], ngImport: i0, template: `\n \n
  • \n \n \n \n
  • \n
    \n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgFor, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: FileListItemDirective, selector: \"[kendoUploadFileListItem]\", inputs: [\"files\", \"index\"] }, { kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FileListSingleItemComponent, selector: \"kendo-upload-file-list-single-item\", inputs: [\"disabled\", \"file\", \"fileInfoTemplate\"] }, { kind: \"component\", type: FileListMultipleItemsComponent, selector: \"kendo-upload-file-list-multiple-items\", inputs: [\"disabled\", \"files\", \"fileInfoTemplate\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileListComponent, decorators: [{\n type: Component,\n args: [{\n selector: '[kendo-upload-file-list]',\n template: `\n \n
  • \n \n \n \n
  • \n
    \n `,\n standalone: true,\n imports: [NgFor, FileListItemDirective, NgIf, FileListSingleItemComponent, FileListMultipleItemsComponent, NgTemplateOutlet]\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: NavigationService }]; }, propDecorators: { disabled: [{\n type: Input\n }], fileList: [{\n type: Input\n }], fileTemplate: [{\n type: Input\n }], fileInfoTemplate: [{\n type: Input\n }], fileListItems: [{\n type: ViewChildren,\n args: [FileListItemDirective]\n }], fileListRole: [{\n type: HostBinding,\n args: ['attr.role']\n }] } });\n\n/**\n * @hidden\n */\nclass UploadStatusTotalComponent {\n constructor(localization) {\n this.localization = localization;\n this.checkmarkIcon = checkIcon;\n this.exceptionSVGIcon = exclamationCircleIcon;\n this.uploadSVGIcon = uploadIcon;\n this.pauseSVGIcon = pauseSmIcon;\n }\n get iconClass() {\n if (!this.isUploading && !this.isFailed) {\n return 'checkmark';\n }\n if (!this.isUploading && this.isFailed) {\n return 'exception';\n }\n if (this.isUploading) {\n return 'upload';\n }\n if (this.isPaused) {\n return 'pause-sm';\n }\n }\n get SVGIconClass() {\n if (!this.isUploading && !this.isFailed) {\n return this.checkmarkIcon;\n }\n if (!this.isUploading && this.isFailed) {\n return this.exceptionSVGIcon;\n }\n if (this.isUploading) {\n return this.uploadSVGIcon;\n }\n if (this.isPaused) {\n return this.pauseSVGIcon;\n }\n }\n ngDoCheck() {\n this.isPaused = this.fileList.hasFileWithState([FileState.Paused]);\n this.isFailed = this.fileList.hasFileWithState([FileState.Failed]);\n this.isUploading = this.fileList.hasFileWithState([FileState.Uploading]);\n if (this.isPaused && !this.isUploading) {\n this.statusText = this.localization.get('headerStatusPaused');\n }\n else {\n this.statusText = this.isUploading ? this.localization.get('headerStatusUploading')\n : this.localization.get('headerStatusUploaded');\n }\n }\n}\nUploadStatusTotalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadStatusTotalComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nUploadStatusTotalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadStatusTotalComponent, isStandalone: true, selector: \"kendo-upload-status-total\", inputs: { fileList: \"fileList\" }, ngImport: i0, template: `\n \n \n {{statusText}}\n `, isInline: true, dependencies: [{ kind: \"component\", type: IconWrapperComponent, selector: \"kendo-icon-wrapper\", inputs: [\"name\", \"svgIcon\", \"innerCssClass\", \"customFontClass\", \"size\"], exportAs: [\"kendoIconWrapper\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadStatusTotalComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-upload-status-total',\n template: `\n \n \n {{statusText}}\n `,\n standalone: true,\n imports: [IconWrapperComponent]\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; }, propDecorators: { fileList: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass FileSelectDirective {\n constructor(uploadService, navigation, el) {\n this.uploadService = uploadService;\n this.navigation = navigation;\n this.type = \"file\";\n this.autocomplete = \"off\";\n this.tabIndex = -1;\n this.ariaHidden = true;\n this.classNames = true;\n this.element = el;\n }\n get nameAttribute() {\n return this.uploadService.async.saveField;\n }\n get multipleAttribute() {\n return this.multiple ? \"multiple\" : null;\n }\n get dirAttribute() {\n return this.dir;\n }\n get disabledAttribute() {\n return this.disabled ? \"true\" : null;\n }\n get acceptAttribute() {\n return this.accept ? this.accept : null;\n }\n get requiredAttribute() {\n return this.required ? \"\" : null;\n }\n onInputChange(event) {\n const ua = navigator.userAgent;\n const webkit = /(webkit)[ \\/]([\\w.]+)/i;\n const ie = /(windows)[ \\/]([\\w.]+)/i;\n let selectedFiles = inputFiles(event.target);\n selectedFiles = assignGuidToFiles(selectedFiles, !this.uploadService.async.batch);\n validateFiles(selectedFiles, this.restrictions);\n if (!this.multiple) {\n this.uploadService.clearFiles();\n }\n this.uploadService.addFiles(selectedFiles);\n /*\n Chrome, IE, Edge and Safari do not trigger a `change` event\n when a file with the same name is selected a number of consecutive times.\n As a workaround, clear the input value after handling the file.\n */\n const native = this.element.nativeElement;\n if (ua.match(webkit) || ua.match(ie)) {\n native.type = \"\";\n native.type = \"file\";\n }\n setTimeout(() => {\n this.navigation.focusedIndex = -1;\n });\n }\n}\nFileSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectDirective, deps: [{ token: UploadService }, { token: NavigationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nFileSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileSelectDirective, isStandalone: true, selector: \"[kendoFileSelect]\", inputs: { dir: \"dir\", disabled: \"disabled\", multiple: \"multiple\", restrictions: \"restrictions\", accept: \"accept\", required: \"required\" }, host: { listeners: { \"change\": \"onInputChange($event)\" }, properties: { \"attr.type\": \"this.type\", \"attr.autocomplete\": \"this.autocomplete\", \"attr.tabindex\": \"this.tabIndex\", \"attr.aria-hidden\": \"this.ariaHidden\", \"class.k-hidden\": \"this.classNames\", \"attr.name\": \"this.nameAttribute\", \"attr.multiple\": \"this.multipleAttribute\", \"attr.dir\": \"this.dirAttribute\", \"attr.disabled\": \"this.disabledAttribute\", \"attr.accept\": \"this.acceptAttribute\", \"attr.required\": \"this.requiredAttribute\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoFileSelect]',\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: NavigationService }, { type: i0.ElementRef }]; }, propDecorators: { dir: [{\n type: Input\n }], disabled: [{\n type: Input\n }], multiple: [{\n type: Input\n }], restrictions: [{\n type: Input\n }], accept: [{\n type: Input\n }], required: [{\n type: Input\n }], type: [{\n type: HostBinding,\n args: [\"attr.type\"]\n }], autocomplete: [{\n type: HostBinding,\n args: [\"attr.autocomplete\"]\n }], tabIndex: [{\n type: HostBinding,\n args: [\"attr.tabindex\"]\n }], ariaHidden: [{\n type: HostBinding,\n args: [\"attr.aria-hidden\"]\n }], classNames: [{\n type: HostBinding,\n args: [\"class.k-hidden\"]\n }], nameAttribute: [{\n type: HostBinding,\n args: [\"attr.name\"]\n }], multipleAttribute: [{\n type: HostBinding,\n args: [\"attr.multiple\"]\n }], dirAttribute: [{\n type: HostBinding,\n args: [\"attr.dir\"]\n }], disabledAttribute: [{\n type: HostBinding,\n args: [\"attr.disabled\"]\n }], acceptAttribute: [{\n type: HostBinding,\n args: [\"attr.accept\"]\n }], requiredAttribute: [{\n type: HostBinding,\n args: [\"attr.required\"]\n }], onInputChange: [{\n type: HostListener,\n args: [\"change\", [\"$event\"]]\n }] } });\n\n/**\n * @hidden\n */\nclass DropZoneBase {\n constructor(element, renderer, cssClass) {\n this.element = element;\n this.renderer = renderer;\n this.hideIntervalElement = null;\n this.hoverClass = cssClass;\n }\n /**\n * @hidden\n */\n onElementDragEnterListener() {\n this.addClass(this.hoverClass);\n this.lastDragElement = new Date();\n if (!this.hideIntervalElement) {\n this.hideIntervalElement = setInterval(() => {\n if (this.calculateTimeDiff(this.lastDragElement) < 100) {\n return;\n }\n this.removeClass(this.hoverClass);\n clearInterval(this.hideIntervalElement);\n this.hideIntervalElement = null;\n }, 100);\n }\n return false;\n }\n /**\n * @hidden\n */\n onElementDragOverListener() {\n this.lastDragElement = new Date();\n return false;\n }\n calculateTimeDiff(prevEvent) {\n return new Date().getTime() - prevEvent.getTime();\n }\n addClass(className) {\n this.renderer.addClass(this.element.nativeElement, className);\n }\n removeClass(className) {\n this.renderer.removeClass(this.element.nativeElement, className);\n }\n}\nDropZoneBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneBase, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: 'hoverClass' }], target: i0.ɵɵFactoryTarget.Directive });\nDropZoneBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: DropZoneBase, host: { listeners: { \"dragenter\": \"onElementDragEnterListener()\", \"dragover\": \"onElementDragOverListener()\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Inject,\n args: ['hoverClass']\n }] }]; }, propDecorators: { onElementDragEnterListener: [{\n type: HostListener,\n args: ['dragenter']\n }], onElementDragOverListener: [{\n type: HostListener,\n args: ['dragover']\n }] } });\n\n/**\n * @hidden\n */\nclass DropZoneInternalDirective extends DropZoneBase {\n constructor(element, renderer, ngZone, uploadService) {\n super(element, renderer, 'k-hover');\n this.ngZone = ngZone;\n this.uploadService = uploadService;\n this.initialClassName = true;\n this.hideIntervalDocument = null;\n this.activeClass = 'k-dropzone-active';\n this.ngZone.runOutsideAngular(() => {\n this.unsubscribeDocumentDragEnter = this.renderer.listen('document', 'dragenter', () => this.onDocumentDragEnter());\n this.unsubscribeDocumentDragOver = this.renderer.listen('document', 'dragover', () => this.onDocumentDragOver());\n });\n }\n ngOnDestroy() {\n this.ngZone.runOutsideAngular(() => {\n if (this.unsubscribeDocumentDragEnter) {\n this.unsubscribeDocumentDragEnter();\n }\n if (this.unsubscribeDocumentDragOver) {\n this.unsubscribeDocumentDragOver();\n }\n });\n }\n onDocumentDragEnter() {\n this.addClass(this.activeClass);\n this.lastDragDocument = new Date();\n if (!this.hideIntervalDocument) {\n this.hideIntervalDocument = setInterval(() => {\n if (this.calculateTimeDiff(this.lastDragDocument) < 100) {\n return;\n }\n this.removeClass(this.activeClass);\n clearInterval(this.hideIntervalDocument);\n this.hideIntervalDocument = null;\n }, 100);\n }\n return false;\n }\n /**\n * @hidden\n */\n onDocumentDragOver() {\n this.lastDragDocument = new Date();\n return false;\n }\n onDropListener(event) {\n const droppedFiles = event.dataTransfer.files;\n if (droppedFiles.length > 0 && !this.disabled) {\n let files = getAllFileInfo(droppedFiles);\n files = assignGuidToFiles(files, !this.uploadService.async.batch);\n if (!this.multiple) {\n files.splice(1, files.length - 1);\n this.uploadService.clearFiles();\n }\n validateFiles(files, this.restrictions);\n this.uploadService.addFiles(files);\n }\n return false;\n }\n}\nDropZoneInternalDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneInternalDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: UploadService }], target: i0.ɵɵFactoryTarget.Directive });\nDropZoneInternalDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: DropZoneInternalDirective, isStandalone: true, selector: \"\\n [kendoUploadInternalDropZone],\\n [kendoFileSelectInternalDropZone]\\n \", inputs: { disabled: \"disabled\", multiple: \"multiple\", restrictions: \"restrictions\" }, host: { listeners: { \"drop\": \"onDropListener($event)\" }, properties: { \"class.k-dropzone\": \"this.initialClassName\", \"class.k-upload-dropzone\": \"this.initialClassName\" } }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: DropZoneInternalDirective, decorators: [{\n type: Directive,\n args: [{\n selector: `\n [kendoUploadInternalDropZone],\n [kendoFileSelectInternalDropZone]\n `,\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: UploadService }]; }, propDecorators: { disabled: [{\n type: Input\n }], multiple: [{\n type: Input\n }], restrictions: [{\n type: Input\n }], initialClassName: [{\n type: HostBinding,\n args: ['class.k-dropzone']\n }, {\n type: HostBinding,\n args: ['class.k-upload-dropzone']\n }], onDropListener: [{\n type: HostListener,\n args: ['drop', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: Messages, inputs: { cancel: \"cancel\", clearSelectedFiles: \"clearSelectedFiles\", dropFilesHere: \"dropFilesHere\", externalDropFilesHere: \"externalDropFilesHere\", filesBatchStatus: \"filesBatchStatus\", filesBatchStatusFailed: \"filesBatchStatusFailed\", filesBatchStatusUploaded: \"filesBatchStatusUploaded\", fileStatusFailed: \"fileStatusFailed\", fileStatusUploaded: \"fileStatusUploaded\", headerStatusPaused: \"headerStatusPaused\", headerStatusUploaded: \"headerStatusUploaded\", headerStatusUploading: \"headerStatusUploading\", invalidFileExtension: \"invalidFileExtension\", invalidMaxFileSize: \"invalidMaxFileSize\", invalidMinFileSize: \"invalidMinFileSize\", pause: \"pause\", remove: \"remove\", resume: \"resume\", retry: \"retry\", select: \"select\", uploadSelectedFiles: \"uploadSelectedFiles\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: Messages, decorators: [{\n type: Directive\n }], propDecorators: { cancel: [{\n type: Input\n }], clearSelectedFiles: [{\n type: Input\n }], dropFilesHere: [{\n type: Input\n }], externalDropFilesHere: [{\n type: Input\n }], filesBatchStatus: [{\n type: Input\n }], filesBatchStatusFailed: [{\n type: Input\n }], filesBatchStatusUploaded: [{\n type: Input\n }], fileStatusFailed: [{\n type: Input\n }], fileStatusUploaded: [{\n type: Input\n }], headerStatusPaused: [{\n type: Input\n }], headerStatusUploaded: [{\n type: Input\n }], headerStatusUploading: [{\n type: Input\n }], invalidFileExtension: [{\n type: Input\n }], invalidMaxFileSize: [{\n type: Input\n }], invalidMinFileSize: [{\n type: Input\n }], pause: [{\n type: Input\n }], remove: [{\n type: Input\n }], resume: [{\n type: Input\n }], retry: [{\n type: Input\n }], select: [{\n type: Input\n }], uploadSelectedFiles: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: LocalizedMessagesDirective, isStandalone: true, selector: \"\\n [kendoUploadLocalizedMessages],\\n [kendoFileSelectLocalizedMessages],\\n [kendoUploadDropZoneLocalizedMessages]\\n \", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoUploadLocalizedMessages],\n [kendoFileSelectLocalizedMessages],\n [kendoUploadDropZoneLocalizedMessages]\n `,\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * @hidden\n */\nconst UPLOAD_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UploadComponent)\n};\nlet idx$1 = 0;\n/**\n * Represents the [Kendo UI Upload component for Angular]({% slug overview_upload %}).\n */\nclass UploadComponent extends UploadFileSelectBase {\n constructor(uploadService, localization, navigation, dropZoneService, zone, renderer, cdr, wrapper, injector) {\n super(uploadService, navigation, cdr, injector, zone);\n this.uploadService = uploadService;\n this.localization = localization;\n this.navigation = navigation;\n this.dropZoneService = dropZoneService;\n this.zone = zone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.injector = injector;\n /**\n * Enables the chunk functionality of the Upload.\n *\n * @default false\n */\n this.chunkable = false;\n /**\n * Toggles the visibility of the file list.\n * @default true\n */\n this.showFileList = true;\n /**\n * Specifies the possible layout of the action buttons.\n */\n this.actionsLayout = 'end';\n /**\n * Fires when the upload is canceled while in progress.\n */\n this.cancel = new EventEmitter();\n /**\n * Fires when the file list is about to be cleared. If prevented, the files will not be cleared.\n */\n this.clear = new EventEmitter();\n /**\n * Fires when all active uploads are completed either successfully or with errors.\n */\n this.complete = new EventEmitter();\n /**\n * Fires when an `upload` or `remove` operation has failed.\n */\n this.error = new EventEmitter();\n /**\n * Fires when the upload of a file has been paused.\n */\n this.pause = new EventEmitter();\n /**\n * Fires when the upload of a file has been resumed.\n */\n this.resume = new EventEmitter();\n /**\n * Fires when an `upload` or `remove` operation is successfully completed.\n */\n this.success = new EventEmitter();\n /**\n * Fires when one or more files are about to be uploaded. If prevented, the files will neither be uploaded, nor added to the file list.\n */\n this.upload = new EventEmitter();\n /**\n * Fires when one or more files are being uploaded.\n */\n this.uploadProgress = new EventEmitter();\n /**\n * Fires when the value of the component has changed as a result of a successful `upload`, `remove` or `clear` operation.\n */\n this.valueChange = new EventEmitter();\n validatePackage(packageMetadata);\n this.fileList = this.uploadService.files;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.navigation.computeKeys();\n this.wrapper = wrapper.nativeElement;\n this.subscribeBlur();\n this.subscribeFocus();\n this.attachEventHandlers();\n }\n /**\n * By default, the selected files are immediately uploaded\n * ([see example]({% slug fileprocessing_upload %}#toc-automatic-upload-of-files)).\n * To change this behavior, set `autoUpload` to `false`.\n */\n set autoUpload(autoUpload) {\n this.uploadService.async.autoUpload = autoUpload;\n }\n get autoUpload() {\n return this.uploadService.async.autoUpload;\n }\n /**\n * When enabled, all files in the selection are uploaded in one request\n * ([see example]({% slug fileprocessing_upload %}#toc-upload-of-batches-of-files)).\n * Any files that are selected one after the other are uploaded in separate requests.\n */\n set batch(batch) {\n this.uploadService.async.batch = batch;\n }\n get batch() {\n return this.uploadService.async.batch;\n }\n /**\n * Configures whether credentials (cookies, headers) will be sent for cross-site requests\n * ([see example]({% slug credentials_upload %}#toc-attaching-credentials-to-requests)).\n * The default values is `true`. Setting `withCredentials` has no effect on same-site requests.\n * To add credentials to the request, use the `saveHeaders` or `removeHeaders` property,\n * or the [`upload`]({% slug api_upload_uploadevent %}) event.\n */\n set withCredentials(withCredentials) {\n this.uploadService.async.withCredentials = withCredentials;\n }\n get withCredentials() {\n return this.uploadService.async.withCredentials;\n }\n /**\n * Sets the [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) key which contains the files submitted to `saveUrl`.\n * The default value is `files`.\n */\n set saveField(saveField) {\n this.uploadService.async.saveField = saveField;\n }\n get saveField() {\n return this.uploadService.async.saveField;\n }\n /**\n * Configures the [`HttpHeaders`](https://angular.io/api/common/http/HttpHeaders)\n * that are attached to each upload request.\n */\n set saveHeaders(saveHeaders) {\n this.uploadService.async.saveHeaders = saveHeaders;\n }\n get saveHeaders() {\n return this.uploadService.async.saveHeaders;\n }\n /**\n * Sets the [`RequestMethod`](https://angular.io/api/http/RequestMethod) of the upload request.\n * The default value is `POST`.\n */\n set saveMethod(saveMethod) {\n this.uploadService.async.saveMethod = saveMethod;\n }\n get saveMethod() {\n return this.uploadService.async.saveMethod;\n }\n /**\n * Sets the URL of the endpoint for the upload request.\n * The request [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) key is named after the `saveField` property.\n * It contains the list of files to be uploaded.\n */\n set saveUrl(saveUrl) {\n this.uploadService.async.saveUrl = saveUrl;\n }\n get saveUrl() {\n return this.uploadService.async.saveUrl;\n }\n /**\n * Sets the expected [`response type`](https://angular.io/api/common/http/HttpRequest#responseType) of the server.\n * It is used to parse the response appropriately.\n * @default 'json'\n */\n set responseType(responseType) {\n this.uploadService.async.responseType = responseType;\n }\n get responseType() {\n return this.uploadService.async.responseType;\n }\n /**\n * Sets the [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) key\n * which contains the list of file names that are submitted to `removeUrl`.\n * The default value is `fileNames`.\n */\n set removeField(removeField) { this.uploadService.async.removeField = removeField; }\n get removeField() { return this.uploadService.async.removeField; }\n /**\n * Configures the [`HttpHeaders`](https://angular.io/api/common/http/HttpHeaders)\n * that are attached to each `remove` request.\n */\n set removeHeaders(removeHeaders) {\n this.uploadService.async.removeHeaders = removeHeaders;\n }\n get removeHeaders() {\n return this.uploadService.async.removeHeaders;\n }\n /**\n * Sets the [`RequestMethod`](https://angular.io/api/http/RequestMethod) of the `remove` request.\n * The default value is `POST`.\n */\n set removeMethod(removeMethod) {\n this.uploadService.async.removeMethod = removeMethod;\n }\n get removeMethod() {\n return this.uploadService.async.removeMethod;\n }\n /**\n * Sets the URL of the endpoint for the `remove` request.\n * The [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) request key is named after the `removeField` property.\n * It contains the list of file names which will be removed.\n */\n set removeUrl(removeUrl) {\n this.uploadService.async.removeUrl = removeUrl;\n }\n get removeUrl() {\n return this.uploadService.async.removeUrl;\n }\n /**\n * Specifies if the selected files are uploaded simultaneously or one by one.\n *\n * @default true\n */\n set concurrent(concurrent) {\n this.uploadService.async.concurrent = concurrent;\n }\n get concurrent() {\n return this.uploadService.async.concurrent;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get dir() {\n return this.direction;\n }\n ngOnInit() {\n this.verifySettings();\n const { buttonId, fileListId } = this.getIds();\n this.focusableId = buttonId;\n this.fileListId = fileListId;\n this.uploadService.setChunkSettings(this.chunkable);\n if (this.zoneId) {\n this.dropZoneService.addComponent(this, this.zoneId);\n }\n this.zone.runOutsideAngular(() => {\n this.subs.add(this.renderer.listen(this.wrapper, 'keydown', event => this.handleKeydown(event)));\n });\n }\n ngOnChanges(changes) {\n if (isChanged(\"chunkable\", changes)) {\n const newChunkable = changes.chunkable.currentValue;\n if (typeof newChunkable === 'boolean') {\n this.uploadService.async.chunk = newChunkable;\n }\n if (typeof newChunkable === \"object\" && newChunkable !== null) {\n this.uploadService.async.chunk = true;\n this.uploadService.chunk = Object.assign({}, this.uploadService.chunk, newChunkable);\n }\n }\n }\n ngOnDestroy() {\n this.fileList.clear();\n if (this.zoneId) {\n this.dropZoneService.clearComponent(this, this.zoneId);\n }\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n }\n if (this.wrapperFocusSubscription) {\n this.wrapperFocusSubscription.unsubscribe();\n }\n if (this.selectButtonFocusSubscription) {\n this.selectButtonFocusSubscription.unsubscribe();\n }\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n writeValue(newValue) {\n super.writeValue(newValue, validateInitialFileInfo, 'addInitialFiles');\n }\n /**\n * @hidden\n */\n get showActionButtons() {\n let areVisible = false;\n if (!this.autoUpload) {\n const hasFilesToUpload = this.fileList.filesToUpload.length > 0;\n const uploadingFiles = this.fileList.hasFileWithState([FileState.Uploading]);\n if (this.concurrent && hasFilesToUpload) {\n areVisible = true;\n }\n if (!this.concurrent && hasFilesToUpload && !uploadingFiles) {\n areVisible = true;\n }\n }\n this.navigation.actionButtonsVisible = areVisible;\n return areVisible;\n }\n /**\n * @hidden\n */\n get showTotalStatus() {\n const states = [\n FileState.Uploaded,\n FileState.Uploading,\n FileState.Failed,\n FileState.Paused\n ];\n if (this.fileList.hasFileWithState(states)) {\n return true;\n }\n return false;\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n getIds() {\n const id = ++idx$1;\n const buttonId = `k-upload-button-${id}`;\n const fileListId = `k-upload-file-list-${id}`;\n return { buttonId, fileListId };\n }\n /**\n * Pauses the upload process of a file that is currently uploading.\n * The `pauseFileByUid` method requires the `chunkable` option of the Upload to be enabled.\n *\n * @param uid - The `uid` of the file that will be paused.\n */\n pauseFileByUid(uid) {\n this.uploadService.pauseFile(uid);\n }\n /**\n * Resumes the upload process for a file that has been previously paused.\n * The `resumeFileByUid` method requires the `chunkable` option of the Upload to be enabled.\n *\n * @param uid - The `uid` of the file that will be resumed.\n */\n resumeFileByUid(uid) {\n this.uploadService.resumeFile(uid);\n }\n /**\n * Triggers the removal of a file or a batch of files.\n * @param uid - The `uid` of the file or a batch of files that will be removed.\n */\n removeFilesByUid(uid) {\n this.uploadService.removeFiles(uid);\n }\n /**\n * Triggers another upload attempt of an unsuccessfully uploaded file or a batch of files.\n * @param uid - The `uid` of the file or a batch of files to be retried.\n */\n retryUploadByUid(uid) {\n this.uploadService.retryFiles(uid);\n }\n /**\n * Cancels the upload of a file or a batch of files.\n * @param uid - The `uid` of the file or a batch of files that will be canceled.\n */\n cancelUploadByUid(uid) {\n this.uploadService.cancelFiles(uid);\n }\n /**\n * Uploads the currently selected files which pass the set restrictions.\n */\n uploadFiles() {\n if (this.fileList.filesToUpload.length) {\n this.uploadService.uploadFiles();\n }\n }\n /**\n * Visually clears all files from the UI without issuing requests to the remove handler.\n */\n clearFiles() {\n this.uploadService.clearFiles();\n }\n /**\n * @hidden\n * Used by the external dropzone to add files to the Upload\n */\n addFiles(files) {\n this.uploadService.addFiles(files);\n }\n /**\n * @hidden\n * Used to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n verifySettings() {\n if (isDevMode()) {\n if (this.batch && this.chunkable !== false) {\n throw new Error('The file chunking functionality requires the batch setting to be disabled.');\n }\n }\n }\n subscribeBlur() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.zone.runOutsideAngular(() => {\n this.documentClick = fromEvent(document, 'click').pipe(filter((event) => {\n return !(this.wrapper !== event.target && this.wrapper.contains(event.target));\n }));\n this.blurSubscription = merge(this.documentClick, this.navigation.onTabOut).subscribe(() => {\n if (this.navigation.focused) {\n this.zone.run(() => {\n this.navigation.focused = false;\n this.onTouchedCallback();\n this.onBlur.emit();\n });\n }\n });\n });\n }\n handleKeydown(event) {\n if (this.disabled) {\n return;\n }\n if (event.target === this.fileSelectButton.nativeElement && (event.keyCode === Keys.Enter || event.keyCode === Keys.Space)) {\n event.preventDefault();\n this.fileSelectInput.nativeElement.click();\n return;\n }\n if (hasClasses(event.target, UPLOAD_CLASSES) ||\n (!isFocusable(event.target) && !hasClasses(event.target, IGNORE_TARGET_CLASSES))) {\n this.navigation.process(event);\n }\n }\n subscribeFocus() {\n this.wrapperFocusSubscription = this.navigation.onWrapperFocus.subscribe(() => {\n this.onFocus.emit();\n });\n this.selectButtonFocusSubscription = this.navigation.onSelectButtonFocus.subscribe(() => {\n this.fileSelectButton.nativeElement.focus();\n });\n }\n attachEventHandlers() {\n this.subs = this.uploadService.cancelEvent.subscribe((args) => {\n this.cancel.emit(args);\n });\n this.subs.add(this.uploadService.changeEvent.subscribe((files) => {\n this.onChangeCallback(files);\n this.valueChange.emit(files);\n }));\n this.subs.add(this.uploadService.clearEvent.subscribe((args) => {\n this.clear.emit(args);\n }));\n this.subs.add(this.uploadService.completeEvent.subscribe(() => {\n this.complete.emit();\n }));\n this.subs.add(this.uploadService.errorEvent.subscribe((args) => {\n this.error.emit(args);\n }));\n this.subs.add(this.uploadService.pauseEvent.subscribe((args) => {\n this.pause.emit(args);\n }));\n this.subs.add(this.uploadService.removeEvent.subscribe((args) => {\n this.remove.emit(args);\n }));\n this.subs.add(this.uploadService.resumeEvent.subscribe((args) => {\n this.resume.emit(args);\n }));\n this.subs.add(this.uploadService.selectEvent.subscribe((args) => {\n this.select.emit(args);\n }));\n this.subs.add(this.uploadService.successEvent.subscribe((args) => {\n this.success.emit(args);\n }));\n this.subs.add(this.uploadService.uploadEvent.subscribe((args) => {\n this.upload.emit(args);\n }));\n this.subs.add(this.uploadService.uploadProgressEvent.subscribe((args) => {\n this.uploadProgress.emit(args);\n }));\n }\n}\nUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadComponent, deps: [{ token: UploadService }, { token: i1$1.LocalizationService }, { token: NavigationService }, { token: DropZoneService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });\nUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadComponent, isStandalone: true, selector: \"kendo-upload\", inputs: { autoUpload: \"autoUpload\", batch: \"batch\", withCredentials: \"withCredentials\", saveField: \"saveField\", saveHeaders: \"saveHeaders\", saveMethod: \"saveMethod\", saveUrl: \"saveUrl\", responseType: \"responseType\", removeField: \"removeField\", removeHeaders: \"removeHeaders\", removeMethod: \"removeMethod\", removeUrl: \"removeUrl\", chunkable: \"chunkable\", concurrent: \"concurrent\", showFileList: \"showFileList\", tabIndex: \"tabIndex\", actionsLayout: \"actionsLayout\" }, outputs: { cancel: \"cancel\", clear: \"clear\", complete: \"complete\", error: \"error\", pause: \"pause\", resume: \"resume\", success: \"success\", upload: \"upload\", uploadProgress: \"uploadProgress\", valueChange: \"valueChange\" }, host: { properties: { \"attr.dir\": \"this.dir\" } }, providers: [\n LocalizationService,\n NavigationService,\n UploadService,\n DropZoneService,\n UPLOAD_VALUE_ACCESSOR,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.upload'\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => UploadComponent)\n }\n ], viewQueries: [{ propertyName: \"fileSelectInput\", first: true, predicate: [\"fileSelectInput\"], descendants: true, static: true }], exportAs: [\"kendoUpload\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n
    \n \n \n
    \n \n \n
    {{textFor('dropFilesHere')}}
    \n
    \n
      \n
    \n \n \n `, isInline: true, dependencies: [{ kind: \"directive\", type: LocalizedMessagesDirective, selector: \"\\n [kendoUploadLocalizedMessages],\\n [kendoFileSelectLocalizedMessages],\\n [kendoUploadDropZoneLocalizedMessages]\\n \" }, { kind: \"directive\", type: DropZoneInternalDirective, selector: \"\\n [kendoUploadInternalDropZone],\\n [kendoFileSelectInternalDropZone]\\n \", inputs: [\"disabled\", \"multiple\", \"restrictions\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kendoButton], span[kendoButton], kendo-button\", inputs: [\"arrowIcon\", \"toggleable\", \"togglable\", \"selected\", \"tabIndex\", \"imageUrl\", \"iconClass\", \"icon\", \"disabled\", \"size\", \"rounded\", \"fillMode\", \"themeColor\", \"svgIcon\", \"role\", \"primary\", \"look\"], outputs: [\"selectedChange\", \"click\"], exportAs: [\"kendoButton\"] }, { kind: \"directive\", type: FileSelectDirective, selector: \"[kendoFileSelect]\", inputs: [\"dir\", \"disabled\", \"multiple\", \"restrictions\", \"accept\", \"required\"] }, { kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: UploadStatusTotalComponent, selector: \"kendo-upload-status-total\", inputs: [\"fileList\"] }, { kind: \"component\", type: FileListComponent, selector: \"[kendo-upload-file-list]\", inputs: [\"disabled\", \"fileList\", \"fileTemplate\", \"fileInfoTemplate\"] }, { kind: \"component\", type: UploadActionButtonsComponent, selector: \"kendo-upload-action-buttons\", inputs: [\"disabled\", \"actionsLayout\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoUpload',\n providers: [\n LocalizationService,\n NavigationService,\n UploadService,\n DropZoneService,\n UPLOAD_VALUE_ACCESSOR,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.upload'\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => UploadComponent)\n }\n ],\n selector: 'kendo-upload',\n template: `\n \n \n
    \n
    \n \n \n
    \n \n \n
    {{textFor('dropFilesHere')}}
    \n
    \n
      \n
    \n \n \n `,\n standalone: true,\n imports: [LocalizedMessagesDirective, DropZoneInternalDirective, ButtonComponent, FileSelectDirective, NgIf, UploadStatusTotalComponent, FileListComponent, UploadActionButtonsComponent]\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: i1$1.LocalizationService }, { type: NavigationService }, { type: DropZoneService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { autoUpload: [{\n type: Input\n }], batch: [{\n type: Input\n }], withCredentials: [{\n type: Input\n }], saveField: [{\n type: Input\n }], saveHeaders: [{\n type: Input\n }], saveMethod: [{\n type: Input\n }], saveUrl: [{\n type: Input\n }], responseType: [{\n type: Input\n }], removeField: [{\n type: Input\n }], removeHeaders: [{\n type: Input\n }], removeMethod: [{\n type: Input\n }], removeUrl: [{\n type: Input\n }], chunkable: [{\n type: Input\n }], concurrent: [{\n type: Input\n }], showFileList: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: ['tabIndex']\n }], actionsLayout: [{\n type: Input\n }], fileSelectInput: [{\n type: ViewChild,\n args: ['fileSelectInput', { static: true }]\n }], cancel: [{\n type: Output\n }], clear: [{\n type: Output\n }], complete: [{\n type: Output\n }], error: [{\n type: Output\n }], pause: [{\n type: Output\n }], resume: [{\n type: Output\n }], success: [{\n type: Output\n }], upload: [{\n type: Output\n }], uploadProgress: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\nclass UploadDropZoneDirective {\n constructor(dropZoneService) {\n this.dropZoneService = dropZoneService;\n }\n /**\n * @hidden\n */\n onElementDragEnter() {\n return false;\n }\n /**\n * @hidden\n */\n onElementDragOver() {\n return false;\n }\n /**\n * @hidden\n */\n onDropListener(event) {\n const components = this.componentInstance;\n if (!isPresent(components)) {\n return;\n }\n components.forEach((component) => {\n const droppedFiles = event.dataTransfer.files;\n if (droppedFiles.length > 0 && !component.disabled) {\n let files = getAllFileInfo(droppedFiles);\n if (component instanceof UploadComponent) {\n files = assignGuidToFiles(files, !component.batch);\n }\n else {\n files = assignGuidToFiles(files, true);\n }\n if (!component.multiple) {\n files.splice(1, files.length - 1);\n component.clearFiles();\n }\n validateFiles(files, component.restrictions);\n component.addFiles(files);\n }\n });\n return false;\n }\n /**\n * @hidden\n */\n get componentInstance() {\n const id = this.zoneId || this.fileSelectZoneId;\n return this.dropZoneService.getComponents(id);\n }\n}\nUploadDropZoneDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadDropZoneDirective, deps: [{ token: DropZoneService }], target: i0.ɵɵFactoryTarget.Directive });\nUploadDropZoneDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadDropZoneDirective, isStandalone: true, selector: \"[kendoUploadDropZone], [kendoFileSelectDropZone]\", inputs: { zoneId: [\"kendoUploadDropZone\", \"zoneId\"], fileSelectZoneId: [\"kendoFileSelectDropZone\", \"fileSelectZoneId\"] }, host: { listeners: { \"dragenter\": \"onElementDragEnter()\", \"dragover\": \"onElementDragOver()\", \"drop\": \"onDropListener($event)\" } }, providers: [\n DropZoneService\n ], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadDropZoneDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n DropZoneService\n ],\n selector: '[kendoUploadDropZone], [kendoFileSelectDropZone]',\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: DropZoneService }]; }, propDecorators: { zoneId: [{\n type: Input,\n args: ['kendoUploadDropZone']\n }], fileSelectZoneId: [{\n type: Input,\n args: ['kendoFileSelectDropZone']\n }], onElementDragEnter: [{\n type: HostListener,\n args: ['dragenter']\n }], onElementDragOver: [{\n type: HostListener,\n args: ['dragover']\n }], onDropListener: [{\n type: HostListener,\n args: ['drop', ['$event']]\n }] } });\n\n/**\n * Represents the [Kendo UI UploadDropZone component for Angular]({% slug overview_upload %}).\n */\nclass UploadDropZoneComponent extends DropZoneBase {\n constructor(element, renderer, localization) {\n super(element, renderer, 'k-external-dropzone-hover');\n this.localization = localization;\n this.hostClass = true;\n this._svgIcon = uploadIcon;\n this.localizationChangeSubscription = this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get dirAttribute() {\n return this.direction;\n }\n /**\n * Defines an SVGIcon to be rendered inside the DropZone.\n * The input can take either an [existing Kendo SVG icon](slug:svgicon_list) or a custom one.\n */\n set svgIcon(icon) {\n if (isDevMode() && icon && this.icon && this.iconClass) {\n throw new Error('Setting both icon/svgIcon and iconClass options at the same time is not supported.');\n }\n this._svgIcon = icon;\n }\n get svgIcon() {\n return this._svgIcon;\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n if (this.icon) {\n return `${this.icon}`;\n }\n if (!this.icon && !this.iconClass) {\n return 'upload';\n }\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n}\nUploadDropZoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadDropZoneComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nUploadDropZoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: UploadDropZoneComponent, isStandalone: true, selector: \"kendo-uploaddropzone\", inputs: { zoneId: \"zoneId\", icon: \"icon\", iconClass: \"iconClass\", svgIcon: \"svgIcon\" }, host: { properties: { \"class.k-external-dropzone\": \"this.hostClass\", \"attr.dir\": \"this.dirAttribute\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.uploaddropzone'\n }\n ], exportAs: [\"kendoUploadDropZone\"], usesInheritance: true, ngImport: i0, template: `\n \n \n
    \n \n {{ textFor('externalDropFilesHere') }}\n \n \n \n
    \n `, isInline: true, dependencies: [{ kind: \"directive\", type: LocalizedMessagesDirective, selector: \"\\n [kendoUploadLocalizedMessages],\\n [kendoFileSelectLocalizedMessages],\\n [kendoUploadDropZoneLocalizedMessages]\\n \" }, { kind: \"directive\", type: UploadDropZoneDirective, selector: \"[kendoUploadDropZone], [kendoFileSelectDropZone]\", inputs: [\"kendoUploadDropZone\", \"kendoFileSelectDropZone\"] }, { kind: \"component\", type: IconWrapperComponent, selector: \"kendo-icon-wrapper\", inputs: [\"name\", \"svgIcon\", \"innerCssClass\", \"customFontClass\", \"size\"], exportAs: [\"kendoIconWrapper\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadDropZoneComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoUploadDropZone',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.uploaddropzone'\n }\n ],\n selector: 'kendo-uploaddropzone',\n template: `\n \n \n
    \n \n {{ textFor('externalDropFilesHere') }}\n \n \n \n
    \n `,\n standalone: true,\n imports: [LocalizedMessagesDirective, UploadDropZoneDirective, IconWrapperComponent]\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1$1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-external-dropzone']\n }], dirAttribute: [{\n type: HostBinding,\n args: ['attr.dir']\n }], zoneId: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], svgIcon: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nconst FILESELECT_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileSelectComponent)\n};\nlet idx = 0;\nclass FileSelectComponent extends UploadFileSelectBase {\n constructor(uploadService, localization, navigation, dropZoneService, ngZone, renderer, cdr, wrapper, injector) {\n super(uploadService, navigation, cdr, injector, ngZone);\n this.uploadService = uploadService;\n this.localization = localization;\n this.navigation = navigation;\n this.dropZoneService = dropZoneService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.injector = injector;\n /**\n * Fires when the value of the component has changed as a result of a successful `select` or `remove` operation.\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this._restrictions = {\n allowedExtensions: [],\n maxFileSize: 0,\n minFileSize: 0\n };\n validatePackage(packageMetadata);\n this.wrapper = wrapper.nativeElement;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.navigation.computeKeys();\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.subscribeBlur();\n this.subscribeFocus();\n this.attachEventHandlers();\n this.setDefaultSettings();\n }\n get dir() {\n return this.direction;\n }\n /**\n * Sets the `name` attribute of the `input` element of the FileSelect.\n */\n set name(name) {\n this.uploadService.async.saveField = name;\n }\n get name() {\n return this.uploadService.async.saveField;\n }\n ngOnInit() {\n const { buttonId, fileListId } = this.getIds();\n this.focusableId = buttonId;\n this.fileListId = fileListId;\n if (this.zoneId) {\n this.dropZoneService.addComponent(this, this.zoneId);\n }\n this.subs.add(this.renderer.listen(this.fileSelectInput.nativeElement, 'mouseenter', () => {\n this.renderer.addClass(this.fileSelectButton.nativeElement, 'k-hover');\n }));\n this.subs.add(this.renderer.listen(this.fileSelectInput.nativeElement, 'mouseleave', () => {\n this.renderer.removeClass(this.fileSelectButton.nativeElement, 'k-hover');\n }));\n this.ngZone.runOutsideAngular(() => {\n this.subs.add(this.renderer.listen(this.wrapper, 'keydown', event => this.handleKeydown(event)));\n });\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n ngOnDestroy() {\n this.fileList.clear();\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n }\n if (this.wrapperFocusSubscription) {\n this.wrapperFocusSubscription.unsubscribe();\n }\n if (this.selectButtonFocusSubscription) {\n this.selectButtonFocusSubscription.unsubscribe();\n }\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n /**\n * Removes specific file from the file list.\n */\n removeFileByUid(uid) {\n this.uploadService.removeFiles(uid);\n }\n /**\n * Visually clears all files from the UI.\n */\n clearFiles() {\n this.uploadService.clearFiles();\n }\n /**\n * @hidden\n * Used to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n /**\n * @hidden\n * Used by the external dropzone to add files to the FileSelect\n */\n addFiles(files) {\n this.uploadService.addFiles(files);\n }\n /**\n * @hidden\n */\n get selectButtonTabIndex() {\n return this.disabled ? undefined : this.tabindex;\n }\n /**\n * @hidden\n */\n getIds() {\n const id = ++idx;\n const buttonId = `k-fileselect-button-${id}`;\n const fileListId = `k-fileselect-file-list-${id}`;\n return { buttonId, fileListId };\n }\n /**\n * @hidden\n */\n writeValue(newValue) {\n super.writeValue(newValue, validateInitialFileSelectFile, 'addInitialFileSelectFiles');\n }\n subscribeBlur() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.documentClick = fromEvent(document, 'click').pipe(filter((event) => {\n return !(this.wrapper !== event.target && this.wrapper.contains(event.target));\n }));\n this.blurSubscription = merge(this.documentClick, this.navigation.onTabOut).subscribe(() => {\n if (this.navigation.focused) {\n this.ngZone.run(() => {\n this.navigation.focused = false;\n this.onTouchedCallback();\n this.onBlur.emit();\n });\n }\n });\n });\n }\n subscribeFocus() {\n this.wrapperFocusSubscription = this.navigation.onWrapperFocus.subscribe(() => {\n this.onFocus.emit();\n });\n this.selectButtonFocusSubscription = this.navigation.onSelectButtonFocus.subscribe(() => {\n this.fileSelectButton.nativeElement.focus();\n });\n }\n handleKeydown(event) {\n if (this.disabled) {\n return;\n }\n if (event.target === this.fileSelectButton.nativeElement && (event.keyCode === Keys.Enter || event.keyCode === Keys.Space)) {\n event.preventDefault();\n this.fileSelectInput.nativeElement.click();\n return;\n }\n if (hasClasses(event.target, UPLOAD_CLASSES) ||\n (!isFocusable(event.target) && !hasClasses(event.target, IGNORE_TARGET_CLASSES))) {\n this.navigation.process(event, 'fileselect');\n }\n }\n attachEventHandlers() {\n this.subs = this.uploadService.changeEvent.subscribe((files) => {\n let model = [];\n if (files !== null) {\n files.forEach((file) => {\n if (file.state === FileState.Initial) {\n model.push(file);\n }\n if (file.state === FileState.Selected && file.rawFile && !file.validationErrors) {\n model.push(file.rawFile);\n }\n });\n }\n if (model.length === 0) {\n model = null;\n }\n this.onChangeCallback(model);\n this.valueChange.emit(model);\n });\n this.subs.add(this.uploadService.removeEvent.subscribe((args) => {\n this.remove.emit(args);\n }));\n this.subs.add(this.uploadService.selectEvent.subscribe((args) => {\n this.select.emit(args);\n }));\n }\n setDefaultSettings() {\n this.uploadService.async.autoUpload = false;\n this.uploadService.component = 'FileSelect';\n }\n}\nFileSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectComponent, deps: [{ token: UploadService }, { token: i1$1.LocalizationService }, { token: NavigationService }, { token: DropZoneService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });\nFileSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: FileSelectComponent, isStandalone: true, selector: \"kendo-fileselect\", inputs: { name: \"name\" }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"attr.dir\": \"this.dir\" } }, providers: [\n LocalizationService,\n NavigationService,\n UploadService,\n DropZoneService,\n FILESELECT_VALUE_ACCESSOR,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.fileselect'\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => FileSelectComponent)\n }\n ], viewQueries: [{ propertyName: \"fileSelectInput\", first: true, predicate: [\"fileSelectInput\"], descendants: true, static: true }], exportAs: [\"kendoFileSelect\"], usesInheritance: true, ngImport: i0, template: `\n \n \n
    \n
    \n \n \n
    \n
    {{textFor('dropFilesHere')}}
    \n
    \n
      \n
    \n `, isInline: true, dependencies: [{ kind: \"directive\", type: LocalizedMessagesDirective, selector: \"\\n [kendoUploadLocalizedMessages],\\n [kendoFileSelectLocalizedMessages],\\n [kendoUploadDropZoneLocalizedMessages]\\n \" }, { kind: \"directive\", type: DropZoneInternalDirective, selector: \"\\n [kendoUploadInternalDropZone],\\n [kendoFileSelectInternalDropZone]\\n \", inputs: [\"disabled\", \"multiple\", \"restrictions\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kendoButton], span[kendoButton], kendo-button\", inputs: [\"arrowIcon\", \"toggleable\", \"togglable\", \"selected\", \"tabIndex\", \"imageUrl\", \"iconClass\", \"icon\", \"disabled\", \"size\", \"rounded\", \"fillMode\", \"themeColor\", \"svgIcon\", \"role\", \"primary\", \"look\"], outputs: [\"selectedChange\", \"click\"], exportAs: [\"kendoButton\"] }, { kind: \"directive\", type: FileSelectDirective, selector: \"[kendoFileSelect]\", inputs: [\"dir\", \"disabled\", \"multiple\", \"restrictions\", \"accept\", \"required\"] }, { kind: \"directive\", type: NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FileListComponent, selector: \"[kendo-upload-file-list]\", inputs: [\"disabled\", \"fileList\", \"fileTemplate\", \"fileInfoTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoFileSelect',\n providers: [\n LocalizationService,\n NavigationService,\n UploadService,\n DropZoneService,\n FILESELECT_VALUE_ACCESSOR,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.fileselect'\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => FileSelectComponent)\n }\n ],\n selector: 'kendo-fileselect',\n template: `\n \n \n
    \n
    \n \n \n
    \n
    {{textFor('dropFilesHere')}}
    \n
    \n
      \n
    \n `,\n standalone: true,\n imports: [LocalizedMessagesDirective, DropZoneInternalDirective, ButtonComponent, FileSelectDirective, NgIf, FileListComponent]\n }]\n }], ctorParameters: function () { return [{ type: UploadService }, { type: i1$1.LocalizationService }, { type: NavigationService }, { type: DropZoneService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { fileSelectInput: [{\n type: ViewChild,\n args: ['fileSelectInput', { static: true }]\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], name: [{\n type: Input\n }], valueChange: [{\n type: Output\n }] } });\n\n/**\n * Custom component messages override default component messages ([more information and example]({% slug globalization_upload %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.2.10\", type: CustomMessagesComponent, isStandalone: true, selector: \"kendo-upload-messages, kendo-fileselect-messages, kendo-uploaddropzone-messages\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: CustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-upload-messages, kendo-fileselect-messages, kendo-uploaddropzone-messages',\n template: ``,\n standalone: true\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * Utility array that contains all `FileSelect` related components and directives\n */\nconst KENDO_FILESELECT = [\n FileSelectComponent,\n FileTemplateDirective,\n FileInfoTemplateDirective,\n CustomMessagesComponent,\n UploadDropZoneDirective,\n UploadDropZoneComponent\n];\n/**\n * Utility array that contains all `Upload` related components and directives\n */\nconst KENDO_UPLOAD = [\n UploadComponent,\n UploadActionButtonsComponent,\n UploadStatusTotalComponent,\n FileTemplateDirective,\n FileInfoTemplateDirective,\n CustomMessagesComponent,\n UploadDropZoneDirective,\n UploadDropZoneComponent\n];\n/**\n * Utility array that contains all `@progress/kendo-angular-upload` related components and directives\n */\nconst KENDO_UPLOADS = [\n ...KENDO_FILESELECT,\n ...KENDO_UPLOAD\n];\n\n// IMPORTANT: NgModule export kept for backwards compatibility\n/**\n * Represents the [NgModule](https://angular.io/api/core/NgModule) definition for the FileSelect component.\n */\nclass FileSelectModule {\n}\nFileSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nFileSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectModule, imports: [FileSelectComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent], exports: [FileSelectComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent] });\nFileSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectModule, providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ], imports: [FileSelectComponent, CustomMessagesComponent, UploadDropZoneComponent] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: FileSelectModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [...KENDO_FILESELECT],\n imports: [...KENDO_FILESELECT],\n providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ]\n }]\n }] });\n\n// IMPORTANT: NgModule export kept for backwards compatibility\n/**\n * Represents the [NgModule](https://angular.io/api/core/NgModule) definition for the Upload component.\n */\nclass UploadModule {\n}\nUploadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nUploadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadModule, imports: [UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent], exports: [UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent] });\nUploadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadModule, providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ], imports: [UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, CustomMessagesComponent, UploadDropZoneComponent] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [...KENDO_UPLOAD],\n imports: [...KENDO_UPLOAD],\n providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ]\n }]\n }] });\n\n// IMPORTANT: NgModule export kept for backwards compatibility\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])\n * definition for the Uploads components.\n *\n * @example\n *\n * ```ts-no-run\n * import { UploadsModule } from '@progress/kendo-angular-upload';\n *\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { NgModule } from '@angular/core';\n *\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule, UploadsModule],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass UploadsModule {\n}\nUploadsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nUploadsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadsModule, imports: [FileSelectComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent, UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent], exports: [FileSelectComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent, UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, FileTemplateDirective, FileInfoTemplateDirective, CustomMessagesComponent, UploadDropZoneDirective, UploadDropZoneComponent] });\nUploadsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadsModule, providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ], imports: [FileSelectComponent, CustomMessagesComponent, UploadDropZoneComponent, UploadComponent, UploadActionButtonsComponent, UploadStatusTotalComponent, CustomMessagesComponent, UploadDropZoneComponent] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.2.10\", ngImport: i0, type: UploadsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [...KENDO_UPLOADS],\n imports: [...KENDO_UPLOADS],\n providers: [\n IconsService,\n PopupService,\n ResizeBatchService\n ]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CancelEvent, ClearEvent, CustomMessagesComponent, DropZoneService, ErrorEvent, FileInfoTemplateDirective, FileListComponent, FileListItemActionButtonComponent, FileListItemBase, FileListMultipleItemsComponent, FileListSingleItemComponent, FileMap, FileSelectComponent, FileSelectDirective, FileSelectModule, FileState, FileTemplateDirective, KENDO_FILESELECT, KENDO_UPLOAD, KENDO_UPLOADS, NavigationService, PauseEvent, RemoveEvent, ResumeEvent, SelectEvent, SuccessEvent, UPLOAD_VALUE_ACCESSOR, UploadActionButtonsComponent, UploadComponent, UploadDropZoneComponent, UploadDropZoneDirective, UploadEvent, UploadModule, UploadProgressEvent, UploadService, UploadStatusTotalComponent, UploadsModule, validateFiles };\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ApplicationModule } from '../interfaces/application-module';\nimport { ApplicationModulePage } from '../interfaces/application-module-page';\nimport { DisplayOptionByPage } from '../interfaces/display-option-by-page';\nimport { FilterItem } from '../interfaces/filter-item';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FilterSetupService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5'; // TODO Get version number dynamically\n private _url = (this.serverUrl + '/api/v{version}/applicationmodule').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n\n getApplicationModules(): Observable {\n return this._http.get(`${this._url}/GetAllApplicationModules/`);\n }\n\n getApplicationModulePagesByApplicationModuleKey(\n applicationModuleKey: number\n ): Observable {\n const params = new HttpParams().set(\n 'applicationModuleKey',\n applicationModuleKey.toString()\n );\n\n return this._http.get(`${this._url}/GetApplicationModulePages/`, {\n params: params,\n });\n }\n\n // Is this using???\n getDisplayOptionsByApplicationModulePageKey(\n applicationModulePageKey: number\n ): Observable | any {\n const params = new HttpParams().set(\n 'applicationModulePageKey',\n applicationModulePageKey.toString()\n );\n\n return this._http.get(\n `https://${window.location.host}/api/v0.5/displayoption/GetByApplicationModulePageKey/`,\n { params: params }\n );\n }\n\n getDisplayOptionFilterItemsByDisplayOptionKey(\n displayOptionKey: number\n ): Observable {\n const params = new HttpParams().set('displayOptionKey', displayOptionKey.toString());\n\n return this._http.get(\n `https://${window.location.host}/api/v0.5/filteritem/GetByDisplayOptionKey/`,\n { params: params }\n );\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule, CurrencyPipe, DecimalPipe } from '@angular/common';\nimport { SettingsComponent } from './components/settings/settings.component';\nimport { SettingsRoutingModule } from './settings.routing.module';\nimport { KpiConfigComponent } from './components/kpi-config/kpi-config.component';\nimport { HierarchySetupComponent } from './components/hierarchy-setup/hierarchy-setup.component';\nimport { HierarchyTileComponent } from './components/hierarchy-setup/hierarchy-tile/hierarchy-tile.component';\nimport { TileConnectorComponent } from './components/hierarchy-setup/tile-connector/tile-connector.component';\nimport { SharedModule } from '../shared/shared.module';\nimport { ThirdPartyModule } from '../third-party/third-party.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { UserManagementComponent } from './components/user-management/user-management.component';\nimport { MilestonesEventsComponent } from './components/milestones-events/milestones-events.component';\n\n// Integration\nimport { IntegrationComponent } from './components/integration-setup/integration-setup.component';\nimport { FileUploadIntegrationComponent } from './components/integration-setup/file-upload-integration/file-upload-integration.component';\nimport { HolidayHoursComponent } from './components/integration-setup/holiday-hours/holiday-hours.component';\nimport { DeleteLoanComponent } from './components/integration-setup/delete-loan/delete-loan.component';\n\n// Profile\nimport { ProfileAccountDetailsComponent } from './components/profile/account-details/account-details.component';\nimport { ProfileNotificationsComponent } from './components/profile/notifications/notifications.component';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { CompanyAccountDetailsComponent } from './components/company-account-details/company-account-details.component';\nimport { ClientContactsService } from './services/client-contacts.service';\nimport { ClientEditScreenComponent } from './components/client-edit-screen/client-edit-screen.component';\nimport { PowerEmployeeDialogComponent } from './components/company-account-details/power-employee-dialog/power-employee-dialog.component';\n\n// LBA\nimport { ApplicationModuleService } from './services/application-module.service';\nimport { HierarchyConfigComponent } from './components/hierarchy-config/hierarchy-config.component';\nimport { DatePipe } from '@angular/common';\nimport { LbaSubscriptionsComponent } from './components/lba-subscriptions/lba-subscriptions.component';\nimport { ClientSubscriptionService } from './services/client-subscription.service';\nimport { ClientSubscriptionPageComponent } from './components/lba-shared/client-subscription-page/client-subscription-page.component';\nimport { EmployeeComponent } from './components/employee/employee.component';\nimport { RoleManagementComponent } from './components/role-management/role-management.component';\nimport { EmployeePositionService } from './services/employee-position.service';\nimport { PermissionSetManagementComponent } from './components/role-management/permission-set-management/permission-set-management.component';\nimport { UserPermissionsService } from './services/user-permissions.service';\nimport { PermissionSetPagesComponent } from './components/role-management/permission-set-pages/permission-set-pages.component';\nimport { BranchProjectionsConfigComponent } from './components/branch-projections-config/branch-projections-config.component';\nimport { LBASuperUserService } from './services/lba-super-user.service';\nimport { LbaUsersComponent } from './components/lba-users/lba-users.component';\nimport { LbaClientsComponent } from './components/lba-clients/lba-clients.component';\nimport { ClientProductMappingComponent } from './components/client-product-mapping/client-product-mapping.component';\nimport { LbaLoginActivityComponent } from './components/lba-login-activity/lba-login-activity.component';\nimport { IntlModule } from '@progress/kendo-angular-intl';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { KpiScorecardComponent } from './components/kpi-scorecard/kpi-scorecard.component';\nimport { UserExtendedAccessService } from './services/user-extended-access.service';\nimport { UserExtendedAccessMenuComponent } from './components/user-management/user-extended-access-menu/user-extended-access-menu.component';\nimport { DomainManagementComponent } from './components/domains/domain-management/domain-management.component';\nimport { ConfirmationAlertDialogComponent } from './components/confirmation-alert-dialog/confirmation-alert-dialog.component';\nimport { UploadModule } from '@progress/kendo-angular-upload';\nimport { CompanyNotificationsComponent } from './components/company-notifications/company-notifications.component';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { ScheduledReportsComponent } from './components/scheduled-reports/scheduled-reports.component';\nimport { LoanCharacteristicsMappingComponent } from './components/loan-characteristics-mapping/loan-characteristics-mapping.component';\nimport { ClientLookupService } from './services/client-lookup.service';\nimport { ClientEditContactsComponent } from './components/client-edit-screen/form-groups/client-edit-contacts/client-edit-contacts.component';\nimport { ClientEditDetailsComponent } from './components/client-edit-screen/form-groups/client-edit-details/client-edit-details.component';\nimport { ClientEditIdentitiesComponent } from './components/client-edit-screen/form-groups/client-edit-identities/client-edit-identities.component';\nimport { ClientEditIntegrationsComponent } from './components/client-edit-screen/form-groups/client-edit-integrations/client-edit-integrations.component';\nimport { GeneralLedgerMappingComponent } from './components/general-ledger-mapping/general-ledger-mapping.component';\nimport { ClientHealthComponent } from './components/client-health/client-health.component';\nimport { KPIConfigService } from 'app/modules/settings/services/kpi-config.service';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { KpiConfigOneComponent } from 'app/modules/settings/components/kpi-config/kpi-config-one/kpi-config-one.component';\nimport { KpiConfigThreeComponent } from './components/kpi-config/kpi-config-three/kpi-config-three.component';\nimport { KpiConfigFourComponent } from './components/kpi-config/kpi-config-four/kpi-config-four.component';\nimport { PermissionSetUsersComponent } from './components/role-management/permission-set-users/permission-set-users.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { SubscriptionsComponent } from './components/subscriptions/subscriptions.component';\nimport { UserSubscriptionsComponent } from './components/user-subscriptions/user-subscriptions.component';\nimport { ECloseRoiSettingsComponent } from './components/e-close-roi-settings/e-close-roi-settings.component';\nimport { DistributionAnalyzeDialogComponent } from './components/kpi-distribution-analyze-dialog/distribution-analyze-dialog.component';\nimport { KpiVersionDialogComponent } from './components/kpi-config/kpi-version-dialog/kpi-version-dialog.component';\nimport { InvoicedLoansComponent } from './components/invoiced-loans/invoiced-loans.component';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { ClientIntegrationService } from './services/client-integration.service';\nimport { ClientDomainService } from './services/client-domain.service';\nimport { ClientProductService } from './services/client-product.service';\nimport { CsvUploadService } from './services/csv-upload.service';\nimport { FilterSetupService } from './services/filter-setup.service';\nimport { GeneralLedgerService } from './services/general-ledger.service';\nimport { HierarchyService } from './services/hierarchy.service';\nimport { HolidayService } from './services/holiday.service';\nimport { IntegrationSourceService } from './services/integration-source.service';\nimport { KpiScorecardService } from './services/kpi-scorecard.service';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { EmployeeHoursComponent } from './components/employee-hours/employee-hours.component';\n\n@NgModule({\n declarations: [\n SettingsComponent,\n KpiConfigComponent,\n HierarchySetupComponent,\n ConfirmationAlertDialogComponent,\n HierarchyTileComponent,\n TileConnectorComponent,\n UserManagementComponent,\n ProfileAccountDetailsComponent,\n ProfileNotificationsComponent,\n ChangePasswordComponent,\n HierarchyConfigComponent,\n LbaSubscriptionsComponent,\n ClientSubscriptionPageComponent,\n EmployeeComponent,\n RoleManagementComponent,\n PermissionSetManagementComponent,\n PermissionSetPagesComponent,\n BranchProjectionsConfigComponent,\n IntegrationComponent,\n FileUploadIntegrationComponent,\n HolidayHoursComponent,\n DeleteLoanComponent,\n LbaUsersComponent,\n LbaClientsComponent,\n ClientProductMappingComponent,\n MilestonesEventsComponent,\n LbaLoginActivityComponent,\n CompanyAccountDetailsComponent,\n CompanyAccountDetailsComponent,\n ClientEditScreenComponent,\n KpiScorecardComponent,\n UserExtendedAccessMenuComponent,\n DomainManagementComponent,\n UserExtendedAccessMenuComponent,\n PowerEmployeeDialogComponent,\n CompanyNotificationsComponent,\n ScheduledReportsComponent,\n LoanCharacteristicsMappingComponent,\n ClientEditContactsComponent,\n ClientEditDetailsComponent,\n ClientEditIdentitiesComponent,\n ClientEditIntegrationsComponent,\n GeneralLedgerMappingComponent,\n ClientHealthComponent,\n KpiConfigOneComponent,\n KpiConfigThreeComponent,\n KpiConfigFourComponent,\n PermissionSetUsersComponent,\n SubscriptionsComponent,\n UserSubscriptionsComponent,\n ECloseRoiSettingsComponent,\n DistributionAnalyzeDialogComponent,\n KpiVersionDialogComponent,\n InvoicedLoansComponent,\n ],\n imports: [\n CommonModule,\n SettingsRoutingModule,\n SharedModule,\n ReactiveFormsModule,\n MatTabsModule,\n IntlModule,\n DateInputsModule,\n UploadModule,\n NgxMaskModule.forRoot(),\n MatProgressBarModule,\n MatTooltipModule,\n GridModule,\n ThirdPartyModule,\n GridModule,\n MatCardModule,\n MatIconModule,\n ],\n providers: [\n DatePipe,\n ApplicationModuleService,\n ClientIntegrationService,\n ClientDomainService,\n ClientProductService,\n CsvUploadService,\n FilterSetupService,\n GeneralLedgerService,\n HierarchyService,\n HolidayService,\n IntegrationSourceService,\n KPIConfigService,\n KpiScorecardService,\n LBASuperUserService,\n ClientSubscriptionService,\n EmployeePositionService,\n UserPermissionsService,\n ClientContactsService,\n CurrencyPipe,\n DecimalPipe,\n UserExtendedAccessService,\n ClientLookupService,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class SettingsModule {}\n"],"x_google_ignoreList":[6,143]}