{"version":3,"file":"6636.46c9bcfc413b11f4.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","translationService","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","map","item","translateVariables","ngOnInit","startLoading","getCustomersAndResellersByEntity","subscribe","Data","length","customer","EntityName","C3Id","instant","_","getCategoryData","stopLoading","getRevenueVsCostData","ngOnDestroy","unsubscribe","duration","category","onCustomerChange","getRevenueVersusCostByCategory","data","chartData","billedAmountSeries","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","i5","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","i6","Select2Module","i7","LoaderComponent","TranslationModule","NgClass","CommonNoRecordComponent","NgbDropdownModule","i8","SharedModule","i9","RouterModule","i10","NgSelectModule","i11","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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n this.billingPeriods = this.billingPeriods?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedBillingPeriod = this.translationService.translateVariables(this.selectedBillingPeriod);\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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n){\r\nthis.chartUtilities = new ChartUtilities();\r\nthis.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n})\r\nthis.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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 == this.translationService.translateVariables(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, TranslationService } 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 private translationService: TranslationService\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n this.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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 == this.translationService.translateVariables(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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n this.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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 == this.translationService.translateVariables(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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n ) {\r\n this.chartUtilities = new ChartUtilities();\r\n this.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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 == this.translationService.translateVariables(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(this._appService);\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, TranslationService } 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\nimport { TranslateService } from '@ngx-translate/core';\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 private translationService: TranslationService,\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n this.billingPeriods = this.billingPeriods.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n });\r\n this.selectedBillingPeriod = this.translationService.translateVariables(this.selectedBillingPeriod)\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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n this.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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, TranslationService } 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:any = [\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 private translationService: TranslationService\r\n\r\n ) { \r\n this.chartUtilities = new ChartUtilities();\r\n this.durationUnits = this.durationUnits?.map((item:any)=>{\r\n return this.translationService.translateVariables(item);\r\n })\r\n this.selectedTimePeriod = this.translationService.translateVariables(this.selectedTimePeriod);\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":[]}