@acorex/connectivity 21.0.0-next.92 → 21.0.0-next.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  2. package/fesm2022/{acorex-connectivity-mock-acorex-connectivity-mock-B5bnzTKN.mjs → acorex-connectivity-mock-acorex-connectivity-mock-g0RVU1Og.mjs} +3962 -3636
  3. package/fesm2022/{acorex-connectivity-mock-acorex-connectivity-mock-B5bnzTKN.mjs.map → acorex-connectivity-mock-acorex-connectivity-mock-g0RVU1Og.mjs.map} +1 -1
  4. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-Dv7Jzdhf.mjs → acorex-connectivity-mock-assign-to-manager.activity-CTrrsAvF.mjs} +2 -2
  5. package/fesm2022/acorex-connectivity-mock-assign-to-manager.activity-CTrrsAvF.mjs.map +1 -0
  6. package/fesm2022/acorex-connectivity-mock-category-metadata-inheritance.query-CIof4zTg.mjs.map +1 -1
  7. package/fesm2022/acorex-connectivity-mock-category-with-items.query-DAKUJIIt.mjs.map +1 -1
  8. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-C_1j3JPR.mjs → acorex-connectivity-mock-chat-generate-image.command-CSbgiZEm.mjs} +2 -3
  9. package/fesm2022/acorex-connectivity-mock-chat-generate-image.command-CSbgiZEm.mjs.map +1 -0
  10. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-0y5swsxw.mjs → acorex-connectivity-mock-chat-synthesize-speech.command-CjdySQzM.mjs} +2 -3
  11. package/fesm2022/acorex-connectivity-mock-chat-synthesize-speech.command-CjdySQzM.mjs.map +1 -0
  12. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-D59NedG-.mjs → acorex-connectivity-mock-chat-transcribe-speech.command-Wm1Ao81s.mjs} +2 -3
  13. package/fesm2022/acorex-connectivity-mock-chat-transcribe-speech.command-Wm1Ao81s.mjs.map +1 -0
  14. package/fesm2022/acorex-connectivity-mock-check-permission.activity-vr3OHtjC.mjs.map +1 -1
  15. package/fesm2022/acorex-connectivity-mock-distribution-record.activity-a1_k9Czb.mjs.map +1 -1
  16. package/fesm2022/acorex-connectivity-mock-entity-create.activity-CdoUzUvF.mjs.map +1 -1
  17. package/fesm2022/acorex-connectivity-mock-entity-delete.activity-ErEN1c24.mjs.map +1 -1
  18. package/fesm2022/acorex-connectivity-mock-entity-read.activity-1fJW8gVe.mjs.map +1 -1
  19. package/fesm2022/acorex-connectivity-mock-entity-update.activity-06HTKiQQ.mjs.map +1 -1
  20. package/fesm2022/acorex-connectivity-mock-extract-document-text.command-nGfUTSf6.mjs.map +1 -1
  21. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-DwVuYuKx.mjs.map +1 -1
  22. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-sFKYynZA.mjs.map +1 -1
  23. package/fesm2022/acorex-connectivity-mock-get-current-session-user.activity-CsmxwXsM.mjs.map +1 -1
  24. package/fesm2022/acorex-connectivity-mock-get-current-user-manager.activity-C1mj2bgB.mjs.map +1 -1
  25. package/fesm2022/acorex-connectivity-mock-get-employee-list.query-BWbZj3tp.mjs.map +1 -1
  26. package/fesm2022/acorex-connectivity-mock-get-location-list.query-CQ2rFDUM.mjs.map +1 -1
  27. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-D7DBzLT-.mjs.map +1 -1
  28. package/fesm2022/acorex-connectivity-mock-get-product-list.query-o9TcY_RC.mjs.map +1 -1
  29. package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-DUZvwsmY.mjs.map +1 -1
  30. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-BXDzY2Sd.mjs.map +1 -1
  31. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-D_jVT-7a.mjs.map +1 -1
  32. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BG6t0137.mjs.map +1 -1
  33. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-CgMZxfzh.mjs.map +1 -1
  34. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-COmTsDCV.mjs.map +1 -1
  35. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-gqSqvIaa.mjs.map +1 -1
  36. package/fesm2022/acorex-connectivity-mock-if.activity-DvzuhItL.mjs.map +1 -1
  37. package/fesm2022/{acorex-connectivity-mock-jira-instance-sync.command-BYOuTU3R.mjs → acorex-connectivity-mock-jira-instance-sync.command-CaOd4PJa.mjs} +1 -2
  38. package/fesm2022/{acorex-connectivity-mock-jira-instance-sync.command-BYOuTU3R.mjs.map → acorex-connectivity-mock-jira-instance-sync.command-CaOd4PJa.mjs.map} +1 -1
  39. package/fesm2022/{acorex-connectivity-mock-notification-management-email-send.command-Df6E-9-c.mjs → acorex-connectivity-mock-notification-management-email-send.command-BuH_Lm6V.mjs} +1 -2
  40. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-BuH_Lm6V.mjs.map +1 -0
  41. package/fesm2022/acorex-connectivity-mock-sample.command-CJmDL4pL.mjs.map +1 -1
  42. package/fesm2022/acorex-connectivity-mock-structured-text-completion.command-l31pjl9-.mjs.map +1 -1
  43. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-DVuh_6NC.mjs → acorex-connectivity-mock-user-roles-for-list-column.query-wRFHOp-X.mjs} +2 -2
  44. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-wRFHOp-X.mjs.map +1 -0
  45. package/fesm2022/acorex-connectivity-mock.mjs +1 -1
  46. package/package.json +2 -2
  47. package/types/acorex-connectivity-api.d.ts +1 -2
  48. package/types/acorex-connectivity-mock.d.ts +73 -56
  49. package/fesm2022/acorex-connectivity-mock-assign-to-manager.activity-Dv7Jzdhf.mjs.map +0 -1
  50. package/fesm2022/acorex-connectivity-mock-chat-generate-image.command-C_1j3JPR.mjs.map +0 -1
  51. package/fesm2022/acorex-connectivity-mock-chat-synthesize-speech.command-0y5swsxw.mjs.map +0 -1
  52. package/fesm2022/acorex-connectivity-mock-chat-transcribe-speech.command-D59NedG-.mjs.map +0 -1
  53. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-Df6E-9-c.mjs.map +0 -1
  54. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-DVuh_6NC.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-timeline.query-D_jVT-7a.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-subscriptions-timeline.query.ts"],"sourcesContent":["import { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\n\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetSubscriptionsTimelineQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface SubscriptionsTimelineResult {\n subscriptionId: string;\n subscriptionTitle: string;\n tenantId: string;\n tenantName: string;\n planId?: string;\n planName: string;\n status: string;\n startDate: Date;\n startDateStr: string;\n endDate?: Date;\n endDateStr?: string;\n durationDays: number;\n month: string;\n monthNumber: number;\n quarter: string;\n year: number;\n isActive: boolean;\n}\n\nexport interface GetSubscriptionsTimelineQueryResult {\n items: SubscriptionsTimelineResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetSubscriptionsTimelineQuery\n implements AXPQuery<GetSubscriptionsTimelineQueryInput, GetSubscriptionsTimelineQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n\n async fetch(input: GetSubscriptionsTimelineQueryInput | any): Promise<GetSubscriptionsTimelineQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractSubscriptionFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetSubscriptionsTimelineQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all tenants for lookup\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n });\n const tenants = tenantsResult.items;\n const tenantMap = new Map(tenants.map((t) => [t.id, t]));\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n subscriptions = this.applyDateRangeFilter(subscriptions, dateRangeFilter);\n }\n\n const now = new Date();\n\n // Build results\n const results: SubscriptionsTimelineResult[] = [];\n\n for (const subscription of subscriptions) {\n const startDate = new Date(subscription.startDate);\n const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;\n\n // Calculate duration in days\n const durationDays = endDate\n ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))\n : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n\n // Extract time period info from start date\n const year = startDate.getFullYear();\n const month = startDate.getMonth() + 1;\n const monthName = startDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n\n // Check if subscription is currently active\n const isActive =\n subscription.statusId === AXPSystemStatusType.Active &&\n startDate <= now &&\n (!endDate || endDate >= now);\n\n // Get tenant name\n const tenant = tenantMap.get(subscription.subscriberId);\n\n results.push({\n subscriptionId: subscription.id,\n subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,\n tenantId: subscription.subscriberId,\n tenantName: tenant?.title || 'Unknown',\n planId: subscription.planId,\n planName: subscription.plan?.title || 'Unknown',\n status: subscription.statusId || 'Unknown',\n startDate: startDate,\n startDateStr: startDate.toISOString(),\n endDate: endDate,\n endDateStr: endDate?.toISOString(),\n durationDays: durationDays,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n isActive: isActive,\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof SubscriptionsTimelineResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n // Handle date comparison\n if (field === 'startDate') {\n const aDate = a.startDate.getTime();\n const bDate = b.startDate.getTime();\n if (aDate < bDate) return -1 * dir;\n if (aDate > bDate) return 1 * dir;\n continue;\n }\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by start date descending (newest first)\n results.sort((a, b) => {\n return b.startDate.getTime() - a.startDate.getTime();\n });\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract subscription-specific filters from AXPFilterClause format\n * Maps report parameter paths to subscription entity field names\n */\n private extractSubscriptionFilters(parameters: any): GetSubscriptionsTimelineQueryInput['filters'] {\n const filters: GetSubscriptionsTimelineQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle subscription-specific field mappings\n if (field === 'planId') {\n // Plan ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'planId',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'planId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to subscriptions\n */\n private applyDateRangeFilter(\n subscriptions: AXMSubscriptionManagementSubscriptionEntityModel[],\n dateRange: any\n ): AXMSubscriptionManagementSubscriptionEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return subscriptions;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return subscriptions.filter((subscription) => {\n const subStartDate = new Date(subscription.startDate);\n const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;\n\n // Check if subscription overlaps with the date range\n return (\n (subStartDate >= startDate && subStartDate <= endDate) ||\n (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||\n (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate))\n );\n });\n }\n\n //#endregion\n}\n\n"],"names":["SubscriptionRootConfig","TenantRootConfig"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-timeline.query-D_jVT-7a.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-subscriptions-timeline.query.ts"],"sourcesContent":["import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\n\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetSubscriptionsTimelineQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface SubscriptionsTimelineResult {\n subscriptionId: string;\n subscriptionTitle: string;\n tenantId: string;\n tenantName: string;\n planId?: string;\n planName: string;\n status: string;\n startDate: Date;\n startDateStr: string;\n endDate?: Date;\n endDateStr?: string;\n durationDays: number;\n month: string;\n monthNumber: number;\n quarter: string;\n year: number;\n isActive: boolean;\n}\n\nexport interface GetSubscriptionsTimelineQueryResult {\n items: SubscriptionsTimelineResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetSubscriptionsTimelineQuery\n implements AXPQuery<GetSubscriptionsTimelineQueryInput, GetSubscriptionsTimelineQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n\n async fetch(input: GetSubscriptionsTimelineQueryInput | any): Promise<GetSubscriptionsTimelineQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractSubscriptionFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetSubscriptionsTimelineQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all tenants for lookup\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n });\n const tenants = tenantsResult.items;\n const tenantMap = new Map(tenants.map((t) => [t.id, t]));\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n subscriptions = this.applyDateRangeFilter(subscriptions, dateRangeFilter);\n }\n\n const now = new Date();\n\n // Build results\n const results: SubscriptionsTimelineResult[] = [];\n\n for (const subscription of subscriptions) {\n const startDate = new Date(subscription.startDate);\n const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;\n\n // Calculate duration in days\n const durationDays = endDate\n ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))\n : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n\n // Extract time period info from start date\n const year = startDate.getFullYear();\n const month = startDate.getMonth() + 1;\n const monthName = startDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n\n // Check if subscription is currently active\n const isActive =\n subscription.statusId === AXPSystemStatusType.Active &&\n startDate <= now &&\n (!endDate || endDate >= now);\n\n // Get tenant name\n const tenant = tenantMap.get(subscription.subscriberId);\n\n results.push({\n subscriptionId: subscription.id,\n subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,\n tenantId: subscription.subscriberId,\n tenantName: tenant?.title || 'Unknown',\n planId: subscription.planId,\n planName: subscription.plan?.title || 'Unknown',\n status: subscription.statusId || 'Unknown',\n startDate: startDate,\n startDateStr: startDate.toISOString(),\n endDate: endDate,\n endDateStr: endDate?.toISOString(),\n durationDays: durationDays,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n isActive: isActive,\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof SubscriptionsTimelineResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n // Handle date comparison\n if (field === 'startDate') {\n const aDate = a.startDate.getTime();\n const bDate = b.startDate.getTime();\n if (aDate < bDate) return -1 * dir;\n if (aDate > bDate) return 1 * dir;\n continue;\n }\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by start date descending (newest first)\n results.sort((a, b) => {\n return b.startDate.getTime() - a.startDate.getTime();\n });\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract subscription-specific filters from AXPFilterClause format\n * Maps report parameter paths to subscription entity field names\n */\n private extractSubscriptionFilters(parameters: any): GetSubscriptionsTimelineQueryInput['filters'] {\n const filters: GetSubscriptionsTimelineQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle subscription-specific field mappings\n if (field === 'planId') {\n // Plan ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'planId',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'planId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to subscriptions\n */\n private applyDateRangeFilter(\n subscriptions: AXMSubscriptionManagementSubscriptionEntityModel[],\n dateRange: any\n ): AXMSubscriptionManagementSubscriptionEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return subscriptions;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return subscriptions.filter((subscription) => {\n const subStartDate = new Date(subscription.startDate);\n const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;\n\n // Check if subscription overlaps with the date range\n return (\n (subStartDate >= startDate && subStartDate <= endDate) ||\n (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||\n (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate))\n );\n });\n }\n\n //#endregion\n}\n\n"],"names":["SubscriptionRootConfig","TenantRootConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-get-tenant-application-access.query-BG6t0137.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-application-access.query.ts"],"sourcesContent":["import { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanItemEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMApplicationManagementApplicationEntityModel } from '@acorex/modules/application-management';\n\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as ApplicationRootConfig } from '@acorex/modules/application-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantApplicationAccessQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantApplicationAccessResult {\n tenantId: string;\n tenantName: string;\n tenantStatus: string;\n subscriptionCount: number;\n applicationsCount: number;\n applicationsList: string;\n activeSubscriptionsCount: number;\n registrationDate?: Date;\n registrationDateStr?: string;\n}\n\nexport interface GetTenantApplicationAccessQueryResult {\n items: TenantApplicationAccessResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantApplicationAccessQuery\n implements AXPQuery<GetTenantApplicationAccessQueryInput, GetTenantApplicationAccessQueryResult> {\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private planService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlan.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanEntityModel>();\n private planItemService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlanItem.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanItemEntityModel>();\n private applicationService = this.entityService\n .withEntity(`${ApplicationRootConfig.module.name}.${ApplicationRootConfig.entities.application.name}`)\n .data<string, AXMApplicationManagementApplicationEntityModel>();\n\n async fetch(input: GetTenantApplicationAccessQueryInput | any): Promise<GetTenantApplicationAccessQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantApplicationAccessQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items;\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n });\n const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all plans\n const plansResult = await this.planService.query({\n skip: 0,\n take: 10000,\n });\n const plans = plansResult.items;\n\n // Get all plan items\n const planItemsResult = await this.planItemService.query({\n skip: 0,\n take: 10000,\n });\n const planItems = planItemsResult.items;\n\n // Get all applications\n const applicationsResult = await this.applicationService.query({\n skip: 0,\n take: 10000,\n });\n const applications = applicationsResult.items;\n\n // Build results for each tenant\n const results: TenantApplicationAccessResult[] = [];\n\n for (const tenant of tenants) {\n // Get tenant's subscriptions\n const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenant.id);\n\n // Get unique applications through subscriptions → plans → plan items → editions → applications\n const applicationSet = new Set<string>();\n const applicationNames: string[] = [];\n\n for (const subscription of tenantSubscriptions) {\n if (!subscription.planId) continue;\n\n // Get plan items for this plan\n const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);\n\n for (const planItem of planPlanItems) {\n if (!planItem.editionId) continue;\n\n // Find applications that have this edition\n for (const application of applications) {\n if (application.editionIds && application.editionIds.includes(planItem.editionId)) {\n if (!applicationSet.has(application.id)) {\n applicationSet.add(application.id);\n applicationNames.push(application.title);\n }\n }\n }\n }\n }\n\n // Count active subscriptions\n const activeSubscriptions = tenantSubscriptions.filter(\n (s) => s.statusId === AXPSystemStatusType.Active\n );\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n tenantStatus: tenant.statusId || 'Unknown',\n subscriptionCount: tenantSubscriptions.length,\n applicationsCount: applicationSet.size,\n applicationsList: applicationNames.join(', '),\n activeSubscriptionsCount: activeSubscriptions.length,\n registrationDate: tenant.registrationDate,\n registrationDateStr: tenant.registrationDate?.toISOString(),\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantApplicationAccessResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by tenant name\n results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantApplicationAccessQueryInput['filters'] {\n const filters: GetTenantApplicationAccessQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig","SubscriptionRootConfig","ApplicationRootConfig"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-application-access.query-BG6t0137.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-application-access.query.ts"],"sourcesContent":["import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanItemEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMApplicationManagementApplicationEntityModel } from '@acorex/modules/application-management';\n\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as ApplicationRootConfig } from '@acorex/modules/application-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantApplicationAccessQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantApplicationAccessResult {\n tenantId: string;\n tenantName: string;\n tenantStatus: string;\n subscriptionCount: number;\n applicationsCount: number;\n applicationsList: string;\n activeSubscriptionsCount: number;\n registrationDate?: Date;\n registrationDateStr?: string;\n}\n\nexport interface GetTenantApplicationAccessQueryResult {\n items: TenantApplicationAccessResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantApplicationAccessQuery\n implements AXPQuery<GetTenantApplicationAccessQueryInput, GetTenantApplicationAccessQueryResult> {\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private planService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlan.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanEntityModel>();\n private planItemService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlanItem.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanItemEntityModel>();\n private applicationService = this.entityService\n .withEntity(`${ApplicationRootConfig.module.name}.${ApplicationRootConfig.entities.application.name}`)\n .data<string, AXMApplicationManagementApplicationEntityModel>();\n\n async fetch(input: GetTenantApplicationAccessQueryInput | any): Promise<GetTenantApplicationAccessQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantApplicationAccessQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items;\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n });\n const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all plans\n const plansResult = await this.planService.query({\n skip: 0,\n take: 10000,\n });\n const plans = plansResult.items;\n\n // Get all plan items\n const planItemsResult = await this.planItemService.query({\n skip: 0,\n take: 10000,\n });\n const planItems = planItemsResult.items;\n\n // Get all applications\n const applicationsResult = await this.applicationService.query({\n skip: 0,\n take: 10000,\n });\n const applications = applicationsResult.items;\n\n // Build results for each tenant\n const results: TenantApplicationAccessResult[] = [];\n\n for (const tenant of tenants) {\n // Get tenant's subscriptions\n const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenant.id);\n\n // Get unique applications through subscriptions → plans → plan items → editions → applications\n const applicationSet = new Set<string>();\n const applicationNames: string[] = [];\n\n for (const subscription of tenantSubscriptions) {\n if (!subscription.planId) continue;\n\n // Get plan items for this plan\n const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);\n\n for (const planItem of planPlanItems) {\n if (!planItem.editionId) continue;\n\n // Find applications that have this edition\n for (const application of applications) {\n if (application.editionIds && application.editionIds.includes(planItem.editionId)) {\n if (!applicationSet.has(application.id)) {\n applicationSet.add(application.id);\n applicationNames.push(application.title);\n }\n }\n }\n }\n }\n\n // Count active subscriptions\n const activeSubscriptions = tenantSubscriptions.filter(\n (s) => s.statusId === AXPSystemStatusType.Active\n );\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n tenantStatus: tenant.statusId || 'Unknown',\n subscriptionCount: tenantSubscriptions.length,\n applicationsCount: applicationSet.size,\n applicationsList: applicationNames.join(', '),\n activeSubscriptionsCount: activeSubscriptions.length,\n registrationDate: tenant.registrationDate,\n registrationDateStr: tenant.registrationDate?.toISOString(),\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantApplicationAccessResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by tenant name\n results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantApplicationAccessQueryInput['filters'] {\n const filters: GetTenantApplicationAccessQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig","SubscriptionRootConfig","ApplicationRootConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-get-tenant-registration-chart-data.query-CgMZxfzh.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-registration-chart-data.query.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { GetTenantRegistrationTimelineQueryInput } from './get-tenant-registration-timeline.query';\nimport { GetTenantRegistrationTimelineQuery } from './get-tenant-registration-timeline.query';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantRegistrationChartDataQueryInput {\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantRegistrationChartDataResult {\n month: string;\n year: number;\n quarter: string;\n tenantCount: number;\n}\n\nexport interface GetTenantRegistrationChartDataQueryResult {\n items: TenantRegistrationChartDataResult[];\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantRegistrationChartDataQuery\n implements AXPQuery<GetTenantRegistrationChartDataQueryInput, GetTenantRegistrationChartDataQueryResult>\n{\n private readonly tenantRegistrationTimelineQuery = inject(GetTenantRegistrationTimelineQuery);\n\n async fetch(input: GetTenantRegistrationChartDataQueryInput | any): Promise<GetTenantRegistrationChartDataQueryResult> {\n // Get all tenant registration timeline data (no pagination for charts)\n const timelineResult = await this.tenantRegistrationTimelineQuery.fetch({\n skip: 0,\n take: 10000,\n filters: input.filters,\n logic: input.logic,\n });\n\n // Group by month\n const monthGroups = new Map<string, TenantRegistrationChartDataResult>();\n\n for (const item of timelineResult.items) {\n const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;\n\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, {\n month: item.month,\n year: item.year,\n quarter: item.quarter,\n tenantCount: 0,\n });\n }\n\n const group = monthGroups.get(monthKey)!;\n group.tenantCount++;\n }\n\n // Convert to array and sort by date\n const results = Array.from(monthGroups.values()).sort((a, b) => {\n if (a.year !== b.year) return a.year - b.year;\n const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();\n const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();\n return monthA - monthB;\n });\n\n return {\n items: results,\n };\n }\n}\n\n"],"names":[],"mappings":";;;;AA2BA;MAKa,mCAAmC,CAAA;AAHhD,IAAA,WAAA,GAAA;AAMmB,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,kCAAkC,CAAC;AA0C9F,IAAA;IAxCC,MAAM,KAAK,CAAC,KAAqD,EAAA;;QAE/D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC;AACtE,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6C;AAExE,QAAA,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE;YACvC,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;YAE5E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC9B,gBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,WAAW,EAAE,CAAC;AACf,iBAAA,CAAC;YACJ;YAEA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE;YACxC,KAAK,CAAC,WAAW,EAAE;QACrB;;AAGA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;AAC7C,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,IAAA,EAAO,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,QAAQ,EAAE;AAC7D,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,IAAA,EAAO,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,QAAQ,EAAE;YAC7D,OAAO,MAAM,GAAG,MAAM;AACxB,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,KAAK,EAAE,OAAO;SACf;IACH;8GA5CW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cAFlC,MAAM,EAAA,CAAA,CAAA;;2FAEP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;;;"}
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-registration-chart-data.query-CgMZxfzh.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-registration-chart-data.query.ts"],"sourcesContent":["import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { GetTenantRegistrationTimelineQueryInput } from './get-tenant-registration-timeline.query';\nimport { GetTenantRegistrationTimelineQuery } from './get-tenant-registration-timeline.query';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantRegistrationChartDataQueryInput {\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantRegistrationChartDataResult {\n month: string;\n year: number;\n quarter: string;\n tenantCount: number;\n}\n\nexport interface GetTenantRegistrationChartDataQueryResult {\n items: TenantRegistrationChartDataResult[];\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantRegistrationChartDataQuery\n implements AXPQuery<GetTenantRegistrationChartDataQueryInput, GetTenantRegistrationChartDataQueryResult>\n{\n private readonly tenantRegistrationTimelineQuery = inject(GetTenantRegistrationTimelineQuery);\n\n async fetch(input: GetTenantRegistrationChartDataQueryInput | any): Promise<GetTenantRegistrationChartDataQueryResult> {\n // Get all tenant registration timeline data (no pagination for charts)\n const timelineResult = await this.tenantRegistrationTimelineQuery.fetch({\n skip: 0,\n take: 10000,\n filters: input.filters,\n logic: input.logic,\n });\n\n // Group by month\n const monthGroups = new Map<string, TenantRegistrationChartDataResult>();\n\n for (const item of timelineResult.items) {\n const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;\n\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, {\n month: item.month,\n year: item.year,\n quarter: item.quarter,\n tenantCount: 0,\n });\n }\n\n const group = monthGroups.get(monthKey)!;\n group.tenantCount++;\n }\n\n // Convert to array and sort by date\n const results = Array.from(monthGroups.values()).sort((a, b) => {\n if (a.year !== b.year) return a.year - b.year;\n const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();\n const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();\n return monthA - monthB;\n });\n\n return {\n items: results,\n };\n }\n}\n\n"],"names":[],"mappings":";;;;AA4BA;MAKa,mCAAmC,CAAA;AAHhD,IAAA,WAAA,GAAA;AAMmB,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,kCAAkC,CAAC;AA0C9F,IAAA;IAxCC,MAAM,KAAK,CAAC,KAAqD,EAAA;;QAE/D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC;AACtE,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6C;AAExE,QAAA,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE;YACvC,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;YAE5E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC9B,gBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,WAAW,EAAE,CAAC;AACf,iBAAA,CAAC;YACJ;YAEA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE;YACxC,KAAK,CAAC,WAAW,EAAE;QACrB;;AAGA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;AAC7C,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,IAAA,EAAO,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,QAAQ,EAAE;AAC7D,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,IAAA,EAAO,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,QAAQ,EAAE;YAC7D,OAAO,MAAM,GAAG,MAAM;AACxB,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,KAAK,EAAE,OAAO;SACf;IACH;8GA5CW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cAFlC,MAAM,EAAA,CAAA,CAAA;;2FAEP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-get-tenant-registration-timeline.query-COmTsDCV.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-registration-timeline.query.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMTenantManagementTenantUserEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanItemEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMApplicationManagementApplicationEntityModel } from '@acorex/modules/application-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as ApplicationRootConfig } from '@acorex/modules/application-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantRegistrationTimelineQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantRegistrationTimelineResult {\n tenantId: string;\n tenantName: string;\n registrationDate: Date;\n registrationDateStr: string;\n status: string;\n country?: string;\n userCount: number;\n applicationCount: number;\n subscriptionCount: number;\n month: string;\n monthNumber: number;\n quarter: string;\n year: number;\n}\n\nexport interface GetTenantRegistrationTimelineQueryResult {\n items: TenantRegistrationTimelineResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantRegistrationTimelineQuery\n implements AXPQuery<GetTenantRegistrationTimelineQueryInput, GetTenantRegistrationTimelineQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private tenantUserService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenantUser.name}`)\n .data<string, AXMTenantManagementTenantUserEntityModel>();\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private planItemService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlanItem.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanItemEntityModel>();\n private applicationService = this.entityService\n .withEntity(`${ApplicationRootConfig.module.name}.${ApplicationRootConfig.entities.application.name}`)\n .data<string, AXMApplicationManagementApplicationEntityModel>();\n\n async fetch(input: GetTenantRegistrationTimelineQueryInput | any): Promise<GetTenantRegistrationTimelineQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantRegistrationTimelineQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items.filter((t) => t.registrationDate);\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all tenant users for counting\n const tenantUsersResult = await this.tenantUserService.query({\n skip: 0,\n take: 10000,\n });\n const tenantUsers = tenantUsersResult.items;\n\n // Get all subscriptions for counting\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n });\n const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all plan items and applications for application counting\n const planItemsResult = await this.planItemService.query({\n skip: 0,\n take: 10000,\n });\n const planItems = planItemsResult.items;\n\n const applicationsResult = await this.applicationService.query({\n skip: 0,\n take: 10000,\n });\n const applications = applicationsResult.items;\n\n // Get application counts for tenants\n const applicationCounts = await this.getApplicationCountsForTenants(\n tenants.map((t) => t.id),\n subscriptions,\n planItems,\n applications\n );\n\n // Build results\n const results: TenantRegistrationTimelineResult[] = [];\n\n for (const tenant of tenants) {\n if (!tenant.registrationDate) continue;\n\n const registrationDate = new Date(tenant.registrationDate);\n\n // Extract time period info\n const year = registrationDate.getFullYear();\n const month = registrationDate.getMonth() + 1;\n const monthName = registrationDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n\n // Count users for this tenant\n const userCount = tenantUsers.filter((tu) => tu.tenantId === tenant.id).length;\n\n // Count subscriptions for this tenant\n const subscriptionCount = subscriptions.filter((s) => s.subscriberId === tenant.id).length;\n\n // Get application count\n const applicationCount = applicationCounts.get(tenant.id) || 0;\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n registrationDate: registrationDate,\n registrationDateStr: registrationDate.toISOString(),\n status: tenant.statusId || 'Unknown',\n country: tenant.country?.title,\n userCount: userCount,\n applicationCount: applicationCount,\n subscriptionCount: subscriptionCount,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantRegistrationTimelineResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n // Handle date comparison\n if (field === 'registrationDate') {\n const aDate = a.registrationDate.getTime();\n const bDate = b.registrationDate.getTime();\n if (aDate < bDate) return -1 * dir;\n if (aDate > bDate) return 1 * dir;\n continue;\n }\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by registration date descending (newest first)\n results.sort((a, b) => {\n return b.registrationDate.getTime() - a.registrationDate.getTime();\n });\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Helper Methods ----\n\n /**\n * Get application counts for tenants\n */\n private async getApplicationCountsForTenants(\n tenantIds: string[],\n subscriptions: AXMSubscriptionManagementSubscriptionEntityModel[],\n planItems: AXMSubscriptionManagementSubscriptionPlanItemEntityModel[],\n applications: AXMApplicationManagementApplicationEntityModel[]\n ): Promise<Map<string, number>> {\n const counts = new Map<string, number>();\n\n for (const tenantId of tenantIds) {\n const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenantId);\n\n // Get unique applications through subscriptions → plans → plan items → editions → applications\n const applicationSet = new Set<string>();\n\n for (const subscription of tenantSubscriptions) {\n if (!subscription.planId) continue;\n\n // Get plan items for this plan\n const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);\n\n for (const planItem of planPlanItems) {\n if (!planItem.editionId) continue;\n\n // Find applications that have this edition\n for (const application of applications) {\n if (application.editionIds && application.editionIds.includes(planItem.editionId)) {\n applicationSet.add(application.id);\n }\n }\n }\n }\n\n counts.set(tenantId, applicationSet.size);\n }\n\n return counts;\n }\n\n //#endregion\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantRegistrationTimelineQueryInput['filters'] {\n const filters: GetTenantRegistrationTimelineQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig","SubscriptionRootConfig","ApplicationRootConfig"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-registration-timeline.query-COmTsDCV.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-registration-timeline.query.ts"],"sourcesContent":["import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMTenantManagementTenantUserEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMSubscriptionManagementSubscriptionEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMSubscriptionManagementSubscriptionPlanItemEntityModel } from '@acorex/modules/subscription-management';\nimport { AXMApplicationManagementApplicationEntityModel } from '@acorex/modules/application-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as ApplicationRootConfig } from '@acorex/modules/application-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantRegistrationTimelineQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantRegistrationTimelineResult {\n tenantId: string;\n tenantName: string;\n registrationDate: Date;\n registrationDateStr: string;\n status: string;\n country?: string;\n userCount: number;\n applicationCount: number;\n subscriptionCount: number;\n month: string;\n monthNumber: number;\n quarter: string;\n year: number;\n}\n\nexport interface GetTenantRegistrationTimelineQueryResult {\n items: TenantRegistrationTimelineResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantRegistrationTimelineQuery\n implements AXPQuery<GetTenantRegistrationTimelineQueryInput, GetTenantRegistrationTimelineQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private tenantUserService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenantUser.name}`)\n .data<string, AXMTenantManagementTenantUserEntityModel>();\n private subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionEntityModel>();\n private planItemService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlanItem.name}`)\n .data<string, AXMSubscriptionManagementSubscriptionPlanItemEntityModel>();\n private applicationService = this.entityService\n .withEntity(`${ApplicationRootConfig.module.name}.${ApplicationRootConfig.entities.application.name}`)\n .data<string, AXMApplicationManagementApplicationEntityModel>();\n\n async fetch(input: GetTenantRegistrationTimelineQueryInput | any): Promise<GetTenantRegistrationTimelineQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantRegistrationTimelineQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items.filter((t) => t.registrationDate);\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all tenant users for counting\n const tenantUsersResult = await this.tenantUserService.query({\n skip: 0,\n take: 10000,\n });\n const tenantUsers = tenantUsersResult.items;\n\n // Get all subscriptions for counting\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n });\n const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n\n // Get all plan items and applications for application counting\n const planItemsResult = await this.planItemService.query({\n skip: 0,\n take: 10000,\n });\n const planItems = planItemsResult.items;\n\n const applicationsResult = await this.applicationService.query({\n skip: 0,\n take: 10000,\n });\n const applications = applicationsResult.items;\n\n // Get application counts for tenants\n const applicationCounts = await this.getApplicationCountsForTenants(\n tenants.map((t) => t.id),\n subscriptions,\n planItems,\n applications\n );\n\n // Build results\n const results: TenantRegistrationTimelineResult[] = [];\n\n for (const tenant of tenants) {\n if (!tenant.registrationDate) continue;\n\n const registrationDate = new Date(tenant.registrationDate);\n\n // Extract time period info\n const year = registrationDate.getFullYear();\n const month = registrationDate.getMonth() + 1;\n const monthName = registrationDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n\n // Count users for this tenant\n const userCount = tenantUsers.filter((tu) => tu.tenantId === tenant.id).length;\n\n // Count subscriptions for this tenant\n const subscriptionCount = subscriptions.filter((s) => s.subscriberId === tenant.id).length;\n\n // Get application count\n const applicationCount = applicationCounts.get(tenant.id) || 0;\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n registrationDate: registrationDate,\n registrationDateStr: registrationDate.toISOString(),\n status: tenant.statusId || 'Unknown',\n country: tenant.country?.title,\n userCount: userCount,\n applicationCount: applicationCount,\n subscriptionCount: subscriptionCount,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantRegistrationTimelineResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n // Handle date comparison\n if (field === 'registrationDate') {\n const aDate = a.registrationDate.getTime();\n const bDate = b.registrationDate.getTime();\n if (aDate < bDate) return -1 * dir;\n if (aDate > bDate) return 1 * dir;\n continue;\n }\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by registration date descending (newest first)\n results.sort((a, b) => {\n return b.registrationDate.getTime() - a.registrationDate.getTime();\n });\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Helper Methods ----\n\n /**\n * Get application counts for tenants\n */\n private async getApplicationCountsForTenants(\n tenantIds: string[],\n subscriptions: AXMSubscriptionManagementSubscriptionEntityModel[],\n planItems: AXMSubscriptionManagementSubscriptionPlanItemEntityModel[],\n applications: AXMApplicationManagementApplicationEntityModel[]\n ): Promise<Map<string, number>> {\n const counts = new Map<string, number>();\n\n for (const tenantId of tenantIds) {\n const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenantId);\n\n // Get unique applications through subscriptions → plans → plan items → editions → applications\n const applicationSet = new Set<string>();\n\n for (const subscription of tenantSubscriptions) {\n if (!subscription.planId) continue;\n\n // Get plan items for this plan\n const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);\n\n for (const planItem of planPlanItems) {\n if (!planItem.editionId) continue;\n\n // Find applications that have this edition\n for (const application of applications) {\n if (application.editionIds && application.editionIds.includes(planItem.editionId)) {\n applicationSet.add(application.id);\n }\n }\n }\n }\n\n counts.set(tenantId, applicationSet.size);\n }\n\n return counts;\n }\n\n //#endregion\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantRegistrationTimelineQueryInput['filters'] {\n const filters: GetTenantRegistrationTimelineQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig","SubscriptionRootConfig","ApplicationRootConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-get-tenant-user-distribution.query-gqSqvIaa.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-user-distribution.query.ts"],"sourcesContent":["import { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMTenantManagementTenantUserEntityModel } from '@acorex/modules/tenant-management';\n\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantUserDistributionQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantUserDistributionResult {\n tenantId: string;\n tenantName: string;\n tenantStatus: string;\n totalUsersCount: number;\n activeUsersCount: number;\n inactiveUsersCount: number;\n maxUsers?: number;\n utilizationPercent: number;\n registrationDate?: Date;\n registrationDateStr?: string;\n}\n\nexport interface GetTenantUserDistributionQueryResult {\n items: TenantUserDistributionResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantUserDistributionQuery\n implements AXPQuery<GetTenantUserDistributionQueryInput, GetTenantUserDistributionQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private tenantUserService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenantUser.name}`)\n .data<string, AXMTenantManagementTenantUserEntityModel>();\n\n async fetch(input: GetTenantUserDistributionQueryInput | any): Promise<GetTenantUserDistributionQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantUserDistributionQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items;\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all tenant users\n const tenantUsersResult = await this.tenantUserService.query({\n skip: 0,\n take: 10000,\n });\n const tenantUsers = tenantUsersResult.items;\n\n // Build results for each tenant\n const results: TenantUserDistributionResult[] = [];\n\n for (const tenant of tenants) {\n // Get tenant's users\n const tenantUsersList = tenantUsers.filter((tu) => tu.tenantId === tenant.id);\n\n // Count active and inactive users\n const activeUsers = tenantUsersList.filter(\n (tu) => tu.statusId === AXPSystemStatusType.Active\n );\n const inactiveUsers = tenantUsersList.filter(\n (tu) => tu.statusId !== AXPSystemStatusType.Active\n );\n\n // Calculate utilization percentage\n const maxUsers = tenant.maxUsers;\n const utilizationPercent =\n maxUsers && maxUsers > 0 ? Math.round((tenantUsersList.length / maxUsers) * 100) : 0;\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n tenantStatus: tenant.statusId || 'Unknown',\n totalUsersCount: tenantUsersList.length,\n activeUsersCount: activeUsers.length,\n inactiveUsersCount: inactiveUsers.length,\n maxUsers: maxUsers,\n utilizationPercent: utilizationPercent,\n registrationDate: tenant.registrationDate,\n registrationDateStr: tenant.registrationDate?.toISOString(),\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantUserDistributionResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by tenant name\n results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantUserDistributionQueryInput['filters'] {\n const filters: GetTenantUserDistributionQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-user-distribution.query-gqSqvIaa.mjs","sources":["../../../../libs/connectivity/mock/src/lib/tenant-management/reports/get-tenant-user-distribution.query.ts"],"sourcesContent":["import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { AXPSystemStatusType } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMTenantManagementTenantEntityModel } from '@acorex/modules/tenant-management';\nimport { AXMTenantManagementTenantUserEntityModel } from '@acorex/modules/tenant-management';\n\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\n\n//#region ---- Query Input/Output Types ----\n\nexport interface GetTenantUserDistributionQueryInput {\n skip?: number;\n take?: number;\n sort?: import('@acorex/platform/layout/entity-contracts').AXPQuerySort[];\n filters?: Array<{\n field: string;\n operator: { type: string };\n value: any;\n }>;\n logic?: 'and' | 'or';\n}\n\nexport interface TenantUserDistributionResult {\n tenantId: string;\n tenantName: string;\n tenantStatus: string;\n totalUsersCount: number;\n activeUsersCount: number;\n inactiveUsersCount: number;\n maxUsers?: number;\n utilizationPercent: number;\n registrationDate?: Date;\n registrationDateStr?: string;\n}\n\nexport interface GetTenantUserDistributionQueryResult {\n items: TenantUserDistributionResult[];\n total: number;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GetTenantUserDistributionQuery\n implements AXPQuery<GetTenantUserDistributionQueryInput, GetTenantUserDistributionQueryResult>\n{\n private readonly entityService = inject(AXPEntityService);\n private tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data<string, AXMTenantManagementTenantEntityModel>();\n private tenantUserService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenantUser.name}`)\n .data<string, AXMTenantManagementTenantUserEntityModel>();\n\n async fetch(input: GetTenantUserDistributionQueryInput | any): Promise<GetTenantUserDistributionQueryResult> {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractTenantFilters(input.filters);\n const filterLogic = (input.filters as any)?.logic || input.logic || 'and';\n\n // Separate custom filters from entity filters\n const entityFilters: GetTenantUserDistributionQueryInput['filters'] = [];\n let dateRangeFilter: any;\n\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n } else {\n entityFilters.push(filter);\n }\n }\n }\n\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter:\n entityFilters.length > 0\n ? ({\n logic: filterLogic,\n filters: entityFilters,\n } as any)\n : undefined,\n });\n\n let tenants = tenantsResult.items;\n\n // Apply date range filter if provided\n if (dateRangeFilter) {\n tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);\n }\n\n // Get all tenant users\n const tenantUsersResult = await this.tenantUserService.query({\n skip: 0,\n take: 10000,\n });\n const tenantUsers = tenantUsersResult.items;\n\n // Build results for each tenant\n const results: TenantUserDistributionResult[] = [];\n\n for (const tenant of tenants) {\n // Get tenant's users\n const tenantUsersList = tenantUsers.filter((tu) => tu.tenantId === tenant.id);\n\n // Count active and inactive users\n const activeUsers = tenantUsersList.filter(\n (tu) => tu.statusId === AXPSystemStatusType.Active\n );\n const inactiveUsers = tenantUsersList.filter(\n (tu) => tu.statusId !== AXPSystemStatusType.Active\n );\n\n // Calculate utilization percentage\n const maxUsers = tenant.maxUsers;\n const utilizationPercent =\n maxUsers && maxUsers > 0 ? Math.round((tenantUsersList.length / maxUsers) * 100) : 0;\n\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n tenantStatus: tenant.statusId || 'Unknown',\n totalUsersCount: tenantUsersList.length,\n activeUsersCount: activeUsers.length,\n inactiveUsersCount: inactiveUsers.length,\n maxUsers: maxUsers,\n utilizationPercent: utilizationPercent,\n registrationDate: tenant.registrationDate,\n registrationDateStr: tenant.registrationDate?.toISOString(),\n });\n }\n\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort!) {\n const field = sortField.name as keyof TenantUserDistributionResult;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n\n if (aValue === undefined && bValue === undefined) continue;\n if (aValue === undefined) return 1 * dir;\n if (bValue === undefined) return -1 * dir;\n\n if (aValue < bValue) return -1 * dir;\n if (aValue > bValue) return 1 * dir;\n }\n return 0;\n });\n } else {\n // Default sort by tenant name\n results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));\n }\n\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n\n return {\n items,\n total,\n };\n }\n\n //#region ---- Filter Extraction ----\n\n /**\n * Extract tenant-specific filters from AXPFilterClause format\n * Maps report parameter paths to tenant entity field names\n */\n private extractTenantFilters(parameters: any): GetTenantUserDistributionQueryInput['filters'] {\n const filters: GetTenantUserDistributionQueryInput['filters'] = [];\n const paramsAny = parameters as any;\n\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n\n // Handle tenant-specific field mappings\n if (field === 'tenantId') {\n // Tenant ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'id',\n operator: { type: 'in' },\n value: value,\n });\n } else if (value) {\n filters.push({\n field: 'id',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n } else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n } else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n\n return filters;\n }\n\n //#endregion\n\n //#region ---- Custom Filter Handlers ----\n\n /**\n * Apply date range filter to tenants\n */\n private applyDateRangeFilter(\n tenants: AXMTenantManagementTenantEntityModel[],\n dateRange: any\n ): AXMTenantManagementTenantEntityModel[] {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate) return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n\n //#endregion\n}\n\n"],"names":["TenantRootConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-mock-if.activity-DvzuhItL.mjs","sources":["../../../../libs/connectivity/mock/src/lib/workflow-management/activities/if.activity.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\n\nimport { AXPCommand } from '@acorex/platform/runtime';\n\n//#region ---- Types ----\n\nexport interface IfActivityInput {\n condition?: boolean;\n}\n\nexport interface IfActivityOutput {\n condition: boolean;\n}\n\n//#endregion\n\n/**\n * If Activity (Backend - Mock)\n *\n * Evaluates a condition and continues via Then or Else outcome.\n * Activity type: workflow-activity:if\n * Outcomes: Then | Else\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IfActivity implements AXPCommand<IfActivityInput, IfActivityOutput> {\n async execute(\n input: IfActivityInput,\n ): Promise<AXPExecuteCommandResult<IfActivityOutput>> {\n const condition = input?.condition ?? false;\n const outcome = condition ? 'Then' : 'Else';\n\n return {\n success: true,\n data: { condition: !!condition },\n metadata: {\n outcome,\n },\n };\n }\n}\n"],"names":[],"mappings":";;;AAeA;AAEA;;;;;;AAMG;MAIU,UAAU,CAAA;IACrB,MAAM,OAAO,CACX,KAAsB,EAAA;AAEtB,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,KAAK;QAC3C,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM;QAE3C,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE;AAChC,YAAA,QAAQ,EAAE;gBACR,OAAO;AACR,aAAA;SACF;IACH;8GAdW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;;;"}
1
+ {"version":3,"file":"acorex-connectivity-mock-if.activity-DvzuhItL.mjs","sources":["../../../../libs/connectivity/mock/src/lib/workflow-management/activities/if.activity.ts"],"sourcesContent":["import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { Injectable } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\n\n//#region ---- Types ----\n\nexport interface IfActivityInput {\n condition?: boolean;\n}\n\nexport interface IfActivityOutput {\n condition: boolean;\n}\n\n//#endregion\n\n/**\n * If Activity (Backend - Mock)\n *\n * Evaluates a condition and continues via Then or Else outcome.\n * Activity type: workflow-activity:if\n * Outcomes: Then | Else\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class IfActivity implements AXPCommand<IfActivityInput, IfActivityOutput> {\n async execute(\n input: IfActivityInput,\n ): Promise<AXPExecuteCommandResult<IfActivityOutput>> {\n const condition = input?.condition ?? false;\n const outcome = condition ? 'Then' : 'Else';\n\n return {\n success: true,\n data: { condition: !!condition },\n metadata: {\n outcome,\n },\n };\n }\n}\n"],"names":[],"mappings":";;;AAcA;AAEA;;;;;;AAMG;MAIU,UAAU,CAAA;IACrB,MAAM,OAAO,CACX,KAAsB,EAAA;AAEtB,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,KAAK;QAC3C,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM;QAE3C,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE;AAChC,YAAA,QAAQ,EAAE;gBACR,OAAO;AACR,aAAA;SACF;IACH;8GAdW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;;;"}
@@ -400,7 +400,6 @@ function issueTypeBlockName(issueTypeId, blocks) {
400
400
  return blocks.find((block) => block.id === issueTypeId)?.name ?? issueTypeId;
401
401
  }
402
402
 
403
- //#region ---- Imports ----
404
403
  const I18N = `${RootConfig.config.i18n}:instances.entities.instance`;
405
404
  //#endregion
406
405
  //#region ---- Command ----
@@ -472,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
472
471
  }] });
473
472
 
474
473
  export { AXCJiraInstanceSyncCommand };
475
- //# sourceMappingURL=acorex-connectivity-mock-jira-instance-sync.command-BYOuTU3R.mjs.map
474
+ //# sourceMappingURL=acorex-connectivity-mock-jira-instance-sync.command-CaOd4PJa.mjs.map