{"version":3,"file":"6636.a22c6336e663826e.js","mappings":"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","names":["i0","customer_r2","Name","category_r4","_r3","$implicit","ctx_r4","selectedcategory","CategoryName","category_r7","_r6","billingPeriod_r9","_r8","selectedBilling","chartOptions","series","chart","xaxis","tooltip","yaxis","stroke","dataLabels","grid","RevenueCostCategoryComponent","cdr","dashboardService","loaderService","commonService","translateService","billingPeriods","DurationUnits","lastBillingPeriod","threeBillingPeriod","sixBillingPeriod","twelveBillingPeriod","selectedBillingPeriod","subscription","entityName","recordId","categoryName","revenueVsCostData","selectedCategory","categories","customersData","c3Id","EntityNameOfCustomer","isLoading","downloadIconStatus","dropdownOptions","selectedCustomerOrReseller","chartUtilities","constructor","this","ChartUtilities","ngOnInit","startLoading","getCustomersAndResellersByEntity","subscribe","Data","length","map","customer","EntityName","C3Id","instant","_","getCategoryData","stopLoading","getRevenueVsCostData","ngOnDestroy","unsubscribe","duration","category","onCustomerChange","getRevenueVersusCostByCategory","data","chartData","billedAmountSeries","item","BilledAmount","costOnPartnerSeries","CostOnPartner","BillingMonths","BillingMonth","BillingYear","currencySymbol","CurrencySymbol","decimalPlaces","parseInt","CurrencyDecimalPlaces","initChart","CurrencyDecimalSeperator","CurrencyThousandSeperator","getCategoriesForRevenueVersusCost","categoryData","nceIndex","findIndex","decimalSeparator","thousandSeparator","name","strokeDashArray","height","type","zoom","enabled","toolbar","show","curve","axisBorder","labels","style","colors","fontSize","cssClass","markers","size","formatter","val","formatCurrency","y","detectChanges","value","symbol","formattedValue","toFixed","parts","split","replace","join","generatePNG","dropdown","close","isloadingstart","setTimeout","element","document","getElementById","generateSVG","toggleButton","i1","i2","i3","i4","selectors","standalone","features","decls","vars","consts","template","rf","ctx","RevenueCostCategoryComponent_Conditional_1_Template","$event","_r1","RevenueCostCategoryComponent_For_16_Template","RevenueCostCategoryComponent_For_22_Template","RevenueCostCategoryComponent_For_28_Template","RevenueCostCategoryComponent_For_36_Template","dropdown_r10","RevenueCostCategoryComponent_Conditional_54_Template","RevenueCostCategoryComponent_Conditional_55_Template","RevenueCostCategoryComponent_Conditional_56_Template","_c0","NgApexchartsModule","i5","Select2Module","i6","LoaderComponent","TranslationModule","NgClass","CommonNoRecordComponent","NgbDropdownModule","i7","SharedModule","i8","RouterModule","i9","NgSelectModule","i10","styles","duration_r2","ctx_r2","selectedDuration","product_r4","ProductName","TotalQuantity","SeatsPurchasedTopProductsComponent_Conditional_32_For_3_Template","productsData","SeatsPurchasedTopProductsComponent","dashboardservice","cdref","selectedTimePeriod","tweleveMonths","durationUnits","all","threeMonths","sixMonths","getSeatsPurchasedTopProductsData","timeDuration","getSeatsPurchasedTopProducts","generateCSV","rows","e","push","SeatsPurchasedTopProductsComponent_Conditional_1_Template","SeatsPurchasedTopProductsComponent_For_14_Template","SeatsPurchasedTopProductsComponent_Conditional_31_Template","SeatsPurchasedTopProductsComponent_Conditional_32_Template","SeatsPurchasedTopProductsComponent_Conditional_33_Template","FormatforInitialsPipe","NgbTooltip","Revenue","RevenueTopProductsComponent_Conditional_32_For_3_Template","RevenueTopProductsComponent","getRevenueTopProductsData","getRevenueTopProducts","formattedProducts","product","revenueValue","formattedRevenue","RevenueTopProductsComponent_Conditional_1_Template","RevenueTopProductsComponent_For_14_Template","RevenueTopProductsComponent_Conditional_31_Template","RevenueTopProductsComponent_Conditional_32_Template","RevenueTopProductsComponent_Conditional_33_Template","MegaNumberPipe","fill","responsive","TopSkusComponent","_commonService","recordID","skusData","getTopSkus","arr","sort","a","b","Seats","productNames","seats","generateData","x","z","generateCategories","values","step","maxValue","Math","max","maxCategory","ceil","i","bubbleData","minValue","sizeArr","generateArithmeticSequence","bubbleChartData","label","index","idx","sizeOfBubble","incVal","filter","redrawOnWindowResize","offsetY","min","lines","dashArray","custom","seriesIndex","dataPointIndex","w","config","breakpoint","options","legend","generateTOP10SKus","reverse","generateALLSKus","getAllSkus","allSkusDATA","commonDifference","Array","from","TopSkusComponent_For_12_Template","TopSkusComponent_Conditional_29_Template","TopSkusComponent_Conditional_30_Template","TopSkusComponent_Conditional_31_Template","ctx_r1","startBillingDate","endBillingDate","duration_r4","customer_r6","CustomerName","TopCustomersComponent_Conditional_34_For_3_Template","customerData","TopCustomersComponent","_appService","globalDateFormat","currencyDecimalPlaces","currencyDecimalSeperator","currencyThousandSeperator","currencyCode","$rootScope","dateFormat","getCustomersData","getTopCustomers","startDate","StartDateForLabel","endDate","EndDateForLabel","CurrencyCode","currenyPipe","CurrencyPipe","megaNumberPipe","transform","TopCustomersComponent_Conditional_1_Template","TopCustomersComponent_Conditional_8_Template","TopCustomersComponent_For_15_Template","dropdown_r5","TopCustomersComponent_Conditional_33_Template","TopCustomersComponent_Conditional_34_Template","TopCustomersComponent_Conditional_35_Template","toLowerCase","CommonModule","C3CommonModule","billingPeriod_r3","_r2","ctx_r3","partner_r6","_r5","setProvider","plotOptions","RevenueVsCostComponent","el","currencyFilterPipe","router","partners","Partners","microsoft","partner","microsoftNonCSP","selectedPartner","routerLink","onClick","event","nativeElement","contains","target","provider","getRevenueVsCost","opacity","bar","horizontal","columnWidth","borderRadius","borderRadiusApplication","borderRadiusWhenStacked","isFunnel3d","width","thresholds","limit","suffix","threshold","abs","navigateToRevenue","navigate","hostBindings","RevenueVsCostComponent_ng_container_1_Template","RevenueVsCostComponent_For_14_Template","RevenueVsCostComponent_For_20_Template","dropdown_r7","RevenueVsCostComponent_Conditional_38_Template","RevenueVsCostComponent_Conditional_39_Template","RevenueVsCostComponent_Conditional_40_Template","NgIf","payment_r1","PendingAmount","PastDuesComponent_Conditional_25_For_3_Template","pendingPaymentsData","PastDuesComponent","isloading","getPendingPayments","PastDuesComponent_Conditional_1_Template","PastDuesComponent_Conditional_24_Template","PastDuesComponent_Conditional_25_Template","PastDuesComponent_Conditional_26_Template","ctx_r0","AccountsReceivableComponent","dashboardWidgetsService","billingPeriodsData","paymentsData","billGenerationDate","totalAmount","getBillingPeriods","billingId","BillingPeriodId","moment","BillingStartDate","format","BillingEndDate","BillGenerationDate","getInvoicePayments","calculateChartData","reduce","sum","TotalAmount","Dataseries","absoluteDataseries","position","seriesName","opts","toString","slice","AccountsReceivableComponent_Conditional_14_Template","AccountsReceivableComponent_Conditional_15_Template","AccountsReceivableComponent_Conditional_16_Template","siteCount","Count","deptCount","userCount","StatCardCustomerComponent","widgetKey","bgColor","sitesCardBgColor","deptCardBgColor","userCardBgColor","cardType","portletTargetAction","PortletTargetActions","cardsTypes","CardsType","sitesCount","sites","forkJoin","getSitesCount","departmentsCount","departments","getDepartmentsCount","usersCount","users","getUserCount","openCardRelatedPage","inputs","StatCardCustomerComponent_Conditional_3_Template","StatCardCustomerComponent_Conditional_4_Template","StatCardCustomerComponent_Conditional_5_Template","StatCardCustomerComponent_Conditional_7_Template","StatCardCustomerComponent_Conditional_8_Template","StatCardCustomerComponent_Conditional_9_Template","StatCardCustomerComponent_Conditional_11_Template","StatCardCustomerComponent_Conditional_12_Template","StatCardCustomerComponent_Conditional_13_Template","seatsCount","SeatsCount","productsCount","TotalPurchasedProductCount","StatWithGraphCardCustomerComponent","seatsCardBgColor","subscriptionsCardBgColor","productsCountOnDate","seatsCountOnDate","subscriptionsCount","customerSeatsCount","getSeatsCountOnDateCustomer","getSeatsCountCustomer","onDate","OnDate","drawGraph","products","getProductCount","getProductCountsAsOnDate","productCounts","ProductsCount","initialValue","count","sparkline","barColor","barSpacing","barWidth","fillColor","endingShape","ranges","to","Number","MAX_SAFE_INTEGER","color","distributed","shared","intersect","date","Date","toLocaleString","month","getDate","getFullYear","StatWithGraphCardCustomerComponent_Conditional_3_Template","StatWithGraphCardCustomerComponent_Conditional_4_Template","StatWithGraphCardCustomerComponent_Conditional_6_Template","StatWithGraphCardCustomerComponent_Conditional_7_Template","StatWithGraphCardCustomerComponent_Conditional_9_Template","StatWithGraphCardCustomerComponent_Conditional_10_Template","duration_r3","PurchaseOfSeatsCardCustomerComponent_Conditional_6_For_7_Template","netPercentage","PurchaseOfSeatsCardCustomerComponent_Conditional_9_Conditional_14_Template","PreviousMonthSeats","CurrentMonthSeats","PurchaseOfSeatsCardCustomerComponent","purchaseOfseatsData","getPurchaseofSeats","getPurchaseOfSeats","response","result","isNaN","console","log","purchasedMonths","PurchasedMonth","totalQuantities","title","text","isNetPercentageValid","PurchaseOfSeatsCardCustomerComponent_Conditional_6_Template","PurchaseOfSeatsCardCustomerComponent_Conditional_8_Template","PurchaseOfSeatsCardCustomerComponent_Conditional_9_Template","PurchaseOfSeatsCardCustomerComponent_Conditional_10_Template","TopSkusCustomerComponent","selectedTimePeriodDisplay","point","axisMax","getAllSkusCustomer","TopSkusCustomerComponent_For_13_Template","TopSkusCustomerComponent_Conditional_30_Template","TopSkusCustomerComponent_Conditional_31_Template","TopSkusCustomerComponent_Conditional_32_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_For_10_Conditional_12_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_For_10_Conditional_13_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_For_10_Conditional_14_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_For_10_Conditional_15_Template","TermsAndCondition_r1","EmailAddress","AgreementType","AgreementURL","formatDate","CreateDate","Time","UserIPAddress","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_For_10_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_Conditional_11_Template","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_Conditional_12_Template","userTermsAndConditionLogs","isGridDataLoading","TermsAndConditionsAcceptedListCustomerComponent","datePipe","appSettingsService","showTermsAndConditionsAcceptanceLog","getUserTermsAndConditionLogs","ShowTermsAndConditionsAcceptanceLog","error","C3DatePipe","DatePipe","TermsAndConditionsAcceptedListCustomerComponent_Conditional_0_Template","product_r3","ProviderEffectiveEndDate","RenewalDateTopFiveProductsComponent_Conditional_12_For_2_Template","RenewalDateTopFiveProductsComponent","_appSettingsService","getRenewalCustomerProducts","getcustomerRenewalProduct","RecordId","PageCount","PageIndex","SortColumn","SortOrder","RenewalDateTopFiveProductsComponent_Conditional_9_Template","RenewalDateTopFiveProductsComponent_Conditional_11_Template","RenewalDateTopFiveProductsComponent_Conditional_12_Template","RenewalDateTopFiveProductsComponent_Conditional_13_Template","office365Url","office365ReportsUrl","azurePortalUrl","MicrosoftCardsDashboardCustomerComponent","office365BgColor","office365UsageBgColor","azurePortalBgColor","office365","office365UsageReports","office365Reports","azurePortal","MicrosoftCardsDashboardCustomerComponent_Conditional_3_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_4_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_5_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_8_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_9_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_10_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_11_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_12_Template","MicrosoftCardsDashboardCustomerComponent_Conditional_13_Template","_c1","invoice_r2","InvoiceGeneratedDate","InvoiceAmount","CurrencyThousandSeparator","CurrencyDecimalSeparator","InvoiceCardsDashboardCustomerComponent_Conditional_0_For_3_Template","redirectToPage","invoices","WidgetMap","Map","PurchaseOfSeatsCardComponent","StatWithGraphCardComponent","ProfabilityCardComponent","StatCardComponent","InvoiceCardsDashboardCustomerComponent","isShow","getCustomerInvoice","InvoiceCardsDashboardCustomerComponent_Conditional_0_Template","WidgetLoaderService","resolver","loadComponent","viewContainerRef","componentType","key","factory","resolveComponentFactory","clear","createComponent","instance","getComponentType","get","ɵfac","providedIn","WidgetLoaderDirective","widgetLoaderService","cfr","None","portlet_r1","TargetAction","DashboardComponent_Conditional_0_For_2_For_2_Conditional_0_For_2_Defer_0_Template","DashboardComponent_Conditional_0_For_2_For_2_Conditional_0_For_2_DeferPlaceholder_1_Template","DashboardComponent_Conditional_0_For_2_For_2_Conditional_0_For_2_Defer_2_DepsFn","DashboardComponent_Conditional_0_For_2_For_2_Conditional_0_For_2_Template","column_r2","ColumnSizeClass","getPortletsBySectionAndColumn","section_r3","DashboardComponent_Conditional_0_For_2_For_2_Conditional_0_Template","Show","DashboardComponent_Conditional_0_For_2_For_2_Template","ID","PortletColumns","DashboardComponent_Conditional_0_For_2_Template","dashboardCards","Sections","DashboardComponent","_bannerService","notifier","appSettingService","_bannerNotification","_engageService","userContext","isMandateProfile","portletsActions","notifier$","Subject","_router","getUserContext","pipe","first","res","undefined","userNotFound","getAvailableEnvironments","handleDashboardCardData","renderbanner","loadEngageNotification","body","alert","then","logOut","GetIsMandateProfile","takeUntil","switchMap","IsMandateProfile","of","getDashboardCards","forEach","section","columnData","PortletSectionID","DisplayOrder","column","portlets","Portlets","ColumnPosition","loadBanner","Status","MessageBody","messageBody","messageType","MessageType","pageName","engageNotification","showWithTemplate","BackgroundTemplate","Title","description","BodyText","btnColor","BtnColor","btnText","BtnText","btnTextColor","BtnTextColor","btnUrl","ButtonUrl","next","DashboardComponent_Conditional_0_Template","DashboardModule","TranslateModule","forChild","path","component","words","charAt","toUpperCase","pure"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/modules/standalones/cards/revenue-cost-category/revenue-cost-category.component.html","./src/app/modules/standalones/cards/revenue-cost-category/revenue-cost-category.component.ts","./src/app/modules/standalones/cards/seats-purchased-top-products/seats-purchased-top-products.component.html","./src/app/modules/standalones/cards/seats-purchased-top-products/seats-purchased-top-products.component.ts","./src/app/modules/standalones/cards/revenue-top-products/revenue-top-products.component.html","./src/app/modules/standalones/cards/revenue-top-products/revenue-top-products.component.ts","./src/app/modules/standalones/cards/top-skus/top-skus.component.html","./src/app/modules/standalones/cards/top-skus/top-skus.component.ts","./src/app/modules/standalones/cards/top-customers/top-customers.component.html","./src/app/modules/standalones/cards/top-customers/top-customers.component.ts","./src/app/modules/standalones/cards/revenue-vs-cost/revenue-vs-cost.component.html","./src/app/modules/standalones/cards/revenue-vs-cost/revenue-vs-cost.component.ts","./src/app/modules/standalones/cards/past-dues/past-dues.component.html","./src/app/modules/standalones/cards/past-dues/past-dues.component.ts","./src/app/modules/standalones/cards/accounts-receivable/accounts-receivable.component.html","./src/app/modules/standalones/cards/accounts-receivable/accounts-receivable.component.ts","./src/app/modules/standalones/cards/stat-card-customer/stat-card-customer.component.html","./src/app/modules/standalones/cards/stat-card-customer/stat-card-customer.component.ts","./src/app/modules/standalones/cards/stat-with-graph-card-customer/stat-with-graph-card-customer.component.html","./src/app/modules/standalones/cards/stat-with-graph-card-customer/stat-with-graph-card-customer.component.ts","./src/app/modules/standalones/cards/purchase-of-seats-card-customer/purchase-of-seats-card-customer.component.html","./src/app/modules/standalones/cards/purchase-of-seats-card-customer/purchase-of-seats-card-customer.component.ts","./src/app/modules/standalones/cards/top-skus-customer/top-skus-customer.component.html","./src/app/modules/standalones/cards/top-skus-customer/top-skus-customer.component.ts","./src/app/modules/standalones/cards/terms-and-conditions-accepted-list-customer/terms-and-conditions-accepted-list-customer.component.html","./src/app/modules/standalones/cards/terms-and-conditions-accepted-list-customer/terms-and-conditions-accepted-list-customer.component.ts","./src/app/modules/standalones/cards/renewal-date-top-five-products/renewal-date-top-five-products.component.html","./src/app/modules/standalones/cards/renewal-date-top-five-products/renewal-date-top-five-products.component.ts","./src/app/modules/standalones/cards/microsoft-cards-dashboard-customer/microsoft-cards-dashboard-customer.component.html","./src/app/modules/standalones/cards/microsoft-cards-dashboard-customer/microsoft-cards-dashboard-customer.component.ts","./src/app/modules/standalones/cards/invoice-cards-dashboard-customer/invoice-cards-dashboard-customer.component.html","./src/app/modules/home/dashboard-widgets/widget-map.ts","./src/app/modules/standalones/cards/invoice-cards-dashboard-customer/invoice-cards-dashboard-customer.component.ts","./src/app/modules/home/dashboard-widgets/widget-loader.service.ts","./src/app/modules/home/dashboard-widgets/widget-loader.directive.ts","./src/app/modules/home/dashboard/dashboard.component.html","./src/app/modules/home/dashboard/dashboard.component.ts","./src/app/modules/home/dashboard/dashboard.module.ts","./src/app/shared/pipes/format-initial.pipe.ts"],"sourcesContent":["
\r\n @if(chartUtilities.isloadingstart){\r\n \r\n\r\n
\r\n \r\n\r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n @for(customer of customersData; track $index) {\r\n {{customer?.Name}}\r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n @for(category of categories; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n @for(billingPeriod of billingPeriods; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if (!!revenueVsCostData && revenueVsCostData.Data && revenueVsCostData.Data.length>0){\r\n
\r\n \r\n \r\n
\r\n }\r\n @else if(!revenueVsCostData && !isLoading){\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
","import { NgClass, NgFor, NgIf } from '@angular/common';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { Select2Module } from \"ng-select2-component\";\r\n\r\nimport { CategoryForRevenueCostResponse, CategoryRevenueCostData, CategoryRevenueVsCostResponse, CustomerAndResellerData, CustomersAndRessellersResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport _ from 'lodash';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-revenue-cost-category',\r\n standalone: true,\r\n imports: [\r\n NgApexchartsModule,\r\n Select2Module,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgClass,CommonNoRecordComponent,\r\n NgbDropdownModule,\r\n SharedModule,\r\n RouterModule,\r\n NgSelectModule\r\n ],\r\n templateUrl: './revenue-cost-category.component.html',\r\n styleUrls: ['./revenue-cost-category.component.scss'] // Change 'styleUrl' to 'styleUrls'\r\n})\r\nexport class RevenueCostCategoryComponent {\r\n billingPeriods = [\r\n DurationUnits.lastBillingPeriod,\r\n DurationUnits.threeBillingPeriod,\r\n DurationUnits.sixBillingPeriod,\r\n DurationUnits.twelveBillingPeriod\r\n ];\r\n\r\n selectedBillingPeriod: string = DurationUnits.twelveBillingPeriod;\r\n chartOptions: any;\r\n private subscription: Subscription | null = null;\r\n entityName: string | null;\r\n recordId: string | null;\r\n categoryName: string | null;\r\n revenueVsCostData: Partial;\r\n selectedCategory: string = 'OnlineServicesNCE';\r\n categories: CategoryRevenueCostData[];\r\n customersData: any;\r\n c3Id: string = null;\r\n EntityNameOfCustomer: string = null;\r\n isLoading: boolean = false;\r\n downloadIconStatus: boolean = false;\r\n dropdownOptions: any[] = [];\r\n selectedCustomerOrReseller: any;\r\n\r\n public chartUtilities: ChartUtilities;\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private dashboardService: DashboardService,\r\n private loaderService: LoaderService,\r\n private commonService: CommonService,\r\n public translateService: TranslateService\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading = true;\r\n this.entityName = this.commonService.entityName;\r\n this.recordId=this.commonService.recordId\r\n this.subscription = this.dashboardService.getCustomersAndResellersByEntity(this.entityName,this.recordId).subscribe(\r\n (customersData: Partial) => {\r\n if (!!customersData && customersData.Data && customersData.Data.length > 0) {\r\n this.customersData = customersData.Data.map(customer => ({ Name: customer.Name, EntityName: customer.EntityName, C3Id: customer.C3Id }));\r\n }\r\n\r\n this.dropdownOptions = [{ Name: this.translateService.instant('TRANSLATE.SELECT_CUSTOMER'), EntityName: null, C3Id: null },\r\n { Name: this.translateService.instant('TRANSLATE.SELECT_ALL_CUSTOMER'), EntityName: this.translateService.instant('TRANSLATE.SELECT_ALL_CUSTOMER'), C3Id: null }];\r\n\r\n if (this.entityName === 'Partner') {\r\n this.dropdownOptions = _.union(this.dropdownOptions, [{ Name: this.translateService.instant('TRANSLATE.SELECT_ALL_RESELLER'), EntityName: this.translateService.instant('TRANSLATE.SELECT_ALL_RESELLER'), C3Id: null }]);\r\n }\r\n\r\n //including extra dropdown options\r\n this.customersData = _.union(this.dropdownOptions, this.customersData);\r\n \r\n this.getCategoryData();\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n }\r\n );\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Handles the selection of a billing period.\r\n * @param duration - The selected billing period.\r\n */\r\n selectedBilling(duration: string): void {\r\n this.selectedBillingPeriod = duration;\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n /**\r\n * Handles the selection of a category.\r\n * @param category - The selected category.\r\n */\r\n selectedcategory(category: string): void {\r\n this.selectedCategory = category;\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n onCustomerChange(): void {\r\n this.c3Id = this.selectedCustomerOrReseller.C3Id;\r\n this.EntityNameOfCustomer = this.selectedCustomerOrReseller.EntityName;\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n /**\r\n * Fetches revenue vs. cost data for the selected parameters.\r\n */\r\n getRevenueVsCostData(): void {\r\n \r\n this.subscription = this.dashboardService.getRevenueVersusCostByCategory(this.entityName, this.selectedBillingPeriod,this.recordId, this.selectedCategory , this.EntityNameOfCustomer, this.c3Id).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n this.revenueVsCostData = data;\r\n let chartData:any = data?.Data|| [];\r\n // console.log(data.Data)\r\n const billedAmountSeries = chartData.map(item => item.BilledAmount);\r\n const costOnPartnerSeries = chartData.map(item => item.CostOnPartner);\r\n const BillingMonths = chartData.map((item:any) => {\r\n let str:any = `${item.BillingMonth}, ${item?.BillingYear}`\r\n return str;\r\n });\r\n const currencySymbol = chartData[0]?.CurrencySymbol || '';\r\n const decimalPlaces = parseInt(chartData[0]?.CurrencyDecimalPlaces || '2', 10);\r\n const decimalSeparator = chartData[0]?.CurrencyDecimalSeperator || '.';\r\n const thousandSeparator = chartData[0]?.CurrencyThousandSeperator || ',';\r\n\r\n this.initChart(billedAmountSeries, costOnPartnerSeries, BillingMonths, currencySymbol, decimalPlaces, decimalSeparator, thousandSeparator);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches category data for revenue vs. cost.\r\n */\r\n getCategoryData(): void {\r\n this.subscription = this.dashboardService.getCategoriesForRevenueVersusCost(this.entityName,this.recordId).subscribe(\r\n (categoryData: Partial) => {\r\n if (!!categoryData?.Data) {\r\n let nceIndex:any = categoryData?.Data?.findIndex((item:any)=> item.CategoryName==\"OnlineServicesNCE\")\r\n if(nceIndex!=-1){\r\n this.selectedCategory = categoryData?.Data[nceIndex]?.CategoryName;\r\n }else{\r\n this.selectedCategory = categoryData?.Data[6]?.CategoryName || categoryData?.Data[0]?.CategoryName;\r\n }\r\n this.categories = categoryData?.Data || [];\r\n this.getRevenueVsCostData();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Initializes the chart with the given data.\r\n * @param billedAmountSeries - Series data for billed amounts.\r\n * @param costOnPartnerSeries - Series data for cost on partner.\r\n * @param BillingMonths - The billing months for the x-axis.\r\n * @param currencySymbol - The currency symbol for the y-axis.\r\n * @param decimalPlaces - Number of decimal places for the y-axis.\r\n * @param decimalSeparator - Decimal separator for the y-axis.\r\n * @param thousandSeparator - Thousand separator for the y-axis.\r\n */\r\n initChart(billedAmountSeries: number[] | undefined, costOnPartnerSeries: number[] | undefined, BillingMonths: string[] | undefined, currencySymbol: string, decimalPlaces: number, decimalSeparator: string, thousandSeparator: string): void {\r\n this.chartOptions = {\r\n series: [\r\n {\r\n name: \"Revenue\",\r\n data: billedAmountSeries\r\n },\r\n {\r\n name: \"Cost\",\r\n data: costOnPartnerSeries\r\n }\r\n ],\r\n grid: {\r\n stroke: \"#b6b6b6\",\r\n strokeDashArray: 3 \r\n },\r\n chart: {\r\n height: 350,\r\n type: \"area\",\r\n zoom: {\r\n enabled: false\r\n },\r\n toolbar:{\r\n show:false\r\n }\r\n },\r\n dataLabels: {\r\n enabled: false // Disabling data labels to remove the square boxes\r\n },\r\n stroke: {\r\n curve: \"smooth\"\r\n },\r\n xaxis: {\r\n categories: BillingMonths,\r\n axisBorder: {\r\n show: false,\r\n },\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-xaxis-label\"\r\n }\r\n }\r\n },\r\n markers: {\r\n size: 2,\r\n },\r\n yaxis: {\r\n labels: {\r\n formatter: (val: number) => {\r\n return this.formatCurrency(val, currencySymbol, decimalPlaces, decimalSeparator, thousandSeparator);\r\n },\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-yaxis-label\"\r\n }\r\n }\r\n },\r\n tooltip: {\r\n y: {\r\n formatter: (val: number) => {\r\n return this.formatCurrency(val, (currencySymbol||'$'), decimalPlaces, decimalSeparator, thousandSeparator);\r\n }\r\n }\r\n },\r\n };\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Formats a number as currency.\r\n * @param value - The value to format.\r\n * @param symbol - The currency symbol.\r\n * @param decimalPlaces - Number of decimal places.\r\n * @param decimalSeparator - Decimal separator.\r\n * @param thousandSeparator - Thousand separator.\r\n * @returns The formatted currency string.\r\n */\r\n formatCurrency(value: number, symbol: string, decimalPlaces: number, decimalSeparator: string, thousandSeparator: string): string {\r\n let formattedValue: string;\r\n\r\n if (value >= 1e6) {\r\n formattedValue = (value / 1e6).toFixed(decimalPlaces-1) + '0M';\r\n } else if (value >= 1e3) {\r\n formattedValue = (value / 1e3).toFixed(decimalPlaces-1) + '0K';\r\n } else {\r\n const parts = value.toFixed(decimalPlaces).split('.');\r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\r\n formattedValue = parts.join(decimalSeparator);\r\n }\r\n\r\n return `${symbol || '$'}${formattedValue}`;\r\n}\r\n\r\n\r\n generatePNG(dropdown:any): void {\r\n dropdown.close();\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n const element = document.getElementById('site_statistics_category');\r\n this.chartUtilities.generatePNG(element, 'Revenue-vs-cost-by-category');\r\n this.downloadIconStatus = true;\r\n },0)\r\n }\r\n\r\n generateSVG(dropdown:any): void {\r\n dropdown.close();\r\n const element = document.getElementById('site_statistics_category');\r\n this.chartUtilities.generateSVG(element, 'Revenue-vs-cost-by-category');\r\n this.downloadIconStatus = true;\r\n\r\n\r\n }\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n}\r\n","
\r\n @if(chartUtilities.isloadingstart){\r\n \r\n \r\n
\r\n \r\n \r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!productsData && productsData.length>0){\r\n
\r\n
\r\n @for(product of productsData; track $index){\r\n
\r\n
\r\n {{product?.ProductName | formatforinitials\r\n }}\r\n
\r\n
\r\n \r\n {{product?.ProductName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{product.TotalQuantity}}\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n }\r\n @else if(productsData.length<1 && !isLoading){
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport html2canvas from 'html2canvas';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { SeatsPurchasedTopProductData, SeatsPurchasedTopProductsResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { FormatforInitialsPipe } from 'src/app/shared/pipes/format-initial.pipe';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-seats-purchased-top-products',\r\n standalone: true,\r\n imports: [\r\n NgFor,\r\n NgApexchartsModule,\r\n NgClass,CommonNoRecordComponent,\r\n FormatforInitialsPipe ,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgbDropdownModule,\r\n SharedModule,\r\n NgbTooltip\r\n ],\r\n templateUrl: './seats-purchased-top-products.component.html',\r\n styleUrl: './seats-purchased-top-products.component.scss'\r\n})\r\nexport class SeatsPurchasedTopProductsComponent implements OnInit , OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.tweleveMonths;\r\n downloadIconStatus:boolean=false;\r\n private subscription: Subscription;\r\n entityName: string | null;\r\n productsData: SeatsPurchasedTopProductData[];\r\n public chartUtilities : ChartUtilities;\r\n isLoading:boolean=false;\r\n recordId:string|null;\r\n durationUnits = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n ]\r\nconstructor(\r\n private dashboardservice: DashboardService,\r\n private cdref:ChangeDetectorRef,\r\n private loaderService: LoaderService,\r\n private commonService: CommonService\r\n){\r\nthis.chartUtilities = new ChartUtilities();\r\n}\r\nngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading = true;\r\n this.entityName = this.commonService.entityName;\r\n this.recordId=this.commonService.recordId;\r\n this.getSeatsPurchasedTopProductsData()\r\n}\r\ngetSeatsPurchasedTopProductsData(){\r\n let timeDuration;\r\n if (this.selectedTimePeriod == DurationUnits.all) {\r\n timeDuration = null;\r\n }\r\n else {\r\n timeDuration = this.selectedTimePeriod;\r\n }\r\n this.subscription = this.dashboardservice.getSeatsPurchasedTopProducts(this.entityName, timeDuration,this.recordId).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n this.productsData = data.Data;\r\n this.cdref.detectChanges();\r\n }\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n}\r\n\r\nselectedDuration(duration: string) {\r\n this.selectedTimePeriod = duration;\r\n this.getSeatsPurchasedTopProductsData();\r\n}\r\n\r\n toggleButton(){\r\n this.downloadIconStatus= !this.downloadIconStatus\r\n }\r\n generatePNG() {\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n this.downloadIconStatus = false;\r\n const element = document.getElementById('five-products-by-seats-purchased-png');\r\n this.chartUtilities.generatePNG(element, 'Valued-products-by-seats-purchased')\r\n },0)\r\n }\r\n\r\n generateCSV() {\r\n this.downloadIconStatus = false;\r\n\r\n let rows = [];\r\n\r\n this.productsData.map(e=>{\r\n rows.push({\"Product Name\":e.ProductName, 'Total Quantity':e.TotalQuantity});\r\n })\r\n\r\n\r\n this.chartUtilities.generateCSV(rows , 'Valued-products-by-seats-purchased')\r\n\r\n }\r\nngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n}\r\n}\r\n","
\r\n @if(chartUtilities.isloadingstart){\r\n \r\n \r\n
\r\n \r\n \r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!productsData && productsData.length>0){\r\n
\r\n
\r\n @for(product of productsData; track $index){\r\n
\r\n
\r\n {{product?.ProductName | formatforinitials\r\n }}\r\n
\r\n
\r\n \r\n {{product?.ProductName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{product.Revenue | megaNumber : product.CurrencySymbol : product.CurrencyDecimalPlaces :\r\n product.CurrencyThousandSeperator : product.CurrencyDecimalSeperator}}\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n }\r\n @else if(productsData.length<1 && !isLoading){
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport html2canvas from 'html2canvas';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { RevenueTopProductData, RevenueTopProductsResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { FormatforInitialsPipe } from 'src/app/shared/pipes/format-initial.pipe';\r\nimport { MegaNumberPipe } from 'src/app/shared/pipes/meganumber.pipe';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-revenue-top-products',\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n NgFor,CommonNoRecordComponent,\r\n FormatforInitialsPipe,\r\n MegaNumberPipe,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgbDropdownModule,\r\n SharedModule,\r\n NgbTooltip\r\n ],\r\n templateUrl: './revenue-top-products.component.html',\r\n styleUrls: ['./revenue-top-products.component.scss']\r\n})\r\nexport class RevenueTopProductsComponent implements OnInit, OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.twelveBillingPeriod;\r\n downloadIconStatus: boolean = false;\r\n private subscription: Subscription | undefined;\r\n entityName: string | null = null;\r\n recordId: string|null;\r\n productsData: RevenueTopProductData[] = [];\r\n public chartUtilities: ChartUtilities;\r\n isLoading: boolean = false;\r\n durationUnits: string[] = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n DurationUnits.lastBillingPeriod,\r\n DurationUnits.threeBillingPeriod,\r\n DurationUnits.sixBillingPeriod,\r\n DurationUnits.twelveBillingPeriod\r\n ];\r\n\r\n constructor(\r\n private dashboardservice: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private loaderService: LoaderService,\r\n private commonService: CommonService,\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading = true;\r\n this.entityName = this.commonService.entityName;\r\n this.recordId=this.commonService.recordId\r\n this.getRevenueTopProductsData();\r\n }\r\n\r\n /**\r\n * Fetches revenue top products data based on the selected time period.\r\n * @returns {void}\r\n */\r\n getRevenueTopProductsData(): void {\r\n let timeDuration;\r\n if (this.selectedTimePeriod == DurationUnits.all) {\r\n timeDuration = null;\r\n }\r\n else {\r\n timeDuration = this.selectedTimePeriod;\r\n }\r\n\r\n this.subscription = this.dashboardservice.getRevenueTopProducts(this.entityName, timeDuration,this.recordId).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n this.productsData = data.Data;\r\n this.cdref.detectChanges();\r\n }\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the selected time period and fetches data accordingly.\r\n * @param {string} duration - The selected duration.\r\n * @returns {void}\r\n */\r\n selectedDuration(duration: string): void {\r\n this.selectedTimePeriod = duration;\r\n this.getRevenueTopProductsData();\r\n }\r\n\r\n /**\r\n * Toggles the status of the download icon.\r\n * @returns {void}\r\n */\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus;\r\n }\r\n\r\n /**\r\n * Generates a PNG image of the chart.\r\n * @returns {void}\r\n */\r\n generatePNG(): void {\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n this.downloadIconStatus = false;\r\n const element = document.getElementById('five-products-by-revenue-png');\r\n if (element) {\r\n this.chartUtilities.generatePNG(element, 'Valued-products-by-revenue');\r\n }\r\n },0)\r\n }\r\n\r\n /**\r\n * Generates a CSV file of the top products data.\r\n * @returns {void}\r\n */\r\n generateCSV(): void {\r\n this.downloadIconStatus = false;\r\n const formattedProducts = this.productsData.map(product => {\r\n const revenueValue = product.Revenue;\r\n\r\n let formattedRevenue;\r\n\r\n // Check if revenue is greater than 1000\r\n if (revenueValue > 1000) {\r\n formattedRevenue = `${product.CurrencySymbol}${(revenueValue / 1000).toFixed(1)}0K`; // Format with 'K'\r\n } else {\r\n formattedRevenue = `${product.CurrencySymbol}${revenueValue.toFixed(2)}`; // Format without 'K'\r\n }\r\n\r\n return {\r\n 'Product Name': product.ProductName,\r\n Revenue: formattedRevenue\r\n };\r\n });\r\n this.chartUtilities.generateCSV(formattedProducts, 'Valued-products-by-revenue');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!skusData && skusData.Data && skusData.Data.length > 0){\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n\r\n @else if(!!skusData?.Data && !isLoading){\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { TopSkusDataResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { NgClass } from '@angular/common';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { ceil } from 'lodash';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n\r\n@Component({\r\n selector: 'app-top-skus',\r\n standalone: true,\r\n templateUrl: './top-skus.component.html',\r\n styleUrls: ['./top-skus.component.scss'],\r\n imports: [\r\n NgApexchartsModule,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgClass,CommonNoRecordComponent,\r\n NgbDropdownModule,\r\n SharedModule\r\n ]\r\n})\r\nexport class TopSkusComponent implements OnInit, OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.tweleveMonths;\r\n chartOptions: any;\r\n private subscription: Subscription | null = null;\r\n entityName: string | null;\r\n recordID: string | null;\r\n skusData: Partial;\r\n isLoading: boolean = false;\r\n downloadIconStatus: boolean = false;\r\n chartUtilities: ChartUtilities;\r\n durationUnits = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n ];\r\n\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private dashboardService: DashboardService,\r\n private loaderService: LoaderService,\r\n private _commonService :CommonService\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n }\r\n\r\n ngOnInit(): void {\r\n // Start the loader\r\n this.loaderService.startLoading();\r\n this.entityName = this._commonService.entityName;\r\n this.recordID = this._commonService.recordId;\r\n \r\n\r\n // Fetch the top SKUs data\r\n this.getTopSkus();\r\n }\r\n\r\n /**\r\n * Update the selected time period and fetch the top SKUs data.\r\n * @param duration The selected duration.\r\n */\r\n selectedDuration(duration: string): void {\r\n this.selectedTimePeriod = duration;\r\n this.getTopSkus();\r\n }\r\n\r\n /**\r\n * Fetch the top SKUs data from the service.\r\n */\r\n getTopSkus(): void {\r\n let timeDuration;\r\n if (this.selectedTimePeriod == DurationUnits.all) {\r\n timeDuration = null;\r\n }\r\n else {\r\n timeDuration = this.selectedTimePeriod;\r\n }\r\n // Subscribe to the service to get the top SKUs data\r\n this.subscription = this.dashboardService.getTopSkus(this.entityName, this.recordID,timeDuration).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n // Update the SKUs data\r\n this.skusData = data;\r\n let arr = data.Data;\r\n arr = arr.sort((a, b) => a.Seats- b.Seats);\r\n \r\n // Extract product names and seats for chart\r\n const productNames = arr.map(item => item.ProductName);\r\n const seats = arr.map(item => item.Seats);\r\n // Initialize the chart with the extracted data\r\n this.initChart(productNames, seats);\r\n\r\n // Detect changes to update the view\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Stop the loader\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n public generateData(xaxis:any, yaxis:any, size : any) {\r\n var i = 0;\r\n var series = [];\r\n var x = xaxis;//Math.floor(Math.random() * (700 - 1 + 1)) + 1;\r\n var y =yaxis;\r\n let z:any = parseInt(size);\r\n series.push([x, y, z]);\r\n return series;\r\n }\r\n\r\n generateCategories(values, step = 20) {\r\n // Find the maximum value in the array\r\n const maxValue = Math.max(...values);\r\n \r\n // Determine the maximum category value (multiple of step)\r\n const maxCategory = Math.ceil(maxValue / step) * step;\r\n \r\n // Create categories array with values divisible by step\r\n const categories = [];\r\n for (let i = 0; i <= maxCategory; i += step) {\r\n categories.push(i);\r\n }\r\n return categories;\r\n}\r\n\r\n /**\r\n * Initialize the chart with product names and seats data.\r\n * @param productNames The array of product names.\r\n * @param seats The array of seat numbers.\r\n */\r\n initChart(productNames: string[], seats: number[]): void {\r\n // Create an array of objects for the bubble chart data\r\n let bubbleData = [];\r\n let minValue = (Math.max(...seats))/2;\r\n let maxValue = Math.max(...seats);\r\n let sizeArr = this.generateArithmeticSequence(minValue, maxValue, seats.length);\r\n const bubbleChartData = productNames.map((label, index) => {\r\n let idx = bubbleData.findIndex((x:any )=> x == seats[index]);\r\n let xaxis = seats[index];\r\n let sizeOfBubble = sizeArr[index]\r\n if(idx != -1){\r\n sizeOfBubble = sizeArr[idx];\r\n let incVal = bubbleData.filter((x:any)=> x == xaxis).length;\r\n xaxis +=incVal;\r\n }\r\n bubbleData.push(seats[index]);\r\n \r\n return {\r\n \"name\": label,\r\n \"data\": this.generateData(xaxis,seats[index],sizeOfBubble)\r\n \r\n };\r\n });\r\n this.chartOptions = {\r\n redrawOnWindowResize: true,\r\n grid: {\r\n stroke: \"#b6b6b6\",\r\n strokeDashArray: 3 // Dashed lines\r\n },\r\n \"series\": bubbleChartData,\r\n \"chart\": {\r\n \"height\": 500,\r\n \"type\": \"bubble\",\r\n \"offsetY\": -8,\r\n \"toolbar\": {\r\n \"show\": false\r\n },\r\n \"redrawOnWindowResize\": true\r\n },\r\n colors: [\r\n \"#FF5733\", // Color for Bubble1\r\n \"#33FF57\", // Color for Bubble2\r\n \"#3357FF\", // Color for Bubble3\r\n \"#F333FF\", // Color for Bubble4\r\n \"#FF33A1\", // Color for Bubble5\r\n \"#33FFF3\", // Color for Bubble6\r\n \"#FF8C33\", // Color for Bubble7\r\n \"#8C33FF\", // Color for Bubble8\r\n \"#8ef3ba\", // Color for Bubble9\r\n \"#FF3333\" // Color for Bubble10\r\n ],\r\n \"xaxis\": {\r\n \"labels\": {\r\n \"style\": {\r\n \"colors\": \"#99A1B7\",\r\n \"fontSize\": \"12px\",\r\n \"cssClass\": \"apexcharts-xaxis-label\",\r\n },\r\n min:0,\r\n max:700,\r\n show : false\r\n },\r\n lines: {\r\n show: true,\r\n dashArray: 0 // Dashed lines\r\n },\r\n min:0,\r\n max : ceil(maxValue * 1.1),\r\n // stepSize: 20,\r\n //tickAmount:8,\r\n axisBorder: {\r\n show: false,\r\n },\r\n \r\n },\r\n \"yaxis\": {\r\n \"labels\": {\r\n \"style\": {\r\n \"colors\": \"#99A1B7\",\r\n \"fontSize\": \"12px\",\r\n \"cssClass\": \"apexcharts-yaxis-label\"\r\n },\r\n min:0,\r\n max:700,\r\n },\r\n // max:Math.max(...seats)+10,\r\n min:0,\r\n max : ceil(maxValue * 1.1)\r\n //stepSize: 20,\r\n //tickAmount:8\r\n },\r\n tooltip: {\r\n \"custom\": function({ series, seriesIndex, dataPointIndex, w }) {\r\n const dataPoint = series[seriesIndex][dataPointIndex];\r\n return `

\r\n ${w.config.series[seriesIndex].name} : \r\n ${dataPoint}\r\n

`;\r\n }\r\n },\r\n \"dataLabels\": {\r\n \"enabled\": false\r\n },\r\n \"fill\": {\r\n \"type\": \"gradient\"\r\n },\r\n \"responsive\": [\r\n {\r\n \"breakpoint\": 1500,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n }\r\n }\r\n },\r\n {\r\n \"breakpoint\": 1050,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n },\r\n \"legend\": {\r\n \"show\": false,\r\n \"fill\": {\r\n \"type\": \"gradient\"\r\n }\r\n }\r\n }\r\n },\r\n {\r\n \"breakpoint\": 320,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n }\r\n\r\n\r\n generateTOP10SKus(){\r\n this.downloadIconStatus = true;\r\n let data = this.skusData.Data?.map(e=>{\r\n return {'Product Name': e.ProductName, 'Seats': e.Seats}\r\n });\r\n this.chartUtilities.generateCSV(data.reverse(), 'Top 10-SKUs');\r\n }\r\n\r\n\r\n generateALLSKus() {\r\n this.downloadIconStatus = true;\r\n this.subscription = this.dashboardService.getAllSkus(this.entityName, this.recordID, this.selectedTimePeriod === 'All' ? null : this.selectedTimePeriod).subscribe((data: Partial) => {\r\n const allSkusDATA = data.Data;\r\n\r\n let rows = [];\r\n\r\n allSkusDATA?.map(e=>{\r\n rows.push({'Product Name':e.ProductName, 'Seats':e.Seats})\r\n \r\n })\r\n\r\n this.chartUtilities.generateCSV(rows, 'All-SKUs');\r\n });\r\n }\r\n\r\n toggleButton() {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n\r\n generateArithmeticSequence(min, max, length) {\r\n // Calculate the common difference\r\n const commonDifference = (max - min) / (length - 1);\r\n // Generate the sequence\r\n const sequence = Array.from({ length }, (_, i) => min + i * commonDifference);\r\n return sequence;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Unsubscribe from the subscription to avoid memory leaks\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","
\r\n @if(chartUtilities.isloadingstart){\r\n \r\n \r\n
\r\n \r\n \r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n @if (selectedTimePeriod.toLowerCase() != 'all' && (!!startBillingDate && !!endBillingDate)){\r\n {{startBillingDate | c3Date }} - {{endBillingDate | c3Date }} \r\n }\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n @if (!!isLoading){\r\n \r\n }\r\n @else if(!!customerData && customerData.length>0){\r\n
\r\n
\r\n @for(customer of customerData; track $index){\r\n
\r\n
\r\n {{customer?.CustomerName | formatforinitials\r\n }}\r\n
\r\n
\r\n \r\n {{customer?.CustomerName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{customer.BilledAmount | megaNumber : customer.CurrencySymbol :\r\n customer.CurrencyDecimalPlaces :\r\n customer.CurrencyThousandSeperator : customer.CurrencyDecimalSeperator}}\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n }\r\n @else if(customerData.length<1 && !isLoading){
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { CommonModule, NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { CustomerData, TopCustomresResponseData } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { FormatforInitialsPipe } from 'src/app/shared/pipes/format-initial.pipe';\r\nimport { MegaNumberPipe} from 'src/app/shared/pipes/meganumber.pipe';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { AppSettingsService } from 'src/app/services/app-settings.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { CurrencyPipe } from 'src/app/shared/pipes/currency.pipe';\r\nimport { C3CommonModule } from 'src/app/shared/c3-common-module/c3-common-module.module';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-top-customers',\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n NgFor,CommonNoRecordComponent,\r\n FormatforInitialsPipe,\r\n MegaNumberPipe,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgbDropdownModule,\r\n SharedModule,\r\n CommonModule,\r\n NgbTooltip,\r\n C3CommonModule,\r\n \r\n ],\r\n templateUrl: './top-customers.component.html',\r\n styleUrl: './top-customers.component.scss'\r\n})\r\nexport class TopCustomersComponent {\r\n selectedTimePeriod: string = DurationUnits.sixBillingPeriod;\r\n downloadIconStatus: boolean = false;\r\n private subscription: Subscription;\r\n entityName: string | null;\r\n customerData: CustomerData[];\r\n startBillingDate:string;\r\n endBillingDate:string;\r\n chartUtilities : ChartUtilities;\r\n isLoading:boolean=false;\r\n recordId: string|null;\r\n durationUnits = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n DurationUnits.lastBillingPeriod,\r\n DurationUnits.threeBillingPeriod,\r\n DurationUnits.sixBillingPeriod,\r\n DurationUnits.twelveBillingPeriod\r\n ]\r\n globalDateFormat: any;\r\n currencySymbol:any;\r\n currencyDecimalPlaces:any;\r\n currencyDecimalSeperator:any;\r\n currencyThousandSeperator:any;\r\n currencyCode:any;\r\n \r\n constructor(\r\n private dashboardservice: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private loaderService: LoaderService,\r\n private _appService: AppSettingsService,\r\n private commonService: CommonService\r\n ) {\r\n this.chartUtilities = new ChartUtilities()\r\n }\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading= true;\r\n this.globalDateFormat = this._appService.$rootScope.dateFormat;\r\n this.entityName = this.commonService.entityName;\r\n this.recordId=this.commonService.recordId;\r\n this.getCustomersData()\r\n }\r\n getCustomersData() {\r\n let timeDuration;\r\n if (this.selectedTimePeriod == DurationUnits.all) {\r\n timeDuration = null;\r\n }\r\n else {\r\n timeDuration = this.selectedTimePeriod;\r\n }\r\n this.subscription = this.dashboardservice.getTopCustomers(this.entityName, timeDuration,this.recordId).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n const startDate = data?.Data[0]?.StartDateForLabel;\r\n const endDate = data.Data[0]?.EndDateForLabel;\r\n if(!!startDate && endDate){\r\n this.startBillingDate = startDate;\r\n this.endBillingDate = endDate;\r\n }\r\n this.currencyCode = data?.Data[0]?.CurrencyCode;\r\n this.currencyDecimalPlaces = data?.Data[0]?.CurrencyDecimalPlaces;\r\n this.currencyDecimalSeperator = data?.Data[0]?.CurrencyDecimalSeperator;\r\n this.currencySymbol = data?.Data[0]?.CurrencySymbol;\r\n this.currencyThousandSeperator = data?.Data[0]?.CurrencyThousandSeperator;\r\n \r\n this.customerData = data.Data;\r\n this.cdref.detectChanges();\r\n }\r\n this.loaderService.stopLoading();\r\n this.isLoading= false;\r\n });\r\n }\r\n\r\n selectedDuration(duration: string) {\r\n this.selectedTimePeriod = duration;\r\n this.getCustomersData();\r\n }\r\n\r\n toggleButton() {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n generatePNG(dropdown:any) {\r\n this.downloadIconStatus = true;\r\n dropdown.close()\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n const element = document.getElementById('top-customers-by-revenue-png');\r\n this.chartUtilities.generatePNG(element, 'Valued-customers')\r\n this.downloadIconStatus = true;\r\n },0)\r\n \r\n \r\n }\r\n\r\n generateCSV(dropdown:any) {\r\n dropdown.close();\r\n this.downloadIconStatus = true;\r\n\r\n let currenyPipe = new CurrencyPipe();\r\n let megaNumberPipe = new MegaNumberPipe(currenyPipe);\r\n let rows = [];\r\n this.customerData.map(e=>{ \r\n rows.push({'Customer Name': e.CustomerName, Revenue: megaNumberPipe.transform(e.BilledAmount, this.currencySymbol, this.currencyDecimalPlaces, this.currencyThousandSeperator, this.currencyDecimalSeperator )});\r\n //rows.push(billedAmount);\r\n })\r\n \r\n this.chartUtilities.generateCSV(rows, 'Valued-customers')\r\n }\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","\r\n
\r\n \r\n \r\n\r\n
\r\n \r\n \r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(billingPeriod of billingPeriods; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(partner of partners; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if (!!revenueVsCostData && revenueVsCostData.Data && revenueVsCostData.Data.length>0){\r\n
\r\n \r\n \r\n
\r\n }\r\n @else if(!revenueVsCostData && !isLoading){\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
","import { NgClass, NgFor, NgIf } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, OnInit, OnDestroy, HostListener, ElementRef } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { RevenueVsCostData } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { MegaNumberPipe } from 'src/app/shared/pipes/meganumber.pipe';\r\nimport { DurationUnits, Partners } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { CurrencyPipe } from 'src/app/shared/pipes/currency.pipe';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-revenue-vs-cost',\r\n standalone: true,\r\n imports: [\r\n NgFor,CommonNoRecordComponent,\r\n NgApexchartsModule,\r\n NgIf,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgClass,\r\n NgbDropdownModule,\r\n SharedModule,\r\n RouterModule\r\n ],\r\n templateUrl: './revenue-vs-cost.component.html',\r\n styleUrls: ['./revenue-vs-cost.component.scss']\r\n})\r\nexport class RevenueVsCostComponent implements OnInit, OnDestroy {\r\n billingPeriods: string[] = [\r\n DurationUnits.sixBillingPeriod,\r\n DurationUnits.lastBillingPeriod,\r\n DurationUnits.threeBillingPeriod,\r\n DurationUnits.twelveBillingPeriod\r\n ];\r\n partners: string[] = [\r\n Partners.microsoft,\r\n Partners.partner,\r\n Partners.microsoftNonCSP\r\n ];\r\n selectedBillingPeriod: string = DurationUnits.sixBillingPeriod;\r\n selectedPartner: string = Partners.microsoft;\r\n chartOptions: any;\r\n downloadIconStatus: boolean = false;\r\n public chartUtilities: ChartUtilities;\r\n private subscription: Subscription | null = null;\r\n entityName: string | null = null;\r\n isLoading: boolean = false;\r\n revenueVsCostData: Partial = {};\r\n recordId: string|null;\r\n routerLink: string;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private dashboardService: DashboardService,\r\n private loaderService: LoaderService,\r\n private commonService: CommonService,\r\n private el: ElementRef,\r\n private currencyFilterPipe: CurrencyPipe,\r\n private router: Router\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.entityName = this.commonService.entityName;\r\n this.recordId=this.commonService.recordId\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n this.downloadIconStatus = false;\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the selected billing period and fetches data accordingly.\r\n * @param {string} duration - The selected billing period.\r\n * @returns {void}\r\n */\r\n selectedBilling(duration: string): void {\r\n this.selectedBillingPeriod = duration;\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n /**\r\n * Updates the selected partner and fetches data accordingly.\r\n * @param {string} provider - The selected partner.\r\n * @returns {void}\r\n */\r\n setProvider(provider: string): void {\r\n this.selectedPartner = provider;\r\n this.getRevenueVsCostData();\r\n }\r\n\r\n /**\r\n * Fetches the revenue vs cost data based on selected parameters.\r\n * @returns {void}\r\n */\r\n getRevenueVsCostData(): void {\r\n this.subscription = this.dashboardService.getRevenueVsCost(this.entityName, this.selectedBillingPeriod, this.selectedPartner,this.recordId).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n this.revenueVsCostData = data;\r\n const billedAmountSeries = data.Data.map(item => item.BilledAmount);\r\n const costOnPartnerSeries = data.Data.map(item => item.CostOnPartner);\r\n const BillingMonths = data.Data.map(item => item.BillingMonth);\r\n const currencySymbol = data.Data[0]?.CurrencySymbol || '';\r\n const decimalPlaces = parseInt(data.Data[0]?.CurrencyDecimalPlaces || '2', 10);\r\n const decimalSeparator = data.Data[0]?.CurrencyDecimalSeperator || '.';\r\n const thousandSeparator = data.Data[0]?.CurrencyThousandSeperator || ',';\r\n\r\n this.initChart(billedAmountSeries, costOnPartnerSeries, BillingMonths, currencySymbol, decimalPlaces, decimalSeparator, thousandSeparator);\r\n }\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n /**\r\n * Initializes the chart with the provided data and formatting options.\r\n * @param {number[]} billedAmountSeries - Series data for billed amount.\r\n * @param {number[]} costOnPartnerSeries - Series data for cost on partner.\r\n * @param {string[]} BillingMonths - Categories for billing months.\r\n * @param {string} currencySymbol - Symbol for currency.\r\n * @param {number} decimalPlaces - Number of decimal places.\r\n * @param {string} decimalSeparator - Decimal separator character.\r\n * @param {string} thousandSeparator - Thousand separator character.\r\n * @returns {void}\r\n */\r\n initChart(\r\n billedAmountSeries: number[] | undefined,\r\n costOnPartnerSeries: number[] | undefined,\r\n BillingMonths: string[] | undefined,\r\n currencySymbol: string,\r\n decimalPlaces: number,\r\n decimalSeparator: string,\r\n thousandSeparator: string\r\n ): void {\r\n const megaNumberPipe = new MegaNumberPipe(this.currencyFilterPipe);\r\n // Calculate maximum value to determine y-axis range\r\n let maxValue = Math.max(...billedAmountSeries, ...costOnPartnerSeries);\r\n\r\n // Ensure maximum value is rounded up to the nearest 70k boundary\r\n maxValue = Math.ceil(maxValue / 70000) * 70000;\r\n this.chartOptions = {\r\n series: [\r\n {\r\n name: \"Revenue\",\r\n data: billedAmountSeries\r\n },\r\n {\r\n name: \"Cost\",\r\n data: costOnPartnerSeries\r\n }\r\n ],\r\n chart: {\r\n type: \"bar\",\r\n height: 450,\r\n zoom: {\r\n enabled: false\r\n },\r\n grid: {\r\n strokeDashArray: 7,\r\n opacity: 0.7,\r\n },\r\n toolbar: {\r\n show: false\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n horizontal: false,\r\n columnWidth: 12,\r\n borderRadius: 5,\r\n borderRadiusApplication: 'last',\r\n borderRadiusWhenStacked: 'last',\r\n isFunnel3d: true\r\n },\r\n },\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n stroke: {\r\n show: true,\r\n width: 2,\r\n colors: [\"transparent\"],\r\n },\r\n xaxis: {\r\n categories: BillingMonths,\r\n axisBorder: {\r\n show: false,\r\n },\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-xaxis-label\"\r\n }\r\n }\r\n },\r\n yaxis: {\r\n min: 0,\r\n // max: maxValue,\r\n labels: {\r\n formatter: (val: number) => {\r\n return this.formatCurrency(val, currencySymbol, decimalPlaces, decimalSeparator, thousandSeparator);\r\n },\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-yaxis-label\"\r\n }\r\n }\r\n },\r\n fill: {\r\n opacity: 1,\r\n },\r\n grid: {\r\n stroke: \"#b6b6b6\",\r\n strokeDashArray: 3 // Dashed lines\r\n },\r\n tooltip: {\r\n y: {\r\n formatter: (val: number) => {\r\n return megaNumberPipe.transform(val, (currencySymbol || '$'), 2, ',', '.');\r\n }\r\n }\r\n },\r\n };\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Formats a number as currency.\r\n * @param {number} value - The value to format.\r\n * @param {string} symbol - The currency symbol.\r\n * @param {number} decimalPlaces - The number of decimal places.\r\n * @param {string} decimalSeparator - The decimal separator character.\r\n * @param {string} thousandSeparator - The thousand separator character.\r\n * @returns {string} - The formatted currency string.\r\n */\r\n formatCurrency(value: number, symbol: string, decimalPlaces: number, decimalSeparator: string, thousandSeparator: string): string {\r\n // Define thresholds for formatting\r\n const thresholds = [\r\n { limit: 1e9, suffix: 'B' },\r\n { limit: 1e6, suffix: 'M' },\r\n { limit: 1e3, suffix: 'k' }\r\n ];\r\n \r\n // Iterate through thresholds to find the appropriate suffix\r\n for (const threshold of thresholds) {\r\n if (Math.abs(value) >= threshold.limit) {\r\n return `${symbol || '$'}${(value / threshold.limit).toFixed(decimalPlaces)}${threshold.suffix}`;\r\n }\r\n }\r\n \r\n // Default case for values below the first threshold\r\n const parts = value.toFixed(decimalPlaces).split('.'); \r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\r\n return `${symbol||'$'}${parts.join(decimalSeparator)}`;\r\n }\r\n \r\n\r\n\r\n generatePNG(dropdown:any): void {\r\n dropdown.close(); // Close the dropdown\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n this.downloadIconStatus = true;\r\n const element = document.getElementById('site_statistics');\r\n \r\n this.chartUtilities.generatePNG(element, 'Revenue-vs-cost')\r\n \r\n },0)\r\n }\r\n\r\n generateSVG(dropdown:any): void {\r\n dropdown.close();\r\n this.downloadIconStatus = true;\r\n const element = document.getElementById('site_statistics');\r\n this.chartUtilities.generateSVG(element, 'Revenue-vs-cost')\r\n\r\n }\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n\r\n navigateToRevenue() {\r\n this.routerLink = 'partner/business/revenue';\r\n this.router?.navigate([this.routerLink])\r\n }\r\n}\r\n","
\r\n @if(chartUtilities.isloadingstart){\r\n \r\n \r\n
\r\n \r\n \r\n {{'TRANSLATE.MESSAGE_TEXT_PLEASE_WAIT' | translate}}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n @if (!!isloading){\r\n \r\n }\r\n @else if(!!pendingPaymentsData && pendingPaymentsData.length>0){\r\n
\r\n
\r\n @for(payment of pendingPaymentsData; track $index){\r\n
\r\n
\r\n {{payment?.CustomerName | formatforinitials\r\n }}\r\n
\r\n
\r\n \r\n {{payment?.CustomerName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{payment.PendingAmount | megaNumber : payment.CurrencySymbol :\r\n payment.CurrencyDecimalPlaces : payment.CurrencyThousandSeperator :\r\n payment.CurrencyDecimalSeperator}}\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n }\r\n @else if(pendingPaymentsData.length<1 && !isloading){ \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n","import { NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\nimport html2canvas from 'html2canvas';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { CustomerPendingPaymentData, PendingPaymentDataResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { FormatforInitialsPipe } from 'src/app/shared/pipes/format-initial.pipe';\r\nimport { MegaNumberPipe } from 'src/app/shared/pipes/meganumber.pipe';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { NgbDropdownModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-past-dues',\r\n standalone: true,\r\n imports: [\r\n NgFor,CommonNoRecordComponent,\r\n NgClass,\r\n FormatforInitialsPipe,\r\n MegaNumberPipe,\r\n LoaderComponent,\r\n TranslationModule,\r\n SharedModule,\r\n NgbDropdownModule,\r\n NgbTooltip\r\n ],\r\n templateUrl: './past-dues.component.html',\r\n styleUrl: './past-dues.component.scss'\r\n})\r\nexport class PastDuesComponent {\r\n entityName: String | null;\r\n private subscription: Subscription;\r\n downloadIconStatus: boolean = false;\r\n pendingPaymentsData: CustomerPendingPaymentData[];\r\n public chartUtilities: ChartUtilities;\r\n isloading: boolean = false;\r\n constructor(\r\n private dashboardservice: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private loaderService: LoaderService\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n */\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isloading = true;\r\n this.getCustomersData()\r\n }\r\n\r\n /**\r\n * Fetches customer data from the dashboard service.\r\n */\r\n getCustomersData(): void {\r\n\r\n this.subscription = this.dashboardservice.getPendingPayments().subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n this.pendingPaymentsData = data.Data;\r\n this.cdref.detectChanges();\r\n }\r\n this.loaderService.stopLoading();\r\n this.isloading = false;\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the download icon status.\r\n */\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n\r\n /**\r\n * Generates a PNG image of the specified element.\r\n */\r\n generatePNG(): void {\r\n this.chartUtilities.isloadingstart = true;\r\n setTimeout(()=>{\r\n this.downloadIconStatus = true;\r\n const element = document.getElementById('past_dues_png');\r\n this.chartUtilities.generatePNG(element, 'Past-dues');\r\n },0)\r\n }\r\n\r\n /**\r\n * Generates a CSV file from the pending payments data.\r\n */\r\n generateCSV(): void {\r\n this.downloadIconStatus = true;\r\n const formattedProducts = this.pendingPaymentsData.map(product => {\r\n const revenueValue = product.PendingAmount;\r\n\r\n let formattedRevenue;\r\n\r\n // Check if revenue is greater than 1000\r\n if (revenueValue > 1000) {\r\n formattedRevenue = `${product.CurrencySymbol}${(revenueValue / 1000).toFixed(1)}K`; // Format with 'K'\r\n } else {\r\n formattedRevenue = `${product.CurrencySymbol}${revenueValue.toFixed(2)}`; // Format without 'K'\r\n }\r\n\r\n return {\r\n 'Product Name': product.CustomerName,\r\n Revenue: formattedRevenue\r\n };\r\n });\r\n\r\n this.chartUtilities.generateCSV(formattedProducts, 'Past-dues')\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when the directive is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {{billingPeriodsData?.BillingStartDate | c3Date }} - {{billingPeriodsData?.BillingEndDate | c3Date}} ({{billingPeriodsData?.BillGenerationDate | c3Date }})\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!paymentsData && paymentsData.length > 0 && totalAmount>0){\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n @else if(totalAmount<=0 && !isLoading){\r\n \r\n }\r\n\r\n
\r\n
","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport moment from 'moment';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { BillingPeriodData, InvoicePaymentsResponse, PaymentData } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { Subscription } from 'rxjs';\r\nimport { AppSettingsService } from 'src/app/services/app-settings.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { C3CommonModule } from 'src/app/shared/c3-common-module/c3-common-module.module';\r\n\r\n@Component({\r\n selector: 'app-accounts-receivable',\r\n standalone: true,\r\n imports: [\r\n NgApexchartsModule,\r\n LoaderComponent,\r\n TranslationModule,\r\n CommonModule,\r\n C3CommonModule,\r\n \r\n],\r\n templateUrl: './accounts-receivable.component.html',\r\n styleUrl: './accounts-receivable.component.scss'\r\n})\r\nexport class AccountsReceivableComponent implements OnInit, OnDestroy {\r\n billingPeriodsData: BillingPeriodData;\r\n paymentsData: PaymentData[] = [];\r\n chartOptions: any; \r\n startBillingDate: string; \r\n endBillingDate: string; \r\n billGenerationDate: string; \r\n isLoading: boolean = false; \r\n globalDateFormat: any = '';\r\n private subscription: Subscription;\r\n totalAmount:number\r\n constructor(\r\n private dashboardWidgetsService: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private _appService: AppSettingsService,\r\n private loaderService: LoaderService\r\n ) { }\r\n\r\n // Lifecycle hook to initialize the component\r\n ngOnInit(): void {\r\n this.loaderService.startLoading(); \r\n this.isLoading = true;\r\n this.globalDateFormat = this._appService.$rootScope.dateFormat;\r\n this.dashboardWidgetsService.getBillingPeriods().subscribe((billingPeriods:any)=>{\r\n this.billingPeriodsData = (billingPeriods.Data[billingPeriods.Data.length - 1]);\r\n const billingId = billingPeriods.Data[billingPeriods.Data.length - 1].BillingPeriodId;\r\n this.startBillingDate = moment(this.billingPeriodsData?.BillingStartDate).format(this.globalDateFormat); \r\n this.endBillingDate = moment(this.billingPeriodsData?.BillingEndDate).format(this.globalDateFormat); \r\n this.billGenerationDate = moment(this.billingPeriodsData?.BillGenerationDate).format(this.globalDateFormat); \r\n this.getInvoicePayments(billingId);\r\n })\r\n\r\n }\r\n\r\n // Method to fetch invoice payments data\r\n getInvoicePayments(billingId:number): void {\r\n this.subscription= this.dashboardWidgetsService.getInvoicePayments(billingId).subscribe(\r\n (data: Partial) => {\r\n this.paymentsData = data?.Data || []; \r\n this.calculateChartData(); \r\n this.loaderService.stopLoading(); \r\n this.isLoading = false; \r\n }\r\n );\r\n }\r\n\r\n // Method to calculate chart data\r\n calculateChartData(): void {\r\n const totalAmount = this.paymentsData.reduce((sum, item) => sum + item.TotalAmount, 0); \r\n this.totalAmount = totalAmount;\r\n const Dataseries = this.paymentsData.map(item => (item.TotalAmount / totalAmount) * 100); \r\n const labels = ['Received', 'Not Received', 'In Progress', 'Failed']; \r\n this.initChart(Dataseries, labels); \r\n this.cdref.detectChanges(); \r\n }\r\n\r\n // Method to initialize chart options\r\n initChart(Dataseries: number[], labels: string[]): void {\r\n const absoluteDataseries = Dataseries.map(value => Math.abs(value));\r\n this.chartOptions = {\r\n colors:[\"#20c570\", \"#880085\", \"#d2e600\", \"#ff2400\", \"#b2d767\", \"#C0C0C0\"],\r\n series: absoluteDataseries,\r\n chart: {\r\n height: 460,\r\n type: \"donut\",\r\n },\r\n fill: {\r\n type: 'gradient',\r\n },\r\n labels: labels,\r\n dataLabels: {\r\n enabled: false\r\n },\r\n legend: {\r\n position: 'bottom',\r\n //width: 100,\r\n formatter: function(seriesName, opts) {\r\n return ((seriesName?.length>12) ? seriesName?.toString()?.slice(0,12)+'...' : seriesName)\r\n }\r\n },\r\n responsive: [\r\n {\r\n breakpoint: 1500,\r\n options: {\r\n chart: {\r\n height: 280\r\n },\r\n }\r\n },\r\n {\r\n breakpoint: 1360,\r\n options: {\r\n chart: {\r\n height: 259\r\n },\r\n }\r\n },\r\n {\r\n breakpoint: 1050,\r\n options: {\r\n chart: {\r\n height: 250\r\n },\r\n legend: {\r\n show: false\r\n }\r\n }\r\n },\r\n {\r\n breakpoint: 767,\r\n options: {\r\n chart: {\r\n height: 250\r\n },\r\n legend: {\r\n show: false\r\n }\r\n }\r\n },\r\n {\r\n breakpoint: 320,\r\n options: {\r\n chart: {\r\n height: 170\r\n },\r\n }\r\n }\r\n ],\r\n tooltip: {\r\n y: {\r\n formatter: (value: number) => {\r\n return `${value.toFixed(2)}%`; // Format tooltip values as percentages\r\n }\r\n }\r\n },\r\n yaxis: {\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-yaxis-label\"\r\n }\r\n }\r\n },\r\n xaxis: {\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-yaxis-label\"\r\n }\r\n }\r\n }\r\n };\r\n }\r\nngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n}\r\n}\r\n","
\r\n
\r\n
\r\n @if(cardType === cardsTypes.sites){\r\n \r\n }\r\n @else if(cardType === cardsTypes.departments){\r\n \r\n }\r\n @else if(cardType === cardsTypes.users){\r\n \r\n \r\n \r\n \r\n\r\n }\r\n
\r\n @if(cardType === cardsTypes.sites){\r\n {{ siteCount?.Data.Count}}\r\n }\r\n @else if(cardType === cardsTypes.departments){\r\n {{ deptCount?.Data.Count}}\r\n }\r\n @else if(cardType === cardsTypes.users){\r\n {{ userCount?.Data.Count}}\r\n }\r\n \r\n @if(cardType === cardsTypes.sites){\r\n \r\n }\r\n @else if(cardType === cardsTypes.departments){\r\n \r\n }\r\n @else if(cardType === cardsTypes.users){\r\n \r\n }\r\n \r\n
\r\n
\r\n\r\n
\r\n
","import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription, forkJoin } from 'rxjs';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { CardsType, PortletTargetActions } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { CommonService } from 'src/app/services/common.service';\r\n\r\n@Component({\r\n selector: 'app-stat-card-customer',\r\n standalone: true,\r\n imports: [NgClass,\r\n TranslationModule],\r\n templateUrl: './stat-card-customer.component.html',\r\n styleUrl: './stat-card-customer.component.scss'\r\n})\r\nexport class StatCardCustomerComponent implements OnInit,OnDestroy {\r\n @Input() widgetKey?: string;\r\n bgColor: string;\r\n sitesCardBgColor = 'bg-success ';\r\n deptCardBgColor = 'bg-danger ';\r\n userCardBgColor = 'bg-primary ';\r\n cardType: string;\r\n siteCount: any;\r\n deptCount: any;\r\n userCount: any;\r\n @Input() routerLink?:string;\r\n private subscription: Subscription; \r\n entityName: string | null;\r\n recordID: string | null;\r\n portletTargetAction = PortletTargetActions;\r\n cardsTypes = CardsType;\r\n constructor(\r\n private router: Router,\r\n private dashboardWidgetsService:DashboardService,\r\n private _commonService :CommonService\r\n ){\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.entityName = this._commonService.entityName;\r\n this.recordID = this._commonService.recordId;\r\n \r\n if (this.widgetKey === this.portletTargetAction.sitesCount) {\r\n this.bgColor = this.sitesCardBgColor;\r\n this.cardType = this.cardsTypes.sites;\r\n this.subscription = forkJoin([\r\n this.dashboardWidgetsService.getSitesCount(),\r\n ]).subscribe(([siteCount]) => {\r\n this.siteCount = siteCount;\r\n });\r\n \r\n }\r\n else if (this.widgetKey === this.portletTargetAction.departmentsCount) {\r\n this.bgColor = this.deptCardBgColor;\r\n this.cardType = this.cardsTypes.departments;\r\n this.subscription = forkJoin([\r\n this.dashboardWidgetsService.getDepartmentsCount(),\r\n ]).subscribe(([deptCount]) => {\r\n this.deptCount = deptCount;\r\n });\r\n \r\n\r\n }\r\n else if (this.widgetKey === this.portletTargetAction.usersCount) {\r\n this.bgColor = this.userCardBgColor;\r\n this.cardType = this.cardsTypes.users;\r\n this.subscription = forkJoin([\r\n this.dashboardWidgetsService\r\n .getUserCount(this.entityName, this.recordID),\r\n ]).subscribe(([userCount]) => {\r\n this.userCount = userCount;\r\n });\r\n \r\n\r\n }\r\n }\r\n\r\n openCardRelatedPage(): void {\r\n if (this.cardType == this.cardsTypes.users) {\r\n this.routerLink = 'home/users'\r\n }\r\n else if(this.cardType == this.cardsTypes.departments) {\r\n this.routerLink = 'home/profile/organizationsetup/departments'\r\n } else if(this.cardType == this.cardsTypes.sites) {\r\n this.routerLink = 'home/profile/organizationsetup/sites'\r\n }\r\n this.router?.navigate([this.routerLink])\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n\r\n","
\r\n
\r\n
\r\n @if(cardType === cardsTypes.seats){\r\n \r\n \r\n }\r\n @else {\r\n \r\n }\r\n\r\n
\r\n @if(cardType === cardsTypes.seats){\r\n {{seatsCount?.Data?.SeatsCount}} \r\n }\r\n @else {\r\n {{productsCount?.Data?.TotalPurchasedProductCount}}\r\n \r\n\r\n }\r\n \r\n @if(cardType === cardsTypes.seats){\r\n \r\n }\r\n @else{\r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { NgClass } from '@angular/common';\r\nimport { Subscription, forkJoin } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport {\r\n CardsType,\r\n PortletTargetActions,\r\n ProductsCountOnDateResponse,\r\n SeatsCountOnDateResponse,\r\n SubscriptionCardData,\r\n seatsCardData\r\n} from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-stat-with-graph-card-customer',\r\n standalone: true,\r\n imports: [ NgApexchartsModule,\r\n NgClass,\r\n TranslationModule],\r\n templateUrl: './stat-with-graph-card-customer.component.html',\r\n styleUrl: './stat-with-graph-card-customer.component.scss'\r\n})\r\nexport class StatWithGraphCardCustomerComponent implements OnInit, OnDestroy {\r\n @Input() widgetKey?: string;\r\n \r\n bgColor: string;\r\n seatsCardBgColor = 'bg-info';\r\n subscriptionsCardBgColor = ' bg-primary';\r\n cardType: string;\r\n productsCountOnDate: Partial;\r\n seatsCountOnDate: Partial;\r\n subscriptionsCount: Partial;\r\n seatsCount: Partial;\r\n chartOptions: any;\r\n cardsTypes = CardsType;\r\n public series: any; \r\n public chart: any; \r\n private subscription: Subscription; \r\n entityName: string | null;\r\n recordID: string | null;\r\n portletTargetAction = PortletTargetActions\r\n productsCount: any;\r\n routerLink: string;\r\n \r\n constructor(\r\n private cdref: ChangeDetectorRef,\r\n private dashboardWidgetsService: DashboardService,\r\n private _commonService:CommonService,\r\n private router: Router\r\n ) {\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n this.entityName = this._commonService.entityName;\r\n this.recordID = this._commonService.recordId;\r\n\r\n\r\n //apiService.get('api/dashboardcards/' + $rootScope.userContext.entityName + '/' + $rootScope.userContext.recordId + '/count', null, null, true).then(function (response) {\r\n\r\n if (this.widgetKey === this.portletTargetAction.customerSeatsCount) {\r\n this.bgColor = this.subscriptionsCardBgColor;\r\n this.cardType = this.cardsTypes.seats;\r\n this.subscription = forkJoin([\r\n this.dashboardWidgetsService.getSeatsCountOnDateCustomer(this.entityName, this.recordID ),\r\n this.dashboardWidgetsService.getSeatsCountCustomer(this.entityName, this.recordID ),\r\n ]).subscribe(([seatsCountOnDate, seatsCount]) => {\r\n this.seatsCountOnDate = seatsCountOnDate;\r\n this.seatsCount = seatsCount;\r\n if (!!this.seatsCountOnDate && this.seatsCountOnDate.Data && this.seatsCountOnDate.Data.length > 0) {\r\n const seatsCount = this.seatsCountOnDate.Data.map((item: any) => item.SeatsCount);\r\n const onDate = this.seatsCountOnDate.Data.map((item: any) => item.OnDate);\r\n const name = 'Seats Purchased';\r\n this.drawGraph(seatsCount, onDate, name);\r\n this.cdref.detectChanges();\r\n }\r\n });\r\n \r\n }\r\n\r\n else if (this.widgetKey === this.portletTargetAction.productsCount) {\r\n this.bgColor = this.seatsCardBgColor;\r\n this.cardType = this.cardsTypes.products;\r\n this.subscription = forkJoin([\r\n this.dashboardWidgetsService.getProductCount(this.entityName, this.recordID ),\r\n this.dashboardWidgetsService.getProductCountsAsOnDate(this.entityName, this.recordID), \r\n \r\n ]).subscribe(([productsCount,productsCountOnDate]) => {\r\n this.productsCount = productsCount;\r\n this.productsCountOnDate = productsCountOnDate;\r\n if (!!this.productsCountOnDate && this.productsCountOnDate.Data && this.productsCountOnDate.Data.length > 0) {\r\n const productCounts = this.productsCountOnDate.Data.map((item: any) => item.ProductsCount);\r\n const onDate = this.productsCountOnDate.Data.map((item: any) => item.OnDate);\r\n const name = 'Products Count';\r\n this.drawGraph(productCounts, onDate, name);\r\n this.cdref.detectChanges();\r\n }\r\n });\r\n \r\n \r\n\r\n }\r\n }\r\n\r\n drawGraph(Data:any, onDate:any, name:string){\r\n const initialValue = Math.min(...Data);\r\n this.chartOptions = {\r\n series: [\r\n {\r\n name: name,\r\n data: Data?.map((count: any, index: number) => ({\r\n x: onDate[index],\r\n y: count\r\n }))\r\n }\r\n ],\r\n\r\n chart: {\r\n type: 'bar',\r\n sparkline: {\r\n enabled: true\r\n },\r\n barColor: \"#FFFFFF\",\r\n barSpacing: '2',\r\n barWidth: '4',\r\n height: '30',\r\n fillColor: 'transparent',\r\n },\r\n plotOptions: {\r\n bar: {\r\n horizontal: false,\r\n columnWidth: \"2\", \r\n endingShape: \"dot\",\r\n colors: {\r\n ranges: [{\r\n from: 0,\r\n to: Number.MAX_SAFE_INTEGER,\r\n color: '#FFFFFF'\r\n }]\r\n },\r\n distributed: false \r\n }\r\n },\r\n xaxis: {\r\n type: 'datetime',\r\n categories: onDate,\r\n labels: {\r\n show: false // Hide x-axis labels\r\n },\r\n },\r\n yaxis: {\r\n show: false,\r\n min: initialValue-1,\r\n },\r\n \r\n tooltip: {\r\n shared: true, \r\n intersect: false,\r\n enabled: true, // Ensure tooltips are enabled\r\n x: {\r\n formatter: function(val: any) {\r\n const date = new Date(val);\r\n const month = date.toLocaleString('default', { month: 'short' });\r\n const day = date.getDate();\r\n const year = date.getFullYear();\r\n return `Date:${month} ${day}, ${year}`;\r\n }\r\n },\r\n y: {\r\n formatter: function (val: any) {\r\n return + val;\r\n }\r\n }\r\n },\r\n\r\n markers: {\r\n size: 2,\r\n }\r\n };\r\n\r\n}\r\n\r\nopenCardRelatedPage(): void {\r\n this.routerLink = 'customer/products'\r\n this.router?.navigate([this.routerLink])\r\n}\r\n\r\nngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n}\r\n}\r\n\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n @if(!!purchaseOfseatsData)\r\n {\r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n }\r\n
\r\n
\r\n\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!purchaseOfseatsData && purchaseOfseatsData.length>0)\r\n {\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n {{PreviousMonthSeats}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {{CurrentMonthSeats}} \r\n \r\n
\r\n
\r\n \r\n @if(netPercentage!='0'){\r\n {{netPercentage}}% \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n @else if(purchaseOfseatsData.length<1 && !isLoading){ \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n","import { NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n@Component({\r\n selector: 'app-purchase-of-seats-card-customer',\r\n standalone: true,\r\n imports: [ NgFor,\r\n NgApexchartsModule,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgClass,CommonNoRecordComponent,\r\n NgbDropdownModule,\r\n SharedModule\r\n ],\r\n templateUrl: './purchase-of-seats-card-customer.component.html',\r\n styleUrl: './purchase-of-seats-card-customer.component.scss'\r\n})\r\nexport class PurchaseOfSeatsCardCustomerComponent implements OnInit, OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.tweleveMonths;\r\n entityName: string | null;\r\n recordID: string | null;\r\n private subscription: Subscription;\r\n purchaseOfseatsData: any[] = [];\r\n chartOptions: any;\r\n CurrentMonthSeats: number;\r\n PreviousMonthSeats: number;\r\n netPercentage: string;\r\n isLoading: boolean = false;\r\n downloadIconStatus: boolean = false;\r\n chartUtilities: ChartUtilities;\r\n\r\n durationUnits = [\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths\r\n ];\r\n\r\n constructor(\r\n private dashboardService: DashboardService,\r\n private cdr: ChangeDetectorRef,\r\n private loaderService: LoaderService,\r\n private _commonService :CommonService,\r\n private translateService:TranslateService\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n */\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading = true;\r\n this.entityName = this._commonService.entityName;\r\n this.recordID = this._commonService.recordId;\r\n this.getPurchaseofSeats();\r\n }\r\n\r\n /**\r\n * Sets the selected duration and fetches the purchase of seats data.\r\n * \r\n * @param duration The selected time period.\r\n */\r\n selectedDuration(duration: string): void {\r\n this.selectedTimePeriod = duration;\r\n this.getPurchaseofSeats();\r\n }\r\n\r\n /**\r\n * Fetches the purchase of seats data from the dashboard service.\r\n */\r\n getPurchaseofSeats(): void {\r\n this.subscription = this.dashboardService.getPurchaseOfSeats(this.entityName, this.recordID , this.selectedTimePeriod).subscribe((response: any) => {\r\n this.purchaseOfseatsData = response.Data || [];\r\n this.CurrentMonthSeats = this.purchaseOfseatsData[this.purchaseOfseatsData.length - 1]?.CurrentMonthSeats;\r\n this.PreviousMonthSeats = this.purchaseOfseatsData[this.purchaseOfseatsData.length - 1]?.PreviousMonthSeats;\r\n const result = ((this.CurrentMonthSeats - this.PreviousMonthSeats) / this.PreviousMonthSeats) * 100;\r\n this.netPercentage = isNaN(result) ? '0' : result.toFixed(2);\r\n console.log(result);\r\n console.log(this.netPercentage)\r\n const purchasedMonths = this.purchaseOfseatsData.map((item: any) => item.PurchasedMonth);\r\n const totalQuantities = this.purchaseOfseatsData.map((item: any) => item.TotalQuantity);\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n this.drawGraph(purchasedMonths, totalQuantities);\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n /**\r\n * Draws the graph with the provided data.\r\n * \r\n * @param purchasedMonths The months during which seats were purchased.\r\n * @param totalQuantities The total quantities of seats purchased.\r\n */\r\n drawGraph(purchasedMonths: string[], totalQuantities: number[]): void {\r\n this.chartOptions = {\r\n series: [\r\n {\r\n name: 'Seats Purchased',\r\n data: totalQuantities,\r\n fill: {\r\n colors: ['#0000ff'],\r\n type: 'solid',\r\n opacity: 0.3\r\n }\r\n }\r\n ],\r\n chart: {\r\n type: 'area',\r\n height: 450,\r\n zoom: {\r\n enabled: true\r\n },\r\n toolbar:{\r\n show:false\r\n }\r\n },\r\n dataLabels: {\r\n enabled: false // Disabling data labels to remove the square boxes\r\n },\r\n stroke: {\r\n curve: 'straight'\r\n },\r\n grid: {\r\n strokeDashArray: 7,\r\n opacity: 0.7,\r\n },\r\n xaxis: {\r\n categories: purchasedMonths,\r\n axisBorder: {\r\n show: false,\r\n },\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-xaxis-label\"\r\n }\r\n }\r\n },\r\n yaxis: {\r\n title: {\r\n text: this.translateService.instant('TRANSLATE.CUSTOMER_DASHBOARD_PURCHASE_OF_SEATS_TILE_TOOLTIP_TEXT'),\r\n style: {\r\n fontSize: '12px',\r\n }\r\n },\r\n labels: {\r\n style: {\r\n colors: \"#99A1B7\",\r\n fontSize: \"12px\",\r\n cssClass: \"apexcharts-yaxis-label\"\r\n }\r\n }\r\n },\r\n tooltip: {\r\n y: {\r\n formatter: function (val: any) {\r\n return val;\r\n }\r\n }\r\n },\r\n markers: {\r\n size: 2,\r\n }\r\n };\r\n }\r\n\r\n generatePNG(): void {\r\n\r\n const element = document.getElementById('site_statistics_Purchase_of_seats_customer');\r\n this.chartUtilities.generatePNG(element, 'Purchase-of-seats-customer');\r\n this.downloadIconStatus = false;\r\n\r\n }\r\n\r\n generateSVG(): void {\r\n const element = document.getElementById('site_statistics_Purchase_of_seats_customer');\r\n this.chartUtilities.generateSVG(element, 'Purchase-of-seats-customer');\r\n this.downloadIconStatus = false;\r\n }\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n\r\n get isNetPercentageValid(): boolean {\r\n return !isNaN(Number(this.netPercentage));\r\n}\r\n\r\n /**\r\n * Lifecycle hook that is called when the directive is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n @for(duration of durationUnits; track $index)\r\n {\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!skusData && skusData.Data && skusData.Data.length > 0){\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n\r\n @else if(!!skusData && skusData.Data ){\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { TopSkusDataResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { NgClass } from '@angular/common';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { ceil, max, min, range } from 'lodash';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n\r\n@Component({\r\n selector: 'app-top-skus-customer',\r\n standalone: true,\r\n imports: [ NgApexchartsModule,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgClass,\r\n NgbDropdownModule,\r\n SharedModule,CommonNoRecordComponent\r\n ],\r\n templateUrl: './top-skus-customer.component.html',\r\n styleUrl: './top-skus-customer.component.scss'\r\n})\r\nexport class TopSkusCustomerComponent implements OnInit, OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.tweleveMonths;\r\n chartOptions: any;\r\n private subscription: Subscription | null = null;\r\n entityName: string | null;\r\n recordID: string | null;\r\n skusData: Partial;\r\n isLoading: boolean = false;\r\n downloadIconStatus: boolean = false;\r\n chartUtilities: ChartUtilities;\r\n durationUnits = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n ];\r\n selectedTimePeriodDisplay: string = DurationUnits.tweleveMonths;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private dashboardService: DashboardService,\r\n private loaderService: LoaderService,\r\n private _commonService :CommonService\r\n\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n }\r\n\r\n ngOnInit(): void {\r\n // Start the loader\r\n this.loaderService.startLoading();\r\n this.entityName = this._commonService.entityName,\r\n this.recordID = this._commonService.recordId,\r\n \r\n this.getTopSkus();\r\n }\r\n\r\n /**\r\n * Update the selected time period and fetch the top SKUs data.\r\n * @param duration The selected duration.\r\n */\r\n selectedDuration(duration: string): void {\r\n this.selectedTimePeriodDisplay = duration;\r\n this.selectedTimePeriod = duration === 'All' ? null : duration;\r\n this.getTopSkus();\r\n }\r\n\r\n /**\r\n * Fetch the top SKUs data from the service.\r\n */\r\n getTopSkus(): void {\r\n this.subscription = this.dashboardService.getTopSkus(this.entityName, this.recordID, this.selectedTimePeriod).subscribe((data: Partial) => {\r\n if (data?.Data) {\r\n // Update the SKUs data\r\n let arr = data.Data;\r\n arr = arr.sort((a, b) => a.Seats- b.Seats);\r\n this.skusData = data;\r\n // Extract product names and seats for chart\r\n const productNames = arr.map(item => item.ProductName);\r\n const seats = arr.map(item => item.Seats);\r\n // Initialize the chart with the extracted data\r\n this.initChart(productNames, seats);\r\n\r\n // Detect changes to update the view\r\n this.cdr.detectChanges();\r\n }\r\n\r\n // Stop the loader\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n public generateData(xaxis:any, yaxis:any, size : any) {\r\n var i = 0;\r\n var series = [];\r\n var x = xaxis;//Math.floor(Math.random() * (700 - 1 + 1)) + 1;\r\n var y =yaxis;\r\n let z:any = parseInt(size);\r\n series.push([x, y, z]);\r\n return series;\r\n }\r\n\r\n /**\r\n * Initialize the chart with product names and seats data.\r\n * @param productNames The array of product names.\r\n * @param seats The array of seat numbers.\r\n */\r\n initChart(productNames: string[], seats: number[]): void {\r\n // Create an array of objects for the bubble chart data\r\n let bubbleData = [];\r\n let minValue = Math.max(...seats) / 2;\r\n let maxValue = Math.max(...seats);\r\n \r\n // Generate a sequence of bubble sizes based on the seat values\r\n let sizeArr = this.generateArithmeticSequence(minValue, maxValue, seats.length);\r\n\r\n const bubbleChartData = productNames.map((label, index) => {\r\n let xaxis = seats[index];\r\n let sizeOfBubble = sizeArr[index]*17;\r\n \r\n // Handle duplicate x-axis values by adjusting the x-axis position\r\n let idx = bubbleData.findIndex((x: any) => x === seats[index]);\r\n\r\n if (idx !== -1) {\r\n let incVal = bubbleData.filter((x: any) => x === xaxis).length;\r\n xaxis += incVal; // Adjust the xaxis to prevent overlap\r\n }\r\n\r\n // Push the current seat to bubbleData to track its position\r\n bubbleData.push(seats[index]);\r\n\r\n return {\r\n \"name\": label,\r\n \"data\": this.generateData(xaxis, seats[index], sizeOfBubble) // Generate data for the bubble\r\n };\r\n });\r\n\r\n // Dynamically scale the bubbles based on the maximum bubble size\r\n let maxBubbleSize = Math.max(...bubbleChartData.map(series => Math.max(...series.data.map((point: any) => point[2]))));\r\n\r\n // Calculate the total number of bubbles to adjust the zoom factor\r\n let bubbleCount = bubbleChartData.reduce((count, series) => count + series.data.length, 0);\r\n\r\n // Dynamically calculate the max axis range based on the max bubble size and distribution\r\n let axisMax = Math.ceil(maxValue * 1.2); // Slightly zoom out to ensure all bubbles fit\r\n\r\n // Update chart options with dynamic adjustments\r\n this.chartOptions = {\r\n redrawOnWindowResize: true,\r\n grid: {\r\n stroke: \"#b6b6b6\",\r\n strokeDashArray: 3 // Dashed lines\r\n },\r\n \"series\": bubbleChartData, // Set bubble data to the chart\r\n \"chart\": {\r\n \"height\": 500,\r\n \"type\": \"bubble\",\r\n \"offsetY\": -8,\r\n \"toolbar\": {\r\n \"show\": false\r\n },\r\n \"redrawOnWindowResize\": true\r\n },\r\n colors: [\r\n \"#FF5733\", \"#33FF57\", \"#3357FF\", \"#F333FF\", \"#FF33A1\",\r\n \"#33FFF3\", \"#FF8C33\", \"#8C33FF\", \"#8ef3ba\", \"#FF3333\"\r\n ],\r\n \"xaxis\": {\r\n \"labels\": {\r\n \"style\": {\r\n \"colors\": \"#99A1B7\",\r\n \"fontSize\": \"12px\",\r\n \"cssClass\": \"apexcharts-xaxis-label\",\r\n },\r\n min: 0,\r\n max: axisMax, // Dynamically adjusted based on bubble distribution\r\n show: false\r\n },\r\n lines: {\r\n show: true,\r\n dashArray: 0 // Dashed lines\r\n },\r\n min: 0,\r\n max: axisMax, // Dynamically adjusted based on bubble distribution\r\n },\r\n \"yaxis\": {\r\n \"labels\": {\r\n \"style\": {\r\n \"colors\": \"#99A1B7\",\r\n \"fontSize\": \"12px\",\r\n \"cssClass\": \"apexcharts-yaxis-label\"\r\n },\r\n min: 0,\r\n max: axisMax, // Dynamically adjusted based on bubble distribution\r\n },\r\n min: 0,\r\n max: axisMax, // Dynamically adjusted based on bubble distribution\r\n },\r\n tooltip: {\r\n \"custom\": function({ series, seriesIndex, dataPointIndex, w }) {\r\n const dataPoint = series[seriesIndex][dataPointIndex];\r\n return `

\r\n ${w.config.series[seriesIndex].name} : \r\n ${dataPoint}\r\n

`;\r\n }\r\n },\r\n \"dataLabels\": {\r\n \"enabled\": false\r\n },\r\n \"fill\": {\r\n \"type\": \"gradient\"\r\n },\r\n \"responsive\": [\r\n {\r\n \"breakpoint\": 1500,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n }\r\n }\r\n },\r\n {\r\n \"breakpoint\": 1050,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n },\r\n \"legend\": {\r\n \"show\": false,\r\n \"fill\": {\r\n \"type\": \"gradient\"\r\n }\r\n }\r\n }\r\n },\r\n {\r\n \"breakpoint\": 320,\r\n \"options\": {\r\n \"chart\": {\r\n \"height\": 300\r\n }\r\n }\r\n }\r\n ]\r\n };\r\n}\r\n\r\n\r\n\r\n\r\n generateTOP10SKus(){\r\n this.downloadIconStatus = false;\r\n\r\n let rows = [];\r\n\r\n this.skusData.Data.map(e=>{\r\n rows.push({'Product Name':e.ProductName, 'Seats':e.Seats})\r\n\r\n })\r\n\r\n\r\n this.chartUtilities.generateCSV(rows, 'Top-10-skus');\r\n }\r\n\r\n\r\n generateALLSKus() {\r\n this.downloadIconStatus = false;\r\n this.subscription = this.dashboardService.getAllSkusCustomer(this.entityName,this.recordID, this.selectedTimePeriodDisplay,this.selectedTimePeriod).subscribe((data: Partial) => {\r\n const allSkusDATA =data.Data \r\n this.chartUtilities.generateCSV(allSkusDATA, 'All-skus');\r\n });\r\n\r\n }\r\n\r\n toggleButton() {\r\n this.downloadIconStatus = !this.downloadIconStatus\r\n }\r\n\r\n generateArithmeticSequence(min, max, length) {\r\n // Calculate the common difference\r\n const commonDifference = (max - min) / (length - 1);\r\n // Generate the sequence\r\n const sequence = Array.from({ length }, (_, i) => min + i * commonDifference);\r\n return sequence;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Unsubscribe from the subscription to avoid memory leaks\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","@if (showTermsAndConditionsAcceptanceLog) {\r\n
\r\n
\r\n
\r\n

\r\n \r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n @for(TermsAndCondition of userTermsAndConditionLogs; track $index){\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n }\r\n\r\n @if (userTermsAndConditionLogs.length === 0 && !isGridDataLoading) {\r\n \r\n \r\n \r\n }\r\n @if (isGridDataLoading) {\r\n \r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {{ TermsAndCondition.EmailAddress }}\r\n
\r\n
\r\n \r\n @if (TermsAndCondition.AgreementType == 'PartnerAgreement') { }\r\n @if (TermsAndCondition.AgreementType == 'EzidebitAgreement') {}\r\n @if (TermsAndCondition.AgreementType == 'MicrosoftCloudAgreement') {}\r\n \r\n @if (TermsAndCondition.AgreementType == 'PartnerAgreement' || TermsAndCondition.AgreementType == 'EzidebitAgreement' || TermsAndCondition.AgreementType == 'MicrosoftCloudAgreement') {
}\r\n {{ TermsAndCondition.AgreementURL }}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{formatDate(TermsAndCondition.CreateDate) }}\r\n \r\n \r\n {{ TermsAndCondition.Time\r\n }}\r\n \r\n \r\n {{\r\n TermsAndCondition.UserIPAddress }}\r\n
\"{{
\r\n
\r\n
\r\n
\r\n
\r\n}","import { AfterViewInit, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { NgClass } from '@angular/common';\r\nimport { DatePipe } from '@angular/common';\r\n\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\n\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { GetUserTermsAndConditionLogsByCustomerC3IdAndEmail } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { AppSettingsService } from 'src/app/services/app-settings.service';\r\nimport { C3DatePipe } from 'src/app/shared/pipes/dateTimeFilter.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'app-terms-and-conditions-accepted-list-customer',\r\n standalone: true,\r\n imports: [NgApexchartsModule,\r\n NgClass,\r\n TranslationModule\r\n ],\r\n templateUrl: './terms-and-conditions-accepted-list-customer.component.html',\r\n styleUrl: './terms-and-conditions-accepted-list-customer.component.scss',\r\n providers: [DatePipe]\r\n})\r\nexport class TermsAndConditionsAcceptedListCustomerComponent implements OnInit {\r\n userTermsAndConditionLogs:Partial [];\r\n showTermsAndConditionsAcceptanceLog = false;\r\n isGridDataLoading = false;\r\n\r\n constructor(private dashboardWidgetsService: DashboardService,\r\n private datePipe: DatePipe,\r\n private appSettingsService:AppSettingsService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.getUserTermsAndConditionLogs();\r\n }\r\n\r\n getUserTermsAndConditionLogs(): void {\r\n this.isGridDataLoading = true;\r\n\r\n this.dashboardWidgetsService.getUserTermsAndConditionLogs().subscribe(\r\n (response ) => {\r\n this.userTermsAndConditionLogs = response.Data;\r\n if (this.userTermsAndConditionLogs ) {\r\n this.showTermsAndConditionsAcceptanceLog = this.userTermsAndConditionLogs[0].ShowTermsAndConditionsAcceptanceLog;\r\n }\r\n this.isGridDataLoading = false;\r\n },\r\n error => {\r\n console.error('Error fetching data:', error);\r\n this.isGridDataLoading = false;\r\n }\r\n );\r\n }\r\n\r\n formatDate(date: Date): string {\r\n var datePipe = new C3DatePipe(this.appSettingsService);\r\n return datePipe.transform(date);\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n @if(!!productsData && productsData.length>0){\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n }\r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n @if(!!isLoading){\r\n \r\n }\r\n @else if(!!productsData && productsData.length>0){\r\n
\r\n @for(product of productsData; track $index){\r\n
\r\n
\r\n {{product?.ProductName | formatforinitials\r\n }}\r\n
\r\n
\r\n \r\n {{product?.ProductName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{product?.ProviderEffectiveEndDate | c3Date}}\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n }\r\n @else if(productsData.length<1 && !isLoading){
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
","import { DatePipe, NgClass, NgFor } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { RenewalDateTopFiveProducts, RevenueTopProductData } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { FormatforInitialsPipe } from 'src/app/shared/pipes/format-initial.pipe';\r\nimport { MegaNumberPipe } from 'src/app/shared/pipes/meganumber.pipe';\r\nimport { ChartUtilities } from 'src/app/shared/utilities/chart-utilities';\r\nimport { LoaderComponent } from '../../loader/loader.component';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { NgbDropdownModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { DurationUnits } from 'src/app/modules/home/dashboard-widgets/models/widgets.model';\r\nimport { CustomDatePipe } from 'src/app/shared/pipes/CustomDate-time.pipe';\r\nimport { SharedModule } from 'src/app/_c3-lib/shared/shared.module';\r\nimport { AppSettingsService } from 'src/app/services/app-settings.service';\r\nimport { C3CommonModule } from 'src/app/shared/c3-common-module/c3-common-module.module';\r\nimport { CommonNoRecordComponent } from '../../common-no-record/common-no-record.component';\r\n\r\n\r\ninterface SearchParams {\r\n EntityName: string;\r\n RecordId: string | null;\r\n PageCount: number;\r\n PageIndex: number;\r\n SortColumn: string;\r\n SortOrder: string;\r\n}\r\n@Component({\r\n selector: 'app-renewal-date-top-five-products',\r\n standalone: true,\r\n imports: [ NgClass,\r\n NgFor,CommonNoRecordComponent,\r\n FormatforInitialsPipe,\r\n MegaNumberPipe,\r\n LoaderComponent,\r\n TranslationModule,\r\n NgbDropdownModule,\r\n DatePipe,\r\n SharedModule,\r\n NgbTooltip,\r\n C3CommonModule,\r\n \r\n ],\r\n templateUrl: './renewal-date-top-five-products.component.html',\r\n styleUrl: './renewal-date-top-five-products.component.scss'\r\n})\r\nexport class RenewalDateTopFiveProductsComponent implements OnInit, OnDestroy {\r\n selectedTimePeriod: string = DurationUnits.twelveBillingPeriod;\r\n downloadIconStatus: boolean = false;\r\n private subscription: Subscription | undefined;\r\n entityName: string | null = null;\r\n productsData: RenewalDateTopFiveProducts[] = [];\r\n chartUtilities: ChartUtilities;\r\n isLoading: boolean = false;\r\n durationUnits: string[] = [\r\n DurationUnits.all,\r\n DurationUnits.threeMonths,\r\n DurationUnits.sixMonths,\r\n DurationUnits.tweleveMonths,\r\n DurationUnits.lastBillingPeriod,\r\n DurationUnits.threeBillingPeriod,\r\n DurationUnits.sixBillingPeriod,\r\n DurationUnits.twelveBillingPeriod\r\n ];\r\n dateFormat:any = null;\r\n // EntityName: this._commonService.entityName,\r\n //RecordId: this._commonService.recordId,\r\n\r\n constructor(\r\n private dashboardservice: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private loaderService: LoaderService,\r\n private _commonService: CommonService,\r\n private _appSettingsService:AppSettingsService\r\n\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n this.dateFormat = this._appSettingsService.$rootScope.dateFormat;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loaderService.startLoading();\r\n this.isLoading = true;\r\n \r\n this.getRenewalCustomerProducts();\r\n // EntityName: this._commonService.entityName,\r\n //RecordId: this._commonService.recordId,\r\n }\r\n\r\n /**\r\n * Fetches revenue top products data based on the selected time period.\r\n * @returns {void}\r\n */\r\n \r\n\r\n \r\n getRenewalCustomerProducts() {\r\n const searchParams: SearchParams = {\r\n EntityName: this._commonService.entityName,\r\n RecordId: this._commonService.recordId,\r\n PageCount: 4,\r\n PageIndex: 1,\r\n SortColumn: 'RenewsOn',\r\n SortOrder: 'ASC'\r\n };\r\n \r\n this.subscription = this.dashboardservice.getcustomerRenewalProduct(searchParams).subscribe((data:any) => {\r\n if (data?.Data) {\r\n this.productsData = data.Data;\r\n this.cdref.detectChanges();\r\n }\r\n var a= this.productsData;\r\n this.loaderService.stopLoading();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the selected time period and fetches data accordingly.\r\n * @param {string} duration - The selected duration.\r\n * @returns {void}\r\n */\r\n selectedDuration(duration: string): void {\r\n this.selectedTimePeriod = duration;\r\n this.getRenewalCustomerProducts();\r\n }\r\n\r\n /**\r\n * Toggles the status of the download icon.\r\n * @returns {void}\r\n */\r\n toggleButton(): void {\r\n this.downloadIconStatus = !this.downloadIconStatus;\r\n }\r\n\r\n /**\r\n * Generates a PNG image of the chart.\r\n * @returns {void}\r\n */\r\n generatePNG(): void {\r\n this.downloadIconStatus = false;\r\n const element = document.getElementById('five-products-by-revenue-png1');\r\n if (element) {\r\n this.chartUtilities.generatePNG(element, 'Products-by-renewal-date');\r\n }\r\n }\r\n\r\n /**\r\n * Generates a CSV file of the top products data.\r\n * @returns {void}\r\n */\r\n // generateCSV(): void {\r\n // this.downloadIconStatus = false;\r\n // this.chartUtilities.generateCSV(this.productsData, 'top-products-byrevenue');\r\n // }\r\n\r\n generateSVG(): void {\r\n\r\n const element = document.getElementById('five-products-by-revenue-png1');\r\n this.chartUtilities.generateSVG(element, 'Products-by-renewal-date');\r\n this.downloadIconStatus = false;\r\n\r\n\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n\r\n @if(cardType === cardsTypes.office365){\r\n \r\n \r\n }\r\n @else if(cardType === cardsTypes.office365Reports){\r\n \r\n \r\n }\r\n @else{\r\n \r\n \r\n }\r\n\r\n
\r\n\r\n \r\n @if(cardType === cardsTypes.office365){\r\n \r\n }\r\n @else if(cardType === cardsTypes.office365Reports){\r\n \r\n }\r\n @else{\r\n \r\n }\r\n \r\n
\r\n\r\n
\r\n @if(cardType === cardsTypes.office365){\r\n \r\n }\r\n @else if(cardType === cardsTypes.office365Reports){\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n @else{\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n\r\n\r\n
\r\n
","import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { CardsType, PortletTargetActions } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\n\r\n\r\n@Component({\r\n selector: 'app-microsoft-cards-dashboard-customer',\r\n standalone: true,\r\n imports: [NgClass,\r\n TranslationModule],\r\n templateUrl: './microsoft-cards-dashboard-customer.component.html',\r\n styleUrl: './microsoft-cards-dashboard-customer.component.scss'\r\n})\r\nexport class MicrosoftCardsDashboardCustomerComponent implements OnInit,OnDestroy {\r\n @Input() widgetKey?: string;\r\n bgColor: string;\r\n office365BgColor = 'bg-success ';\r\n office365UsageBgColor = 'bg-danger ';\r\n azurePortalBgColor = 'bg-grey';\r\n cardType: string;\r\n office365Url = 'https://portal.office.com/adminportal/home';\r\n office365ReportsUrl = 'https://portal.office.com/AdminPortal/Home#/reportsUsage';\r\n azurePortalUrl = 'https://portal.azure.com/';\r\n @Input() routerLink?:string;\r\n private subscription: Subscription; \r\n entityName: string | null;\r\n portletTargetAction = PortletTargetActions;\r\n cardsTypes = CardsType;\r\n constructor(\r\n private router: Router,\r\n ){\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.widgetKey === this.portletTargetAction.office365) {\r\n this.bgColor = this.office365BgColor;\r\n this.cardType = this.cardsTypes.office365;\r\n \r\n }\r\n else if (this.widgetKey === this.portletTargetAction.office365UsageReports) {\r\n this.bgColor = this.office365UsageBgColor;\r\n this.cardType = this.cardsTypes.office365Reports;\r\n \r\n }\r\n else if (this.widgetKey === this.portletTargetAction.azurePortal) {\r\n this.bgColor = this.azurePortalBgColor;\r\n this.cardType = this.cardsTypes.azurePortal; \r\n\r\n }\r\n }\r\n openCardRelatedPage(): void {\r\n this.router?.navigate([this.routerLink])\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n","@if(isShow){\r\n
\r\n
\r\n @for(invoice of invoices; track $index){\r\n
    \r\n
  • \r\n \r\n\r\n
  • \r\n
\r\n }\r\n
    \r\n \r\n
\r\n
\r\n
\r\n}","import { Type } from '@angular/core';\r\n\r\n// Example import, adjust as per your actual components\r\nimport { RevenueCostCategoryComponent } from '../../standalones/cards/revenue-cost-category/revenue-cost-category.component';\r\nimport { SeatsPurchasedTopProductsComponent } from '../../standalones/cards/seats-purchased-top-products/seats-purchased-top-products.component';\r\nimport { RevenueTopProductsComponent } from '../../standalones/cards/revenue-top-products/revenue-top-products.component';\r\nimport { TopSkusComponent } from '../../standalones/cards/top-skus/top-skus.component';\r\nimport { PurchaseOfSeatsCardComponent } from '../../standalones/cards/purchase-of-seats-card/purchase-of-seats-card.component';\r\nimport { TopCustomersComponent } from '../../standalones/cards/top-customers/top-customers.component';\r\nimport { RevenueVsCostComponent } from '../../standalones/cards/revenue-vs-cost/revenue-vs-cost.component';\r\nimport { PastDuesComponent } from '../../standalones/cards/past-dues/past-dues.component';\r\nimport { AccountsReceivableComponent } from '../../standalones/cards/accounts-receivable/accounts-receivable.component';\r\nimport { ProfabilityCardComponent } from '../../standalones/cards/profability-card/profability-card.component';\r\nimport { StatCardComponent } from '../../standalones/cards/stat-card/stat-card.component';\r\nimport { StatWithGraphCardComponent } from '../../standalones/cards/stat-with-graph-card/stat-with-graph-card.component';\r\nimport { StatCardCustomerComponent } from '../../standalones/cards/stat-card-customer/stat-card-customer.component';\r\nimport { StatWithGraphCardCustomerComponent } from '../../standalones/cards/stat-with-graph-card-customer/stat-with-graph-card-customer.component';\r\nimport { PurchaseOfSeatsCardCustomerComponent } from '../../standalones/cards/purchase-of-seats-card-customer/purchase-of-seats-card-customer.component';\r\nimport { TopSkusCustomerComponent } from '../../standalones/cards/top-skus-customer/top-skus-customer.component';\r\nimport { TermsAndConditionsAcceptedListCustomerComponent } from '../../standalones/cards/terms-and-conditions-accepted-list-customer/terms-and-conditions-accepted-list-customer.component';\r\nimport { RenewalDateTopFiveProductsComponent } from '../../standalones/cards/renewal-date-top-five-products/renewal-date-top-five-products.component';\r\nimport { MicrosoftCardsDashboardCustomerComponent } from '../../standalones/cards/microsoft-cards-dashboard-customer/microsoft-cards-dashboard-customer.component';\r\nimport { InvoiceCardsDashboardCustomerComponent } from '../../standalones/cards/invoice-cards-dashboard-customer/invoice-cards-dashboard-customer.component';\r\n\r\nexport const WidgetMap = new Map>([\r\n ['CARD_REVENUE_VERSUS_COST_BY_CATEGORY', RevenueCostCategoryComponent],\r\n ['CARD_TOP_FIVE_PRODUCTS_BY_SEATS_PURCHASED', SeatsPurchasedTopProductsComponent],\r\n ['CARD_TOP_FIVE_PRODUCTS_BY_REVENUE', RevenueTopProductsComponent],\r\n ['CARD_COUNTS_BY_SKU', TopSkusComponent],\r\n ['CARD_PURCHASE_OF_SEATS', PurchaseOfSeatsCardComponent],\r\n ['CARD_VALUED_CUSTOMERS', TopCustomersComponent],\r\n ['CARD_REVENUE_VS_COST', RevenueVsCostComponent],\r\n ['CARD_SEATS_COUNT', StatWithGraphCardComponent],\r\n ['CARD_PAST_DUES', PastDuesComponent],\r\n ['CARD_ACCOUNTS_RECEIVABLE', AccountsReceivableComponent],\r\n ['CARD_PROFITABILITY', ProfabilityCardComponent],\r\n ['CARD_RESELLER_COUNT', StatCardComponent],\r\n ['CARD_CUSTOMER_COUNT', StatCardComponent],\r\n ['CARD_SUBSCRIPTIONS_COUNT', StatWithGraphCardComponent],\r\n ['CARD_SITES_COUNT', StatCardCustomerComponent],\r\n ['CARD_DEPARTMENTS_COUNT', StatCardCustomerComponent],\r\n ['CARD_CUSTOMER_SEATS_COUNT', StatWithGraphCardCustomerComponent],\r\n ['CARD_PRODUCTS_COUNT', StatWithGraphCardCustomerComponent], \r\n ['CARD_PURCHASE_OF_SEATS_BY_CUSTOMER', PurchaseOfSeatsCardCustomerComponent], \r\n ['CARD_COUNTS_BY_SKU_PURCHASED_BY_CUSTOMER', TopSkusCustomerComponent], \r\n ['CARD_TERMS_AND_CONDITIONS_ACCEPTED_LIST', TermsAndConditionsAcceptedListCustomerComponent],\r\n ['CARD_TOP_FIVE_PRODUCTS_BY_RENEWAL_DATE', RenewalDateTopFiveProductsComponent],\r\n ['CARD_OFFICE_365', MicrosoftCardsDashboardCustomerComponent],\r\n ['CARD_OFFICE365_USAGE_REPORTS', MicrosoftCardsDashboardCustomerComponent],\r\n ['CARD_AZURE_PORTAL', MicrosoftCardsDashboardCustomerComponent],\r\n ['CARD_USERS_COUNT', StatCardCustomerComponent],\r\n ['CARD_INVOICE_AMOUNT', InvoiceCardsDashboardCustomerComponent]\r\n \r\n \r\n \r\n\r\n]);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { GetCustomerInvoiceForDashboard, GetCustomerInvoiceForDashboardResponse } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\n\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { TranslationModule } from 'src/app/modules/i18n';\r\nimport { CurrencyPipe } from 'src/app/shared/pipes/currency.pipe';\r\nimport { C3DatePipe } from 'src/app/shared/pipes/dateTimeFilter.pipe';\r\n\r\n@Component({\r\n selector: 'app-invoice-cards-dashboard-customer',\r\n standalone: true,\r\n imports: [TranslationModule, C3DatePipe, CurrencyPipe],\r\n templateUrl: './invoice-cards-dashboard-customer.component.html',\r\n styleUrl: './invoice-cards-dashboard-customer.component.scss'\r\n})\r\nexport class InvoiceCardsDashboardCustomerComponent implements OnInit {\r\n invoices:Partial [];\r\n isShow: boolean = false;\r\n constructor(private router:Router, private dashboardService: DashboardService) {}\r\n routerLink : String;\r\n\r\n ngOnInit(): void {\r\n this.getCustomerInvoice();\r\n }\r\n\r\n getCustomerInvoice(): void {\r\n this.dashboardService.getCustomerInvoice().subscribe((response:Partial) => {\r\n this.invoices = response.Data;\r\n this.isShow = this.invoices && this.invoices.length > 0;\r\n });\r\n }\r\n\r\n redirectToPage(){\r\n this.routerLink = 'home/invoices';\r\n this.router?.navigate([this.routerLink])\r\n console.log(this.routerLink)\r\n }\r\n\r\n}\r\n","import { Injectable, ComponentFactoryResolver, ViewContainerRef, Type } from '@angular/core';\r\nimport { WidgetMap } from './widget-map';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WidgetLoaderService {\r\n constructor(private resolver: ComponentFactoryResolver) { }\r\n\r\n loadComponent(viewContainerRef: ViewContainerRef, componentType: Type, key: string) {\r\n const factory = this.resolver.resolveComponentFactory(componentType);\r\n viewContainerRef.clear();\r\n const componentRef = viewContainerRef.createComponent(factory);\r\n componentRef.instance.widgetKey = key;\r\n }\r\n\r\n getComponentType(key: string): Type | undefined {\r\n return WidgetMap.get(key);\r\n }\r\n}\r\n","import { ComponentFactoryResolver, Directive, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { WidgetLoaderService } from './widget-loader.service';\r\n@Directive({\r\n selector: '[appWidgetLoader]'\r\n})\r\nexport class WidgetLoaderDirective implements OnInit {\r\n @Input('appWidgetLoader') key!: string;\r\n\r\n constructor(\r\n private viewContainerRef: ViewContainerRef,\r\n private widgetLoaderService: WidgetLoaderService,\r\n private cfr: ComponentFactoryResolver\r\n\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n const componentType = this.widgetLoaderService.getComponentType(this.key);\r\n if (componentType) {\r\n this.widgetLoaderService.loadComponent(this.viewContainerRef, componentType, this.key);\r\n }\r\n }\r\n}\r\n","@if (!isMandateProfile){\r\n
\r\n @for(section of dashboardCards?.Sections; track $index)\r\n {\r\n
\r\n @for(column of section.PortletColumns; track $index){ \r\n @if(column.Show){\r\n \r\n
\r\n @for (portlet of getPortletsBySectionAndColumn(section, column); track $index) {\r\n @defer (on viewport) {\r\n
\r\n } @placeholder {\r\n \r\n }\r\n }\r\n
\r\n }\r\n }\r\n\r\n
\r\n }\r\n
\r\n}","import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Observable, Subject, Subscription, first, forkJoin, of, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { BillingPeriodData, CardsType, CustomerCardData, DashboardCardsData, PortletColumn, PortletTargetActions, Section } from 'src/app/modules/home/dashboard-widgets/models/dashboard.model';\r\nimport { DashboardService } from 'src/app/modules/home/dashboard-widgets/services/dashboard.service';\r\nimport { CommonService } from 'src/app/services/common.service';\r\nimport { LoaderService } from 'src/app/services/loader.service';\r\nimport { IsMandateFileResponse } from 'src/app/shared/models/menus.model';\r\nimport { BannerNotificationAddComponent } from '../../partner/banner-notification/components/banner-notification-add/banner-notification-add.component';\r\nimport { BannerNotificationService } from '../../partner/banner-notification/Service/banner-notification.service';\r\nimport { BannerService } from 'src/app/services/banner.service';\r\nimport { PageMode } from 'src/app/shared/models/enums/enums';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { EngageService } from '../../partner/engage/service/engage.service';\r\nimport { AppSettingsService } from 'src/app/services/app-settings.service';\r\nimport { NotifierService } from 'src/app/services/notifier.service';\r\nimport { UserContextService } from 'src/app/services/user-context.service';\r\n\r\n@Component({\r\n selector: 'app-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit, OnDestroy {\r\n entityName: string | null;\r\n isMandateProfile: boolean;\r\n portletsActions = PortletTargetActions;\r\n dashboardCards: Partial;\r\n\r\n notifier$ = new Subject();\r\n private _router: any;\r\n\r\n constructor(\r\n private dashboardService: DashboardService,\r\n private cdref: ChangeDetectorRef,\r\n private commonService: CommonService,\r\n private translateService: TranslateService,\r\n private _bannerService: BannerService,\r\n private notifier: NotifierService,\r\n private appSettingService: AppSettingsService,\r\n private _bannerNotification: BannerNotificationService,\r\n private _engageService: EngageService,\r\n private userContext: UserContextService,\r\n\r\n ) { }\r\n\r\n /**\r\n * Component Ng OnInit\r\n */\r\n ngOnInit(): void {\r\n this.entityName = this.commonService.entityName;\r\n\r\n this.appSettingService.getUserContext().pipe(first()).subscribe((res: any) => {\r\n if (res.Data == undefined || res.Data == null || res.Data.length <= 0) {\r\n this.userNotFound();\r\n }\r\n })\r\n this.appSettingService.getAvailableEnvironments().pipe(first()).subscribe((res: any) => {\r\n if (res.Data == undefined || res.Data == null || res.Data.length <= 0) {\r\n this.userNotFound();\r\n }\r\n })\r\n\r\n // get the dashboard data\r\n this.handleDashboardCardData();\r\n this.renderbanner();\r\n this.loadEngageNotification();\r\n }\r\n\r\n userNotFound() {\r\n let title = this.translateService.instant('TRANSLATE.USER_DETAILS_NOT_FOUND_HEADER');\r\n let body = this.translateService.instant('TRANSLATE.USER_DETAILS_NOT_FOUND_BODY');\r\n this.notifier.alert({ title: title, text: body }).then((result: { isConfirmed: any }) => {\r\n this.userContext.logOut();\r\n });\r\n }\r\n\r\n /**\r\n * Retrieve the dashboard data\r\n */\r\n handleDashboardCardData(): void {\r\n this.dashboardService.GetIsMandateProfile()\r\n .pipe(\r\n takeUntil(this.notifier$),\r\n\r\n switchMap((data: Partial) => {\r\n this.isMandateProfile = data?.Data?.IsMandateProfile != null ? data.Data.IsMandateProfile : true;\r\n return !this.isMandateProfile ? this.dashboardService.getDashboardCards() : of(null);\r\n })\r\n )\r\n .subscribe((res: any) => {\r\n this.dashboardCards = res?.Data;\r\n if (this.dashboardCards?.Sections) {\r\n this.dashboardCards.Sections.forEach((section: Section) => {\r\n section.PortletColumns = section.PortletColumns.map((columnData: PortletColumn) => ({\r\n ID: columnData?.ID || 0,\r\n ColumnSizeClass: columnData?.ColumnSizeClass || '',\r\n PortletSectionID: columnData?.PortletSectionID || 0,\r\n DisplayOrder: columnData?.DisplayOrder || 0,\r\n Show: true\r\n }));\r\n });\r\n this.cdref.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param section\r\n * @param column\r\n * @returns\r\n */\r\n getPortletsBySectionAndColumn(section: Section, column: PortletColumn): any[] {\r\n const portlets = this.dashboardCards?.Portlets?.filter((item: any) => {\r\n return (item.PortletSectionID === section?.ID &&\r\n item.ColumnPosition === (column.DisplayOrder - 1));\r\n });\r\n\r\n //KB: If the Portlets count is zero, mark the column as hidden.\r\n column.Show = (portlets != null && portlets.length > 0);\r\n return portlets || [];\r\n }\r\n\r\n renderbanner() {\r\n this._bannerNotification.loadBanner('Dashboard').subscribe((response: any) => {\r\n if (response.Status === 'Success' && response.Data !== null && response.Data?.[0]?.MessageBody) {\r\n const messageBody = this.translateService.instant(response.Data[0]?.MessageBody);\r\n const messageType = response.Data[0]?.MessageType;\r\n this._bannerService.show(messageType, messageBody)\r\n }\r\n })\r\n }\r\n\r\n loadEngageNotification() {\r\n let pageName: string;\r\n if (this.entityName === 'Partner' || this.entityName === 'Reseller') {\r\n pageName = \"PartnerDashboard\";\r\n } else if (this.entityName === 'Customer') {\r\n pageName = \"CustomerDashboard\";\r\n }\r\n this._engageService.engageNotification(pageName).subscribe((response: any) => {\r\n if (response.Status === 'Success' && response.Data !== null && response.Data.length > 0) {\r\n let loadEngageNotification = response.Data[0];\r\n\r\n const data = {\r\n title: loadEngageNotification.Title,\r\n description: loadEngageNotification.BodyText,\r\n btnColor: loadEngageNotification.BtnColor,\r\n btnText: loadEngageNotification.BtnText,\r\n btnTextColor: loadEngageNotification.BtnTextColor,\r\n btnUrl: loadEngageNotification.ButtonUrl\r\n }\r\n\r\n this._bannerService.showWithTemplate(loadEngageNotification.BackgroundTemplate, data);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Component Destroyed\r\n */\r\n ngOnDestroy(): void {\r\n this.notifier$?.next(null);\r\n this.notifier$?.complete;\r\n this._bannerService.clear();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { DashboardComponent } from './dashboard.component';\r\nimport { StatCardComponent } from '../../standalones/cards/stat-card/stat-card.component';\r\nimport { StatWithGraphCardComponent } from '../../standalones/cards/stat-with-graph-card/stat-with-graph-card.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { ProfabilityCardComponent } from '../../standalones/cards/profability-card/profability-card.component';\r\nimport { PurchaseOfSeatsCardComponent } from '../../standalones/cards/purchase-of-seats-card/purchase-of-seats-card.component';\r\nimport { RevenueVsCostComponent } from '../../standalones/cards/revenue-vs-cost/revenue-vs-cost.component';\r\nimport { TopSkusComponent } from '../../standalones/cards/top-skus/top-skus.component';\r\nimport { SeatsPurchasedTopProductsComponent } from '../../standalones/cards/seats-purchased-top-products/seats-purchased-top-products.component';\r\nimport { RevenueTopProductsComponent } from '../../standalones/cards/revenue-top-products/revenue-top-products.component';\r\nimport { TopCustomersComponent } from '../../standalones/cards/top-customers/top-customers.component';\r\nimport { PastDuesComponent } from '../../standalones/cards/past-dues/past-dues.component';\r\nimport { RevenueCostCategoryComponent } from '../../standalones/cards/revenue-cost-category/revenue-cost-category.component';\r\nimport { AccountsReceivableComponent } from '../../standalones/cards/accounts-receivable/accounts-receivable.component';\r\nimport { WidgetLoaderDirective } from '../dashboard-widgets/widget-loader.directive';\r\nimport { LoaderComponent } from '../../standalones/loader/loader.component';\r\nimport { StatCardCustomerComponent } from '../../standalones/cards/stat-card-customer/stat-card-customer.component';\r\nimport { StatWithGraphCardCustomerComponent } from '../../standalones/cards/stat-with-graph-card-customer/stat-with-graph-card-customer.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n DashboardComponent,\r\n WidgetLoaderDirective\r\n ],\r\n imports: [\r\n CommonModule,\r\n StatCardComponent,\r\n TranslateModule,\r\n StatWithGraphCardComponent,\r\n ProfabilityCardComponent,\r\n PurchaseOfSeatsCardComponent,\r\n RevenueVsCostComponent,\r\n SeatsPurchasedTopProductsComponent,\r\n TopSkusComponent,\r\n RevenueTopProductsComponent,\r\n TopCustomersComponent,\r\n PastDuesComponent,\r\n RevenueCostCategoryComponent,\r\n AccountsReceivableComponent,\r\n LoaderComponent,\r\n StatCardCustomerComponent,\r\n StatWithGraphCardCustomerComponent,\r\n RouterModule.forChild([\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n },\r\n ]),\r\n ],\r\n})\r\nexport class DashboardModule {}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatforinitials',\r\n standalone: true\r\n})\r\nexport class FormatforInitialsPipe implements PipeTransform {\r\n transform(value: string | undefined): string {\r\n if (!value) return '';\r\n\r\n const words = value.split(' ');\r\n if (words.length === 1) {\r\n return (words[0].charAt(0) + words[0].charAt(1)).toUpperCase();\r\n } else {\r\n return (words[0].charAt(0) + words[1].charAt(0)).toUpperCase();\r\n }\r\n }\r\n}\r\n"],"x_google_ignoreList":[]}