@resolveio/server-lib 20.12.66 → 20.12.67
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.
|
@@ -276,7 +276,7 @@ function loadReportBuilderMethods(methodManager) {
|
|
|
276
276
|
}),
|
|
277
277
|
function: function (reportType_1, rootCollectionName_1, rootOptions_1) {
|
|
278
278
|
return __awaiter(this, arguments, void 0, function (reportType, rootCollectionName, rootOptions, filters, filterArrays, filterArrayFields, selectedFields, customFields, groupsRow, fieldsTotal, fieldsLink, date_field, date_interval, displayType) {
|
|
279
|
-
var modelCollection, datePaths,
|
|
279
|
+
var modelCollection, datePaths, reportBuilderTimezone, lookupAliases, _a, rootFilters_1, lookupFilters_1, additionalCollectionsMap_1, additionalCollections, unionQuery_1, _b, sortToUse, layoutSortAdd, remappedFilters, remappedArrayFilters, postMatchAnd, res_1, err_1, tmpTotals_1, resultsOut, tmpRes_1, query_1, initialQueryMatchCondition_1, sizes_1, divFields_1, queryMatchConditionLookup_1, queryGroup_1, groupedSorts_1, dateFieldPath, queryProjection_1, _loop_1, i, res_2, err_2, tmpTotals_2, tmpRes;
|
|
280
280
|
if (filters === void 0) { filters = []; }
|
|
281
281
|
if (filterArrays === void 0) { filterArrays = []; }
|
|
282
282
|
if (filterArrayFields === void 0) { filterArrayFields = []; }
|
|
@@ -302,10 +302,7 @@ function loadReportBuilderMethods(methodManager) {
|
|
|
302
302
|
coerceDateFilters(filters, datePaths);
|
|
303
303
|
coerceDateFilters(filterArrays, datePaths);
|
|
304
304
|
}
|
|
305
|
-
|
|
306
|
-
tzClientNormalized = tzClient.toLowerCase();
|
|
307
|
-
reportBuilderTimezone = process.env.REPORT_BUILDER_TZ
|
|
308
|
-
|| (tzClientNormalized === 'america/los_angeles' ? 'UTC' : tzClient);
|
|
305
|
+
reportBuilderTimezone = process.env.TZ_CLIENT || 'America/Chicago';
|
|
309
306
|
lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);
|
|
310
307
|
_a = splitFiltersByLookup(filters, lookupAliases), rootFilters_1 = _a.rootFilters, lookupFilters_1 = _a.lookupFilters;
|
|
311
308
|
additionalCollectionsMap_1 = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":"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","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ReportBuilderCollectionJoin } from '../models/report-builder-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, round, toTitleCase } from '../util/common';\nimport { applyLinkFieldUnwinds, ensureLookupLocalKeyUnwinds, normalizeLookupField } from '../util/report-builder-unwinds';\nimport { buildTree, getReportLookupSchemas, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportbuilderreportWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id: string) {\n\t\t\t\treturn ReportBuilderReports.findOne({_id: id});\n\t\t\t}\n\t\t},\n\t\treportBuilderBuildTree: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection_root: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcollectionJoins: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$': {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.collection': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.alias': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.local_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.foreign_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection_root: string, collectionJoins: any[] = []) {\n\t\t\t\tlet baseRootTree = buildCollectionTree(collection_root);\n\n\t\t\t\tlet collectionTrees: any[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\tcollection: collection_root,\n\t\t\t\t\t\talias: toTitleCase(collection_root.replace(/\\_/g, ' ').replace(/-/g, ' ')),\n\t\t\t\t\t\tlookup_as: '',\n\t\t\t\t\t\ttree: deepCopy(baseRootTree)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tlet rootTree = baseRootTree;\n\n\t\t\t\t(collectionJoins || []).forEach((join, joinIndex) => {\n\t\t\t\t\tconst joinLocalKey = join.local_key && join.local_key.trim().length ? join.local_key : '_id';\n\t\t\t\t\tconst joinForeignKey = join.foreign_key && join.foreign_key.trim().length ? join.foreign_key : '_id';\n\n\t\t\t\t\tlet joinAlias = buildJoinAlias(join, joinIndex);\n\t\t\t\t\tlet joinNode = buildJoinLookupNode(collection_root, {...join, local_key: joinLocalKey, foreign_key: joinForeignKey}, joinAlias);\n\n\t\t\t\t\tlet joinTree = buildCollectionTree(join.collection, joinNode);\n\t\t\t\t\tjoinNode.children = joinTree.children;\n\t\t\t\t\tjoinNode.is_join = true;\n\n\t\t\t\t\trootTree.children.push(joinNode);\n\n\t\t\t\t\tcollectionTrees.push({\n\t\t\t\t\t\tcollection: join.collection,\n\t\t\t\t\t\talias: joinAlias,\n\t\t\t\t\t\tlookup_as: joinNode.lookup_as,\n\t\t\t\t\t\ttree: deepCopy(joinTree)\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisLeaf: false,\n\t\t\t\t\tchildren: rootTree.children,\n\t\t\t\t\ttrees: collectionTrees\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\ttreeLeaf: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(treeLeaf) {\n\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\tconst fieldPath = (treeLeaf && typeof treeLeaf.fieldPath === 'string') ? treeLeaf.fieldPath : '';\n\t\t\t\t\tif (fieldPath.includes('(Lookup') || treeLeaf.lookup_collection) {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/^.+\\(.+\\) \\(Lookup.*\\)\\.\\$\\./g, '').replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\treportType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\trootCollectionName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrays: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrays.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrayFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrayFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tselectedFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'selectedFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tcustomFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'customFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tgroupsRow: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'groupsRow.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsTotal: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsTotal.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsLink: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsLink.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdate_field: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdate_interval: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdisplayType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], customFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', displayType = '') {\n\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\tif (!modelCollection) {\n\t\t\t\t\tthrow new Error('Error in Report builder get results: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfilters = expandLayoutColumnFilters(filters, selectedFields);\n\t\t\t\t\tfilterArrays = expandLayoutColumnFilters(filterArrays, selectedFields);\n\t\t\t\t\tconst datePaths = collectRootDatePaths(rootCollectionName);\n\t\t\t\t\tif (datePaths.size) {\n\t\t\t\t\t\tcoerceDateFilters(filters, datePaths);\n\t\t\t\t\t\tcoerceDateFilters(filterArrays, datePaths);\n\t\t\t\t\t}\n\t\t\t\t\tconst tzClient = process.env.TZ_CLIENT || 'America/Chicago';\n\t\t\t\t\tconst tzClientNormalized = tzClient.toLowerCase();\n\t\t\t\t\tconst reportBuilderTimezone = process.env.REPORT_BUILDER_TZ\n\t\t\t\t\t\t|| (tzClientNormalized === 'america/los_angeles' ? 'UTC' : tzClient);\n\n\t\t\t\t\tconst lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);\n\t\t\t\t\tconst {rootFilters, lookupFilters} = splitFiltersByLookup(filters, lookupAliases);\n\n\t\t\t\t\t// Union-based join mode (no local/foreign key): build per-collection pipelines and union them\n\t\t\t\t\t// Union-based join mode should only apply when a \"joined\" collection has no join keys.\n\t\t\t\t\t// Standard lookups (with local/foreign keys) must use the aggregation $lookup pipeline below,\n\t\t\t\t\t// otherwise we'd return unrelated docs from the foreign collection (and root fields like \"well\" go blank).\n\t\t\t\t\tconst additionalCollectionsMap = new Map<string, {collection: string, alias: string}>();\n\t\t\t\t\t(selectedFields || [])\n\t\t\t\t\t\t.filter(f =>\n\t\t\t\t\t\t\tf &&\n\t\t\t\t\t\t\tf.lookup_collection &&\n\t\t\t\t\t\t\t(!f.lookup_local_key || !f.lookup_foreign_key)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.forEach(f => {\n\t\t\t\t\t\t\tconst alias = f.lookup_as || f.lookup_collection;\n\t\t\t\t\t\t\tconst key = `${f.lookup_collection}::${alias}`;\n\t\t\t\t\t\t\tif (!additionalCollectionsMap.has(key)) {\n\t\t\t\t\t\t\t\tadditionalCollectionsMap.set(key, {collection: f.lookup_collection, alias});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\tconst additionalCollections = Array.from(additionalCollectionsMap.values());\n\n\t\t\t\t\tif (additionalCollections.length) {\n\t\t\t\t\t\tlet unionQuery: any[] = buildCollectionPipeline(rootCollectionName, '', selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), true);\n\n\t\t\t\t\t\tadditionalCollections.forEach(cfg => {\n\t\t\t\t\t\t\tunionQuery.push({\n\t\t\t\t\t\t\t\t$unionWith: {\n\t\t\t\t\t\t\t\t\tcoll: cfg.collection,\n\t\t\t\t\t\t\t\t\tpipeline: buildCollectionPipeline(cfg.collection, cfg.alias, selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tconst {sortSpec: sortToUse, addFields: layoutSortAdd} = buildLayoutSortSpec(rootOptions.sort, selectedFields);\n\t\t\t\t\t\t\tif (Object.keys(layoutSortAdd).length) {\n\t\t\t\t\t\t\t\tunionQuery.push({$addFields: layoutSortAdd});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tappendSafeSort(unionQuery, sortToUse, selectedFields, customFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Apply remapped filters on projected field ids after union\n\t\t\t\t\t\tconst remappedFilters = remapFiltersToIds(filters.concat(rootFilters || []), selectedFields);\n\t\t\t\t\t\tconst remappedArrayFilters = remapFiltersToIds(filterArrays.concat(lookupFilters || []), selectedFields);\n\t\t\t\t\t\tconst postMatchAnd: any[] = [];\n\t\t\t\t\t\tif (remappedFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (remappedArrayFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedArrayFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (postMatchAnd.length) {\n\t\t\t\t\t\t\tunionQuery.push({$match: {$and: postMatchAnd}});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet res = null;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(unionQuery, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tconst sum = res.map(a => {\n\t\t\t\t\t\t\t\t\t\tconst raw = a ? a[selField.id] : null;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(raw)) {\n\t\t\t\t\t\t\t\t\t\t\treturn raw\n\t\t\t\t\t\t\t\t\t\t\t\t.map(v => (typeof v === 'number' ? v : Number(v)))\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(v => !isNaN(v))\n\t\t\t\t\t\t\t\t\t\t\t\t.reduce((x, y) => x + y, 0);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst num = typeof raw === 'number' ? raw : (raw !== null && raw !== undefined ? Number(raw) : 0);\n\t\t\t\t\t\t\t\t\t\treturn isNaN(num) ? 0 : num;\n\t\t\t\t\t\t\t\t\t}).reduce((a, b) => a + b, 0);\n\n\t\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = sum;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.length ? round(sum / res.length) : 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet resultsOut = res || [];\n\t\t\t\t\t\tif (rootOptions.skip) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(rootOptions.skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rootOptions.limit) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(0, rootOptions.limit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: resultsOut,\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\treturn tmpRes;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\n\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\n\t\t\t\t\t// \t\t]\n\t\t\t\t\t// \t});\n\t\t\t\t\t// });\n\n\t\t\t\t\tif (rootFilters.length) {\n\t\t\t\t\t\trootFilters.forEach(filter => initialQueryMatchCondition['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\t// if (filters.filter(a => (!a['$or'] && !Object.keys(a).some(b => b.includes('(Lookup'))) || (a['$or'] && !a['$or'].some(b => Object.keys(b).some(c => c.includes('(Lookup)'))))).length || selectedFields.filter(a => !a.fieldPath.includes('(Lookup')).length) {\n\t\t\t\t\tif (initialQueryMatchCondition['$and'].length) {\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add count\n\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\tlet fieldData = filterField.fieldPath.split('.$');\n\n\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (filterField.lookup_collection || fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup')) {\n\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: filterField.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\tconst lookupAs = filterField.lookup_as.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\tfrom: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(filterField.lookup_local_key),\n\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(filterField.lookup_foreign_key),\n\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tconst lookupSizeKey = filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\tsizes.push(lookupSizeKey);\n\t\t\t\t\t\t\t\t\tconst lookupSourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + lookupSizeKey]: {$size: {$cond: [{$isArray: lookupSourceExpr}, lookupSourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\tif (rowField.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = rowField.split('.$');\n\n\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tconst lastSegment = fieldPath.split('.$')[fieldPath.split('.$').length - 1];\n\t\t\t\t\t\t\t\tconst hasLookup = !!row.treeItem?.lookup_collection || (lastSegment || '').includes('(Lookup');\n\n\t\t\t\t\t\t\t\tif (hasLookup && row.treeItem?.lookup_collection && row.treeItem?.lookup_as) {\n\t\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: row.treeItem.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\t\tconst lookupAsRaw = row.treeItem.lookup_as || '';\n\t\t\t\t\t\t\t\t\tconst lookupAs = lookupAsRaw.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(row.treeItem.lookup_local_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(row.treeItem.lookup_foreign_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = lookupAsRaw.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldPath += '.$';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tapplyLinkFieldUnwinds({\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tsizes,\n\t\t\t\t\t\tfieldsLink,\n\t\t\t\t\t\tselectedFields,\n\t\t\t\t\t\tfilterArrayFields,\n\t\t\t\t\t\tgroupsRow\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t// NOTE: lookup-based unwinds are no longer needed for joins; union handled below\n\n\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields[fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (reportType !== 'Dated' && sizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\tsizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$count';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t\tquery.push({$addFields: {[link.id]: {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]}}});\n\t\t\t\t\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t});\n\n\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\tcust.operations.filter(a => a.operation && !a.fields.some(b => (b.field === null || b.field === '') && b.value === null)).forEach((operation, opIndex) => {\n\t\t\t\t\t\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + field.field.replace(/\\.\\$/g, ''));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t$cond: { if: { $or: condCheck }, then: 0, else: {['$' + operation.operation]: tmpOperationFields} }\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $eq: ['$' + cust.selFieldId, null] }, then: 0, else: '$' + cust.selFieldId}});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: '$' + field.field.replace(/\\.\\$/g, '')}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: field.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif (lookupFilters.length) {\n\t\t\t\t\t\tlookupFilters.forEach(filter => queryMatchConditionLookup['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group\n\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t_id: {}\n\t\t\t\t\t};\n\n\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\tqueryGroup._id = '$_id';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (rootOptions.sort) { \n\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\tlet selField = selectedFields.find(a => a.id === sortField);\n\t\n\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\tconst sortPath = (selField && typeof selField.fieldPath === 'string') ? selField.fieldPath.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\t\t\tif (sortPath) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[sortPath] = rootOptions.sort[sortField];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (groupsRow.length && date_field && date_interval) {\n\t\t\t\t\t\t\t\tconst dateFieldPath = (typeof date_field === 'string') ? date_field.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\tif (dateFieldPath) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['second'] = {'$second' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\t\t\tif (!rowField || !row?.id) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + rowField.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$push': {$ifNull: ['$' + fieldPath.replace(/\\.\\$/g, ''), null]}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$push': {$ifNull: ['$' + cust.selFieldId, null]}};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Totals\n\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {['$' + total.type] : '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$group: queryGroup});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//Projection\n\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t_id: 1\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = '$' + cust.selFieldId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Totals\n\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$project: queryProjection});\n\t\t\t\t\t}\n\n\t\t\t\t\t// SORT\n\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\tappendSafeSort(query, rootOptions.sort, selectedFields, customFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.id] = '$' + field.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.selFieldId] = '$' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + selField.id] = '$' + totField.id + '_' + selField.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + field.selFieldId] = '$' + totField.id + '_' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + field.selFieldId] = {['$' + totField.type]: '$' + totField.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (sortKeys.includes('_id.gr_' + (groupIndex + 1))) {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsortKeys.filter(a => !a.startsWith('_id.gr_')).forEach(key => {\n\t\t\t\t\t\t\t\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tappendSafeSort(query, sort, selectedFields, customFields);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\t\t\tconsole.log('_____________ query __________'); console.log(JSON.stringify(query, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tlet res = null;\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = round(res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomFields.forEach(custField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = round(res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn tmpRes;\n\t\t\t\t}\n\t\t\t},\n\t\t\tworkerTaskWeight: 2\n\t\t}\n\t});\n}\n\nfunction buildCollectionTree(collectionName: string, lookupNode?: any) {\n\tlet lookupSchemaData = getReportLookupSchemas(collectionName).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\tlet lookupSchemaTree = lookupSchemaData.find(a => a.is_root === true)?.tree || {};\n\n\tlet treeItems = buildTree(collectionName, lookupSchemaTree, lookupNode);\n\n\tattachLookupChildren(treeItems, lookupSchemaData, lookupSchemaTree);\n\n\treturn {isLeaf: false, children: treeItems};\n}\n\nfunction attachLookupChildren(treeItems: any[], lookupSchemaData: any[], lookupSchemaTree: any) {\n\tObject.keys(lookupSchemaTree || {}).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\tlet field = findFieldByPath(treeItems, lookup);\n\n\t\tif (field) {\n\t\t\tlet lookupTree = lookupSchemaData.find(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection);\n\n\t\t\tif (lookupTree) {\n\t\t\t\tlet childTree = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupTree.tree, field);\n\t\t\t\tattachLookupChildren(childTree, lookupSchemaData, lookupTree.tree);\n\t\t\t\tfield.children = childTree;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction findFieldByPath(treeItems: any[], lookupPath: string) {\n\tlet fieldPath = lookupPath.split('.');\n\tlet field = null;\n\n\tfieldPath.forEach(path => {\n\t\tif (!field) {\n\t\t\tfield = treeItems.find(a => a.fieldName === path);\n\t\t}\n\t\telse if (field.children) {\n\t\t\tfield = field.children.find(a => a.fieldName === path);\n\t\t}\n\t});\n\n\treturn field;\n}\n\nfunction buildJoinLookupNode(collection_root: string, join: ReportBuilderCollectionJoin, alias: string) {\n\treturn {\n\t\tcollection_name: collection_root,\n\t\tcolumnName: alias,\n\t\tfieldName: alias,\n\t\tfieldType: 'Lookup',\n\t\tfieldTypeName: 'Lookup',\n\t\tdistinctFieldValues: [],\n\t\tfieldPath: alias,\n\t\tfieldPathName: alias,\n\t\tpath: alias,\n\t\tlookup_collection: join.collection,\n\t\tlookup_local_key: join.local_key,\n\t\tlookup_foreign_key: join.foreign_key,\n\t\tlookup_as: alias,\n\t\ttext: alias,\n\t\tvalue: alias,\n\t\tisLeaf: false,\n\t\tisActive: false,\n\t\tisSelected: false,\n\t\tis_join: false,\n\t\tdepth: 0,\n\t\tleafValueType: '',\n\t\tleafFormatType: '',\n\t\tchildren: []\n\t};\n}\n\nfunction buildJoinAlias(join: ReportBuilderCollectionJoin, joinIndex: number) {\n\tif (join.alias && join.alias.trim()) {\n\t\treturn join.alias.trim();\n\t}\n\n\tlet joinName = toTitleCase(join.collection.replace(/\\_/g, ' ').replace(/-/g, ' '));\n\tlet joinPath = toTitleCase(join.local_key.replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ').replace(/\\_/g, ' '));\n\n\treturn `${joinName} (${joinPath || 'Join'}) (Lookup ${joinIndex + 1})`;\n}\n\nfunction appendSafeSort(query: any[], sortSpec: any, selectedFields: any[] = [], customFields: any[] = []) {\n\tif (!sortSpec || !Object.keys(sortSpec).length) {\n\t\treturn;\n\t}\n\n\tconst safeAddFields = {};\n\tconst safeSort = {};\n\n\tObject.keys(sortSpec).forEach(key => {\n\t\tif (key.startsWith('_id.')) {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t\treturn;\n\t\t}\n\n\t\tif (isArrayLikeField(key, selectedFields, customFields)) {\n\t\t\tconst safeKey = 'sort_' + key.replace(/\\./g, '_');\n\t\t\tsafeAddFields[safeKey] = {\n\t\t\t\t$cond: [\n\t\t\t\t\t{$isArray: '$' + key},\n\t\t\t\t\t{$size: {$ifNull: ['$' + key, []]}},\n\t\t\t\t\t'$' + key\n\t\t\t\t]\n\t\t\t};\n\t\t\tsafeSort[safeKey] = sortSpec[key];\n\t\t}\n\t\telse {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t}\n\t});\n\n\tif (Object.keys(safeAddFields).length) {\n\t\tquery.push({$addFields: safeAddFields});\n\t}\n\n\tif (Object.keys(safeSort).length) {\n\t\tquery.push({$sort: safeSort});\n\t}\n}\n\nfunction isArrayLikeField(sortKey: string, selectedFields: any[] = [], customFields: any[] = []) {\n\tconst field = selectedFields.find(a => a.id === sortKey);\n\tconst custom = customFields.find(a => a.selFieldId === sortKey);\n\n\tconst leafValueType = field ? field.leafValueType : (custom ? custom.leafValueType : '');\n\n\treturn leafValueType !== 'Average' &&\n\t\tleafValueType !== 'Sum' &&\n\t\tleafValueType !== 'Count' &&\n\t\tleafValueType !== 'Minimum' &&\n\t\tleafValueType !== 'Maximum' &&\n\t\tleafValueType !== 'First' &&\n\t\tleafValueType !== 'Last' &&\n\t\tleafValueType !== 'Unique';\n}\n\nfunction collectLookupAliases(selectedFields: any[] = [], filterArrayFields: any[] = [], groupsRow: any[] = []) {\n\tconst aliases = new Set<string>();\n\n\tconst addAlias = (alias: string) => {\n\t\tconst normalized = normalizeLookupAlias(alias);\n\t\tif (normalized) {\n\t\t\taliases.add(normalized);\n\t\t}\n\t};\n\n\t(selectedFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(filterArrayFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(groupsRow || []).forEach(group => {\n\t\tif (group?.treeItem && (group.treeItem.lookup_collection || (group.treeItem.fieldPath && group.treeItem.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(group.treeItem.lookup_as || extractLookupAlias(group.treeItem.fieldPath));\n\t\t}\n\t});\n\n\treturn aliases;\n}\n\nfunction splitFiltersByLookup(filters: any[] = [], lookupAliases: Set<string> = new Set()) {\n\tconst rootFilters = [];\n\tconst lookupFilters = [];\n\n\t(filters || []).forEach(filter => {\n\t\tconst summary = summarizeFilterTargets(filter, lookupAliases);\n\n\t\tif (summary.hasLookup) {\n\t\t\t// If the filter mixes root + lookup, keep it together in lookupFilters so it stays a single $match/$or\n\t\t\tlookupFilters.push(filter);\n\t\t}\n\t\telse {\n\t\t\trootFilters.push(filter);\n\t\t}\n\t});\n\n\treturn {rootFilters, lookupFilters};\n}\n\nfunction summarizeFilterTargets(filter: any, lookupAliases: Set<string>) {\n\tconst result = {hasLookup: false, hasRoot: false};\n\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn result;\n\t}\n\n\tObject.keys(filter).forEach(key => {\n\t\tif (key === '$or' || key === '$and') {\n\t\t\tconst branch = filter[key];\n\t\t\tif (Array.isArray(branch)) {\n\t\t\t\tbranch.forEach(child => {\n\t\t\t\t\tconst childSummary = summarizeFilterTargets(child, lookupAliases);\n\t\t\t\t\tresult.hasLookup = result.hasLookup || childSummary.hasLookup;\n\t\t\t\t\tresult.hasRoot = result.hasRoot || childSummary.hasRoot;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst isLookup = isLookupPath(key, lookupAliases);\n\t\t\tif (isLookup) {\n\t\t\t\tresult.hasLookup = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult.hasRoot = true;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction isLookupPath(path: string, lookupAliases: Set<string>) {\n\tif (!path) {\n\t\treturn false;\n\t}\n\n\tconst normalizedPath = path.replace(/\\.\\$/g, '');\n\n\tif (normalizedPath.includes('(Lookup')) {\n\t\treturn true;\n\t}\n\n\tconst rootKey = normalizedPath.split('.')[0];\n\treturn lookupAliases.has(rootKey);\n}\n\nfunction extractLookupAlias(path: string) {\n\tif (!path || !path.includes('(Lookup')) {\n\t\treturn '';\n\t}\n\n\treturn path.replace(/\\.\\$/g, '').split('.')[0];\n}\n\nfunction normalizeLookupAlias(alias: string) {\n\treturn (alias || '').replace(/\\.\\$/g, '').trim();\n}\n\nfunction collectRootDatePaths(collectionName: string) {\n\tconst out = new Set<string>();\n\tconst collection = ResolveIOServer.getMongoManager().collection(collectionName);\n\tconst schema = collection?.rbSchema || {};\n\n\tObject.keys(schema).forEach(path => {\n\t\tif (schema[path]?.rbType === 'Date') {\n\t\t\tout.add(path.replace(/\\.\\$/g, ''));\n\t\t}\n\t});\n\n\treturn out;\n}\n\nfunction coerceDateFilters(filters: any[] = [], datePaths: Set<string>) {\n\tconst coerceDateValue = (value: any): any => {\n\t\tif (value instanceof Date) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(coerceDateValue);\n\t\t}\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\tconst parsed = new Date(value);\n\t\t\tif (!isNaN(parsed.getTime())) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t};\n\n\tconst coerceFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tobj.forEach(coerceFilterObject);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tobj.$or = obj.$or.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tobj.$and = obj.$and.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tif (key.startsWith('$')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst normalizedKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (!datePaths.has(normalizedKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = obj[key];\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n\t\t\t\tObject.keys(value).forEach(op => {\n\t\t\t\t\tif (op.startsWith('$')) {\n\t\t\t\t\t\tvalue[op] = coerceDateValue(value[op]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tobj[key] = coerceDateValue(value);\n\t\t\t}\n\t\t});\n\n\t\treturn obj;\n\t};\n\n\t(filters || []).forEach(coerceFilterObject);\n}\n\n// Helpers to support union-based joins (collection_joins without local/foreign key)\nfunction stripAliasFromPath(path: string, alias: string) {\n\tif (!path) {\n\t\treturn path;\n\t}\n\n\tconst cleanAlias = alias.replace(/\\.\\$/g, '');\n\tconst cleanPath = path.replace(/\\.\\$/g, '');\n\n\tif (cleanPath.startsWith(cleanAlias + '.')) {\n\t\treturn cleanPath.substring(cleanAlias.length + 1);\n\t}\n\n\treturn cleanPath;\n}\n\nfunction buildCollectionPipeline(collectionName: string, alias: string, selectedFields: any[] = [], filters: any[] = [], filterArrays: any[] = [], isRoot = false) {\n\tconst pipeline: any[] = [];\n\tconst matchClauses: any[] = [];\n\tconst matchArrayClauses: any[] = [];\n\n\tconst targetAlias = isRoot ? '' : alias.replace(/\\.\\$/g, '');\n\n\tconst mapFilterForCollection = (filterObj: any, toArray: boolean) => {\n\t\tif (!filterObj || typeof filterObj !== 'object') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mapped = mapFilterPaths(filterObj, targetAlias, isRoot);\n\t\tif (mapped) {\n\t\t\t(toArray ? matchArrayClauses : matchClauses).push(mapped);\n\t\t}\n\t};\n\n\t(filters || []).forEach(f => mapFilterForCollection(f, false));\n\t(filterArrays || []).forEach(f => mapFilterForCollection(f, true));\n\n\tif (matchClauses.length || matchArrayClauses.length) {\n\t\tconst match: any = {$and: [...matchClauses, ...matchArrayClauses]};\n\t\tpipeline.push({$match: match});\n\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tconsole.info('RB debug: collection pipeline match', {\n\t\t\t\tcollection: collectionName,\n\t\t\t\talias: targetAlias || collectionName,\n\t\t\t\tmatchJson: JSON.stringify(match, null, 2)\n\t\t\t});\n\t\t}\n\t}\n\n\t// Projection mapping selected fields for this collection\n\tconst projection: any = {_id: 1, __rb_collection: targetAlias || collectionName};\n\t(selectedFields || [])\n\t\t.filter(f => isFieldForCollection(f, collectionName, targetAlias))\n\t\t.forEach(f => {\n\t\t\tconst mappedPath = stripAliasFromPath(f.fieldPath || '', targetAlias || f.lookup_as || '');\n\t\t\tif (f.leafValueType === 'Average') {\n\t\t\t\tprojection[f.id] = {$avg: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Sum') {\n\t\t\t\tprojection[f.id] = {$sum: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Count') {\n\t\t\t\tprojection[f.id] = {$sum: 1};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Minimum') {\n\t\t\t\tprojection[f.id] = {$min: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Maximum') {\n\t\t\t\tprojection[f.id] = {$max: '$' + mappedPath};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprojection[f.id] = '$' + mappedPath;\n\t\t\t}\n\t\t});\n\n\tpipeline.push({$project: projection});\n\n\treturn pipeline;\n}\n\nfunction isFieldForCollection(field: any, collectionName: string, alias: string) {\n\tif (!field) {\n\t\treturn false;\n\t}\n\n\t// Root collection check\n\tif (!alias) {\n\t\treturn field.collection_name === collectionName && (!field.lookup_collection || field.lookup_collection === '');\n\t}\n\n\t// Joined collection check\n\treturn field.lookup_collection === collectionName || (field.lookup_as && field.lookup_as.replace(/\\.\\$/g, '') === alias);\n}\n\nfunction mapFilterPaths(filter: any, alias: string, isRoot: boolean) {\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\treturn filter.map(f => mapFilterPaths(f, alias, isRoot));\n\t}\n\n\tif (filter.$or) {\n\t\tconst mapped = filter.$or.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$or: mapped} : null;\n\t}\n\n\tif (filter.$and) {\n\t\tconst mapped = filter.$and.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$and: mapped} : null;\n\t}\n\n\tconst out: any = {};\n\tObject.keys(filter).forEach(key => {\n\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\n\t\tif (!alias) {\n\t\t\t// root collection: ignore keys that start with a lookup alias\n\t\t\tif (cleanKey.includes('(Lookup')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (lookupAliasMatches(cleanKey, alias)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tout[cleanKey] = filter[key];\n\t\t}\n\t\telse {\n\t\t\tif (cleanKey.startsWith(alias + '.')) {\n\t\t\t\tout[cleanKey.substring(alias.length + 1)] = filter[key];\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Object.keys(out).length ? out : null;\n}\n\nfunction lookupAliasMatches(path: string, alias: string) {\n\tif (!path || !alias) {\n\t\treturn false;\n\t}\n\treturn path.startsWith(alias + '.') || path === alias;\n}\n\nfunction buildLayoutSortSpec(sortSpec: any = {}, selectedFields: any[] = []) {\n\tconst outSort: any = {...sortSpec};\n\tconst addFields: any = {};\n\n\tObject.keys(sortSpec || {}).forEach(key => {\n\t\tif (!key.startsWith('layout_col_')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalized = key.replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (isNaN(idx)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst layoutFields = (selectedFields || []).filter(f => typeof f?.layoutColumnIndex !== 'undefined' && f.layoutColumnIndex === idx).map(f => f.id).filter(Boolean);\n\n\t\tif (!layoutFields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build nested $ifNull chain to coalesce across layout column targets\n\t\tlet coalesce: any = '';\n\t\tfor (let i = layoutFields.length - 1; i >= 0; i--) {\n\t\t\tconst fieldPath = '$' + layoutFields[i];\n\t\t\tif (i === layoutFields.length - 1) {\n\t\t\t\tcoalesce = fieldPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcoalesce = {$ifNull: [fieldPath, coalesce]};\n\t\t\t}\n\t\t}\n\n\t\tconst sortKey = 'sort_' + key;\n\t\taddFields[sortKey] = coalesce;\n\n\t\tdelete outSort[key];\n\t\toutSort[sortKey] = sortSpec[key];\n\t});\n\n\treturn {sortSpec: outSort, addFields};\n}\n\nfunction remapFiltersToIds(filters: any[] = [], selectedFields: any[] = []) {\n\tconst byPath = new Map<string, string>();\n\tconst layoutMap = new Map<number, string[]>();\n\t(selectedFields || []).forEach(f => {\n\t\tif (f?.fieldPath && f?.id) {\n\t\t\tbyPath.set(f.fieldPath.replace(/\\.\\$/g, ''), f.id);\n\t\t}\n\n\t\tif (typeof f?.layoutColumnIndex !== 'undefined') {\n\t\t\tconst arr = layoutMap.get(f.layoutColumnIndex) || [];\n\t\t\tarr.push(f.id);\n\t\t\tlayoutMap.set(f.layoutColumnIndex, arr);\n\t\t}\n\t});\n\n\tconst remapObj = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(remapObj);\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tconst mapped = obj.$or.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$or: mapped} : null;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tconst mapped = obj.$and.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$and: mapped} : null;\n\t\t}\n\n\t\tconst out: any = {};\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (cleanKey.startsWith('layout_col_')) {\n\t\t\t\t// map to all field ids in that layout column index\n\t\t\t\tconst normalized = cleanKey.replace(/^layout_col_/, '');\n\t\t\t\tconst parts = normalized.split('_');\n\t\t\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\t\t\t\tconst targets = layoutMap.get(idx) || [];\n\n\t\t\t\tif (targets.length) {\n\t\t\t\t\tconst mappedVal = remapObj(obj[key]);\n\t\t\t\t\tout.$or = targets.map(id => ({[id]: mappedVal}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst mappedKey = byPath.get(cleanKey) || cleanKey;\n\t\t\tout[mappedKey] = remapObj(obj[key]);\n\t\t});\n\n\t\treturn Object.keys(out).length ? out : null;\n\t};\n\n\treturn (filters || []).map(remapObj).filter(Boolean);\n}\n\nfunction expandLayoutColumnFilters(filters: any[] = [], selectedFields: any[] = []) {\n\tconst layoutCache: {[key: string]: string[]} = {};\n\n\tconst resolveLayoutPaths = (layoutKey: string) => {\n\t\tif (layoutCache[layoutKey]) {\n\t\t\treturn layoutCache[layoutKey];\n\t\t}\n\n\t\tlet paths: string[] = [];\n\t\tconst normalized = (layoutKey || '').replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (!isNaN(idx)) {\n\t\t\tpaths = (selectedFields || [])\n\t\t\t\t.filter(f => f && (f.layoutColumnIndex === idx || (f.id || '').includes(`f_layout_${idx}_`)))\n\t\t\t\t.map(f => f.fieldPath ? f.fieldPath.replace(/\\.\\$/g, '') : '')\n\t\t\t\t.filter(p => !!p);\n\t\t}\n\n\t\tlayoutCache[layoutKey] = paths;\n\t\treturn paths;\n\t};\n\n\tconst expandFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\treturn {$or: obj.$or.map(expandFilterObject)};\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\treturn {$and: obj.$and.map(expandFilterObject)};\n\t\t}\n\n\t\tlet expanded: any = {};\n\t\tlet replaced = false;\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst val = obj[key];\n\n\t\t\tif (key.startsWith('layout_col_')) {\n\t\t\t\tconst paths = resolveLayoutPaths(key);\n\n\t\t\t\tif (paths.length) {\n\t\t\t\t\treplaced = true;\n\t\t\t\t\texpanded.$or = paths.map(path => ({[path]: val}));\n\t\t\t\t\t// Use console to trace layout filter expansion without requiring a logger on ResolveIOServer\n\t\t\t\t\tconsole.info('RB layout filter expansion', {layoutKey: key, paths});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn('RB layout filter expansion failed', {layoutKey: key, selectedFields});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\texpanded[key] = val;\n\t\t\t}\n\t\t});\n\n\t\treturn replaced ? expanded : obj;\n\t};\n\n\treturn (filters || []).map(expandFilterObject);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":"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","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ReportBuilderCollectionJoin } from '../models/report-builder-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, round, toTitleCase } from '../util/common';\nimport { applyLinkFieldUnwinds, ensureLookupLocalKeyUnwinds, normalizeLookupField } from '../util/report-builder-unwinds';\nimport { buildTree, getReportLookupSchemas, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportbuilderreportWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id: string) {\n\t\t\t\treturn ReportBuilderReports.findOne({_id: id});\n\t\t\t}\n\t\t},\n\t\treportBuilderBuildTree: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tcollection_root: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcollectionJoins: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$': {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.collection': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.alias': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.local_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'collectionJoins.$.foreign_key': {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(collection_root: string, collectionJoins: any[] = []) {\n\t\t\t\tlet baseRootTree = buildCollectionTree(collection_root);\n\n\t\t\t\tlet collectionTrees: any[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\tcollection: collection_root,\n\t\t\t\t\t\talias: toTitleCase(collection_root.replace(/\\_/g, ' ').replace(/-/g, ' ')),\n\t\t\t\t\t\tlookup_as: '',\n\t\t\t\t\t\ttree: deepCopy(baseRootTree)\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\t\tlet rootTree = baseRootTree;\n\n\t\t\t\t(collectionJoins || []).forEach((join, joinIndex) => {\n\t\t\t\t\tconst joinLocalKey = join.local_key && join.local_key.trim().length ? join.local_key : '_id';\n\t\t\t\t\tconst joinForeignKey = join.foreign_key && join.foreign_key.trim().length ? join.foreign_key : '_id';\n\n\t\t\t\t\tlet joinAlias = buildJoinAlias(join, joinIndex);\n\t\t\t\t\tlet joinNode = buildJoinLookupNode(collection_root, {...join, local_key: joinLocalKey, foreign_key: joinForeignKey}, joinAlias);\n\n\t\t\t\t\tlet joinTree = buildCollectionTree(join.collection, joinNode);\n\t\t\t\t\tjoinNode.children = joinTree.children;\n\t\t\t\t\tjoinNode.is_join = true;\n\n\t\t\t\t\trootTree.children.push(joinNode);\n\n\t\t\t\t\tcollectionTrees.push({\n\t\t\t\t\t\tcollection: join.collection,\n\t\t\t\t\t\talias: joinAlias,\n\t\t\t\t\t\tlookup_as: joinNode.lookup_as,\n\t\t\t\t\t\ttree: deepCopy(joinTree)\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisLeaf: false,\n\t\t\t\t\tchildren: rootTree.children,\n\t\t\t\t\ttrees: collectionTrees\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\ttreeLeaf: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(treeLeaf) {\n\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\tconst fieldPath = (treeLeaf && typeof treeLeaf.fieldPath === 'string') ? treeLeaf.fieldPath : '';\n\t\t\t\t\tif (fieldPath.includes('(Lookup') || treeLeaf.lookup_collection) {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/^.+\\(.+\\) \\(Lookup.*\\)\\.\\$\\./g, '').replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn mongoCommand('distinct', treeLeaf.collection_name, fieldPath.replace(/\\.\\$/g, ''));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\treportType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\trootCollectionName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: PaginationOptionsSchema\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrays: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrays.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfilterArrayFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'filterArrayFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tselectedFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'selectedFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tcustomFields: {\n\t\t\t\t\ttype: Array,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\t'customFields.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tgroupsRow: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'groupsRow.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsTotal: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsTotal.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tfieldsLink: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fieldsLink.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tdate_field: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdate_interval: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tdisplayType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], customFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', displayType = '') {\n\t\t\t\tlet modelCollection = ResolveIOServer.getMongoManager().collection(rootCollectionName);\n\n\t\t\t\tif (!modelCollection) {\n\t\t\t\t\tthrow new Error('Error in Report builder get results: Invalid collection');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfilters = expandLayoutColumnFilters(filters, selectedFields);\n\t\t\t\t\tfilterArrays = expandLayoutColumnFilters(filterArrays, selectedFields);\n\t\t\t\t\tconst datePaths = collectRootDatePaths(rootCollectionName);\n\t\t\t\t\tif (datePaths.size) {\n\t\t\t\t\t\tcoerceDateFilters(filters, datePaths);\n\t\t\t\t\t\tcoerceDateFilters(filterArrays, datePaths);\n\t\t\t\t\t}\n\t\t\t\t\tconst reportBuilderTimezone = process.env.TZ_CLIENT || 'America/Chicago';\n\n\t\t\t\t\tconst lookupAliases = collectLookupAliases(selectedFields, filterArrayFields, groupsRow);\n\t\t\t\t\tconst {rootFilters, lookupFilters} = splitFiltersByLookup(filters, lookupAliases);\n\n\t\t\t\t\t// Union-based join mode (no local/foreign key): build per-collection pipelines and union them\n\t\t\t\t\t// Union-based join mode should only apply when a \"joined\" collection has no join keys.\n\t\t\t\t\t// Standard lookups (with local/foreign keys) must use the aggregation $lookup pipeline below,\n\t\t\t\t\t// otherwise we'd return unrelated docs from the foreign collection (and root fields like \"well\" go blank).\n\t\t\t\t\tconst additionalCollectionsMap = new Map<string, {collection: string, alias: string}>();\n\t\t\t\t\t(selectedFields || [])\n\t\t\t\t\t\t.filter(f =>\n\t\t\t\t\t\t\tf &&\n\t\t\t\t\t\t\tf.lookup_collection &&\n\t\t\t\t\t\t\t(!f.lookup_local_key || !f.lookup_foreign_key)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.forEach(f => {\n\t\t\t\t\t\t\tconst alias = f.lookup_as || f.lookup_collection;\n\t\t\t\t\t\t\tconst key = `${f.lookup_collection}::${alias}`;\n\t\t\t\t\t\t\tif (!additionalCollectionsMap.has(key)) {\n\t\t\t\t\t\t\t\tadditionalCollectionsMap.set(key, {collection: f.lookup_collection, alias});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\tconst additionalCollections = Array.from(additionalCollectionsMap.values());\n\n\t\t\t\t\tif (additionalCollections.length) {\n\t\t\t\t\t\tlet unionQuery: any[] = buildCollectionPipeline(rootCollectionName, '', selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), true);\n\n\t\t\t\t\t\tadditionalCollections.forEach(cfg => {\n\t\t\t\t\t\t\tunionQuery.push({\n\t\t\t\t\t\t\t\t$unionWith: {\n\t\t\t\t\t\t\t\t\tcoll: cfg.collection,\n\t\t\t\t\t\t\t\t\tpipeline: buildCollectionPipeline(cfg.collection, cfg.alias, selectedFields, filters.concat(rootFilters || []), filterArrays.concat(lookupFilters || []), false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\tconst {sortSpec: sortToUse, addFields: layoutSortAdd} = buildLayoutSortSpec(rootOptions.sort, selectedFields);\n\t\t\t\t\t\t\tif (Object.keys(layoutSortAdd).length) {\n\t\t\t\t\t\t\t\tunionQuery.push({$addFields: layoutSortAdd});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tappendSafeSort(unionQuery, sortToUse, selectedFields, customFields);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Apply remapped filters on projected field ids after union\n\t\t\t\t\t\tconst remappedFilters = remapFiltersToIds(filters.concat(rootFilters || []), selectedFields);\n\t\t\t\t\t\tconst remappedArrayFilters = remapFiltersToIds(filterArrays.concat(lookupFilters || []), selectedFields);\n\t\t\t\t\t\tconst postMatchAnd: any[] = [];\n\t\t\t\t\t\tif (remappedFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (remappedArrayFilters.length) {\n\t\t\t\t\t\t\tpostMatchAnd.push(...remappedArrayFilters);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (postMatchAnd.length) {\n\t\t\t\t\t\t\tunionQuery.push({$match: {$and: postMatchAnd}});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet res = null;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tres = await modelCollection.aggregate(unionQuery, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tconst sum = res.map(a => {\n\t\t\t\t\t\t\t\t\t\tconst raw = a ? a[selField.id] : null;\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(raw)) {\n\t\t\t\t\t\t\t\t\t\t\treturn raw\n\t\t\t\t\t\t\t\t\t\t\t\t.map(v => (typeof v === 'number' ? v : Number(v)))\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(v => !isNaN(v))\n\t\t\t\t\t\t\t\t\t\t\t\t.reduce((x, y) => x + y, 0);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst num = typeof raw === 'number' ? raw : (raw !== null && raw !== undefined ? Number(raw) : 0);\n\t\t\t\t\t\t\t\t\t\treturn isNaN(num) ? 0 : num;\n\t\t\t\t\t\t\t\t\t}).reduce((a, b) => a + b, 0);\n\n\t\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = sum;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.length ? round(sum / res.length) : 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet resultsOut = res || [];\n\t\t\t\t\t\tif (rootOptions.skip) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(rootOptions.skip);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rootOptions.limit) {\n\t\t\t\t\t\t\tresultsOut = resultsOut.slice(0, rootOptions.limit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\t\tresults: resultsOut,\n\t\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t\t}];\n\n\t\t\t\t\t\treturn tmpRes;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\n\t\t\t\t\t// Non-Lookup Match Filters\n\t\t\t\t\tlet initialQueryMatchCondition = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\t// selectedFields.filter(a => a.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t// \tinitialQueryMatchCondition['$and'].push({\n\t\t\t\t\t// \t\t$and: [\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$exists: 1}},\n\t\t\t\t\t// \t\t\t// {[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: ''}},\n\t\t\t\t\t// \t\t\t{[field.fieldPath.replace(/\\.\\$/g, '')]: {$ne: null}},\n\t\t\t\t\t// \t\t]\n\t\t\t\t\t// \t});\n\t\t\t\t\t// });\n\n\t\t\t\t\tif (rootFilters.length) {\n\t\t\t\t\t\trootFilters.forEach(filter => initialQueryMatchCondition['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\t// if (filters.filter(a => (!a['$or'] && !Object.keys(a).some(b => b.includes('(Lookup'))) || (a['$or'] && !a['$or'].some(b => Object.keys(b).some(c => c.includes('(Lookup)'))))).length || selectedFields.filter(a => !a.fieldPath.includes('(Lookup')).length) {\n\t\t\t\t\tif (initialQueryMatchCondition['$and'].length) {\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$match: initialQueryMatchCondition\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add count\n\t\t\t\t\tquery.push({ $addFields: { count: { $sum: 1} } });\n\n\t\t\t\t\tlet sizes = [];\n\n\t\t\t\t\tfilterArrayFields.filter(a => a.fieldPath).forEach(filterField => {\n\t\t\t\t\t\tlet fieldData = filterField.fieldPath.split('.$');\n\n\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (filterField.lookup_collection || fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup')) {\n\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: filterField.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\tconst lookupAs = filterField.lookup_as.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\tfrom: filterField.lookup_collection,\n\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(filterField.lookup_local_key),\n\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(filterField.lookup_foreign_key),\n\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tconst lookupSizeKey = filterField.lookup_as.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\tsizes.push(lookupSizeKey);\n\t\t\t\t\t\t\t\t\tconst lookupSourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + lookupSizeKey]: {$size: {$cond: [{$isArray: lookupSourceExpr}, lookupSourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath;\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Groups - Lookups / Sizes / Unwinds\n\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\tif (rowField.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = rowField.split('.$');\n\n\t\t\t\t\t\t\tlet fieldPath = '';\n\n\t\t\t\t\t\t\tfor (let i = 0; i < fieldData.length - 1; i++) {\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tconst lastSegment = fieldPath.split('.$')[fieldPath.split('.$').length - 1];\n\t\t\t\t\t\t\t\tconst hasLookup = !!row.treeItem?.lookup_collection || (lastSegment || '').includes('(Lookup');\n\n\t\t\t\t\t\t\t\tif (hasLookup && row.treeItem?.lookup_collection && row.treeItem?.lookup_as) {\n\t\t\t\t\t\t\t\t\tensureLookupLocalKeyUnwinds({query, sizes, lookupLocalKey: row.treeItem.lookup_local_key || ''});\n\n\t\t\t\t\t\t\t\t\tconst lookupAsRaw = row.treeItem.lookup_as || '';\n\t\t\t\t\t\t\t\t\tconst lookupAs = lookupAsRaw.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === lookupAs)) {\n\t\t\t\t\t\t\t\t\t\tquery.push({$lookup: {\n\t\t\t\t\t\t\t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: normalizeLookupField(row.treeItem.lookup_local_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tforeignField: normalizeLookupField(row.treeItem.lookup_foreign_key || ''),\n\t\t\t\t\t\t\t\t\t\t\tas: lookupAs\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = lookupAsRaw.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + lookupAs;\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$addFields && Object.keys(a.$addFields).includes('size_' + fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_')))) {\n\t\t\t\t\t\t\t\t\t\tconst sizeKey = fieldPath.replace(/\\.\\$\\./g, '.').replace(/\\./g, '_');\n\t\t\t\t\t\t\t\t\t\tsizes.push(sizeKey);\n\t\t\t\t\t\t\t\t\t\tconst sourceExpr = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + sizeKey]: {$size: {$cond: [{$isArray: sourceExpr}, sourceExpr, []]}}}});\n\t\t\t\t\t\t\t\t\t\tconst unwindPath = '$' + fieldPath.replace(/\\.\\$\\./g, '.');\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: unwindPath, preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfieldPath += '.$';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tapplyLinkFieldUnwinds({\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tsizes,\n\t\t\t\t\t\tfieldsLink,\n\t\t\t\t\t\tselectedFields,\n\t\t\t\t\t\tfilterArrayFields,\n\t\t\t\t\t\tgroupsRow\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\t// NOTE: lookup-based unwinds are no longer needed for joins; union handled below\n\n\t\t\t\t\t// Divide all number fields by sizes\n\t\t\t\t\tlet divFields = {$addFields: {}};\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'sum').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!fieldPath.includes('.$')) {\n\t\t\t\t\t\t\t\tsizes.forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t\t\t};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$count';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' && a.leafValueType === 'Sum').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields[fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + fieldPath.replace(/\\.\\$/g, ''), {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tselectedFields.filter(a => a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) && !groupsRow.some(b => (b.field || '').replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !filterArrayFields.filter(a => a.fieldPath).some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').replace(/\\./g, '_').includes(a))).forEach(size => {\n\t\t\t\t\t\t\tmultFields.push({$cond: { if: { $gt: ['$size_' + size, 0 ] }, then: '$size_' + size, else: 1 }});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (multFields.length) {\n\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$count', {$multiply: multFields}]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (reportType !== 'Dated' && sizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).length) {\n\t\t\t\t\t\t\t\tsizes.filter(a => fieldPath.replace(/\\.\\$\\./g, '_').includes(a)).forEach(size => {\n\t\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$size_' + size;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdivFields.$addFields['count_' + fieldPath.replace(/\\.\\$/g, '')] = '$count';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.filter(a => a.type === 'avg').forEach(total => {\n\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdivFields.$addFields[total.id + '_' + field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tif (Object.keys(divFields.$addFields).length > 0) {\n\t\t\t\t\t\tquery.push(divFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t\tquery.push({$addFields: {[link.id]: {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]}}});\n\t\t\t\t\t\tquery.push({$match: {[link.id]: 0}});\n\t\t\t\t\t});\n\n\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\tcust.operations.filter(a => a.operation && !a.fields.some(b => (b.field === null || b.field === '') && b.value === null)).forEach((operation, opIndex) => {\n\t\t\t\t\t\t\tlet custFieldGroup = {};\n\n\t\t\t\t\t\t\tif (operation.operation === 'divide') {\n\t\t\t\t\t\t\t\tlet condCheck = [];\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, 0]});\n\t\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, 0]});\n\t\t\t\t\t\t\t\t\tcondCheck.push({$eq: ['$' + cust.selFieldId, null]});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet tmpOperationFields = [];\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + cust.selFieldId);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push('$' + field.field.replace(/\\.\\$/g, ''));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttmpOperationFields.push(field.value);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t$cond: { if: { $or: condCheck }, then: 0, else: {['$' + operation.operation]: tmpOperationFields} }\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId] = {\n\t\t\t\t\t\t\t\t\t['$' + operation.operation]: []\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (opIndex > 0) {\n\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $eq: ['$' + cust.selFieldId, null] }, then: 0, else: '$' + cust.selFieldId}});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet condOr = [];\n\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: ['$' + field.field.replace(/\\.\\$/g, ''), null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcondOr.push({$eq: [field.value, null]});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\toperation.fields.filter(a => a.field || a.value !== null).forEach(field => {\n\t\t\t\t\t\t\t\t\tif (field.field) {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: '$' + field.field.replace(/\\.\\$/g, '')}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcustFieldGroup[cust.selFieldId]['$' + operation.operation].push({$cond: { if: { $or: condOr }, then: 0, else: field.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tquery.push({$addFields: custFieldGroup});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\tquery.push({$addFields:{[total.id + '_' + field.selFieldId]: '$' + field.selFieldId}});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Filters - Lookups / Arrays\n\t\t\t\t\tlet queryMatchConditionLookup = {\n\t\t\t\t\t\t$and: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif (lookupFilters.length) {\n\t\t\t\t\t\tlookupFilters.forEach(filter => queryMatchConditionLookup['$and'].push(filter));\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterArrays.forEach(filter => {\n\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t\tquery.push({$match: queryMatchConditionLookup});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Group\n\t\t\t\t\tlet queryGroup = {\n\t\t\t\t\t\t_id: {}\n\t\t\t\t\t};\n\n\t\t\t\t\tif (groupsRow.length || !displayType || displayType === 'grouped') {\n\t\t\t\t\t\tif (!groupsRow.length) {\n\t\t\t\t\t\t\tqueryGroup._id = '$_id';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (rootOptions.sort) { \n\t\t\t\t\t\t\t\tlet groupedSorts = {};\n\t\t\t\t\t\t\t\tObject.keys(rootOptions.sort).forEach(sortField => {\n\t\t\t\t\t\t\t\t\tlet selField = selectedFields.find(a => a.id === sortField);\n\t\n\t\t\t\t\t\t\t\t\tif (selField) {\n\t\t\t\t\t\t\t\t\t\tconst sortPath = (selField && typeof selField.fieldPath === 'string') ? selField.fieldPath.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\t\t\tif (sortPath) {\n\t\t\t\t\t\t\t\t\t\t\tgroupedSorts[sortPath] = rootOptions.sort[sortField];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (Object.keys(groupedSorts).length > 0) {\n\t\t\t\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t\t\t\t$sort: groupedSorts\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (groupsRow.length && date_field && date_interval) {\n\t\t\t\t\t\t\t\tconst dateFieldPath = (typeof date_field === 'string') ? date_field.replace(/\\.\\$/g, '') : '';\n\t\t\t\t\t\t\t\tif (dateFieldPath) {\n\t\t\t\t\t\t\t\t\tif (date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['second'] = {'$second' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['minute'] = {'$minute' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['hour'] = {'$hour' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + dateFieldPath, 'timezone': reportBuilderTimezone}};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\t\tconst rowField = (row && typeof row.field === 'string') ? row.field : '';\n\t\t\t\t\t\t\t\tif (!rowField || !row?.id) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + rowField.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath) {\n\t\t\t\t\t\t\t\t\tif (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$push': {$ifNull: ['$' + fieldPath.replace(/\\.\\$/g, ''), null]}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$avg': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$sum': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tif (reportType === 'Dated') {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$sum': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = { '$push': '$count_' + cust.selFieldId };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$min': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$max': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$first': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$last': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$addToSet': '$' + cust.selFieldId};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryGroup[cust.selFieldId] = {'$push': {$ifNull: ['$' + cust.selFieldId, null]}};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Totals\n\t\t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {['$' + total.type] : '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$group: queryGroup});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//Projection\n\t\t\t\t\t\tlet queryProjection = {\n\t\t\t\t\t\t\t_id: 1\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\tconst fieldPath = (field && typeof field.fieldPath === 'string') ? field.fieldPath : '';\n\t\t\t\t\t\t\t\tif (!fieldPath && field.leafValueType !== 'Count') {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tqueryProjection[field.id] = '$' + fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcustomFields.forEach(cust => {\n\t\t\t\t\t\t\tif (cust === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$avg: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$min: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (cust === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = {$max: '$' + cust.selFieldId};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tqueryProjection[cust.selFieldId] = '$' + cust.selFieldId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//Totals\n\t\t\t\t\t\tif (fieldsTotal.length && (reportType === 'List' || reportType === 'Dated')) {\n\t\t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t\t\t\tselectedFields.filter(a => a.fieldType === 'Number' || a.leafValueType === 'Count').forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tqueryProjection[total.id + '_' + field.selFieldId] = {['$' + total.type]: '$' + total.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tquery.push({$project: queryProjection});\n\t\t\t\t\t}\n\n\t\t\t\t\t// SORT\n\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\tappendSafeSort(query, rootOptions.sort, selectedFields, customFields);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Group' && groupsRow.length > 1) {\n\t\t\t\t\t\tfor (let i = groupsRow.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\tlet projQuery = {_id: 1};\n\n\t\t\t\t\t\t\tprojQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t_id: {[groupsRow[i].id]: '$_id.' + groupsRow[i].id}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.id] = '$' + field.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][field.selFieldId] = '$' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][groupsRow[i + 1].id] = '$' + groupsRow[i + 1].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tprojQuery[totField.id + '_' + selField.id] = 1;\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + selField.id] = '$' + totField.id + '_' + selField.id;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tprojQuery[groupsRow[i].id][totField.id + '_' + field.selFieldId] = '$' + totField.id + '_' + field.selFieldId;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$project: projQuery});\n\n\t\t\t\t\t\t\tlet grQuery = {\n\t\t\t\t\t\t\t\t_id: {}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\t\t\tgrQuery._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgrQuery[groupsRow[i].id] = {\n\t\t\t\t\t\t\t\t$push: '$' + groupsRow[i].id\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + selField.id] = {['$' + totField.type]: '$' + totField.id + '_' + selField.id};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tcustomFields.forEach(field => {\n\t\t\t\t\t\t\t\t\tgrQuery[totField.id + '_' + field.selFieldId] = {['$' + totField.type]: '$' + totField.id + '_' + field.selFieldId};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\n\t\t\t\t\t\t\tif (rootOptions.sort) {\n\t\t\t\t\t\t\t\tlet sortKeys = Object.keys(rootOptions.sort);\n\t\t\t\t\t\t\t\tlet sort = {};\n\n\t\t\t\t\t\t\t\tlet groupString = '';\n\t\t\t\t\t\t\t\tgroupsRow.forEach((row, groupIndex) => {\n\t\t\t\t\t\t\t\t\tif (groupIndex > 0) {\n\t\t\t\t\t\t\t\t\t\tgroupString += 'gr_' + (groupIndex + 1) + '.';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (sortKeys.includes('_id.gr_' + (groupIndex + 1))) {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = rootOptions.sort['_id.gr_' + (groupIndex + 1)];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tsort[groupString + '_id.gr_' + (groupIndex + 1)] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsortKeys.filter(a => !a.startsWith('_id.gr_')).forEach(key => {\n\t\t\t\t\t\t\t\t\tsort[groupString + key] = rootOptions.sort[key];\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tappendSafeSort(query, sort, selectedFields, customFields);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\t\t\tconsole.log('_____________ query __________'); console.log(JSON.stringify(query, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tlet res = null;\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = await modelCollection.aggregate(query, {allowDiskUse: true, readPreference: this.serverConfig['ROOT_URL'] !== 'http://localhost:4200' ? 'secondary' : 'primary'}, true);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(err);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpTotals = {};\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tfieldsTotal.forEach(totField => {\n\t\t\t\t\t\t\tselectedFields.filter(b => b.fieldType === 'Number' || b.leafValueType === 'Count').forEach(selField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + selField.id] = round(res.map(a => a[totField.id + '_' + selField.id] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomFields.forEach(custField => {\n\t\t\t\t\t\t\t\tif (totField.type === 'sum') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (totField.type === 'avg') {\n\t\t\t\t\t\t\t\t\ttmpTotals[totField.id + '_' + custField.selFieldId] = round(res.map(a => a[totField.id + '_' + custField.selFieldId] || 0).reduce((a, b) => a + b, 0) / res.length);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tmpRes = [{\n\t\t\t\t\t\tcount: res ? res.length : 0,\n\t\t\t\t\t\tresults: res ? (rootOptions.limit ? res.splice(0, rootOptions.limit) : res) : [],\n\t\t\t\t\t\ttotals: tmpTotals\n\t\t\t\t\t}];\n\n\t\t\t\t\treturn tmpRes;\n\t\t\t\t}\n\t\t\t},\n\t\t\tworkerTaskWeight: 2\n\t\t}\n\t});\n}\n\nfunction buildCollectionTree(collectionName: string, lookupNode?: any) {\n\tlet lookupSchemaData = getReportLookupSchemas(collectionName).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\tlet lookupSchemaTree = lookupSchemaData.find(a => a.is_root === true)?.tree || {};\n\n\tlet treeItems = buildTree(collectionName, lookupSchemaTree, lookupNode);\n\n\tattachLookupChildren(treeItems, lookupSchemaData, lookupSchemaTree);\n\n\treturn {isLeaf: false, children: treeItems};\n}\n\nfunction attachLookupChildren(treeItems: any[], lookupSchemaData: any[], lookupSchemaTree: any) {\n\tObject.keys(lookupSchemaTree || {}).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\tlet field = findFieldByPath(treeItems, lookup);\n\n\t\tif (field) {\n\t\t\tlet lookupTree = lookupSchemaData.find(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection);\n\n\t\t\tif (lookupTree) {\n\t\t\t\tlet childTree = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupTree.tree, field);\n\t\t\t\tattachLookupChildren(childTree, lookupSchemaData, lookupTree.tree);\n\t\t\t\tfield.children = childTree;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction findFieldByPath(treeItems: any[], lookupPath: string) {\n\tlet fieldPath = lookupPath.split('.');\n\tlet field = null;\n\n\tfieldPath.forEach(path => {\n\t\tif (!field) {\n\t\t\tfield = treeItems.find(a => a.fieldName === path);\n\t\t}\n\t\telse if (field.children) {\n\t\t\tfield = field.children.find(a => a.fieldName === path);\n\t\t}\n\t});\n\n\treturn field;\n}\n\nfunction buildJoinLookupNode(collection_root: string, join: ReportBuilderCollectionJoin, alias: string) {\n\treturn {\n\t\tcollection_name: collection_root,\n\t\tcolumnName: alias,\n\t\tfieldName: alias,\n\t\tfieldType: 'Lookup',\n\t\tfieldTypeName: 'Lookup',\n\t\tdistinctFieldValues: [],\n\t\tfieldPath: alias,\n\t\tfieldPathName: alias,\n\t\tpath: alias,\n\t\tlookup_collection: join.collection,\n\t\tlookup_local_key: join.local_key,\n\t\tlookup_foreign_key: join.foreign_key,\n\t\tlookup_as: alias,\n\t\ttext: alias,\n\t\tvalue: alias,\n\t\tisLeaf: false,\n\t\tisActive: false,\n\t\tisSelected: false,\n\t\tis_join: false,\n\t\tdepth: 0,\n\t\tleafValueType: '',\n\t\tleafFormatType: '',\n\t\tchildren: []\n\t};\n}\n\nfunction buildJoinAlias(join: ReportBuilderCollectionJoin, joinIndex: number) {\n\tif (join.alias && join.alias.trim()) {\n\t\treturn join.alias.trim();\n\t}\n\n\tlet joinName = toTitleCase(join.collection.replace(/\\_/g, ' ').replace(/-/g, ' '));\n\tlet joinPath = toTitleCase(join.local_key.replace(/\\.\\$\\./g, ' -> ').replace(/\\./g, ' -> ').replace(/\\_/g, ' '));\n\n\treturn `${joinName} (${joinPath || 'Join'}) (Lookup ${joinIndex + 1})`;\n}\n\nfunction appendSafeSort(query: any[], sortSpec: any, selectedFields: any[] = [], customFields: any[] = []) {\n\tif (!sortSpec || !Object.keys(sortSpec).length) {\n\t\treturn;\n\t}\n\n\tconst safeAddFields = {};\n\tconst safeSort = {};\n\n\tObject.keys(sortSpec).forEach(key => {\n\t\tif (key.startsWith('_id.')) {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t\treturn;\n\t\t}\n\n\t\tif (isArrayLikeField(key, selectedFields, customFields)) {\n\t\t\tconst safeKey = 'sort_' + key.replace(/\\./g, '_');\n\t\t\tsafeAddFields[safeKey] = {\n\t\t\t\t$cond: [\n\t\t\t\t\t{$isArray: '$' + key},\n\t\t\t\t\t{$size: {$ifNull: ['$' + key, []]}},\n\t\t\t\t\t'$' + key\n\t\t\t\t]\n\t\t\t};\n\t\t\tsafeSort[safeKey] = sortSpec[key];\n\t\t}\n\t\telse {\n\t\t\tsafeSort[key] = sortSpec[key];\n\t\t}\n\t});\n\n\tif (Object.keys(safeAddFields).length) {\n\t\tquery.push({$addFields: safeAddFields});\n\t}\n\n\tif (Object.keys(safeSort).length) {\n\t\tquery.push({$sort: safeSort});\n\t}\n}\n\nfunction isArrayLikeField(sortKey: string, selectedFields: any[] = [], customFields: any[] = []) {\n\tconst field = selectedFields.find(a => a.id === sortKey);\n\tconst custom = customFields.find(a => a.selFieldId === sortKey);\n\n\tconst leafValueType = field ? field.leafValueType : (custom ? custom.leafValueType : '');\n\n\treturn leafValueType !== 'Average' &&\n\t\tleafValueType !== 'Sum' &&\n\t\tleafValueType !== 'Count' &&\n\t\tleafValueType !== 'Minimum' &&\n\t\tleafValueType !== 'Maximum' &&\n\t\tleafValueType !== 'First' &&\n\t\tleafValueType !== 'Last' &&\n\t\tleafValueType !== 'Unique';\n}\n\nfunction collectLookupAliases(selectedFields: any[] = [], filterArrayFields: any[] = [], groupsRow: any[] = []) {\n\tconst aliases = new Set<string>();\n\n\tconst addAlias = (alias: string) => {\n\t\tconst normalized = normalizeLookupAlias(alias);\n\t\tif (normalized) {\n\t\t\taliases.add(normalized);\n\t\t}\n\t};\n\n\t(selectedFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(filterArrayFields || []).forEach(field => {\n\t\tif (field && (field.lookup_collection || (field.fieldPath && field.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(field.lookup_as || extractLookupAlias(field.fieldPath));\n\t\t}\n\t});\n\n\t(groupsRow || []).forEach(group => {\n\t\tif (group?.treeItem && (group.treeItem.lookup_collection || (group.treeItem.fieldPath && group.treeItem.fieldPath.includes('(Lookup')))) {\n\t\t\taddAlias(group.treeItem.lookup_as || extractLookupAlias(group.treeItem.fieldPath));\n\t\t}\n\t});\n\n\treturn aliases;\n}\n\nfunction splitFiltersByLookup(filters: any[] = [], lookupAliases: Set<string> = new Set()) {\n\tconst rootFilters = [];\n\tconst lookupFilters = [];\n\n\t(filters || []).forEach(filter => {\n\t\tconst summary = summarizeFilterTargets(filter, lookupAliases);\n\n\t\tif (summary.hasLookup) {\n\t\t\t// If the filter mixes root + lookup, keep it together in lookupFilters so it stays a single $match/$or\n\t\t\tlookupFilters.push(filter);\n\t\t}\n\t\telse {\n\t\t\trootFilters.push(filter);\n\t\t}\n\t});\n\n\treturn {rootFilters, lookupFilters};\n}\n\nfunction summarizeFilterTargets(filter: any, lookupAliases: Set<string>) {\n\tconst result = {hasLookup: false, hasRoot: false};\n\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn result;\n\t}\n\n\tObject.keys(filter).forEach(key => {\n\t\tif (key === '$or' || key === '$and') {\n\t\t\tconst branch = filter[key];\n\t\t\tif (Array.isArray(branch)) {\n\t\t\t\tbranch.forEach(child => {\n\t\t\t\t\tconst childSummary = summarizeFilterTargets(child, lookupAliases);\n\t\t\t\t\tresult.hasLookup = result.hasLookup || childSummary.hasLookup;\n\t\t\t\t\tresult.hasRoot = result.hasRoot || childSummary.hasRoot;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst isLookup = isLookupPath(key, lookupAliases);\n\t\t\tif (isLookup) {\n\t\t\t\tresult.hasLookup = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult.hasRoot = true;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction isLookupPath(path: string, lookupAliases: Set<string>) {\n\tif (!path) {\n\t\treturn false;\n\t}\n\n\tconst normalizedPath = path.replace(/\\.\\$/g, '');\n\n\tif (normalizedPath.includes('(Lookup')) {\n\t\treturn true;\n\t}\n\n\tconst rootKey = normalizedPath.split('.')[0];\n\treturn lookupAliases.has(rootKey);\n}\n\nfunction extractLookupAlias(path: string) {\n\tif (!path || !path.includes('(Lookup')) {\n\t\treturn '';\n\t}\n\n\treturn path.replace(/\\.\\$/g, '').split('.')[0];\n}\n\nfunction normalizeLookupAlias(alias: string) {\n\treturn (alias || '').replace(/\\.\\$/g, '').trim();\n}\n\nfunction collectRootDatePaths(collectionName: string) {\n\tconst out = new Set<string>();\n\tconst collection = ResolveIOServer.getMongoManager().collection(collectionName);\n\tconst schema = collection?.rbSchema || {};\n\n\tObject.keys(schema).forEach(path => {\n\t\tif (schema[path]?.rbType === 'Date') {\n\t\t\tout.add(path.replace(/\\.\\$/g, ''));\n\t\t}\n\t});\n\n\treturn out;\n}\n\nfunction coerceDateFilters(filters: any[] = [], datePaths: Set<string>) {\n\tconst coerceDateValue = (value: any): any => {\n\t\tif (value instanceof Date) {\n\t\t\treturn value;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(coerceDateValue);\n\t\t}\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\tconst parsed = new Date(value);\n\t\t\tif (!isNaN(parsed.getTime())) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t};\n\n\tconst coerceFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tobj.forEach(coerceFilterObject);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tobj.$or = obj.$or.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tobj.$and = obj.$and.map(coerceFilterObject).filter(Boolean);\n\t\t\treturn obj;\n\t\t}\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tif (key.startsWith('$')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst normalizedKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (!datePaths.has(normalizedKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = obj[key];\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n\t\t\t\tObject.keys(value).forEach(op => {\n\t\t\t\t\tif (op.startsWith('$')) {\n\t\t\t\t\t\tvalue[op] = coerceDateValue(value[op]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tobj[key] = coerceDateValue(value);\n\t\t\t}\n\t\t});\n\n\t\treturn obj;\n\t};\n\n\t(filters || []).forEach(coerceFilterObject);\n}\n\n// Helpers to support union-based joins (collection_joins without local/foreign key)\nfunction stripAliasFromPath(path: string, alias: string) {\n\tif (!path) {\n\t\treturn path;\n\t}\n\n\tconst cleanAlias = alias.replace(/\\.\\$/g, '');\n\tconst cleanPath = path.replace(/\\.\\$/g, '');\n\n\tif (cleanPath.startsWith(cleanAlias + '.')) {\n\t\treturn cleanPath.substring(cleanAlias.length + 1);\n\t}\n\n\treturn cleanPath;\n}\n\nfunction buildCollectionPipeline(collectionName: string, alias: string, selectedFields: any[] = [], filters: any[] = [], filterArrays: any[] = [], isRoot = false) {\n\tconst pipeline: any[] = [];\n\tconst matchClauses: any[] = [];\n\tconst matchArrayClauses: any[] = [];\n\n\tconst targetAlias = isRoot ? '' : alias.replace(/\\.\\$/g, '');\n\n\tconst mapFilterForCollection = (filterObj: any, toArray: boolean) => {\n\t\tif (!filterObj || typeof filterObj !== 'object') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mapped = mapFilterPaths(filterObj, targetAlias, isRoot);\n\t\tif (mapped) {\n\t\t\t(toArray ? matchArrayClauses : matchClauses).push(mapped);\n\t\t}\n\t};\n\n\t(filters || []).forEach(f => mapFilterForCollection(f, false));\n\t(filterArrays || []).forEach(f => mapFilterForCollection(f, true));\n\n\tif (matchClauses.length || matchArrayClauses.length) {\n\t\tconst match: any = {$and: [...matchClauses, ...matchArrayClauses]};\n\t\tpipeline.push({$match: match});\n\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tconsole.info('RB debug: collection pipeline match', {\n\t\t\t\tcollection: collectionName,\n\t\t\t\talias: targetAlias || collectionName,\n\t\t\t\tmatchJson: JSON.stringify(match, null, 2)\n\t\t\t});\n\t\t}\n\t}\n\n\t// Projection mapping selected fields for this collection\n\tconst projection: any = {_id: 1, __rb_collection: targetAlias || collectionName};\n\t(selectedFields || [])\n\t\t.filter(f => isFieldForCollection(f, collectionName, targetAlias))\n\t\t.forEach(f => {\n\t\t\tconst mappedPath = stripAliasFromPath(f.fieldPath || '', targetAlias || f.lookup_as || '');\n\t\t\tif (f.leafValueType === 'Average') {\n\t\t\t\tprojection[f.id] = {$avg: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Sum') {\n\t\t\t\tprojection[f.id] = {$sum: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Count') {\n\t\t\t\tprojection[f.id] = {$sum: 1};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Minimum') {\n\t\t\t\tprojection[f.id] = {$min: '$' + mappedPath};\n\t\t\t}\n\t\t\telse if (f.leafValueType === 'Maximum') {\n\t\t\t\tprojection[f.id] = {$max: '$' + mappedPath};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprojection[f.id] = '$' + mappedPath;\n\t\t\t}\n\t\t});\n\n\tpipeline.push({$project: projection});\n\n\treturn pipeline;\n}\n\nfunction isFieldForCollection(field: any, collectionName: string, alias: string) {\n\tif (!field) {\n\t\treturn false;\n\t}\n\n\t// Root collection check\n\tif (!alias) {\n\t\treturn field.collection_name === collectionName && (!field.lookup_collection || field.lookup_collection === '');\n\t}\n\n\t// Joined collection check\n\treturn field.lookup_collection === collectionName || (field.lookup_as && field.lookup_as.replace(/\\.\\$/g, '') === alias);\n}\n\nfunction mapFilterPaths(filter: any, alias: string, isRoot: boolean) {\n\tif (!filter || typeof filter !== 'object') {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\treturn filter.map(f => mapFilterPaths(f, alias, isRoot));\n\t}\n\n\tif (filter.$or) {\n\t\tconst mapped = filter.$or.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$or: mapped} : null;\n\t}\n\n\tif (filter.$and) {\n\t\tconst mapped = filter.$and.map(f => mapFilterPaths(f, alias, isRoot)).filter(Boolean);\n\t\treturn mapped.length ? {$and: mapped} : null;\n\t}\n\n\tconst out: any = {};\n\tObject.keys(filter).forEach(key => {\n\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\n\t\tif (!alias) {\n\t\t\t// root collection: ignore keys that start with a lookup alias\n\t\t\tif (cleanKey.includes('(Lookup')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (lookupAliasMatches(cleanKey, alias)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tout[cleanKey] = filter[key];\n\t\t}\n\t\telse {\n\t\t\tif (cleanKey.startsWith(alias + '.')) {\n\t\t\t\tout[cleanKey.substring(alias.length + 1)] = filter[key];\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Object.keys(out).length ? out : null;\n}\n\nfunction lookupAliasMatches(path: string, alias: string) {\n\tif (!path || !alias) {\n\t\treturn false;\n\t}\n\treturn path.startsWith(alias + '.') || path === alias;\n}\n\nfunction buildLayoutSortSpec(sortSpec: any = {}, selectedFields: any[] = []) {\n\tconst outSort: any = {...sortSpec};\n\tconst addFields: any = {};\n\n\tObject.keys(sortSpec || {}).forEach(key => {\n\t\tif (!key.startsWith('layout_col_')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalized = key.replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (isNaN(idx)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst layoutFields = (selectedFields || []).filter(f => typeof f?.layoutColumnIndex !== 'undefined' && f.layoutColumnIndex === idx).map(f => f.id).filter(Boolean);\n\n\t\tif (!layoutFields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build nested $ifNull chain to coalesce across layout column targets\n\t\tlet coalesce: any = '';\n\t\tfor (let i = layoutFields.length - 1; i >= 0; i--) {\n\t\t\tconst fieldPath = '$' + layoutFields[i];\n\t\t\tif (i === layoutFields.length - 1) {\n\t\t\t\tcoalesce = fieldPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcoalesce = {$ifNull: [fieldPath, coalesce]};\n\t\t\t}\n\t\t}\n\n\t\tconst sortKey = 'sort_' + key;\n\t\taddFields[sortKey] = coalesce;\n\n\t\tdelete outSort[key];\n\t\toutSort[sortKey] = sortSpec[key];\n\t});\n\n\treturn {sortSpec: outSort, addFields};\n}\n\nfunction remapFiltersToIds(filters: any[] = [], selectedFields: any[] = []) {\n\tconst byPath = new Map<string, string>();\n\tconst layoutMap = new Map<number, string[]>();\n\t(selectedFields || []).forEach(f => {\n\t\tif (f?.fieldPath && f?.id) {\n\t\t\tbyPath.set(f.fieldPath.replace(/\\.\\$/g, ''), f.id);\n\t\t}\n\n\t\tif (typeof f?.layoutColumnIndex !== 'undefined') {\n\t\t\tconst arr = layoutMap.get(f.layoutColumnIndex) || [];\n\t\t\tarr.push(f.id);\n\t\t\tlayoutMap.set(f.layoutColumnIndex, arr);\n\t\t}\n\t});\n\n\tconst remapObj = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(remapObj);\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\tconst mapped = obj.$or.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$or: mapped} : null;\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\tconst mapped = obj.$and.map(remapObj).filter(Boolean);\n\t\t\treturn mapped.length ? {$and: mapped} : null;\n\t\t}\n\n\t\tconst out: any = {};\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst cleanKey = key.replace(/\\.\\$/g, '');\n\t\t\tif (cleanKey.startsWith('layout_col_')) {\n\t\t\t\t// map to all field ids in that layout column index\n\t\t\t\tconst normalized = cleanKey.replace(/^layout_col_/, '');\n\t\t\t\tconst parts = normalized.split('_');\n\t\t\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\t\t\t\tconst targets = layoutMap.get(idx) || [];\n\n\t\t\t\tif (targets.length) {\n\t\t\t\t\tconst mappedVal = remapObj(obj[key]);\n\t\t\t\t\tout.$or = targets.map(id => ({[id]: mappedVal}));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst mappedKey = byPath.get(cleanKey) || cleanKey;\n\t\t\tout[mappedKey] = remapObj(obj[key]);\n\t\t});\n\n\t\treturn Object.keys(out).length ? out : null;\n\t};\n\n\treturn (filters || []).map(remapObj).filter(Boolean);\n}\n\nfunction expandLayoutColumnFilters(filters: any[] = [], selectedFields: any[] = []) {\n\tconst layoutCache: {[key: string]: string[]} = {};\n\n\tconst resolveLayoutPaths = (layoutKey: string) => {\n\t\tif (layoutCache[layoutKey]) {\n\t\t\treturn layoutCache[layoutKey];\n\t\t}\n\n\t\tlet paths: string[] = [];\n\t\tconst normalized = (layoutKey || '').replace(/^layout_col_/, '');\n\t\tconst parts = normalized.split('_');\n\t\tconst idx = parseInt(parts[parts.length - 1], 10);\n\n\t\tif (!isNaN(idx)) {\n\t\t\tpaths = (selectedFields || [])\n\t\t\t\t.filter(f => f && (f.layoutColumnIndex === idx || (f.id || '').includes(`f_layout_${idx}_`)))\n\t\t\t\t.map(f => f.fieldPath ? f.fieldPath.replace(/\\.\\$/g, '') : '')\n\t\t\t\t.filter(p => !!p);\n\t\t}\n\n\t\tlayoutCache[layoutKey] = paths;\n\t\treturn paths;\n\t};\n\n\tconst expandFilterObject = (obj: any): any => {\n\t\tif (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (obj.$or) {\n\t\t\treturn {$or: obj.$or.map(expandFilterObject)};\n\t\t}\n\n\t\tif (obj.$and) {\n\t\t\treturn {$and: obj.$and.map(expandFilterObject)};\n\t\t}\n\n\t\tlet expanded: any = {};\n\t\tlet replaced = false;\n\n\t\tObject.keys(obj).forEach(key => {\n\t\t\tconst val = obj[key];\n\n\t\t\tif (key.startsWith('layout_col_')) {\n\t\t\t\tconst paths = resolveLayoutPaths(key);\n\n\t\t\t\tif (paths.length) {\n\t\t\t\t\treplaced = true;\n\t\t\t\t\texpanded.$or = paths.map(path => ({[path]: val}));\n\t\t\t\t\t// Use console to trace layout filter expansion without requiring a logger on ResolveIOServer\n\t\t\t\t\tconsole.info('RB layout filter expansion', {layoutKey: key, paths});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn('RB layout filter expansion failed', {layoutKey: key, selectedFields});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\texpanded[key] = val;\n\t\t\t}\n\t\t});\n\n\t\treturn replaced ? expanded : obj;\n\t};\n\n\treturn (filters || []).map(expandFilterObject);\n}\n"]}
|