{"version":3,"file":"904.c8e3961162ebe82a.js","mappings":"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","names":["i0","ProductionComponent_div_8_ng_template_1_Template","cardId_r1","ProductionComponent_div_10_ng_template_1_Template","cardId_r2","ProductionComponent","constructor","cd","customDashboardsService","componentsOutletDirectiveService","this","pageTitle","dashboard","ngOnInit","destroyCharts","detectChange","NoDataActionType","pageStart","productionSmallCardsIdList","productionLargeChartsIdList","updateComponent","detectViewChanges","loadContents","dashboardOutlet","onResize","event","reCreateExistingCharts","applyNewFilters","hFilterJSON","displayOptions","filter","applyDisplayOptions","ngOnDestroy","unsubscribeFilters","i1","i2","selectors","viewQuery","rf","ctx","CustomDashboardsOutletDirective","$event","ProductionComponent_div_8_Template","ProductionComponent_div_10_Template","ProductionInsightsComponent","decls","vars","consts","template","ProductionTransitionComponent","ProductionReportsComponent","ProductionForecastingComponent","ProductionUpgradeComponent","setUpgradePage","headline","shortOverview","selligPointHeader","logoPlaceholder","moduleShortDescription","backgroundColor","ProductionInsightOptionComponent","ProductionTurntimesChartOptions","router","getTurntimesStackChartsOptions","chartInfo","numOfCategories","categories","length","highChartsOptions","_this","isInialLoadCompleted","isUnitChart","cardId","search","chart","type","height","spacingLeft","spacingRight","spacingTop","marginRight","scrollablePlotArea","events","render","xTicks","xAxis","ticks","tickKeys","Object","keys","points","series","forEach","concat","key","i","xTick","label","pointInf","find","point","name","element","textContent","toLowerCase","trim","style","cursor","onclick","item","queryParams","empId","properties","employeeNumber","staffingId","staffingKey","titleSuffix","position","navFromUrl","ownerId","ownerPosition","navigate","routerUrl","urlSegment","error","Error","exporting","enabled","title","text","credits","xAxisTitle","labels","step","fontSize","color","padding","fontWeight","plotLines","yAxis","yAxisTitle","lineWidth","yPlotlineOptions","chartData","reverse","tooltip","fontFamily","borderColor","borderRadius","useHTML","shared","followPointer","distance","formatter","tooltipTarget","sum","category","reduce","s","target","y","toString","legend","showLegend","align","verticalAlign","layout","reversed","plotOptions","bar","maxPointWidth","stacking","states","hover","brightness","turboThreshold","click","scrollHeight","minHeight","opacity","ProductionTurnTimesService","_http","serverUrl","window","location","host","version","_url","replace","getFundedDays","parameters","post","headers","HttpHeaders","getFundedUnits","getFundedDaysByPosition","getOwnwrPositions","factory","ɵfac","providedIn","card_r1","cardInfo","ProductionTurnTimesComponent","reusableFunctions","turnTimesService","positionColorsArray","positionColors","milestoneColorsArray","milestoneColors","selectSummaryHideList","action","turntimesCards","ownerPositions","selectedPosition","getPosition","getCurrentDisplayOptions","url","fromDatePeriod","channel","loanType","purpose","getHierarchyFilters","positionIdentifier","pageHeadline","module","moduleIcon","linkArray","moduleLink","linkTitle","showLink","isHome","setDisplayOptionsSelected","getOwnerPositions","fromDate","optionKey","selectedOptions","push","loadData","resetCards","loadTotalDaysData","loadFundedData","loadDaysByPositionData","subscribe","res","addInitialCards","componentTitle","searchTerm","hasData","isDataReady","showTitle","accessToUrl","uniqueId","useLGScroll","averageDataPropertyName","mainPropertyName","chartType","card","assign","ownerStaffingKey","turntimesCard","data","setStackChart","setNoData","getDayDataAndCategories","dataDays","seriesProperty","categoryProperty","dataItemNamePropery","dataProperty","seriesNames","getUniqueItemList","categoryList","seriesCollectionDataSet","uniqueEntityNames","Array","from","Set","map","employeeName","seriesName","seriesDataSet","dataBySeries","correspondingData","x","leftoverData","colorInf","milestone","posInf","turntimesChart","dataProcessed","dataLength","positionId","posisionName","chartComparisonValue","average","sufix","chartTitleData","showChartCustomTitle","chartTile","chartLabelColor","chartMainValue","chartSecondaryValue","isMainValueUnitVisible","chartSubItemValue","isChartSubValueVisible","svgIconString","showMainValue","comparisonStyle","chartParams","averageLineConfig","chartOptions","Highcharts","value","width","zIndex","applySelectedPosition","i3","ProductionTurnTimesComponent_div_9_Template","ProductionFundedDistComponent","_router","productionService","decimalPipe","loading","options","loanPurpose","skip","pageSize","sort","field","dir","sortable","mode","allowUnsort","gridState","take","scrollable","pageable","refresh","info","previousNext","pageSizes","rankEntrySort","rankingData","isDateTypeDay","noDataType","inputSource","NoDataSourceType","table","limeGearCharts","LimeGearCharts","LimeGearChart","tableDataProperties","gridData","initialPageSize","initialSkip","recordSelection","kendoGridSelectById","isDataLoaded","spco","SparklineChartOptions","initiateTableProperties","tableColumnProperties","columnProperties","fieldId","fieldName","isHyperlink","fieldOrder","isSortable","defaultSorting","headerAlignment","dataAlignment","dataType","filterable","decimalPlaces","graphDataType","graphValue","hideIf","chartProperties","chartToFieldId","chartDataField","inComponentChartBuilding","tooltipProperties","labelField","datatype","precision","setAndGetParams","params","displayFundedProduct","dateType","dateTypeValue","periodDateStartLabel","split","yearMonthCalendar","fullDataset","currentPeriodData","isCurrentPeriod","a","b","rank","highestVolume","sumVolume","highestUnits","sumUnits","percentVolumeForBarGraph","percentUnitsForBarGraph","updateGrid","JSON","parse","stringify","includes","product","sortedData","orderBy","slice","gridView","total","setTimeout","drawCharts","navigateToDrilldown","selectedRows","selectedRow","dataItem","volValues","unitValues","createKPINewSparkline","increment","periodDates","pageChange","sortChange","onStateChange","state","searchRows","gridChangeEvent","setColumnFormat","updateTableColumnProperties","paginatedData","toGroupByColumnHeader","calculateChange","columnList","chartIdColumn","setCharts","colInf","backUpFieldId","valueColumn","col","format","i4","ProductionFundedLoanCharacteristicsComponent_div_7_ng_template_1_Template","chartId_r1","ProductionFundedLoanCharacteristicsComponent_div_9_ng_template_1_Template","chartId_r2","ProductionFundedLoanCharacteristicsComponent","donutChartIdList","barChartIdList","ProductionFundedLoanCharacteristicsComponent_div_7_Template","ProductionFundedLoanCharacteristicsComponent_div_9_Template","ProductionFundedBorrowerCharacteristicsComponent_div_7_ng_template_1_Template","ProductionFundedBorrowerCharacteristicsComponent_div_9_ng_template_1_Template","ProductionFundedBorrowerCharacteristicsComponent","ProductionFundedBorrowerCharacteristicsComponent_div_7_Template","ProductionFundedBorrowerCharacteristicsComponent_div_9_Template","MilestoneUtilizationService","getProductionMilestoneUtlization","LGBarChartOptions","route","routeParams","getChartOptions","labelPoint","param","BarChartComponent","isStacked","xTitle","yTitle","xLabelFormat","yLabelFormat","chartHeight","legendEnabled","pointClickFunction","flipYAxis","maxYValue","useTooltipFormatter","useLabelClick","initializeLargeCard","ngOnChanges","largeCardOptions","setChart","setChartNoData","opposite","max","inputs","features","ProductionMilestoneUtilizationComponent","milestoneUtilizationService","milestoneData","routerURL","targetURL","largeDataCard","milestoneSearchTerm","maxHeight","setDisplayOptions","setColumnProperties","getData","milestoneSeries","formatStackData","setNoDataType","barData","milestoneOwner","milestoneName","pctUtilization","minTurnTime","maxTurnTime","avgTurnTime","setFormatter","drilldownFunction","isHierarchyEntity","ProductionEcloseAdoptionComponent_div_13_ng_template_1_Template","smallCard_r1","ProductionEcloseAdoptionComponent","smallCardsList","closingMethodChartCard","donutChartsCard","ProductionEcloseAdoptionComponent_ng_template_9_Template","ProductionEcloseAdoptionComponent_div_13_Template","ProductionEcloseAdoptionComponent_ng_template_15_Template","ProductionEcloseRoiTrendsComponent","ProductionEcloseRoiTrendsComponent_ng_template_9_Template","ProductionEcloseRoiTrendsComponent_ng_template_13_Template","ProductionEcloseRoiTrendsComponent_ng_template_15_Template","ProductionLoanCategoryDistComponent","aggregationId","aggregationType","aggregationValueType","displayLoanCategoryFunedProduct","comparePeriod","totalUnits","calculateSumByProperty","totalVol","loanCategory","periodNumber","mainChart_r1","largeCardInteriorOptions","_c0","legend_r2","legend_r3","productionRoutes","path","component","canActivate","AuthGuardService","ProductionByLoanCategoryComponent","largecardService","navigationHelpService","userAccessService","cardDrilldownUrl","colorOptions","mainCharts","filters","initializeCharts","displayLoanTypeGroupDistribution","dateTypeIsDay","datePeriodDescription","date","yr","month","shortName","getMonthShortName","Number","allLoanTypes","loanTypeColors","getRandomHexColor","barChartColors","convData","loanTypeCategory","govData","portfolioData","otherData","reverseData","allChartsData","some","periodGroup","mainChart","populateProductionLargeCardLoanType","index","prepareDonutData","unitName","loanCategoryName","ProductionCharts","getEmptyLargeCardData","showCardControllers","dataSet","comparison","sumUnitsThisPeriod","sumVolumeThisPeriod","obj","thisPeriodData","comparePeriodData","uniquePeriods","xLabelsCategoryInfo","getCategories","setChartData","sumUnitsLastPeriod","calculateComparisonPercentage","loanTypeGroup","priorQueryParams","processedChartSeries","setAllChartSeriesOptions","lineData","stackColumnsData","createNewStackedChart","getChartXLabel","updateChartData","compareInfo_selectedOptions","aggregateDataByClosingMethod","acc","curr","amount","volume","loanTypeCat","donutData","values","totalVolume","prepareClosingMixCenterText","prepareClosingMixLegend","loanTypeGroupData","setDonutChartData","loanTypeData","filterType","categoryColors","Conv","Govt","Other","Reverse","units","nbr","filterValue","percentage","alternatePercentage","textClickParams","loanTypeGroupLegend","getLargeCurrencyFormat","description","loanTypeCategoryLegend","loanTypeGroupColors","entries","e","compareTo","i5","i6","ProductionByLoanCategoryComponent_div_7_Template","ProductionByLoanCategoryComponent_div_13_Template","ProductionByLoanCategoryComponent_div_15_Template","ProductionRoutingModule","RouterModule","forChild","FundedBorrowerCharacteristicsService","getFundedLoansByFICORange","GetFundedLoansByReservesRange","getFundedLoansByHTIRange","getFundedLoansByDTIRange","getFundedLoansByOccupancy","getFundedLoansByPropertyType","getFundedLoansByDocType","getFundedLoansBySelfEmployed","ProductionModule","ProductionService","ECloseService","imports","CommonModule","SharedModule","ThirdPartyModule","SearchDialogComponent","resetSearch","clearSearchTerm","searchTimeoutStorage","placeHolder","clickAwayClose","popupTop","searchIconFontSize","searchIconActionColors","searchBoxHeight","timeoutDuration","searchOutput","EventEmitter","isPopupBoxOpen","isSearchEmpty","ngAfterViewInit","searchIcon","document","getElementById","suffix","popupBox","visibility","top","dialogSearchTerm","_dialogSearchTerm","clearTimeout","emitSearchOutput","setClearIcon","onKeydownHandler","closePopupDialog","openPopupDialog","openSearchDialog","setPopupboxPosition","getPopupDialogStatus","cancelButtonClick","sufx","clearButtonClick","emit","clearIcon","pageWidth","documentElement","clientWidth","popoupParantContainer","right","getBoundingClientRect","left","hostBindings"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/modules/production/components/production-at-a-glance/production.component.html","./src/app/modules/production/components/production-at-a-glance/production.component.ts","./src/app/modules/production/components/production-insights/production-insights.component.ts","./src/app/modules/production/components/production-insights/production-insights.component.html","./src/app/modules/production/components/production-transition/production-transition.component.ts","./src/app/modules/production/components/production-transition/production-transition.component.html","./src/app/modules/production/components/production-reports/production-reports.component.ts","./src/app/modules/production/components/production-reports/production-reports.component.html","./src/app/modules/production/components/production-forecasting/production-forecasting.component.ts","./src/app/modules/production/components/production-forecasting/production-forecasting.component.html","./src/app/modules/production/components/production-upgrade/production-upgrade.component.ts","./src/app/modules/production/components/production-upgrade/production-upgrade.component.html","./src/app/modules/production/components/production-insight-option/production-insight-option.component.ts","./src/app/modules/production/components/production-insight-option/production-insight-option.component.html","./src/app/modules/production/interfaces/production-turn-times/production-turn-times.highcharts.ts","./src/app/modules/production/services/production-turn-times.service.ts","./src/app/modules/production/components/production-turn-times/production-turn-times.component.html","./src/app/modules/production/components/production-turn-times/production-turn-times.component.ts","./src/app/modules/production/components/production-funded-dist/production-funded-dist.component.ts","./src/app/modules/production/components/production-funded-dist/production-funded-dist.component.html","./src/app/modules/production/components/production-funded-loan-characteristics/production-funded-loan-characteristics.component.html","./src/app/modules/production/components/production-funded-loan-characteristics/production-funded-loan-characteristics.component.ts","./src/app/modules/production/components/production-funded-borrower-characteristics/production-funded-borrower-characteristics.component.html","./src/app/modules/production/components/production-funded-borrower-characteristics/production-funded-borrower-characteristics.component.ts","./src/app/modules/production/services/milestone-utilization.service.ts","./src/app/modules/shared/interfaces/bar-chart.ts","./src/app/modules/shared/components/bar-chart/bar-chart.component.ts","./src/app/modules/shared/components/bar-chart/bar-chart.component.html","./src/app/modules/production/components/production-milestone-utilization/production-milestone-utilization.component.ts","./src/app/modules/production/components/production-milestone-utilization/production-milestone-utilization.component.html","./src/app/modules/production/components/production-eclose-adoption/production-eclose-adoption.component.html","./src/app/modules/production/components/production-eclose-adoption/production-eclose-adoption.component.ts","./src/app/modules/production/components/production-eclose-roi-trends/production-eclose-roi-trends.component.ts","./src/app/modules/production/components/production-eclose-roi-trends/production-eclose-roi-trends.component.html","./src/app/modules/production/components/production-loan-category-dist/production-loan-category-dist.component.ts","./src/app/modules/production/components/production-loan-category-dist/production-loan-category-dist.component.html","./src/app/modules/production/components/production-by-loan-category/production-by-loan-category.component.html","./src/app/modules/production/production.routing.module.ts","./src/app/modules/production/components/production-by-loan-category/production-by-loan-category.component.ts","./src/app/modules/production/services/funded-borrower-characteristics.service.ts","./src/app/modules/production/production.module.ts","./src/app/modules/shared/components/search-dialog/search-dialog.component.ts","./src/app/modules/shared/components/search-dialog/search-dialog.component.html"],"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","import {\n ChangeDetectorRef,\n Component,\n HostListener,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport { NoDataActionType } from '../../../shared/interfaces/no-data';\nimport { CustomDashboardsService } from '../../../my-limegear/services/my-limegear.service';\nimport { ComponentsOutletDirectiveService } from '../../../my-limegear/services/component-outlet-directive.service';\nimport { CustomDashboardsOutletDirective } from '../../../my-limegear/my-limegear-outlet.directive';\n\n@Component({\n selector: 'app-production',\n templateUrl: './production.component.html',\n styleUrls: ['./production.component.scss'],\n})\nexport class ProductionComponent implements OnInit {\n pageTitle: string = 'Production At a Glance';\n displayOptions: DisplayOptions[];\n hFilterJSON: string;\n productionLargeChartsIdList: string[];\n productionSmallCardsIdList: string[];\n dashboard = 'production';\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.customDashboardsService.destroyCharts();\n this.customDashboardsService.detectChange(\n '',\n [],\n false,\n false,\n NoDataActionType.pageStart,\n this.dashboard\n );\n\n this.productionSmallCardsIdList = [\n 'purchases',\n 'government',\n 'lockPullThru',\n 'fundedPerLO',\n 'fundedByProc',\n 'appToFund',\n ];\n this.productionLargeChartsIdList = [\n 'funded-by-loan-type',\n 'funded-by-purpose',\n 'sold-to-investor',\n 'fall-out',\n ];\n\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-pipeline-insights',\n templateUrl: './production-insights.component.html',\n styleUrls: ['./production-insights.component.scss'],\n})\nexport class ProductionInsightsComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-production-transition',\n templateUrl: './production-transition.component.html',\n styleUrls: ['./production-transition.component.scss'],\n})\nexport class ProductionTransitionComponent implements OnInit {\n constructor() {}\n ngOnInit() {}\n}\n","\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-production-reports',\n templateUrl: './production-reports.component.html',\n styleUrls: ['./production-reports.component.scss'],\n})\nexport class ProductionReportsComponent 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-production-forecasting',\n templateUrl: './production-forecasting.component.html',\n styleUrls: ['./production-forecasting.component.scss'],\n})\nexport class ProductionForecastingComponent 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-production-upgrade',\n templateUrl: './production-upgrade.component.html',\n styleUrls: ['./production-upgrade.component.scss'],\n})\nexport class ProductionUpgradeComponent 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 = 'Analyze your production trends to make decisions now';\n this.shortOverview =\n 'Stay on top of lock pull-thru, revenue trends, jumbo and government mix.';\n this.selligPointHeader = 'See trends, product mix, credit quality, and revenue in detail.';\n this.logoPlaceholder = 'src/assets/images/upgrade_thumbnails/production_upgrade.png';\n this.moduleShortDescription =\n 'Who is closing what, when & how much? All in one place and available sliced & diced as you need it.';\n this.backgroundColor = '#F3F9ED';\n }\n}\n","\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-production-insight-option',\n templateUrl: './production-insight-option.component.html',\n styleUrls: ['./production-insight-option.component.scss'],\n})\nexport class ProductionInsightOptionComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","\n\n

\n This page is a placeholder.\n

\n","import { Router } from '@angular/router';\n\nexport interface ITurnTimesChartParams {\n cardId: string;\n ownerId: string;\n chartData: Array;\n position: string;\n navFromUrl: string;\n routerUrl: string;\n urlSegment: string;\n categories: Array;\n xAxisTitle: string;\n yAxisTitle: string;\n scrollHeight?: number;\n yPlotlineOptions?: object;\n showLegend: boolean;\n}\n\nexport class ProductionTurntimesChartOptions {\n constructor(private router: Router) {}\n\n getTurntimesStackChartsOptions(chartInfo: ITurnTimesChartParams) {\n const numOfCategories = chartInfo?.categories.length;\n let highChartsOptions: Highcharts.Options;\n let _this = this;\n let isAxisClickable = true;\n let isInialLoadCompleted = false;\n\n let isUnitChart = chartInfo.cardId.search('unitChartCard') > -1;\n highChartsOptions = {\n chart: {\n type: 'bar',\n height: '500',\n spacingLeft: 25,\n spacingRight: 0,\n spacingTop: 0,\n marginRight: 40,\n scrollablePlotArea: null,\n events: {\n render: function () {\n if (isAxisClickable) {\n var xAxis = this.xAxis[0];\n var xTicks = xAxis.ticks;\n if (!isInialLoadCompleted) {\n let tickKeys = Object.keys(xTicks);\n let points: Highcharts.Point[] = [];\n this.series.forEach((series) => {\n points = points.concat(series.points);\n });\n try {\n tickKeys.forEach((key, i) => {\n let xTick = xTicks[key];\n if (xTick && xTick.label) {\n let pointInf = points.find((point) => {\n return (\n point.name &&\n xTick.label.element.textContent &&\n point.name.toLowerCase().trim() ===\n xTick.label.element.textContent\n .toLowerCase()\n .trim()\n );\n });\n var label = xTick.label.element;\n label.style.cursor = 'pointer';\n label.onclick = function (item) {\n let queryParams = {\n empId: pointInf\n ? pointInf.properties.employeeNumber\n : '',\n staffingId: pointInf\n ? pointInf.properties.staffingKey\n : '',\n titleSuffix:\n ' per ' +\n chartInfo.position +\n ': ' +\n (pointInf ? pointInf.name : ''),\n navFromUrl: chartInfo.navFromUrl,\n };\n\n if (\n chartInfo.ownerId &&\n chartInfo.ownerId !== '' &&\n chartInfo.ownerId !== null\n ) {\n queryParams['ownerPosition'] =\n chartInfo.ownerId;\n }\n\n _this.router.navigate(\n [chartInfo.routerUrl, chartInfo.urlSegment],\n {\n queryParams: queryParams,\n }\n );\n };\n }\n });\n } catch (error) {\n throw new Error(error);\n }\n }\n }\n isInialLoadCompleted = true;\n },\n },\n },\n exporting: {\n enabled: false,\n },\n title: {\n text: null,\n },\n credits: {\n enabled: false,\n },\n xAxis: {\n categories: chartInfo.categories,\n title: {\n text: chartInfo.xAxisTitle,\n },\n labels: {\n step: 1,\n style: {\n fontSize: '12px',\n color: '#666666',\n padding: '6',\n fontWeight: 'bold',\n },\n },\n plotLines: [],\n },\n yAxis: {\n title: {\n text: chartInfo.yAxisTitle,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n\n labels: {\n enabled: true,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n lineWidth: 2,\n plotLines: [chartInfo.yPlotlineOptions],\n },\n series: chartInfo.chartData ? chartInfo.chartData.reverse() : [],\n tooltip: {\n style: {\n color: '#223540',\n fontFamily: 'Roboto',\n fontSize: '12',\n height: 12,\n },\n borderColor: '#223540',\n borderRadius: 6,\n backgroundColor: '#FFFFFF',\n useHTML: true,\n shared: true,\n followPointer: true,\n distance: 15,\n formatter: function () {\n var tooltip = '';\n let tooltipTarget = '';\n let sum = 0;\n tooltip =\n '' +\n this.points[0].point.category +\n '' +\n '' +\n this.points.reverse().reduce(function (s, point) {\n if (point.point.properties?.target) {\n tooltipTarget = point.point.properties.target;\n }\n sum += point.y;\n let toolText =\n s +\n '' +\n '' +\n '' +\n '' +\n '';\n return toolText;\n }, '');\n tooltip += isUnitChart ? '' : '';\n if (!isUnitChart && sum > 0) {\n tooltip +=\n '' +\n '' +\n '' +\n '' +\n '';\n }\n\n if (!isUnitChart && tooltipTarget) {\n tooltip +=\n '' +\n '' +\n '' +\n '' +\n '';\n }\n\n tooltip += '
' +\n '' +\n (isUnitChart ? 'Units' : point.series.name) +\n '' +\n '' +\n point.y +\n (isUnitChart ? ' units' : ' days') +\n '

Total ' +\n sum.toString() +\n ' days' +\n '
Target ' +\n tooltipTarget +\n ' days' +\n '
';\n return tooltip;\n },\n } as Highcharts.TooltipOptions,\n legend: {\n enabled: chartInfo?.showLegend,\n align: 'left',\n verticalAlign: 'top',\n layout: 'horizontal',\n y: -4,\n reversed: true,\n },\n plotOptions: {\n bar: {\n maxPointWidth: 50,\n stacking: 'normal',\n states: {\n hover: {\n brightness: -0.3,\n },\n },\n },\n series: {\n turboThreshold: numOfCategories >= 1000 ? numOfCategories : 1000,\n point: {\n events: {\n click: function () {\n let suffix = ' per ' + chartInfo.position + ': ' + this.name;\n let queryParams = {\n empId: this.properties.employeeNumber,\n staffingId: this.properties.staffingKey,\n titleSuffix: suffix,\n navFromUrl: chartInfo.navFromUrl,\n };\n\n if (\n chartInfo.ownerId &&\n chartInfo.ownerId !== '' &&\n chartInfo.ownerId !== null\n ) {\n queryParams['ownerPosition'] = chartInfo.ownerId;\n }\n\n _this.router.navigate([chartInfo.routerUrl, chartInfo.urlSegment], {\n queryParams: queryParams,\n });\n },\n },\n },\n cursor: 'pointer',\n } as Highcharts.PlotSeriesOptions,\n },\n };\n\n if (chartInfo.scrollHeight && chartInfo.scrollHeight != null) {\n highChartsOptions.chart.scrollablePlotArea = {\n minHeight: chartInfo.scrollHeight,\n opacity: 1,\n };\n }\n return highChartsOptions;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport {\n IPosition,\n IProductionTurnTimesFundedData,\n IProductionTurnTimesParameters,\n} from '../interfaces/production-turn-times/production-turn-times';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProductionTurnTimesService {\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}/productionturntimes').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n\n getFundedDays(\n parameters: IProductionTurnTimesParameters\n ): Observable {\n return this._http.post(\n this._url + '/funded/days',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedUnits(\n parameters: IProductionTurnTimesParameters\n ): Observable {\n return this._http.post(\n this._url + '/funded/units',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedDaysByPosition(\n parameters: IProductionTurnTimesParameters\n ): Observable {\n return this._http.post(this._url + '/days', parameters, {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n });\n }\n\n getOwnwrPositions(): Observable {\n return this._http.post(this._url + '/GetOwnerPositions', {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\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 {\n IPosition,\n IProductionTurnTimesFundedData,\n IProductionTurnTimesParameters,\n} from 'app/modules/production/interfaces/production-turn-times/production-turn-times';\nimport { ProductionTurnTimesService } from 'app/modules/production/services/production-turn-times.service';\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 { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\nimport { IChartTitleData, ILargeCardInteriorOptions } from '../../../shared/interfaces/card-data';\nimport {\n ITurnTimesChartParams,\n ProductionTurntimesChartOptions,\n} from '../../interfaces/production-turn-times/production-turn-times.highcharts';\nimport * as positionColors from 'app/modules/shared/json/colors/position-colors.json';\nimport * as milestoneColors from 'app/modules/shared/json/colors/milestone-colors.json';\nimport * as Highcharts from 'highcharts';\n\ninterface ICardData {\n ownerId?: number;\n mainPropertyName: string;\n chartType: string;\n averageDataPropertyName: string;\n urlSegment: string;\n cardInfo: ILargeCardInteriorOptions;\n}\n\n@Component({\n selector: 'production-turn-times',\n templateUrl: './production-turn-times.component.html',\n styleUrls: ['./production-turn-times.component.scss'],\n})\nexport class ProductionTurnTimesComponent implements OnInit {\n action: NoDataActionType;\n turntimesCards: ICardData[];\n positionColorsArray: Array = positionColors.default;\n milestoneColorsArray: Array = milestoneColors.default;\n selectSummaryHideList: DisplayOptions[] = [];\n parameters: IProductionTurnTimesParameters;\n pageHeadline: IPageHeadline;\n ownerPositions: IPosition[];\n displayOptions: DisplayOptions[];\n selectedPosition: IPosition[];\n\n constructor(\n private reusableFunctions: ReusableFunctions,\n private turnTimesService: ProductionTurnTimesService,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.action = NoDataActionType.pageStart;\n this.turntimesCards = [];\n this.ownerPositions = [];\n this.selectedPosition = [this.reusableFunctions.getPosition(0).selectedPosition];\n let position = this.selectedPosition[0].position;\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this.router.url);\n this.parameters = {\n fromDatePeriod: '',\n channel: '',\n loanType: '',\n purpose: '',\n hFilterJSON: this.reusableFunctions.getHierarchyFilters(),\n staffingKey: this.selectedPosition[0].positionIdentifier,\n };\n\n this.pageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: `${position} Turn Times`,\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n this.setDisplayOptionsSelected();\n this.getOwnerPositions();\n }\n\n setDisplayOptionsSelected() {\n let fromDate = this.displayOptions.find((item) => item.optionKey === 'dateRange_y_q_m');\n if (fromDate) {\n this.parameters.fromDatePeriod = fromDate.selectedOptions;\n this.selectSummaryHideList.push(fromDate);\n }\n let channel = this.displayOptions.find((item) => item.optionKey === 'channel');\n if (channel) {\n this.parameters.channel = channel.selectedOptions;\n }\n let loanType = this.displayOptions.find((item) => item.optionKey === 'loanCategory');\n if (loanType) {\n this.parameters.loanType = loanType.selectedOptions;\n }\n let purpose = this.displayOptions.find((item) => item.optionKey === 'loanPurpose');\n if (purpose) {\n this.parameters.purpose = purpose.selectedOptions;\n }\n }\n\n loadData() {\n this.resetCards();\n this.loadTotalDaysData();\n this.loadFundedData();\n this.loadDaysByPositionData();\n }\n\n getOwnerPositions() {\n this.turnTimesService.getOwnwrPositions().subscribe(\n (res) => {\n this.ownerPositions = res;\n this.addInitialCards();\n this.loadData();\n },\n (error) => {\n this.action = NoDataActionType.error;\n throw new Error(error);\n }\n );\n }\n\n addInitialCards() {\n this.turntimesCards = [\n {\n cardInfo: {\n action: this.action,\n componentTitle: 'Funded per ' + this.selectedPosition[0].position,\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: 'turntimes_unitChartCard',\n useLGScroll: true,\n minHeight: 500,\n chart: null,\n },\n averageDataPropertyName: 'overallAvgUnits',\n mainPropertyName: 'units',\n urlSegment: 'insights_productionTurnTimesFunded',\n chartType: 'units',\n },\n {\n cardInfo: {\n action: this.action,\n componentTitle: 'Total Days Application to Funded ',\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: 'turntimes_daysChartCard',\n useLGScroll: true,\n minHeight: 500,\n chart: null,\n },\n averageDataPropertyName: 'avgDays',\n mainPropertyName: 'days',\n urlSegment: 'insights_productionTurnTimesByMilestone',\n chartType: 'positions',\n },\n ];\n\n this.ownerPositions.forEach((position) => {\n this.turntimesCards.push({\n ownerId: position.staffingKey,\n cardInfo: {\n action: this.action,\n componentTitle: 'Days with ' + position.position,\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: 'turntimes_' + position.position.toLowerCase().replace(/\\s/g, ''),\n useLGScroll: true,\n minHeight: 500,\n chart: null,\n },\n averageDataPropertyName: 'avgDays',\n mainPropertyName: 'days',\n urlSegment: 'insights_productionTurnTimesByMilestone_position',\n chartType: 'milestones',\n });\n });\n }\n\n resetCards() {\n this.turntimesCards.forEach((card) => {\n card.cardInfo.isDataReady = false;\n card.cardInfo.hasData = false;\n card.cardInfo.chart = null;\n card.cardInfo = Object.assign({}, card.cardInfo);\n });\n }\n\n loadDaysByPositionData() {\n let parameters = Object.assign({}, this.parameters);\n this.ownerPositions.forEach((position) => {\n parameters.ownerStaffingKey = position.staffingKey.toString();\n let cardId = 'turntimes_' + position.position.toLowerCase().replace(/\\s/g, '');\n let turntimesCard = this.turntimesCards.find(\n (item) => item?.cardInfo?.uniqueId === cardId\n );\n this.turnTimesService.getFundedDaysByPosition(parameters).subscribe(\n (data) => {\n if (data.length > 0) {\n this.setStackChart(turntimesCard, data);\n } else {\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n }\n },\n (error) => {\n this.action = NoDataActionType.error;\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n throw new Error(error);\n }\n );\n });\n }\n\n loadTotalDaysData() {\n let parameters = Object.assign({}, this.parameters);\n let turntimesCard = this.turntimesCards.find(\n (item) => item?.cardInfo?.uniqueId === 'turntimes_daysChartCard'\n );\n this.turnTimesService.getFundedDays(parameters).subscribe(\n (data) => {\n if (data.length > 0) {\n this.setStackChart(turntimesCard, data);\n } else {\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n }\n },\n (error) => {\n this.action = NoDataActionType.error;\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n throw new Error(error);\n }\n );\n }\n\n loadFundedData() {\n let turntimesCard = this.turntimesCards.find(\n (item) => item?.cardInfo?.uniqueId === 'turntimes_unitChartCard'\n );\n turntimesCard.cardInfo.componentTitle = 'Funded per ' + this.selectedPosition[0].position;\n let parameters = Object.assign({}, this.parameters);\n this.turnTimesService.getFundedUnits(parameters).subscribe(\n (data) => {\n if (data.length > 0) {\n this.setStackChart(turntimesCard, data);\n } else {\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n }\n },\n (error) => {\n this.action = NoDataActionType.error;\n turntimesCard.cardInfo = this.setNoData(turntimesCard.cardInfo);\n throw new Error(error);\n }\n );\n }\n\n getDayDataAndCategories(\n dataDays: IProductionTurnTimesFundedData[],\n turntimesCard: ICardData,\n seriesProperty = 'milestone',\n categoryProperty = 'employeeNumber',\n dataItemNamePropery = 'employeeName'\n ) {\n let dataProperty = turntimesCard.mainPropertyName;\n let seriesNames = this.reusableFunctions.getUniqueItemList(dataDays, seriesProperty);\n let categoryList = this.reusableFunctions.getUniqueItemList(dataDays, dataItemNamePropery);\n let seriesCollectionDataSet: Highcharts.SeriesOptionsType[] = [];\n const uniqueEntityNames = Array.from(new Set(dataDays.map((data) => data.employeeName)));\n if (seriesNames && seriesNames.length > 0) {\n seriesNames.forEach((seriesName) => {\n let seriesDataSet = [];\n let dataBySeries = dataDays.filter((item) => item[seriesProperty] === seriesName);\n\n uniqueEntityNames.forEach((name) => {\n const correspondingData = dataBySeries.find((x) => x.employeeName === name);\n const leftoverData = dataDays.find((x) => x.employeeName === name);\n\n if (correspondingData) {\n seriesDataSet.push({\n y: correspondingData[dataProperty],\n name: correspondingData[dataItemNamePropery],\n properties: {\n target: correspondingData.target,\n staffingKey: this.selectedPosition[0].positionIdentifier,\n employeeNumber: correspondingData[categoryProperty],\n },\n });\n } else {\n seriesDataSet.push({\n y: 0,\n name,\n properties: {\n target: leftoverData.target,\n staffingKey: this.selectedPosition[0].positionIdentifier,\n employeeNumber: leftoverData['employeeNumber'],\n },\n });\n }\n });\n\n let color = '#7CB5EC';\n if (turntimesCard.chartType === 'milestones') {\n color = this.milestoneColorsArray.find(\n (colorInf) =>\n colorInf?.milestone?.toLowerCase() === seriesName.toLowerCase()\n )?.color;\n } else if (turntimesCard.chartType === 'positions') {\n color = this.positionColorsArray.find(\n (posInf) => posInf?.position?.toLowerCase() === seriesName.toLowerCase()\n )?.color;\n }\n\n seriesCollectionDataSet.push({\n type: 'bar',\n name: seriesName === null && dataProperty === 'units' ? 'Units' : seriesName,\n data: seriesDataSet,\n color: color,\n });\n });\n }\n return [seriesCollectionDataSet, categoryList];\n }\n\n setStackChart(turntimesCard: ICardData, data: IProductionTurnTimesFundedData[]) {\n let turntimesChart = turntimesCard.cardInfo;\n let dataProcessed = this.getDayDataAndCategories(data, turntimesCard);\n let dataLength = dataProcessed[1]?.length;\n let scrollHeightMultiplier = 15;\n let minimumScrollData = 40;\n let scrollHeight = null;\n let positionId = this.selectedPosition[0].positionIdentifier;\n let posisionName = this.selectedPosition[0].position;\n\n if (dataLength > minimumScrollData) {\n scrollHeight = dataLength * scrollHeightMultiplier;\n }\n let chartComparisonValue: string = '';\n let average =\n data[0] && data[0][turntimesCard.averageDataPropertyName]\n ? data[0][turntimesCard.averageDataPropertyName]\n : null;\n let target = data[0]?.target;\n let sufix = turntimesCard.mainPropertyName === 'units' ? 'Units' : 'Days';\n if (average && average !== null) {\n chartComparisonValue += `Average: ${average} ${sufix}\\n`;\n }\n if (target) {\n chartComparisonValue += `Target: ${target} ${sufix}`;\n }\n\n let chartTitleData: IChartTitleData = {\n showChartCustomTitle: true,\n chartTile: turntimesCard.cardInfo.componentTitle,\n chartLabelColor: '#dededed',\n chartComparisonValue: chartComparisonValue,\n chartMainValue: '',\n chartSecondaryValue: '',\n isMainValueUnitVisible: false,\n chartSubItemValue: null,\n isChartSubValueVisible: false,\n svgIconString: '',\n showMainValue: false,\n comparisonStyle: {\n 'white-space': 'pre-line',\n 'line-height': '1',\n },\n };\n\n let chartParams: ITurnTimesChartParams = {\n cardId: turntimesChart.uniqueId,\n ownerId: turntimesCard.ownerId ? turntimesCard.ownerId.toString() : null,\n chartData: dataProcessed[0],\n position: posisionName,\n navFromUrl: 'production/insights/production-turn-times',\n routerUrl: '/reporting/production',\n urlSegment: turntimesCard.urlSegment,\n categories: dataProcessed[1],\n xAxisTitle: '',\n yAxisTitle:\n turntimesCard.mainPropertyName === 'units' ? '# Units Funded' : '# Business Days',\n scrollHeight: scrollHeight,\n yPlotlineOptions: this.averageLineConfig(average, `${average} Days Average`),\n showLegend: true,\n };\n\n let chartClass = new ProductionTurntimesChartOptions(this.router);\n let chartOptions = chartClass.getTurntimesStackChartsOptions(chartParams);\n\n turntimesChart.chart = new Highcharts.Chart(turntimesChart.uniqueId, chartOptions);\n let queryParams = {\n staffingId: positionId,\n navFromUrl: chartParams.navFromUrl,\n titleSuffix: ' ' + posisionName,\n };\n\n if (turntimesCard.ownerId && turntimesCard.ownerId !== null) {\n queryParams['ownerPosition'] = turntimesCard.ownerId;\n }\n\n turntimesChart.accessToUrl =\n chartParams.routerUrl + '/' + turntimesCard.urlSegment + '_all';\n turntimesChart.queryParams = queryParams;\n turntimesChart.chartTitleData = chartTitleData;\n turntimesChart.isDataReady = true;\n turntimesChart.hasData = true;\n turntimesCard.cardInfo = Object.assign({}, turntimesChart);\n }\n\n averageLineConfig(value: any, text: string): any {\n return {\n color: '#000000',\n width: 1,\n value: value,\n zIndex: 5,\n label: text,\n };\n }\n\n applySelectedPosition(position: IPosition) {\n this.action = NoDataActionType.filter;\n this.selectedPosition = [position];\n this.parameters.staffingKey = this.selectedPosition[0].positionIdentifier;\n this.pageHeadline.pageTitle = `${position.position} Turn Times`;\n this.loadData();\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.action = NoDataActionType.filter;\n this.setDisplayOptionsSelected();\n this.loadData();\n }\n\n applyNewFilters(event: string) {\n this.parameters.hFilterJSON = event;\n this.action = NoDataActionType.filter;\n this.loadData();\n }\n\n setNoData(cardInfo: ILargeCardInteriorOptions) {\n cardInfo.hasData = false;\n cardInfo.isDataReady = true;\n cardInfo.action = this.action;\n return Object.assign({}, cardInfo);\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 { orderBy, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport {\n IChartParameters,\n SparklineChartOptions,\n} from 'app/modules/shared/classes/sparkline-chart-options';\nimport {\n IPaginatedDataInfo,\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\nimport * as Highcharts from 'highcharts';\nimport { IRankings } from '../../../performance/interfaces/performance-rankings';\nimport { LimeGearCharts } from '../../../shared/classes/chart-data';\nimport { IPageHeadline } from '../../../shared/classes/page-title-parameters';\nimport { ReusableFunctions } from '../../../shared/classes/reusable-functions';\nimport { DisplayOptions } from '../../../shared/interfaces/display-options';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from '../../../shared/interfaces/no-data';\nimport { ProductionFundedDistModel } from '../../interfaces/production-funded-dist';\nimport { ProductionService } from '../../services/production.service';\n\n@Component({\n selector: 'app-production-funded-dist',\n templateUrl: './production-funded-dist.component.html',\n styleUrls: ['./production-funded-dist.component.scss'],\n})\nexport class ProductionFundedDistComponent implements OnInit {\n hFilterJSON = '';\n displayOptions: DisplayOptions[];\n noDataType: NoDataTypes;\n data: any[];\n loading = true;\n search: string = '';\n\n options = {\n channel: null,\n loanType: null,\n loanPurpose: null,\n fromDatePeriod: null,\n };\n\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Funded Loan Product Distribution',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n\n /* Kendo Grid */\n gridView: GridDataResult;\n skip = 0;\n pageSize = 10;\n sort: SortDescriptor[] = [{ field: 'rank', dir: 'asc' }];\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: [10, 20, 50],\n };\n rankEntrySort: SortDescriptor[] = [{ field: 'rank' }, { field: 'lfName' }];\n rankingData: IRankings[] = [];\n\n /* Sparklines */\n limeGearCharts: LimeGearCharts.LimeGearChart;\n //xTitle: string = 'Week';\n records: any[];\n tableDataProperties: ITableDataProperties;\n action: NoDataActionType;\n tableColumnProperties: ITableColumnProperties;\n fullDataset: ProductionFundedDistModel[];\n paginatedData: ProductionFundedDistModel[];\n spco: SparklineChartOptions;\n currentPeriodData: ProductionFundedDistModel[];\n isDateTypeDay: boolean = false;\n\n constructor(\n private _router: Router,\n private reusableFunctions: ReusableFunctions,\n private productionService: ProductionService,\n private decimalPipe: DecimalPipe\n ) {}\n\n ngOnInit(): void {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.table,\n };\n\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(\n '/production/insights/funded-product-distribution'\n );\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this.reusableFunctions,\n this.decimalPipe\n );\n\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Funded Loan Product Distribution',\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 this.spco = new SparklineChartOptions(this.reusableFunctions);\n\n this.initiateTableProperties();\n\n this.loadData();\n }\n\n initiateTableProperties() {\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Funded Loan Category Product Distribution',\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: 'rank',\n fieldName: 'Rank',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'number',\n width: 125,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'loanType',\n fieldName: 'Type',\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: 'product',\n fieldName: 'Product',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 250,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'percentVolumeForBarGraph',\n fieldName: 'Total Volume',\n isHyperlink: false,\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'graph',\n width: 200,\n filterable: false,\n filter: 'text',\n decimalPlaces: 0,\n graphDataType: 'currency',\n graphValue: 'sumVolume',\n },\n {\n fieldId: 'percentOfTotalVolume',\n fieldName: '% Total',\n isHyperlink: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'percent',\n width: 125,\n filterable: false,\n filter: 'numeric',\n decimalPlaces: 0,\n },\n {\n fieldId: 'percentUnitsForBarGraph',\n fieldName: 'Total Units',\n isHyperlink: false,\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'graph',\n width: 200,\n filterable: false,\n filter: 'text',\n decimalPlaces: 0,\n graphDataType: 'units',\n graphValue: 'sumUnits',\n },\n {\n fieldId: 'percentOfTotalUnits',\n fieldName: '% Total',\n isHyperlink: false,\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'percent',\n width: 125,\n filterable: false,\n filter: 'numeric',\n decimalPlaces: 0,\n },\n {\n fieldId: 'volValuesSparkline',\n fieldName: 'Volume Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 300,\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: null,\n },\n },\n },\n {\n fieldId: 'unitsValuesSparkline',\n fieldName: 'Units Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 300,\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: 'number',\n precision: null,\n },\n },\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n setAndGetParams() {\n this.options.channel = this.displayOptions.find(\n (item) => item.optionKey === 'channel'\n ).selectedOptions;\n this.options.loanType = this.displayOptions.find(\n (item) => item.optionKey === 'loanCategory'\n ).selectedOptions;\n this.options.loanPurpose = this.displayOptions.find(\n (item) => item.optionKey === 'loanPurpose'\n ).selectedOptions;\n this.options.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRange_y_q_m'\n ).selectedOptions;\n\n let hFilterJSON = this.hFilterJSON;\n return {\n channel: this.options.channel,\n loanType: this.options.loanType,\n loanPurpose: this.options.loanPurpose,\n fromDatePeriod: this.options.fromDatePeriod,\n hFilterJSON: hFilterJSON,\n };\n }\n\n loadData() {\n let params = this.setAndGetParams();\n this.loading = true;\n\n this.productionService\n .displayFundedProduct(\n params.fromDatePeriod,\n params.channel,\n params.loanType,\n params.loanPurpose,\n params.hFilterJSON\n )\n .subscribe(\n (res) => {\n if (res) {\n this.isDateTypeDay = res[0].dateType === 'Day';\n res.forEach((x) => {\n if (this.isDateTypeDay) {\n x.dateTypeValue = x.periodDateStartLabel.split(' ')[0];\n }\n x.yearMonthCalendar = x.dateTypeValue;\n });\n this.fullDataset = res;\n this.currentPeriodData = res.filter((x) => x.isCurrentPeriod === true);\n this.currentPeriodData = this.currentPeriodData.sort(\n (a, b) => a.rank - b.rank\n );\n const highestVolume = this.currentPeriodData.reduce((a, b) =>\n a.sumVolume > b.sumVolume ? a : b\n ).sumVolume;\n const highestUnits = this.currentPeriodData.reduce((a, b) =>\n a.sumUnits > b.sumUnits ? a : b\n ).sumUnits;\n for (let data of this.currentPeriodData) {\n data.percentVolumeForBarGraph = (data.sumVolume / highestVolume) * 100;\n data.percentUnitsForBarGraph = (data.sumUnits / highestUnits) * 100;\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 this.loading = false;\n } else {\n }\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 updateGrid() {\n let data = JSON.parse(JSON.stringify(this.data));\n\n if (this.search && this.search.length > 0) {\n let search = this.search;\n search = search.toLowerCase();\n\n data = data.filter(\n (x) =>\n x.loanType.toLowerCase().includes(search) ||\n x.product.toLowerCase().includes(search)\n );\n }\n\n let sortedData = orderBy(data, this.rankEntrySort).slice(\n this.skip,\n this.skip + this.pageSize\n );\n\n this.gridView = {\n data: sortedData,\n total: data.length,\n };\n\n setTimeout(() => {\n this.drawCharts(this.gridView.data);\n }, 0);\n }\n\n navigateToDrilldown(item) {\n if (item && item.selectedRows && item.selectedRows.length != 0) {\n let selectedRow = item.selectedRows[0]?.dataItem;\n\n if (selectedRow && selectedRow.product) {\n this._router.navigate(['/reporting/production/funded-product-distribution'], {\n queryParams: {\n product: selectedRow.product,\n titleSuffix: ': ' + selectedRow.product,\n navFromUrl: 'production/insights/funded-product-distribution',\n },\n });\n }\n }\n }\n\n // Create charts objects with KPI Sparkline data\n drawCharts(data: any[]): void {\n for (let i = 0; i < data.length; i++) {\n data[i].volValues = data[i].volValues.filter((x) => x != null);\n data[i].unitValues = data[i].unitValues.filter((x) => x != null);\n new Highcharts.Chart(\n `volumeTrend${data[i].rank}`,\n this.limeGearCharts.createKPINewSparkline(\n data[i].volValues,\n data[i].increment,\n 'volume',\n 'area',\n 'currency',\n data[i].periodDates\n )\n );\n\n new Highcharts.Chart(\n `unitsTrend${data[i].rank}`,\n this.limeGearCharts.createKPINewSparkline(\n data[i].unitValues,\n data[i].increment,\n 'units',\n 'area',\n 'number',\n data[i].periodDates\n )\n );\n }\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.noDataType.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.loadData();\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.noDataType.action = NoDataActionType.filter;\n this.loadData();\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.skip = 0;\n this.updateGrid();\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.updateGrid();\n }\n\n searchRows(event) {\n if (event && event.length > 0) {\n this.search = event;\n } else {\n this.search = null;\n }\n\n this.updateGrid();\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: 'product',\n calculateChange: true,\n columnList: this.tableColumnProperties.columnProperties,\n chartIdColumn: 'rank',\n chartType: 'area',\n color: 'rgb(124, 181, 236)',\n isDateTypeDay: this.isDateTypeDay,\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 = ['volume'];\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","\n\n
\n \n
\n \n \n
\n
\n
\n \n \n \n \n
\n\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 {ChangeDetectorRef, Component, HostListener, OnInit, QueryList, ViewChildren} from '@angular/core';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\nimport {\n NoDataActionType,\n} from 'app/modules/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\";\n\n@Component({\n selector: 'app-production-funded-loan-characteristics',\n templateUrl: './production-funded-loan-characteristics.component.html',\n styleUrls: ['./production-funded-loan-characteristics.component.scss'],\n})\nexport class ProductionFundedLoanCharacteristicsComponent implements OnInit {\n displayOptions: DisplayOptions[];\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Funded Loan Characteristics',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n hFilterJSON = '';\n donutChartIdList: Array;\n barChartIdList: Array;\n dashboard = 'funded-loan-characteristics';\n\n constructor(\n private cd: ChangeDetectorRef,\n private customDashboardsService: CustomDashboardsService,\n private componentsOutletDirectiveService: ComponentsOutletDirectiveService,\n ) {}\n\n\n @ViewChildren(CustomDashboardsOutletDirective)\n dashboardOutlet: QueryList;\n ngOnInit() {\n this.donutChartIdList = [\n 'prod-loan-character-loan-type',\n 'prod-loan-character-loan-purpose',\n 'prod-loan-character-refi-type',\n 'prod-loan-character-property-type',\n 'prod-loan-character-occupan-type',\n 'prod-loan-character-amort-type',\n ];\n\n this.barChartIdList = [\n 'prod-loan-character-loan-amount',\n 'prod-loan-character-channel',\n 'prod-loan-character-loan-to-value',\n 'prod-loan-character-interest-rate',\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.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","\n\n\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n
\n
\n
\n
\n \n
\n
","import {ChangeDetectorRef, Component, HostListener, OnInit, QueryList, ViewChildren} from '@angular/core';\nimport {IPageHeadline} from 'app/modules/shared/classes/page-title-parameters';\nimport {DisplayOptions} from 'app/modules/shared/interfaces/display-options';\nimport {NoDataActionType} from 'app/modules/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\";\n\n@Component({\n selector: 'app-production-funded-borrower-characteristics',\n templateUrl: './production-funded-borrower-characteristics.component.html',\n styleUrls: ['./production-funded-borrower-characteristics.component.scss'],\n})\nexport class ProductionFundedBorrowerCharacteristicsComponent implements OnInit {\n displayOptions: DisplayOptions[];\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Funded Borrower Characteristics',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n hFilterJSON: string;\n donutChartIdList: Array;\n barChartIdList: Array;\n dashboard = 'funded-borrower-characteristics';\n\n constructor(\n private cd: ChangeDetectorRef,\n private customDashboardsService: CustomDashboardsService,\n private componentsOutletDirectiveService: ComponentsOutletDirectiveService,\n ) {}\n @ViewChildren(CustomDashboardsOutletDirective)\n dashboardOutlet: QueryList;\n\n ngOnInit() {\n this.donutChartIdList = [\n 'prod-loan-character-property-type',\n 'prod-loan-character-occupan-type',\n 'prod-borrower-characteristics-doc-type',\n 'prod-borrower-characteristics-self-employed',\n ];\n\n this.barChartIdList = [\n 'prod-borrower-characteristics-fico',\n 'prod-borrower-characteristics-months-reserves',\n 'prod-borrower-characteristics-housing-to-income',\n 'prod-borrower-characteristics-debt-to-income',\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.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 { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IMilestoneUtilizationDataModel, IMilestoneUtilizationParams } from '../interfaces/production-milestone-utilization';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MilestoneUtilizationService {\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}/MilestoneUtilization/').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n \n getProductionMilestoneUtlization(\n parameters: IMilestoneUtilizationParams\n ): Observable {\n return this._http.post(\n this._url + 'GetProductionMilestoneUtlization',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n}\n","import { Router } from '@angular/router';\nimport { ReusableFunctions } from '../classes/reusable-functions';\n\nexport class LGBarChartOptions {\n constructor(\n private route: string,\n private routeParams: object,\n private router: Router,\n private reusableFunctions: ReusableFunctions\n ) {}\n public getChartOptions(): Highcharts.Options {\n const _this = this;\n\n return {\n chart: {\n type: 'bar',\n height: '400',\n spacingLeft: 50,\n spacingRight: 15,\n spacingTop: 18,\n marginRight: 100,\n scrollablePlotArea: {},\n events: {\n render: function () {\n var xAxis = this.xAxis[0];\n var xTicks = xAxis.ticks;\n let isInialLoadCompleted = false;\n if (!isInialLoadCompleted) {\n let tickKeys = Object.keys(xTicks);\n let points: Highcharts.Point[] = [];\n this.series.forEach((series) => {\n points = points.concat(series.points);\n });\n\n try {\n tickKeys.forEach((key, i) => {\n let xTick = xTicks[key];\n if (xTick && xTick.label) {\n let pointInf = points.find((point) => {\n return (\n point.name &&\n xTick.label.element.textContent &&\n point.name.toLowerCase().trim() ===\n xTick.label.element.textContent\n .toLowerCase()\n .trim() &&\n point.properties?.labelPoint\n );\n });\n\n var label = xTick.label.element;\n label.style.cursor = 'pointer';\n label.onclick = function (item) {\n let queryParams = {};\n Object.keys(_this.routeParams).forEach((param) => {\n queryParams[param] =\n pointInf && pointInf.properties\n ? pointInf.properties[param]\n : '';\n });\n queryParams['loanType'] = 'All'; // TODO: Remove this later or make it more dynamic\n _this.router.navigate([_this.route], {\n queryParams: queryParams,\n });\n };\n }\n isInialLoadCompleted = true;\n });\n } catch (error) {\n throw new Error(error);\n }\n }\n },\n },\n },\n xAxis: {\n categories: null,\n title: {\n text: null,\n },\n labels: {\n step: 1,\n style: {\n fontSize: '12px',\n color: '#666666',\n padding: '6',\n fontWeight: 'bold',\n format: null,\n },\n },\n plotLines: [],\n },\n title: {\n text: '',\n },\n yAxis: {\n title: {\n text: null,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n\n labels: {\n enabled: true,\n style: {\n fontSize: '10px',\n color: '#666666',\n },\n },\n lineWidth: 2,\n plotLines: [],\n },\n legend: {\n enabled: true,\n align: 'left',\n verticalAlign: 'top',\n reversed: true,\n },\n plotOptions: {\n series: {\n point: {\n events: {},\n },\n },\n bar: {\n maxPointWidth: 50,\n stacking: 'normal',\n states: {\n hover: {\n brightness: -0.3,\n },\n },\n },\n },\n tooltip: {\n style: {\n color: '#223540',\n fontFamily: 'Roboto',\n fontSize: '12',\n height: 12,\n },\n borderColor: '#223540',\n borderRadius: 6,\n backgroundColor: '#FFFFFF',\n useHTML: true,\n shared: true,\n followPointer: true,\n distance: 15,\n formatter: null,\n } as Highcharts.TooltipOptions,\n credits: {\n enabled: false,\n },\n series: [\n {\n type: 'bar',\n data: null,\n point: {},\n },\n ],\n exporting: {\n enabled: false, // Hide export menu\n },\n };\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { NoDataActionType } from '../../interfaces/no-data';\nimport { IChartTitleData, ILargeCardInteriorOptions } from '../../interfaces/card-data';\nimport { LGBarChartOptions } from '../../interfaces/bar-chart';\nimport { Router } from '@angular/router';\nimport { ReusableFunctions } from '../../classes/reusable-functions';\n\nimport * as Highcharts from 'highcharts';\n\n@Component({\n selector: 'bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n})\nexport class BarChartComponent implements OnInit {\n @Input() action: NoDataActionType;\n @Input() title: string;\n @Input() loading: boolean;\n @Input() data: any;\n @Input() uniqueId: string;\n\n // TODO: Add these to an options object (Similar to how the common kendo table does it)\n @Input() route: string = null;\n @Input() queryParams: object = null;\n @Input() accessToUrl: string = null;\n @Input() series: Highcharts.SeriesOptionsType[] = null;\n @Input() isStacked: boolean = false;\n @Input() xTitle: string = null;\n @Input() yTitle: string = null;\n @Input() xLabelFormat: string = null;\n @Input() yLabelFormat: string = null;\n @Input() chartHeight: number = null;\n @Input() height: number = 100;\n @Input() width: number = 100;\n @Input() legendEnabled: boolean = true;\n @Input() pointClickFunction: Highcharts.PointClickCallbackFunction = null;\n @Input() flipYAxis: boolean = false;\n @Input() maxYValue: any = null;\n @Input() useTooltipFormatter: boolean = true;\n @Input() useLabelClick: boolean = true;\n\n largeCardOptions: ILargeCardInteriorOptions;\n categories: string[] = [];\n @Input() formatter: any;\n\n constructor(private _router: Router, private reusableFunctions: ReusableFunctions) {}\n\n ngOnInit() {\n this.initializeLargeCard();\n }\n\n ngOnChanges() {\n this.initializeLargeCard();\n }\n\n initializeLargeCard() {\n this.largeCardOptions = {\n action: this.action,\n componentTitle: this.title,\n searchTerm: '',\n hasData: (this.series != null || this.data?.length > 0) && !this.loading,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: this.uniqueId,\n minHeight: 480,\n };\n\n if (this.data?.length > 0 || this.series != null) {\n setTimeout(() => {\n this.setChart();\n }, 0);\n } else {\n setTimeout(() => {\n this.setChartNoData();\n }, 0);\n }\n }\n\n setChart() {\n let chartOptions: Highcharts.Options;\n chartOptions = this.getChartOptions();\n\n let chartTitleData: IChartTitleData = {\n showChartCustomTitle: true,\n chartTile: this.title,\n chartLabelColor: '#dededed',\n chartComparisonValue: null,\n chartMainValue: '',\n chartSecondaryValue: '',\n isMainValueUnitVisible: false,\n chartSubItemValue: null,\n isChartSubValueVisible: false,\n svgIconString: '',\n showMainValue: false,\n comparisonStyle: null,\n };\n\n if (this.accessToUrl != null) {\n this.largeCardOptions.accessToUrl = this.accessToUrl;\n }\n if (this.queryParams != null) {\n this.largeCardOptions.queryParams = this.queryParams;\n }\n\n if (!this.loading) {\n this.largeCardOptions.isDataReady = true;\n }\n\n this.largeCardOptions.chart = new Highcharts.Chart(this.uniqueId, chartOptions);\n this.largeCardOptions.chartTitleData = chartTitleData;\n this.largeCardOptions = Object.assign({}, this.largeCardOptions);\n }\n\n setChartNoData() {\n let chartTitleData: IChartTitleData = {\n showChartCustomTitle: true,\n chartTile: this.title,\n chartLabelColor: '#dededed',\n chartComparisonValue: null,\n chartMainValue: '',\n chartSecondaryValue: '',\n isMainValueUnitVisible: false,\n chartSubItemValue: null,\n isChartSubValueVisible: false,\n svgIconString: '',\n showMainValue: false,\n comparisonStyle: null\n };\n\n this.largeCardOptions.chartTitleData = chartTitleData;\n this.largeCardOptions = Object.assign({}, this.largeCardOptions);\n if (!this.loading) {\n this.largeCardOptions.isDataReady = true;\n }\n }\n\n getChartOptions(): Highcharts.Options {\n let lgBarChart: LGBarChartOptions = new LGBarChartOptions(\n this.route,\n this.queryParams,\n this._router,\n this.reusableFunctions\n );\n let options: Highcharts.Options = { ...lgBarChart.getChartOptions() };\n if (options.series[0].type === 'bar') {\n options.plotOptions.series.point.events.click = this.pointClickFunction;\n options.series = this.series;\n \n (options.xAxis as Highcharts.XAxisOptions).title.text = this.xTitle;\n (options.xAxis as Highcharts.XAxisOptions).labels.format = this.xLabelFormat;\n (options.xAxis as Highcharts.XAxisOptions).type = 'category';\n \n (options.yAxis as Highcharts.YAxisOptions).title.text = this.yTitle;\n (options.yAxis as Highcharts.YAxisOptions).labels.format = this.yLabelFormat;\n (options.yAxis as Highcharts.YAxisOptions).opposite = this.flipYAxis;\n (options.yAxis as Highcharts.YAxisOptions).max = this.maxYValue;\n \n if(this.chartHeight) {\n options.chart.height = this.chartHeight;\n }\n\n if(!this.useLabelClick) {\n options.chart.events.render = null;\n }\n\n options.legend.enabled = this.legendEnabled;\n options.tooltip.formatter = this.formatter();\n }\n return options;\n }\n}\n","
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport {\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\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 IMilestoneUtilizationDataModel,\n IMilestoneUtilizationParams,\n} from '../../interfaces/production-milestone-utilization';\nimport { MilestoneUtilizationService } from '../../services/milestone-utilization.service';\nimport * as positionColors from 'app/modules/shared/json/colors/position-colors.json';\n\n@Component({\n selector: 'app-production-milestone-utilization',\n templateUrl: './production-milestone-utilization.component.html',\n styleUrls: ['./production-milestone-utilization.component.scss'],\n})\nexport class ProductionMilestoneUtilizationComponent implements OnInit {\n selectSummaryHideList: DisplayOptions[] = [];\n displayOptions: DisplayOptions[];\n noDataType: NoDataTypes;\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Milestone Utilization',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n\n milestoneSeries: Highcharts.SeriesOptionsType[];\n milestoneData: IMilestoneUtilizationDataModel[] = [];\n tableDataProperties: ITableDataProperties;\n tableColumnProperties: ITableColumnProperties;\n milestoneSearchTerm: string;\n action: NoDataActionType;\n loading: boolean = false;\n positionColorsArray: any = positionColors.default;\n routerURL: string = 'production/insights/milestone-utilization';\n targetURL: string = '/reporting/production/milestone-utilization';\n queryParams: object = {\n navFromUrl: this.routerURL,\n };\n\n fromDatePeriod: string;\n channel: string = 'All';\n loanType: string = 'All';\n loanPurpose: string = 'All';\n displayAs: string;\n hFilterJSON = '';\n\n constructor(\n private milestoneUtilizationService: MilestoneUtilizationService,\n private reusableFunctions: ReusableFunctions,\n private router: Router\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.action = NoDataActionType.pageStart;\n\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: this.milestoneSearchTerm,\n componentTitle: 'Milestone Utilization',\n initialPageSize: 100,\n initialSkip: 0,\n maxHeight: 900,\n recordSelection: [],\n kendoGridSelectById: '',\n hasData: false,\n isDataLoaded: false,\n pageable: false,\n useLGScroll: true,\n };\n\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this.router.url);\n this.setDisplayOptions(this.displayOptions);\n\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n this.setColumnProperties();\n this.getData();\n }\n\n getData() {\n this.loading = true;\n let params: IMilestoneUtilizationParams = {\n fromDatePeriod: this.fromDatePeriod,\n channel: this.channel,\n loanType: this.loanType,\n purpose: this.loanPurpose,\n hFilterJSON: this.hFilterJSON,\n };\n this.milestoneUtilizationService.getProductionMilestoneUtlization(params).subscribe(\n (data) => {\n this.loading = false;\n this.milestoneData = data;\n this.tableDataProperties.gridData = this.milestoneData;\n this.tableDataProperties.hasData = this.milestoneData.length > 0;\n this.tableDataProperties.isDataLoaded = true;\n this.milestoneSeries = this.formatStackData(this.milestoneData);\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n },\n (error) => {\n this.loading = false;\n this.tableDataProperties.gridData = [];\n this.tableDataProperties.action = NoDataActionType.error;\n this.tableDataProperties.hasData = false;\n this.tableDataProperties.isDataLoaded = true;\n this.tableDataProperties = Object.assign({}, this.tableDataProperties);\n throw new Error(error);\n }\n );\n }\n\n setDisplayOptionsSelected() {\n let fromDate = this.displayOptions.find((item) => item.optionKey === 'dateRange_y_q_m');\n if (fromDate) {\n this.fromDatePeriod = fromDate.selectedOptions;\n this.selectSummaryHideList.push(fromDate);\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'channel')) {\n this.channel = this.displayOptions.find(\n (item) => item.optionKey === 'channel'\n ).selectedOptions;\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'loanCategory')) {\n this.loanType = this.displayOptions.find(\n (item) => item.optionKey === 'loanCategory'\n ).selectedOptions;\n }\n\n if (this.displayOptions.find((item) => item.optionKey === 'loanPurpose')) {\n this.loanPurpose = this.displayOptions.find(\n (item) => item.optionKey === 'loanPurpose'\n ).selectedOptions;\n }\n }\n\n setDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setNoDataType(NoDataActionType.filter);\n this.setDisplayOptionsSelected();\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setNoDataType(NoDataActionType.filter);\n this.setDisplayOptionsSelected();\n this.getData();\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.setNoDataType(NoDataActionType.filter);\n this.getData();\n }\n\n setNoDataType(action: NoDataActionType) {\n this.noDataType.action = action;\n }\n\n formatStackData(data: IMilestoneUtilizationDataModel[]): any[] {\n let barData = [];\n data.forEach((milestone) => {\n let position = this.positionColorsArray.find(\n (position) => position.position == milestone.milestoneOwner\n );\n barData.push({\n name: milestone.milestoneName,\n color: position.color,\n y: milestone.pctUtilization,\n properties: {\n navFromUrl: 'production/insights/milestone-utilization',\n titleSuffix: `Milestone Utilization: ${milestone.milestoneName}`,\n minTurnTime: milestone.minTurnTime,\n maxTurnTime: milestone.maxTurnTime,\n avgTurnTime: milestone.avgTurnTime,\n router: this.router,\n milestoneOwner: milestone.milestoneOwner,\n },\n });\n });\n\n let series = [\n {\n data: barData,\n },\n ];\n\n return series;\n }\n\n setFormatter() {\n return function () {\n var tooltip = '';\n let sum = 0;\n tooltip =\n '' +\n this.points[0].point.name +\n '' +\n '' +\n this.points.reduce(function (s, point) {\n sum += point.y;\n let toolText =\n s +\n `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n return toolText;\n }, '');\n\n tooltip += '
% Utilization${point.point.y}
Min Days${point.point.properties.minTurnTime}
Max Days${point.point.properties.maxTurnTime}
Avg Days${point.point.properties.avgTurnTime}
';\n return tooltip;\n };\n }\n\n drilldownFunction(): void {\n let _this = this;\n let properties = _this['properties'];\n properties.router.navigate(['/reporting/production/milestone-utilization'], {\n queryParams: {\n navFromUrl: properties.navFromUrl,\n milestoneName: _this['name'],\n titleSuffix: properties.titleSuffix,\n },\n });\n }\n\n setColumnProperties() {\n let columnProperties: ITableColumns[] = [\n {\n fieldId: 'milestoneName',\n fieldName: 'Milestone',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'string',\n width: 180,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'pctUtilization',\n fieldName: '% Utilization',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'percent',\n decimalPlaces: 2,\n width: 160,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'volume',\n fieldName: 'Volume',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'currency',\n decimalPlaces: 0,\n width: 150,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'units',\n fieldName: 'Units',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 0,\n width: 110,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'minTurnTime',\n fieldName: 'Min Days',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 3,\n width: 130,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'maxTurnTime',\n fieldName: 'Max Days',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 3,\n width: 140,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'avgTurnTime',\n fieldName: 'Avg Days',\n isHyperlink: false,\n isHierarchyEntity: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'right',\n dataAlignment: 'right',\n dataType: 'number',\n decimalPlaces: 3,\n width: 130,\n filterable: false,\n filter: 'numeric',\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n navigateToDrilldown(item) {\n let _this = this;\n if (item && item.selectedRows && item.selectedRows.length != 0) {\n let selectedRow = item.selectedRows[0]?.dataItem;\n\n if (selectedRow && selectedRow.milestoneName) {\n _this['_router'].navigate(['/reporting/production/milestone-utilization'], {\n queryParams: {\n milestoneName: selectedRow.milestoneName,\n navFromUrl: 'production/insights/milestone-utilization',\n titleSuffix: `Milestone Utilization: ${selectedRow.milestoneName}`,\n },\n });\n }\n }\n }\n}\n","\n\n\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n","\n\n
\n \n
\n
\n \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 {ChangeDetectorRef, Component, HostListener, OnInit, QueryList, ViewChildren} from '@angular/core';\nimport {IPageHeadline} from 'app/modules/shared/classes/page-title-parameters';\nimport {DisplayOptions} from 'app/modules/shared/interfaces/display-options';\nimport {NoDataActionType} from 'app/modules/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\";\n\n@Component({\n selector: 'app-production-eclose-adoption',\n templateUrl: './production-eclose-adoption.component.html',\n styleUrls: ['./production-eclose-adoption.component.scss'],\n})\nexport class ProductionEcloseAdoptionComponent implements OnInit {\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'eClose Adoption Trends',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n\n displayOptions: DisplayOptions[];\n hFilterJSON: string;\n dashboard = 'eclose-adoption-trends';\n smallCardsList: Array;\n closingMethodChartCard: string;\n donutChartsCard: string;\n\n constructor(\n private cd: ChangeDetectorRef,\n private customDashboardsService: CustomDashboardsService,\n private componentsOutletDirectiveService: ComponentsOutletDirectiveService,\n ) {}\n @ViewChildren(CustomDashboardsOutletDirective)\n dashboardOutlet: QueryList;\n\n ngOnInit(): void {\n this.smallCardsList = [\n 'eCloseFundings',\n 'eCloseVolume',\n ];\n \n this.closingMethodChartCard = 'eClosingMethodTrends';\n this.donutChartsCard = 'eClosingMix';\n this.customDashboardsService.destroyCharts();\n this.customDashboardsService.detectChange(\n '',\n [],\n false,\n false,\n NoDataActionType.pageStart,\n this.dashboard\n );\n this.updateComponent();\n }\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 {ChangeDetectorRef, Component, HostListener, OnInit, QueryList, ViewChildren} from '@angular/core';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { NoDataActionType } from 'app/modules/shared/interfaces/no-data';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\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\";\n\n@Component({\n selector: 'production-eclose-roi-trends',\n templateUrl: './production-eclose-roi-trends.component.html',\n styleUrls: ['./production-eclose-roi-trends.component.scss'],\n})\nexport class ProductionEcloseRoiTrendsComponent implements OnInit {\n pageHeadline: IPageHeadline;\n hFilterJSON: string;\n displayOptions: DisplayOptions[];\n dashboard = 'eclose-roi-trends';\n barChartIdList: Array; \n \n constructor(\n private cd: ChangeDetectorRef,\n private customDashboardsService: CustomDashboardsService,\n private componentsOutletDirectiveService: ComponentsOutletDirectiveService,\n ) {}\n @ViewChildren(CustomDashboardsOutletDirective)\n dashboardOutlet: QueryList;\n \n ngOnInit() {\n this.pageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'eClose ROI Trends',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n this.barChartIdList = [\n 'insights_estimatedECloseSaving',\n 'insights_estimatedSavingByECloseMethod',\n 'insights_averageCostSavingPerLoan',\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.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","\n\n
\n \n
\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 { DecimalPipe } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { GridDataResult, PageChangeEvent } from '@progress/kendo-angular-grid';\nimport { orderBy, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { IRankings } from 'app/modules/performance/interfaces/performance-rankings';\nimport { ITableColumns } from 'app/modules/reports/interfaces/reporting-data';\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 {\n IChartParameters,\n SparklineChartOptions,\n} from 'app/modules/shared/classes/sparkline-chart-options';\nimport {\n IPaginatedDataInfo,\n ITableColumnProperties,\n ITableDataProperties,\n} from 'app/modules/shared/components/common-kendo-table/common-kendo-table.component';\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 * as Highcharts from 'highcharts';\nimport {\n LoanCategoryProductionFundedDistModel,\n ProductionFundedDistModel,\n} from '../../interfaces/production-funded-dist';\nimport { ProductionService } from '../../services/production.service';\n\n@Component({\n selector: 'app-production-loan-category-dist',\n templateUrl: './production-loan-category-dist.component.html',\n styleUrls: ['./production-loan-category-dist.component.scss'],\n})\nexport class ProductionLoanCategoryDistComponent implements OnInit {\n hFilterJSON = '';\n displayOptions: DisplayOptions[];\n noDataType: NoDataTypes;\n data: ProductionFundedDistModel[];\n loading = true;\n totalVol: number;\n totalUnits: number;\n search: string = '';\n\n options = {\n channel: null,\n loanType: null,\n loanPurpose: null,\n fromDatePeriod: null,\n };\n\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Funded Loan Category Distribution',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n\n /* Kendo Grid */\n gridView: GridDataResult;\n skip = 0;\n pageSize = 10;\n sort: SortDescriptor[] = [{ field: 'rank', dir: 'asc' }];\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: [10, 20, 50],\n };\n rankEntrySort: SortDescriptor[] = [{ field: 'rank' }, { field: 'lfName' }];\n rankingData: IRankings[] = [];\n\n /* Sparklines */\n limeGearCharts: LimeGearCharts.LimeGearChart;\n records: any[];\n tableDataProperties: ITableDataProperties;\n action: NoDataActionType;\n tableColumnProperties: ITableColumnProperties;\n fullDataset: LoanCategoryProductionFundedDistModel[];\n paginatedData: LoanCategoryProductionFundedDistModel[];\n spco: SparklineChartOptions;\n currentPeriodData: LoanCategoryProductionFundedDistModel[];\n isDateTypeDay: boolean = false;\n\n constructor(\n private _router: Router,\n private reusableFunctions: ReusableFunctions,\n private productionService: ProductionService,\n private decimalPipe: DecimalPipe\n ) {}\n\n ngOnInit(): void {\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: this.pageHeadline.pageTitle,\n inputSource: NoDataSourceType.table,\n };\n\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(\n '/production/insights/production-loan-category-distribution'\n );\n this.hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n\n this.limeGearCharts = new LimeGearCharts.LimeGearChart(\n this._router,\n this.reusableFunctions,\n this.decimalPipe\n );\n\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Funded Loan Category Distribution',\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 this.spco = new SparklineChartOptions(this.reusableFunctions);\n\n this.initiateTableProperties();\n\n this.loadData();\n }\n\n initiateTableProperties() {\n this.tableDataProperties = {\n action: this.action,\n gridData: [],\n searchTerm: '',\n componentTitle: 'Funded Loan Category Distribution',\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 let columnProperties: ITableColumns[] = [\n {\n fieldId: 'rank',\n fieldName: 'Rank',\n isHyperlink: false,\n fieldOrder: 0,\n isSortable: true,\n defaultSorting: 'asc',\n headerAlignment: 'centre',\n dataAlignment: 'centre',\n dataType: 'number',\n width: 125,\n filterable: false,\n filter: 'numeric',\n },\n {\n fieldId: 'loanCategory',\n fieldName: 'Loan Category',\n isHyperlink: false,\n fieldOrder: 1,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'string',\n width: 200,\n filterable: false,\n filter: 'text',\n },\n {\n fieldId: 'percentVolumeForBarGraph',\n fieldName: 'Total Volume',\n isHyperlink: false,\n fieldOrder: 2,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'graph',\n width: 230,\n filterable: false,\n filter: 'text',\n decimalPlaces: 0,\n graphDataType: 'currency',\n graphValue: 'sumVolume',\n aggregationId: 'sumVolume',\n aggregationType: 'sum',\n aggregationValueType: 'money',\n },\n {\n fieldId: 'percentOfTotalVolume',\n fieldName: '% Total',\n isHyperlink: false,\n fieldOrder: 3,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'percent',\n width: 125,\n filterable: false,\n filter: 'numeric',\n decimalPlaces: 0,\n },\n {\n fieldId: 'percentUnitsForBarGraph',\n fieldName: 'Total Units',\n isHyperlink: false,\n fieldOrder: 4,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'graph',\n width: 230,\n filterable: false,\n filter: 'text',\n decimalPlaces: 0,\n graphDataType: 'units',\n graphValue: 'sumUnits',\n aggregationId: 'sumUnits',\n aggregationType: 'sum',\n },\n {\n fieldId: 'percentOfTotalUnits',\n fieldName: '% Total',\n isHyperlink: false,\n fieldOrder: 5,\n isSortable: true,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'percent',\n width: 125,\n filterable: false,\n filter: 'numeric',\n decimalPlaces: 0,\n },\n {\n fieldId: 'volValuesSparkline',\n fieldName: 'Volume Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 300,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'loanCategory',\n chartDataField: 'volume',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Volume',\n datatype: 'currency',\n precision: null,\n },\n },\n },\n {\n fieldId: 'unitsValuesSparkline',\n fieldName: 'Units Trend',\n fieldOrder: 6,\n isSortable: false,\n headerAlignment: 'left',\n dataAlignment: 'left',\n dataType: 'chart',\n width: 300,\n filterable: false,\n hideIf: 'excel',\n chartProperties: {\n chart: null,\n dataType: 'number',\n chartToFieldId: 'loanCategory',\n chartDataField: 'units',\n inComponentChartBuilding: false,\n tooltipProperties: {\n labelField: 'Units',\n datatype: 'number',\n precision: null,\n },\n },\n },\n ];\n\n this.tableColumnProperties = {\n columnProperties: columnProperties,\n };\n }\n\n setAndGetParams() {\n this.options.channel = this.displayOptions.find(\n (item) => item.optionKey === 'channel'\n ).selectedOptions;\n this.options.loanType = this.displayOptions.find(\n (item) => item.optionKey === 'loanCategory'\n ).selectedOptions;\n this.options.loanPurpose = this.displayOptions.find(\n (item) => item.optionKey === 'loanPurpose'\n ).selectedOptions;\n this.options.fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRange_y_q_m'\n ).selectedOptions;\n\n return {\n channel: this.options.channel,\n loanType: this.options.loanType,\n loanPurpose: this.options.loanPurpose,\n fromDatePeriod: this.options.fromDatePeriod,\n hFilterJSON: this.hFilterJSON,\n };\n }\n\n loadData() {\n let params = this.setAndGetParams();\n this.loading = true;\n\n const parameters = {\n fromDatePeriod: params.fromDatePeriod,\n comparePeriod: 'Previous Period',\n channel: params.channel,\n loanType: params.loanType,\n loanPurpose: params.loanPurpose,\n hFilterJSON: params.hFilterJSON,\n };\n\n this.productionService.displayLoanCategoryFunedProduct(parameters).subscribe(\n (res) => {\n if (res) {\n this.isDateTypeDay = res[0].dateType === 'Day';\n res.forEach((x) => {\n if (this.isDateTypeDay) {\n x.dateTypeValue = x.periodDateStartLabel.split(' ')[0];\n }\n x.yearMonthCalendar = x.dateTypeValue;\n });\n\n this.fullDataset = res;\n this.currentPeriodData = res.filter((x) => x.isCurrentPeriod === true);\n const highestVolume = this.currentPeriodData.reduce((a, b) =>\n a.sumVolume > b.sumVolume ? a : b\n ).sumVolume;\n const highestUnits = this.currentPeriodData.reduce((a, b) =>\n a.sumUnits > b.sumUnits ? a : b\n ).sumUnits;\n this.currentPeriodData.forEach((x) => {\n x.percentVolumeForBarGraph = (x.sumVolume / highestVolume) * 100;\n x.percentUnitsForBarGraph = (x.sumUnits / highestUnits) * 100;\n });\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 this.loading = false;\n } else {\n }\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 updateGrid() {\n let data = JSON.parse(JSON.stringify(this.data));\n\n if (this.search && this.search.length > 0) {\n let search = this.search;\n search = search.toLowerCase();\n\n data = data.filter(\n (x) =>\n x.loanType.toLowerCase().includes(search) ||\n x.product.toLowerCase().includes(search)\n );\n }\n\n this.totalUnits = this.reusableFunctions.calculateSumByProperty(data, 'curUnits');\n this.totalVol = this.reusableFunctions.calculateSumByProperty(data, 'curVol');\n\n let sortedData = orderBy(data, this.rankEntrySort).slice(\n this.skip,\n this.skip + this.pageSize\n );\n\n this.gridView = {\n data: sortedData,\n total: data.length,\n };\n\n setTimeout(() => {\n this.drawCharts(this.gridView.data);\n }, 0);\n }\n\n navigateToDrilldown(item) {\n if (item && item.selectedRows && item.selectedRows.length != 0) {\n let selectedRow = item.selectedRows[0]?.dataItem;\n if (selectedRow) {\n this._router.navigate(\n ['/reporting/production/production-loan-category-distribution'],\n {\n queryParams: {\n category: selectedRow.loanCategory,\n periodNumber: 0,\n comparePeriod: null,\n titleSuffix: ': ' + selectedRow.loanCategory,\n navFromUrl: 'production/insights/production-loan-category-distribution',\n },\n }\n );\n }\n }\n }\n\n drawCharts(data: ProductionFundedDistModel[]): void {\n for (let i = 0; i < data.length; i++) {\n data[i].volValues = data[i].volValues.filter((x) => x != null);\n data[i].unitValues = data[i].unitValues.filter((x) => x != null);\n new Highcharts.Chart(\n `volumeTrend${data[i].rank}`,\n this.limeGearCharts.createKPINewSparkline(\n data[i].volValues,\n data[i].increment,\n 'volume',\n 'area',\n 'currency',\n data[i].periodDates\n )\n );\n\n new Highcharts.Chart(\n `unitsTrend${data[i].rank}`,\n this.limeGearCharts.createKPINewSparkline(\n data[i].unitValues,\n data[i].increment,\n 'units',\n 'area',\n 'number',\n data[i].periodDates\n )\n );\n }\n }\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.noDataType.action = NoDataActionType.filter;\n this.displayOptions = event;\n this.loadData();\n }\n\n applyNewFilters(event: string) {\n this.hFilterJSON = event;\n this.noDataType.action = NoDataActionType.filter;\n this.loadData();\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.skip = 0;\n this.updateGrid();\n }\n\n public onStateChange(state: State) {\n this.gridState = state;\n this.updateGrid();\n }\n\n searchRows(event) {\n if (event && event.length > 0) {\n this.search = event;\n } else {\n this.search = null;\n }\n\n this.updateGrid();\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: 'loanCategory',\n calculateChange: true,\n columnList: this.tableColumnProperties.columnProperties,\n chartIdColumn: 'loanCategory',\n chartType: 'area',\n color: 'rgb(124, 181, 236)',\n isDateTypeDay: this.isDateTypeDay,\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 = ['volume'];\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","\n\n
\n \n
\n \n \n
\n
\n
\n \n \n \n \n
\n\n\n","\n\n\n
\n
\n \n
\n \n \n
\n
\n
\n
\n
\n \n
\n \n

Production Mix

\n
\n
\n
\n
\n
{{ legend.name }}
\n
\n
\n
\n
\n
\n
{{ legend.name }}
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ProductionComponent } from './components/production-at-a-glance/production.component';\nimport { ProductionInsightsComponent } from './components/production-insights/production-insights.component';\nimport { ProductionTransitionComponent } from './components/production-transition/production-transition.component';\nimport { ProductionReportsComponent } from './components/production-reports/production-reports.component';\nimport { ProductionForecastingComponent } from './components/production-forecasting/production-forecasting.component';\nimport { ProductionUpgradeComponent } from './components/production-upgrade/production-upgrade.component';\nimport { ProductionInsightOptionComponent } from './components/production-insight-option/production-insight-option.component';\nimport { AuthGuardService } from '../shared/services/auth-guard.service';\nimport { ProductionTurnTimesComponent } from './components/production-turn-times/production-turn-times.component';\nimport { ProductionFundedDistComponent } from './components/production-funded-dist/production-funded-dist.component';\nimport { ProductionFundedLoanCharacteristicsComponent } from './components/production-funded-loan-characteristics/production-funded-loan-characteristics.component';\nimport { ProductionFundedBorrowerCharacteristicsComponent } from './components/production-funded-borrower-characteristics/production-funded-borrower-characteristics.component';\nimport { ProductionMilestoneUtilizationComponent } from './components/production-milestone-utilization/production-milestone-utilization.component';\nimport { ProductionEcloseAdoptionComponent } from './components/production-eclose-adoption/production-eclose-adoption.component';\nimport { ProductionEcloseRoiTrendsComponent } from 'app/modules/production/components/production-eclose-roi-trends/production-eclose-roi-trends.component';\nimport { ProductionLoanCategoryDistComponent } from './components/production-loan-category-dist/production-loan-category-dist.component';\nimport { ProductionByLoanCategoryComponent } from './components/production-by-loan-category/production-by-loan-category.component';\n\nconst productionRoutes: Routes = [\n { path: '', component: ProductionTransitionComponent },\n {\n path: 'at-a-glance',\n component: ProductionComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights',\n component: ProductionInsightsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'reports',\n component: ProductionReportsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'forecasting',\n component: ProductionForecastingComponent,\n canActivate: [AuthGuardService],\n },\n { path: 'upgrade', component: ProductionUpgradeComponent },\n {\n path: 'insights/option',\n component: ProductionInsightOptionComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/production-turn-times',\n component: ProductionTurnTimesComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/funded-product-distribution',\n component: ProductionFundedDistComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/funded-loan-characteristics',\n component: ProductionFundedLoanCharacteristicsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/funded-borrower-characteristics',\n component: ProductionFundedBorrowerCharacteristicsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/milestone-utilization',\n component: ProductionMilestoneUtilizationComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/eclose-adoption-trends',\n component: ProductionEcloseAdoptionComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/eclose-roi-trends',\n component: ProductionEcloseRoiTrendsComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/production-loan-category-distribution',\n component: ProductionLoanCategoryDistComponent,\n canActivate: [AuthGuardService],\n },\n {\n path: 'insights/production-by-loan-category',\n component: ProductionByLoanCategoryComponent,\n canActivate: [AuthGuardService],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(productionRoutes)],\n exports: [RouterModule],\n})\nexport class ProductionRoutingModule {}\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ICardInfo,\n IDisplayFilters,\n} from 'app/modules/my-limegear/components/standalone-components/interfaces/stanalone-components.data';\nimport { LargeCardService } from 'app/modules/my-limegear/components/standalone-components/services/large-card.service';\nimport { IPageHeadline } from 'app/modules/shared/classes/page-title-parameters';\nimport { ProductionCharts } from 'app/modules/shared/classes/production-chart-options';\nimport { ICamparisonInfo, ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { DisplayOptions } from 'app/modules/shared/interfaces/display-options';\nimport { NoDataActionType, NoDataSourceType } from 'app/modules/shared/interfaces/no-data';\nimport { NavigationHelpService } from 'app/modules/shared/services/navigation-help.service';\nimport { UserAccessService } from 'app/modules/shared/services/user-access.service';\nimport { FundedLoanTypeGroupDistributionModel } from '../../interfaces/production-funded-dist';\nimport { ProductionService } from '../../services/production.service';\n\n@Component({\n selector: 'app-production-by-loan-category',\n templateUrl: './production-by-loan-category.component.html',\n styleUrls: ['./production-by-loan-category.component.scss'],\n})\nexport class ProductionByLoanCategoryComponent implements OnInit {\n pageHeadline: IPageHeadline = {\n module: 'production',\n moduleIcon: 'fa-rocket',\n pageTitle: 'Production By Loan Category',\n linkArray: [\n {\n moduleLink: 'production',\n linkTitle: 'Production Home',\n showLink: true,\n isHome: true,\n },\n {\n moduleLink: 'production/insights',\n linkTitle: 'Production Insights',\n showLink: true,\n },\n ],\n };\n chartData: any;\n action: NoDataActionType;\n limeGearCharts: ProductionCharts.ProductionCharts;\n cardDrilldownUrl: string = '/reporting/production';\n colorOptions: string[] = [];\n productionLargeChart: ICardInfo;\n filters: IDisplayFilters;\n mainCharts: any = [];\n convData: FundedLoanTypeGroupDistributionModel[];\n govData: FundedLoanTypeGroupDistributionModel[];\n otherData: FundedLoanTypeGroupDistributionModel[];\n portfolioData: FundedLoanTypeGroupDistributionModel[];\n reverseData: FundedLoanTypeGroupDistributionModel[];\n donutData: any;\n loanTypeGroupData: any;\n loanTypeData: any;\n noDataType: any;\n loanTypeGroupLegend: any;\n loanTypeCategoryLegend: any;\n isDataReady: boolean;\n hasData: boolean;\n loanTypeGroupColors: any;\n loanTypeColors: any;\n displayOptions: DisplayOptions[];\n params: any;\n dateTypeIsDay: boolean;\n allLoanTypes: string[];\n barChartColors: object;\n constructor(\n private productionService: ProductionService,\n private largecardService: LargeCardService,\n private reusableFunctions: ReusableFunctions,\n private navigationHelpService: NavigationHelpService,\n private userAccessService: UserAccessService,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n this.displayOptions = this.reusableFunctions.getCurrentDisplayOptions(this.router.url);\n this.setDisplayOptionsSelected();\n this.filters = {};\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: 'Prduction Mix',\n inputSource: NoDataSourceType.largeDataCard,\n };\n this.loadData();\n this.initializeCharts();\n }\n\n loadData() {\n this.productionService.displayLoanTypeGroupDistribution(this.params).subscribe((data) => {\n this.dateTypeIsDay = data[0].dateType === 'Day';\n data.forEach((x) => {\n if (this.dateTypeIsDay) {\n x.datePeriodDescription = x.dateTypeValue;\n } else {\n const date = x.dateTypeValue;\n const yr = date.split('-')[0];\n const month = date.split('-')[1];\n const shortName = this.reusableFunctions.getMonthShortName(Number(month) - 1);\n x.datePeriodDescription = `${shortName}-${yr}`;\n }\n });\n this.allLoanTypes = this.reusableFunctions.getUniqueItemList(data, 'loanType');\n this.loanTypeColors = this.allLoanTypes.map((type) => ({\n name: type,\n color: this.reusableFunctions.getRandomHexColor(),\n }));\n this.barChartColors = {};\n for (let i = 0; i < this.loanTypeColors.length; i++) {\n this.barChartColors[this.loanTypeColors[i].name] = this.loanTypeColors[i].color;\n }\n\n this.convData = data.filter((x) => x.loanTypeCategory === 'Conv');\n this.govData = data.filter((x) => x.loanTypeCategory === 'Govt');\n this.portfolioData = data.filter((x) => x.loanTypeCategory === 'Non-Conf');\n this.otherData = data.filter((x) => x.loanTypeCategory === 'Other');\n this.reverseData = data.filter((x) => x.loanTypeCategory === 'Reverse');\n\n const allChartsData = [\n this.convData,\n this.govData,\n this.portfolioData,\n this.otherData,\n this.reverseData,\n ];\n this.mainCharts = this.mainCharts.filter((chart, i) => {\n return (\n allChartsData[i].length > 0 &&\n allChartsData[i].some((x) => x.periodGroup === 'This Period')\n );\n });\n\n this.chartData = data;\n\n this.mainCharts.forEach((mainChart, i) => {\n this.populateProductionLargeCardLoanType(\n allChartsData[mainChart.index],\n mainChart,\n null\n );\n });\n this.prepareDonutData(data);\n });\n }\n\n initializeCharts() {\n this.mainCharts = [\n {\n name: 'Conventional Funded By Category',\n urlSegment: 'production-by-loan-category',\n unitName: 'volume',\n index: 0,\n loanCategoryName: 'Conv',\n },\n {\n name: 'Government Funded By Category',\n urlSegment: 'govt-production-by-loan-category',\n unitName: 'volume',\n index: 1,\n loanCategoryName: 'Govt',\n },\n {\n name: 'Non-Conforming Funded By Category',\n urlSegment: 'non-conf-production-by-loan-category',\n unitName: 'volume',\n index: 2,\n loanCategoryName: 'Non-Conf',\n },\n {\n name: 'Other Funded By Category',\n urlSegment: 'other-production-by-loan-category',\n unitName: 'volume',\n index: 3,\n loanCategoryName: 'Other',\n },\n {\n name: 'Reverse Funded By Category',\n urlSegment: 'reverse-production-by-loan-category',\n unitName: 'volume',\n index: 4,\n loanCategoryName: 'Reverse',\n },\n ];\n\n this.limeGearCharts = new ProductionCharts.ProductionCharts(\n this.reusableFunctions,\n this.userAccessService,\n this.navigationHelpService\n );\n this.getEmptyLargeCardData();\n }\n\n getEmptyLargeCardData() {\n this.mainCharts.forEach((mainChart) => {\n let largeCardInteriorOptions = {\n action: NoDataActionType.pageStart,\n componentTitle: mainChart.name,\n searchTerm: '',\n hasData: false,\n isDataReady: false,\n showTitle: true,\n accessToUrl: '',\n uniqueId: mainChart.urlSegment,\n showCardControllers: true,\n };\n\n mainChart.largeCardInteriorOptions = Object.assign({}, largeCardInteriorOptions);\n });\n }\n\n applyNewFilters(event) {}\n\n applyDisplayOptions(event: DisplayOptions[]) {\n this.displayOptions = event;\n this.setDisplayOptionsSelected();\n this.loadData();\n }\n\n populateProductionLargeCardLoanType(dataSet, cardInfo: ICardInfo, action: NoDataActionType) {\n let data = dataSet.map((obj) => ({ ...obj }));\n let thisPeriodData = [];\n let comparePeriodData = [];\n let chartOptions: Highcharts.Options;\n let comparison: ICamparisonInfo;\n let sumUnitsThisPeriod: number;\n let sumVolumeThisPeriod: number;\n let uniquePeriods = this.reusableFunctions.getUniqueItemList(data, 'periodNumber');\n uniquePeriods = uniquePeriods.sort((a, b) => a - b);\n\n if (data.length > 0) {\n thisPeriodData = data.filter((item) => item.periodGroup === 'This Period');\n comparePeriodData = data.filter((item) => item.periodGroup === 'Compare Period');\n let xLabelsCategoryInfo = this.reusableFunctions.getCategories(\n thisPeriodData,\n ['year', 'period'],\n this.params.fromDatePeriod\n );\n\n let xLabelOffset = this.dateTypeIsDay ? true : false;\n\n let chartData = this.productionService.setChartData(\n thisPeriodData,\n comparePeriodData,\n cardInfo.unitName,\n 'units',\n 'loanType',\n 'Funded',\n this.barChartColors,\n this.params.fromDatePeriod,\n xLabelOffset,\n 'periodNumber'\n );\n sumVolumeThisPeriod = this.reusableFunctions.calculateSumByProperty(\n thisPeriodData,\n 'amount'\n );\n sumUnitsThisPeriod = this.reusableFunctions.calculateSumByProperty(\n thisPeriodData,\n 'nbr'\n );\n const sumUnitsLastPeriod = this.reusableFunctions.calculateSumByProperty(\n comparePeriodData,\n 'nbr'\n );\n comparison = this.reusableFunctions.calculateComparisonPercentage(\n sumUnitsThisPeriod,\n sumUnitsLastPeriod\n );\n\n const queryParams = {\n fromDatePeriod: this.params.fromDatePeriod,\n comparePeriod: this.params.comparePeriod,\n channel: this.params.channel,\n purpose: this.params.loanPurpose,\n loanCategory: this.params.loanType,\n loanTypeGroup: 'All',\n loanTypeCategory: cardInfo.loanCategoryName,\n periodGroup: 'This Period',\n hFilterJSON: this.params.hFilterJSON,\n };\n\n const priorQueryParams = { ...queryParams, periodGroup: 'Compare Period' };\n\n let processedChartSeries = this.largecardService.setAllChartSeriesOptions(\n cardInfo,\n chartData.lineData,\n chartData.stackColumnsData,\n this.params.comparePeriod,\n this.cardDrilldownUrl,\n 'Prior Period',\n this.params.loanPurpose,\n this.params.loanType,\n this.limeGearCharts,\n priorQueryParams,\n 'production-by-loan-category'\n );\n\n chartOptions = this.limeGearCharts.createNewStackedChart(\n cardInfo.name,\n this.reusableFunctions.getChartXLabel(this.params.fromDatePeriod),\n 'Volume ($)',\n processedChartSeries,\n true,\n 'left',\n this.cardDrilldownUrl,\n 'production-by-loan-category',\n this.params.comparePeriod,\n 'Prior Period',\n xLabelsCategoryInfo[0],\n this.params.loanPurpose,\n this.params.loanType,\n false,\n 330,\n 0,\n false,\n queryParams,\n 'alternateY'\n );\n }\n cardInfo.largeCardInteriorOptions = this.largecardService.updateChartData(\n cardInfo,\n chartOptions,\n data.length > 0,\n true,\n action,\n comparison,\n sumUnitsThisPeriod,\n sumVolumeThisPeriod,\n true,\n false,\n this.filters.loanPurpose,\n this.filters.loanType,\n this.filters.compareInfo_selectedOptions\n );\n }\n\n prepareDonutData(data: any[]) {\n const thisPeriodData = data.filter((x) => x.periodGroup === 'This Period');\n const types = ['loanTypeCategory', 'loanType'];\n types.forEach((x) => {\n const aggregateDataByClosingMethod = thisPeriodData.reduce((acc, curr) => {\n if (!acc[curr[x]]) {\n acc[curr[x]] = {\n category: curr[x],\n amount: curr.volume,\n loanTypeCat: curr.loanTypeCategory,\n loanTypeGroup: curr.loanTypeGroup,\n };\n } else {\n acc[curr[x]].amount += +curr.volume;\n }\n return acc;\n }, {});\n\n this.donutData = Object.values(aggregateDataByClosingMethod);\n let totalVolume = this.donutData.reduce((a, { amount }) => a + amount, 0);\n this.prepareClosingMixCenterText(totalVolume, x);\n this.prepareClosingMixLegend();\n\n if (x === 'loanTypeCategory') {\n this.loanTypeGroupData = this.setDonutChartData(\n this.donutData,\n 'Production Mix',\n 'amount',\n totalVolume,\n 'loanTypeCategory'\n );\n } else {\n this.loanTypeData = this.setDonutChartData(\n this.donutData,\n 'Production Mix',\n 'amount',\n totalVolume,\n 'loanType'\n );\n }\n\n this.isDataReady = true;\n this.hasData = true;\n });\n }\n\n setDonutChartData(\n data: any[],\n filterType: string,\n dataType: string,\n totalVolume: number,\n category: string\n ): any[] {\n let categoryColors = {\n Conv: '#B871FF',\n Govt: '#57D786',\n Other: '#9FA277',\n Reverse: '#4EB6B6',\n 'Non-Conf': '#2978A8',\n };\n\n const queryParams = {\n fromDatePeriod: this.params.fromDatePeriod,\n comparePeriod: this.params.comparePeriod,\n channel: this.params.channel,\n purpose: this.params.loanPurpose,\n loanCategory: this.params.loanType,\n loanTypeGroup: 'All',\n periodGroup: 'This Period',\n hFilterJSON: this.params.hFilterJSON,\n };\n\n return data.map((i) => {\n return {\n name: i.category,\n color:\n category === 'loanTypeCategory'\n ? categoryColors[i.category]\n : this.loanTypeColors.find(({ name }) => name === i.category).color,\n y: i[dataType],\n properties: {\n units: i.nbr,\n volume: i.amount,\n milestone: 'all',\n loanTypeCat: i.loanTypeCat ?? 'all',\n loanTypeGroup: i.loanTypeGroup ?? 'all',\n filterType: filterType,\n filterValue: i.category,\n router: this.navigationHelpService,\n navFromUrl: '',\n percentage: 100 * (i.amount / totalVolume),\n alternatePercentage: 100 * (i.amount / totalVolume),\n queryParams,\n },\n };\n });\n }\n\n prepareClosingMixCenterText(totalVolume: number, type: string) {\n let textClickParams = {\n routerUrl: '/reporting/production/production-by-loan-category',\n queryParams: {\n titleSuffix: `Production Mix`,\n navFromUrl: '/production/insights/production-by-loan-category',\n },\n };\n if (type === 'loanTypeCategory') {\n this.loanTypeGroupLegend = {\n title: this.reusableFunctions.getLargeCurrencyFormat(totalVolume).toString(),\n description: 'Funded',\n type: 'By Type',\n textClickParams: textClickParams,\n };\n } else {\n this.loanTypeCategoryLegend = {\n title: this.reusableFunctions.getLargeCurrencyFormat(totalVolume).toString(),\n description: 'Funded',\n type: 'By Category',\n textClickParams: textClickParams,\n };\n }\n }\n\n prepareClosingMixLegend() {\n const loanTypeGroupColorsObject = {\n Conv: '#B871FF',\n Govt: '#57D786',\n Other: '#9FA277',\n Reverse: '#4EB6B6',\n 'Non-Conf': '#2978A8',\n };\n\n this.loanTypeGroupColors = Object.entries(loanTypeGroupColorsObject).map((e) => ({\n name: e[0],\n color: e[1],\n }));\n }\n\n setDisplayOptionsSelected() {\n let hFilterJSON = this.reusableFunctions.getHierarchyFilters();\n const compareTo = this.displayOptions.find((item) => item.optionKey === 'compareTo');\n const channel = this.displayOptions.find((item) => item.optionKey === 'channel');\n const loanCategory = this.displayOptions.find((item) => item.optionKey === 'loanCategory');\n const loanPurpose = this.displayOptions.find((item) => item.optionKey === 'loanPurpose');\n const fromDatePeriod = this.displayOptions.find(\n (item) => item.optionKey === 'dateRange_y_q_m'\n );\n\n this.params = {\n fromDatePeriod: fromDatePeriod?.selectedOptions ?? '',\n comparePeriod: compareTo?.selectedOptions ?? '',\n channel: channel?.selectedOptions ?? '',\n loanTypeCategory: 'All',\n loanTypeGroup: 'All',\n loanType: loanCategory?.selectedOptions ?? '',\n loanPurpose: loanPurpose?.selectedOptions ?? '',\n hFilterJSON,\n };\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n IFundedBorrowerCharacteristicsDataModel,\n IFundedBorrowerCharacteristicsParams,\n} from '../interfaces/production-funded-characteristics';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FundedBorrowerCharacteristicsService {\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}/FundedBorrowerCharacteristics/').replace(\n '{version}',\n this.version\n );\n\n constructor(private _http: HttpClient) {}\n\n getFundedLoansByFICORange(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByFICORange',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n GetFundedLoansByReservesRange(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByReservesRange',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansByHTIRange(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByHTIRange',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansByDTIRange(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByDTIRange',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansByOccupancy(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByOccupancy',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansByPropertyType(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByPropertyType',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansByDocType(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansByDocType',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n\n getFundedLoansBySelfEmployed(\n parameters: IFundedBorrowerCharacteristicsParams\n ): Observable {\n return this._http.post(\n this._url + 'GetFundedLoansBySelfEmployed',\n parameters,\n {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n }\n );\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductionComponent } from './components/production-at-a-glance/production.component';\nimport { ProductionService } from './services/production.service';\nimport { ProductionRoutingModule } from './production.routing.module';\nimport { SharedModule } from '../shared/shared.module';\nimport { ThirdPartyModule } from '../third-party/third-party.module';\nimport { ProductionTransitionComponent } from './components/production-transition/production-transition.component';\nimport { ProductionInsightsComponent } from './components/production-insights/production-insights.component';\nimport { ProductionReportsComponent } from './components/production-reports/production-reports.component';\nimport { ProductionForecastingComponent } from './components/production-forecasting/production-forecasting.component';\nimport { ProductionUpgradeComponent } from './components/production-upgrade/production-upgrade.component';\nimport { ProductionInsightOptionComponent } from './components/production-insight-option/production-insight-option.component';\nimport { ProductionFundedDistComponent } from './components/production-funded-dist/production-funded-dist.component';\nimport { ProductionTurnTimesComponent } from './components/production-turn-times/production-turn-times.component';\nimport { ProductionFundedLoanCharacteristicsComponent } from './components/production-funded-loan-characteristics/production-funded-loan-characteristics.component';\nimport { ProductionFundedBorrowerCharacteristicsComponent } from './components/production-funded-borrower-characteristics/production-funded-borrower-characteristics.component';\nimport { ProductionMilestoneUtilizationComponent } from './components/production-milestone-utilization/production-milestone-utilization.component';\nimport { ProductionEcloseAdoptionComponent } from './components/production-eclose-adoption/production-eclose-adoption.component';\nimport { ProductionEcloseRoiTrendsComponent } from './components/production-eclose-roi-trends/production-eclose-roi-trends.component';\nimport { ProductionLoanCategoryDistComponent } from './components/production-loan-category-dist/production-loan-category-dist.component';\nimport { ProductionByLoanCategoryComponent } from './components/production-by-loan-category/production-by-loan-category.component';\nimport { ECloseService } from './services/eClose.service';\nimport { FundedBorrowerCharacteristicsService } from './services/funded-borrower-characteristics.service';\nimport { MilestoneUtilizationService } from './services/milestone-utilization.service';\nimport { ProductionTurnTimesService } from './services/production-turn-times.service';\n\n@NgModule({\n declarations: [\n ProductionComponent,\n ProductionTransitionComponent,\n ProductionInsightsComponent,\n ProductionReportsComponent,\n ProductionForecastingComponent,\n ProductionUpgradeComponent,\n ProductionInsightOptionComponent,\n ProductionTurnTimesComponent,\n ProductionFundedDistComponent,\n ProductionFundedLoanCharacteristicsComponent,\n ProductionFundedBorrowerCharacteristicsComponent,\n ProductionMilestoneUtilizationComponent,\n ProductionEcloseAdoptionComponent,\n ProductionEcloseRoiTrendsComponent,\n ProductionLoanCategoryDistComponent,\n ProductionByLoanCategoryComponent,\n ],\n imports: [CommonModule, ProductionRoutingModule, SharedModule, ThirdPartyModule],\n providers: [\n ProductionService,\n ECloseService,\n FundedBorrowerCharacteristicsService,\n MilestoneUtilizationService,\n ProductionTurnTimesService,\n ],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class ProductionModule {}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n HostListener,\n Input,\n AfterViewInit,\n} from '@angular/core';\n\n@Component({\n selector: 'search-dialog',\n templateUrl: './search-dialog.component.html',\n styleUrls: ['./search-dialog.component.scss'],\n})\nexport class SearchDialogComponent implements OnInit, AfterViewInit {\n private _dialogSearchTerm: string;\n clearIcon: any;\n popupBox;\n isPopupBoxOpen: boolean;\n searchIcon;\n isSearchEmpty: boolean;\n searchTimeoutStorage = null;\n @Input() placeHolder? = 'Search text';\n @Input() clickAwayClose? = true;\n @Input('locationTop') popupTop? = -110;\n @Input() searchIconFontSize? = 16;\n @Input() searchIconActionColors? = ['#223540', '#223540'];\n @Input() searchBoxHeight?: number = 56;\n @Input('searchId') suffix;\n @Input() timeoutDuration = 1000;\n @Output() searchOutput: EventEmitter = new EventEmitter();\n @Input() set resetSearch(value: boolean) {\n if (value) {\n this.clearSearchTerm();\n }\n }\n\n constructor() {}\n\n ngOnInit() {\n this.isPopupBoxOpen = false;\n this.isSearchEmpty = true;\n }\n\n ngAfterViewInit() {\n this.searchIcon = document.getElementById('search-dialog-icon-' + this.suffix);\n if (this.searchIcon) {\n this.searchIcon.style.fontSize = this.searchIconFontSize.toString() + 'px';\n this.searchIcon.style.color = this.searchIconActionColors[0];\n }\n\n this.popupBox = document.getElementById('simple-popuup-' + this.suffix);\n if (this.popupBox) {\n this.popupBox.style.visibility = 'hidden';\n this.popupBox.style.top = this.popupTop.toString() + 'px';\n }\n }\n\n get dialogSearchTerm(): string {\n return this._dialogSearchTerm;\n }\n\n set dialogSearchTerm(value: string) {\n this._dialogSearchTerm = value;\n clearTimeout(this.searchTimeoutStorage);\n this.searchTimeoutStorage = setTimeout(() => {\n this.emitSearchOutput();\n this.setClearIcon();\n }, this.timeoutDuration);\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isPopupBoxOpen) {\n this.clearSearchTerm();\n this.closePopupDialog();\n this.setClearIcon();\n }\n }\n\n closePopupDialog() {\n this.searchIcon.style.color = this.searchIconActionColors[0];\n this.popupBox.style.visibility = 'hidden';\n this.isPopupBoxOpen = false;\n }\n\n openPopupDialog() {\n this.searchIcon.style.color = this.searchIconActionColors[1];\n this.popupBox.style.visibility = 'visible';\n this.isPopupBoxOpen = true;\n }\n\n openSearchDialog() {\n this.setPopupboxPosition();\n this.setClearIcon();\n\n if (this.clickAwayClose) {\n if (this.getPopupDialogStatus() === 'hidden') {\n this.openPopupDialog();\n } else if (this.getPopupDialogStatus() === 'visible') {\n this.closePopupDialog();\n }\n } else {\n this.openPopupDialog();\n }\n }\n\n getPopupDialogStatus() {\n return this.popupBox.style.visibility;\n }\n\n clearSearchTerm() {\n if (this._dialogSearchTerm !== '' || !this._dialogSearchTerm) {\n this._dialogSearchTerm = '';\n this.isSearchEmpty = true;\n }\n }\n\n cancelButtonClick(sufx: string) {\n if (sufx === this.suffix) {\n this.clearSearchTerm();\n this.emitSearchOutput();\n this.setClearIcon();\n if (this.popupBox) {\n this.closePopupDialog();\n }\n }\n }\n\n clearButtonClick(sufx: string) {\n if (!this.isSearchEmpty && sufx === this.suffix) {\n this.clearSearchTerm();\n this.setClearIcon();\n this.emitSearchOutput();\n }\n }\n\n emitSearchOutput() {\n this.searchOutput.emit(this._dialogSearchTerm);\n }\n\n setClearIcon() {\n this.clearIcon = document.getElementById('clear-icon-' + this.suffix);\n\n if (this.clearIcon) {\n if (this._dialogSearchTerm == '' || !this._dialogSearchTerm) {\n this.clearIcon.style.visibility = 'hidden';\n } else {\n this.clearIcon.style.visibility = 'visible';\n }\n }\n\n if (this._dialogSearchTerm == '' || !this._dialogSearchTerm) {\n this.isSearchEmpty = true;\n } else {\n this.isSearchEmpty = false;\n }\n }\n\n setPopupboxPosition() {\n let pageWidth = document.documentElement.clientWidth;\n let popoupParantContainer = document.getElementById(\n 'search-dialog-main-container-' + this.suffix\n );\n\n if (this.popupBox) {\n if (popoupParantContainer.getBoundingClientRect().left + 320 > pageWidth) {\n this.popupBox.style.right = '2px';\n } else {\n this.popupBox.style.right = null;\n }\n }\n }\n}\n","
\n
\n \n \n \n
\n
\n"],"x_google_ignoreList":[]}