{"version":3,"file":"929.32b34f9b3a46736c.js","mappings":"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","names":["i0","PerformanceComponent_div_9_ng_template_1_Template","cardId_r1","PerformanceComponent_div_12_ng_template_1_Template","cardId_r2","PerformanceComponent_div_14_ng_template_1_Template","cardId_r3","PerformanceComponent_div_15_ng_template_1_Template","cardId_r4","PerformanceComponent","constructor","cd","customDashboardsService","componentsOutletDirectiveService","this","pageTitle","hFilterJSON","dashboard","ngOnInit","extraParameters","title","value","pageHeadline","module","moduleIcon","linkArray","moduleLink","linkTitle","showLink","isHome","destroyCharts","detectChange","NoDataActionType","pageStart","smallCardIdArray","largeCardIdArray","updateComponent","detectViewChanges","loadContents","dashboardOutlet","onResize","event","reCreateExistingCharts","applyNewFilters","displayOptions","filter","applyDisplayOptions","ngOnDestroy","unsubscribeFilters","i1","i2","selectors","viewQuery","rf","ctx","CustomDashboardsOutletDirective","$event","PerformanceComponent_div_9_Template","PerformanceComponent_div_12_Template","PerformanceComponent_div_14_Template","PerformanceComponent_div_15_Template","slice","PerformanceTransitionComponent","decls","vars","consts","template","PerformanceGoalTrackingComponent","_r1","ctx_r1","selectedKPIProfile","onSelectionChangeProfile","onDeSelectProfile","kpiProfile","kpiProfileSettings","_r3","showNames","toggleDataLabels","entity_r5","_r4","$implicit","mouseEnter","mouseLeave","topBottomNameClickHandler","bottom10Top","i_r6","hierarchyAbrrName","hierarchyName","kpiValueFormatted","pctofTarget","PerformanceInsightsKPIComponent_div_20_table_2_ng_container_7_Template","bottomEntities","PerformanceInsightsKPIComponent_div_20_div_1_Template","PerformanceInsightsKPIComponent_div_20_table_2_Template","loading","length","noDataType","entity_r8","_r7","i_r9","PerformanceInsightsKPIComponent_div_27_table_2_tr_1_Template","PerformanceInsightsKPIComponent_div_27_table_2_ng_container_2_Template","topEntities","PerformanceInsightsKPIComponent_div_27_div_1_Template","PerformanceInsightsKPIComponent_div_27_table_2_Template","records","band_r11","_r10","zoomInOnBand","className","name","description","PerformanceInsightsKPIComponent_div_35_div_2_ng_container_6_Template","targetUnits","bandsForLegend","PerformanceInsightsKPIComponent_div_35_div_1_Template","PerformanceInsightsKPIComponent_div_35_div_2_Template","plotBandsLoading","noDataTypePlotBands","PerformanceInsightsKPIComponent","_KPIService","_router","reusableFunctions","currentUserStateService","impersonationService","decimalPipe","toast","positionService","shouldIgnoreNumberLOs","showingBandOnlyData","kpiListSettings","singleSelection","text","enableSearchFilter","showCheckbox","labelKey","primaryKey","enableFilterSelectAll","scroll","plotBandsList","action","searchTerm","componentTitle","inputSource","NoDataSourceType","chartCard","currentUser","clientShortName","isImpersonatingClient","limeGearCharts","LimeGearCharts","LimeGearChart","getHierarchyFilters","getCurrentDisplayOptions","url","largeCardOptions","hasData","isDataReady","showTitle","accessToUrl","uniqueId","minHeight","chart","setDisplayOptionsSelected","setToggleLabel","setDDls","setSelectedProfile","defaultProfile","find","pos","positionAbbv","parameters","roleName","getScorecardPositions","subscribe","res","getKpiList","setCommonNoDataParameters","error","Error","getKPIs","data","selectedKpi","noDataForCompany","KPIs","selectedKPI","kpi","kpiMatrixKey","getKPIData","err","fromDatePeriod","item","optionKey","selectedOptions","loanType","loanPurpose","channel","kpiMatrix","setChartData","seriesData","forEach","record","fullName","getFullName","abbreviateNameToLastPlustFirstInitial","split","pop","push","hierarchyIdentifier","properties","units","formatNumber","kpiValue","kpiPrecision","format","unitsLabel","kpiDisplayShort","titlePart","nbr","x","volume","y","formatPercentage","setTopAndBottomPerformers","clientKPIMatrixDescription","drawChart","Math","round","setChartDataForPerformanceBand","kpiBand","bandOnlyData","dataPoint","kpiBandKey","pctEnd","pctStart","isDataPointWithBandRange","viewingBandNumber","warning","setShowNames","setTimeout","Highcharts","createKPIScatterPlot","getUrlSegment","getBands","Object","assign","numberOfDataPoints","resetLargeCard","toString","getData","noDataForPlotBands","kpiFormat","target","bands","plotBandsHighChart","setPlotBands","handleNoData","message","info","undefined","setBandNames","setBandDescriptions","reverse","setBandClassNames","setPlotBandsList","applyPlotBands","band","yAxis","addPlotBand","isHigherBetter","plotBands","usePlotBands","color","from","pow","to","getBandName","getClassName","bandKey","determineIfHigherIsBetter","rangeStart","rangeEnd","totalLength","topChunkSize","bottomChunkSize","sortedData","sort","comparePercentOfTarget","formatTopBottom10","entity","formatKPIDesc","decimalPlaces","nameParts","charAt","formatRangePointDesc","places","formatRangeEndDesc","switchLabel","checked","employee","scatterPlot","employeeName","series","point","setState","tooltip","refresh","scoreCardUrlSegment","hide","onSelectionChangeKpi","kpiDescription","urlSegment","queryParams","id","level","navigate","onDeSelect","i3","i4","i5","i6","i7","i8","PerformanceInsightsKPIComponent_angular2_multiselect_6_Template","PerformanceInsightsKPIComponent_p_toggleswitch_14_Template","PerformanceInsightsKPIComponent_div_20_Template","PerformanceInsightsKPIComponent_div_21_Template","PerformanceInsightsKPIComponent_div_27_Template","PerformanceInsightsKPIComponent_div_28_Template","PerformanceInsightsKPIComponent_div_35_Template","PerformanceInsightsKPIComponent_div_36_Template","_c0","a","b","selectedPosition","positions","PerformanceInsightsKPISparklineComponent","_filterService","_reportService","paginatedData","currentPeriodData","spco","SparklineChartOptions","initiateTableProperties","columnInfoList","fieldId","fieldName","fieldOrder","isSortable","defaultSorting","headerAlignment","dataAlignment","dataType","width","filterable","backUpFieldId","isHyperlink","cellClickEventType","hyperlinkPproperties","hyperlinkUrlBase","hyperlinkUrlSegment","queryParamsInfList","isDynamicColumn","hideIf","chartProperties","chartToFieldId","chartDataField","inComponentChartBuilding","tooltipProperties","labelField","datatype","precision","isHierarchyEntity","customTableInfo","tableId","tableHeight","dataSet","bandColorList","dataHandleInUiSide","showSummary","getPosition","toLowerCase","staffingKey","getKPIScorecardSelection","asOfDateId","syncWithDisplayOptionId","syncAsOfDateInf","asOf","ymc","contentChanged","setColumnFormat","updateTableColumnProperties","chartParams","fullDataset","toGroupByColumnHeader","calculateChange","columnList","chartIdColumn","chartType","setCharts","hierarchyFieldInf","colInf","paramId","paramDataField","valueColumn","col","resetTableData","refreshCustomMatTable","getSparklineData","getFriendlyTenure","groupDataByColumn","cellClickedEvent","dataItem","cellData","columnInfo","param","onSelectionChange","PerformanceInsightsKPISparklineComponent_angular2_multiselect_5_Template","PerformanceKpiComponent","kpiService","negativeToParensPipe","currencyPipe","reportingService","commKendoTbleService","sortAscending","table","initiateTable","forkJoin","getCurrentKPIConfiguration","getKPIMasterList","config","list","kpiMasterList","kpiConfigList","doesKPIMasterKeyExistInConfig","sortKPIs","populatePerformanceBands","updateKPIGrid","kpiTableDataProperties","isDataLoaded","index","targetFormatted","getTarget","poor","getUnacceptableRange","fair","getBelowAverageRange","good","getAcceptableRange","veryGood","getAboveAverageRange","excellent","getExceptionalRange","weightedByLA","isWeightedByLA","searchHandler","kpiTableColumnProperties","columnProperties","gridData","initialPageSize","initialSkip","maxHeight","recordSelection","kendoGridSelectById","class","pageable","useLGScroll","allowSearch","columnBackgroundColor","headerBackgroundColor","clientKPI","i","clientKPIData","KPIsAreEqual","bandInfo","getBandInfoFromConfigData","performanceBands","unacceptableStart","belowAverageStart","belowAverageEnd","acceptableStart","acceptableEnd","aboveAverageStart","aboveAverageEnd","exceptionalStart","exists","kpiMasterKey","kpiMilestoneKey","kpiMilestoneStaffingKey","formatKPI","padToMaxPrecision","bestScore","toLocaleLowerCase","getBelowAverageEnd","getAboveAverageStart","exportData","exportRequest","reportDataSource","columns","columnId","columnName","rows","kpiIndex","row","rowId","rowData","kpiCategory","replace","quickReportExportTo","dateTime","getCurrentDateTimeStamp","saveAs","isPercentage","transform","aCat","bCat","aDesc","bDesc","searchRows","timeout","clearTimeout","search","PerformanceReportsComponent","PerformanceScorecardsComponent","PerformanceUpgradeComponent","setUpgradePage","headline","shortOverview","selligPointHeader","logoPlaceholder","moduleShortDescription","backgroundColor","ScorecardKpicardDataHandler","_reusableFunctions","_sanitizer","initializeCards","params","cardId","cardTitle","dataTableData","routerPath","cardDrilldownUrl","outerTableHeight","hideViewAll","handleKPILargeCards","largeCard","kpiTableColumnInf","kpiTableInfo","headerTitle","isHyperlinked","isIconColumn","iconClass","headerStyle","style","showIndicator","compareFieldId","diffField","tableRowItems","tableTdItems","rowInf","rowInfCopy","comparisonInf","calculateComparisonPercentage","caretInfoMonthly","getCaret","percentage","isComparable","indicatorIcon","ng_caret_icon","indicatorColor","svgData","bypassSecurityTrustHtml","comparison","isNegative","abs","toLocaleString","maximumFractionDigits","minimumFractionDigits","formatMoney","routerLink","hasAccess","weightCellInf","clientKPIMatrixDescriptionInf","tooltipText","parseFloat","toFixed","tdList","ctx_r0","noDataDonutChart","ScorecardsProductPurposeMixCardComponent","ngOnChanges","changes","pieChartsData","currentData","currentValue","isLoadingProductMix","isLoadingPurposeMix","productMixChartLeft","pageId","productMixChartRight","purposeMixChartLeft","purposeMixChartRight","inputs","features","ScorecardsProductPurposeMixCardComponent_div_12_Template","ScorecardsProductPurposeMixCardComponent_div_13_Template","ScorecardsFundedProductionCardComponent","largeCardInteriorOptions","detailsCard","entityAbbr","entityIdentifier","entityTopLeftTitle","entityTopLeftValue","entityTopRightTitle","entityTopRightValue","entityBotLeftTitle","entityBotLeftValue","entityBotRightTitle","entityBotRightValue","i_r3","_r2","bottomCards","ScorecardsScoreSummaryCardComponent_div_1_div_66_div_1_Template","ScorecardsScoreSummaryCardComponent_div_1_profile_picture_3_Template","ScorecardsScoreSummaryCardComponent_div_1_div_4_Template","ScorecardsScoreSummaryCardComponent_div_1_div_9_Template","ScorecardsScoreSummaryCardComponent_div_1_div_10_Template","ScorecardsScoreSummaryCardComponent_div_1_div_11_Template","ScorecardsScoreSummaryCardComponent_div_1_div_12_Template","ScorecardsScoreSummaryCardComponent_div_1_div_66_Template","scoreCardType","rankTypeTitle","scoreValue","scoreValueOutOf","rankValue","rankValueOutOf","productTypeTitle","productVolumeValue","productVolumeValueOutOf","productUnitsValue","productUnitsValueOutOf","ScorecardsScoreSummaryCardComponent","setData","rankData","cardData","largeDataCard","isDataLoading","ScorecardsScoreSummaryCardComponent_div_1_Template","ScorecardsScoreSummaryCardComponent_spin_loader_3_Template","ScorecardsScoreSummaryCardComponent_div_4_Template","kpiCardData","PerformanceScorecardEmployeeTypeComponent_ng_template_9_card_list_4_Template","productionPurposeMixPieChartData","noDataSelection","PerformanceScorecardEmployeeTypeComponent","performanceScorecardService","route","router","sanitizer","employeeType","pageTitleShort","isDataLoded","employeeTypeUrl","snapshot","routeConfig","path","lang","decimalPoint","thousandsSep","emptySelect","wrapInACard","employeeListSettings","initializeDonutcharts","initializeProductionChart","queryParamMap","p","get","employeeIdentifierRoute","employeeIdentifier","checkEmployeeListChanges","loadData","setPositionDetails","setFundedProduction","kpiInit","setProductPurposeMixCard","loEmployeeDisplayOptionsInit","Promise","resolve","getEmployeeList","employeeList","emp","forced","e","recordInList","selectedEmployee","employeeFoundInList","employeeA","employeeB","showNoData","buildNoDataKpiCardData","setFundedPrductionData","setProductPurposeMixCardNoData","initializeScoreDetailsCard","ScorecardType","scorecardParameters","getParameters","getScoreDetails","updateScoreDetails","entityType","chartGroup","getProductionData","hasError","chartTitle","drawFundedProductionChart","relativeTo","onItemDeSelect","kpiDataHandler","styleSet","height","getPositionKpi","getPositionMix","productPurposeMixCardLoad","then","PerformanceScorecardEmployeeTypeComponent_div_8_Template","PerformanceScorecardEmployeeTypeComponent_ng_template_9_Template","PerformanceScorecardEmployeeTypeComponent_ng_template_11_Template","ShowData_r3","NoDataScreen_r4","PerformanceScorecardEntityComponent_ng_template_11_card_list_4_Template","PerformanceScorecardEntityComponent","hierarchyLevelsOfInterest","entitiesOfInterest","selectedIdentifier","selectedLevel","getQueryParams","getRoles","entityListSettings","levelListSettings","initializeDetailCard","getEntityRolesByUser","onLevelChange","getRoleHierarchies","getEntityHierarchiesByRole","idFromQueryParams","recordFromList","onEntityChange","updateQueryParams","clearIdFromQueryParams","queryParamsHandling","getScorecardData","getRoleKPIs","setScorecardDetails","location","getIdentifier","getRoleName","map","productionChartType","milestone","getScorecardKPIs","onItemDeSelectRole","onItemDeSelectEntity","PerformanceScorecardEntityComponent_div_10_Template","PerformanceScorecardEntityComponent_ng_template_11_Template","PerformanceScorecardEntityComponent_ng_template_13_Template","PerformanceScorecardThirdPartyComponent_ng_template_9_card_list_4_Template","PerformanceScorecardThirdPartyComponent","intl","thirdPartyType","thirdPartyTypeUrl","kpiTableColInfo","smallCards","hidePointer","partnerListSettings","lopartnerDisplayOptionsInit","populateSmallCardData","unitsFunded","volFunded","avgLoan","allFunded","allLocked","pieDataMixList","category","reduce","conVolFunded","loanTypeCategory","toUpperCase","govVolFunded","otherVolFunded","conVolLocked","govVolLocked","otherVolLocked","card","mainValue","bottomCardData","partnerIdentifier","setPartnerDetails","productPurposeMixCardInit","getScorecardPartnerList","hasSelectedEntity","partnerList","partnerName","selectedpartner","hasTheGivenObjectIntheArray","thirdParty","lenderDetails","smallCardData","getPartnerKpi","PerformanceScorecardThirdPartyComponent_div_8_Template","PerformanceScorecardThirdPartyComponent_ng_template_9_Template","PerformanceScorecardThirdPartyComponent_ng_template_11_Template","PerformanceInsightsComponent","BranchService","http","serverUrl","window","host","version","_url","getBranchDetails","Observable","subscriber","post","BranchID","details","next","response","getBranchesOfInterest","getAllRelatedBranches","getCurrentUsersBranchRecord","getAllBranchesForClientKey","factory","ɵfac","providedIn","SuccessfulSubmissionDialogComponent","renderer","document","viewClickedAfterSuccess","EventEmitter","topRightXClickedAfterSuccess","editClickedAfterSuccess","addClass","body","viewClicked","emit","editClicked","topRightXClicked","removeClass","DOCUMENT","outputs","onKeydown","yearOption","closingDate","addProjectionsClicked","selectedYear","year","openDate","PerformanceProjectionsConfigComponent_mat_card_9_div_2_div_1_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_2_div_2_Template","showProjectionsAreNotOpenYetMessage","showProjectionsAreAlreadyClosedMessage","branchesOfInterest","PerformanceProjectionsConfigComponent_mat_card_9_div_3_div_1_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_4_div_1_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_1_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_2_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_3_Template","PerformanceProjectionsConfigComponent_mat_card_9_div_4_Template","projectionsAreOpen","statDescription","loans","current","projection","totalLoans","errors","max","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_11_li_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_11_li_3_Template","required","dirty","totalVolume","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_19_li_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_19_li_3_Template","purchase","purchaseMix","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_26_li_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_26_li_3_Template","government","governmentMix","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_33_li_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_33_li_3_Template","tenured","tenuredProducers","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_40_li_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_40_li_3_Template","unitsPerMonth","avgLoanAmount","totalMonthlyVolume","purchaseVolume","governmentVolume","unitsPerProducer","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_1_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_3_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_4_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_5_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_6_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_7_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_8_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_div_9_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_9_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_10_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_11_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_17_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_18_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_19_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_25_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_26_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_32_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_33_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_span_39_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_40_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_div_44_Template","touched","_c1","_r5","editBranchProjectionsClicked","_r6","editEmployeeProjectionsClicked","monthPercentage_r7","monthProj_r8","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_28_td_1_Template","employeeMonthlyProjections","monthlyProjections","employeeProjections","getEmployeeUnitsControl","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_35_tr_1_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_35_tr_2_Template","_c2","getEmployeeVolumeControl","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_40_tr_1_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_40_tr_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_28_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_input_33_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_span_34_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_35_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_input_38_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_span_39_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_ng_container_40_Template","employeeYTDStats","termMo","getMonthName","shortMonth","isTenured","tenureMo","avgFundedUnits","avgFundedVol","projectionsAreEditable","thisMonthUnits_r10","totalMonthlyProjections","monthlyVolume","i_r11","monthlyShrinkStretchUnits","i_r12","monthlyShrinkStretchVol","thisMonthUnits_r13","adjustedMonthlyProjections","i_r14","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_span_30_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_span_31_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_td_68_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_ng_container_71_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_td_83_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_td_114_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_td_138_Template","projectionsAreBeingEdited","yearProjectionsAreOpen","seasonalityCurve","monthlyUnits","totalUnits","totalVol","shrinkStretchUnits","shrinkStretchVolume","_r15","discardClicked","_r16","nextClicked","branchProjections","valid","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_5_button_4_i_2_Template","branchProjectionForm","showEmployeeProjections","anyEmployeeProjectionIsInvalid","submitLoading","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_5_button_2_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_5_button_3_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_5_button_4_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_p_1_Template","onSubmit","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_3_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_4_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_div_5_Template","branchIdentifier","PerformanceProjectionsConfigComponent_mat_card_10_div_3_Template","PerformanceProjectionsConfigComponent_mat_card_10_div_4_Template","showNoProjectionsMessage","PerformanceProjectionsConfigComponent","projectionService","branchService","formBuilder","Arr","Array","seasonalityCurveHardCodedDefault","createFormGroup","onBranchProjectionChanges","branchListSettings","yearListSettings","yearsOfInterest","addYears","noProjections","updateEmployeeProjectionsOnNextClicked","getBranches","getBranchProjectionOpenCloseDates","dates","significantDatesHandler","branches","getYearsOfInterest","years","findIndex","yearValue","Date","getFullYear","setBranch","console","log","thisYear","sortYearsData","valueChanges","val","markAsDirty","setValue","applyUnitSeasonailityCurveAlgorithm","applyVolumeSeasonalityCurveAlgrithm","onEmployeeProjectionChanges","employeeProjection","employeeUnits","employeeUnitsChangedHandler","employeeVolume","employeeVolumeChangedHandler","updateEmployeeMonthlyProjections","totalVolumeOfFTProducers","calculateShrinkStretch","applyMonthlyShrinkStretch","totalEmployeeProjectedVolume","typeToUpdate","monthlyValues","primaryIdentifier","YearMonth","month","avgBranchLoanAmountForNewEmployee","totalUnitsOfFTProducers","numMonthsProjectedToWork","roundedVolume","sumOfParts","adjustVolumesSoTheySumToEmployeeVolume","diff","addition","adjustment","newTotal","makeFinalAdjustment","newDiff","indexOfHighest","indexOfMax","indexOfLowest","indexOfMin","totalMonthlyProjectedUnits","totalMonthlyProjectedVol","j","monthlyUnitsRounded","roundedValues","unitsRaw","unitsRounded","normalizeMonthlyUnits","monthsToConsider","isDiffNegative","Infinity","updateEmployeeVolumeProjections","calculateTotalEmployeeProjectedVolume","total","updateEmployeeProjections","tenuredEmployeeProjectedUnits","tenuredEmplyoeeProjectedVolume","employeeProjectedUnits","employeeProjectedVolume","calculateAvgLoanAmountForNewEmployee","minLoanAmountAvg","employeeStats","getThisEmployeeProjectionControlGroup","controls","isDraft","group","UntypedFormControl","Validators","min","array","markAsPristine","isSeasonalityCurveAve100","saveProjections","saveBranchProjection","branchProjectionData","convertBranchProjectionTypes","employeeProjectionData","projectionEmployeeYTDData","showSuccessfulSubmitMessage","getBranchProjectionHandler","formatServerData","reset","clientEmployeeProjections","primaryIdentifierSet","Set","empProj","has","employeeData","empProjMonth","add","addProjections","clear","retrieveBranchData","getUTCFullYear","today","toLocaleDateString","getBranchProjection","previousBranchProjectionConfigData","getBranchYTD","decideWhichYearToRetrieve","getEmployeeYTDProjHelper","clientProjectionBranchKey","branchYTDData","getEmployeeYTDProjHelperHandler","getBranchYTDHandler","currentYear","getDateFromDateTimeOffset","setUTCHours","areProjectionsOpenAtThisTime","projectionYear","currentDate","addControlsForEmployees","calculateTotal","employeeYTD","identifier","totalEmployeeUnits","totalEmployeeVolume","ytdUnits","ytdVol","govt","onBranchChange","branch","onYearChange","onSelectAll","onDeSelectAll","keyEvent","keyCode","some","hostBindings","PerformanceProjectionsConfigComponent_successful_submission_dialog_2_Template","PerformanceProjectionsConfigComponent_mat_card_9_Template","PerformanceProjectionsConfigComponent_mat_card_10_Template","PerformanceInsightsKpiLOComponent","hierarchyService","filtersService","entityList","saveEmployeeList","selectedEntity","field","dir","skip","pageSize","sortable","mode","allowUnsort","gridState","take","scrollable","type","previousNext","pageSizes","xTitle","periodCnt","kpiSearchTerm","kpiValueToDisplay","groupByRoles","oldRole","newRole","opt","reSetGrid","gridView","resetChartData","getSparklineDataEmployee","isCurrentPeriod","tableDataProperties","tableColumnProperties","isChanges","gridChangeEvent","updateGrid","localData","searchResults","orderedData","orderBy","onStateChange","state","getChartXLabel","dateRange","setNodataType","searchedData","searchTermTokens","filterBy","logic","filters","operator","ignoreCase","getEntityList","getEmployeeListByAsOfDateAndPosition","getHierarchyByRole","PerformanceInsightsKpiLOComponent_angular2_multiselect_8_Template","EntityLeaderboardService","_http","getNewEntityLeaderboardData","headers","HttpHeaders","getEntityWeightedScore","PerformanceInsightRankingTableComponent_ng_template_7_div_0_Template","dataProperties","isLoading","rank","PerformanceInsightRankingTableComponent_10_ng_template_0_Template","displayName","dataItem_r4","displayScore","dataItem_r5","displayVolume","volumePct","volTotal","PerformanceInsightRankingTableComponent_17_ng_template_0_Template","dataItem_r6","displayUnits","unitsPct","unitTotal","PerformanceInsightRankingTableComponent_20_ng_template_0_Template","PerformanceInsightRankingTableComponent","rankingsService","entityLeaderboardService","rankEntrySort","tableTitle","rankingData","processData","dataMappingProperties","dat","unitsMappingProperty","volumeMappingProperty","nameMappingProperty","scoreMappingProperty","volumeMax","getMaxValue","unitsMax","ranking","tablePageSize","sortChange","clickHandler","navigationParams","titleRouterBase","titleUrlSegment","role","roleId","cellClickHandler","cellQueryParamsList","source","valueId","cellRouterBase","cellUrlSegment","PerformanceInsightRankingTableComponent_ng_template_7_Template","PerformanceInsightRankingTableComponent_ng_template_9_Template","PerformanceInsightRankingTableComponent_10_Template","PerformanceInsightRankingTableComponent_ng_template_12_Template","PerformanceInsightRankingTableComponent_ng_template_14_Template","PerformanceInsightRankingTableComponent_ng_template_16_Template","PerformanceInsightRankingTableComponent_17_Template","PerformanceInsightRankingTableComponent_ng_template_19_Template","PerformanceInsightRankingTableComponent_20_Template","showFooter","lTable_r1","PerformanceInsightWeightedRankingsComponent","_positionService","_rankingsService","getPositions","datePeriod","getEmployeeAssignned","leaderTables","positionIdentifier","position","obj","scoreTable","getRankings","entityCode","getWeightedScoreByPosition","dateRangeId","asOfInfo","dateRangeInfo","showTopInfo","showTop","assignGroupBy","topNumber","PerformanceInsightWeightedRankingsComponent_div_11_Template","PerformanceRankingsPositionComponent","rankSearchTerm","changeToggle","getExcelExportData","bind","positionListSettings","positionList","positionID","history","posInf","selectedPositionInfo","JSON","parse","stringify","updateTable","drawSparklineCharts","scoreChanges","calculateDateValueChanges","scoreValues","volumeChanges","volumeValues","unitChanges","unitValues","drawCharts","pageChange","onDeSelectionChange","values","change","pivot","divIdTrend","getElementById","createKPISparkline","divIdChanges","exportToExcel","kendoGrid","exportFileName","saveAsExcel","formattedVolume","PerformanceBranchLeaderboardComponent","filterService","_entityLeaderboardService","hierarchyCacheInfo","HierarchyFiltersCustomOptions","getFilterRoles","hierarchyCachePageInfo","getHierarchyCachePageInfo","getUsersAllLocations","empIdx","splice","paramList","queryParam","prm","YMC","staff","setNoDataType","PerformanceBranchLeaderboardComponent_div_7_Template","PerformanceRankingsBranchComponent","roleID","getEntityRankings","roleData","roleLevel","periodDates","createKPINewSparkline","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_12_div_0_Template","noData","ranked","mtdMeasure","_c10","prevMTDChg","_c11","_c12","prevMTDComp","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_20_i_0_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_20_span_1_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_20_span_2_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_27_div_0_Template","dataItem_r7","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_34_i_0_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_34_span_1_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_34_span_2_Template","PerformanceInsightsMonthlyLoRankingsComponent","volSkip","unitSkip","unitSort","volSort","hiddenFilterItems","unitParams","measure","asOfDate","displayLORankings","volData","unitsData","setNoData","overallVolData","overallUnitsData","getPeriodData","prepareGridData","periodData","yearMonthCalendar","overallDataArr","filteredData","measureValues","filteredVolData","filteredUnitsData","updateVolumeGrid","updateUnitGrid","volGridData","unitsGridData","createRevenueSparkline","gridType","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_12_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_14_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_18_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_20_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_22_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_27_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_29_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_34_Template","PerformanceInsightsMonthlyLoRankingsComponent_ng_template_36_Template","_c3","_c4","_c5","_c6","_c7","_c8","_c9","PerformanceCharts","createNewAreaChart","yAxisText","seriesInfo","routerinfo","categoryGroup","hasDrilldownAccsess","addTitleSuffix","subtitle","navFromUrl","isVolume","_this","spacingBottom","spacingLeft","marginRight","spacingRight","spacingTop","events","load","xTicks","xAxis","ticks","points","pointInf","label","element","cursor","onclick","dateInfo","selectedPeriod","commType","navigation","buttonOptions","enabled","credits","legend","align","margin","fontSize","fontWeight","categories","startOnTick","labels","lineWidth","fontFamily","borderColor","borderRadius","borderWidth","shared","useHTML","outside","formatter","tooltipTotalName","tooltipTitle","options","s","toolText","plotOptions","area","lineColor","marker","symbol","formatSeriesInfo","fillOpacity","legendIndex","click","dataPointEvent","titleSuffix","PerformanceActualsVsProjectionsTableComponent_ng_template_6_div_0_Template","lo","actualVolume","sumActualVolume","projectionVolume","sumProjectionVolume","actualUnits","sumActualUnits","projectionUnits","sumProjectionUnits","dataItem_r8","volumePctRatio","PerformanceActualsVsProjectionsTableComponent","noDataCustomMessage","aggregationUnit","PerformanceActualsVsProjectionsTableComponent_ng_template_6_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_8_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_9_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_11_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_12_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_14_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_15_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_17_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_18_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_20_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_21_Template","PerformanceActualsVsProjectionsTableComponent_ng_template_23_Template","mainChart_r1","tableSummaryData","performanceRoutes","component","canActivate","AuthGuardService","PerformanceActualsVsProjectionsComponent","performanceService","performanceCharts","isLevel1User","initializeCharts","getEmptyLargeCardData","mainCharts","mainChart","chartTitleData","showChartCustomTitle","chartTile","chartLabelColor","chartComparisonValue","chartMainValue","chartSecondaryValue","isMainValueUnitVisible","showMainValue","chartSubItemValue","isChartSubValueVisible","svgIconString","branchEmpData","lfName","locationIdentifier","getMainChartData","Number","getProjectionsToActualsLargeCard","recordType","setMainChartData","getYears","getUsersList","getTableSummaryData","getProjectionsUserList","users","onEmployeeChange","cardInfo","filterDataByYMC","actuals","projections","monthShortName","monthNumToMonthYearArray","datePeriodDescription","getSubtitle","getCategories","chartOptions","drillDUrlSegment","updateLargeCard","timespanTotalVolume","timespanTotalUnits","getProjectionsToActualsTabularListByPosition","actualData","projData","d","PerformanceActualsVsProjectionsComponent_div_9_Template","PerformanceActualsVsProjectionsComponent_app_performance_actuals_vs_projections_table_10_Template","PerformanceRoutingModule","RouterModule","forChild","PerformanceModule","CurrencyPipe","DecimalPipe","PerformanceScorecardService","PerformanceService","ProjectionService","RankingsService","imports","CommonModule","SharedModule","GridModule","ThirdPartyModule","HierarchyService","getHierarchyEntities","getHierarchyEntitiesForClient","clientKey","getHierarchyLevelsOfInterest","getHierarchyEntitiesOfInterest","getHierarchyDetailsModel","upsertNewHierarchyEntity","formModel","origOwner","cleanUpData","originalOwnerIdentifier","generalInfo","hierarchyKey","hierarchyInfo","roleOrder","parentHierarchyKey","hierarchyTypeKey","ownerIdentifier","selectOwner","locationInfo","zipCodeDeliverySpecific","zipCode","getCorporateAllHierarchy","getHierarchyRoleTypes","getHierarchyTypes","updateHierarchyLevels","hierarchyData","HttpParams","set","deleteHierarchyLevels","getEntitiesByRoleOrder","doHierarchyEntitiesExistForClient"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/modules/performance/components/performance-at-a-glance/performance.component.html","./src/app/modules/performance/components/performance-at-a-glance/performance.component.ts","./src/app/modules/performance/components/performance-transition/performance-transition.component.ts","./src/app/modules/performance/components/performance-transition/performance-transition.component.html","./src/app/modules/performance/components/performance-goal-tracking/performance-goal-tracking.component.ts","./src/app/modules/performance/components/performance-goal-tracking/performance-goal-tracking.component.html","./src/app/modules/performance/components/performance-insights-kpi/performance-insights-kpi.component.html","./src/app/modules/performance/components/performance-insights-kpi/performance-insights-kpi.component.ts","./src/app/modules/performance/components/performance-insights-kpi-sparkline/performance-insights-kpi-sparkline.component.html","./src/app/modules/performance/components/performance-insights-kpi-sparkline/performance-insights-kpi-sparkline.component.ts","./src/app/modules/performance/components/performance-kpi/performance-kpi.component.ts","./src/app/modules/performance/components/performance-kpi/performance-kpi.component.html","./src/app/modules/performance/components/performance-reports/performance-reports.component.ts","./src/app/modules/performance/components/performance-reports/performance-reports.component.html","./src/app/modules/performance/components/performance-scorecards/performance-scorecards.component.ts","./src/app/modules/performance/components/performance-scorecards/performance-scorecards.component.html","./src/app/modules/performance/components/performance-upgrade/performance-upgrade.component.ts","./src/app/modules/performance/components/performance-upgrade/performance-upgrade.component.html","./src/app/modules/shared/classes/scorecards-kpi-card-data-handler.ts","./src/app/modules/shared/components/scorecards-product-purpose-mix-card/scorecards-product-purpose-mix-card.component.html","./src/app/modules/shared/components/scorecards-product-purpose-mix-card/scorecards-product-purpose-mix-card.component.ts","./src/app/modules/shared/components/scorecards-funded-production-card/scorecards-funded-production-card.component.ts","./src/app/modules/shared/components/scorecards-funded-production-card/scorecards-funded-production-card.component.html","./src/app/modules/shared/components/scorecards-score-summary-card/scorecards-score-summary-card.component.html","./src/app/modules/shared/components/scorecards-score-summary-card/scorecards-score-summary-card.component.ts","./src/app/modules/performance/components/performance-scorecard-employee-type/performance-scorecard-employee-type.component.html","./src/app/modules/performance/components/performance-scorecard-employee-type/performance-scorecard-employee-type.component.ts","./src/app/modules/performance/components/performance-scorecard-entity/performance-scorecard-entity.component.html","./src/app/modules/performance/components/performance-scorecard-entity/performance-scorecard-entity.component.ts","./src/app/modules/performance/components/performance-scorecard-third-party/performance-scorecard-third-party.component.html","./src/app/modules/performance/components/performance-scorecard-third-party/performance-scorecard-third-party.component.ts","./src/app/modules/performance/components/performance-insights/performance-insights.component.ts","./src/app/modules/performance/components/performance-insights/performance-insights.component.html","./src/app/modules/shared/services/branch.service.ts","./src/app/modules/shared/components/successful-submission-dialog/successful-submission-dialog.component.ts","./src/app/modules/shared/components/successful-submission-dialog/successful-submission-dialog.component.html","./src/app/modules/performance/components/performance-projections-config/performance-projections-config.component.html","./src/app/modules/performance/components/performance-projections-config/performance-projections-config.component.ts","./src/app/modules/performance/components/performance-insights-kpi-lo/performance-insights-kpi-lo.component.html","./src/app/modules/performance/components/performance-insights-kpi-lo/performance-insights-kpi-lo.component.ts","./src/app/modules/performance/services/entity-leaderboard.service.ts","./src/app/modules/performance/components/performance-insight-weighted-rankings/table/performance-insight-ranking-table.component.html","./src/app/modules/performance/components/performance-insight-weighted-rankings/table/performance-insight-ranking-table.component.ts","./src/app/modules/performance/components/performance-insight-weighted-rankings/performance-insight-weighted-rankings.component.html","./src/app/modules/performance/components/performance-insight-weighted-rankings/performance-insight-weighted-rankings.component.ts","./src/app/modules/performance/components/performance-rankings-position/performance-rankings-position.component.ts","./src/app/modules/performance/components/performance-rankings-position/performance-rankings-position.component.html","./src/app/modules/performance/components/performance-branch-leaderboard/performance-branch-leaderboard.component.html","./src/app/modules/performance/components/performance-branch-leaderboard/performance-branch-leaderboard.component.ts","./src/app/modules/performance/components/performance-rankings-branch/performance-rankings-branch.component.ts","./src/app/modules/performance/components/performance-rankings-branch/performance-rankings-branch.component.html","./src/app/modules/performance/components/performance-insights-monthly-lo-rankings/performance-insights-monthly-lo-rankings.component.html","./src/app/modules/performance/components/performance-insights-monthly-lo-rankings/performance-insights-monthly-lo-rankings.component.ts","./src/app/modules/shared/classes/performance-chart-options.ts","./src/app/modules/performance/components/performance-actuals-vs-projections/table/performance-actuals-vs-projections-table/performance-actuals-vs-projections-table.component.html","./src/app/modules/performance/components/performance-actuals-vs-projections/table/performance-actuals-vs-projections-table/performance-actuals-vs-projections-table.component.ts","./src/app/modules/performance/components/performance-actuals-vs-projections/performance-actuals-vs-projections.component.html","./src/app/modules/performance/performance.routing.module.ts","./src/app/modules/performance/components/performance-actuals-vs-projections/performance-actuals-vs-projections.component.ts","./src/app/modules/performance/performance.module.ts","./src/app/modules/settings/services/hierarchy.service.ts"],"sourcesContent":["\n\n\n
\n \n \n \n \n
\n
\n
\n
\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 {\n ChangeDetectorRef,\n Component,\n HostListener,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { DisplayOptions, IOptionalSummaryList } from '../../../shared/interfaces/display-options';\nimport { NoDataActionType } from '../../../shared/interfaces/no-data';\nimport { CustomDashboardsService } from 'app/modules/my-limegear/services/my-limegear.service';\nimport { ComponentsOutletDirectiveService } from 'app/modules/my-limegear/services/component-outlet-directive.service';\nimport { CustomDashboardsOutletDirective } from 'app/modules/my-limegear/my-limegear-outlet.directive';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\n\n@Component({\n selector: 'app-performance',\n templateUrl: './performance.component.html',\n styleUrls: ['./performance.component.scss'],\n})\nexport class PerformanceComponent implements OnInit {\n pageTitle = 'Performance At a Glance';\n displayOptions: DisplayOptions[];\n hFilterJSON = '';\n smallCardIdArray: Array;\n largeCardIdArray: Array;\n dashboard = 'performance';\n pageHeadline: IPageHeadline;\n extraParameters: IOptionalSummaryList[];\n\n constructor(\n private cd: ChangeDetectorRef,\n private customDashboardsService: CustomDashboardsService,\n private componentsOutletDirectiveService: ComponentsOutletDirectiveService\n ) {}\n\n @ViewChildren(CustomDashboardsOutletDirective)\n dashboardOutlet: QueryList;\n\n ngOnInit() {\n this.extraParameters = [{ title: 'compareto', value: 'Previous Period' }];\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Performance At a Glance',\n linkArray: [\n {\n moduleLink: 'performance',\n linkTitle: 'Performance Home',\n showLink: true,\n isHome: true,\n },\n ],\n };\n this.customDashboardsService.destroyCharts();\n this.customDashboardsService.detectChange(\n '',\n [],\n false,\n false,\n NoDataActionType.pageStart,\n this.dashboard\n );\n this.smallCardIdArray = [\n 'totalHeadcount',\n 'totalProducers',\n 'totalOpsSupport',\n 'topProducersByscore',\n 'bottomTenuredProducers',\n ];\n\n this.largeCardIdArray = ['performance-projections-actual', 'performance-kpi'];\n this.updateComponent();\n }\n\n updateComponent() {\n this.componentsOutletDirectiveService.detectViewChanges(this.cd);\n this.componentsOutletDirectiveService.loadContents(this.dashboardOutlet);\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.customDashboardsService.reCreateExistingCharts();\n }\n\n applyNewFilters(event: string) {\n this.customDashboardsService.destroyCharts();\n this.hFilterJSON = event;\n this.updateComponent();\n this.customDashboardsService.detectChange(\n this.hFilterJSON,\n this.displayOptions,\n true,\n false,\n NoDataActionType.filter,\n this.dashboard\n );\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.customDashboardsService.destroyCharts();\n this.displayOptions = event;\n this.updateComponent();\n this.customDashboardsService.detectChange(\n this.hFilterJSON,\n this.displayOptions,\n false,\n true,\n NoDataActionType.filter,\n this.dashboard\n );\n }\n\n ngOnDestroy() {\n this.customDashboardsService.unsubscribeFilters();\n this.customDashboardsService.destroyCharts();\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-transition',\n templateUrl: './performance-transition.component.html',\n styleUrls: ['./performance-transition.component.scss'],\n})\nexport class PerformanceTransitionComponent implements OnInit {\n constructor() {}\n ngOnInit() {}\n}\n","\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-goal-tracking',\n templateUrl: './performance-goal-tracking.component.html',\n styleUrls: ['./performance-goal-tracking.component.scss'],\n})\nexport class PerformanceGoalTrackingComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","\n\n\n

\n This page is a placeholder.\n

\n","\n\n\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n {{ switchLabel }}\n \n
\n
\n
\n
\n
\n
\n
bottom 10
\n
\n
\n \n
\n 0\"\n class=\"kpi-table\"\n >\n \n \n Value\n  %of Target\n \n \n \n {{ bottom10Top + 1 + i }}.\n \n  \n \n {{\n entity.hierarchyAbrrName != null\n ? (entity.hierarchyAbrrName | slice : 0 : 14)\n : (entity.hierarchyName | slice : 0 : 14)\n }}\n \n \n \n {{ entity.kpiValueFormatted }}\n \n \n {{\n entity.pctofTarget > 99\n ? (entity.pctofTarget | number : '1.0-0')\n : (entity.pctofTarget | number : '1.1-1')\n }}\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n
\n
\n top 10 \n
\n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Value %of Target
{{ i + 1 }}.\n  \n \n {{\n entity.hierarchyAbrrName != null\n ? (entity.hierarchyAbrrName | slice : 0 : 14)\n : (entity.hierarchyName | slice : 0 : 14)\n }}\n \n \n {{ entity.kpiValueFormatted }}\n \n {{\n entity.pctofTarget > 99\n ? (entity.pctofTarget | number : '1.0-0')\n : (entity.pctofTarget | number : '1.1-1')\n }}\n
\n
\n
\n \n
\n
\n
\n\n
\n \n
\n
\n
\n
target
\n
\n
\n \n
\n
\n
{{ targetUnits }} {{ title }}
\n
PERFORMANCE BANDS
\n \n \n \n \n \n \n \n
{{ band.name }}
\n
\n
\n
\n \n
\n
\n
\n \n Full Graph\n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { KPIService } from '../../../shared/services/kpi.service';\nimport { LimeGearCharts } from '../../../shared/classes/chart-data';\nimport { KPIData, KPIBand, KPI, IKPIDataParams } from '../../../shared/interfaces/kpi-data';\nimport { Router } from '@angular/router';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport * as Highcharts from 'highcharts';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from '../../../shared/interfaces/no-data';\nimport { DecimalPipe } from '@angular/common';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\nimport { ILargeCardInteriorOptions } from 'app/modules/shared/interfaces/card-data';\nimport { IPositionInfo, PositionService } from '../../../shared/services/position.service';\n\n@Component({\n selector: 'app-performance-insights-kpi',\n templateUrl: './performance-insights-kpi.component.html',\n styleUrls: ['./performance-insights-kpi.component.scss'],\n})\nexport class PerformanceInsightsKPIComponent implements OnInit {\n largeCardOptions: ILargeCardInteriorOptions;\n action: NoDataActionType;\n pageTitle: string = 'KPI Insights';\n records: KPIData[];\n seriesData: any[];\n KPIs: KPI[];\n selectedKPI: KPI[];\n topEntities: KPIData[];\n bottomEntities: KPIData[];\n plotBandsHighChart: KPIBand[];\n targetUnits: string;\n title: string;\n displayOptions: DisplayOptions[];\n hFilterJSON: string;\n limeGearCharts: LimeGearCharts.LimeGearChart;\n switchLabel: string;\n showNames: boolean;\n shouldIgnoreNumberLOs: boolean = false;\n showingBandOnlyData: boolean = false;\n loading: boolean;\n noDataForPlotBands: boolean;\n plotBandsLoading: boolean;\n noDataForCompany: boolean;\n viewingBandNumber: number;\n noDataType: NoDataTypes;\n noDataTypePlotBands: NoDataTypes;\n format: 'number' | 'currency' | 'percentage' | any;\n bandsForLegend: KPIBand[];\n plotBandsList: Highcharts.AxisPlotBandsOptions[];\n kpiListSettings: any;\n kpiProfile: IPositionInfo[];\n selectedKPIProfile: IPositionInfo[];\n kpiProfileSettings: object;\n positionAbbv: string;\n parameters: IKPIDataParams;\n bottom10Top: number;\n\n constructor(\n private _KPIService: KPIService,\n private _router: Router,\n private reusableFunctions: ReusableFunctions,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService,\n private decimalPipe: DecimalPipe,\n private toast: ToastService,\n private positionService: PositionService\n ) {\n this.kpiListSettings = {\n singleSelection: true,\n text: 'Select KPI',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'clientKPIMatrixDescription',\n primaryKey: 'kpiMatrixKey',\n enableFilterSelectAll: false,\n };\n\n this.kpiProfileSettings = {\n singleSelection: true,\n text: 'Select KPI profile',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'position',\n primaryKey: 'positionAbbv',\n enableFilterSelectAll: false,\n };\n }\n\n ngOnInit() {\n scroll(0, 0);\n this.selectedKPIProfile = [];\n this.plotBandsList = [];\n this.loading = true;\n this.plotBandsLoading = true;\n this.action = NoDataActionType.pageStart;\n this.noDataType = {\n action: this.action,\n searchTerm: '',\n componentTitle: this.pageTitle,\n inputSource: NoDataSourceType.chartCard,\n };\n\n this.noDataTypePlotBands = {\n action: this.action,\n searchTerm: '',\n componentTitle: 'Plot bands',\n inputSource: NoDataSourceType.chartCard,\n };\n\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this.reusableFunctions,\n this.decimalPipe\n );\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this._router.url);\n\n this.largeCardOptions = {\n action: this.action,\n componentTitle: this.pageTitle,\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: false,\n accessToUrl: '',\n uniqueId: 'scatterplot',\n minHeight: 720,\n chart: null,\n };\n\n this.setDisplayOptionsSelected();\n this.showNames = true;\n this.setToggleLabel();\n this.setDDls();\n }\n\n setSelectedProfile() {\n let defaultProfileAbbv = 'LO';\n if (!(this.selectedKPIProfile && this.selectedKPIProfile.length > 0)) {\n let defaultProfile = this.kpiProfile.find(\n (pos) => pos.positionAbbv === defaultProfileAbbv\n );\n if (defaultProfile) {\n this.selectedKPIProfile = [defaultProfile];\n }\n }\n this.positionAbbv = this.selectedKPIProfile[0].positionAbbv;\n }\n\n setDDls() {\n this.loading = true;\n if (this.parameters?.roleName && this.parameters.roleName === 'Employee') {\n this.positionService.getScorecardPositions().subscribe(\n (res) => {\n this.kpiProfile = res;\n if (res && res.length > 0) {\n this.setSelectedProfile();\n this.getKpiList();\n } else {\n this.setCommonNoDataParameters();\n }\n },\n (error) => {\n this.action = NoDataActionType.error;\n this.setCommonNoDataParameters();\n throw new Error(error);\n }\n );\n } else {\n this.positionAbbv = 'LO';\n this.getKpiList();\n }\n }\n\n getKpiList() {\n this._KPIService\n .getKPIs({\n positionAbbv: this.positionAbbv,\n })\n .subscribe(\n (data) => {\n if (data && data.length > 0) {\n this.noDataForCompany = false;\n this.KPIs = data;\n let selectedKpi;\n if (this.selectedKPI && this.selectedKPI.length > 0) {\n selectedKpi = this.KPIs.find(\n (kpi) => kpi.kpiMatrixKey === this.selectedKPI[0].kpiMatrixKey\n );\n }\n\n if (selectedKpi) {\n this.selectedKPI = [selectedKpi];\n } else {\n this.selectedKPI = [this.KPIs[0]];\n }\n this.parameters.positionAbbv = this.positionAbbv;\n this.getKPIData();\n } else {\n this.setCommonNoDataParameters();\n }\n },\n (err) => {\n this.noDataType.action = NoDataActionType.error;\n this.setCommonNoDataParameters();\n throw new Error(err);\n }\n );\n }\n\n setDisplayOptionsSelected(): void {\n let fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRangeLastPeriod_y1_y_q_m'\n )?.selectedOptions;\n let loanType = this.displayOptions.find(\n (item) => item.optionKey === 'loanCategory'\n )?.selectedOptions;\n let loanPurpose = this.displayOptions.find(\n (item) => item.optionKey === 'loanPurpose'\n )?.selectedOptions;\n let channel = this.displayOptions.find(\n (item) => item.optionKey === 'channel'\n )?.selectedOptions;\n let roleName = this.displayOptions.find(\n (item) => item.optionKey === 'groupByRoles'\n )?.selectedOptions;\n\n this.parameters = {\n fromDatePeriod: fromDatePeriod ?? '',\n kpiMatrix: '',\n loanType: loanType ?? '',\n loanPurpose: loanPurpose ?? '',\n channel: channel ?? '',\n hFilterJSON: this.hFilterJSON,\n roleName: roleName ?? '',\n positionAbbv: '',\n };\n\n if (this.parameters.roleName !== 'Employee') {\n this.selectedKPIProfile = [];\n }\n }\n\n setChartData() {\n this.seriesData = [];\n this.records.forEach((record) => {\n if (this.parameters.roleName === 'Employee') {\n record.fullName = this.getFullName(record.hierarchyName);\n record.hierarchyName = this.abbreviateNameToLastPlustFirstInitial(\n record.hierarchyName\n );\n } else {\n record.hierarchyName = record.hierarchyName.split(' - ').pop();\n record.fullName = record.hierarchyName;\n }\n\n let precision = record.kpiPrecision ?? 1;\n this.seriesData.push({\n name: record.hierarchyName,\n value: record.hierarchyIdentifier,\n properties: {\n units: this.reusableFunctions.formatNumber(\n record.kpiValue,\n precision,\n this.format,\n false\n ),\n unitsLabel: this.selectedKPI[0].kpiDisplayShort,\n titlePart: record.fullName,\n nbr: record.nbr,\n },\n x: record.volume,\n y: this.formatPercentage(record.pctofTarget),\n });\n });\n this.setTopAndBottomPerformers();\n this.title = this.records[0].clientKPIMatrixDescription;\n this.drawChart();\n }\n\n formatPercentage(pctofTarget: number): number {\n if (pctofTarget > 99) {\n return Math.round(pctofTarget);\n }\n return this.reusableFunctions.round(pctofTarget, 1);\n }\n\n setChartDataForPerformanceBand(kpiBand: KPIBand) {\n let bandOnlyData = this.seriesData.filter((dataPoint) => {\n if (kpiBand.kpiBandKey === 1) {\n return dataPoint.y <= (kpiBand.pctEnd ? kpiBand.pctEnd : kpiBand.pctStart);\n } else if (kpiBand.kpiBandKey === 5) {\n return dataPoint.y >= (kpiBand.pctEnd ? kpiBand.pctEnd : kpiBand.pctStart);\n } else {\n return this.isDataPointWithBandRange(dataPoint.y, kpiBand.pctStart, kpiBand.pctEnd);\n }\n });\n if (bandOnlyData.length > 0) {\n this.viewingBandNumber = kpiBand.kpiBandKey;\n this.drawChart(bandOnlyData, true);\n } else {\n this.toast.warning('No producers in this performance band.');\n }\n }\n\n isDataPointWithBandRange(dataPoint: number, pctStart: number, pctEnd: number): boolean {\n let min = pctStart < pctEnd ? pctStart : pctEnd;\n let max = pctStart > pctEnd ? pctStart : pctEnd;\n return dataPoint >= min && dataPoint <= max;\n }\n\n drawChart(seriesData = this.seriesData, showingBandOnlyData = false) {\n if (seriesData) {\n this.setShowNames(seriesData.length);\n }\n this.showingBandOnlyData = showingBandOnlyData;\n setTimeout(() => {\n this.largeCardOptions.isDataReady = true;\n this.largeCardOptions.hasData = true;\n this.largeCardOptions.chart = new Highcharts.Chart(\n 'scatterplot',\n this.limeGearCharts.createKPIScatterPlot(\n this.title,\n 'Volume ($)',\n '% of Target',\n seriesData,\n '#009999',\n this.showNames,\n this.parameters.roleName,\n this.getUrlSegment()\n )\n );\n\n this.getBands();\n this.largeCardOptions = Object.assign({}, this.largeCardOptions);\n }, 0);\n }\n\n setShowNames(numberOfDataPoints: number): void {\n if (!this.shouldIgnoreNumberLOs) {\n numberOfDataPoints <= 25 ? (this.showNames = true) : (this.showNames = false);\n }\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.action = NoDataActionType.filter;\n this.parameters.hFilterJSON = this.hFilterJSON;\n this.getKPIData();\n }\n\n getKPIData() {\n this.plotBandsLoading = true;\n this.viewingBandNumber = 0;\n this.loading = true;\n this.resetLargeCard();\n this.parameters.kpiMatrix = this.selectedKPI[0].kpiMatrixKey.toString();\n this.getData();\n }\n\n resetLargeCard() {\n this.largeCardOptions.isDataReady = false;\n this.largeCardOptions.hasData = false;\n this.largeCardOptions.chart = null;\n this.largeCardOptions = Object.assign({}, this.largeCardOptions);\n }\n\n setCommonNoDataParameters() {\n this.noDataForCompany = true;\n this.noDataForPlotBands = true;\n this.plotBandsLoading = false;\n this.loading = false;\n this.noDataTypePlotBands.action = this.action;\n this.noDataType.action = this.action;\n }\n\n getData() {\n this._KPIService.getData(this.parameters).subscribe(\n (data) => {\n this.loading = false;\n if (data && data.length > 0) {\n this.noDataForCompany = false;\n this.records = data;\n this.format = data[0].kpiFormat;\n this.setShowNames(this.records.length);\n let targetPrecision = this.records[0].target > 99 ? 0 : 1;\n this.targetUnits = this.reusableFunctions.formatNumber(\n this.records[0].target,\n targetPrecision,\n this.records[0].kpiFormat,\n true\n );\n this.setChartData();\n } else {\n this.setCommonNoDataParameters();\n this.largeCardOptions.isDataReady = true;\n this.largeCardOptions.hasData = false;\n this.largeCardOptions.chart = null;\n this.largeCardOptions = Object.assign({}, this.largeCardOptions);\n }\n },\n (error) => {\n this.action = NoDataActionType.error;\n this.setCommonNoDataParameters();\n throw new Error(error);\n }\n );\n }\n\n getBands() {\n this.plotBandsLoading = true;\n this.noDataForPlotBands = false;\n this._KPIService\n .getBands({\n fromDatePeriod: this.parameters.fromDatePeriod,\n kpiMatrixKey: this.selectedKPI[0].kpiMatrixKey,\n })\n .subscribe(\n (bands) => {\n this.plotBandsLoading = false;\n if (bands && bands.length > 0) {\n this.plotBandsHighChart = bands;\n this.setPlotBands();\n } else {\n this.plotBandsHighChart = [];\n this.noDataForPlotBands = true;\n }\n },\n (error) => {\n this.noDataForPlotBands = true;\n this.plotBandsLoading = false;\n this.noDataTypePlotBands.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n }\n\n handleNoData(message: string) {\n this.toast.info(message);\n this.topEntities = this.bottomEntities = [];\n this.records = undefined;\n this.format = null;\n }\n\n setPlotBands(): void {\n this.setBandNames();\n this.setBandDescriptions();\n this.bandsForLegend = this.plotBandsHighChart.reverse();\n this.setBandClassNames();\n this.setPlotBandsList();\n this.applyPlotBands();\n }\n\n applyPlotBands() {\n this.plotBandsList.forEach((band) => {\n this.largeCardOptions.chart.yAxis[0].addPlotBand(band);\n });\n }\n\n setPlotBandsList(isHigherBetter: boolean = true) {\n let plotBands = this.plotBandsHighChart;\n // TODO: simplify the logic below\n let usePlotBands = plotBands?.length === 5 ? true : false;\n this.plotBandsList = [\n {\n color: '#FDDBDB',\n from: usePlotBands\n ? isHigherBetter\n ? -Math.pow(2, 31)\n : plotBands.find((band) => band.kpiBandKey === 1).pctStart\n ? plotBands.find((band) => band.kpiBandKey === 1).pctStart\n : plotBands.find((band) => band.kpiBandKey === 1).pctEnd\n : null,\n to: usePlotBands\n ? isHigherBetter\n ? plotBands.find((band) => band.kpiBandKey === 1).pctEnd\n ? plotBands.find((band) => band.kpiBandKey === 1).pctEnd\n : plotBands.find((band) => band.kpiBandKey === 1).pctStart\n : Math.pow(2, 31)\n : null,\n },\n {\n color: '#FFF9E7',\n from: usePlotBands\n ? plotBands.find((band) => band.kpiBandKey === 2).pctStart\n : null,\n to: usePlotBands ? plotBands.find((band) => band.kpiBandKey === 2).pctEnd : null,\n },\n {\n color: '#E0F3F3',\n from: usePlotBands\n ? plotBands.find((band) => band.kpiBandKey === 3).pctStart\n : null,\n to: usePlotBands ? plotBands.find((band) => band.kpiBandKey === 3).pctEnd : null,\n },\n {\n color: '#F7EFFF',\n from: usePlotBands\n ? plotBands.find((band) => band.kpiBandKey === 4).pctStart\n : null,\n to: usePlotBands ? plotBands.find((band) => band.kpiBandKey === 4).pctEnd : null,\n },\n {\n color: '#F3F9ED',\n from: usePlotBands\n ? isHigherBetter\n ? plotBands.find((band) => band.kpiBandKey === 5).pctStart\n ? plotBands.find((band) => band.kpiBandKey === 5).pctStart\n : plotBands.find((band) => band.kpiBandKey === 5).pctEnd\n : -Math.pow(2, 31)\n : null,\n to: usePlotBands\n ? isHigherBetter\n ? Math.pow(2, 31)\n : plotBands.find((band) => band.kpiBandKey === 5).pctEnd\n ? plotBands.find((band) => band.kpiBandKey === 5).pctEnd\n : plotBands.find((band) => band.kpiBandKey === 5).pctStart\n : null,\n },\n ];\n }\n\n setBandNames(): void {\n for (let band of this.plotBandsHighChart) {\n band.name = this.getBandName(band.kpiBandKey);\n }\n }\n\n setBandClassNames(): void {\n for (let band of this.plotBandsHighChart) {\n band.className = this.getClassName(band.kpiBandKey);\n }\n }\n\n getBandName(bandKey: number): any {\n switch (bandKey) {\n case 1:\n return 'Poor';\n case 2:\n return 'Fair';\n case 3:\n return 'Good';\n case 4:\n return 'Very Good';\n case 5:\n return 'Excellent';\n }\n }\n\n getClassName(bandKey: number): any {\n switch (bandKey) {\n case 1:\n return 'unacceptable-band';\n case 2:\n return 'below-standards-band';\n case 3:\n return 'acceptable-band';\n case 4:\n return 'above-standards-band';\n case 5:\n return 'exceptional-band';\n }\n }\n\n determineIfHigherIsBetter(): boolean {\n let band2Value = this.plotBandsHighChart[1].rangeStart\n ? this.plotBandsHighChart[1].rangeStart\n : this.plotBandsHighChart[1].rangeEnd;\n let band4Value = this.plotBandsHighChart[3].rangeStart\n ? this.plotBandsHighChart[3].rangeStart\n : this.plotBandsHighChart[3].rangeEnd;\n return band2Value < band4Value;\n }\n\n setTopAndBottomPerformers(): void {\n let totalLength = this.records.length;\n let topChunkSize = 10;\n let bottomChunkSize = 10;\n\n if (totalLength <= 20) {\n topChunkSize = Math.round(totalLength / 2);\n bottomChunkSize = totalLength - topChunkSize;\n }\n\n this.bottom10Top = totalLength - bottomChunkSize;\n let sortedData = this.records.sort(comparePercentOfTarget);\n this.topEntities = sortedData.slice(0, topChunkSize);\n this.bottomEntities = sortedData.slice(this.bottom10Top, totalLength);\n this.formatTopBottom10(this.topEntities);\n this.formatTopBottom10(this.bottomEntities);\n }\n\n formatTopBottom10(data: KPIData[]) {\n data.forEach((entity) => {\n entity.kpiValueFormatted = this.reusableFunctions.formatNumber(\n entity.kpiValue,\n entity.kpiPrecision ?? 0,\n entity.kpiFormat,\n true\n );\n });\n }\n\n formatKPIDesc(kpiValue: number, decimalPlaces: number): string {\n return this.reusableFunctions.formatNumber(kpiValue, decimalPlaces, this.format, true);\n }\n\n abbreviateNameToLastPlustFirstInitial(fullName: string): string {\n let nameParts = fullName.split(', ');\n if (nameParts.length < 2) {\n return fullName;\n }\n return nameParts[0] + ', ' + nameParts[1].charAt(0);\n }\n\n formatRangePointDesc(bandKey: number): string {\n let kpiBand: KPIBand = this.plotBandsHighChart.find((band) => band.kpiBandKey === bandKey);\n let rangeStart = this.formatKPIDesc(kpiBand.rangeStart, kpiBand.places);\n let rangeEnd = this.formatKPIDesc(kpiBand.rangeEnd, kpiBand.places);\n let description = `${rangeStart} - ${rangeEnd}`;\n return description;\n }\n\n formatRangeEndDesc(bandKey: number): string {\n let isHigherBetter = this.determineIfHigherIsBetter();\n let kpiBand: KPIBand = this.plotBandsHighChart.find((band) => band.kpiBandKey === bandKey);\n\n let rangeStart = this.formatKPIDesc(kpiBand.rangeStart, kpiBand.places);\n let rangeEnd = this.formatKPIDesc(kpiBand.rangeEnd, kpiBand.places);\n let value = kpiBand.rangeStart ? rangeStart : rangeEnd;\n\n let description: string;\n if (bandKey == 5) {\n description = isHigherBetter ? `≥ ${value}` : `≤ ${value}`;\n } else {\n description = isHigherBetter ? `≤ ${value}` : `≥ ${value}`;\n }\n return description;\n }\n\n setBandDescriptions(): void {\n this.plotBandsHighChart[4].description = this.formatRangeEndDesc(5);\n this.plotBandsHighChart[3].description = this.formatRangePointDesc(4);\n this.plotBandsHighChart[2].description = this.formatRangePointDesc(3);\n this.plotBandsHighChart[1].description = this.formatRangePointDesc(2);\n this.plotBandsHighChart[0].description = this.formatRangeEndDesc(1);\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.setDDls();\n }\n\n setToggleLabel() {\n if (this.showNames) {\n this.switchLabel = 'Show Names';\n } else {\n this.switchLabel = 'Hide Names';\n }\n }\n\n toggleDataLabels(event): void {\n // TODO: stop resetting chart\n this.shouldIgnoreNumberLOs = true;\n this.setToggleLabel();\n this.showNames = event.checked;\n this.drawChart();\n }\n\n zoomInOnBand(band: KPIBand) {\n if (band.kpiBandKey !== this.viewingBandNumber) {\n this.setChartDataForPerformanceBand(band);\n }\n }\n\n mouseEnter(employee: KPIData) {\n let scatterPlot = this.largeCardOptions.chart;\n let employeeName = employee.hierarchyName;\n let seriesData = scatterPlot?.series[0]?.data;\n if (this.parameters.roleName != 'Employee') {\n employeeName = employee.hierarchyName;\n }\n seriesData?.forEach((point) => {\n if (point.name === employeeName) {\n point.setState('hover');\n scatterPlot.tooltip.refresh(point);\n }\n });\n }\n\n getUrlSegment() {\n return this.selectedKPIProfile && this.selectedKPIProfile[0]\n ? this.selectedKPIProfile[0].scoreCardUrlSegment\n : 'branch';\n }\n\n mouseLeave(employee: KPIData) {\n let scatterPlot = this.largeCardOptions.chart;\n let employeeName = employee.hierarchyName;\n let seriesData = scatterPlot.series[0].data;\n if (this.parameters.roleName != 'Employee') {\n employeeName = employee.hierarchyName;\n }\n seriesData.forEach((point) => {\n if (point.name === employeeName) {\n point.setState('normal');\n }\n });\n scatterPlot.tooltip.hide(100);\n }\n\n onSelectionChangeKpi(kpiDescription) {\n this.action = NoDataActionType.filter;\n this.getKPIData();\n }\n\n onSelectionChangeProfile(event) {\n this.action = NoDataActionType.filter;\n this.setSelectedProfile();\n this.getKpiList();\n }\n\n topBottomNameClickHandler(record: KPIData) {\n let urlSegment = this.getUrlSegment();\n let queryParams: object = { id: record.hierarchyIdentifier };\n if (this.parameters.roleName !== 'Employee') {\n queryParams['level'] = this.parameters.roleName;\n }\n\n this._router.navigate(['/performance/scorecards/' + urlSegment], {\n queryParams: queryParams,\n });\n }\n\n onDeSelect(event) {\n this.selectedKPI = [event];\n }\n\n onDeSelectProfile(event) {\n this.selectedKPIProfile = [event];\n }\n\n getFullName(hierarchyName) {\n let nameParts = hierarchyName.split(', ');\n let firstName = nameParts.length > 1 ? nameParts[1] : '';\n let lastName = nameParts[0].length > 1 ? nameParts[0] : '';\n return firstName + ' ' + lastName;\n }\n}\n\nfunction comparePercentOfTarget(a, b) {\n if (a.pctofTarget > b.pctofTarget) {\n return -1;\n }\n if (a.pctofTarget < b.pctofTarget) {\n return 1;\n } else if (a.volume > b.volume) {\n return -1;\n } else if (a.volume < b.volume) {\n return 1;\n }\n return 0;\n}\n","\n\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 { DisplayOptions, ISyncAsOfDateInf } from '../../../shared/interfaces/display-options';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { KPIService } from '../../../shared/services/kpi.service';\nimport { IKPIDataParams, IKPISparklineData, KPI } from '../../../shared/interfaces/kpi-data';\nimport { Router } from '@angular/router';\nimport { NoDataActionType } from '../../../shared/interfaces/no-data';\nimport { IPageHeadline } from '../../../shared/classes/page-title-parameters';\nimport { FiltersService } from '../../../shared/services/filters.service';\nimport { IStaffPosition } from '../../../shared/interfaces/user-location';\nimport {\n IChartParameters,\n SparklineChartOptions,\n} from '../../../shared/classes/sparkline-chart-options';\nimport { ITableColumns } from '../../../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-performance-insights-kpi-sparkline',\n templateUrl: './performance-insights-kpi-sparkline.component.html',\n styleUrls: ['./performance-insights-kpi-sparkline.component.scss'],\n})\nexport class PerformanceInsightsKPISparklineComponent implements OnInit {\n KPIs: KPI[];\n selectedKPI: KPI[];\n displayOptions: DisplayOptions[];\n hFilterJSON: string;\n spco: SparklineChartOptions;\n pageHeadline: IPageHeadline;\n roleName: string;\n hierarchyName: string;\n kpiListSettings: any;\n syncAsOfDateInf: ISyncAsOfDateInf;\n positions: IStaffPosition[];\n selectedPosition: IStaffPosition[];\n kpiProfileSettings: any;\n positionAbbv: string;\n parameters: IKPIDataParams;\n currentPeriodData: IKPISparklineData[];\n fullDataset: IKPISparklineData[];\n paginatedData: IKPISparklineData[];\n action: NoDataActionType;\n hierarchyIdentifier: string;\n\n columnInfoList: ITableColumns[];\n customTableInfo: ICustomTableInfoExtend;\n searchTerm: string;\n\n constructor(\n private _KPIService: KPIService,\n private _router: Router,\n private reusableFunctions: ReusableFunctions,\n private _filterService: FiltersService,\n private _reportService: ReportingService\n ) {}\n\n ngOnInit() {\n this.selectedPosition = [];\n this.paginatedData = [];\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Employees Ranked per KPI',\n linkArray: [\n {\n moduleLink: 'performance/insights',\n linkTitle: 'performance insights',\n showLink: true,\n },\n ],\n };\n this.searchTerm = '';\n\n this.kpiListSettings = {\n singleSelection: true,\n text: 'Select KPI',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'clientKPIMatrixDescription',\n primaryKey: 'kpiMatrixKey',\n enableFilterSelectAll: false,\n };\n\n this.kpiProfileSettings = {\n singleSelection: true,\n text: 'Select KPI profile',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'position',\n primaryKey: 'positionAbbv',\n enableFilterSelectAll: false,\n };\n\n this.currentPeriodData = [];\n this.spco = new SparklineChartOptions(this.reusableFunctions);\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this._router.url);\n this.setDisplayOptionsSelected();\n this.initiateTableProperties();\n this.setDDls();\n }\n\n initiateTableProperties() {\n this.columnInfoList = [\n {\n fieldId: 'rank',\n fieldName: 'Rank',\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n width: 75,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: this.hierarchyName,\n fieldName: this.roleName,\n backUpFieldId: 'hierarchyField',\n isHyperlink: true,\n cellClickEventType: 'hyperlink',\n hyperlinkPproperties: {\n hyperlinkUrlBase: '/performance/scorecards/',\n hyperlinkUrlSegment: '',\n queryParams: {},\n queryParamsInfList: [],\n },\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 160,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'friendlyTenure',\n fieldName: 'Tenure',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'string',\n decimalPlaces: 0,\n width: 90,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'wgtKPI',\n fieldName: 'placeholder',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 0,\n width: 90,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'wgtTarget',\n fieldName: 'Target',\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 2,\n width: 100,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'wgtPct',\n fieldName: '% of Target',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'percent',\n decimalPlaces: 0,\n width: 110,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'scoreValuesSparkline',\n fieldName: 'Per Month',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 195,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'wgtKPI',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'clientKPIMatrixDescription',\n datatype: null,\n precision: null,\n },\n },\n },\n {\n fieldId: 'volumeSparkline',\n fieldName: 'Volume Trend',\n fieldOrder: 7,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 195,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'loanVolume',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'associatedMilestone',\n datatype: 'currency',\n precision: 0,\n },\n },\n },\n {\n fieldId: 'loanVolume',\n fieldName: 'Volume',\n fieldOrder: 8,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'currency',\n decimalPlaces: 0,\n width: 120,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'unitsSparkline',\n fieldName: 'Units Trend',\n fieldOrder: 9,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 195,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'loanCount',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'associatedMilestone',\n datatype: 'number',\n precision: 0,\n },\n },\n },\n {\n fieldId: 'loanCount',\n fieldName: 'Units',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 10,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 0,\n width: 80,\n filterable: false,\n filter: 'numeric',\n },\n ];\n\n this.customTableInfo = {\n tableId: 'performance-insights-kpi-sparkline-table',\n tableHeight: 600,\n hasData: false,\n isDataReady: false,\n columnInfoList: this.columnInfoList,\n dataSet: [],\n searchTerm: this.searchTerm,\n action: NoDataActionType.pageStart,\n title: this.pageHeadline.pageTitle,\n bandColorList: [],\n dataHandleInUiSide: true,\n showSummary: false,\n };\n }\n\n setSelectedProfile() {\n let defaultProfileAbbv = 'LO';\n if (!(this.selectedPosition && this.selectedPosition.length > 0)) {\n let defaultProfile = this.positions.find(\n (pos) => pos.positionAbbv === defaultProfileAbbv\n );\n if (defaultProfile) {\n this.selectedPosition = [defaultProfile];\n }\n }\n this.positionAbbv = this.selectedPosition[0].positionAbbv;\n }\n\n setDDls() {\n if (this.roleName && this.roleName === 'Employee') {\n this._filterService.getPosition(this.parameters).subscribe((res) => {\n this.positions = res;\n if (res && res.length > 0) {\n this.setSelectedProfile();\n this.getKpiList();\n }\n });\n } else {\n this.selectedPosition = [];\n this.positionAbbv = 'LO';\n this.getKpiList();\n }\n }\n\n getKpiList() {\n if (this.roleName.toLowerCase() === 'employee') {\n this.parameters.staffingKey = this.selectedPosition[0].staffingKey.toString();\n this.parameters.positionAbbv = this.selectedPosition[0].positionAbbv;\n } else {\n this.parameters.staffingKey = '0';\n }\n\n this._KPIService.getKPIScorecardSelection(this.parameters).subscribe(\n (data) => {\n if (data && data.length > 0) {\n this.KPIs = data;\n let selectedKpi;\n if (this.selectedKPI && this.selectedKPI.length > 0) {\n selectedKpi = this.KPIs.find(\n (kpi) => kpi.kpiMatrixKey === this.selectedKPI[0].kpiMatrixKey\n );\n }\n\n if (selectedKpi) {\n this.selectedKPI = [selectedKpi];\n } else {\n this.selectedKPI = [this.KPIs[0]];\n }\n\n this.getKPIData();\n }\n ///// else??\n },\n (err) => {\n throw new Error(err);\n }\n );\n }\n\n setDisplayOptionsSelected(): void {\n let asOfDateId = 'scorecardAsOf';\n let syncWithDisplayOptionId = 'dateRange_Q_Y_3m_6m_12m';\n this.syncAsOfDateInf = {\n asOfDateId: asOfDateId,\n syncWithDisplayOptionId: syncWithDisplayOptionId,\n };\n let fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === syncWithDisplayOptionId.toLowerCase()\n ).selectedOptions;\n let loanType = this.displayOptions.find(\n (item) => item.optionKey === 'loanCategory'\n ).selectedOptions;\n let loanPurpose = this.displayOptions.find(\n (item) => item.optionKey === 'loanPurpose'\n ).selectedOptions;\n let channel = this.displayOptions.find(\n (item) => item.optionKey === 'channel'\n ).selectedOptions;\n this.roleName = this.displayOptions.find(\n (item) => item.optionKey === 'groupByRoles'\n ).selectedOptions;\n let asOf = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === asOfDateId.toLowerCase()\n ).selectedOptions;\n this.hierarchyName =\n this.roleName.toLowerCase() === 'employee' ? 'employee' : 'hierarchyName';\n this.hierarchyIdentifier =\n this.roleName.toLowerCase() === 'employee'\n ? 'employeeIdentifier'\n : 'hierarchyIdentifier';\n\n this.parameters = {\n fromDatePeriod: fromDatePeriod,\n kpiMatrix: '',\n loanType: loanType,\n loanPurpose: loanPurpose,\n channel: channel,\n hFilterJSON: this.hFilterJSON,\n roleName: this.roleName,\n ymc: asOf,\n };\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.parameters.hFilterJSON = this.hFilterJSON;\n this.getKPIData();\n }\n\n contentChanged(event: IKPISparklineData[]) {\n this.setColumnFormat();\n this.updateTableColumnProperties();\n this.paginatedData = event;\n let chartParams: IChartParameters = {\n paginatedData: this.paginatedData,\n fullDataset: this.fullDataset,\n toGroupByColumnHeader: this.hierarchyIdentifier,\n calculateChange: true,\n columnList: this.columnInfoList,\n chartIdColumn: 'rank',\n chartType: 'area',\n };\n\n setTimeout(() => {\n this.spco.setCharts(chartParams);\n }, 0);\n }\n updateTableColumnProperties() {\n let hierarchyFieldInf = this.columnInfoList.find(\n (colInf) => colInf.backUpFieldId === 'hierarchyField'\n );\n\n if (hierarchyFieldInf) {\n hierarchyFieldInf.fieldId = this.hierarchyName;\n hierarchyFieldInf.fieldName = this.roleName;\n\n if (hierarchyFieldInf.hyperlinkPproperties) {\n hierarchyFieldInf.hyperlinkPproperties.queryParams = {};\n hierarchyFieldInf.hyperlinkPproperties.hyperlinkUrlSegment = this.getUrlSegment();\n hierarchyFieldInf.hyperlinkPproperties.queryParamsInfList = [\n {\n paramId: 'id',\n paramDataField: this.hierarchyIdentifier,\n },\n ];\n }\n\n if (this.roleName !== 'Employee') {\n hierarchyFieldInf.hyperlinkPproperties.queryParams['level'] = this.roleName;\n }\n }\n }\n\n setColumnFormat() {\n let columnsTobeFormatted = ['wgtKPI', 'wgtTarget'];\n columnsTobeFormatted.forEach((fieldId) => {\n let valueColumn = this.columnInfoList.find((col) => col.fieldId === fieldId);\n if (valueColumn) {\n if (valueColumn.isDynamicColumn) {\n valueColumn.fieldName = this.selectedKPI[0].kpiDisplayShort;\n }\n let format = this.currentPeriodData[0]?.format ?? valueColumn.dataType;\n format = format === 'percentage' ? 'percent' : format;\n let precision = this.currentPeriodData[0]?.precision ?? valueColumn.decimalPlaces;\n\n valueColumn.dataType = format as any;\n valueColumn.decimalPlaces = precision;\n }\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 getKPIData(): any {\n this.parameters.kpiMatrix =\n this.selectedKPI.length > 0 ? this.selectedKPI[0].kpiMatrixKey.toString() : '';\n this.customTableInfo = this.resetTableData();\n\n this._KPIService.getSparklineData(this.parameters).subscribe(\n (data) => {\n this.fullDataset = data;\n this.currentPeriodData = this.reusableFunctions.getFriendlyTenure(\n this.spco.groupDataByColumn(data, 'isCurrentPeriod', true)\n );\n this.customTableInfo.dataSet = this.currentPeriodData;\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n true,\n true,\n this.action,\n this.searchTerm\n );\n },\n (error) => {\n this.customTableInfo.dataSet = [];\n this.customTableInfo = this._reportService.refreshCustomMatTable(\n this.customTableInfo,\n false,\n true,\n NoDataActionType.error,\n this.searchTerm\n );\n }\n );\n }\n\n getUrlSegment() {\n return this.selectedPosition && this.selectedPosition[0]\n ? this.selectedPosition[0].urlSegment.toLowerCase()\n : 'branch';\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.updateTableColumnProperties();\n this.setDDls();\n }\n\n cellClickedEvent(event: ICellClickEventInfo) {\n let fieldInfo = event.columnInfo;\n let dataItem = event.cellData;\n let hyperlinkPproperties = fieldInfo.hyperlinkPproperties;\n if (hyperlinkPproperties) {\n hyperlinkPproperties.queryParamsInfList.forEach((param) => {\n hyperlinkPproperties.queryParams[param.paramId] = dataItem[param.paramDataField];\n });\n\n this._router.navigate(\n [hyperlinkPproperties.hyperlinkUrlBase, hyperlinkPproperties.hyperlinkUrlSegment],\n { queryParams: hyperlinkPproperties.queryParams }\n );\n }\n }\n\n onSelectionChange(selectedKPI: KPI) {\n this.selectedKPI = [\n this.KPIs.find(\n (kpi) => kpi.clientKPIMatrixDescription === selectedKPI.clientKPIMatrixDescription\n ),\n ];\n this.getKPIData();\n }\n\n onSelectionChangeProfile(event) {\n this.setSelectedProfile();\n this.getKpiList();\n }\n\n onDeSelect(event) {\n this.selectedKPI = [event];\n }\n\n onDeSelectProfile(event) {\n this.selectedPosition = [event];\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { KPIService } from 'app/modules/shared/services/kpi.service';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport {\n ClientKPIConfigWebModel,\n ClientKPIBandDataModel,\n BandInfo,\n ClientKPIWebModelComplete,\n} from 'app/modules/shared/interfaces/kpi-data';\nimport { forkJoin } from 'rxjs';\nimport { NegativeToParensPipe } from 'app/modules/shared/pipes/negative-to-parens.pipe';\nimport { CurrencyPipe } from '@angular/common';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\nimport { saveAs } from 'file-saver';\nimport {\n ITableColumnProperties,\n ITableDataProperties,\n} from '../../../shared/components/common-kendo-table/common-kendo-table.component';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from '../../../shared/interfaces/no-data';\nimport {\n IQuickReportExport,\n IRow,\n ITableColumns,\n} from '../../../reports/interfaces/reporting-data';\nimport { IScorecardKPIInfo } from '../../../settings/components/kpi-scorecard/kpi-scorecard-models';\nimport { CommonKendoTableService } from '../../../shared/services/common-kendo-table.service';\n\n@Component({\n selector: 'app-performance-kpi',\n templateUrl: './performance-kpi.component.html',\n styleUrls: ['./performance-kpi.component.scss'],\n})\nexport class PerformanceKpiComponent implements OnInit {\n sortAscending: boolean = true;\n config: ClientKPIConfigWebModel;\n kpiMasterList: IScorecardKPIInfo[];\n kpiConfigList: IScorecardKPIInfo[];\n kpiTableColumnProperties: ITableColumnProperties;\n kpiTableDataProperties: ITableDataProperties;\n searchTerm: string;\n action: NoDataActionType;\n noDataType: NoDataTypes;\n\n constructor(\n private kpiService: KPIService,\n private negativeToParensPipe: NegativeToParensPipe,\n private reusableFunctions: ReusableFunctions,\n private currencyPipe: CurrencyPipe,\n private reportingService: ReportingService,\n private commKendoTbleService: CommonKendoTableService\n ) {}\n\n ngOnInit() {\n // TODO: clean up the formatting and Logic\n this.searchTerm = '';\n this.action = NoDataActionType.pageStart;\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: this.searchTerm,\n componentTitle: 'KPIs',\n inputSource: NoDataSourceType.table,\n };\n\n this.initiateTable();\n\n forkJoin(\n this.kpiService.getCurrentKPIConfiguration(),\n this.kpiService.getKPIMasterList()\n ).subscribe(([config, list]) => {\n this.config = config;\n this.kpiMasterList = list;\n this.kpiConfigList = this.kpiMasterList.filter((kpi) => {\n return this.doesKPIMasterKeyExistInConfig(kpi);\n });\n\n this.sortKPIs();\n this.populatePerformanceBands();\n this.updateKPIGrid();\n });\n }\n\n updateKPIGrid() {\n this.kpiTableDataProperties.isDataLoaded = false;\n this.kpiTableDataProperties.hasData = false;\n let data: IScorecardKPIInfo[] = this.kpiConfigList;\n\n data.forEach((kpi, index) => {\n kpi.targetFormatted = this.getTarget(index);\n kpi.poor = this.getUnacceptableRange(index);\n kpi.fair = this.getBelowAverageRange(index);\n kpi.good = this.getAcceptableRange(index);\n kpi.veryGood = this.getAboveAverageRange(index);\n kpi.excellent = this.getExceptionalRange(index);\n kpi.weightedByLA = kpi.isWeightedByLA ? 'Yes' : 'No';\n });\n\n if (this.searchTerm && this.searchTerm.length > 0) {\n data = this.commKendoTbleService.searchHandler(\n data,\n this.kpiTableColumnProperties.columnProperties,\n this.searchTerm\n );\n }\n\n this.kpiTableDataProperties.gridData = data;\n this.kpiTableDataProperties.hasData = data.length > 0;\n this.kpiTableDataProperties.isDataLoaded = true;\n this.kpiTableDataProperties = Object.assign({}, this.kpiTableDataProperties);\n }\n\n initiateTable() {\n this.kpiTableDataProperties = {\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 kpiTableColumnProperties: ITableColumns[] = [\n {\n fieldId: 'kpiDescription',\n fieldName: 'KEY PERFORMANCE INDICATOR',\n isHyperlink: false,\n fieldOrder: 0,\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: 'kpiCategory',\n fieldName: 'Category',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 110,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'weightedByLA',\n fieldName: 'Weighted by Loan Amount',\n isHyperlink: false,\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 160,\n filterable: false,\n filter: 'text',\n allowSearch: true,\n },\n {\n fieldId: 'targetFormatted',\n fieldName: 'TARGET',\n isHyperlink: false,\n fieldOrder: 3,\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: 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: '#fddbdb',\n headerBackgroundColor: '#fddbdb',\n allowSearch: true,\n },\n {\n fieldId: 'fair',\n fieldName: 'FAIR',\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: '#fff9e7',\n headerBackgroundColor: '#fff9e7',\n allowSearch: true,\n },\n {\n fieldId: 'good',\n fieldName: 'GOOD',\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: '#e0f3f3',\n headerBackgroundColor: '#e0f3f3',\n allowSearch: true,\n },\n {\n fieldId: 'veryGood',\n fieldName: 'VERY GOOD',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 7,\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: 8,\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.kpiTableColumnProperties = {\n columnProperties: kpiTableColumnProperties,\n };\n }\n\n populatePerformanceBands(): any {\n this.kpiConfigList.forEach((clientKPI, i) => {\n this.config.clientKPIData.find((kpi) => {\n if (this.KPIsAreEqual(kpi, clientKPI)) {\n clientKPI.isWeightedByLA = kpi.isWeightedByLA;\n\n clientKPI.bandInfo = this.getBandInfoFromConfigData(kpi.performanceBands);\n clientKPI.bandInfo.target = kpi.target;\n return true;\n }\n });\n });\n }\n\n getBandInfoFromConfigData(performanceBands: ClientKPIBandDataModel[]): BandInfo {\n return {\n unacceptableStart: performanceBands[0].rangeEnd,\n belowAverageStart: performanceBands[1].rangeStart,\n belowAverageEnd: performanceBands[1].rangeEnd,\n acceptableStart: performanceBands[2].rangeStart,\n acceptableEnd: performanceBands[2].rangeEnd,\n aboveAverageStart: performanceBands[3].rangeStart,\n aboveAverageEnd: performanceBands[3].rangeEnd,\n exceptionalStart: performanceBands[4].rangeStart,\n };\n }\n\n doesKPIMasterKeyExistInConfig(kpi: IScorecardKPIInfo): any {\n let exists = false;\n this.config.clientKPIData.find((clientKPI) => {\n if (this.KPIsAreEqual(clientKPI, kpi)) {\n exists = true;\n return true;\n }\n });\n return exists;\n }\n\n KPIsAreEqual(clientKPI: ClientKPIWebModelComplete, kpi: IScorecardKPIInfo): any {\n return (\n clientKPI.kpiMasterKey === kpi.kpiMasterKey &&\n (clientKPI.kpiMilestoneKey === null\n ? true\n : clientKPI.kpiMilestoneKey === kpi.kpiMilestoneKey) &&\n (clientKPI.kpiMilestoneStaffingKey == null\n ? true\n : clientKPI.kpiMilestoneStaffingKey === kpi.kpiMilestoneStaffingKey)\n );\n }\n\n getTarget(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.target,\n this.kpiConfigList[index].precision\n ),\n index\n );\n }\n\n getBelowAverageRange(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return (\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.belowAverageStart,\n this.kpiConfigList[index].precision\n ),\n index\n ) +\n ' - ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.belowAverageEnd,\n this.kpiConfigList[index].precision\n ),\n index\n )\n );\n }\n\n getAboveAverageRange(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return (\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.aboveAverageStart,\n this.kpiConfigList[index].precision\n ),\n index\n ) +\n ' - ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.aboveAverageEnd,\n this.kpiConfigList[index].precision\n ),\n index\n )\n );\n }\n\n getAcceptableRange(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return (\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.acceptableStart,\n this.kpiConfigList[index].precision\n ),\n index\n ) +\n ' - ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.acceptableEnd,\n this.kpiConfigList[index].precision\n ),\n index\n )\n );\n }\n\n getUnacceptableRange(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n let bestScoreHighest =\n this.kpiConfigList[index].bestScore.toLocaleLowerCase() === 'highest';\n return bestScoreHighest\n ? '<= ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.unacceptableStart,\n this.kpiConfigList[index].precision\n ),\n index\n )\n : '>= ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.unacceptableStart,\n this.kpiConfigList[index].precision\n ),\n index\n );\n }\n\n getExceptionalRange(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n let bestScoreHighest =\n this.kpiConfigList[index].bestScore.toLocaleLowerCase() === 'highest';\n return bestScoreHighest\n ? '>= ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.exceptionalStart,\n this.kpiConfigList[index].precision\n ),\n index\n )\n : '<= ' +\n this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.exceptionalStart,\n this.kpiConfigList[index].precision\n ),\n index\n );\n }\n\n getBelowAverageEnd(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.belowAverageEnd,\n this.kpiConfigList[index].precision\n ),\n index\n );\n }\n\n getAboveAverageStart(index: number): string {\n if (!this.kpiConfigList[index].bandInfo) {\n return '';\n }\n return this.formatKPI(\n this.reusableFunctions.padToMaxPrecision(\n this.kpiConfigList[index].bandInfo.aboveAverageStart,\n this.kpiConfigList[index].precision\n ),\n index\n );\n }\n\n exportData() {\n const exportRequest: IQuickReportExport = {\n reportDataSource: 'kpi-targets-ranges',\n columns: [\n {\n columnId: 1,\n columnName: 'KEY PERFORMANCE INDICATOR',\n },\n {\n columnId: 2,\n columnName: 'CATEGORY',\n },\n {\n columnId: 10,\n columnName: 'WEIGHTED BY LOAN AMOUNT',\n },\n {\n columnId: 3,\n columnName: 'TARGET',\n },\n {\n columnId: 4,\n columnName: 'POOR',\n },\n {\n columnId: 5,\n columnName: 'FAIR',\n },\n\n {\n columnId: 6,\n columnName: 'GOOD',\n },\n\n {\n columnId: 7,\n columnName: 'VERY GOOD',\n },\n\n {\n columnId: 8,\n columnName: 'EXCELLENT',\n },\n ],\n rows: [],\n };\n let kpiIndex = 0;\n for (const kpi of this.kpiConfigList) {\n const row: IRow = {\n rowId: kpiIndex + 1,\n rowData: [\n { columnId: 1, dataType: 'String', value: kpi.kpiDescription },\n { columnId: 2, dataType: 'String', value: kpi.kpiCategory },\n { columnId: 10, dataType: 'String', value: kpi.isWeightedByLA ? 'Yes' : 'No' },\n { columnId: 3, dataType: 'String', value: this.getTarget(kpiIndex) },\n {\n columnId: 4,\n dataType: 'String',\n value: this.getUnacceptableRange(kpiIndex)\n .replace('', '>=')\n .replace('', '<='),\n },\n { columnId: 5, dataType: 'String', value: this.getBelowAverageRange(kpiIndex) },\n { columnId: 6, dataType: 'String', value: this.getAcceptableRange(kpiIndex) },\n { columnId: 7, dataType: 'String', value: this.getAboveAverageRange(kpiIndex) },\n {\n columnId: 8,\n dataType: 'String',\n value: this.getExceptionalRange(kpiIndex)\n .replace('', '>=')\n .replace('', '<='),\n },\n ],\n };\n exportRequest.rows.push(row);\n kpiIndex++;\n }\n this.reportingService.quickReportExportTo(exportRequest, 'excel').subscribe((res) => {\n if (res) {\n let dateTime = this.reusableFunctions.getCurrentDateTimeStamp();\n let reportName = exportRequest.reportDataSource + '_' + dateTime + '_.xlsx';\n saveAs(res, reportName);\n }\n });\n }\n\n formatKPI(value: string, index: number): string {\n if (this.kpiConfigList[index].isPercentage) {\n return this.negativeToParensPipe.transform(value + '%');\n } else if (this.kpiConfigList[index].kpiFormat === 'currency') {\n return this.currencyPipe.transform(value, '$', 'symbol-narrow', '1.0-0');\n } else {\n return this.negativeToParensPipe.transform(value);\n }\n }\n\n private sortKPIs() {\n this.kpiConfigList.sort((a, b) => {\n let aCat = a.kpiCategory.toLowerCase();\n let bCat = b.kpiCategory.toLowerCase();\n if (aCat < bCat) {\n if (this.sortAscending) {\n return -1;\n } else {\n return 1;\n }\n }\n if (aCat > bCat) {\n if (this.sortAscending) {\n return 1;\n } else {\n return -1;\n }\n } else {\n let aDesc = a.kpiDescription.toLowerCase();\n let bDesc = b.kpiDescription.toLowerCase();\n if (aDesc < bDesc) {\n if (this.sortAscending) {\n return -1;\n } else {\n return 1;\n }\n }\n if (aDesc > bDesc) {\n if (this.sortAscending) {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 0;\n }\n }\n });\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","\n\n
\n
\n
\n Target and performance ranges for active KPIs\n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-reports',\n templateUrl: './performance-reports.component.html',\n styleUrls: ['./performance-reports.component.scss'],\n})\nexport class PerformanceReportsComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","\n\n\n

\n This page is a placeholder.\n

\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-scorecards',\n templateUrl: './performance-scorecards.component.html',\n styleUrls: ['./performance-scorecards.component.scss'],\n})\nexport class PerformanceScorecardsComponent implements OnInit {\n constructor() {}\n ngOnInit() {}\n}\n","\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-upgrade',\n templateUrl: './performance-upgrade.component.html',\n styleUrls: ['./performance-upgrade.component.scss'],\n})\nexport class PerformanceUpgradeComponent implements OnInit {\n headline: string;\n shortOverview: string;\n selligPointHeader: string;\n logoPlaceholder: string;\n moduleShortDescription: string;\n backgroundColor: string;\n\n constructor() {}\n ngOnInit() {\n this.setUpgradePage();\n }\n\n setUpgradePage() {\n this.headline =\n 'Rise up! The ultimate coaching resource and tool for every level of the organization';\n this.shortOverview = 'What gets measured, gets better.';\n this.selligPointHeader =\n 'Visualize performance of your people and capitalize on the human potential within.';\n this.logoPlaceholder = 'src/assets/images/upgrade_thumbnails/performance_upgrade.png';\n this.moduleShortDescription =\n 'Set your Key Performance Indicators and measure your producers, operations, and branches to the expectations. Who is outperforming expectations? Who needs coaching?';\n this.backgroundColor = '#ffeded';\n }\n}\n","\n\n\n\n","import { NoDataActionType } from '../interfaces/no-data';\nimport { ITableTdItems, IRowItems } from '../interfaces/card-data';\nimport { ICardlistData } from '../components/card-list/card-list.component';\nimport { ReusableFunctions } from './reusable-functions';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport interface IScorecardKPI {\n clientKPIMatrixDescription: string;\n weight: number;\n monthlyValue: number;\n previousMonthlyValue: number;\n monthlyDiff: number;\n precision: number;\n isPercentage: boolean;\n aggDiff: number;\n aggValue: number;\n target: number;\n previousAggValue: number;\n format: 'number' | 'currency' | 'percentage' | 'string';\n bestScore: 'Lowest' | 'Highest';\n}\n\nexport interface IScorecardKpiParams {\n cardId: string;\n title: string;\n data: any;\n action: NoDataActionType;\n searchTerm: string;\n cardDrilldownUrl: string;\n hasAccess?: boolean;\n hideViewAll?: boolean;\n isDataReady?: boolean;\n hasData?: boolean;\n styleSet?: object;\n}\n\nexport class ScorecardKpicardDataHandler {\n constructor(private _reusableFunctions: ReusableFunctions, private _sanitizer: DomSanitizer) {}\n\n initializeCards(params: IScorecardKpiParams): ICardlistData {\n return {\n cardId: params.cardId,\n cardTitle: params.title,\n dataTableData: [],\n hasData: false,\n routerPath: params.cardDrilldownUrl,\n searchTerm: params.searchTerm,\n action: params.action,\n outerTableHeight: '440px',\n hideViewAll: params.hideViewAll ? params.hideViewAll : true,\n isDataReady: params.isDataReady ? params.isDataReady : false,\n };\n }\n\n handleKPILargeCards(\n largeCard: ICardlistData,\n data: IScorecardKPI[],\n fromDatePeriod: string,\n kpiTableColumnInf: ITableTdItems[] = []\n ) {\n let kpiTableInfo: ITableTdItems[] = [];\n if (kpiTableColumnInf.length > 0) {\n kpiTableInfo = kpiTableColumnInf;\n } else {\n kpiTableInfo = [\n {\n headerTitle: '',\n fieldId: 'weight',\n isHyperlinked: false,\n isIconColumn: true,\n iconClass: 'fas fa-weight-hanging',\n headerStyle: {\n 'text-align': 'center',\n color: '#333333',\n },\n style: {\n 'font-weight': '500',\n 'text-align': 'center',\n 'font-size': '12px',\n 'padding-right': '8px',\n width: '3%',\n },\n },\n {\n headerTitle: 'KPI',\n fieldId: 'clientKPIMatrixDescription',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'left',\n color: '#333333',\n },\n style: {\n 'font-weight': '500',\n 'text-align': 'left',\n 'font-size': '14px',\n width: '20%',\n },\n },\n {\n headerTitle: 'Target',\n fieldId: 'target',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '12%',\n },\n },\n {\n headerTitle: 'MTD',\n fieldId: 'monthlyValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '13%',\n },\n },\n {\n headerTitle: 'Prior MTD',\n fieldId: 'monthlyValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n showIndicator: true,\n compareFieldId: 'previousMonthlyValue',\n diffField: 'monthlyDiff',\n },\n {\n headerTitle: fromDatePeriod === '12m' ? '12mo' : 'YTD',\n fieldId: 'aggValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n },\n {\n headerTitle: fromDatePeriod === '12m' ? 'Prev 12mo' : 'Prev YTD',\n fieldId: 'aggValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n showIndicator: true,\n compareFieldId: 'previousAggValue',\n diffField: 'aggDiff',\n },\n ];\n }\n let hasData = false;\n if (data.length > 0) {\n hasData = true;\n let tableRowItems: IRowItems[] = [];\n data.forEach((item) => {\n let dataItem = Object.assign({}, item);\n let tableTdItems: ITableTdItems[] = [];\n if (kpiTableInfo) {\n kpiTableInfo.forEach((rowInf) => {\n let rowInfCopy = Object.assign({}, rowInf);\n let value = dataItem[rowInfCopy.fieldId];\n rowInfCopy.headerStyle['text-transform'] = 'uppercase';\n\n if (value != null && typeof value === 'number') {\n if (rowInfCopy.showIndicator) {\n let comparisonInf = this._reusableFunctions.calculateComparisonPercentage(\n dataItem[rowInfCopy.fieldId],\n dataItem[rowInfCopy.compareFieldId]\n );\n let caretInfoMonthly = this._reusableFunctions.getCaret(\n comparisonInf.percentage,\n dataItem.bestScore === 'Lowest' ? true : false,\n null,\n comparisonInf.isComparable,\n 2\n );\n rowInfCopy.indicatorIcon = caretInfoMonthly.ng_caret_icon;\n rowInfCopy.indicatorColor = caretInfoMonthly.color;\n rowInfCopy.svgData = this._sanitizer.bypassSecurityTrustHtml(\n caretInfoMonthly.svgData\n );\n value = caretInfoMonthly.comparison;\n } else if (\n dataItem.format === 'currency' &&\n (rowInfCopy.headerTitle.toLowerCase() === 'mtd' ||\n rowInfCopy.headerTitle.toLowerCase() === 'ytd' ||\n rowInfCopy.headerTitle.toLowerCase() === '12mo' ||\n rowInfCopy.fieldId.toLowerCase() === 'target')\n ) {\n value = this._reusableFunctions.formatMoney(\n dataItem[rowInfCopy.fieldId],\n dataItem.precision\n );\n } else {\n let isNegative = value < 0;\n\n if (isNegative) {\n value = Math.abs(value);\n }\n\n value = value.toLocaleString(undefined, {\n maximumFractionDigits: dataItem.precision,\n minimumFractionDigits: dataItem.precision,\n });\n\n if (dataItem.isPercentage || dataItem.format == 'percentage') {\n value = value + '%';\n }\n\n if (isNegative) {\n value = '(' + value + ')';\n }\n }\n }\n rowInfCopy.value = value;\n\n if (rowInfCopy.isHyperlinked) {\n rowInfCopy.urlSegment = '';\n rowInfCopy.routerLink = '';\n rowInfCopy.hasAccess = false;\n // TODO: add Access if drilldowns available\n //this._userAccessService.hasAccessToPage(\n //rowInfCopy.routerLink + rowInfCopy.urlSegment\n //);\n }\n\n if (rowInfCopy.isIconColumn) {\n rowInfCopy.iconClass =\n dataItem[rowInfCopy.fieldId] && dataItem[rowInfCopy.fieldId] > 0\n ? rowInfCopy.iconClass\n : '';\n }\n tableTdItems.push(rowInfCopy);\n });\n\n let weightCellInf = tableTdItems.find((item) => item.fieldId === 'weight');\n if (weightCellInf && weightCellInf.value) {\n let clientKPIMatrixDescriptionInf = tableTdItems.find(\n (item) => item.fieldId === 'clientKPIMatrixDescription'\n );\n if (clientKPIMatrixDescriptionInf && clientKPIMatrixDescriptionInf.value) {\n weightCellInf.tooltipText =\n clientKPIMatrixDescriptionInf.value +\n ' is configured as ' +\n parseFloat(weightCellInf.value).toFixed(0) +\n '% of this weighted score.';\n }\n }\n\n tableRowItems.push({\n tdList: tableTdItems,\n });\n }\n });\n\n largeCard.dataTableData = tableRowItems;\n }\n\n largeCard.hasData = hasData;\n largeCard.isDataReady = true;\n return Object.assign({}, largeCard);\n }\n}\n","\n
\n
\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, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport * as Highcharts from 'highcharts';\nimport { IProductionPurposeMixPieChartData } from '../../../performance/services/performance-scorecard.service';\n\n@Component({\n selector: 'scorecards-product-purpose-mix-card',\n templateUrl: './scorecards-product-purpose-mix-card.component.html',\n styleUrls: ['./scorecards-product-purpose-mix-card.component.scss'],\n})\nexport class ScorecardsProductPurposeMixCardComponent implements OnInit, OnChanges {\n constructor() {}\n @Input() pieChartsData: IProductionPurposeMixPieChartData;\n @Input() pageId: string;\n\n hasData: boolean;\n isDataLoaded: boolean;\n noDataDonutChart;\n\n ngOnInit() {\n this.hasData = false;\n this.isDataLoaded = false;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['pieChartsData']) {\n let currentData: IProductionPurposeMixPieChartData =\n changes['pieChartsData'].currentValue;\n if (currentData.isLoadingProductMix && currentData.isLoadingPurposeMix) {\n this.isDataLoaded = false;\n } else {\n this.isDataLoaded = true;\n }\n\n if (this.isDataLoaded && currentData.productMixChartLeft) {\n let chartTopLeft = new Highcharts.Chart(\n this.pageId + 'chart-top-left',\n currentData.productMixChartLeft\n );\n }\n if (this.isDataLoaded && currentData.productMixChartRight) {\n let chartTopRight = new Highcharts.Chart(\n this.pageId + 'chart-top-right',\n currentData.productMixChartRight\n );\n }\n if (this.isDataLoaded && currentData.purposeMixChartLeft) {\n let chartBotLeft = new Highcharts.Chart(\n this.pageId + 'chart-bot-left',\n currentData.purposeMixChartLeft\n );\n }\n if (this.isDataLoaded && currentData.purposeMixChartRight) {\n let chartBotRght = new Highcharts.Chart(\n this.pageId + 'chart-bot-right',\n currentData.purposeMixChartRight\n );\n }\n\n this.noDataDonutChart = currentData.noDataType;\n this.hasData = currentData.hasData;\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ILargeCardInteriorOptions } from '../../interfaces/card-data';\n\n@Component({\n selector: 'scorecards-funded-production-card',\n templateUrl: './scorecards-funded-production-card.component.html',\n styleUrls: ['./scorecards-funded-production-card.component.scss'],\n})\nexport class ScorecardsFundedProductionCardComponent implements OnInit {\n constructor() {}\n\n @Input() largeCardInteriorOptions: ILargeCardInteriorOptions;\n\n ngOnInit() {\n //this.largeCardInteriorOptions = {\n // componentTitle: '',\n // isDataReady: false,\n // hasData: false,\n // showTitle: true,\n // uniqueId: '',\n // chartTitleData: null,\n // accessToUrl: '',\n //};\n }\n}\n","\n","\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n {{ detailsCard.entity }}\n
\n
\n
\n
\n {{ detailsCard.entityTopLeftTitle }}\n
\n
\n {{ detailsCard.entityTopLeftValue }}\n
\n
\n
\n
\n {{ detailsCard.entityTopRightTitle }}\n
\n
\n {{ detailsCard.entityTopRightValue }}\n
\n
\n
\n
\n {{ detailsCard.entityBotLeftTitle }}\n
\n
\n {{ detailsCard.entityBotLeftValue }}\n
\n
\n
\n
\n {{ detailsCard.entityBotRightTitle }}\n
\n
\n {{ detailsCard.entityBotRightValue }}\n
\n
\n
\n
\n
\n\n
\n
\n
\n {{ detailsCard.rankTypeTitle }}\n
\n
\n
\n
SCORE
\n
\n
\n {{ detailsCard.scoreValue }}\n
\n
\n
out of
\n
{{ detailsCard.scoreValueOutOf }}
\n
\n
\n
\n
\n
RANK
\n
\n
\n {{ detailsCard.rankValue }}\n
\n
\n
out of
\n
{{ detailsCard.rankValueOutOf }}
\n
\n
\n
\n
\n
\n
\n
\n {{ detailsCard.productTypeTitle }}\n
\n
\n
\n
VOL RANK
\n
\n
\n {{ detailsCard.productVolumeValue }}\n
\n
\n
out of
\n
{{ detailsCard.productVolumeValueOutOf }}
\n
\n
\n
\n
\n
UNIT RANK
\n
\n
\n {{ detailsCard.productUnitsValue }}\n
\n
\n
out of
\n
{{ detailsCard.productUnitsValueOutOf }}
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n \n \n\n
\n \n
\n
\n \n
\n
\n","import { Component, Input, OnChanges, OnInit, SimpleChange } from '@angular/core';\nimport { SmallCardData } from '../../interfaces/card-data';\nimport { NoDataActionType, NoDataSourceType, NoDataTypes } from '../../interfaces/no-data';\nexport interface IScorecardDetailsCardData {\n entityIdentifier: string;\n entityAbbr: string;\n action: NoDataActionType;\n hasData: boolean;\n isDataLoading: boolean;\n entity: string;\n scoreCardType: 'employee' | 'third-party' | 'location';\n entityPicture: object;\n entityTopLeftTitle: string;\n entityTopRightTitle: string;\n entityBotLeftTitle: string;\n entityBotRightTitle: string;\n entityTopLeftValue: string;\n entityTopRightValue: string;\n entityBotLeftValue: string;\n entityBotRightValue: string;\n rankTypeTitle: string;\n scoreValue: string;\n scoreValueOutOf: string;\n rankValue: string;\n rankValueOutOf: string;\n productTypeTitle: string;\n productVolumeValue: string;\n productVolumeValueOutOf: string;\n productUnitsValue: string;\n productUnitsValueOutOf: string;\n bottomCards?: SmallCardData[] | Array;\n}\n@Component({\n selector: 'scorecards-score-summary-card',\n templateUrl: './scorecards-score-summary-card.component.html',\n styleUrls: ['./scorecards-score-summary-card.component.scss'],\n})\nexport class ScorecardsScoreSummaryCardComponent implements OnInit, OnChanges {\n constructor() {}\n\n isDataLoaded = false;\n hasData = false;\n noDataType: NoDataTypes;\n @Input() rankData: IScorecardDetailsCardData;\n detailsCard: IScorecardDetailsCardData;\n\n ngOnInit() {}\n\n ngOnChanges(changes: { [property: string]: SimpleChange }) {\n let change: SimpleChange = changes['rankData'];\n this.setData(change.currentValue);\n }\n\n setData(cardData: IScorecardDetailsCardData) {\n this.noDataType = {\n inputSource: NoDataSourceType.largeDataCard,\n action: cardData.action,\n showTitle: false,\n searchTerm: '',\n componentTitle: 'scorecard data',\n };\n this.hasData = cardData.hasData;\n this.isDataLoaded = !cardData.isDataLoading;\n this.detailsCard = cardData;\n }\n}\n","\n\n
\n
\n
\n \n \n
\n
\n \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 { ActivatedRoute, Router } from '@angular/router';\nimport * as Highcharts from 'highcharts';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport {\n PerformanceScorecardService,\n ScorecardProductionWebModel,\n ScorecardEmployeeWebModel,\n IProductionPurposeMixPieChartData,\n IScorecardParameters,\n ScorecardType,\n} from '../../services/performance-scorecard.service';\nimport { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from '../../../shared/interfaces/no-data';\nimport {\n ScorecardKpicardDataHandler,\n IScorecardKpiParams,\n} from '../../../shared/classes/scorecards-kpi-card-data-handler';\nimport { ICardlistData } from '../../../shared/components/card-list/card-list.component';\nimport { IPageHeadline } from '../../../shared/classes/page-title-parameters';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ILargeCardInteriorOptions } from '../../../shared/interfaces/card-data';\nimport { IScorecardDetailsCardData } from '../../../shared/components/scorecards-score-summary-card/scorecards-score-summary-card.component';\n\n@Component({\n selector: 'app-performance-scorecard-employee-type',\n templateUrl: './performance-scorecard-employee-type.component.html',\n styleUrls: ['./performance-scorecard-employee-type.component.scss'],\n})\nexport class PerformanceScorecardEmployeeTypeComponent implements OnInit {\n fromDatePeriod: string = 'This Year';\n ymc: string;\n employeeIdentifier: string;\n employeeType = 'Loan Originator';\n employeeTypeUrl: string;\n pageTitleShort = null;\n pageTitle = null;\n employeeIdentifierRoute: string;\n employeeList: ScorecardEmployeeWebModel[];\n displayOptions: DisplayOptions[];\n isDataLoded = false;\n pageId = 'performanceScorecardEmployeeType';\n employeeListSettings: any;\n selectedEmployee: ScorecardEmployeeWebModel[];\n noDataSelection: NoDataTypes;\n kpiCardData: ICardlistData;\n action: NoDataActionType;\n employeeFoundInList: boolean;\n productionPurposeMixPieChartData: IProductionPurposeMixPieChartData;\n largeCardInteriorOptions: ILargeCardInteriorOptions;\n detailsCard: IScorecardDetailsCardData;\n\n pageHeadline: IPageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: '',\n linkArray: [\n {\n moduleLink: 'performance',\n linkTitle: 'Performance Home',\n showLink: true,\n isHome: true,\n },\n //{\n // moduleLink: 'performance/insights/kpi',\n // linkTitle: 'KPI Insights',\n // showLink: true,\n // hideIf: ['performance/scorecards/lo'],\n //},\n {\n moduleLink: '/performance/scorecards',\n linkTitle: 'Performance Scorecards',\n showLink: true,\n hideIf: ['performance/insights/kpi'],\n },\n ],\n };\n\n constructor(\n private performanceScorecardService: PerformanceScorecardService,\n private route: ActivatedRoute,\n private router: Router,\n private _reusableFunctions: ReusableFunctions,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnInit() {\n this.employeeTypeUrl = this.route.snapshot.routeConfig.path;\n\n switch (this.employeeTypeUrl) {\n case 'scorecards/processor':\n this.employeeType = 'Processor';\n this.pageTitleShort = 'Processor';\n this.pageTitle = 'Processor Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/ae':\n this.employeeType = 'Account Executive';\n this.pageTitleShort = 'Account Executive';\n this.pageTitle = 'Account Executive Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/closer':\n this.employeeType = 'Closer';\n this.pageTitleShort = 'Closer';\n this.pageTitle = 'Closer Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/loa':\n this.employeeType = 'Loan Originator Assistant';\n this.pageTitleShort = 'LOA';\n this.pageTitle = 'Loan Originator Assistant Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/underwriter':\n this.employeeType = 'Underwriter';\n this.pageTitleShort = 'Underwriter';\n this.pageTitle = 'Underwriter Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/post-closer':\n this.employeeType = 'Post Closer';\n this.pageTitleShort = 'Post Closer';\n this.pageTitle = 'Post Closer Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n case 'scorecards/funder':\n this.employeeType = 'Funder';\n this.pageTitleShort = 'Funder';\n this.pageTitle = 'Funder Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n default:\n this.employeeType = 'Loan Originator';\n this.pageTitleShort = 'Loan Originator';\n this.pageTitle = 'Loan Originator Scorecard';\n this.pageHeadline.pageTitle = this.pageTitle;\n break;\n }\n\n scroll(0, 0);\n this.action = NoDataActionType.pageStart;\n Highcharts.setOptions({\n lang: {\n decimalPoint: '.',\n thousandsSep: ',',\n },\n });\n\n this.noDataSelection = {\n action: NoDataActionType.emptySelect,\n searchTerm: this.employeeType,\n componentTitle: '',\n inputSource: NoDataSourceType.largeDataCard,\n wrapInACard: true,\n };\n\n this.employeeListSettings = {\n singleSelection: true,\n text: `Select ${this.employeeType}`,\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'employee',\n primaryKey: 'employeeIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.initializeDonutcharts();\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(\n `/performance/${this.employeeTypeUrl}`\n );\n this.setDisplayOptionsSelected();\n\n // Check if idenfier is passed from KPI insight.\n this.route.queryParamMap.subscribe((p) => {\n if (p) {\n if (p.get('employeeIdentifier')) {\n this.employeeIdentifierRoute = p.get('employeeIdentifier');\n\n if (this.employeeIdentifierRoute) {\n this.employeeIdentifier = this.employeeIdentifierRoute;\n }\n } else if (p.get('id')) {\n this.employeeIdentifierRoute = p.get('id');\n\n if (this.employeeIdentifierRoute) {\n this.employeeIdentifier = this.employeeIdentifierRoute;\n }\n }\n }\n });\n\n this.checkEmployeeListChanges();\n }\n\n // DISPLAY OPTIONS /////////////////////////////\n setDisplayOptionsSelected() {\n if (this.displayOptions.find((item) => item.optionKey === 'dateRangeRolling')) {\n this.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRangeRolling'\n ).selectedOptions;\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'scorecardAsOf')) {\n this.ymc = this.displayOptions.find(\n (item) => item.optionKey === 'scorecardAsOf'\n ).selectedOptions;\n }\n }\n\n loadData() {\n this.setPositionDetails();\n this.setFundedProduction();\n this.kpiInit();\n this.setProductPurposeMixCard();\n }\n\n loEmployeeDisplayOptionsInit() {\n return new Promise((resolve) => {\n this.performanceScorecardService\n .getEmployeeList(this.employeeType, this.fromDatePeriod, this.ymc)\n .subscribe(\n (res) => {\n this.employeeList = res;\n for (let emp of this.employeeList) {\n emp.forced = false;\n }\n\n if (\n !this.employeeIdentifierRoute &&\n this.employeeList &&\n this.employeeList.length > 0\n ) {\n if (!this.isDataLoded) {\n this.employeeList = this.employeeList.filter((e) => e.employee);\n }\n }\n\n if (this.employeeIdentifier) {\n let recordInList = this.employeeList.find(\n (x) => x.employeeIdentifier === this.employeeIdentifier\n );\n\n if (recordInList) {\n this.selectedEmployee = [recordInList];\n this.employeeFoundInList = true;\n } else {\n this.employeeFoundInList = false;\n if (this.selectedEmployee && this.selectedEmployee[0]) {\n // We will add the missing employee back to the list and then force a load of\n // noData for each of the cards\n this.selectedEmployee[0].forced = true;\n this.employeeList.push(this.selectedEmployee[0]);\n this.employeeList.sort((employeeA, employeeB) => {\n if (employeeA.employee < employeeB.employee) {\n return -1;\n }\n if (employeeA.employee > employeeB.employee) {\n return 1;\n }\n return 0;\n });\n\n recordInList = this.employeeList.find(\n (x) => x.employeeIdentifier === this.employeeIdentifier\n );\n this.selectedEmployee = [recordInList];\n }\n }\n } else {\n if (this.employeeList?.length === 1) {\n this.selectedEmployee = [this.employeeList[0]];\n this.onSelectionChange();\n }\n }\n resolve({});\n },\n (error) => {\n this.noDataSelection.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n });\n }\n\n showNoData() {\n this.buildNoDataKpiCardData();\n this.setFundedPrductionData([], false);\n this.setProductPurposeMixCardNoData();\n }\n\n // LO DETAILS //////////////////////////////////\n setPositionDetails() {\n // TODO:\n // Check if employeeIdentifierRoute exists, if so, overwrite value in employeeIdentifier.\n this.detailsCard = this.performanceScorecardService.initializeScoreDetailsCard(\n ScorecardType.employee,\n this.action\n );\n let scorecardParameters = this.getParameters();\n this.performanceScorecardService.getScoreDetails(scorecardParameters).subscribe(\n (res) => {\n this.detailsCard.entityIdentifier = scorecardParameters.entityIdentifier;\n this.detailsCard = this.performanceScorecardService.updateScoreDetails(\n this.detailsCard,\n res\n );\n },\n (error) => {\n this.detailsCard.action = NoDataActionType.error;\n this.detailsCard.hasData = false;\n this.detailsCard.isDataLoading = false;\n this.detailsCard = Object.assign({}, this.detailsCard);\n throw new Error(error);\n }\n );\n }\n\n getParameters() {\n let scorecardParameters: IScorecardParameters = {\n scoreCardType: ScorecardType.employee,\n entityIdentifier: this.employeeIdentifier,\n entityType: this.employeeType,\n fromDatePeriod: this.fromDatePeriod,\n ymc: this.ymc,\n chartGroup: '',\n };\n return Object.assign({}, scorecardParameters);\n }\n\n // FUNDED PRODUCTION ///////////////////////////\n setFundedProduction() {\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n\n this.performanceScorecardService.getProductionData(this.getParameters()).subscribe(\n (res: ScorecardProductionWebModel[]) => {\n this.setFundedPrductionData(res, false);\n },\n (error) => {\n this.setFundedPrductionData(undefined, true);\n throw new Error(error);\n }\n );\n }\n\n setFundedPrductionData(data: ScorecardProductionWebModel[], hasError = false) {\n let chartTitle = this.pageTitleShort + ' Production';\n if (hasError) {\n this.largeCardInteriorOptions.action = NoDataActionType.error;\n }\n this.largeCardInteriorOptions = this.performanceScorecardService.drawFundedProductionChart(\n data,\n this.largeCardInteriorOptions,\n chartTitle\n );\n }\n\n onSelectionChange() {\n this.employeeIdentifier = this.selectedEmployee[0].employeeIdentifier;\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { id: this.employeeIdentifier },\n });\n if (this.selectedEmployee[0].forced) {\n this.employeeFoundInList = false;\n this.showNoData();\n } else {\n this.action = NoDataActionType.filter;\n this.employeeFoundInList = true;\n this.loadData();\n }\n }\n\n onItemDeSelect(event) {\n this.selectedEmployee = [event];\n }\n\n // KPI /////////////////////////////////////////\n buildNoDataKpiCardData() {\n let kpiDataHandler = new ScorecardKpicardDataHandler(\n this._reusableFunctions,\n this.sanitizer\n );\n let params: IScorecardKpiParams = {\n cardId: 'performanceLoScoreCardKpi',\n title: 'Key Performance Indicators',\n data: [],\n action: NoDataActionType.filter,\n searchTerm: '', // TODO; Set these values\n cardDrilldownUrl: '', // TODO; Set these values\n styleSet: {\n 'cardlist-container-area': {\n height: '440px',\n },\n },\n isDataReady: true,\n };\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n }\n\n kpiInit() {\n let kpiDataHandler = new ScorecardKpicardDataHandler(\n this._reusableFunctions,\n this.sanitizer\n );\n let params: IScorecardKpiParams = {\n cardId: 'performanceLoScoreCardKpi',\n title: 'Key Performance Indicators',\n data: [],\n action: this.action,\n searchTerm: '', // TODO; Set these values\n cardDrilldownUrl: '', // TODO; Set these values\n styleSet: {\n 'cardlist-container-area': {\n height: '440px',\n },\n },\n };\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n this.performanceScorecardService\n .getPositionKpi(\n this.employeeIdentifier,\n this.employeeType,\n this.fromDatePeriod,\n this.ymc\n )\n .subscribe(\n (res) => {\n this.kpiCardData = kpiDataHandler.handleKPILargeCards(\n this.kpiCardData,\n res,\n this.fromDatePeriod\n );\n },\n (error) => {\n params.action = NoDataActionType.error;\n params.isDataReady = true;\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n throw new Error(error);\n }\n );\n }\n\n setProductPurposeMixCard() {\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.initializeDonutcharts();\n this.productionPurposeMixPieChartData.noDataType.action = this.action;\n\n let scorecardParameters = this.getParameters();\n let chartGroups = ['Product', 'Purpose'];\n\n chartGroups.forEach((chartGroup) => {\n scorecardParameters.chartGroup = chartGroup.toLowerCase();\n this.performanceScorecardService.getPositionMix(scorecardParameters).subscribe(\n (res) => {\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.productPurposeMixCardLoad(\n res,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n },\n (error) => {\n this.productionPurposeMixPieChartData['isLoading' + chartGroup + 'Mix'] = false;\n this.productionPurposeMixPieChartData.noDataType.action =\n NoDataActionType.error;\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.productPurposeMixCardLoad(\n null,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n }\n );\n });\n }\n\n setProductPurposeMixCardNoData() {\n let chartGroups = ['Product', 'Purpose'];\n chartGroups.forEach((chartGroup) => {\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.productPurposeMixCardLoad(\n null,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n });\n }\n\n checkEmployeeListChanges() {\n this.loEmployeeDisplayOptionsInit().then(() => {\n if (this.employeeIdentifier) {\n if (this.employeeFoundInList) {\n this.loadData();\n this.isDataLoded = true;\n } else {\n this.showNoData();\n this.isDataLoded = true;\n }\n } else {\n this.isDataLoded = false;\n }\n });\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.checkEmployeeListChanges();\n }\n}\n","\n\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n \n \n \n \n
\n
\n 0;\n then ShowData;\n else NoDataScreen\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 { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport {\n PerformanceScorecardService,\n ScorecardProductionWebModel,\n EntityHierarchy,\n IProductionPurposeMixPieChartData,\n IScorecardParameters,\n ScorecardType,\n} from '../../services/performance-scorecard.service';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from '../../../shared/interfaces/no-data';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ScorecardKpicardDataHandler,\n IScorecardKpiParams,\n} from '../../../shared/classes/scorecards-kpi-card-data-handler';\nimport { ICardlistData } from '../../../shared/components/card-list/card-list.component';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ILargeCardInteriorOptions } from '../../../shared/interfaces/card-data';\nimport { IScorecardDetailsCardData } from '../../../shared/components/scorecards-score-summary-card/scorecards-score-summary-card.component';\n\n@Component({\n selector: 'app-performance-scorecard-entity',\n templateUrl: './performance-scorecard-entity.component.html',\n styleUrls: ['./performance-scorecard-entity.component.scss'],\n})\nexport class PerformanceScorecardEntityComponent implements OnInit {\n hierarchyLevelsOfInterest: EntityHierarchy[] = [];\n entitiesOfInterest: EntityHierarchy[] = [];\n selectedIdentifier: EntityHierarchy[] = [];\n selectedLevel: EntityHierarchy[] = [];\n entityListSettings: any;\n levelListSettings: any;\n pageTitle = 'Branch Scorecard';\n displayOptions: DisplayOptions[];\n branchIdentifier: string;\n fromDatePeriod: string = 'This Year';\n ymc: string;\n roleName: string;\n idFromQueryParams: string;\n kpiCardData: ICardlistData;\n action: NoDataActionType;\n noDataSelection: NoDataTypes;\n productionPurposeMixPieChartData: IProductionPurposeMixPieChartData;\n pageId = 'performanceScorecardEntityType';\n largeCardInteriorOptions: ILargeCardInteriorOptions;\n detailsCard: IScorecardDetailsCardData;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private performanceScorecardService: PerformanceScorecardService,\n private reusableFunctions: ReusableFunctions,\n private sanitizer: DomSanitizer\n ) {}\n\n ngOnInit() {\n this.getQueryParams();\n this.getRoles();\n\n this.entityListSettings = {\n singleSelection: true,\n text: 'Select Entity',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'hierarchyName',\n primaryKey: 'hierarchyIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.levelListSettings = {\n singleSelection: true,\n text: 'Select Level',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'roleName',\n primaryKey: 'roleLevel',\n enableFilterSelectAll: false,\n };\n\n this.noDataSelection = {\n action: NoDataActionType.emptySelect,\n searchTerm: '',\n componentTitle: 'entity',\n inputSource: NoDataSourceType.largeDataCard,\n wrapInACard: true,\n };\n\n this.productionPurposeMixPieChartData = this.performanceScorecardService.initializeDonutcharts();\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n\n this.initializeDetailCard();\n\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(\n '/performance/scorecards/branch'\n );\n this.setDisplayOptionsSelected();\n }\n\n private getRoles() {\n this.performanceScorecardService.getEntityRolesByUser().subscribe(\n (res) => {\n if (res && res.length) {\n this.hierarchyLevelsOfInterest = res;\n\n if (this.roleName && this.roleName.length) {\n let recordInList = this.hierarchyLevelsOfInterest.find(\n (x) => x.roleName.toLowerCase() === this.roleName.toLowerCase()\n );\n if (recordInList) {\n this.onLevelChange(this.roleName);\n }\n } else {\n if (\n this.hierarchyLevelsOfInterest &&\n this.hierarchyLevelsOfInterest.length == 1\n ) {\n this.onLevelChange(\n this.hierarchyLevelsOfInterest[0].hierarchyIdentifier\n );\n }\n }\n }\n },\n (error) => {\n this.noDataSelection.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n }\n\n private getRoleHierarchies(roleName: string) {\n this.performanceScorecardService.getEntityHierarchiesByRole(roleName).subscribe(\n (res) => {\n if (res && res.length) {\n this.entitiesOfInterest = res;\n\n if (this.idFromQueryParams && this.idFromQueryParams.length) {\n let recordFromList = this.entitiesOfInterest.find(\n (x) => x.hierarchyIdentifier === this.idFromQueryParams\n );\n\n if (recordFromList) {\n this.onEntityChange(recordFromList);\n }\n } else {\n if (this.entitiesOfInterest && this.entitiesOfInterest.length == 1) {\n this.onEntityChange(this.entitiesOfInterest[0]);\n }\n }\n }\n },\n (error) => {\n this.noDataSelection.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n }\n\n private getQueryParams() {\n this.route.queryParamMap.subscribe((p) => {\n if (p) {\n if (p.get('level')) {\n this.roleName = p.get('level');\n if (p.get('id')) {\n this.idFromQueryParams = p.get('id');\n }\n }\n }\n });\n }\n\n updateQueryParams() {\n this.clearIdFromQueryParams();\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n level: this.roleName ? this.roleName : this.selectedLevel[0].roleName,\n id: this.selectedIdentifier[0].hierarchyIdentifier,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.getScorecardData();\n }\n\n onLevelChange(roleName: string) {\n if (this.selectedLevel && this.selectedLevel.length) {\n this.clearIdFromQueryParams();\n }\n\n this.selectedLevel = [\n this.hierarchyLevelsOfInterest.find(\n (level) => level.roleName.toString() === roleName.toString()\n ),\n ];\n\n if (this.selectedIdentifier && this.selectedIdentifier.length) {\n this.selectedIdentifier = [];\n }\n\n this.roleName = this.selectedLevel[0].roleName;\n this.getRoleHierarchies(this.roleName);\n }\n\n onEntityChange(entity: EntityHierarchy) {\n if (entity) {\n if (!this.selectedIdentifier) {\n this.selectedIdentifier = [];\n }\n this.action = NoDataActionType.filter;\n this.selectedIdentifier[0] = entity;\n this.updateQueryParams();\n this.getScorecardData();\n }\n }\n clearIdFromQueryParams() {\n this.idFromQueryParams = '';\n }\n\n getScorecardData() {\n this.getRoleKPIs();\n this.setScorecardDetails();\n this.setFundedProduction();\n this.setProductPurposeMixCard();\n this.pageTitle = this.roleName ? this.roleName + ' Scorecard' : 'Branch Scorecard';\n }\n\n initializeDetailCard() {\n this.detailsCard = this.performanceScorecardService.initializeScoreDetailsCard(\n ScorecardType.location,\n this.action\n );\n }\n\n setScorecardDetails() {\n this.initializeDetailCard();\n let scorecardParameters = this.getParameters();\n this.performanceScorecardService.getScoreDetails(scorecardParameters).subscribe(\n (res) => {\n if (res && res != null) {\n this.detailsCard = this.performanceScorecardService.updateScoreDetails(\n this.detailsCard,\n res\n );\n } else {\n this.detailsCard.hasData = false;\n this.detailsCard.isDataLoading = false;\n this.detailsCard = Object.assign({}, this.detailsCard);\n }\n },\n (error) => {\n this.detailsCard.action = NoDataActionType.error;\n this.detailsCard.hasData = false;\n this.detailsCard.isDataLoading = false;\n this.detailsCard = Object.assign({}, this.detailsCard);\n throw new Error(error);\n }\n );\n }\n\n getIdentifier() {\n if (this.idFromQueryParams) {\n return this.idFromQueryParams;\n } else if (this.selectedIdentifier) {\n return this.selectedIdentifier[0].hierarchyIdentifier;\n }\n }\n getRoleName() {\n if (this.roleName) {\n return this.roleName;\n }\n return this.selectedLevel[0].roleName;\n }\n\n getParameters() {\n let scorecardParameters: IScorecardParameters = {\n scoreCardType: ScorecardType.location,\n entityIdentifier: this.idFromQueryParams\n ? this.idFromQueryParams\n : this.selectedIdentifier[0].hierarchyIdentifier,\n entityType: this.roleName,\n fromDatePeriod: this.fromDatePeriod,\n ymc: this.ymc,\n chartGroup: '',\n };\n return Object.assign({}, scorecardParameters);\n }\n\n setFundedProduction() {\n let chartTitle = 'Funded Production';\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n this.performanceScorecardService.getProductionData(this.getParameters()).subscribe(\n (res: ScorecardProductionWebModel[]) => {\n res.map((data) => {\n // TODO: fix this in the data sproc\n if (data.milestone && data.milestone.toLowerCase() === 'funded') {\n data.productionChartType = 0;\n } else {\n data.productionChartType = 1;\n }\n });\n this.largeCardInteriorOptions = this.performanceScorecardService.drawFundedProductionChart(\n res,\n this.largeCardInteriorOptions,\n chartTitle\n );\n },\n (error) => {\n this.largeCardInteriorOptions.hasData = true;\n this.largeCardInteriorOptions.isDataReady = true;\n this.largeCardInteriorOptions.action = NoDataActionType.error;\n this.largeCardInteriorOptions = this.performanceScorecardService.drawFundedProductionChart(\n undefined,\n this.largeCardInteriorOptions,\n chartTitle\n );\n throw new Error(error);\n }\n );\n }\n\n getRoleKPIs() {\n let kpiDataHandler = new ScorecardKpicardDataHandler(\n this.reusableFunctions,\n this.sanitizer\n );\n let params: IScorecardKpiParams = {\n cardId: 'performanceEntityScoreCardKpi',\n title: 'Key Performance Indicators',\n data: [],\n action: this.action,\n searchTerm: '', // TODO; Set this values\n cardDrilldownUrl: '', // TODO; Set this values\n styleSet: { 'cardlist-container-area': { height: '440px' } },\n };\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n\n this.performanceScorecardService\n .getScorecardKPIs(\n this.roleName,\n this.idFromQueryParams\n ? this.idFromQueryParams\n : this.selectedIdentifier[0].hierarchyIdentifier,\n this.fromDatePeriod,\n this.ymc\n )\n .subscribe(\n (res) => {\n this.kpiCardData = kpiDataHandler.handleKPILargeCards(\n this.kpiCardData,\n res,\n this.fromDatePeriod\n );\n },\n (error) => {\n params.action = NoDataActionType.error;\n params.isDataReady = true;\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n throw new Error(error);\n }\n );\n }\n\n setDisplayOptionsSelected() {\n if (this.displayOptions.find((item) => item.optionKey === 'dateRangeRolling')) {\n this.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRangeRolling'\n ).selectedOptions;\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'scorecardAsOf')) {\n this.ymc = this.displayOptions.find(\n (item) => item.optionKey === 'scorecardAsOf'\n ).selectedOptions;\n }\n }\n\n setProductPurposeMixCard() {\n this.productionPurposeMixPieChartData = this.performanceScorecardService.initializeDonutcharts();\n this.productionPurposeMixPieChartData.noDataType.action = this.action;\n let scorecardParameters = this.getParameters();\n let chartGroups = ['Product', 'Purpose'];\n\n chartGroups.forEach((chartGroup) => {\n scorecardParameters.chartGroup = chartGroup.toLowerCase();\n this.performanceScorecardService.getPositionMix(scorecardParameters).subscribe(\n (res) => {\n this.productionPurposeMixPieChartData = this.performanceScorecardService.productPurposeMixCardLoad(\n res,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n },\n (error) => {\n this.productionPurposeMixPieChartData['isLoading' + chartGroup + 'Mix'] = false;\n this.productionPurposeMixPieChartData.noDataType.action =\n NoDataActionType.error;\n this.productionPurposeMixPieChartData = this.performanceScorecardService.productPurposeMixCardLoad(\n null,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n }\n );\n });\n }\n\n onItemDeSelectRole(event) {\n this.selectedLevel = [event];\n }\n\n onItemDeSelectEntity(event) {\n this.selectedIdentifier = [event];\n }\n}\n","\n\n
\n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n 0; then ShowData; else NoDataScreen\"\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 { ActivatedRoute } from '@angular/router';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport {\n PerformanceScorecardService,\n ScorecardProductionWebModel,\n ScorecardPartnerWebModel,\n IScorecardParameters,\n IProductionPurposeMixPieChartData,\n ScorecardMixListWebModel,\n ScorecardMixWebModel,\n ScorecardType,\n} from '../../services/performance-scorecard.service';\nimport { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport { forkJoin } from 'rxjs';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from '../../../shared/interfaces/no-data';\nimport {\n SmallCardData,\n IBottomCardData,\n ITableTdItems,\n IRowItems,\n ILargeCardInteriorOptions,\n} from 'app/modules/shared/interfaces/card-data';\nimport { ICardlistData } from '../../../shared/components/card-list/card-list.component';\nimport {\n ScorecardKpicardDataHandler,\n IScorecardKpiParams,\n} from '../../../shared/classes/scorecards-kpi-card-data-handler';\nimport { IPageHeadline } from '../../../shared/classes/page-title-parameters';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IScorecardDetailsCardData } from '../../../shared/components/scorecards-score-summary-card/scorecards-score-summary-card.component';\n\n@Component({\n selector: 'app-performance-scorecard-third-party',\n templateUrl: './performance-scorecard-third-party.component.html',\n styleUrls: ['./performance-scorecard-third-party.component.scss'],\n})\nexport class PerformanceScorecardThirdPartyComponent implements OnInit {\n smallCards: SmallCardData[];\n bottomeCard: IBottomCardData[];\n tableData: ITableTdItems[];\n rowItems: IRowItems[];\n fromDatePeriod: string = '';\n partnerIdentifier: string;\n partnerIdentifierRoute: string;\n partnerList: ScorecardPartnerWebModel[];\n profilePicSrc: string;\n thirdPartyType = 'D';\n thirdPartyTypeUrl = null;\n pageTitleShort = null;\n pageTitle = null;\n ymc: string;\n cardDrilldownUrl: string = '/performance/scorecards';\n displayOptions: DisplayOptions[];\n partnerListSettings: any;\n selectedpartner: ScorecardPartnerWebModel[];\n noDataType: NoDataTypes;\n kpiCardData: ICardlistData;\n action: NoDataActionType;\n pageHeadline: IPageHeadline;\n scorecardProductionData: ScorecardProductionWebModel[];\n kpiTableColInfo: ITableTdItems[] = [\n {\n headerTitle: '',\n fieldId: 'weight',\n isHyperlinked: false,\n isIconColumn: true,\n iconClass: 'fas fa-weight-hanging',\n headerStyle: {\n 'text-align': 'center',\n color: '#333333',\n },\n style: {\n 'font-weight': '500',\n 'text-align': 'center',\n 'font-size': '12px',\n 'padding-right': '8px',\n width: '3%',\n },\n },\n {\n headerTitle: 'KPI',\n fieldId: 'clientKPIMatrixDescription',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'left',\n color: '#333333',\n },\n style: {\n 'font-weight': '500',\n 'text-align': 'left',\n 'font-size': '14px',\n width: '20%',\n },\n },\n {\n headerTitle: 'Target',\n fieldId: 'target',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '12%',\n },\n },\n {\n headerTitle: 'MTD',\n fieldId: 'monthlyValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '13%',\n },\n },\n {\n headerTitle: 'Prior MTD',\n fieldId: 'monthlyValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n showIndicator: true,\n compareFieldId: 'previousMonthlyValue',\n diffField: 'monthlyDiff',\n },\n {\n headerTitle: this.fromDatePeriod === '12m' ? '12mo' : 'YTD',\n fieldId: 'aggValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n },\n {\n headerTitle: this.fromDatePeriod === '12m' ? 'Prev 12mo' : 'Prev YTD',\n fieldId: 'aggValue',\n isHyperlinked: false,\n headerStyle: {\n 'text-align': 'right',\n color: '#333333',\n },\n style: {\n 'text-align': 'right',\n 'font-size': '14px',\n width: '14%',\n },\n showIndicator: true,\n compareFieldId: 'previousAggValue',\n diffField: 'aggDiff',\n },\n ];\n\n productionPurposeMixPieChartData: IProductionPurposeMixPieChartData;\n pageId = 'performanceScorecardThirdParty';\n largeCardInteriorOptions: ILargeCardInteriorOptions;\n detailsCard: IScorecardDetailsCardData;\n\n constructor(\n private performanceScorecardService: PerformanceScorecardService,\n private route: ActivatedRoute,\n private _reusableFunctions: ReusableFunctions,\n private intl: IntlService,\n private _sanitizer: DomSanitizer\n ) {}\n\n ngOnInit() {\n scroll(0, 0);\n this.thirdPartyTypeUrl = this.route.snapshot.routeConfig.path;\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n moduleLink: 'performance/scorecards/',\n pageTitle: '',\n linkTitle: 'Performance Scorecards',\n };\n\n // TODO: add ae type\n switch (this.thirdPartyTypeUrl) {\n case 'scorecards/broker':\n this.thirdPartyType = 'K';\n this.pageTitleShort = 'Broker';\n this.pageTitle = 'Broker Scorecard';\n this.pageHeadline.pageTitle = 'Broker Scorecard';\n break;\n case 'scorecards/buyer-agent':\n this.thirdPartyType = 'B';\n this.pageTitleShort = 'Buyer Agent';\n this.pageTitle = 'Buyer Agent Scorecard';\n this.pageHeadline.pageTitle = 'Buyer Agent Scorecard';\n break;\n case 'scorecards/buyer-agency':\n this.thirdPartyType = 'BC';\n this.pageTitleShort = 'Buyer Agency';\n this.pageTitle = 'Buyer Agency Scorecard';\n this.pageHeadline.pageTitle = 'Buyer Agency Scorecard';\n break;\n case 'scorecards/settlement-agency':\n this.thirdPartyType = 'STC';\n this.pageTitleShort = 'Settlement Agency';\n this.pageTitle = 'Settlement Agency Scorecard';\n this.pageHeadline.pageTitle = 'Settlement Agency Scorecard';\n break;\n case 'scorecards/investor':\n this.thirdPartyType = 'I';\n this.pageTitleShort = 'Investor';\n this.pageTitle = 'Investor Scorecard';\n this.pageHeadline.pageTitle = 'Investor Scorecard';\n break;\n case 'scorecards/servicer':\n this.thirdPartyType = 'V';\n this.pageTitleShort = 'Servicer';\n this.pageTitle = 'Servicer Scorecard';\n this.pageHeadline.pageTitle = 'Servicer Scorecard';\n break;\n default:\n this.thirdPartyType = 'D';\n this.pageTitleShort = 'Lender';\n this.pageTitle = 'Lender Scorecard';\n this.pageHeadline.pageTitle = 'Lender Scorecard';\n break;\n }\n\n scroll(0, 0);\n this.action = NoDataActionType.pageStart;\n this.smallCards = [\n {\n urlSegment: '',\n title: 'Avg LA',\n routerLink: this.cardDrilldownUrl,\n isDataReady: false,\n hidePointer: true,\n },\n {\n urlSegment: '',\n title: 'Conv',\n routerLink: this.cardDrilldownUrl,\n isDataReady: false,\n hidePointer: true,\n },\n {\n urlSegment: '',\n title: 'Govt',\n routerLink: this.cardDrilldownUrl,\n isDataReady: false,\n hidePointer: true,\n },\n {\n urlSegment: '',\n title: 'Non-Conf',\n routerLink: this.cardDrilldownUrl,\n isDataReady: false,\n hidePointer: true,\n },\n ];\n\n this.noDataType = {\n action: NoDataActionType.emptySelect,\n searchTerm: this.pageTitleShort,\n componentTitle: 'Scorecard',\n inputSource: NoDataSourceType.largeDataCard,\n wrapInACard: true,\n };\n\n this.partnerListSettings = {\n singleSelection: true,\n text: `Select ${this.pageTitleShort}`,\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'partnerName',\n primaryKey: 'partnerIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(\n `/performance/${this.thirdPartyTypeUrl}`\n );\n\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.initializeDonutcharts();\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n this.setDisplayOptionsSelected();\n this.lopartnerDisplayOptionsInit();\n }\n\n populateSmallCardData(data: ScorecardMixListWebModel, action: NoDataActionType = null) {\n let avgLoan = 0;\n\n let unitsFunded: number;\n let volFunded: number;\n let allFunded: ScorecardMixWebModel[] = [];\n let allLocked: ScorecardMixWebModel[] = [];\n\n if (data?.pieDataMixList?.length > 0) {\n unitsFunded = data.pieDataMixList\n .filter((x) => x.category === 'Funded')\n .reduce((unitsFunded, item) => unitsFunded + item.units, 0);\n volFunded = data.pieDataMixList\n .filter((x) => x.category === 'Funded')\n .reduce((volFunded, item) => volFunded + item.volume, 0);\n allFunded = data.pieDataMixList.filter((x) => x.category === 'Funded');\n allLocked = data.pieDataMixList.filter((x) => x.category === 'Locked');\n }\n\n const conVolFunded = allFunded\n .filter((x) => x.loanTypeCategory.toUpperCase() === 'CONV')\n .reduce((conVolFunded, item) => conVolFunded + item.volume, 0);\n\n const govVolFunded = allFunded\n .filter((x) => x.loanTypeCategory.toUpperCase() === 'GOVT')\n .reduce((govVolFunded, item) => govVolFunded + item.volume, 0);\n const otherVolFunded = allFunded\n .filter((x) => x.loanTypeCategory === 'Other')\n .reduce((otherVolFunded, item) => otherVolFunded + item.volume, 0);\n\n const conVolLocked = allLocked\n .filter((x) => x.loanTypeCategory.toUpperCase() === 'CONV')\n .reduce((conVolLocked, item) => conVolLocked + item.volume, 0);\n const govVolLocked = allLocked\n .filter((x) => x.loanTypeCategory.toUpperCase() === 'GOVT')\n .reduce((govVolLocked, item) => govVolLocked + item.volume, 0);\n const otherVolLocked = allLocked\n .filter((x) => x.loanTypeCategory === 'Other')\n .reduce((otherVolLocked, item) => otherVolLocked + item.volume, 0);\n\n if (unitsFunded > 0) {\n avgLoan = volFunded / unitsFunded;\n }\n\n this.smallCards.forEach((card) => {\n if (card.title === 'Avg LA') {\n card.mainValue = this.intl.formatNumber(avgLoan, 'c0');\n } else if (card.title === 'Conv') {\n card.bottomCardData = [\n {\n value: 'Funded',\n description: this.intl.formatNumber(conVolFunded, 'c0'),\n hasAccess: true,\n },\n {\n value: 'Locked',\n description: this.intl.formatNumber(conVolLocked, 'c0'),\n hasAccess: true,\n },\n ];\n } else if (card.title === 'Govt') {\n card.bottomCardData = [\n {\n value: 'Funded',\n description: this.intl.formatNumber(govVolFunded, 'c0'),\n hasAccess: true,\n },\n {\n value: 'Locked',\n description: this.intl.formatNumber(govVolLocked, 'c0'),\n hasAccess: true,\n },\n ];\n } else if (card.title === 'Non-Conf') {\n card.bottomCardData = [\n {\n value: 'Funded',\n description: this.intl.formatNumber(otherVolFunded, 'c0'),\n hasAccess: true,\n },\n {\n value: 'Locked',\n description: this.intl.formatNumber(otherVolLocked, 'c0'),\n hasAccess: true,\n },\n ];\n }\n card.isDataReady = true;\n card = Object.assign({}, card);\n });\n }\n\n // DISPLAY OPTIONS /////////////////////////////\n setDisplayOptionsSelected() {\n if (this.displayOptions.find((item) => item.optionKey === 'dateRangeRolling')) {\n this.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRangeRolling'\n ).selectedOptions;\n }\n if (this.displayOptions.find((item) => item.optionKey === 'scorecardAsOf')) {\n this.ymc = this.displayOptions.find(\n (item) => item.optionKey === 'scorecardAsOf'\n ).selectedOptions;\n }\n }\n\n loadData() {\n this.kpiInit();\n if (this.partnerIdentifier) {\n this.setPartnerDetails();\n this.setFundedProduction();\n this.productPurposeMixCardInit();\n }\n }\n\n lopartnerDisplayOptionsInit(split = false) {\n this.performanceScorecardService\n .getScorecardPartnerList(this.thirdPartyType, this.fromDatePeriod, this.ymc)\n .subscribe(\n (res) => {\n let hasSelectedEntity = false;\n this.partnerList = res;\n if (this.partnerList && this.partnerList.length > 0) {\n this.partnerList = this.partnerList.filter((e) => e.partnerName);\n\n if (this.selectedpartner && this.selectedpartner.length > 0) {\n hasSelectedEntity = this._reusableFunctions.hasTheGivenObjectIntheArray(\n this.selectedpartner[0],\n this.partnerList,\n 'partnerIdentifier'\n );\n }\n }\n\n if (hasSelectedEntity) {\n this.loadData();\n } else {\n this.selectedpartner = [];\n }\n },\n (error) => {\n this.noDataType.action = NoDataActionType.error;\n this.noDataType.searchTerm = '';\n this.noDataType.componentTitle = `${this.pageTitleShort} Scorecard`;\n }\n );\n }\n\n // LO DETAILS //////////////////////////////////\n setPartnerDetails() {\n let scorecardParameters = this.getParameters();\n scorecardParameters.chartGroup = 'product';\n this.detailsCard = this.performanceScorecardService.initializeScoreDetailsCard(\n ScorecardType.thirdParty,\n this.action\n );\n\n forkJoin(\n this.performanceScorecardService.getScoreDetails(scorecardParameters),\n this.performanceScorecardService.getPositionMix(scorecardParameters)\n ).subscribe(\n ([lenderDetails, smallCardData]) => {\n if (lenderDetails && lenderDetails !== null) {\n if (smallCardData && smallCardData !== null) {\n this.populateSmallCardData(smallCardData);\n this.detailsCard.bottomCards = this.smallCards;\n }\n\n this.detailsCard = this.performanceScorecardService.updateScoreDetails(\n this.detailsCard,\n lenderDetails\n );\n } else {\n this.detailsCard.hasData = false;\n this.detailsCard.isDataLoading = false;\n this.detailsCard = Object.assign({}, this.detailsCard);\n }\n },\n (error) => {\n this.detailsCard.action = NoDataActionType.error;\n this.detailsCard.hasData = false;\n this.detailsCard.isDataLoading = false;\n this.detailsCard = Object.assign({}, this.detailsCard);\n }\n );\n }\n\n getParameters() {\n let scorecardParameters: IScorecardParameters = {\n scoreCardType: ScorecardType.thirdParty,\n entityIdentifier: this.partnerIdentifier,\n entityType: this.thirdPartyType,\n fromDatePeriod: this.fromDatePeriod,\n ymc: this.ymc,\n chartGroup: '',\n };\n return Object.assign({}, scorecardParameters);\n }\n\n // FUNDED PRODUCTION ///////////////////////////\n setFundedProduction() {\n let chartTitle = this.pageTitleShort + ' Production';\n this.largeCardInteriorOptions = this.performanceScorecardService.initializeProductionChart(\n this.pageId,\n this.action\n );\n this.performanceScorecardService.getProductionData(this.getParameters()).subscribe(\n (res: ScorecardProductionWebModel[]) => {\n this.largeCardInteriorOptions =\n this.performanceScorecardService.drawFundedProductionChart(\n res,\n this.largeCardInteriorOptions,\n chartTitle\n );\n },\n (error) => {\n this.largeCardInteriorOptions.hasData = true;\n this.largeCardInteriorOptions.isDataReady = true;\n this.largeCardInteriorOptions.action = NoDataActionType.error;\n this.largeCardInteriorOptions =\n this.performanceScorecardService.drawFundedProductionChart(\n undefined,\n this.largeCardInteriorOptions,\n chartTitle\n );\n throw new Error(error);\n }\n );\n }\n\n onSelectionChange(event) {\n this.action = NoDataActionType.filter;\n this.partnerIdentifier = this.selectedpartner[0].partnerIdentifier;\n this.loadData();\n }\n\n onItemDeSelect(event) {\n this.selectedpartner = [event];\n }\n\n // KPI /////////////////////////////////////////\n kpiInit() {\n let kpiDataHandler = new ScorecardKpicardDataHandler(\n this._reusableFunctions,\n this._sanitizer\n );\n let params: IScorecardKpiParams = {\n cardId: 'performanceLenderScoreCardKpi',\n title: 'Key Performance Indicators',\n data: [],\n action: this.action,\n searchTerm: '', // TODO; Set these values\n cardDrilldownUrl: '', // TODO; Set these values\n styleSet: { 'cardlist-container-area': { height: '440px' } },\n isDataReady: this.partnerIdentifier ? false : true,\n };\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n if (this.partnerIdentifier) {\n this.performanceScorecardService\n .getPartnerKpi(\n this.thirdPartyType,\n this.partnerIdentifier,\n this.fromDatePeriod,\n this.ymc\n )\n .subscribe(\n (res) => {\n this.kpiCardData = kpiDataHandler.handleKPILargeCards(\n this.kpiCardData,\n res,\n this.fromDatePeriod,\n this.kpiTableColInfo\n );\n },\n () => {\n params.action = NoDataActionType.error;\n params.isDataReady = true;\n this.kpiCardData = kpiDataHandler.initializeCards(params);\n }\n );\n }\n }\n\n // PRODUCT MIX /////////////////////////////////\n productPurposeMixCardInit() {\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.initializeDonutcharts();\n this.productionPurposeMixPieChartData.noDataType.action = this.action;\n let scorecardParameters = this.getParameters();\n let chartGroups = ['Product', 'Purpose'];\n\n chartGroups.forEach((chartGroup) => {\n scorecardParameters.chartGroup = chartGroup.toLowerCase();\n this.performanceScorecardService.getPositionMix(scorecardParameters).subscribe(\n (res) => {\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.productPurposeMixCardLoad(\n res,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n },\n (error) => {\n this.productionPurposeMixPieChartData['isLoading' + chartGroup + 'Mix'] = false;\n this.productionPurposeMixPieChartData.noDataType.action =\n NoDataActionType.error;\n this.productionPurposeMixPieChartData =\n this.performanceScorecardService.productPurposeMixCardLoad(\n null,\n this.productionPurposeMixPieChartData,\n chartGroup\n );\n }\n );\n });\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.lopartnerDisplayOptionsInit();\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-performance-insights',\n templateUrl: './performance-insights.component.html',\n styleUrls: ['./performance-insights.component.scss'],\n})\nexport class PerformanceInsightsComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","\n\n\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { HierarchyEntityDetails } from '../interfaces/branch-data';\nimport { Observable } from 'rxjs';\nimport {\n Branch,\n BranchEmpData,\n} from '../../performance/components/performance-projections-config/performance-projection.data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BranchService {\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}/branch').replace('{version}', this.version);\n\n constructor(private http: HttpClient) {}\n\n getBranchDetails(id: string): Observable {\n return new Observable((subscriber) => {\n this.http\n .post(this._url + '/getBranchDetails', {\n BranchID: id,\n })\n .subscribe(\n (details) => {\n subscriber.next(details);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n\n public getBranchesOfInterest(): Observable {\n return this.http.get(`${this._url}/branch/all`);\n }\n\n getAllRelatedBranches(): Observable {\n return this.http.get(`${this._url}/branch/alllevels`);\n }\n\n getCurrentUsersBranchRecord(): Observable {\n return this.http.get(this._url + '/GetCurrentUsersBranchRecord');\n }\n\n getAllBranchesForClientKey(): Observable {\n return this.http.get(this._url + '/GetAllBranchesForClientKey');\n }\n}\n","import { Component, OnInit, Input, EventEmitter, Output, Renderer2, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'successful-submission-dialog',\n templateUrl: './successful-submission-dialog.component.html',\n styleUrls: ['./successful-submission-dialog.component.scss'],\n})\nexport class SuccessfulSubmissionDialogComponent implements OnInit {\n @Input() title: string;\n @Input() message: string;\n @Output() viewClickedAfterSuccess?: EventEmitter = new EventEmitter();\n @Output() topRightXClickedAfterSuccess?: EventEmitter = new EventEmitter();\n @Output() editClickedAfterSuccess?: EventEmitter = new EventEmitter();\n\n constructor(private renderer: Renderer2, @Inject(DOCUMENT) private document: Document) {}\n\n ngOnInit() {\n this.renderer.addClass(this.document.body, 'modal-open');\n }\n\n viewClicked() {\n this.viewClickedAfterSuccess.emit();\n }\n\n editClicked() {\n this.editClickedAfterSuccess.emit();\n }\n\n topRightXClicked() {\n this.topRightXClickedAfterSuccess.emit();\n }\n\n ngOnDestroy() {\n this.renderer.removeClass(this.document.body, 'modal-open');\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n {{ title }}\n
\n
\n {{ message }}\n
\n
\n \n \n
\n
\n","\n\n\n
\n\n\n\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n
\n \n \n
\n You have not added your {{ selectedYear[0].year }} projections yet.\n
\n
\n Your annual projections must be submitted by midnight on\n {{ closingDate | date: 'MM/dd/yyyy':'UTC' }}.\n
\n
\n \n ADD PROJECTIONS\n \n
\n
\n \n
\n {{ selectedYear[0].year }} projections will not open until\n {{ openDate | date: 'MM/dd/yyyy':'UTC' }}.\n
\n 0\n \"\n >\n {{ selectedYear[0].year }} projections were not submitted and it's past the open\n period.\n \n \n
\n
\n \n
\n
\n
\n \n Unfortunately, we could not find any branches of interest for this user.\n
\n \n \n \n

{{ selectedYear[0].year }} Projections

\n
\n This branch did not submit projections for\n {{ selectedYear[0].year }}.\n
\n
\n \n Enter your branch’s annual projections in the fields below. Your monthly averages\n and overall goals will automatically populate based on your inputs.\n

\n
\n \n
\n

Your {{ selectedYear[0].year }} Projections

\n
\n Total Loans\n
\n \n \n {{ statDescription }}\n {{ data.loans.current }} .\n \n Your 2019 projection is\n {{ data.loans.projection }}.\n
\n
    \n
  • Required
  • \n
  • \n Value must be ≤\n {{ totalLoans.errors.max.max }}\n
  • \n
\n
\n
\n
\n\n
\n Total Volume\n
\n \n {{ statDescription }}\n {{\n data.volume.current | currency: 'USD':'symbol':'1.0-0'\n }}.\n \n Your 2019 projection is\n {{\n data.volume.projection | currency: 'USD':'symbol':'1.0-0'\n }}.\n \n
    \n
  • Required
  • \n
  • \n Value must be ≤\n {{ totalVolume.errors.max.max }}\n
  • \n
\n
\n
\n
\n\n
\n Purchase Mix (%)\n
\n \n {{ statDescription }}\n {{ data.purchase.current }}%\n \n
    \n
  • Required
  • \n
  • \n Value (%) must be ≤\n {{ purchaseMix.errors.max.max }}%\n
  • \n
\n
\n
\n
\n\n
\n Government Mix (%)\n
\n \n {{ statDescription }}\n {{ data.government.current }}%\n \n
    \n
  • Required
  • \n
  • \n Value must be ≤\n {{ governmentMix.errors.max.max }}%\n
  • \n
\n
\n
\n \n\n
\n Tenured Producers (FT)\n
\n \n \n {{ statDescription }}\n {{ data.tenured.current }} .\n \n \n
    \n
  • Required
  • \n \n Value must be ≤\n {{ tenuredProducers.errors.max.max }}\n \n
\n
\n
\n \n \n\n
\n

Your {{ selectedYear[0].year }} Goals

\n
\n
\n {{ unitsPerMonth.value }} \n units per month\n
\n\n
\n with an average loan amount of\n \n {{\n avgLoanAmount.value | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n\n
\n and a total monthly volume averaging\n \n {{\n totalMonthlyVolume.value | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n\n
\n {{ purchaseVolume.value | currency: 'USD':'symbol':'1.0-0' }}\n \n in purchase volume\n
\n\n
\n and \n {{\n totalVolume.value - purchaseVolume.value\n | currency: 'USD':'symbol':'1.0-0'\n }}\n  in refi/other volume\n
\n\n
\n {{ governmentVolume.value | currency: 'USD':'symbol':'1.0-0' }}\n \n in government volume\n
\n\n
\n and \n {{\n totalVolume.value - governmentVolume.value\n | currency: 'USD':'symbol':'1.0-0'\n }}\n  in conv/other volume\n
\n\n
\n {{ tenuredProducers.value }} \n FT tenured producers\n
\n\n \n averaging \n {{ unitsPerProducer.value }} \n units monthly per producer\n
\n
\n \n \n
\n
\n \n {{ totalLoans.value | number: '1.0-0' }}\n \n Loans \n \n {{ totalVolume.value | currency: 'USD':'symbol':'1.0-0' }}\n \n Volume \n \n {{ purchaseMix.value }}%\n \n Purchases \n \n {{ purchaseVolume.value | currency: 'USD':'symbol':'1.0-0' }}\n \n Purchase Volume \n \n {{ governmentMix.value }}%\n \n Government \n \n {{ governmentVolume.value | currency: 'USD':'symbol':'1.0-0' }}\n \n Government Volume \n \n Edit Branch Projections\n \n \n Edit Employee Projections\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PRODUCER DETAILSJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECTOTAL
Seasonality Curve\n {{ monthPercentage / 10 }}%\n 100%
\n \n \n \n \n \n \n \n Avg Units\n \n \n Avg LA\n \n \n Avg Vol\n \n \n \n \n {{\n employeeYTDStats[i]\n ?.avgFundedUnits\n }}\n \n \n {{\n employeeYTDStats[i]\n ?.avgLoanAmount\n | currency\n : 'USD'\n : 'symbol'\n : '1.0-0'\n }}\n \n \n {{\n employeeYTDStats[i]\n ?.avgFundedVol\n | currency\n : 'USD'\n : 'symbol'\n : '1.0-0'\n }}\n \n \n
\n \n {{ employeeYTDStats[i]?.name }}  - {{\n employeeYTDStats[i]?.termMo\n ? 'Terminated in ' +\n reusableFunctions.getMonthName(\n employeeYTDStats[i]?.termMo\n ).shortMonth\n : employeeYTDStats[i]?.isTenured\n ? 'Tenured'\n : employeeYTDStats[i]?.tenureMo\n ? 'Tenures in ' +\n reusableFunctions.getMonthName(\n employeeYTDStats[i]?.tenureMo\n ).shortMonth\n : ''\n }}\n
\n \n
\n
\n \n 0\">\n \n \n \n \n \n \n \n \n
\n {{ monthProj.units }}\n
\n {{\n monthProj.volume\n | currency\n : 'USD'\n : 'symbol'\n : '1.0-0'\n }}\n
\n \n
\n \n \n \n \n \n \n \n Units must be ≤\n {{\n getEmployeeUnitsControl(i).errors.max\n .max\n }}.\n \n \n Units are required.\n \n \n \n \n \n \n \n Volume must be ≤\n {{\n getEmployeeVolumeControl(i).errors.max\n .max\n | currency: 'USD':'symbol':'1.0-0'\n }}.\n \n \n Volume is required.\n \n \n
\n \n \n {{\n employeeProjections[i].get(\n 'totalEmployeeUnits'\n ).value\n }}\n \n
\n \n \n {{\n employeeProjections[i].get(\n 'totalEmployeeVolume'\n ).value\n | currency\n : 'USD'\n : 'symbol'\n : '1.0-0'\n }}\n \n
\n \n \n \n \n \n \n \n \n Total Units\n \n \n \n \n Total Volume\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n {{ thisMonthUnits | number: '1.0-0' }}\n
\n {{\n totalMonthlyProjections.monthlyVolume[i]\n | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n \n \n \n \n \n
\n {{ totalUnits | number: '1.0-0' }}\n
\n {{\n totalVol | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Shrink/Stretch\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n {{ monthlyShrinkStretchUnits[i] }}\n
\n {{\n monthlyShrinkStretchVol[i]\n | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n \n \n \n \n \n
\n {{ shrinkStretchUnits.value }}\n
\n {{\n shrinkStretchVolume.value\n | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n \n \n \n \n \n Adjusted Units\n \n \n \n \n Adjusted Volume\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n {{ thisMonthUnits | number: '1.0-0' }}\n
\n {{\n adjustedMonthlyProjections.monthlyVolume[i]\n | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n \n \n \n \n \n
\n {{ totalLoans.value | number: '1.0-0' }}\n
\n {{\n totalVolume.value\n | currency: 'USD':'symbol':'1.0-0'\n }}\n
\n \n \n \n \n
\n
\n \n
\n \n DISCARD CHANGES\n \n \n Next\n \n \n Submit\n \n \n
\n \n \n \n \n\n","import { Component, OnInit, ViewEncapsulation, HostListener } from '@angular/core';\nimport { ToastService } from '../../../shared/services/toast.service';\nimport {\n UntypedFormGroup,\n UntypedFormBuilder,\n UntypedFormControl,\n Validators,\n UntypedFormArray,\n} from '@angular/forms';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { forkJoin } from 'rxjs';\nimport {\n EmployeeYTD,\n EmployeeProjectionData,\n TotalMonthProjection,\n BranchProjectionOpenCloseDates,\n BranchProjectionData,\n BranchYTD,\n BranchProjectionServerData,\n ClientEmployeeMonthProjection,\n EmployeeTotals,\n Branch,\n Year,\n} from './performance-projection.data';\nimport { ProjectionService } from '../../services/projection.service';\nimport { BranchService } from '../../../shared/services/branch.service';\nimport { CurrentUserStateService } from '../../../shared/services/current-user-state.service';\nimport { ImpersonationService } from '../../../shared/services/impersonation.service';\n\n@Component({\n selector: 'app-performance-projections-config',\n templateUrl: './performance-projections-config.component.html',\n styleUrls: ['./performance-projections-config.component.scss'],\n})\nexport class PerformanceProjectionsConfigComponent implements OnInit {\n Arr = Array;\n public data = {\n loans: {\n current: null,\n projection: null,\n },\n volume: {\n current: null,\n projection: null,\n },\n purchase: {\n current: null,\n projection: null,\n },\n government: {\n current: null,\n projection: null,\n },\n tenured: {\n current: null,\n },\n };\n\n branchProjectionForm: UntypedFormGroup;\n branchIdentifier: string;\n branchesOfInterest: Branch[];\n selectedIdentifier: Branch[];\n yearsOfInterest: Year[];\n selectedYear: Year[];\n seasonalityCurveHardCodedDefault: number[] = [\n 91, 93, 94, 95, 99, 108, 115, 118, 102, 97, 93, 95,\n ];\n today: string;\n showEmployeeProjections: boolean;\n employeeYTDStats: EmployeeYTD[];\n employeeMonthlyProjections: EmployeeProjectionData[];\n totalMonthlyProjections: TotalMonthProjection;\n adjustedMonthlyProjections: TotalMonthProjection;\n updateEmployeeProjectionsOnNextClicked: boolean;\n branchListSettings: any;\n yearListSettings: any;\n employeeProjectionData: EmployeeTotals[];\n projectionsAreEditable: boolean;\n projectionsAreBeingEdited: boolean;\n noProjections: boolean;\n projectionsAreOpen: boolean;\n addProjections: boolean;\n showSuccessfulSubmitMessage: boolean;\n viewingBranchProjections: boolean;\n branchProjectionSignificantDates: BranchProjectionOpenCloseDates[];\n openDate: Date;\n closingDate: Date;\n yearProjectionsAreOpen?: number;\n dates: BranchProjectionOpenCloseDates[];\n avgBranchLoanAmountForNewEmployee: number;\n previousBranchProjectionConfigData: BranchProjectionServerData;\n seasonalityCurve: number[];\n yearOption: string;\n loading: boolean;\n statDescription: string;\n submitLoading: boolean = false;\n monthlyShrinkStretchUnits: number[];\n monthlyShrinkStretchVol: number[];\n totalUnits: number;\n totalVol: number;\n constructor(\n private toast: ToastService,\n private projectionService: ProjectionService,\n private branchService: BranchService,\n private formBuilder: UntypedFormBuilder,\n private reusableFunctions: ReusableFunctions,\n private currentUserStateService: CurrentUserStateService,\n private impersonationService: ImpersonationService\n ) {\n this.branchProjectionForm = this.createFormGroup();\n this.onBranchProjectionChanges();\n\n this.branchListSettings = {\n singleSelection: true,\n text: 'Select Branch',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'hierarchyName',\n primaryKey: 'hierarchyIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.yearListSettings = {\n singleSelection: true,\n text: 'Select Year',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'year',\n primaryKey: 'year',\n enableFilterSelectAll: false,\n };\n }\n\n ngOnInit() {\n this.loading = true;\n this.yearsOfInterest = [];\n this.addYears();\n this.selectedYear = [this.yearsOfInterest[0]];\n this.yearOption = this.selectedYear[0].year;\n this.seasonalityCurve = this.seasonalityCurveHardCodedDefault;\n this.totalMonthlyProjections = { monthlyUnits: [], monthlyVolume: [] };\n this.adjustedMonthlyProjections = { monthlyUnits: [], monthlyVolume: [] };\n this.projectionsAreBeingEdited = false;\n this.noProjections = true;\n this.employeeMonthlyProjections = [];\n this.updateEmployeeProjectionsOnNextClicked = true;\n\n let clientShortName = this.currentUserStateService.currentUser.clientShortName;\n if (clientShortName === 'LBA' && !this.impersonationService.isImpersonatingClient()) {\n return;\n }\n\n //this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this.router.url);\n this.getBranches();\n this.showEmployeeProjections = false;\n this.projectionService.getBranchProjectionOpenCloseDates().subscribe((dates) => {\n this.significantDatesHandler(dates);\n });\n }\n\n getBranches() {\n this.branchService.getBranchesOfInterest().subscribe(\n (branches) => {\n if (branches && branches.length) {\n this.branchesOfInterest = branches;\n this.selectedIdentifier = [\n this.branchesOfInterest.find((b) => b.hierarchyIdentifier),\n ];\n this.projectionService\n .getYearsOfInterest(this.selectedIdentifier[0].hierarchyIdentifier)\n .subscribe((years) => {\n if (years && years.length) {\n years.forEach((year) => {\n if (\n this.yearsOfInterest.findIndex(\n (y) => y.yearValue === year\n ) === -1\n ) {\n this.yearsOfInterest.push({\n year: year.toString(),\n yearValue: year,\n });\n }\n });\n this.addYears();\n this.selectedYear = [this.yearsOfInterest[0]];\n } else {\n this.yearsOfInterest = [\n {\n year: new Date().getFullYear().toString(),\n yearValue: new Date().getFullYear(),\n },\n {\n year: (new Date().getFullYear() + 1).toString(),\n yearValue: new Date().getFullYear() + 1,\n },\n ];\n this.selectedYear = [this.yearsOfInterest[0]];\n }\n this.setBranch();\n });\n } else {\n this.toast.warning('No branches of interest found for current user.');\n this.loading = false;\n }\n },\n (error) => {\n console.log(error);\n this.loading = false;\n throw new Error('Problem retrieving the branches.');\n }\n );\n }\n\n addYears() {\n const thisYear = new Date().getFullYear();\n if (this.yearsOfInterest.findIndex((y) => y.yearValue === thisYear) === -1) {\n this.yearsOfInterest.push(\n {\n year: new Date().getFullYear().toString(),\n yearValue: new Date().getFullYear(),\n },\n {\n year: (new Date().getFullYear() + 1).toString(),\n yearValue: new Date().getFullYear() + 1,\n }\n );\n }\n\n this.sortYearsData();\n }\n\n sortYearsData() {\n this.yearsOfInterest?.sort((a, b) => a.yearValue - b.yearValue);\n }\n\n onBranchProjectionChanges() {\n this.totalLoans.valueChanges.subscribe((val) => {\n this.branchProjectionForm.markAsDirty();\n this.unitsPerMonth.setValue(Math.round(val / 12));\n if (this.tenuredProducers) {\n this.unitsPerProducer.setValue(\n Math.round(this.unitsPerMonth.value / this.tenuredProducers.value)\n );\n }\n if (this.totalVolume) {\n this.avgLoanAmount.setValue(Math.round(this.totalVolume.value / val));\n }\n this.adjustedMonthlyProjections.monthlyUnits =\n this.applyUnitSeasonailityCurveAlgorithm(val);\n });\n this.totalVolume.valueChanges.subscribe((val) => {\n this.branchProjectionForm.markAsDirty();\n this.totalMonthlyVolume.setValue(Math.round(val / 12));\n if (this.purchaseMix) {\n this.purchaseVolume.setValue(Math.round((val * this.purchaseMix.value) / 100));\n }\n if (this.governmentMix) {\n this.governmentVolume.setValue(Math.round((val * this.governmentMix.value) / 100));\n }\n if (this.totalLoans) {\n this.avgLoanAmount.setValue(Math.round(val / this.totalLoans.value));\n }\n this.adjustedMonthlyProjections.monthlyVolume =\n this.applyVolumeSeasonalityCurveAlgrithm(val);\n });\n this.purchaseMix.valueChanges.subscribe((val) => {\n this.branchProjectionForm.markAsDirty();\n if (!this.totalVolume.value) {\n return;\n }\n this.purchaseVolume.setValue(Math.round((this.totalVolume.value * val) / 100));\n });\n this.governmentMix.valueChanges.subscribe((val) => {\n this.branchProjectionForm.markAsDirty();\n if (!this.totalVolume.value) {\n return;\n }\n this.governmentVolume.setValue(Math.round((this.totalVolume.value * val) / 100));\n });\n this.tenuredProducers.valueChanges.subscribe((val) => {\n this.branchProjectionForm.markAsDirty();\n this.unitsPerProducer.setValue(Math.round(this.unitsPerMonth.value / val));\n });\n }\n\n onEmployeeProjectionChanges() {\n this.employeeProjections.forEach((employeeProjection, index) => {\n employeeProjection.get('totalEmployeeUnits').valueChanges.subscribe((employeeUnits) => {\n this.employeeUnitsChangedHandler(employeeUnits, index);\n this.branchProjectionForm.markAsDirty();\n });\n employeeProjection\n .get('totalEmployeeVolume')\n .valueChanges.subscribe((employeeVolume) => {\n this.employeeVolumeChangedHandler(employeeVolume, index);\n this.branchProjectionForm.markAsDirty();\n });\n });\n }\n\n employeeVolumeChangedHandler(employeeVolume: number, index: number) {\n const monthlyVolume: number[] = this.applyVolumeSeasonalityCurveAlgrithm(\n employeeVolume,\n this.employeeYTDStats[index]?.termMo\n );\n this.updateEmployeeMonthlyProjections(\n 'volume',\n this.employeeMonthlyProjections[index],\n monthlyVolume\n );\n let totalVolumeOfFTProducers: number = 0;\n this.employeeProjections.forEach((employeeProjection) => {\n totalVolumeOfFTProducers += +employeeProjection.get('totalEmployeeVolume').value;\n });\n this.shrinkStretchVolume.setValue(this.calculateShrinkStretch());\n this.applyMonthlyShrinkStretch();\n }\n\n calculateShrinkStretch(): any {\n if (this.employeeProjections && this.employeeProjections.length > 0) {\n let totalEmployeeProjectedVolume = 0;\n this.employeeProjections.forEach((employee) => {\n totalEmployeeProjectedVolume += employee.get('totalEmployeeVolume').value;\n });\n return this.totalVolume.value - totalEmployeeProjectedVolume;\n } else {\n return this.totalVolume.value;\n }\n }\n\n updateEmployeeMonthlyProjections(\n typeToUpdate: string,\n employeeProjection: EmployeeProjectionData,\n monthlyValues: number[]\n ) {\n if (employeeProjection.monthlyProjections.length === 0) {\n //initialize\n employeeProjection;\n for (let i = 0; i < 12; i++) {\n employeeProjection.monthlyProjections.push({\n primaryIdentifier: employeeProjection.primaryIdentifier,\n units: 0,\n volume: 0,\n YearMonth:\n this.selectedYear[0].year +\n '-' +\n (i < 9 ? '0' + (i + 1).toString() : (i + 1).toString()),\n });\n }\n }\n if (typeToUpdate === 'volume') {\n employeeProjection.monthlyProjections.forEach((month, i) => {\n month.volume = monthlyValues[i];\n });\n } else if (typeToUpdate === 'units') {\n employeeProjection.monthlyProjections.forEach((month, i) => {\n month.units = monthlyValues[i];\n });\n }\n }\n\n employeeUnitsChangedHandler(employeeUnits: number, index: number) {\n const monthlyUnits: number[] = this.applyUnitSeasonailityCurveAlgorithm(\n employeeUnits,\n this.employeeYTDStats[index]?.termMo\n );\n this.updateEmployeeMonthlyProjections(\n 'units',\n this.employeeMonthlyProjections[index],\n monthlyUnits\n );\n this.employeeProjections[index]\n .get('totalEmployeeVolume')\n .setValue(\n Math.round(\n Math.round(this.employeeYTDStats[index]?.avgLoanAmount) === 0\n ? this.avgBranchLoanAmountForNewEmployee * employeeUnits\n : Math.round(this.employeeYTDStats[index]?.avgLoanAmount) * employeeUnits\n )\n );\n let totalUnitsOfFTProducers: number = 0;\n this.employeeProjections.forEach((employeeProjection) => {\n totalUnitsOfFTProducers += +employeeProjection.get('totalEmployeeUnits').value;\n });\n this.shrinkStretchUnits.setValue(this.totalLoans.value - totalUnitsOfFTProducers);\n this.applyMonthlyShrinkStretch();\n }\n\n applyVolumeSeasonalityCurveAlgrithm(\n employeeVolume: number,\n numMonthsProjectedToWork?: number\n ): number[] {\n const monthlyVolume: number[] = [];\n numMonthsProjectedToWork = numMonthsProjectedToWork > 0 ? numMonthsProjectedToWork : 12;\n for (let i = 0; i < 12; i++) {\n const percentage = this.seasonalityCurve[i] / 100;\n const adjustedVolum =\n i + 1 > numMonthsProjectedToWork\n ? 0\n : (employeeVolume / numMonthsProjectedToWork) * percentage;\n const roundedVolume = Math.round(adjustedVolum);\n monthlyVolume.push(roundedVolume);\n }\n const sumOfParts = monthlyVolume.reduce((a, b) => a + b, 0);\n const diff = employeeVolume - sumOfParts;\n monthlyVolume[0] = monthlyVolume[0] + diff;\n return monthlyVolume;\n }\n\n adjustVolumesSoTheySumToEmployeeVolume(\n monthlyVolume: number[],\n diff: number,\n employeeVolume: number\n ) {\n if (diff === 0) {\n return;\n }\n const addition: boolean = diff > 0;\n const adjustment = diff / 12;\n for (let i = 0; i < 12; i++) {\n if (addition) {\n monthlyVolume[i] = monthlyVolume[i] + adjustment;\n } else {\n monthlyVolume[i] = monthlyVolume[i] - adjustment;\n }\n }\n const newTotal = monthlyVolume.reduce((a, b) => a + b, 0);\n const newDiff = employeeVolume - newTotal;\n this.makeFinalAdjustment(monthlyVolume, newDiff);\n }\n\n makeFinalAdjustment(monthlyVolume: number[], newDiff: number) {\n if (newDiff === 0) {\n return;\n }\n const addition: boolean = newDiff > 0;\n if (addition) {\n const indexOfHighest = this.reusableFunctions.indexOfMax(this.seasonalityCurve);\n monthlyVolume[indexOfHighest] = monthlyVolume[indexOfHighest] + newDiff;\n } else {\n const indexOfLowest = this.reusableFunctions.indexOfMin(this.seasonalityCurve);\n monthlyVolume[indexOfLowest] = monthlyVolume[indexOfLowest] - newDiff;\n }\n }\n\n applyMonthlyShrinkStretch() {\n this.monthlyShrinkStretchUnits = [];\n this.monthlyShrinkStretchVol = [];\n this.totalMonthlyProjections.monthlyUnits = [];\n this.totalMonthlyProjections.monthlyVolume = [];\n for (let i = 0; i < 12; i++) {\n let totalMonthlyProjectedUnits = 0;\n let totalMonthlyProjectedVol = 0;\n this.employeeMonthlyProjections.forEach((emp, j) => {\n totalMonthlyProjectedUnits +=\n emp.monthlyProjections.length > i ? emp.monthlyProjections[i]?.units ?? 0 : 0;\n totalMonthlyProjectedVol +=\n emp.monthlyProjections.length > i ? emp.monthlyProjections[i]?.volume ?? 0 : 0;\n });\n this.monthlyShrinkStretchUnits.push(\n this.adjustedMonthlyProjections.monthlyUnits[i] - totalMonthlyProjectedUnits\n );\n this.monthlyShrinkStretchVol.push(\n this.adjustedMonthlyProjections.monthlyVolume[i] - totalMonthlyProjectedVol\n );\n this.totalMonthlyProjections.monthlyUnits.push(totalMonthlyProjectedUnits);\n this.totalMonthlyProjections.monthlyVolume.push(totalMonthlyProjectedVol);\n }\n this.totalUnits = this.totalMonthlyProjections.monthlyUnits.reduce((a, b) => a + b, 0);\n this.totalVol = this.totalMonthlyProjections.monthlyVolume.reduce((a, b) => a + b, 0);\n }\n\n applyUnitSeasonailityCurveAlgorithm(\n employeeUnits: number,\n numMonthsProjectedToWork?: number\n ): number[] {\n const monthlyUnitsRounded: number[] = [];\n const roundedValues: number[] = [];\n numMonthsProjectedToWork = numMonthsProjectedToWork > 0 ? numMonthsProjectedToWork : 12;\n for (let i = 0; i < 12; i++) {\n const unitsRaw =\n i + 1 > numMonthsProjectedToWork\n ? 0\n : ((employeeUnits / numMonthsProjectedToWork) *\n this.seasonalityCurveHardCodedDefault[i]) /\n 100;\n const unitsRounded = this.reusableFunctions.round(unitsRaw, 0);\n monthlyUnitsRounded.push(unitsRounded);\n roundedValues.push(unitsRounded - unitsRaw);\n }\n const diff = monthlyUnitsRounded.reduce((a, b) => a + b, 0) - employeeUnits;\n if (diff) {\n return this.normalizeMonthlyUnits(\n monthlyUnitsRounded,\n diff,\n roundedValues,\n numMonthsProjectedToWork\n );\n } else {\n return monthlyUnitsRounded;\n }\n }\n\n normalizeMonthlyUnits(\n monthlyUnits: number[],\n diff: number,\n roundedValues: number[],\n monthsToConsider: number\n ): number[] {\n const isDiffNegative = diff < 0;\n for (let i = 0; i < Math.abs(diff); i++) {\n if (isDiffNegative) {\n const indexOfMin = this.reusableFunctions.indexOfMin(\n roundedValues.slice(0, monthsToConsider)\n );\n monthlyUnits[indexOfMin] = monthlyUnits[indexOfMin] + 1;\n roundedValues[indexOfMin] = Infinity; //so we can find the next lowest value if needed\n } else {\n const indexOfMax = this.reusableFunctions.indexOfMax(\n roundedValues.slice(0, monthsToConsider)\n );\n monthlyUnits[indexOfMax] = monthlyUnits[indexOfMax] - 1;\n roundedValues[indexOfMax] = -Infinity; //so we can find the next highest value if needed\n }\n }\n return monthlyUnits;\n }\n\n updateEmployeeVolumeProjections() {\n const totalEmployeeProjectedVolume = this.calculateTotalEmployeeProjectedVolume();\n this.shrinkStretchVolume.setValue(totalEmployeeProjectedVolume - this.totalVolume.value);\n this.employeeProjections.forEach((employeeProjection) => {\n employeeProjection\n .get('totalEmployeeVolume')\n .setValue(Math.round(totalEmployeeProjectedVolume));\n });\n }\n\n calculateTotalEmployeeProjectedVolume() {\n let total = 0;\n this.employeeProjections.forEach((employeeProjection) => {\n total += employeeProjection.get('totalEmployeeVolume').value;\n });\n return total;\n }\n\n updateEmployeeProjections() {\n if (!this.totalLoans.dirty && !this.totalVolume.dirty) {\n this.employeeProjections.forEach((employeeProjection, i) => {\n this.updateEmployeeMonthlyProjections(\n 'units',\n this.employeeMonthlyProjections[i],\n this.applyUnitSeasonailityCurveAlgorithm(\n employeeProjection.get('totalEmployeeUnits').value,\n this.employeeYTDStats[i]?.termMo\n )\n );\n this.updateEmployeeMonthlyProjections(\n 'volume',\n this.employeeMonthlyProjections[i],\n this.applyUnitSeasonailityCurveAlgorithm(\n employeeProjection.get('totalEmployeeVolume').value,\n this.employeeYTDStats[i]?.termMo\n )\n );\n });\n } else {\n let tenuredEmployeeProjectedUnits = 0;\n let tenuredEmplyoeeProjectedVolume = 0;\n this.employeeProjections.forEach((employeeProjection, i) => {\n let employeeProjectedUnits =\n this.employeeYTDStats[i].avgFundedUnits *\n (this.employeeYTDStats[i].termMo > 0 ? this.employeeYTDStats[i].termMo : 12);\n let employeeProjectedVolume =\n this.employeeYTDStats[i].avgFundedVol *\n (this.employeeYTDStats[i].termMo > 0 ? this.employeeYTDStats[i].termMo : 12);\n if (employeeProjectedUnits === 0) {\n employeeProjectedUnits = 12;\n }\n if (employeeProjectedVolume === 0) {\n this.avgBranchLoanAmountForNewEmployee = Math.round(\n this.calculateAvgLoanAmountForNewEmployee()\n );\n employeeProjectedVolume = this.avgBranchLoanAmountForNewEmployee * 12;\n }\n employeeProjection.get('totalEmployeeUnits').setValue(employeeProjectedUnits);\n this.updateEmployeeMonthlyProjections(\n 'units',\n this.employeeMonthlyProjections[i],\n this.applyUnitSeasonailityCurveAlgorithm(\n employeeProjectedUnits,\n this.employeeYTDStats[i]?.termMo\n )\n );\n employeeProjection\n .get('totalEmployeeVolume')\n .setValue(Math.round(employeeProjectedVolume));\n this.updateEmployeeMonthlyProjections(\n 'units',\n this.employeeMonthlyProjections[i],\n this.applyUnitSeasonailityCurveAlgorithm(\n employeeProjectedUnits,\n this.employeeYTDStats[i]?.termMo\n )\n );\n tenuredEmployeeProjectedUnits += employeeProjectedUnits;\n tenuredEmplyoeeProjectedVolume += employeeProjectedVolume;\n });\n this.shrinkStretchUnits.setValue(this.totalLoans.value - tenuredEmployeeProjectedUnits);\n this.shrinkStretchVolume.setValue(\n this.totalVolume.value - tenuredEmplyoeeProjectedVolume\n );\n }\n this.applyMonthlyShrinkStretch();\n }\n\n calculateAvgLoanAmountForNewEmployee() {\n //find min average greater than 0 and use that for new employee loan amount average.\n let minLoanAmountAvg = Infinity;\n this.employeeYTDStats.forEach((employeeStats) => {\n if (employeeStats.avgFundedVol > 0 && employeeStats.avgFundedVol < minLoanAmountAvg) {\n minLoanAmountAvg = employeeStats.avgFundedVol;\n }\n });\n return minLoanAmountAvg;\n }\n\n getThisEmployeeProjectionControlGroup(index: number) {\n return this.employeeProjections[index];\n }\n\n getEmployeeUnitsControl(index: number) {\n return this.employeeProjections[index].get('totalEmployeeUnits');\n }\n\n getEmployeeVolumeControl(index: number) {\n return this.employeeProjections[index].get('totalEmployeeVolume');\n }\n\n get shrinkStretchUnits() {\n return this.branchProjectionForm.get('branchProjections').get('shrinkStretchUnits');\n }\n\n get shrinkStretchVolume() {\n return this.branchProjectionForm.get('branchProjections').get('shrinkStretchVolume');\n }\n\n get branchProjections() {\n return this.branchProjectionForm.get('branchProjections');\n }\n\n get employeeProjections() {\n return (this.branchProjectionForm.get('employeeProjections')).controls;\n }\n\n get totalLoans() {\n return this.branchProjectionForm.get('branchProjections').get('totalLoans');\n }\n\n get totalVolume() {\n return this.branchProjectionForm.get('branchProjections').get('totalVolume');\n }\n\n get purchaseMix() {\n return this.branchProjectionForm.get('branchProjections').get('purchaseMix');\n }\n\n get governmentMix() {\n return this.branchProjectionForm.get('branchProjections').get('governmentMix');\n }\n\n get tenuredProducers() {\n return this.branchProjectionForm.get('branchProjections').get('tenuredProducers');\n }\n\n get unitsPerMonth() {\n return this.branchProjectionForm.get('branchProjections').get('unitsPerMonth');\n }\n\n get avgLoanAmount() {\n return this.branchProjectionForm.get('branchProjections').get('avgLoanAmount');\n }\n\n get totalMonthlyVolume() {\n return this.branchProjectionForm.get('branchProjections').get('totalMonthlyVolume');\n }\n\n get purchaseVolume() {\n return this.branchProjectionForm.get('branchProjections').get('purchaseVolume');\n }\n\n get governmentVolume() {\n return this.branchProjectionForm.get('branchProjections').get('governmentVolume');\n }\n\n get unitsPerProducer() {\n return this.branchProjectionForm.get('branchProjections').get('unitsPerProducer');\n }\n\n get hierarchyIdentifier() {\n return this.branchProjectionForm.get('branchProjections').get('hierarchyIdentifier');\n }\n\n get year() {\n return this.branchProjectionForm.get('branchProjections').get('year');\n }\n\n get isDraft() {\n return this.branchProjectionForm.get('branchProjections').get('isDraft');\n }\n\n createFormGroup(): any {\n return this.formBuilder.group({\n branchProjections: this.formBuilder.group({\n totalLoans: new UntypedFormControl(0, [\n Validators.required,\n Validators.max(999999),\n ]),\n totalVolume: new UntypedFormControl(0, [\n Validators.required,\n Validators.max(9999999999999),\n ]),\n purchaseMix: new UntypedFormControl(0, [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n ]),\n governmentMix: new UntypedFormControl(0, [\n Validators.required,\n Validators.min(0),\n Validators.max(100),\n ]),\n tenuredProducers: new UntypedFormControl(0, [\n Validators.required,\n Validators.max(999999),\n ]),\n unitsPerMonth: new UntypedFormControl(0, Validators.required),\n avgLoanAmount: new UntypedFormControl(0, Validators.required),\n totalMonthlyVolume: new UntypedFormControl(0, Validators.required),\n purchaseVolume: new UntypedFormControl(0, Validators.required),\n governmentVolume: new UntypedFormControl(0, Validators.required),\n isDraft: new UntypedFormControl(),\n shrinkStretchUnits: new UntypedFormControl(),\n shrinkStretchVolume: new UntypedFormControl(),\n hierarchyIdentifier: new UntypedFormControl('', Validators.required),\n year: new UntypedFormControl(),\n unitsPerProducer: new UntypedFormControl(0, Validators.required),\n }),\n employeeProjections: this.formBuilder.array([], Validators.required),\n });\n }\n\n nextClicked() {\n if (this.updateEmployeeProjectionsOnNextClicked) {\n this.updateEmployeeProjections();\n }\n this.showEmployeeProjections = true;\n this.projectionsAreBeingEdited = true;\n }\n\n onSubmit() {\n this.submitLoading = true;\n this.branchProjectionForm.markAsPristine();\n if (!this.isSeasonalityCurveAve100()) {\n this.toast.warning('Seanonality curve must average to exactly 100.');\n this.submitLoading = false;\n return;\n //don't allow submission\n }\n this.isDraft.setValue(false);\n this.saveProjections();\n }\n\n isSeasonalityCurveAve100(): boolean {\n let ave = this.seasonalityCurve.reduce((a, b) => a + b, 0) / 12;\n return ave === 100;\n }\n\n private saveProjections() {\n if (this.branchIdentifier) {\n this.year.setValue(this.selectedYear[0].year);\n if (!this.showEmployeeProjections) {\n this.updateEmployeeProjections();\n this.updateEmployeeVolumeProjections();\n }\n this.projectionService\n .saveBranchProjection({\n branchProjectionData: this.convertBranchProjectionTypes(),\n seasonalityCurve: this.seasonalityCurve,\n employeeProjectionData: this.employeeMonthlyProjections,\n projectionEmployeeYTDData: this.employeeYTDStats ?? [],\n })\n .subscribe(\n () => {\n this.showSuccessfulSubmitMessage = true;\n this.submitLoading = false;\n this.branchProjectionForm.markAsPristine();\n },\n () => {\n this.toast.warning(\n \"Something went wrong saving your branch's projections.\"\n );\n this.submitLoading = false;\n }\n );\n }\n }\n\n convertBranchProjectionTypes(): BranchProjectionData {\n return {\n hierarchyIdentifier: this.hierarchyIdentifier.value,\n year: +this.year.value,\n totalLoans: +this.totalLoans.value,\n totalVolume: Math.round(+this.totalVolume.value),\n purchaseMix: +this.purchaseMix.value,\n governmentMix: +this.governmentMix.value,\n tenuredProducers: +this.tenuredProducers.value,\n unitsPerMonth: +this.unitsPerMonth.value,\n avgLoanAmount: Math.round(+this.avgLoanAmount.value),\n totalMonthlyVolume: Math.round(+this.totalMonthlyVolume.value),\n purchaseVolume: Math.round(+this.purchaseVolume.value),\n governmentVolume: +this.governmentVolume.value,\n unitsPerProducer: +this.unitsPerProducer.value,\n isDraft: this.isDraft.value,\n shrinkStretchUnits: +this.shrinkStretchUnits.value,\n shrinkStretchVolume: Math.round(+this.shrinkStretchVolume.value),\n };\n }\n\n public getBranchProjectionHandler(branchProjectionData: BranchProjectionServerData) {\n if (branchProjectionData && branchProjectionData.branchProjectionData) {\n if (\n branchProjectionData.seasonalityCurve &&\n branchProjectionData.seasonalityCurve.length === 12\n ) {\n this.seasonalityCurve = branchProjectionData.seasonalityCurve;\n } else {\n this.seasonalityCurve = this.seasonalityCurveHardCodedDefault;\n }\n\n this.employeeProjectionData = this.formatServerData(\n branchProjectionData.employeeProjectionData\n );\n // Input data\n if (branchProjectionData.branchProjectionData.totalLoans) {\n this.totalLoans.setValue(branchProjectionData.branchProjectionData.totalLoans);\n }\n if (branchProjectionData.branchProjectionData.totalVolume) {\n this.totalVolume.setValue(branchProjectionData.branchProjectionData.totalVolume);\n }\n if (branchProjectionData.branchProjectionData.governmentMix) {\n this.governmentMix.setValue(\n branchProjectionData.branchProjectionData.governmentMix\n );\n }\n if (branchProjectionData.branchProjectionData.purchaseMix) {\n this.purchaseMix.setValue(branchProjectionData.branchProjectionData.purchaseMix);\n }\n if (branchProjectionData.branchProjectionData.tenuredProducers) {\n this.tenuredProducers.setValue(\n branchProjectionData.branchProjectionData.tenuredProducers\n );\n }\n\n this.shrinkStretchUnits.setValue(\n branchProjectionData.branchProjectionData.shrinkStretchUnits\n );\n this.shrinkStretchVolume.setValue(\n branchProjectionData.branchProjectionData.shrinkStretchVolume\n );\n\n // Result data\n if (branchProjectionData.branchProjectionData.unitsPerMonth) {\n this.unitsPerMonth.setValue(\n branchProjectionData.branchProjectionData.unitsPerMonth\n );\n }\n if (branchProjectionData.branchProjectionData.avgLoanAmount) {\n this.avgLoanAmount.setValue(\n branchProjectionData.branchProjectionData.avgLoanAmount\n );\n }\n if (branchProjectionData.branchProjectionData.totalMonthlyVolume) {\n this.totalMonthlyVolume.setValue(\n branchProjectionData.branchProjectionData.totalMonthlyVolume\n );\n }\n if (branchProjectionData.branchProjectionData.purchaseVolume) {\n this.purchaseVolume.setValue(\n branchProjectionData.branchProjectionData.purchaseVolume\n );\n }\n if (branchProjectionData.branchProjectionData.governmentVolume) {\n this.governmentVolume.setValue(\n branchProjectionData.branchProjectionData.governmentVolume\n );\n }\n if (branchProjectionData.branchProjectionData.unitsPerProducer) {\n this.unitsPerProducer.setValue(\n branchProjectionData.branchProjectionData.unitsPerProducer\n );\n }\n } else {\n this.branchProjectionForm.reset();\n this.hierarchyIdentifier.setValue(this.branchIdentifier);\n if (!this.seasonalityCurve) {\n this.seasonalityCurve = this.seasonalityCurveHardCodedDefault;\n }\n }\n }\n formatServerData(clientEmployeeProjections: ClientEmployeeMonthProjection[]): EmployeeTotals[] {\n const employeeProjectionData: EmployeeTotals[] = [];\n const primaryIdentifierSet = new Set();\n clientEmployeeProjections.forEach((empProj) => {\n if (primaryIdentifierSet.has(empProj.primaryIdentifier)) {\n const employeeData = employeeProjectionData.find(\n (empProjMonth) => empProjMonth.primaryIdentifier === empProj.primaryIdentifier\n );\n employeeData.totalUnits = employeeData.totalUnits + empProj.units;\n employeeData.totalVolume = employeeData.totalVolume + empProj.volume;\n } else {\n //first time seeing this primary identifier in the list\n employeeProjectionData.push({\n primaryIdentifier: empProj.primaryIdentifier,\n totalUnits: empProj.units,\n totalVolume: empProj.volume,\n });\n primaryIdentifierSet.add(empProj.primaryIdentifier);\n }\n });\n return employeeProjectionData;\n }\n\n public setBranch() {\n this.branchIdentifier = this.selectedIdentifier[0].hierarchyIdentifier;\n this.yearOption = this.selectedYear[0].year;\n if (this.dates) {\n this.significantDatesHandler(this.dates);\n }\n this.projectionsAreEditable = false;\n this.projectionsAreBeingEdited = false;\n this.addProjections = false;\n this.branchProjectionForm.reset();\n this.employeeMonthlyProjections = [];\n (this.branchProjectionForm.get('employeeProjections')).clear();\n this.showEmployeeProjections = false;\n try {\n if (this.branchIdentifier) {\n this.retrieveBranchData();\n }\n } catch (e) {}\n }\n\n showNoProjectionsMessage() {\n return (\n this.noProjections &&\n +this.selectedYear[0].year === new Date().getUTCFullYear() &&\n !this.projectionsAreOpen\n );\n }\n\n retrieveBranchData() {\n this.today = new Date().toLocaleDateString();\n this.branchProjectionForm.reset();\n this.hierarchyIdentifier.setValue(this.branchIdentifier);\n this.employeeProjectionData = undefined;\n this.projectionService\n .getBranchProjection(this.branchIdentifier, +this.selectedYear[0].year)\n .subscribe(\n (branchProjectionData) => {\n if (branchProjectionData) {\n this.previousBranchProjectionConfigData = branchProjectionData;\n this.noProjections = false;\n this.getBranchProjectionHandler(branchProjectionData);\n } else {\n this.noProjections = true;\n this.projectionsAreEditable = true;\n this.seasonalityCurve = this.seasonalityCurveHardCodedDefault;\n }\n forkJoin([\n this.projectionService.getBranchYTD(\n this.branchIdentifier,\n this.decideWhichYearToRetrieve()\n ),\n this.projectionService.getEmployeeYTDProjHelper(\n this.branchIdentifier,\n this.decideWhichYearToRetrieve(),\n branchProjectionData?.branchProjectionData?.clientProjectionBranchKey\n ),\n ]).subscribe(\n ([branchYTDData, employeeYTDStats]) => {\n this.getEmployeeYTDProjHelperHandler(employeeYTDStats);\n this.getBranchYTDHandler(branchYTDData);\n this.onEmployeeProjectionChanges();\n },\n (err) => {\n throw new Error(err);\n }\n );\n },\n (err) => {\n throw new Error(err);\n }\n );\n }\n\n decideWhichYearToRetrieve(): number {\n const currentYear = new Date().getFullYear();\n if (this.selectedYear[0].yearValue === currentYear) {\n this.statDescription = (currentYear - 1).toString() + ' actual was ';\n return currentYear - 1;\n } else {\n this.statDescription = 'YTD actual is ';\n return currentYear;\n }\n }\n\n significantDatesHandler(dates: BranchProjectionOpenCloseDates[]) {\n this.dates = dates;\n if (+this.selectedYear[0].year === new Date().getUTCFullYear()) {\n this.openDate = dates[0].openDate;\n this.closingDate = dates[0].closingDate;\n } else if (+this.selectedYear[0].year === new Date().getUTCFullYear() + 1) {\n this.openDate = dates[1].openDate;\n this.closingDate = dates[1].closingDate;\n }\n this.closingDate = new Date(\n this.reusableFunctions\n .getDateFromDateTimeOffset(this.closingDate)\n .setUTCHours(23, 59, 59)\n );\n this.projectionsAreOpen = this.areProjectionsOpenAtThisTime();\n if (this.projectionsAreOpen) {\n this.yearProjectionsAreOpen =\n this.openDate === dates[0].openDate\n ? dates[0].projectionYear\n : dates[1].projectionYear;\n }\n }\n\n areProjectionsOpenAtThisTime(): boolean {\n const currentDate = new Date();\n return currentDate <= new Date(this.closingDate) && currentDate >= new Date(this.openDate);\n }\n\n getEmployeeYTDProjHelperHandler(employeeYTDStats: EmployeeYTD[]) {\n this.employeeYTDStats = employeeYTDStats;\n if (this.employeeProjectionData) {\n this.addControlsForEmployees(this.employeeProjectionData);\n this.updateEmployeeProjectionsOnNextClicked = false;\n this.employeeProjectionData.forEach((employeeProjection, i) => {\n if (this.employeeProjections[i]) {\n this.employeeProjections[i]\n .get('employeeIdentifier')\n .setValue(employeeProjection.primaryIdentifier);\n this.employeeProjections[i]\n .get('totalEmployeeUnits')\n .setValue(employeeProjection.totalUnits);\n this.employeeProjections[i]\n .get('totalEmployeeVolume')\n .setValue(employeeProjection.totalVolume);\n }\n });\n if (!this.projectionsAreEditable) {\n this.updateEmployeeProjections();\n }\n this.updateEmployeeProjectionsOnNextClicked = true;\n this.branchProjectionForm.markAsPristine();\n } else if (!!employeeYTDStats) {\n this.addControlsForEmployees(employeeYTDStats);\n }\n this.loading = false;\n }\n calculateTotal(monthlyValues: number[]): any {\n return monthlyValues.reduce((a, b) => a + b);\n }\n\n addControlsForEmployees(employeeYTDStats: EmployeeTotals[] | EmployeeYTD[]) {\n employeeYTDStats.forEach((employeeYTD) => {\n let identifier = employeeYTD.primaryIdentifier ?? employeeYTD.employeeIdentifier;\n const employeeProjection = this.formBuilder.group({\n employeeIdentifier: new UntypedFormControl(identifier, Validators.required),\n totalEmployeeUnits: new UntypedFormControl('', [\n Validators.required,\n Validators.max(9999),\n ]),\n totalEmployeeVolume: new UntypedFormControl('', [\n Validators.required,\n Validators.max(6000000000),\n ]),\n });\n this.employeeProjections.push(employeeProjection);\n this.employeeMonthlyProjections.push({\n primaryIdentifier: identifier,\n monthlyProjections: [],\n });\n });\n }\n\n private getBranchYTDHandler(branchYTDData: BranchYTD) {\n if (branchYTDData) {\n try {\n this.data.loans.current = branchYTDData.ytdUnits;\n this.data.volume.current = branchYTDData.ytdVol;\n this.data.purchase.current = branchYTDData.purchase;\n this.data.government.current = branchYTDData.govt;\n this.data.tenured.current = branchYTDData.tenured;\n } catch (e) {}\n } else {\n this.data = {\n loans: {\n current: null,\n projection: null,\n },\n volume: {\n current: null,\n projection: null,\n },\n purchase: {\n current: null,\n projection: null,\n },\n government: {\n current: null,\n projection: null,\n },\n tenured: {\n current: null,\n },\n };\n }\n }\n\n //applyDisplayOptions(event: DisplayOptions[]) {\n // this.displayOptions = event;\n // this.projectionService.getOpenClosedDates()\n // .subscribe(dates => { this.significantDatesHandler(dates) });\n // this.setBranch();\n //}\n\n onBranchChange(branch: Branch) {\n if (branch) {\n this.selectedIdentifier = [branch];\n this.setBranch();\n }\n }\n\n onYearChange(year: Year) {\n if (year) {\n this.selectedYear = [year];\n if (this.selectedIdentifier) {\n this.setBranch();\n }\n }\n }\n\n onItemDeSelect(event) {}\n onSelectAll(event) {}\n onDeSelectAll(event) {}\n\n editEmployeeProjectionsClicked() {\n this.projectionsAreEditable = true;\n this.showEmployeeProjections = true;\n this.projectionsAreBeingEdited = true;\n }\n\n editBranchProjectionsClicked() {\n this.projectionsAreBeingEdited = true;\n this.projectionsAreEditable = true;\n this.showEmployeeProjections = false;\n }\n\n addProjectionsClicked() {\n this.addProjections = true;\n }\n\n viewClickedAfterSuccess() {\n this.showSuccessfulSubmitMessage = false;\n this.projectionsAreBeingEdited = false;\n this.projectionsAreEditable = false;\n scroll(0, 0);\n }\n\n editClickedAfterSuccess() {\n this.showSuccessfulSubmitMessage = false;\n this.projectionsAreBeingEdited = true;\n this.projectionsAreEditable = true;\n scroll(0, 0);\n }\n\n topRightXClickedAfterSuccess() {\n this.viewClickedAfterSuccess();\n scroll(0, 0);\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.showSuccessfulSubmitMessage = false;\n this.viewClickedAfterSuccess();\n }\n }\n\n discardClicked() {\n this.projectionsAreBeingEdited = false;\n this.branchProjectionForm.reset();\n this.setBranch();\n }\n\n anyEmployeeProjectionIsInvalid() {\n return this.employeeProjections.some((employeeProjection) => {\n return (\n !employeeProjection.get('totalEmployeeUnits').valid ||\n !employeeProjection.get('totalEmployeeVolume').valid\n );\n });\n }\n\n showProjectionsAreNotOpenYetMessage() {\n if (this.openDate) {\n return (\n +this.selectedYear[0].year >= new Date().getUTCFullYear() &&\n new Date() < new Date(this.openDate)\n );\n }\n return false;\n }\n\n showProjectionsAreAlreadyClosedMessage() {\n return (\n !this.projectionsAreOpen && +this.selectedYear[0].year === new Date().getUTCFullYear()\n );\n }\n}\n","\n\n
\n \n
\n \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 { DisplayOptions, ISyncAsOfDateInf } from '../../../shared/interfaces/display-options';\nimport { IKPIDataParams, KPI, KPISparklineData } from '../../../shared/interfaces/kpi-data';\nimport { SortDescriptor, orderBy, filterBy, State } from '@progress/kendo-data-query';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport {\n NoDataActionType,\n NoDataTypes,\n NoDataSourceType,\n} from '../../../shared/interfaces/no-data';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { Router } from '@angular/router';\nimport { KPIService } from '../../../shared/services/kpi.service';\nimport { LimeGearCharts } from '../../../shared/classes/chart-data';\nimport { DecimalPipe } from '@angular/common';\nimport { IPageHeadline } from '../../../shared/classes/page-title-parameters';\nimport { HierarchyService } from 'app/modules/settings/services/hierarchy.service';\nimport { UserHierarchyByRole } from 'app/modules/settings/interfaces/hierarchy-data';\nimport { FiltersService } from 'app/modules/shared/services/filters.service';\nimport * as Highcharts from 'highcharts';\nimport { IStaffPosition } from '../../../shared/interfaces/user-location';\nimport {\n IPaginatedDataInfo,\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\nimport {\n IChartParameters,\n SparklineChartOptions,\n} from 'app/modules/shared/classes/sparkline-chart-options';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\n\n@Component({\n selector: 'app-performance-insights-kpi-lo',\n templateUrl: './performance-insights-kpi-lo.component.html',\n styleUrls: ['./performance-insights-kpi-lo.component.scss'],\n})\nexport class PerformanceInsightsKpiLOComponent implements OnInit {\n entityList: UserHierarchyByRole[] = [];\n saveEmployeeList: UserHierarchyByRole[] = [];\n selectedEntity: UserHierarchyByRole[] = [];\n entityListSettings: object;\n displayOptions: DisplayOptions[];\n roleName: string;\n loading: boolean;\n isDataLoaded: boolean = false;\n\n sort: SortDescriptor[] = [{ field: 'kpiDesc', dir: 'asc' }];\n selectedKPI: KPI;\n\n headerStyle: { [key: string]: string } = {\n 'text-align': 'left',\n 'background-color': '#223540',\n color: '#FFFFFF',\n 'border-color': '#223540',\n };\n gridView: GridDataResult;\n skip = 0;\n pageSize = 10;\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n gridState: State = {\n sort: [],\n skip: 0,\n take: 10,\n };\n scrollable = true;\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\n limeGearCharts: LimeGearCharts.LimeGearChart;\n xTitle: string = 'Week';\n records: KPISparklineData[];\n periodCnt: number = 12;\n noDataType: NoDataTypes;\n pageHeadline: IPageHeadline;\n noDataForCompany: boolean;\n kpiSearchTerm: string = '';\n syncAsOfDateInf: ISyncAsOfDateInf;\n positions: IStaffPosition[];\n selectedPosition: IStaffPosition[];\n kpiProfileSettings: object;\n parameters: IKPIDataParams;\n action: NoDataActionType;\n tableDataProperties: ITableDataProperties;\n tableColumnProperties: ITableColumnProperties;\n hierarchyIdentifier: string;\n currentPeriodData: KPISparklineData[];\n fullDataset: KPISparklineData[];\n paginatedData: KPISparklineData[];\n spco: SparklineChartOptions;\n\n constructor(\n private _KPIService: KPIService,\n private _router: Router,\n private _reusableFunctions: ReusableFunctions,\n private decimalPipe: DecimalPipe,\n private hierarchyService: HierarchyService,\n private filtersService: FiltersService\n ) {}\n\n ngOnInit() {\n scroll(0, 0); // Scroll to top of the page\n this.records = [];\n this.action = NoDataActionType.pageStart;\n this.selectedKPI = {\n kpiMatrixKey: 0,\n clientKPIMatrixDescription: '',\n kpiDisplayShort: '',\n };\n\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Key Performance Indicators',\n linkArray: [\n {\n moduleLink: 'performance/insights/kpi-employee',\n linkTitle: 'KPI LO',\n showLink: true,\n },\n ],\n };\n\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this._reusableFunctions,\n this.decimalPipe\n );\n\n this.entityListSettings = {\n singleSelection: true,\n text: '',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: '',\n primaryKey: '',\n enableFilterSelectAll: false,\n };\n\n this.kpiProfileSettings = {\n singleSelection: true,\n text: 'Select KPI profile',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'position',\n primaryKey: 'positionAbbv',\n enableFilterSelectAll: false,\n };\n\n this.parameters = {\n fromDatePeriod: '',\n kpiMatrix: '',\n loanType: 'All',\n loanPurpose: 'All',\n channel: 'All',\n hFilterJSON: this._reusableFunctions.getHierarchyFilters(),\n roleName: '',\n ymc: '',\n identifier: '',\n staffingKey: '',\n positionAbbv: '',\n };\n\n this.noDataType = {\n action: this.action,\n searchTerm: this.kpiSearchTerm,\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.table,\n };\n\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(this._router.url);\n this.currentPeriodData = [];\n this.spco = new SparklineChartOptions(this._reusableFunctions);\n this.initiateTableProperties();\n this.setDisplayOptionsSelected();\n this.setDDls();\n }\n\n formatKPI(kpi: KPISparklineData): string {\n let kpiValueToDisplay = '';\n if (kpi && (kpi.kpiValue !== undefined || kpi.kpiValue !== null)) {\n kpiValueToDisplay = this._reusableFunctions.formatNumber(\n kpi.kpiValue,\n kpi.precision,\n kpi.kpiFormat\n );\n }\n return kpiValueToDisplay;\n }\n\n setDisplayOptionsSelected() {\n let asOfDateId = 'scorecardAsOf';\n let syncWithDisplayOptionId = 'dateRange_Q_Y_3m_6m_12m';\n this.syncAsOfDateInf = {\n asOfDateId: asOfDateId,\n syncWithDisplayOptionId: syncWithDisplayOptionId,\n };\n this.parameters.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === syncWithDisplayOptionId.toLowerCase()\n ).selectedOptions;\n\n this.parameters.ymc = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === asOfDateId.toLowerCase()\n ).selectedOptions;\n let groupByRoles = this.displayOptions.find((item) => item.optionKey === 'groupByRoles');\n if (groupByRoles) {\n this.roleName = groupByRoles.selectedOptions;\n }\n let text: string = 'Select ' + this.roleName;\n this.entityListSettings['text'] = text;\n if (this.roleName == 'Employee') {\n this.entityListSettings['labelKey'] = 'employeeName';\n this.entityListSettings['primaryKey'] = 'employeeIdentifier';\n } else {\n this.entityListSettings['labelKey'] = 'hierarchyName';\n this.entityListSettings['primaryKey'] = 'hierarchyIdentifier';\n }\n this.parameters.roleName = this.roleName;\n this.entityListSettings = Object.assign({}, this.entityListSettings);\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n let oldRole = this.parameters.roleName;\n this.displayOptions = event;\n let newRole = this.displayOptions.find((opt) => opt.optionKey === 'groupByRoles');\n this.action = NoDataActionType.filter;\n this.setDisplayOptionsSelected();\n this.reSetGrid();\n\n if (newRole && newRole.selectedOptions != oldRole) {\n this.setDDls();\n } else {\n this.getKPIData();\n }\n }\n\n onSelectionChange(event) {\n this.action = NoDataActionType.filter;\n this.reSetGrid();\n this.getKPIData();\n }\n\n reSetGrid() {\n this.gridView = {\n data: [],\n total: 0,\n };\n }\n\n getKPIData() {\n let identifier = 'employeeIdentifier';\n if (this.roleName !== 'Employee') {\n identifier = 'hierarchyIdentifier';\n }\n this.parameters.identifier = this.selectedEntity[0][identifier];\n this.loading = true;\n\n this.resetChartData();\n\n this._KPIService.getSparklineDataEmployee(this.parameters).subscribe(\n (data) => {\n this.fullDataset = data;\n this.currentPeriodData = data.filter((x) => x.isCurrentPeriod === true);\n this.tableDataProperties.gridData = this.currentPeriodData;\n this.tableDataProperties.hasData = true;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n this.loading = false;\n },\n (error) => {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties.action = NoDataActionType.error;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n );\n }\n\n resetChartData() {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = false;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n\n initiateTableProperties() {\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'KPIs for Each Employee',\n initialPageSize: 10,\n initialSkip: 0,\n height: 700,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: true,\n pageable: true,\n useLGScroll: false,\n };\n\n let columnProperties: ITableColumns[] = [\n {\n fieldId: 'clientKPIMatrixDescription',\n fieldName: 'KPI',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 100,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'wgtKPI',\n fieldName: 'Value',\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'dynamic',\n decimalPlaces: 3,\n width: 60,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'pctOfTarget',\n fieldName: '% of Target',\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'percent',\n decimalPlaces: 0,\n width: 60,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'valuesSparkline',\n fieldName: 'Per Month',\n fieldOrder: 3,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 100,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'wgtKPI',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'kpiDisplayShort',\n datatype: null,\n precision: null,\n },\n },\n },\n {\n fieldId: 'changesSparkline',\n fieldName: 'Changes Per Month',\n fieldOrder: 4,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 100,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'wgtKPI',\n inComponentChartBuilding: false,\n chartType: 'column',\n isChanges: true,\n tooltipProperties: {\n labelField: 'kpiDisplayShort',\n datatype: null,\n precision: null,\n },\n },\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n gridChangeEvent(event: IPaginatedDataInfo) {\n this.setColumnFormat();\n this.updateTableColumnProperties();\n this.tableColumnProperties = Object.assign({}, this.tableColumnProperties);\n this.paginatedData = event?.gridData;\n\n let chartParams: IChartParameters = {\n paginatedData: this.paginatedData,\n fullDataset: this.fullDataset,\n toGroupByColumnHeader: 'clientKPIMatrixDescription',\n calculateChange: true,\n columnList: this.tableColumnProperties.columnProperties,\n chartIdColumn: 'rank',\n chartType: 'area',\n color: 'rgb(124, 181, 236)',\n };\n\n setTimeout(() => {\n this.spco.setCharts(chartParams);\n }, 0);\n }\n\n updateTableColumnProperties() {\n let hierarchyFieldInf = this.tableColumnProperties.columnProperties.find(\n (colInf) => colInf.backUpFieldId === 'hierarchyField'\n );\n\n if (hierarchyFieldInf) {\n hierarchyFieldInf.fieldName = this.roleName;\n }\n }\n\n setColumnFormat() {\n let columnsTobeFormatted = ['wgtKPI'];\n let columnProperties = this.tableColumnProperties.columnProperties;\n\n columnsTobeFormatted.forEach((fieldId) => {\n let valueColumn = columnProperties.find((col) => col.fieldId === fieldId);\n if (valueColumn) {\n let format = valueColumn.dataType;\n let precision = this.currentPeriodData[0]?.precision ?? valueColumn.decimalPlaces;\n valueColumn.dataType = format as any;\n valueColumn.decimalPlaces = precision;\n }\n });\n }\n\n updateGrid() {\n let localData = this.searchResults();\n let orderedData = orderBy(localData, this.sort).slice(this.skip, this.skip + this.pageSize);\n this.gridView = {\n data: orderedData,\n total: localData.length,\n };\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.getKPIData();\n }\n\n getChartXLabel(dateRange: string): void {\n this.xTitle = 'Month';\n }\n\n applyNewFilters(event: string) {\n this.reSetGrid();\n this.parameters.hFilterJSON = event;\n this.action = NoDataActionType.filter;\n this.getKPIData();\n }\n\n setNodataType(action: NoDataActionType) {\n if (this.kpiSearchTerm && this.kpiSearchTerm.length > 0) {\n this.noDataType.action = NoDataActionType.search;\n } else {\n this.noDataType.action = action;\n }\n this.noDataForCompany = true;\n this.loading = false;\n }\n\n searchResults() {\n let searchedData: KPISparklineData[] = [];\n if (this.kpiSearchTerm && this.kpiSearchTerm.length > 0) {\n let searchTermTokens = this.kpiSearchTerm.split(' ');\n searchedData = filterBy(this.records, {\n logic: 'or',\n filters: [\n {\n field: 'kpiDesc',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n searchedData = filterBy(searchedData, {\n logic: 'or',\n filters: [\n {\n field: 'kpiDesc',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n } else {\n searchedData = this.records;\n }\n\n if (searchedData.length === 0) {\n this.noDataForCompany = true;\n }\n return searchedData;\n }\n\n searchRows(event) {\n this.skip = 0;\n this.kpiSearchTerm = event;\n this.setNodataType(NoDataActionType.search);\n this.noDataType.searchTerm = this.kpiSearchTerm;\n setTimeout(() => {\n this.updateGrid();\n }, 1000);\n }\n\n onSelectionChangeProfile(event) {\n this.reSetGrid();\n this.setSelectedProfile();\n this.getEntityList();\n }\n\n setSelectedProfile() {\n let defaultProfileAbbv = 'LO';\n if (!(this.selectedPosition && this.selectedPosition.length > 0)) {\n let defaultProfile = this.positions.find(\n (pos) => pos.positionAbbv === defaultProfileAbbv\n );\n if (defaultProfile) {\n this.selectedPosition = [defaultProfile];\n }\n }\n }\n\n setDDls() {\n this.loading = true;\n if (this.roleName && this.roleName === 'Employee') {\n this.filtersService.getPosition(this.parameters).subscribe((res) => {\n this.positions = res;\n if (res && res.length > 0) {\n this.setSelectedProfile();\n this.getEntityList();\n } else {\n this.noDataForCompany = true;\n this.loading = false;\n }\n });\n } else {\n this.getEntityList();\n }\n }\n\n getEntityList() {\n this.selectedEntity = [];\n this.entityList = [];\n this.reSetGrid();\n if (this.roleName.toLowerCase() === 'employee') {\n this.parameters.staffingKey = this.selectedPosition[0].staffingKey.toString();\n this.parameters.positionAbbv = this.selectedPosition[0].positionAbbv;\n\n this.hierarchyService.getEmployeeListByAsOfDateAndPosition(this.parameters).subscribe(\n (data) => {\n this.entityList = data;\n this.setNodataType(NoDataActionType.filter);\n },\n (error) => {\n this.setNodataType(NoDataActionType.error);\n }\n );\n } else {\n this.parameters.staffingKey = '0';\n this.hierarchyService.getHierarchyByRole(this.parameters.roleName).subscribe(\n (data) => {\n this.entityList = data;\n this.setNodataType(NoDataActionType.filter);\n },\n (error) => {\n this.setNodataType(NoDataActionType.error);\n }\n );\n }\n }\n onDeSelect(event) {\n this.selectedEntity = [event];\n }\n\n onDeSelectProfile(event) {\n this.selectedPosition = [event];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {\n IEntityLeaderboardParams,\n INewEntityLeaderboardData,\n IWeightedScoreData,\n} from '../interfaces/performance-entity-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityLeaderboardService {\n private serverUrl = 'https://' + window.location.host;\n private version = '0.5';\n private _url = (this.serverUrl + '/api/v{version}/EntityLeaderboard/').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n\n // TODO: Probably these two API calls get the exact same data.\n // investigate those and remove any duplication along the pipeline\n getNewEntityLeaderboardData(params: IEntityLeaderboardParams) {\n return this._http.post(\n this._url + 'GetNewEntityLeaderboardData',\n params,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getEntityWeightedScore(params: IEntityLeaderboardParams) {\n return this._http.post(this._url + 'GetEntityWeightedScore', params, {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n });\n }\n}\n","
\n

\n {{ dataProperties.tableTitle }}\n

\n
View All
\n
\n\n
\n \n \n \n \n
\n \n \n \n {{ dataItem.rank }}\n \n \n Total\n \n \n \n \n {{ dataItem.displayName }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ volTotal | currency: 'USD':'symbol':'1.0-0' }}\n \n \n \n \n \n \n \n \n {{ unitTotal }}\n \n \n \n\n","import { Component, OnInit, Input, OnChanges, SimpleChange } from '@angular/core';\nimport { SortDescriptor, orderBy } from '@progress/kendo-data-query';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { RankingsService } from 'app/modules/performance/services/rankings.service';\nimport { Router } from '@angular/router';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from 'app/modules/shared/interfaces/no-data';\nimport { EntityLeaderboardService } from 'app/modules/performance/services/entity-leaderboard.service';\nimport { IWeightedScoreData } from 'app/modules/performance/interfaces/performance-entity-data';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\n\nexport interface IDataMappingProperties {\n unitsMappingProperty: string;\n volumeMappingProperty: string;\n scoreMappingProperty: string;\n nameMappingProperty: string;\n}\n\nexport interface IDataProperties {\n data: IWeightedScoreData[];\n isLoading: boolean;\n hasData: boolean;\n tableTitle: string;\n tablePageSize: number;\n roleId: string;\n action: NoDataActionType;\n showFooter: boolean;\n}\n\nexport interface IWeightedScoreTable {\n navigationParams: INavigationParameters;\n dataMappingProperties: IDataMappingProperties;\n dataProperties: IDataProperties;\n}\n\nexport interface INavigationParameters {\n titleRouterBase: string;\n titleUrlSegment: string;\n cellRouterBase: string;\n cellUrlSegment: string;\n cellQueryParamsList: Array<{ param: string; valueId: string; source: 'cell' | 'parent' }>;\n}\n\n@Component({\n selector: 'performance-insight-ranking-table',\n templateUrl: './performance-insight-ranking-table.component.html',\n styleUrls: ['./performance-insight-ranking-table.component.scss'],\n})\nexport class PerformanceInsightRankingTableComponent implements OnInit, OnChanges {\n gridView: GridDataResult;\n skip = 0;\n sortable: object = {\n mode: 'single',\n allowUnsort: true,\n };\n scrollable: 'scrollable' = 'scrollable';\n type: 'numeric' | 'input' = 'input';\n rankingData: IWeightedScoreData[];\n noDataType: NoDataTypes;\n rankEntrySort: SortDescriptor[];\n volTotal: number = 0;\n unitTotal: number = 0;\n @Input() navigationParams: INavigationParameters;\n @Input() dataMappingProperties: IDataMappingProperties;\n @Input() dataProperties: IDataProperties;\n\n constructor(\n private rankingsService: RankingsService,\n private entityLeaderboardService: EntityLeaderboardService,\n private router: Router,\n private _reusableFunctions: ReusableFunctions\n ) {}\n\n ngOnInit() {\n scroll(0, 0);\n this.rankEntrySort = [];\n\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.dataProperties.tableTitle,\n inputSource: NoDataSourceType.table,\n };\n\n this.rankingData = [];\n }\n\n ngOnChanges(changes: { [property: string]: SimpleChange }) {\n let change: SimpleChange = changes['dataProperties'];\n if (change) {\n this.processData();\n }\n }\n\n processData() {\n if (this.dataProperties && this.noDataType) {\n this.noDataType.action = this.dataProperties.action;\n }\n\n let data = this.dataProperties.data;\n if (data && data.length > 0) {\n let properties = this.dataMappingProperties;\n this.rankingData = data.filter((item) => item.isCurrentPeriod === true);\n this.rankingData.map((dat) => {\n dat.displayUnits = dat[properties.unitsMappingProperty];\n dat.displayVolume = dat[properties.volumeMappingProperty];\n dat.displayName = dat[properties.nameMappingProperty];\n dat.displayScore = dat[properties.scoreMappingProperty];\n });\n\n this.rankingData.sort((a, b) => b.displayScore - a.displayScore);\n\n this.volTotal = 0;\n this.unitTotal = 0;\n let volumeMax = this._reusableFunctions.getMaxValue(this.rankingData, 'displayVolume');\n let unitsMax = this._reusableFunctions.getMaxValue(this.rankingData, 'displayUnits');\n\n for (let ranking of this.rankingData) {\n this.volTotal = this.volTotal + ranking.displayVolume;\n this.unitTotal += ranking.displayUnits;\n ranking.volumePct = (ranking.displayVolume / volumeMax) * 100;\n ranking.unitsPct = (ranking.displayUnits / unitsMax) * 100;\n }\n }\n this.updateGrid();\n }\n\n updateGrid() {\n let orderedData = [];\n if (this.rankingData) {\n orderedData = orderBy(this.rankingData, this.rankEntrySort);\n }\n\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.dataProperties.tablePageSize),\n total: orderedData.length,\n };\n }\n\n sortChange(sort: SortDescriptor[]) {\n this.rankEntrySort = sort;\n this.updateGrid();\n }\n\n clickHandler() {\n this.router.navigate(\n [this.navigationParams.titleRouterBase, this.navigationParams.titleUrlSegment],\n {\n queryParams: {},\n state: { role: this.dataProperties.roleId },\n }\n );\n }\n\n cellClickHandler({ dataItem, type }) {\n let queryParams = {};\n this.navigationParams.cellQueryParamsList.forEach((param) => {\n if (param.source === 'cell') {\n queryParams[param.param] = dataItem[param.valueId];\n } else {\n queryParams[param.param] = param.valueId;\n }\n });\n\n this.router.navigate(\n [this.navigationParams.cellRouterBase, this.navigationParams.cellUrlSegment],\n {\n queryParams: queryParams,\n state: { role: this.dataProperties.roleId },\n }\n );\n }\n}\n","\n\n\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 { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { DisplayOptions, ISyncAsOfDateInf } from 'app/modules/shared/interfaces/display-options';\nimport { Router } from '@angular/router';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { IPositionParameters, PositionService } from '../../../shared/services/position.service';\nimport {\n IDataMappingProperties,\n IDataProperties,\n INavigationParameters,\n IWeightedScoreTable,\n} from 'app/modules/performance/components/performance-insight-weighted-rankings/table/performance-insight-ranking-table.component';\nimport { IRanksParameters } from 'app/modules/performance/interfaces/performance-rankings';\nimport { RankingsService } from 'app/modules/performance/services/rankings.service';\nimport { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\n\n@Component({\n selector: 'app-performance-insight-weighted-rankings',\n templateUrl: './performance-insight-weighted-rankings.component.html',\n styleUrls: ['./performance-insight-weighted-rankings.component.scss'],\n})\nexport class PerformanceInsightWeightedRankingsComponent implements OnInit {\n pageHeadline: IPageHeadline;\n hFilterJSON: string;\n displayOptions: DisplayOptions[];\n datePeriod: string;\n ytd: string;\n ymc: string;\n showTop: string;\n pageSize: number;\n tablePageSize: number = 10;\n leaderTables: IWeightedScoreTable[];\n syncAsOfDateInf?: ISyncAsOfDateInf;\n navigationParams: INavigationParameters;\n dataMappingProperties: IDataMappingProperties;\n dataProperties: IDataProperties;\n\n constructor(\n private _router: Router,\n private _reusableFunctions: ReusableFunctions,\n private _positionService: PositionService,\n private _rankingsService: RankingsService\n ) {}\n\n ngOnInit() {\n this.hFilterJSON = this._reusableFunctions.getHierarchyFilters();\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n moduleLink: 'performance/insights/',\n pageTitle: 'Weighted Score Leaderboard',\n linkTitle: 'Performance Insights',\n };\n\n this.navigationParams = {\n titleRouterBase: '/performance/insights/',\n titleUrlSegment: 'performance-rankings-position',\n cellRouterBase: '/performance/scorecards/',\n cellUrlSegment: '',\n cellQueryParamsList: [{ param: 'id', valueId: 'employeeIdentifier', source: 'cell' }],\n };\n\n this.dataMappingProperties = {\n unitsMappingProperty: 'totalUnits',\n volumeMappingProperty: 'totalVolume',\n scoreMappingProperty: 'avgScore',\n nameMappingProperty: 'employeeName',\n };\n\n this.dataProperties = {\n data: [],\n hasData: false,\n isLoading: true,\n tableTitle: '',\n roleId: '',\n tablePageSize: this.tablePageSize,\n showFooter: false,\n action: NoDataActionType.pageStart,\n };\n\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(this._router.url);\n this.setDisplayOptionsSelected();\n this.getPositions();\n }\n\n getPositions() {\n let parameters: IPositionParameters = {\n ymc: this.ymc,\n fromDatePeriod: this.datePeriod,\n getEmployeeAssignned: '1',\n };\n\n this.leaderTables = [];\n this._positionService.getScorecardPositions(parameters).subscribe(\n (res) => {\n res.forEach((card, index) => {\n let dataProperties = this.dataProperties;\n let navigationParams = this.navigationParams;\n dataProperties.roleId = card.positionIdentifier.toString();\n dataProperties.tableTitle = card.position;\n dataProperties.tablePageSize = this.tablePageSize;\n navigationParams.cellUrlSegment = card.scoreCardUrlSegment;\n\n navigationParams.cellQueryParamsList = navigationParams.cellQueryParamsList.map(\n (obj) => ({ ...obj })\n );\n\n let scoreTable: IWeightedScoreTable = Object.assign(\n {},\n {\n dataProperties: Object.assign({}, dataProperties),\n navigationParams: Object.assign({}, navigationParams),\n dataMappingProperties: Object.assign({}, this.dataMappingProperties),\n }\n );\n this.leaderTables.push(scoreTable);\n });\n this.getRankings();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getRankings() {\n let parameters: IRanksParameters = {\n datePeriod: this.datePeriod,\n entityType: '',\n entityCode: '',\n hFilterJSON: this.hFilterJSON,\n ymc: this.ymc,\n };\n\n this.leaderTables.forEach((scoreTable: IWeightedScoreTable) => {\n parameters.entityCode = scoreTable.dataProperties.roleId.toString();\n this._rankingsService.getWeightedScoreByPosition(parameters).subscribe(\n (data) => {\n if (data && data.length > 0) {\n scoreTable.dataProperties.data = data;\n scoreTable.dataProperties.hasData = true;\n } else {\n scoreTable.dataProperties.hasData = false;\n }\n scoreTable.dataProperties.isLoading = false;\n scoreTable.dataProperties = Object.assign({}, scoreTable.dataProperties);\n scoreTable = Object.assign({}, scoreTable);\n },\n (error) => {\n scoreTable.dataProperties.hasData = false;\n scoreTable.dataProperties.isLoading = false;\n scoreTable.dataProperties.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n });\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.getPositions();\n }\n\n setDisplayOptionsSelected() {\n let asOfDateId = 'scorecardAsOf';\n let dateRangeId = 'dateRangeRolling_12m_ytd_lm-mtd';\n this.syncAsOfDateInf = {\n asOfDateId: asOfDateId,\n syncWithDisplayOptionId: dateRangeId,\n };\n\n let asOfInfo = this.displayOptions.find((item) => item.optionKey === asOfDateId);\n if (asOfInfo) {\n this.ymc = asOfInfo.selectedOptions;\n }\n\n let dateRangeInfo = this.displayOptions.find((item) => item.optionKey === dateRangeId);\n if (dateRangeInfo) {\n this.datePeriod = dateRangeInfo.selectedOptions;\n }\n\n let showTopInfo = this.displayOptions.find((item) => item.optionKey === 'showTop');\n if (showTopInfo) {\n this.showTop = showTopInfo.selectedOptions;\n this.assignGroupBy();\n }\n }\n\n assignGroupBy(): void {\n let topNumber = this.showTop.replace('Top ', '');\n this.tablePageSize = +topNumber;\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.getPositions();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { Router } from '@angular/router';\nimport { GridComponent, GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { SortDescriptor, State, orderBy, filterBy } from '@progress/kendo-data-query';\nimport { IRankings, IRanksParameters } from '../../interfaces/performance-rankings';\nimport { RankingsService } from '../../services/rankings.service';\nimport {\n NoDataTypes,\n NoDataActionType,\n NoDataSourceType,\n} from 'app/modules/shared/interfaces/no-data';\nimport { LimeGearCharts } from 'app/modules/shared/classes/chart-data';\nimport * as Highcharts from 'highcharts';\nimport {\n IPositionInfo,\n IPositionParameters,\n PositionService,\n} from '../../../shared/services/position.service';\nimport { ExcelExportData } from '@progress/kendo-angular-excel-export';\nimport {\n IPaginatedDataInfo,\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\nimport {\n IChartParameters,\n SparklineChartOptions,\n} from 'app/modules/shared/classes/sparkline-chart-options';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport { IWeightedScoreData } from '../../interfaces/performance-entity-data';\n\n@Component({\n selector: 'app-performance-rankings-position',\n templateUrl: './performance-rankings-position.component.html',\n styleUrls: ['./performance-rankings-position.component.scss'],\n})\nexport class PerformanceRankingsPositionComponent implements OnInit {\n positionList: IPositionInfo[];\n selectedPosition: IPositionInfo[];\n positionListSettings: any;\n pageHeadline: IPageHeadline;\n hFilterJSON: string = null;\n displayOptions: DisplayOptions[];\n gridView: GridDataResult;\n skip = 0;\n pageSize = 10;\n sort: SortDescriptor[] = [];\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n gridState: State = {\n sort: [],\n skip: 0,\n take: 10,\n };\n scrollable = true;\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 rankEntrySort: SortDescriptor[] = [{ field: 'rank' }];\n rankingData: IRankings[] = [];\n loading: boolean = false;\n rankSearchTerm: string = '';\n noDataType: NoDataTypes;\n noDataForCompany: boolean;\n\n datePeriod: string;\n ymc: string;\n limeGearCharts: LimeGearCharts.LimeGearChart;\n changeToggle: boolean = false;\n exportFileName: string;\n exportData: IRankings[];\n tableDataProperties: ITableDataProperties;\n tableColumnProperties: ITableColumnProperties;\n action: NoDataActionType;\n hierarchyIdentifier: string;\n currentPeriodData: IWeightedScoreData[];\n fullDataset: IWeightedScoreData[];\n paginatedData: IWeightedScoreData[];\n spco: SparklineChartOptions;\n\n constructor(\n private _router: Router,\n private _reusableFunctions: ReusableFunctions,\n private rankingsService: RankingsService,\n private positionService: PositionService\n ) {}\n\n ngOnInit() {\n this.getExcelExportData = this.getExcelExportData.bind(this);\n this.hFilterJSON = this._reusableFunctions.getHierarchyFilters();\n this.positionListSettings = {\n singleSelection: true,\n text: 'Select Position',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'position',\n primaryKey: 'positionIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.pageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Position Rankings by Weighted Score',\n linkArray: [\n {\n moduleLink: 'performance/insights',\n linkTitle: 'Performance Insights',\n showLink: true,\n },\n ],\n };\n\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(this._router.url);\n this.noDataType = {\n action: NoDataActionType.emptySelect,\n searchTerm: '',\n componentTitle: 'Leaderboard by Weighted Score',\n inputSource: NoDataSourceType.table,\n };\n\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this._reusableFunctions\n );\n this.currentPeriodData = [];\n this.spco = new SparklineChartOptions(this._reusableFunctions);\n this.initiateTableProperties();\n this.setDisplayOptionsSelected();\n this.getPositions();\n }\n\n getPositions() {\n this.positionList = [];\n this.selectedPosition = [];\n this.noDataForCompany = true;\n\n let parameters: IPositionParameters = {\n ymc: this.ymc,\n fromDatePeriod: this.datePeriod,\n getEmployeeAssignned: '1',\n };\n\n let positionID = history.state.role ? +history.state.role : -1;\n this.positionService.getScorecardPositions(parameters).subscribe(\n (res) => {\n if (res.length > 0) {\n if (positionID > -1) {\n let posInf = res.find((p) => p.positionIdentifier === positionID);\n this.selectedPosition = posInf ? [posInf] : [res[0]];\n } else if (this.selectedPosition?.length === 0) {\n let posInf = res.find((pos) => pos.positionAbbv.toLowerCase() === 'lo');\n this.selectedPosition = posInf ? [posInf] : [res[0]];\n }\n }\n this.positionList = res;\n this.getData();\n },\n () => {}\n );\n }\n\n applyNewFilters(event: string) {\n this.skip = 0;\n this.hFilterJSON = event;\n this.setNodataType(NoDataActionType.filter);\n this.getData();\n }\n\n setDisplayOptionsSelected() {\n this.datePeriod = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === 'daterangerolling'\n )?.selectedOptions;\n this.ymc = this.displayOptions.find(\n (item) => item.optionKey.toLowerCase() === 'scorecardasof'\n )?.selectedOptions;\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.skip = 0;\n this.displayOptions = event;\n this.setNodataType(NoDataActionType.filter);\n this.setDisplayOptionsSelected();\n this.getData();\n }\n\n resetChartData() {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = false;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n\n getData() {\n this.loading = true;\n let parameters: IRanksParameters = {\n datePeriod: this.datePeriod ?? '',\n entityType: '',\n entityCode: this.selectedPosition\n ? this.selectedPosition[0]?.positionIdentifier.toString()\n : '',\n hFilterJSON: this.hFilterJSON,\n ymc: this.ymc ?? '',\n };\n this.resetChartData();\n\n if (this.ymc != undefined) {\n this.rankingsService.getWeightedScoreByPosition(parameters).subscribe(\n (data) => {\n this.fullDataset = data;\n this.currentPeriodData = this._reusableFunctions.getFriendlyTenure(\n data.filter((x) => x.isCurrentPeriod === true)\n );\n this.tableDataProperties.gridData = this.currentPeriodData;\n this.tableDataProperties.hasData = true;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n },\n (error) => {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties.action = NoDataActionType.error;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n );\n }\n }\n\n initiateTableProperties() {\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Rank by Weighted Score',\n initialPageSize: 10,\n initialSkip: 0,\n height: 700,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: false,\n pageable: true,\n useLGScroll: false,\n };\n\n let columnProperties: ITableColumns[] = [\n {\n fieldId: 'rank',\n fieldName: 'Rank',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n width: 50,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'employeeName',\n fieldName: 'Name',\n backUpFieldId: 'hierarchyField',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 100,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'friendlyTenure',\n fieldName: 'Tenure',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n decimalPlaces: 0,\n width: 90,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'hierarchyName',\n fieldName: 'Branch',\n backUpFieldId: 'hierarchyField',\n isHyperlink: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 100,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'scoreValuesSparkline',\n fieldName: 'Score Trend',\n fieldOrder: 4,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 100,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'wgtScore',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Score',\n datatype: null,\n precision: 3,\n },\n },\n },\n {\n fieldId: 'avgScore',\n fieldName: 'Avg Score',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n decimalPlaces: 2,\n width: 60,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'volumeValuesSparkline',\n fieldName: 'Volume Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 100,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'volume',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Volume',\n datatype: 'currency',\n precision: 0,\n },\n },\n },\n {\n fieldId: 'totalVolume',\n fieldName: 'Total Volume',\n fieldOrder: 7,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'currency',\n decimalPlaces: 0,\n width: 60,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'unitValuesSparkline',\n fieldName: 'Units Trend',\n fieldOrder: 8,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 100,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'units',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Units',\n datatype: null,\n precision: 0,\n },\n },\n },\n {\n fieldId: 'totalUnits',\n fieldName: 'Total Units',\n fieldOrder: 9,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n decimalPlaces: 0,\n width: 60,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n gridChangeEvent(event: IPaginatedDataInfo) {\n this.setColumnFormat();\n this.updateTableColumnProperties();\n this.tableColumnProperties = Object.assign({}, this.tableColumnProperties);\n this.paginatedData = event?.gridData;\n\n let chartParams: IChartParameters = {\n paginatedData: this.paginatedData,\n fullDataset: this.fullDataset,\n toGroupByColumnHeader: 'employeeName',\n calculateChange: true,\n columnList: this.tableColumnProperties.columnProperties,\n chartIdColumn: 'rank',\n chartType: 'area',\n color: 'rgb(124, 181, 236)',\n };\n\n setTimeout(() => {\n this.spco.setCharts(chartParams);\n }, 0);\n }\n\n updateTableColumnProperties() {\n let hierarchyFieldInf = this.tableColumnProperties.columnProperties.find(\n (colInf) => colInf.backUpFieldId === 'hierarchyField'\n );\n }\n\n setColumnFormat() {\n let columnsTobeFormatted = ['wgtScore'];\n let columnProperties = this.tableColumnProperties.columnProperties;\n\n columnsTobeFormatted.forEach((fieldId) => {\n let valueColumn = columnProperties.find((col) => col.fieldId === fieldId);\n if (valueColumn) {\n let format = this.currentPeriodData[0]?.format ?? valueColumn.dataType;\n let precision = this.currentPeriodData[0]?.precision ?? valueColumn.decimalPlaces;\n valueColumn.dataType = format as any;\n valueColumn.decimalPlaces = precision;\n }\n });\n }\n\n loadData() {\n let selectedPositionInfo = this.selectedPosition ? this.selectedPosition[0] : null;\n if (selectedPositionInfo) {\n this.pageHeadline.pageTitle = `${selectedPositionInfo.position} Rankings by Weighted Score`;\n }\n this.updateGrid();\n }\n\n updateGrid() {\n let rankData = this.searchResults();\n let orderedData = orderBy(rankData, this.rankEntrySort);\n this.exportData = JSON.parse(JSON.stringify(orderedData));\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n this.updateTable(rankData);\n this.drawSparklineCharts(this.gridView.data);\n }\n\n updateTable(rankData) {\n this.tableDataProperties.gridData = rankData;\n this.tableDataProperties.hasData = rankData.length;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n\n drawSparklineCharts(gridData: IRankings[]) {\n gridData.forEach((record) => {\n record.scoreChanges = this.calculateDateValueChanges(record.scoreValues);\n record.volumeChanges = this.calculateDateValueChanges(record.volumeValues);\n record.unitChanges = this.calculateDateValueChanges(record.unitValues);\n setTimeout(() => {\n this.drawCharts(record.scoreValues, record.scoreChanges, 'score', record.rank);\n this.drawCharts(record.volumeValues, record.volumeChanges, 'volume', record.rank);\n this.drawCharts(record.unitValues, record.unitChanges, 'units', record.rank);\n }, 0);\n });\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.rankEntrySort = sort;\n this.updateGrid();\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.loadData();\n }\n\n searchResults() {\n let searchedData: IWeightedScoreData[] = [];\n if (this.rankSearchTerm && this.rankSearchTerm.length > 0) {\n let searchTermTokens = this.rankSearchTerm.split(' ');\n searchedData = filterBy(this.currentPeriodData, {\n logic: 'or',\n filters: [\n {\n field: 'employeeName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n searchedData = filterBy(searchedData, {\n logic: 'or',\n filters: [\n {\n field: 'employeeName',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n } else {\n searchedData = this.currentPeriodData;\n }\n\n if (searchedData.length === 0) {\n this.noDataForCompany = true;\n }\n return searchedData;\n }\n\n searchRows(event) {\n this.tableDataProperties.isDataLoaded = false;\n this.skip = 0;\n this.rankSearchTerm = event;\n this.setNodataType(NoDataActionType.search);\n this.noDataType.searchTerm = this.rankSearchTerm;\n setTimeout(() => {\n this.updateGrid();\n }, 1000);\n }\n\n setNodataType(action: NoDataActionType) {\n if (this.rankSearchTerm && this.rankSearchTerm.length > 0) {\n this.noDataType.action = NoDataActionType.search;\n } else {\n this.noDataType.action = action;\n }\n }\n\n onSelectionChange(event) {\n this.skip = 0;\n this.setNodataType(NoDataActionType.filter);\n this.gridView = {\n data: [],\n total: 0,\n };\n this.getData();\n }\n\n onDeSelectionChange(event) {\n this.skip = 0;\n this.selectedPosition = [\n this.positionList.find((position) => position.position == event.position),\n ];\n this.setNodataType(NoDataActionType.filter);\n this.gridView = {\n data: [],\n total: 0,\n };\n this.getData();\n }\n\n /* Sparklines */\n\n /* Produce an array of changes between the values given by an array of units, volumes, or scores.\n * Using two indices, the main index and a pivot index, we proceed to calculate the changes between each\n * non-null value in the given array. The pivot marks the most recent element that is non-null (although the element COULD be null in the beginning),\n * and the difference is calculated from this pivot and the next non-null found. The next non-null then becomes\n * the new pivot, replacing the old one. Each non-change is marked as null, and all changes and non-changes\n * are added to the final return array.\n */\n calculateDateValueChanges(values: number[]): number[] {\n // Precondition: Array must have more than one value\n if (!values || values.length <= 1) {\n return [];\n }\n\n let change: number = null;\n let changes: number[] = []; // Array of differences between two date periods\n let pivot: number = 0;\n for (let index = 1; index < values.length; index++) {\n if (values[pivot] == null || values[index] == null) {\n change = null;\n if (values[index] != null) {\n pivot = index; // Make next non-null element the new pivot\n }\n } else {\n change = values[index] - values[pivot];\n pivot = index; // Make next non-null element the new pivot\n }\n changes.push(change);\n }\n return changes;\n }\n\n // Create charts objects with KPI Sparkline data\n drawCharts(values: Array, changes: Array, type: string, rank: number) {\n let dataType = type === 'volume' ? 'currency' : type;\n let divIdTrend = type + 'Trend' + rank;\n if (document.getElementById(divIdTrend)) {\n new Highcharts.Chart(\n divIdTrend,\n this.limeGearCharts.createKPISparkline(values, '', '', 'area', dataType)\n );\n }\n let divIdChanges = type + 'Changes' + rank;\n if (document.getElementById(divIdChanges)) {\n new Highcharts.Chart(\n divIdChanges,\n this.limeGearCharts.createKPISparkline(changes, '', '', 'column', dataType)\n );\n }\n }\n\n exportToExcel(kendoGrid: GridComponent) {\n let dateTime = this._reusableFunctions.getCurrentDateTimeStamp();\n this.exportFileName =\n `${this.selectedPosition[0].position}-performance-rankings` + dateTime + '_.xlsx';\n\n kendoGrid.saveAsExcel();\n }\n\n getExcelExportData(): ExcelExportData {\n this.exportData.forEach((e) => {\n e.formattedVolume = this._reusableFunctions.formatMoney(e.volume);\n });\n\n const result: ExcelExportData = {\n data: this.exportData,\n group: [],\n };\n return result;\n }\n}\n","\n\n\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n \n \n
\n \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 { Router } from '@angular/router';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { HierarchyFiltersCustomOptions } from 'app/modules/shared/components/main-filters/hierarchy-filter-options/hierarchy-flters-custom-options';\nimport { DisplayOptions, ISyncAsOfDateInf } from 'app/modules/shared/interfaces/display-options';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport { IHierachyFilterCacheUrlInfo } from 'app/modules/shared/interfaces/user-location';\nimport { FiltersService } from 'app/modules/shared/services/filters.service';\nimport { IEntityLeaderboardParams } from '../../interfaces/performance-entity-data';\nimport {\n IDataMappingProperties,\n IDataProperties,\n INavigationParameters,\n IWeightedScoreTable,\n} from 'app/modules/performance/components/performance-insight-weighted-rankings/table/performance-insight-ranking-table.component';\nimport { EntityLeaderboardService } from 'app/modules/performance/services/entity-leaderboard.service';\n\n@Component({\n selector: 'performance-branch-leaderboard',\n templateUrl: './performance-branch-leaderboard.component.html',\n styleUrls: ['./performance-branch-leaderboard.component.scss'],\n})\nexport class PerformanceBranchLeaderboardComponent implements OnInit {\n displayOptions: DisplayOptions[];\n noDataType: NoDataTypes;\n hFilterJSON = '';\n pageHeadline: IPageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Branch Leaderboard by Weighted Score',\n linkArray: [\n {\n moduleLink: 'performance',\n linkTitle: 'Performance Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'performance/insights',\n linkTitle: 'Performance Insights',\n showLink: true,\n },\n ],\n };\n\n hierarchyCacheInfo: HierarchyFiltersCustomOptions = new HierarchyFiltersCustomOptions();\n hierarchyCachePageInfo: IHierachyFilterCacheUrlInfo;\n ymc: string;\n datePeriod: string;\n showTop: string;\n tablePageSize: number = 10;\n syncAsOfDateInf?: ISyncAsOfDateInf;\n navigationParams: INavigationParameters;\n dataMappingProperties: IDataMappingProperties;\n dataProperties: IDataProperties;\n leaderTables: IWeightedScoreTable[];\n\n constructor(\n private _reusableFunctions: ReusableFunctions,\n private _router: Router,\n private filterService: FiltersService,\n private _entityLeaderboardService: EntityLeaderboardService\n ) {}\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.largeDataCard,\n };\n this.displayOptions = this._reusableFunctions.getCurrentDisplayOptions(\n '/performance/insights/branch-leaderboard'\n );\n\n this.dataProperties = {\n data: [],\n hasData: false,\n isLoading: true,\n tableTitle: '',\n roleId: '',\n tablePageSize: this.tablePageSize,\n showFooter: false,\n action: NoDataActionType.pageStart,\n };\n\n this.navigationParams = {\n titleRouterBase: '/performance/insights/',\n titleUrlSegment: 'performance-rankings-branch',\n cellRouterBase: '/performance/scorecards/',\n cellUrlSegment: 'branch',\n cellQueryParamsList: [\n { param: 'level', valueId: '', source: 'parent' },\n { param: 'id', valueId: 'hierarchyIdentifier', source: 'cell' },\n ],\n };\n\n this.dataMappingProperties = {\n unitsMappingProperty: 'totalUnits',\n volumeMappingProperty: 'totalVolume',\n scoreMappingProperty: 'totalScore',\n nameMappingProperty: 'hierarchyName',\n };\n\n this.hFilterJSON = this._reusableFunctions.getHierarchyFilters();\n this.setDisplayOptionsSelected();\n this.getFilterRoles();\n }\n\n getFilterRoles() {\n let url = this._router.url.split('?')[0];\n this.hierarchyCacheInfo = new HierarchyFiltersCustomOptions();\n this.hierarchyCachePageInfo = this.hierarchyCacheInfo.getHierarchyCachePageInfo(url);\n this.leaderTables = [];\n this.filterService.getUsersAllLocations(this.hierarchyCachePageInfo.employeeType).subscribe(\n (res) => {\n let empIdx = res.findIndex((role) => role.roleName == 'Employee');\n if (empIdx != -1) {\n res.splice(empIdx, 1);\n }\n\n res.forEach((card) => {\n let dataProperties = this.dataProperties;\n let navigationParams = this.navigationParams;\n dataProperties.roleId = card.roleName;\n dataProperties.tableTitle = card.roleName;\n dataProperties.tablePageSize = this.tablePageSize;\n navigationParams.cellUrlSegment = 'branch';\n\n let paramList = navigationParams.cellQueryParamsList.map((obj) => ({ ...obj }));\n let queryParam = paramList.find(\n (prm) => prm.source === 'parent' && prm.param === 'level'\n );\n\n if (queryParam) {\n queryParam.valueId = card.roleName;\n }\n navigationParams.cellQueryParamsList = paramList;\n\n let scoreTable: IWeightedScoreTable = Object.assign(\n {},\n {\n dataProperties: Object.assign({}, dataProperties),\n navigationParams: Object.assign({}, navigationParams),\n dataMappingProperties: Object.assign({}, this.dataMappingProperties),\n }\n );\n this.leaderTables.push(scoreTable);\n });\n\n this.getRankings();\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n getRankings() {\n let parameters: IEntityLeaderboardParams = {\n datePeriod: this.datePeriod,\n roleName: '',\n YMC: this.ymc,\n staff: '1',\n hFilterJSON: this.hFilterJSON,\n };\n\n this.leaderTables.forEach((scoreTable: IWeightedScoreTable) => {\n parameters.roleName = scoreTable.dataProperties.roleId;\n\n this._entityLeaderboardService.getEntityWeightedScore(parameters).subscribe(\n (data) => {\n if (data && data.length > 0) {\n scoreTable.dataProperties.data = data;\n scoreTable.dataProperties.hasData = true;\n } else {\n scoreTable.dataProperties.hasData = false;\n }\n scoreTable.dataProperties.isLoading = false;\n scoreTable.dataProperties = Object.assign({}, scoreTable.dataProperties);\n scoreTable = Object.assign({}, scoreTable);\n },\n (error) => {\n scoreTable.dataProperties.hasData = false;\n scoreTable.dataProperties.isLoading = false;\n scoreTable.dataProperties.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n });\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setNoDataType(NoDataActionType.filter);\n this.setDisplayOptionsSelected();\n this.getFilterRoles();\n }\n\n setDisplayOptionsSelected() {\n let asOfDateId = 'scorecardAsOf';\n let dateRangeId = 'dateRangeRolling_12m_ytd_lm-mtd';\n this.syncAsOfDateInf = {\n asOfDateId: asOfDateId,\n syncWithDisplayOptionId: dateRangeId,\n };\n\n let asOfInfo = this.displayOptions.find((item) => item.optionKey === asOfDateId);\n if (asOfInfo) {\n this.ymc = asOfInfo.selectedOptions;\n }\n\n let dateRangeInfo = this.displayOptions.find((item) => item.optionKey === dateRangeId);\n if (dateRangeInfo) {\n this.datePeriod = dateRangeInfo.selectedOptions;\n }\n\n let showTopInfo = this.displayOptions.find((item) => item.optionKey === 'showTop');\n if (showTopInfo) {\n this.showTop = showTopInfo.selectedOptions;\n this.assignGroupBy();\n }\n }\n\n assignGroupBy(): void {\n let topNumber = this.showTop.replace('Top ', ''); // Remove prepended text of option\n this.tablePageSize = +topNumber;\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.setNoDataType(NoDataActionType.filter);\n this.getFilterRoles();\n }\n\n setNoDataType(action: NoDataActionType) {\n this.noDataType.action = action;\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { filterBy, orderBy, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { LimeGearCharts } from 'app/modules/shared/classes/chart-data';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport {\n IEntityLeaderboardData,\n IEntityLeaderboardParams,\n INewEntityLeaderboardData,\n} from '../../interfaces/performance-entity-data';\nimport { EntityLeaderboardService } from '../../services/entity-leaderboard.service';\nimport { HierarchyFiltersCustomOptions } from 'app/modules/shared/components/main-filters/hierarchy-filter-options/hierarchy-flters-custom-options';\nimport {\n IHierachyFilterCacheUrlInfo,\n UserLocation,\n} from 'app/modules/shared/interfaces/user-location';\nimport { FiltersService } from 'app/modules/shared/services/filters.service';\nimport * as Highcharts from 'highcharts';\nimport {\n IPaginatedDataInfo,\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport {\n IChartParameters,\n SparklineChartOptions,\n} from 'app/modules/shared/classes/sparkline-chart-options';\n\n@Component({\n selector: 'app-performance-rankings-branch',\n templateUrl: './performance-rankings-branch.component.html',\n styleUrls: ['./performance-rankings-branch.component.scss'],\n})\nexport class PerformanceRankingsBranchComponent implements OnInit {\n rankingData: IEntityLeaderboardData[];\n displayOptions: DisplayOptions[];\n noDataType: NoDataTypes;\n noDataForCompany: boolean;\n hFilterJSON = '';\n pageHeadline: IPageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Branch Rankings by Weighted Score',\n linkArray: [\n {\n moduleLink: 'performance',\n linkTitle: 'Performance Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'performance/insights',\n linkTitle: 'Performance Insights',\n showLink: true,\n },\n ],\n };\n\n hierarchyCacheInfo: HierarchyFiltersCustomOptions = new HierarchyFiltersCustomOptions();\n hierarchyCachePageInfo: IHierachyFilterCacheUrlInfo;\n roleData: UserLocation[];\n\n /* Page Parameters */\n roleName: string;\n roleID: number = 1;\n\n /* Display Options */\n YMC: string;\n datePeriod: string;\n staff: string;\n\n /* Kendo Grid */\n gridView: GridDataResult;\n skip = 0;\n pageSize = 10;\n sort: SortDescriptor[] = [];\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n gridState: State = {\n sort: [],\n skip: 0,\n take: 10,\n };\n scrollable = true;\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 rankEntrySort: SortDescriptor[] = [{ field: 'rank' }, { field: 'lfName' }];\n loading: boolean = false;\n error: any;\n\n /* Sparklines */\n limeGearCharts: LimeGearCharts.LimeGearChart;\n changeToggle: boolean = false;\n\n /* Position DDL */\n entityIdentifier: string;\n entityList: Entity[] = [];\n selectedEntity: Entity[];\n entityListSettings: any;\n\n /* Filters */\n rankSearchTerm: string = '';\n tableDataProperties: ITableDataProperties;\n tableColumnProperties: ITableColumnProperties;\n action: NoDataActionType;\n hierarchyIdentifier: string;\n currentPeriodData: INewEntityLeaderboardData[];\n fullDataset: INewEntityLeaderboardData[];\n paginatedData: INewEntityLeaderboardData[];\n spco: SparklineChartOptions;\n\n constructor(\n private _router: Router,\n private _reusableFunctions: ReusableFunctions,\n private reusableFunctions: ReusableFunctions,\n private entityLeaderboardService: EntityLeaderboardService,\n private filterService: FiltersService,\n private decimalPipe: DecimalPipe\n ) {}\n ngOnInit() {\n this.roleName = history.state.role ? history.state.role : null;\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.largeDataCard,\n };\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(\n '/performance/insights/performance-rankings-branch'\n );\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this._reusableFunctions,\n this.decimalPipe\n );\n\n this.entityListSettings = {\n singleSelection: true,\n text: 'Select Entity',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'entity',\n primaryKey: 'entityIdentifier',\n enableFilterSelectAll: false,\n };\n this.currentPeriodData = [];\n this.spco = new SparklineChartOptions(this.reusableFunctions);\n this.setDisplayOptionsSelected();\n this.getFilterRoles();\n this.initiateTableProperties();\n if (this.roleName == null) {\n this.selectedEntity = [];\n this.pageHeadline.pageTitle = 'Branch Rankings by Weighted Score';\n this.noDataType = {\n action: NoDataActionType.emptySelect,\n searchTerm: '',\n componentTitle: 'Branch Rankings by Weighted Score',\n inputSource: NoDataSourceType.table,\n };\n this.noDataForCompany = true;\n this.loading = false;\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = true;\n }\n }\n\n initiateTableProperties() {\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Rank by Weighted Score',\n initialPageSize: 10,\n initialSkip: 0,\n height: 700,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: false,\n pageable: true,\n useLGScroll: false,\n };\n\n let columnProperties: ITableColumns[] = [\n {\n fieldId: 'rank',\n fieldName: 'Rank',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n width: 75,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'hierarchyName',\n fieldName: 'Branch',\n backUpFieldId: 'hierarchyField',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 110,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'scoreValuesSparkline',\n fieldName: 'Score Trend',\n fieldOrder: 2,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 190,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'wgtScore',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Score',\n datatype: null,\n precision: 3,\n },\n },\n },\n {\n fieldId: 'totalScore',\n fieldName: 'Avg Score',\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n decimalPlaces: 2,\n width: 90,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'volumeValuesSparkline',\n fieldName: 'Volume Trend',\n fieldOrder: 4,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 190,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'volume',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Volume',\n datatype: 'currency',\n precision: 0,\n },\n },\n },\n {\n fieldId: 'totalVolume',\n fieldName: 'Total Volume',\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'currency',\n decimalPlaces: 0,\n width: 110,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n {\n fieldId: 'unitValuesSparkline',\n fieldName: 'Units Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 190,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'rank',\n chartDataField: 'units',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Units',\n datatype: null,\n precision: 0,\n },\n },\n },\n {\n fieldId: 'totalUnits',\n fieldName: 'Total Units',\n fieldOrder: 7,\n isSortable: true,\n headerAlignment: 'center',\n dataAlignment: 'center',\n dataType: 'number',\n decimalPlaces: 0,\n width: 95,\n filterable: false,\n filter: 'numeric',\n isDynamicColumn: true,\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n gridChangeEvent(event: IPaginatedDataInfo) {\n this.setColumnFormat();\n this.updateTableColumnProperties();\n this.tableColumnProperties = Object.assign({}, this.tableColumnProperties);\n this.paginatedData = event?.gridData;\n\n let chartParams: IChartParameters = {\n paginatedData: this.paginatedData,\n fullDataset: this.fullDataset,\n toGroupByColumnHeader: 'hierarchyName',\n calculateChange: true,\n columnList: this.tableColumnProperties.columnProperties,\n chartIdColumn: 'rank',\n chartType: 'area',\n color: 'rgb(124, 181, 236)',\n };\n\n setTimeout(() => {\n this.spco.setCharts(chartParams);\n }, 0);\n }\n\n updateTableColumnProperties() {\n let hierarchyFieldInf = this.tableColumnProperties.columnProperties.find(\n (colInf) => colInf.backUpFieldId === 'hierarchyField'\n );\n\n if (hierarchyFieldInf) {\n hierarchyFieldInf.fieldName = this.roleName;\n }\n }\n\n setColumnFormat() {\n let columnsTobeFormatted = ['wgtScore'];\n let columnProperties = this.tableColumnProperties.columnProperties;\n columnsTobeFormatted.forEach((fieldId) => {\n let valueColumn = columnProperties.find((col) => col.fieldId === fieldId);\n if (valueColumn) {\n let format = this.currentPeriodData[0]?.format ?? valueColumn.dataType;\n let precision = this.currentPeriodData[0]?.precision ?? valueColumn.decimalPlaces;\n valueColumn.dataType = format as any;\n valueColumn.decimalPlaces = precision;\n }\n });\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.skip = 0;\n this.displayOptions = event;\n this.setNoDataType(NoDataActionType.filter);\n this.setDisplayOptionsSelected();\n this.loadData();\n }\n\n setDisplayOptionsSelected() {\n let displayOption: DisplayOptions;\n\n if (this.displayOptions.find((item) => item.optionKey === 'scorecardAsOf')) {\n this.YMC = this.displayOptions.find(\n (item) => item.optionKey === 'scorecardAsOf'\n ).selectedOptions;\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'dateRangeRolling')) {\n this.datePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRangeRolling'\n ).selectedOptions;\n }\n }\n\n loadData() {\n let recordInList = this.entityList.find((x) => x.entity == this.roleName);\n if (recordInList) {\n this.selectedEntity = [recordInList];\n this.pageHeadline.pageTitle = `${this.roleName} Rankings by Weighted Score`;\n } else {\n this.selectedEntity = [];\n this.pageHeadline.pageTitle = `Branch Rankings by Weighted Score`;\n }\n this.getEntityRankings();\n }\n\n updateGrid() {\n let rankData = this.searchResults();\n let orderedData = orderBy(rankData, this.rankEntrySort);\n if (orderedData !== undefined) {\n this.gridView = {\n data: orderedData.slice(this.skip, this.skip + this.pageSize),\n total: orderedData.length,\n };\n this.drawSparklineCharts(this.gridView.data);\n }\n }\n\n applyNewFilters(event: string) {\n this.skip = 0;\n this.hFilterJSON = event;\n this.setNoDataType(NoDataActionType.filter);\n this.loadData();\n }\n\n setNoDataType(action: NoDataActionType) {\n this.noDataType.action = action;\n }\n\n searchRows(event) {\n this.skip = 0;\n this.rankSearchTerm = event;\n this.setNoDataType(NoDataActionType.search);\n this.noDataType.searchTerm = this.rankSearchTerm;\n this.updateGrid();\n }\n\n /* Search */\n searchResults() {\n let searchedData: IEntityLeaderboardData[] = [];\n if (this.rankingData?.length > 0 && this.rankSearchTerm && this.rankSearchTerm.length > 0) {\n let searchTermTokens = this.rankSearchTerm.split(' ');\n searchedData = filterBy(this.rankingData, {\n logic: 'or',\n filters: [\n {\n field: 'hierarchyName',\n operator: 'contains',\n value: searchTermTokens[0],\n ignoreCase: true,\n },\n ],\n });\n if (searchTermTokens.length > 1) {\n searchedData = filterBy(searchedData, {\n logic: 'or',\n filters: [\n {\n field: 'hierarchyName',\n operator: 'contains',\n value: searchTermTokens[1],\n ignoreCase: true,\n },\n ],\n });\n }\n } else {\n searchedData = this.rankingData;\n }\n\n if (searchedData?.length === 0) {\n this.noDataForCompany = true;\n }\n return searchedData;\n }\n\n getEntityRankings() {\n this.loading = true;\n\n let params: IEntityLeaderboardParams = {\n datePeriod: this.datePeriod,\n roleName: this.roleName,\n YMC: this.YMC,\n staff: this.roleID.toString(),\n hFilterJSON: this.hFilterJSON,\n };\n\n this.resetChartData();\n\n this.entityLeaderboardService.getNewEntityLeaderboardData(params).subscribe(\n (data) => {\n this.fullDataset = data;\n this.currentPeriodData = data.filter((x) => x.isCurrentPeriod === true);\n this.tableDataProperties.gridData = this.currentPeriodData;\n this.tableDataProperties.hasData = true;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n },\n (error) => {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties.action = NoDataActionType.error;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n );\n }\n\n getFilterRoles() {\n let url = this._router.url.split('?')[0];\n this.hierarchyCacheInfo = new HierarchyFiltersCustomOptions();\n this.hierarchyCachePageInfo = this.hierarchyCacheInfo.getHierarchyCachePageInfo(url);\n this.filterService.getUsersAllLocations(this.hierarchyCachePageInfo.employeeType).subscribe(\n (data) => {\n let empIdx = data.findIndex((role) => role.roleName == 'Employee');\n if (empIdx != -1) {\n data.splice(empIdx, 1);\n }\n\n this.roleData = data;\n this.roleData.forEach((role) => {\n this.entityList.push({\n entity: role.roleName,\n entityIdentifier: role.roleLevel.toString(),\n });\n });\n\n if (this.roleName != null) {\n this.loadData();\n }\n },\n (error) => {\n throw new Error(error);\n }\n );\n }\n\n /* Sparkline Charts */\n drawSparklineCharts(gridData: IEntityLeaderboardData[]) {\n gridData.forEach((record) => {\n record.scoreChanges = this.calculateDateValueChanges(record.scoreValues);\n record.volumeChanges = this.calculateDateValueChanges(record.volumeValues);\n record.unitChanges = this.calculateDateValueChanges(record.unitValues);\n setTimeout(() => {\n this.drawCharts(\n record.scoreValues,\n record.scoreChanges,\n 'score',\n record.rank,\n record.periodDates\n );\n this.drawCharts(\n record.volumeValues,\n record.volumeChanges,\n 'volume',\n record.rank,\n record.periodDates\n );\n this.drawCharts(\n record.unitValues,\n record.unitChanges,\n 'units',\n record.rank,\n record.periodDates\n );\n }, 0);\n });\n }\n\n // Create charts objects with KPI Sparkline data\n drawCharts(\n values: Array,\n changes: Array,\n type: string,\n rank: number,\n periodDates: string[]\n ) {\n let dataType = type === 'volume' ? 'currency' : type;\n let divIdTrend = type + 'Trend' + rank;\n if (document.getElementById(divIdTrend)) {\n new Highcharts.Chart(\n divIdTrend,\n this.limeGearCharts.createKPINewSparkline(\n values,\n '',\n '',\n 'area',\n dataType,\n periodDates\n )\n );\n }\n let divIdChanges = type + 'Changes' + rank;\n if (document.getElementById(divIdChanges)) {\n new Highcharts.Chart(\n divIdChanges,\n this.limeGearCharts.createKPINewSparkline(\n changes,\n '',\n '',\n 'column',\n dataType,\n periodDates\n )\n );\n }\n }\n\n /* Produce an array of changes between the values given by an array of units, volumes, or scores.\n * Using two indices, the main index and a pivot index, we proceed to calculate the changes between each\n * non-null value in the given array. The pivot marks the most recent element that is non-null (although the element COULD be null in the beginning),\n * and the difference is calculated from this pivot and the next non-null found. The next non-null then becomes\n * the new pivot, replacing the old one. Each non-change is marked as null, and all changes and non-changes\n * are added to the final return array.\n */\n calculateDateValueChanges(values: number[]): number[] {\n // Precondition: Array must have more than one value\n if (!values || values.length <= 1) {\n return [];\n }\n\n let change: number = null;\n let changes: number[] = []; // Array of differences between two date periods\n let pivot: number = 0;\n for (let index = 1; index < values.length; index++) {\n if (values[pivot] == null || values[index] == null) {\n change = null;\n if (values[index] != null) {\n pivot = index; // Make next non-null element the new pivot\n }\n } else {\n change = values[index] - values[pivot];\n pivot = index; // Make next non-null element the new pivot\n }\n changes.push(change);\n }\n return changes;\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.rankEntrySort = sort;\n this.updateGrid();\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.loadData();\n }\n\n onSelectionChange(event) {\n this.skip = 0;\n this.entityIdentifier = this.selectedEntity[0].entityIdentifier;\n this.setNoDataType(NoDataActionType.filter);\n this.roleName = this.selectedEntity[0].entity;\n this.gridView = {\n data: [],\n total: 0,\n };\n this.loadData();\n }\n\n onDeSelectionChange(event) {\n this.skip = 0;\n this.selectedEntity = [this.entityList.find((entity) => entity.entity == event.entity)];\n this.setNoDataType(NoDataActionType.filter);\n this.gridView = {\n data: [],\n total: 0,\n };\n this.loadData();\n }\n\n resetChartData() {\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = false;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n }\n}\n\ninterface Entity {\n entityIdentifier: string;\n entity: string;\n}\n","\n\n\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n \n
\n \n
\n
\n
\n\n\n","\n\n
\n \n
\n\n
\n \n \n
\n \n \n
\n
\n
\n
\n

Rankings by Volume Funded

\n \n \n
\n \n
\n
\n \n \n {{ dataItem.ranked }}.\n \n \n \n \n \n \n \n \n {{ dataItem.mtdMeasure | currency : 'USD' : 'symbol' : '1.0-0' }}\n \n \n \n \n 0\n }\"\n [style]=\"{\n color: dataItem.prevMTDChg > 0 ? '#008800' : '#E0000E',\n 'padding-right': dataItem.prevMTDChg < 0 ? '8px' : '5px'\n }\"\n >\n 0 ? '#008800' : '#E0000E' }\"\n *ngIf=\"dataItem.prevMTDChg !== null\"\n >{{ dataItem.prevMTDComp.comparison }}\n --\n \n \n \n \n
\n \n \n \n
\n
\n

Rankings by Units Funded

\n \n \n
\n \n
\n
\n \n \n {{ dataItem.ranked }}.\n \n \n \n \n \n \n \n \n \n \n 0\n }\"\n [style]=\"{\n color: dataItem.prevMTDChg > 0 ? '#008800' : '#E0000E',\n 'padding-right': dataItem.prevMTDChg < 0 ? '8px' : '5px'\n }\"\n >\n 0 ? '#008800' : '#E0000E' }\"\n *ngIf=\"dataItem.prevMTDChg !== null\"\n >{{ dataItem.prevMTDComp.comparison }}\n --\n \n \n \n \n
\n \n \n \n \n\n","import { Component, OnInit } from '@angular/core';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { RankingsService } from '../../services/rankings.service';\nimport { LimeGearCharts } from 'app/modules/shared/classes/chart-data';\nimport * as Highcharts from 'highcharts';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { Router } from '@angular/router';\nimport { DecimalPipe } from '@angular/common';\nimport { orderBy, SortDescriptor } from '@progress/kendo-data-query';\nimport { forkJoin } from 'rxjs';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport { LORankingsData } from '../../interfaces/performance-rankings';\n\n@Component({\n selector: 'app-performance-insights-monthly-lo-rankings',\n templateUrl: './performance-insights-monthly-lo-rankings.component.html',\n styleUrls: ['./performance-insights-monthly-lo-rankings.component.scss'],\n})\nexport class PerformanceInsightsMonthlyLoRankingsComponent implements OnInit {\n overallVolData: LORankingsData[];\n overallUnitsData: LORankingsData[];\n filteredVolData: LORankingsData[];\n filteredUnitsData: LORankingsData[];\n unitsGridData: GridDataResult;\n volGridData: GridDataResult;\n pageHeadline: IPageHeadline = {\n module: 'performance',\n moduleIcon: 'fa-heartbeat',\n pageTitle: 'Monthly LO Rankings',\n linkArray: [\n {\n moduleLink: 'performance',\n linkTitle: 'Performance Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'performance/insights',\n linkTitle: 'Performance Insights',\n showLink: true,\n },\n ],\n };\n type: 'numeric' | 'input' = 'input';\n pageSize: number = 10;\n skip = { volSkip: 0, unitSkip: 0 };\n loading: boolean = true;\n unitSort: SortDescriptor[] = [{ field: 'rank', dir: 'desc' }];\n volSort: SortDescriptor[] = [{ field: 'rank', dir: 'desc' }];\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n pageable = {\n refresh: true,\n info: true,\n type: this.type,\n previousNext: true,\n pageSizes: [5, 10, 20],\n };\n limeGearCharts: LimeGearCharts.LimeGearChart;\n periodData: string[];\n hFilterJSON: string;\n displayOptions: DisplayOptions[];\n asOfDate: string;\n hiddenFilterItems: string[] = ['dateRangeRolling'];\n action: NoDataActionType;\n noDataType: NoDataTypes;\n noData: boolean;\n asOfDateId: string = 'rankingsasof';\n\n constructor(\n private rankingsService: RankingsService,\n private reusableFunctions: ReusableFunctions,\n private router: Router,\n private decimalPipe: DecimalPipe\n ) {}\n\n ngOnInit(): void {\n this.action = NoDataActionType.pageStart;\n this.noDataType = {\n action: this.action,\n searchTerm: '',\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.largeDataCard,\n };\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this.router,\n this.reusableFunctions,\n this.decimalPipe\n );\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this.router.url);\n this.setDisplayOptionsSelected();\n this.loadData();\n }\n\n loadData() {\n const volParams = {\n measure: 'Vol',\n ymc: this.asOfDate,\n hFilterJSON: this.hFilterJSON,\n };\n const unitParams = {\n measure: 'Units',\n ymc: this.asOfDate,\n hFilterJSON: this.hFilterJSON,\n };\n\n forkJoin([\n this.rankingsService.displayLORankings(volParams),\n this.rankingsService.displayLORankings(unitParams),\n ]).subscribe(\n ([volData, unitsData]) => {\n if (!volData || !unitsData || volData.length < 1 || unitsData.length < 1) {\n this.setNoData();\n }\n this.overallVolData = volData;\n this.overallUnitsData = unitsData;\n this.getPeriodData(JSON.parse(JSON.stringify(volData)));\n this.prepareGridData(this.overallVolData, this.overallUnitsData);\n },\n (err) => {\n this.setNoData();\n this.loading = false;\n console.log('error: ', err);\n }\n );\n }\n\n getPeriodData(data: LORankingsData[]) {\n const periodData = new Set();\n data.forEach((emp) => periodData.add(emp.yearMonthCalendar));\n this.periodData = Array.from(periodData).reverse();\n }\n\n prepareGridData(overallVolData: LORankingsData[], overallUnitsData: LORankingsData[]) {\n const overallDataArr = [overallVolData, overallUnitsData];\n for (let i = 0; i < overallDataArr.length; i++) {\n const filteredData = overallDataArr[i].filter(\n (item) => item.yearMonthCalendar === this.asOfDate\n );\n\n filteredData.forEach((emp) => {\n const measureValues = overallDataArr[i]\n .filter(\n (item) =>\n item.employee === emp.employee &&\n item.employeeIdentifier === emp.employeeIdentifier\n )\n .map((i) => i.mtdMeasure);\n emp.measureValues = measureValues.reverse();\n emp.prevMTDComp = this.reusableFunctions.getCaret(emp.prevMTDChg, true, null, true);\n });\n\n if (i === 0) {\n this.filteredVolData = this.reusableFunctions.getFriendlyTenure(filteredData);\n } else {\n this.filteredUnitsData = this.reusableFunctions.getFriendlyTenure(filteredData);\n }\n }\n\n this.updateVolumeGrid();\n this.updateUnitGrid();\n this.loading = false;\n }\n\n updateVolumeGrid() {\n const orderedData = orderBy(this.filteredVolData, this.volSort);\n this.volGridData = {\n data: orderedData.slice(this.skip.volSkip, this.skip.volSkip + this.pageSize),\n total: orderedData.length,\n };\n\n setTimeout(() => {\n this.drawCharts(this.volGridData.data, 'vol', 'currency');\n }, 0);\n }\n\n updateUnitGrid() {\n const orderedData = orderBy(this.filteredUnitsData, this.unitSort);\n\n this.unitsGridData = {\n data: orderedData.slice(this.skip.unitSkip, this.skip.unitSkip + this.pageSize),\n total: orderedData.length,\n };\n\n setTimeout(() => {\n this.drawCharts(this.unitsGridData.data, 'unit', 'number');\n }, 0);\n }\n\n drawCharts(data: LORankingsData[], type: string, dataType: string): void {\n for (let i = 0; i < data.length; i++) {\n new Highcharts.Chart(\n `${type}mtdMeasure${data[i].employee}`,\n this.limeGearCharts.createRevenueSparkline(\n data[i].measureValues,\n this.periodData,\n 'area',\n dataType\n )\n );\n }\n }\n\n sortChange(sort: SortDescriptor[], gridType: string): void {\n if (gridType === 'vol') {\n this.volSort = sort;\n this.updateVolumeGrid();\n } else {\n this.unitSort = sort;\n this.updateUnitGrid();\n }\n }\n\n pageChange(event: PageChangeEvent, gridType: string): void {\n this.pageSize = event.take;\n if (gridType === 'vol') {\n this.skip.volSkip = event.skip;\n } else {\n this.skip.unitSkip = event.skip;\n }\n this.updateVolumeGrid();\n this.updateUnitGrid();\n }\n\n applyNewFilters(event: string) {\n this.action = NoDataActionType.filter;\n this.hFilterJSON = event;\n this.loadData();\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.loading = true;\n this.skip.volSkip = 0;\n this.skip.unitSkip = 0;\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.loadData();\n }\n\n setDisplayOptionsSelected() {\n const asOfDate = this.displayOptions.find((item) => item.optionKey === 'rankingsAsOf');\n this.asOfDate = asOfDate?.selectedOptions ?? '';\n }\n\n setNoData() {\n this.noData = true;\n this.loading = false;\n this.noDataType.action = this.action;\n }\n}\n","import { CategoryGroup } from '../interfaces/card-data';\nimport * as Highcharts from 'highcharts';\nimport { Router } from '@angular/router';\nimport { ReusableFunctions } from './reusable-functions';\n\nexport namespace PerformanceCharts {\n export class PerformanceCharts {\n constructor(private router: Router, private reusableFunctions: ReusableFunctions) {}\n\n createNewAreaChart(\n yAxisText: string,\n seriesInfo: any[],\n routerinfo: string[],\n categoryGroup: string[] | CategoryGroup[],\n hasDrilldownAccsess: boolean,\n addTitleSuffix: boolean,\n subtitle: string,\n navFromUrl: string = '',\n isVolume: boolean\n ): Highcharts.Options {\n Highcharts.setOptions({\n lang: {\n thousandsSep: ',',\n },\n });\n let _this = this;\n\n return {\n chart: {\n type: 'area',\n height: 550,\n spacingBottom: 8,\n spacingLeft: 0,\n marginRight: 0,\n spacingRight: 0,\n spacingTop: 0,\n events: {\n load: function () {\n if (hasDrilldownAccsess) {\n var xAxis = this.xAxis[0];\n var xTicks = xAxis.ticks;\n var yAxis = this.yAxis[0];\n var points = this.series[0].points;\n points.forEach((pointInf, i) => {\n let point = pointInf as Highcharts.PointOptionsObject;\n if (xTicks[i]) {\n var label = xTicks[i].label.element;\n label.style.cursor = 'pointer';\n label.onclick = function (item) {\n if (hasDrilldownAccsess) {\n let dateInfo = point.description.split('-');\n let queryParams = {\n year: dateInfo[0],\n month: dateInfo[1],\n selectedPeriod: dateInfo[1],\n commType: 'All',\n };\n\n if (navFromUrl !== '') {\n queryParams['navFromUrl'] = navFromUrl;\n }\n _this.router.navigate(routerinfo, {\n queryParams,\n });\n }\n };\n }\n });\n }\n },\n },\n },\n navigation: {\n buttonOptions: {\n enabled: false,\n },\n },\n credits: {\n enabled: false,\n },\n legend: {},\n title: {\n text: isVolume\n ? 'LOANS FUNDED - ACTUALS VS PROJECTIONS (YTD)'\n : 'UNITS - ACTUALS VS PROJECTIONS (YTD)',\n align: 'left',\n x: 10,\n y: 30,\n margin: 70,\n style: {\n fontSize: '13px',\n },\n },\n subtitle: {\n text: subtitle,\n align: 'left',\n x: 10,\n y: 65,\n style: {\n fontSize: '28px',\n fontWeight: 'bold',\n },\n },\n xAxis: [\n {\n type: 'category',\n categories: categoryGroup,\n startOnTick: true,\n labels: {\n enabled: true,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n } as Highcharts.XAxisOptions,\n ],\n yAxis: {\n title: {\n text: yAxisText,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n labels: {\n enabled: true,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n lineWidth: 1,\n },\n tooltip: {\n style: {\n fontFamily: 'Roboto',\n fontSize: '12',\n height: 12,\n },\n borderColor: 'white',\n backgroundColor: 'white',\n borderRadius: 7,\n borderWidth: 1,\n shared: true,\n useHTML: true,\n outside: false,\n formatter: function () {\n let tooltip = '';\n const length = 2;\n let previousPeriodLine = '';\n let tooltipTotalName = '';\n const tooltipTitle = this.points[0].point.options.description;\n let total = 0;\n this.points = this.points.reverse();\n\n tooltip =\n '' +\n this.points.reduce(function (s, point, index) {\n let toolText = '';\n let seriesName = point.series.name;\n let color = `color: ${point.color}`;\n\n // // Tooltip title\n if (index === 0) {\n s += `
\n
\n
${tooltipTitle}
\n
${\n isVolume ? 'Volume' : 'Units'\n }
\n
`;\n tooltipTotalName = 'Total';\n }\n if (true) {\n total += point.y;\n toolText = s += `
\n \n \n `;\n }\n\n // Totals: Removed as part of NV-8743: https://ncinodev.atlassian.net/browse/NV-8743, keeping here in case we want to add it back in the future.\n // if (index === length - 1 && isVolume) {\n // toolText =\n // s +\n // `\n // \n // \n // ` +\n // previousPeriodLine;\n // }\n return toolText;\n }, '') +\n '
\n
\n
\n
${seriesName}:
\n
\n
\n ${\n isVolume\n ? _this.reusableFunctions.formatMoney(\n point.y\n )\n : point.y\n }\n
\n //
${tooltipTotalName}:
\n //
\n // ${\n // isVolume\n // ? _this.reusableFunctions.formatMoney(total)\n // : total\n // }\n //
';\n return tooltip;\n },\n } as Highcharts.TooltipOptions,\n plotOptions: {\n area: {\n lineColor: '#E5E5E5',\n lineWidth: 4,\n },\n series: {\n marker: {\n enabled: false,\n symbol: 'circle',\n },\n },\n },\n series: this.formatSeriesInfo(\n seriesInfo,\n routerinfo,\n hasDrilldownAccsess,\n addTitleSuffix,\n navFromUrl\n ),\n };\n }\n\n formatSeriesInfo(\n seriesInfo: any[],\n routerinfo: string[],\n hasDrilldownAccsess: boolean,\n addTitleSuffix: boolean,\n navFromUrl: string\n ) {\n let series: Highcharts.SeriesAreaOptions[] = [];\n const _this = this;\n seriesInfo.forEach((category, index) => {\n series.push({\n type: 'area',\n name: category.name,\n data: category.data,\n color: category.color,\n fillOpacity: 0.4,\n lineColor: category.color,\n index: seriesInfo.length - index - 1,\n legendIndex: index,\n cursor: hasDrilldownAccsess ? 'pointer' : 'default',\n point: {\n events: {\n click: function (dataPointEvent) {\n if (hasDrilldownAccsess) {\n let dataPoint = dataPointEvent.point as AreaChartDatapoint;\n let dateInfo = dataPoint.description.split('-');\n let queryParams = {\n year: dateInfo[0],\n month: dateInfo[1],\n selectedPeriod: dateInfo[1],\n //TODO: Remove 'slice' once the sproc is ready to get the whole word as type\n commType: category.name.slice(0, 1),\n };\n\n if (addTitleSuffix) {\n queryParams['titleSuffix'] = ': ' + category.name;\n }\n\n if (navFromUrl !== '') {\n queryParams['navFromUrl'] = navFromUrl;\n }\n\n _this.router.navigate(routerinfo, {\n queryParams: queryParams,\n });\n }\n },\n },\n },\n });\n });\n return series;\n }\n }\n}\nexport interface AreaChartDatapoint extends Highcharts.PointOptionsObject {}\n","
\n

Loan Officers - Actuals Vs. Projections

\n
\n\n
\n \n \n
\n \n
\n
\n \n \n {{ dataItem.lo }}\n \n Total \n \n \n \n {{ dataItem.actualVolume | currency: 'USD':'symbol':'1.0-0' }}\n \n \n {{ sumActualVolume | currency: 'USD':'symbol':'1.0-0' }}\n \n \n \n \n {{ dataItem.projectionVolume | currency: 'USD':'symbol':'1.0-0' }}\n \n \n {{ sumProjectionVolume | currency: 'USD':'symbol':'1.0-0' }}\n \n \n \n \n {{ dataItem.actualUnits }}\n \n \n {{ sumActualUnits }}\n \n \n \n \n {{ dataItem.projectionUnits }}\n \n \n {{ sumProjectionUnits }}\n \n \n\n \n \n \n \n \n \n \n
\n","import { Component, Input, OnInit, SimpleChange } from '@angular/core';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { IProjectionsToActualsTabularListByPosition } from 'app/modules/performance/interfaces/performance-data';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\n\n@Component({\n selector: 'app-performance-actuals-vs-projections-table',\n templateUrl: './performance-actuals-vs-projections-table.component.html',\n styleUrls: ['./performance-actuals-vs-projections-table.component.scss'],\n})\nexport class PerformanceActualsVsProjectionsTableComponent implements OnInit {\n loading: boolean;\n noDataType: NoDataTypes;\n noDataForCompany: boolean;\n hFilterJSON = '';\n unitTotal: number = 0;\n volTotal: number = 0;\n gridView: GridDataResult;\n skip = 0;\n pageSize = 5;\n sort: SortDescriptor[] = [];\n sortable = {\n mode: 'single',\n allowUnsort: true,\n };\n gridState: State = {\n sort: [],\n skip: 0,\n take: 5,\n };\n scrollable = 'scrollable';\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 sumProjectionVolume: number;\n sumActualVolume: number;\n sumProjectionUnits: number;\n sumActualUnits: number;\n volumePctRatio: number;\n @Input() data: IProjectionsToActualsTabularListByPosition[];\n\n constructor() {}\n\n ngOnInit() {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Actuals vs Projections Table Summary',\n inputSource: NoDataSourceType.table,\n noDataCustomMessage: 'Add Projections to see data here.',\n };\n\n this.updateGrid();\n }\n\n setNoDataType(action: NoDataActionType) {\n this.noDataForCompany = true;\n }\n\n ngOnChanges(changes: { [property: string]: SimpleChange }) {\n let change: SimpleChange = changes['data'];\n if (change) {\n this.updateGrid();\n }\n }\n\n updateGrid() {\n if (this.data.length < 1) {\n this.noDataForCompany = true;\n this.loading = false;\n this.sumActualUnits = 0;\n this.sumActualVolume = 0;\n this.sumProjectionUnits = 0;\n this.sumProjectionVolume = 0;\n this.volumePctRatio = 0;\n } else {\n const aggregationUnit = this.data[0];\n this.sumActualUnits = aggregationUnit.sumActualUnits;\n this.sumActualVolume = aggregationUnit.sumActualVolume;\n this.sumProjectionUnits = aggregationUnit.sumProjectionUnits;\n this.sumProjectionVolume = aggregationUnit.sumProjectionVolume;\n this.volumePctRatio = aggregationUnit.volumePctRatio;\n }\n\n let orderedData = orderBy(this.data, this.sort).slice(this.skip, this.skip + this.pageSize);\n this.gridView = {\n data: orderedData,\n total: this.data.length,\n };\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","\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n\n\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { PerformanceComponent } from './components/performance-at-a-glance/performance.component';\nimport { PerformanceTransitionComponent } from './components/performance-transition/performance-transition.component';\nimport { PerformanceGoalTrackingComponent } from './components/performance-goal-tracking/performance-goal-tracking.component';\nimport { PerformanceInsightsKPIComponent } from './components/performance-insights-kpi/performance-insights-kpi.component';\nimport { PerformanceInsightsKPISparklineComponent } from './components/performance-insights-kpi-sparkline/performance-insights-kpi-sparkline.component';\nimport { PerformanceKpiComponent } from './components/performance-kpi/performance-kpi.component';\nimport { PerformanceReportsComponent } from './components/performance-reports/performance-reports.component';\nimport { PerformanceScorecardsComponent } from './components/performance-scorecards/performance-scorecards.component';\nimport { PerformanceUpgradeComponent } from './components/performance-upgrade/performance-upgrade.component';\nimport { PerformanceScorecardEmployeeTypeComponent } from './components/performance-scorecard-employee-type/performance-scorecard-employee-type.component';\nimport { PerformanceScorecardEntityComponent } from './components/performance-scorecard-entity/performance-scorecard-entity.component';\nimport { PerformanceScorecardThirdPartyComponent } from './components/performance-scorecard-third-party/performance-scorecard-third-party.component';\nimport { PerformanceInsightsComponent } from './components/performance-insights/performance-insights.component';\nimport { PerformanceProjectionsConfigComponent } from './components/performance-projections-config/performance-projections-config.component';\nimport { PerformanceInsightsKpiLOComponent } from './components/performance-insights-kpi-lo/performance-insights-kpi-lo.component';\nimport { AuthGuardService } from '../shared/services/auth-guard.service';\nimport { PerformanceInsightWeightedRankingsComponent } from './components/performance-insight-weighted-rankings/performance-insight-weighted-rankings.component';\nimport { PerformanceRankingsPositionComponent } from './components/performance-rankings-position/performance-rankings-position.component';\nimport { PerformanceBranchLeaderboardComponent } from './components/performance-branch-leaderboard/performance-branch-leaderboard.component';\nimport { PerformanceRankingsBranchComponent } from './components/performance-rankings-branch/performance-rankings-branch.component';\nimport { PerformanceInsightsMonthlyLoRankingsComponent } from './components/performance-insights-monthly-lo-rankings/performance-insights-monthly-lo-rankings.component';\nimport { PerformanceActualsVsProjectionsComponent } from './components/performance-actuals-vs-projections/performance-actuals-vs-projections.component';\n\nconst performanceRoutes: Routes = [\n { path: '', component: PerformanceTransitionComponent },\n {\n path: 'at-a-glance',\n component: PerformanceComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'goal-tracking',\n component: PerformanceGoalTrackingComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights',\n component: PerformanceInsightsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/kpi',\n component: PerformanceInsightsKPIComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'kpi',\n component: PerformanceKpiComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'reports',\n component: PerformanceReportsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards',\n component: PerformanceScorecardsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/lo',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/post-closer',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/ae',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/branch',\n component: PerformanceScorecardEntityComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/processor',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/loa',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/underwriter',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/closer',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/funder',\n component: PerformanceScorecardEmployeeTypeComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/lender',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/broker',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/buyer-agent',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/buyer-agency',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/settlement-agency',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/investor',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'scorecards/servicer',\n component: PerformanceScorecardThirdPartyComponent,\n canActivate: [AuthGuardService],\n },\n { path: 'upgrade', component: PerformanceUpgradeComponent },\n {\n path: 'projections-config',\n component: PerformanceProjectionsConfigComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/kpi-sparkline',\n component: PerformanceInsightsKPISparklineComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/kpi-employee',\n component: PerformanceInsightsKpiLOComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/weighted-rankings',\n component: PerformanceInsightWeightedRankingsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/performance-rankings-position',\n component: PerformanceRankingsPositionComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/branch-leaderboard',\n component: PerformanceBranchLeaderboardComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/performance-rankings-branch',\n component: PerformanceRankingsBranchComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/monthly-lo-rankings',\n component: PerformanceInsightsMonthlyLoRankingsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/performance-actuals-vs-projections',\n component: PerformanceActualsVsProjectionsComponent,\n canActivate: [AuthGuardService],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(performanceRoutes)],\n exports: [RouterModule],\n})\nexport class PerformanceRoutingModule {}\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PerformanceCharts } from 'app/modules/shared/classes/performance-chart-options';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport {\n CategoryGroup,\n IChartTitleData,\n ILargeCardInteriorOptions,\n} from 'app/modules/shared/interfaces/card-data';\nimport { NoDataActionType, NoDataTypes } from 'app/modules/shared/interfaces/no-data';\nimport { BranchService } from 'app/modules/shared/services/branch.service';\nimport { ToastService } from 'app/modules/shared/services/toast.service';\nimport * as Highcharts from 'highcharts';\nimport {\n IProjectionsToActualsLargeCard,\n IProjectionsToActualsTabularListByPosition,\n IProjectionsUser,\n IProjectionsUserParameters,\n} from '../../interfaces/performance-data';\nimport { PerformanceService } from '../../services/performance.service';\nimport { ProjectionService } from '../../services/projection.service';\nimport {\n Branch,\n BranchEmpData,\n Year,\n} from '../performance-projections-config/performance-projection.data';\n\n@Component({\n selector: 'app-performance-actuals-vs-projections',\n templateUrl: './performance-actuals-vs-projections.component.html',\n styleUrls: ['./performance-actuals-vs-projections.component.scss'],\n})\nexport class PerformanceActualsVsProjectionsComponent implements OnInit {\n branchesOfInterest: Branch[];\n selectedIdentifier: Branch[];\n yearsOfInterest: Year[];\n selectedYear: Year[];\n loading: boolean;\n branchIdentifier: string;\n branchListSettings: any;\n yearOption: string;\n yearListSettings: any;\n employeeListSettings: any;\n employeeList: IProjectionsUser[];\n selectedEmployee: any;\n employeeType: string = 'Loan Originator';\n employeeIdentifierRoute: string;\n employeeIdentifier: string;\n employeeFoundInList: boolean;\n noDataSelection: NoDataTypes;\n parameters: IProjectionsUserParameters = {\n fromDatePeriod: '12m',\n staffingKey: 1,\n ymc: null,\n };\n action: NoDataActionType;\n performanceCharts = new PerformanceCharts.PerformanceCharts(\n this.router,\n this.reusableFunctions\n );\n navFromUrl: string = 'performance/insights/performance-actuals-vs-projections';\n isLevel1User: boolean = false;\n employee: any;\n tableSummaryData: IProjectionsToActualsTabularListByPosition[];\n mainCharts: any[];\n\n constructor(\n private branchService: BranchService,\n private projectionService: ProjectionService,\n private toast: ToastService,\n private performanceService: PerformanceService,\n private reusableFunctions: ReusableFunctions,\n private router: Router\n ) {\n this.branchListSettings = {\n singleSelection: true,\n text: 'Select Branch',\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'hierarchyName',\n primaryKey: 'hierarchyIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.yearListSettings = {\n singleSelection: true,\n text: 'Select Year',\n enableSearchFilter: false,\n showCheckbox: false,\n labelKey: 'year',\n primaryKey: 'year',\n enableFilterSelectAll: false,\n };\n\n this.employeeListSettings = {\n singleSelection: true,\n text: `Select Loan Originator`,\n enableSearchFilter: true,\n showCheckbox: false,\n labelKey: 'employee',\n primaryKey: 'employeeIdentifier',\n enableFilterSelectAll: false,\n };\n\n this.initializeCharts();\n this.getEmptyLargeCardData();\n this.yearsOfInterest = [];\n this.addYears();\n this.selectedYear = [this.yearsOfInterest[0]];\n }\n\n ngOnInit(): void {\n this.loading = true;\n this.getBranches();\n }\n\n initializeCharts() {\n this.mainCharts = [\n {\n name: 'VolumeChart',\n },\n {\n name: 'UnitChart',\n },\n ];\n }\n\n getEmptyLargeCardData() {\n this.mainCharts.forEach((mainChart) => {\n let chartTitleData: IChartTitleData = {\n showChartCustomTitle: false,\n chartTile: '',\n chartLabelColor: '',\n chartComparisonValue: '',\n chartMainValue: null,\n chartSecondaryValue: '',\n isMainValueUnitVisible: false,\n showMainValue: false,\n chartSubItemValue: '',\n isChartSubValueVisible: false,\n svgIconString: '',\n };\n\n mainChart.largeCardInteriorOptions = {\n action: this.action,\n componentTitle: '',\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: `projections-vs-actuals-${mainChart.name}`,\n chartTitleData: Object.assign({}, chartTitleData),\n noDataCustomMessage: 'Add Projections to see data here.',\n };\n });\n }\n\n getBranches() {\n this.branchService.getAllRelatedBranches().subscribe(\n (branchEmpData: BranchEmpData) => {\n if (branchEmpData.branches && branchEmpData.branches.length) {\n this.branchesOfInterest = branchEmpData.branches;\n this.selectedIdentifier = [\n this.branchesOfInterest.find((b) => b.hierarchyIdentifier),\n ];\n\n this.setBranch();\n } else if (branchEmpData.employeeData) {\n this.isLevel1User = true;\n this.employee = {\n employee: branchEmpData.employeeData.lfName,\n employeeIdentifier: branchEmpData.employeeData.primaryIdentifier,\n hierarchyName: branchEmpData.employeeData.location,\n hierarchyIdentifier: branchEmpData.employeeData.locationIdentifier,\n };\n this.branchesOfInterest = [this.employee];\n this.selectedIdentifier = [this.employee];\n this.setBranch();\n } else {\n this.toast.warning('No branches of interest found for current user.');\n this.loading = false;\n }\n },\n (error) => {\n console.log(error);\n this.loading = false;\n throw new Error('Problem retrieving the branches.');\n }\n );\n }\n\n getMainChartData() {\n const parameters = {\n year: Number(this.selectedYear[0].year),\n positionAbbv: 'LO',\n hierarchyIdentifier: this.branchIdentifier,\n employeeIdentifier: this.employeeIdentifier ?? 'All',\n hFilterJSON: '[]',\n };\n this.performanceService.getProjectionsToActualsLargeCard(parameters).subscribe(\n (data: IProjectionsToActualsLargeCard[]) => {\n if (data.length && data.some((x) => x.recordType === 'Projection')) {\n this.setMainChartData(data, this.mainCharts, true);\n } else {\n this.setMainChartData([], this.mainCharts, false);\n }\n },\n (error) => {\n console.log('error: ', error);\n this.setMainChartData([], this.mainCharts, false);\n }\n );\n }\n\n getYears() {\n this.projectionService\n .getYearsOfInterest(this.selectedIdentifier[0].hierarchyIdentifier)\n .subscribe(\n (years) => {\n this.yearsOfInterest = [];\n if (years && years.length) {\n years.forEach((year) => {\n if (\n this.yearsOfInterest.findIndex((y) => y.yearValue === year) === -1\n ) {\n this.yearsOfInterest.push({\n year: year.toString(),\n yearValue: year,\n });\n }\n });\n this.sortYearsData();\n this.selectedYear = [this.yearsOfInterest[0]];\n } else {\n this.yearsOfInterest = [\n {\n year: new Date().getFullYear().toString(),\n yearValue: new Date().getFullYear(),\n },\n {\n year: (new Date().getFullYear() + 1).toString(),\n yearValue: new Date().getFullYear() + 1,\n },\n ];\n this.selectedYear = [this.yearsOfInterest[0]];\n }\n this.getUsersList();\n },\n (error) => {\n console.log('error: ', error);\n }\n );\n }\n\n onBranchChange(branch: Branch) {\n if (branch) {\n this.selectedIdentifier = [branch];\n this.selectedEmployee = null;\n this.employeeIdentifier = null;\n this.setBranch();\n }\n }\n\n setBranch() {\n this.branchIdentifier = this.selectedIdentifier[0].hierarchyIdentifier;\n this.getYears();\n }\n\n getUsersList() {\n this.parameters.hierarchyIdentifier = this.branchIdentifier;\n if (!this.isLevel1User) {\n this.performanceService.getProjectionsUserList(this.parameters).subscribe((users) => {\n this.employeeList = users;\n this.getMainChartData();\n this.getTableSummaryData();\n });\n } else {\n this.employeeList = [this.employee];\n this.selectedEmployee = [this.employee];\n this.employeeIdentifier = this.employee.employeeIdentifier;\n this.getMainChartData();\n this.getTableSummaryData();\n }\n }\n\n addYears() {\n const thisYear = new Date().getFullYear();\n if (this.yearsOfInterest.findIndex((y) => y.yearValue === thisYear) === -1) {\n this.yearsOfInterest.push(\n {\n year: new Date().getFullYear().toString(),\n yearValue: new Date().getFullYear(),\n },\n {\n year: (new Date().getFullYear() + 1).toString(),\n yearValue: new Date().getFullYear() + 1,\n }\n );\n }\n this.sortYearsData();\n }\n\n sortYearsData() {\n this.yearsOfInterest?.sort((a, b) => a.yearValue - b.yearValue);\n }\n\n onYearChange(year: Year) {\n if (year) {\n this.selectedYear = [year];\n this.getMainChartData();\n this.getTableSummaryData();\n }\n }\n\n onEmployeeChange(event) {\n this.employeeIdentifier = this.selectedEmployee[0].employeeIdentifier;\n this.getMainChartData();\n this.getTableSummaryData();\n }\n\n setMainChartData(data: any[], cardInfo: ILargeCardData[], hasData: boolean): void {\n // Data here contains separate actual / proj data for every lo in every branch. We want to filter out so that our series gets 12 points (1 for each month) at most.\n const filteredData = this.filterDataByYMC(data);\n cardInfo.forEach((card) => {\n const isVolume = card.name === 'VolumeChart';\n let actuals: any = [];\n let projections: any = [];\n\n filteredData.forEach((record) => {\n let monthShortName = this.reusableFunctions.monthNumToMonthYearArray(\n record.yearMonthCalendar\n );\n record['datePeriodDescription'] = monthShortName[0];\n const ymc = `${monthShortName[0]} ${monthShortName[1]}`;\n if (record.recordType === 'Actual') {\n actuals.push({\n y: isVolume ? record.totalVolume : record.totalUnits,\n name: monthShortName[0],\n description: ymc,\n });\n } else if (record.recordType === 'Projection') {\n projections.push({\n y: isVolume ? record.totalVolume : record.totalUnits,\n name: monthShortName[0],\n description: ymc,\n });\n }\n });\n let series: ISeriesData[] = [\n {\n name: 'Actuals',\n data: actuals,\n color: '#0cb090',\n },\n {\n name: 'Projections',\n data: projections,\n color: '#CCCCCC',\n },\n ];\n\n const subtitle = this.getSubtitle(data, isVolume);\n\n let categoryGroup: CategoryGroup[] = this.reusableFunctions.getCategories(\n data,\n ['year', 'monthNumber'],\n this.parameters.fromDatePeriod\n )[0];\n let chartOptions = this.performanceCharts.createNewAreaChart(\n isVolume ? 'Dollars ($)' : 'Units #',\n series,\n ['', card.drillDUrlSegment],\n categoryGroup,\n true,\n false,\n subtitle,\n this.navFromUrl,\n isVolume\n );\n this.updateLargeCard(card, chartOptions, hasData);\n });\n }\n\n updateLargeCard(cardInfo: ILargeCardData, chartOptions: Highcharts.Options, hasData: boolean) {\n if (cardInfo) {\n cardInfo.largeCardInteriorOptions.chart = new Highcharts.Chart(\n cardInfo.largeCardInteriorOptions.uniqueId,\n chartOptions\n );\n cardInfo.largeCardInteriorOptions.hasData = hasData;\n cardInfo.largeCardInteriorOptions.isDataReady = true;\n cardInfo.largeCardInteriorOptions = Object.assign(\n {},\n cardInfo.largeCardInteriorOptions\n );\n }\n }\n\n getSubtitle(data: IProjectionsToActualsLargeCard[], isVolume: boolean) {\n const actuals = data.find((x) => x.recordType === 'Actual');\n const projections = data.find((x) => x.recordType === 'Projection');\n\n if (isVolume) {\n const actualVerbiage = actuals\n ? this.reusableFunctions.formatMoney(actuals?.timespanTotalVolume)\n : '$0';\n const projectionsVerbiage = projections\n ? this.reusableFunctions.formatMoney(projections?.timespanTotalVolume)\n : '$0';\n return `${actualVerbiage} | ${projectionsVerbiage}`;\n } else {\n const actualVerbiage = actuals ? actuals?.timespanTotalUnits : '0';\n const projectionsVerbiage = projections ? projections?.timespanTotalUnits : '0';\n return `${actualVerbiage} | ${projectionsVerbiage}`;\n }\n }\n\n getTableSummaryData() {\n const parameters = {\n year: Number(this.selectedYear[0].year),\n positionAbbv: 'LO',\n hierarchyIdentifier: this.branchIdentifier,\n employeeIdentifier: this.employeeIdentifier ?? 'All',\n hFilterJSON: '[]',\n };\n this.performanceService.getProjectionsToActualsTabularListByPosition(parameters).subscribe(\n (data) => {\n this.tableSummaryData = data;\n },\n (error) => {\n console.log(error);\n this.loading = false;\n this.tableSummaryData = [];\n }\n );\n }\n\n filterDataByYMC(data) {\n const actualData = [];\n const projData = [];\n data.forEach((d) => {\n if (d.recordType === 'Actual') {\n if (!actualData.some((x) => x.yearMonthCalendar === d.yearMonthCalendar)) {\n actualData.push(d);\n }\n }\n if (d.recordType === 'Projection') {\n if (!projData.some((x) => x.yearMonthCalendar === d.yearMonthCalendar)) {\n projData.push(d);\n }\n }\n });\n return [...actualData, ...projData];\n }\n}\n\ninterface ILargeCardData {\n index: number;\n drillDUrlSegment: string;\n name: string;\n chart: any;\n largeCardInteriorOptions?: ILargeCardInteriorOptions;\n}\n\ninterface ISeriesData {\n name: string;\n data: Array;\n color: string;\n type?: string;\n marker?: object;\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule, CurrencyPipe, DecimalPipe } from '@angular/common';\nimport { PerformanceComponent } from './components/performance-at-a-glance/performance.component';\nimport { PerformanceRoutingModule } from './performance.routing.module';\nimport { SharedModule } from '../shared/shared.module';\nimport { ThirdPartyModule } from '../third-party/third-party.module';\nimport { PerformanceGoalTrackingComponent } from './components/performance-goal-tracking/performance-goal-tracking.component';\nimport { PerformanceReportsComponent } from './components/performance-reports/performance-reports.component';\nimport { PerformanceKpiComponent } from './components/performance-kpi/performance-kpi.component';\nimport { PerformanceInsightsKPIComponent } from './components/performance-insights-kpi/performance-insights-kpi.component';\nimport { PerformanceInsightsKPISparklineComponent } from './components/performance-insights-kpi-sparkline/performance-insights-kpi-sparkline.component';\nimport { PerformanceScorecardsComponent } from './components/performance-scorecards/performance-scorecards.component';\nimport { PerformanceTransitionComponent } from './components/performance-transition/performance-transition.component';\nimport { PerformanceUpgradeComponent } from './components/performance-upgrade/performance-upgrade.component';\nimport { PerformanceInsightOptionComponent } from './components/performance-insight-option/performance-insight-option.component';\nimport { PerformanceScorecardEmployeeTypeComponent } from './components/performance-scorecard-employee-type/performance-scorecard-employee-type.component';\nimport { PerformanceScorecardEntityComponent } from './components/performance-scorecard-entity/performance-scorecard-entity.component';\nimport { PerformanceScorecardThirdPartyComponent } from './components/performance-scorecard-third-party/performance-scorecard-third-party.component';\nimport { PerformanceInsightsComponent } from './components/performance-insights/performance-insights.component';\nimport { PerformanceProjectionsConfigComponent } from './components/performance-projections-config/performance-projections-config.component';\nimport { PerformanceInsightsKpiLOComponent } from './components/performance-insights-kpi-lo/performance-insights-kpi-lo.component';\nimport { PerformanceInsightWeightedRankingsComponent } from './components/performance-insight-weighted-rankings/performance-insight-weighted-rankings.component';\nimport { PerformanceRankingsPositionComponent } from './components/performance-rankings-position/performance-rankings-position.component';\nimport { PerformanceInsightRankingTableComponent } from './components/performance-insight-weighted-rankings/table/performance-insight-ranking-table.component';\nimport { PerformanceBranchLeaderboardComponent } from './components/performance-branch-leaderboard/performance-branch-leaderboard.component';\nimport { PerformanceRankingsBranchComponent } from './components/performance-rankings-branch/performance-rankings-branch.component';\nimport { PerformanceInsightsMonthlyLoRankingsComponent } from './components/performance-insights-monthly-lo-rankings/performance-insights-monthly-lo-rankings.component';\nimport { PerformanceActualsVsProjectionsComponent } from './components/performance-actuals-vs-projections/performance-actuals-vs-projections.component';\nimport { PerformanceActualsVsProjectionsTableComponent } from './components/performance-actuals-vs-projections/table/performance-actuals-vs-projections-table/performance-actuals-vs-projections-table.component';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { EntityLeaderboardService } from './services/entity-leaderboard.service';\nimport { PerformanceScorecardService } from './services/performance-scorecard.service';\nimport { PerformanceService } from './services/performance.service';\nimport { ProjectionService } from './services/projection.service';\nimport { RankingsService } from './services/rankings.service';\n\n@NgModule({\n declarations: [\n PerformanceComponent,\n PerformanceGoalTrackingComponent,\n PerformanceReportsComponent,\n PerformanceKpiComponent,\n PerformanceInsightsKPIComponent,\n PerformanceInsightsKPISparklineComponent,\n PerformanceScorecardsComponent,\n PerformanceTransitionComponent,\n PerformanceUpgradeComponent,\n PerformanceInsightOptionComponent,\n PerformanceScorecardEmployeeTypeComponent,\n PerformanceScorecardEntityComponent,\n PerformanceScorecardThirdPartyComponent,\n PerformanceInsightsComponent,\n PerformanceProjectionsConfigComponent,\n PerformanceInsightsKpiLOComponent,\n PerformanceInsightWeightedRankingsComponent,\n PerformanceRankingsPositionComponent,\n PerformanceInsightRankingTableComponent,\n PerformanceBranchLeaderboardComponent,\n PerformanceRankingsBranchComponent,\n PerformanceInsightsMonthlyLoRankingsComponent,\n PerformanceActualsVsProjectionsComponent,\n PerformanceActualsVsProjectionsTableComponent,\n ],\n imports: [CommonModule, PerformanceRoutingModule, SharedModule, GridModule, ThirdPartyModule],\n providers: [\n CurrencyPipe,\n DecimalPipe,\n EntityLeaderboardService,\n PerformanceScorecardService,\n PerformanceService,\n ProjectionService,\n RankingsService,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class PerformanceModule {}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport {\n HierarchyEntity,\n HierarchyWebModel,\n HierarchyLevel,\n HierarchyEntityShort,\n HierarchyDetailsModel as HierarchyCompleteModel,\n HierarchyDetailsModel,\n HierarchyType,\n UserHierarchyByRole,\n} from '../interfaces/hierarchy-data';\nimport {\n ClientHierarchy,\n HierarchyRoleType,\n ClientHierarchyMain,\n} from '../../shared/interfaces/user-location';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HierarchyService {\n constructor(private http: HttpClient) {}\n\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}/hierarchy').replace(\n '{version}',\n this.version\n );\n\n getHierarchyEntities(): Observable {\n return this.http.get(this._url + '/GetHierarchyEntities/');\n }\n\n getHierarchyEntitiesForClient(clientKey: number): Observable {\n const params = {\n clientKey: clientKey.toString(),\n };\n return this.http.get(this._url + '/GetHierarchyEntitiesForClient/', {\n params: params,\n });\n }\n\n getHierarchyLevelsOfInterest(): Observable {\n return this.http.get(this._url + '/GetHierarchyLevelsOfInterest');\n }\n\n getHierarchyEntitiesOfInterest(): Observable {\n return this.http.get(this._url + '/GetHierarchyEntitiesOfInterest');\n }\n\n getHierarchyDetailsModel(id: string): Observable {\n return this.http.post(this._url + '/GetHierarchyCompleteModel', {\n identifier: id,\n });\n }\n\n upsertNewHierarchyEntity(formModel: any, origOwner: string) {\n this.cleanUpData(formModel);\n formModel.originalOwnerIdentifier = origOwner;\n return new Observable((subscriber) => {\n this.http.post(`${this._url}/UpsertNewHierarchyEntity`, formModel).subscribe(\n () => {\n subscriber.next(true);\n },\n (response) => {\n subscriber.error(response);\n }\n );\n });\n }\n private cleanUpData(formModel: any) {\n if (!formModel.generalInfo.hierarchyKey) {\n formModel.generalInfo.hierarchyKey = null;\n }\n formModel.hierarchyInfo.roleOrder = +formModel.hierarchyInfo.roleOrder;\n if (!formModel.hierarchyInfo.parentHierarchyKey) {\n formModel.hierarchyInfo.parentHierarchyKey = null;\n }\n formModel.generalInfo.hierarchyTypeKey = +formModel.generalInfo.hierarchyTypeKey;\n if (\n !formModel.generalInfo.ownerIdentifier &&\n formModel.generalInfo.selectOwner &&\n formModel.generalInfo.selectOwner.length\n ) {\n formModel.generalInfo.ownerIdentifier =\n formModel.generalInfo.selectOwner[0].primaryIdentifier;\n }\n if (\n !formModel.hierarchyInfo.parentHierarchyKey &&\n formModel.hierarchyInfo.parentHierarchyKey &&\n formModel.hierarchyInfo.parentHierarchyKey.length\n ) {\n formModel.hierarchyInfo.parentHierarchyKey =\n formModel.hierarchyInfo.parentHierarchyKey[0].hierarchyKey;\n }\n if (\n formModel.generalInfo.locationInfo &&\n formModel.generalInfo.locationInfo.zipCodeDeliverySpecific\n ) {\n formModel.generalInfo.locationInfo.zipCode =\n formModel.generalInfo.locationInfo.zipCode +\n formModel.generalInfo.locationInfo.zipCodeDeliverySpecific;\n }\n }\n\n getCorporateAllHierarchy() {\n return this.http.get(this._url + '/CorporateAll');\n }\n\n getHierarchyRoleTypes() {\n return this.http.get(this._url + '/RoleTypes');\n }\n\n getHierarchyTypes() {\n return this.http.get(this._url + '/GetHierarchyTypes');\n }\n\n updateHierarchyLevels(hierarchyData: ClientHierarchyMain[]) {\n const params = new HttpParams().set('hierarchyData', JSON.stringify(hierarchyData));\n\n return this.http.get(this._url + '/UpdateHierarchyLevels', {\n params: params,\n });\n }\n\n deleteHierarchyLevels(hierarchyData: ClientHierarchy) {\n const params = new HttpParams().set('roleOrder', hierarchyData.roleOrder.toString());\n\n return this.http.get(this._url + '/DeleteHierarchyLevels', {\n params: params,\n });\n }\n\n getBranches(): Observable {\n return this.http.get(this._url + '/branches/all');\n }\n\n getHierarchyByRole(roleName: string): Observable {\n const params = new HttpParams().set('roleName', roleName);\n\n return this.http.get(this._url + '/DisplayUserHierarchyByRole', {\n params: params,\n });\n }\n\n getEntitiesByRoleOrder(roleOrder: number): Observable {\n const params = new HttpParams().set('roleOrder', roleOrder.toString());\n return this.http.get(this._url + '/level', {\n params: params,\n });\n }\n\n getEmployeeListByAsOfDateAndPosition(parameters: object = null) {\n let params: HttpParams = new HttpParams().set('paramsString', JSON.stringify(parameters));\n return this.http.get(this._url + '/GetEmployeeListByPosition', {\n params: params,\n });\n }\n\n doHierarchyEntitiesExistForClient(clientShortName: string = ''): Observable {\n const params = new HttpParams().set('clientShortName', clientShortName);\n return this.http.get(this._url + '/DoHierarchyEntitiesExistForClient', {\n params: params,\n });\n }\n}\n"],"x_google_ignoreList":[]}