@resolveio/server-lib 6.4.2 → 6.4.3-newrole
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.
- package/collections/user.collection.js +40 -32
- package/collections/user.collection.js.map +1 -1
- package/methods/accounts.js.map +1 -1
- package/methods/cron-jobs.js.map +1 -1
- package/methods/report-builder.js +3 -5
- package/methods/report-builder.js.map +1 -1
- package/models/user.model.d.ts +25 -14
- package/models/user.model.js.map +1 -1
- package/package.json +1 -1
- package/publications/report-builder-libraries.js +3 -4
- package/publications/report-builder-libraries.js.map +1 -1
|
@@ -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 { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../index';\nimport { getReportLookupSchemas, buildTree, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportBuilderBuildTree: {\n\t\t\tskipQueue: true,\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}),\n\t\t\tfunction: function(collection_root: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet lookupSchemaData = getReportLookupSchemas(collection_root).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\t\t\t\t\tlet lookupSchemaTree = lookupSchemaData.filter(a => a.is_root === true)[0].tree;\n\n\t\t\t\t\tlet treeItems = buildTree(collection_root, lookupSchemaTree);\n\n\t\t\t\t\tObject.keys(lookupSchemaTree).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\t\t\t\t\tlet fieldPath = lookup.split('.');\n\t\t\t\t\t\tlet field = null;\n\t\t\t\t\t\tfieldPath.forEach(path => {\n\t\t\t\t\t\t\tif (!field) {\n\t\t\t\t\t\t\t\tfield = treeItems.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tfield = field.children.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfield.children = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupSchemaData.filter(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection)[0].tree, field);\n\t\t\t\t\t});\n\n\t\t\t\t\t// console.log('----------- Tree Items -----------', treeItems);\n\n\t\t\t\t\tresolve({isLeaf: false, children: treeItems});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tskipQueue: true,\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: function(treeLeaf) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\t\tif (treeLeaf.fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/^.+\\(Lookup\\)\\.\\$\\./g, '').replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tskipQueue: 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\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\ttabularDisplayType: {\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(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', tabularDisplayType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\n\t\t\t\t\t\n\t\t\t\t\t// console.log(reportType, rootCollectionName, rootOptions, filters, selectedFields, groupsRow, fieldsTotal, fieldsLink);\n\n\t\t\t\t\t// let uniqueSelectedFieldCollections = selectedFields.map(a => a.collection_name).filter((elem, index, self) => {\n\t\t\t\t\t// \treturn index === self.indexOf(elem);\n\t\t\t\t\t// });\n\n\t\t\t\t\tlet modelCollection = ResolveIOServer.getMainDB().model(rootCollectionName);\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\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\t\t{\n\t\t\t\t\t\t\t\t$or: []\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.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t\tinitialQueryMatchCondition['$and'][0].$or.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 (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) {\n\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\tinitialQueryMatchCondition['$and'].push(filter);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\tif (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\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.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\t\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === filterField.lookup_as.replace(/\\.\\$/g, ''))) {\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: filterField.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\tforeignField: filterField.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\tas: filterField.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tsizes.push(filterField.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + filterField.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + filterField.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + filterField.lookup_as.replace(/\\.\\$/g, ''), 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\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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\tif (row.field.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = row.field.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === row.treeItem.lookup_as.replace(/\\.\\$/g, ''))) {\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: row.treeItem.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\tif (field.fieldPath.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = field.fieldPath.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === field.lookup_as.replace(/\\.\\$/g, ''))) {\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: field.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(field.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + field.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + field.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\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\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!field.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 => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.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: ['$' + field.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] = '$' + field.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\tlet multFields = [];\n\n\t\t\t\t\t\tif (field.fieldPath.includes('.$')) {\n\t\t\t\t\t\t\tsizes.filter(a => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !groupsRow.some(b => b.field.replace(/\\.\\$\\./g, '_').includes(a)) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.replace(/\\.\\$\\./g, '_').includes(a))).forEach(size => {\n\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});\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[field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + field.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\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !groupsRow.some(b => b.field.replace(/\\.\\$\\./g, '_').includes(a)) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.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_' + field.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\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$count';\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\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 (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) {\n\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t});\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 || !tabularDisplayType || tabularDisplayType === '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\t\n\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\tif (date_field && date_interval) {\n\t\t\t\t\t\t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + field.fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'First' || (!groupsRow.length && !field.fieldPath.includes('.$'))) {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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\t// queryGroup[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {$sum: '$' + total.id + '_' + field.id};\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\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), 0]};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), -1]};\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[field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\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 === 'Tabular' || 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\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\tquery.push({\n\t\t\t\t\t\t\t$sort: rootOptions.sort\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Tabular 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\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\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\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// console.log('_____________ query __________'); console.log(query); console.log(JSON.stringify(query, null, 2));\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);\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] = Math.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\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\tresolve(tmpRes);\n\t\t\t\t});\n\t\t\t},\n\t\t}\n\t});\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// let queryGroupUnwindCollectionPaths = [];\n\t\t\t\t\t// groupsRow.filter(a => a.treeItem.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.treeItem.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryGroupUnwindCollectionPaths.filter(a => a === path)[0]) {\n\t\t\t\t\t// \t\t\tqueryGroupUnwindCollectionPaths.push(path);\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// // Unwind\n\t\t\t\t\t// let queryUnwindCollectionPaths = [];\n\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryUnwindCollectionPaths.some(a => a === path) && !queryGroupUnwindCollectionPaths.some(a => a === path)) {\n\t\t\t\t\t// \t\t\tqueryUnwindCollectionPaths.push(path);\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// \t//Links\n\t\t\t\t\t// \tif (fieldsLink.length) {\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\tqueryGroup[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\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 && reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet correctSort = {};\n\n\t\t\t\t\t// \t\tObject.keys(rootOptions.sort).forEach(key => {\n\t\t\t\t\t// \t\t\tcorrectSort[selectedFields.filter(a => a.id === key)[0].fieldPath.replace(/\\.\\$/g, '')] = rootOptions.sort[key];\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tqueryGroups.push({\n\t\t\t\t\t// \t\t\t$sort: correctSort\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t/* --------------------- START IF GROUP ---------------------- */\n\n\t\t\t\t\t// Lookups for Groups\n\t\t\t\t\t// let groupQueries = [];\n\t\t\t\t\t// groupsRow.forEach(row => {\n\t\t\t\t\t// \tif (row.field.includes('$')) {\n\t\t\t\t\t// \t\tlet fieldData = row.field.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\t\n\t\t\t\t\t// \t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t// \t\t\tif (fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t// \t\t\t\tgroupQueries.push({$lookup: {\n\t\t\t\t\t// \t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t// \t\t\t\t\tlocalField: row.treeItem.lookup_local_key,\n\t\t\t\t\t// \t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t}});\n\n\t\t\t\t\t// \t\t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.include('.$') && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '')} , 0 ] }, then: {$size: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '')}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\t\tgroupQueries.push(addFields);\n\t\t\t\t\t// \t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t} \n\t\t\t\t\t// \t\t\t\t}\n\n\t\t\t\t\t// \t\t\t\t// total_1_f_0: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$loaded_miles.loaded_miles', {$multiply: [{$size: '$chemicals'}] } ]\n\t\t\t\t\t// \t\t\t\t// },\n\t\t\t\t\t// \t\t\t\t// total_1_f_1: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$wo_number', {$size: '$chemicals'}]\n\t\t\t\t\t// \t\t\t\t// }\n\t\t\n\t\t\t\t\t// \t\t\t\t// groupQueries.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.includes('.$') && a.fieldType === 'Number' && !groupQueries.some(b => b.$addFields && Object.keys(b.$addFields).includes(total.id + '_' + a.id))).forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + fieldPath} , 0 ] }, then: {$size: '$' + fieldPath}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\tgroupQueries.push(addFields);\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\n\t\t\t\t\t// \t\t\tgroupQueries.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\n\t\t\t\t\t// \t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\tselectedFields.filter(a => a.fieldPath.replace(/\\.\\$/g, '').includes(fieldPath) && a.fieldPath.split('.$').length === 2 && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\tgroupQueries.push(addFields);\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\t\t\t\t\t// });\n\n\t\t\t\t\t// if (!groupsRow.length) {\n\t\t\t\t\t// \tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\tlet fieldData = field.fieldPath.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\t\n\t\t\t\t\t// \t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t// \t\t\tif (fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t// \t\t\t\tgroupQueries.push({$lookup: {\n\t\t\t\t\t// \t\t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t// \t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t// \t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t}});\n\n\t\t\t\t\t// \t\t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.include('.$') && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + field.lookup_as.replace(/\\.\\$/g, '')} , 0 ] }, then: {$size: '$' + field.lookup_as.replace(/\\.\\$/g, '')}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\t\tgroupQueries.push(addFields);\n\t\t\t\t\t// \t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t} \n\t\t\t\t\t// \t\t\t\t}\n\n\t\t\t\t\t// \t\t\t\t// total_1_f_0: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$loaded_miles.loaded_miles', {$multiply: [{$size: '$chemicals'}] } ]\n\t\t\t\t\t// \t\t\t\t// },\n\t\t\t\t\t// \t\t\t\t// total_1_f_1: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$wo_number', {$size: '$chemicals'}]\n\t\t\t\t\t// \t\t\t\t// }\n\t\t\n\t\t\t\t\t// \t\t\t\t// groupQueries.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.includes('.$') && a.fieldType === 'Number' && !groupQueries.some(b => b.$addFields && Object.keys(b.$addFields).includes(total.id + '_' + a.id))).forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + fieldPath} , 0 ] }, then: {$size: '$' + fieldPath}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\tgroupQueries.push(addFields);\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\n\t\t\t\t\t// \t\t\tgroupQueries.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\n\t\t\t\t\t// \t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\tselectedFields.filter(a => a.fieldPath.replace(/\\.\\$/g, '').includes(fieldPath) && a.fieldPath.split('.$').length === 2 && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\tgroupQueries.push(addFields);\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\t\t\t\t\t// }\n\n\t\t\t\t\t// // Add group lookups and unwinds to query\n\t\t\t\t\t// query = query.concat(groupQueries);\n\n\t\t\t\t\t// // GROUP\t\t\t\t\t\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tlet queryGroup = {\n\t\t\t\t\t// \t\t_id: {}\n\t\t\t\t\t// \t};\n\t\t\t\t\t\t\n\t\t\t\t\t// \tgroupsRow.forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t// \t\tif (date_field && date_interval) {\n\t\t\t\t\t// \t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\t// queryGroup._id['month'] = {'$month' : '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\t// queryGroup[date_field.replace(/\\.\\$/g, '')] = {$first: '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': 1};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\t// if (field.fieldPath.includes('.$') && ) {\n\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').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\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryGroup[field.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\tqueryGroup[field.fieldPath.split('.$')[0]] = {$push: '$' + field.fieldPath.split('.$')[0]};\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\t// else {\n\t\t\t\t\t// \tlet queryGroup = {\n\t\t\t\t\t// \t\t_id: '$_id'\n\t\t\t\t\t// \t};\n\n\t\t\t\t\t// \tselectedFields.filter(a => !a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': 1};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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').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\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryGroup[field.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\tqueryGroup[field.fieldPath.split('.$')[0]] = {$push: '$' + field.fieldPath.split('.$')[0]};\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\n\t\t\t\t\t// /* --------------------- END IF GROUP ---------------------- */\n\n\t\t\t\t\t// // Lookup Selected Fields\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t// Unwind if from group\n\n\t\t\t\t\t// \tif (groupsRow.length && !groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\tquery.push({$unwind: {\n\t\t\t\t\t// \t\t\tpath: '$' + field.fieldPath.split('.$')[0],\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: true\n\t\t\t\t\t// \t\t}});\n\t\t\t\t\t// \t}\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \t// Loop for each array value (Not Grouped!)\n\t\t\t\t\t// \tfor (let i = 0; i < field.fieldPath.split('.$').length; i++) {\n\t\t\t\t\t// \t\tpath += field.fieldPath.split('.$')[i];\n\n\t\t\t\t\t// \t\t// Unwind\n\t\t\t\t\t// \t\tif (i < field.fieldPath.split('.$').length - 1 && !groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\t\tquery.push({$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: true\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\t// Link\n\t\t\t\t\t// \t\tif (!groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\t\tlet firstLink = link.field_first.split('.$.');\n\t\t\t\t\t// \t\t\t\tfirstLink.pop();\n\t\t\t\t\t// \t\t\t\tfirstLink = firstLink.join('.');\n\t\t\t\t\t// \t\t\t\tlet secondLink = link.field_second.split('.$.');\n\t\t\t\t\t// \t\t\t\tsecondLink.pop();\n\t\t\t\t\t// \t\t\t\tsecondLink = secondLink.join('.');\n\n\t\t\t\t\t// \t\t\t\tif ('$' + firstLink === path || '$' + secondLink === path) {\n\t\t\t\t\t// \t\t\t\t\tquery.push(\n\t\t\t\t\t// \t\t\t\t\t\t{\n\t\t\t\t\t// \t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t[link.id]: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$cmp: [\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t\t'$' + link.field_first.replace(/\\.\\$/g, ''), \n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t\t'$' + link.field_second.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t},\n\t\t\t\t\t// \t\t\t\t\t\t{\n\t\t\t\t\t// \t\t\t\t\t\t\t$match: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t[link.id]: 0\n\t\t\t\t\t// \t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t}\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}\n\n\t\t\t\t\t// \t\t//Totals\n\t\t\t\t\t// \t\tif (i === field.fieldPath.split('.$').length - 1 && field.fieldType === 'Number') {\n\t\t\t\t\t// \t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\tquery.push({$addFields: {[total.id + '_' + field.id]: path}});\n\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// Regroup\n\t\t\t\t\t// \tlet queryLoopGroup = {\n\t\t\t\t\t// \t\t_id: {}\n\t\t\t\t\t// \t};\n\n\t\t\t\t\t// \tif (!groupsRow.length) {\n\t\t\t\t\t// \t\tqueryLoopGroup._id = '$_id';\n\t\t\t\t\t// \t}\n\t\t\t\t\t\t\n\t\t\t\t\t// \tgroupsRow.forEach(row => {\n\t\t\t\t\t// \t\tqueryLoopGroup._id[row.id] = '$_id.' + row.id;\n\n\t\t\t\t\t// \t\tif (date_field && date_interval) {\n\t\t\t\t\t// \t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['day'] = '$_id.day';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['week'] = '$_id.week';\n\t\t\t\t\t// \t\t\t\t// queryGroup._id['month'] = {'$month' : '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\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// \tselectedFields.forEach(selField => {\n\t\t\t\t\t// \t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\tif (selField.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$avg': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$sum': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$sum': 1};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$min': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$max': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$first': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$last': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.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\tqueryLoopGroup[selField.id] = {'$push': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.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\telse {\n\t\t\t\t\t// \t\t\tqueryLoopGroup[selField.id] = {'$first': '$' + selField.id};\t\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').forEach(selField => {\n\t\t\t\t\t// \t\t\t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\t\t\tqueryLoopGroup[total.id + '_' + selField.id] = {['$' + total.type]: '$' + total.id + '_' + selField.id};\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\tqueryLoopGroup[total.id + '_' + selField.id] = {$first: '$' + total.id + '_' + selField.id};\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryLoopGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(selField => {\n\t\t\t\t\t// \t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\tif (!queryLoopGroup[selField.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.fieldPath.split('.$')[0]] = {$push: '$' + selField.fieldPath.split('.$')[0]};\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 (!queryLoopGroup[selField.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.fieldPath.split('.$')[0]] = {$first: '$' + selField.fieldPath.split('.$')[0]};\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: queryLoopGroup});\n\n\t\t\t\t\t// \t// Sort\n\t\t\t\t\t\t\n\t\t\t\t\t// });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\n\n\t\t\t\t\t// uniqueSelectedFieldCollections.filter(a => a !== rootCollectionName).forEach(uniqueCollection => {\n\t\t\t\t\t// \tselectedFields.filter(a => a.collection_name === uniqueCollection).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryLookups.filter(a => a.as === field.lookup_as.replace(/\\.\\$/g, '')).length) {\n\t\t\t\t\t// \t\t\tqueryLookups.push({\n\t\t\t\t\t// \t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t// \t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t// \t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\tas: field.lookup_as.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\t// let queryGroupUnwindCollectionPaths = [];\n\t\t\t\t\t// groupsRow.filter(a => a.treeItem.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.treeItem.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryGroupUnwindCollectionPaths.filter(a => a === path)[0]) {\n\t\t\t\t\t// \t\t\tqueryGroupUnwindCollectionPaths.push(path);\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// // Unwind\n\t\t\t\t\t// let queryUnwindCollectionPaths = [];\n\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryUnwindCollectionPaths.some(a => a === path) && !queryGroupUnwindCollectionPaths.some(a => a === path)) {\n\t\t\t\t\t// \t\t\tqueryUnwindCollectionPaths.push(path);\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// \t//Links\n\t\t\t\t\t// \tif (fieldsLink.length) {\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\tqueryGroup[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\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 && reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet correctSort = {};\n\n\t\t\t\t\t// \t\tObject.keys(rootOptions.sort).forEach(key => {\n\t\t\t\t\t// \t\t\tcorrectSort[selectedFields.filter(a => a.id === key)[0].fieldPath.replace(/\\.\\$/g, '')] = rootOptions.sort[key];\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tqueryGroups.push({\n\t\t\t\t\t// \t\t\t$sort: correctSort\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\n\t\t\t\t\t// \tqueryGroups.push({$group: queryGroup});\n\n\t\t\t\t\t// \tif (reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tfor (let i = groupsRow.length - 1; i > 0; i--) {\n\t\t\t\t\t// \t\t\tqueryGroups.push({$sort: {['_id.' + groupsRow[i].id]: 1}});\n\n\t\t\t\t\t// \t\t\tlet tmpQueryGroup = {\n\t\t\t\t\t// \t\t\t\t_id: {}\n\t\t\t\t\t// \t\t\t};\n\n\t\t\t\t\t// \t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t// \t\t\t\ttmpQueryGroup._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tlet tmpQueryGroupObj = {\n\t\t\t\t\t// \t\t\t\t[groupsRow[i].id]: '$_id.' + [groupsRow[i].id]\n\t\t\t\t\t// \t\t\t};\n\n\t\t\t\t\t// \t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t// \t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroupObj[field.id] = '$' + field.id;\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\ttmpQueryGroupObj[groupsRow[i + 1].id] = '$' + [groupsRow[i + 1].id];\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\tselectedFields.filter(a => a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroupObj[total.id + '_' + field.id] = '$' + total.id + '_' + field.id;\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroup[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\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\ttmpQueryGroup[groupsRow[i].id] = {'$push': tmpQueryGroupObj};\n\n\t\t\t\t\t// \t\t\tqueryGroups.push({$group: tmpQueryGroup});\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\tqueryGroups.push({$sort: {['_id.' + groupsRow[0].id]: 1}});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (reportType === 'Dated') {\n\t\t\t\t\t// \t\t// db.collection.aggregate([\n\t\t\t\t\t// \t\t// \t{ \"$group\": {\n\t\t\t\t\t// \t\t// \t\t\"_id\": {\n\t\t\t\t\t// \t\t// \t\t\"$toDate\": {\n\t\t\t\t\t// \t\t// \t\t\t\"$subtract\": [\n\t\t\t\t\t// \t\t// \t\t\t{ \"$toLong\": \"$created_at\" },\n\t\t\t\t\t// \t\t// \t\t\t{ \"$mod\": [ { \"$toLong\": \"$created_at\" }, 1000 * 60 * 15 ] }\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\t},\n\t\t\t\t\t// \t\t// \t\t\"count\": { \"$sum\": 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}\n\t\t\t\t\t// }\n\t\t\t\t\t\n\t\t\t\t\t// //Projection\n\t\t\t\t\t// let queryProjection = {\n\t\t\t\t\t// \t_id: 1\n\t\t\t\t\t// };\n\n\t\t\t\t\t// selectedFields.forEach(field => {\n\t\t\t\t\t// \tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$avg: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$sum: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$min: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$max: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), 0]};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), -1]};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t}\n\t\t\t\t\t// });\n\n\t\t\t\t\t// //Links\n\n\t\t\t\t\t// if (fieldsLink.length) {\n\t\t\t\t\t// \tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\tqueryProjection[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// //Totals\n\t\t\t\t\t// let queryTotals = null;\n\n\t\t\t\t\t// if (fieldsTotal.length && (reportType === 'Tabular' || reportType === 'Dated')) {\n\t\t\t\t\t// \tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\tselectedFields.filter(a => a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\tif (!queryTotals) {\n\t\t\t\t\t// \t\t\t\tqueryTotals = {};\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tqueryTotals[total.id + '_' + field.id] = {['$' + total.type]: '$results.' + total.id + '_' + field.id};\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// // ---------------------------------------------------------------\n\n\t\t\t\t\t\n\n\t\t\t\t\t// // Unwind Pre-Lookup Arrays\n\t\t\t\t\t// queryUnwindCollectionPaths.filter(a => !a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$unwind: {\n\t\t\t\t\t// \t\t\tpath: path,\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: true\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// queryGroupUnwindCollectionPaths.filter(a => !a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$unwind: {\n\t\t\t\t\t// \t\t\tpath: path,\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: false\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// // Unwind Lookups\n\t\t\t\t\t// queryUnwindCollectionPaths.filter(a => a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tif (!query.filter(a => a.$unwind && a.$unwind.path === path).length) {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: 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// queryGroupUnwindCollectionPaths.filter(a => a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tif (!query.filter(a => a.$unwind && a.$unwind.path === path).length) {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: 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\t\t\t\t\t// });\n\n\t\t\t\t\t// // Group Unwinds\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tquery = query.concat(queryGroupUnwind.filter(a => !query.some(b => b.$unwind && (b.$unwind.path === a.$unwind.path))));\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Array and Lookup Filters\n\t\t\t\t\t// let queryMatchConditionLookup = {\n\t\t\t\t\t// \t$and: []\n\t\t\t\t\t// };\n\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) {\n\t\t\t\t\t// \tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t// \t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// filterArrays.forEach(filter => {\n\t\t\t\t\t// \tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t// });\n\n\t\t\t\t\t// if (queryMatchConditionLookup.$and.some(a => !a['$or'] || (a['$or'] && a['$or'].length)) || queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$match: queryMatchConditionLookup\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Group Queries and Projection\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tqueryGroups.forEach(group => {\n\t\t\t\t\t// \t\tquery.push(group);\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tif (reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet tmpProj = deepCopy(queryGroups[queryGroups.length - 2].$group);\n\n\t\t\t\t\t// \t\tif (groupsRow.length === 1) {\n\t\t\t\t\t// \t\t\ttmpProj._id.gr_1 = '$_id.gr_1';\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\tObject.keys(tmpProj).filter(a => a !== '_id').forEach(key => {\n\t\t\t\t\t// \t\t\ttmpProj[key] = 1;\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tObject.assign(tmpProj, tmpProj['_id']);\n\n\t\t\t\t\t// \t\ttmpProj['_id'] = 0;\n\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$project: tmpProj\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t\t// else {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: queryProjection\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Links\n\t\t\t\t\t// if (fieldsLink.length) {\n\t\t\t\t\t// \tif (fieldsLink.length === 1 && fieldsLink[0].field_first && fieldsLink[0].field_second) {\n\t\t\t\t\t// \t\tquery.push({$match: {[fieldsLink[0].id]: 0}});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse {\n\t\t\t\t\t// \t\tlet tmpAnds = [];\n\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\ttmpAnds.push({[link.id]: 0});\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tif (tmpAnds.length) {\n\t\t\t\t\t// \t\t\tquery.push({$match: {$and: tmpAnds}});\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\n\n\n\n\t\t\t\t\t// Dated Grouping\n\t\t\t\t\t// if (date_field && date_interval) {\n\t\t\t\t\t// \tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tday: '$_id.day',\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tweek: '$_id.week',\n\t\t\t\t\t// \t\t\t\t\t// month: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// }\n\n\t\t\t\t\t// GROUP TO GET TOTAL COUNT\n\t\t\t\t\t// query.push({\n\t\t\t\t\t// \t$group: {\n\t\t\t\t\t// \t\t_id: null,\n\t\t\t\t\t// \t\tcount: {$sum: 1},\n\t\t\t\t\t// \t\tresults: {$push: '$$ROOT'}\n\t\t\t\t\t// \t}\n\t\t\t\t\t// });\n\n\t\t\t\t\t// if (rootOptions.limit) {\n\t\t\t\t\t// \t// PROJECT TO SKIP/LIMIT\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: {\n\t\t\t\t\t// \t\t\tcount: 1,\n\t\t\t\t\t// \t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t$slice: ['$results', rootOptions.skip, rootOptions.limit]\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 (queryTotals !== null) {\n\t\t\t\t\t// \t\tquery[query.length - 1].$project['totals'] = queryTotals;\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t\t// else if (queryTotals !== null) {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: {\n\t\t\t\t\t// \t\t\tcount: 1,\n\t\t\t\t\t// \t\t\tresults: 1,\n\t\t\t\t\t// \t\t\ttotals: queryTotals\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/report-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAwC;AAExC,+DAAwF;AACxF,kCAA2C;AAC3C,uEAAgG;AAEhG,SAAgB,wBAAwB,CAAC,aAA4B;IACpE,aAAa,CAAC,OAAO,CAAC;QACrB,sBAAsB,EAAE;YACvB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,eAAe,EAAE;oBAChB,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,eAAuB;gBAAhC,iBAyBT;gBAxBA,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;wBACpC,gBAAgB,GAAG,8CAAsB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,EAAlD,CAAkD,CAAC,CAAC;wBAC9H,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,KAAK,IAAI,EAAlB,CAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAE5E,SAAS,GAAG,iCAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;wBAE7D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;4BAC/E,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAClC,IAAI,KAAK,GAAG,IAAI,CAAC;4BACjB,SAAS,CAAC,OAAO,CAAC,UAAA,IAAI;gCACrB,IAAI,CAAC,KAAK,EAAE;oCACX,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,IAAI,EAApB,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;iCACvD;qCACI;oCACJ,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,IAAI,EAApB,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;iCAC5D;4BACF,CAAC,CAAC,CAAC;4BACH,KAAK,CAAC,QAAQ,GAAG,iCAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAhE,CAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBACvL,CAAC,CAAC,CAAC;wBAEH,gEAAgE;wBAEhE,OAAO,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;;;qBAC9C,CAAC,CAAC;YACJ,CAAC;SACD;QACD,6BAA6B,EAAE;YAC9B,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,QAAQ;gBAAjB,iBAcT;gBAbA,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;;;qCACpC,CAAA,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAA,EAA/B,wBAA+B;qCAC9B,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAvC,wBAAuC;gCAC1C,KAAA,OAAO,CAAA;gCAAC,qBAAM,oCAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAA;;gCAA7I,kBAAQ,SAAqI,EAAC,CAAC;;;gCAG/I,KAAA,OAAO,CAAA;gCAAC,qBAAM,oCAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAA;;gCAAzG,kBAAQ,SAAiG,EAAC,CAAC;;;;gCAI5G,OAAO,CAAC,EAAE,CAAC,CAAC;;;;;qBAEb,CAAC,CAAC;YACJ,CAAC;SACD;QACD,uBAAuB,EAAE;YACxB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,UAAU,EAAE;oBACX,IAAI,EAAE,MAAM;iBACZ;gBACD,kBAAkB,EAAE;oBACnB,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,0CAAuB;iBAC7B;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,YAAY,EAAE;oBACb,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,gBAAgB,EAAE;oBACjB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,iBAAiB,EAAE;oBAClB,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,qBAAqB,EAAE;oBACtB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI;iBACd;gBACD,kBAAkB,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACd;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,KAAK;iBACX;gBACD,aAAa,EAAE;oBACd,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,KAAK;iBACX;gBACD,eAAe,EAAE;oBAChB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,KAAK;iBACX;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,aAAa,EAAE;oBACd,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,kBAAkB,EAAE;oBACnB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,UAAkB,EAAE,kBAA0B,EAAE,WAA8B,EAAE,OAAmB,EAAE,YAAwB,EAAE,iBAA6B,EAAE,cAA0B,EAAE,SAAqB,EAAE,WAAuB,EAAE,UAAsB,EAAE,UAAe,EAAE,aAAkB,EAAE,kBAAuB;gBAAvU,iBA8dT;gBA9dkG,wBAAA,EAAA,YAAmB;gBAAE,6BAAA,EAAA,iBAAwB;gBAAE,kCAAA,EAAA,sBAA6B;gBAAE,+BAAA,EAAA,mBAA0B;gBAAE,0BAAA,EAAA,cAAqB;gBAAE,4BAAA,EAAA,gBAAuB;gBAAE,2BAAA,EAAA,eAAsB;gBAAE,2BAAA,EAAA,eAAe;gBAAE,8BAAA,EAAA,kBAAkB;gBAAE,mCAAA,EAAA,uBAAuB;gBAChV,OAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;;;;gCAQpC,eAAe,GAAG,uBAAe,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gCAGxE,KAAK,GAAG,EAAE,CAAC;gCAGX,0BAA0B,GAAG;oCAChC,IAAI,EAAE;wCACL;4CACC,GAAG,EAAE,EAAE;yCACP;qCACD;iCACD,CAAC;gCAEF,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,KAAK,kBAAkB,EAAxC,CAAwC,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;;oCACjF,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;wCAC9C,IAAI,EAAE;sDACJ,GAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAG,EAAC,OAAO,EAAE,CAAC,EAAC;sDACpD,GAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAG,EAAC,GAAG,EAAE,EAAE,EAAC;sDACjD,GAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAG,EAAC,GAAG,EAAE,IAAI,EAAC;yCACpD;qCACD,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAEH,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,MAAM,EAAE;oCACxL,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;wCAC1L,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCACjD,CAAC,CAAC,CAAC;iCACH;gCAED,sBAAsB;gCACtB,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAAvJ,CAAuJ,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAhC,CAAgC,CAAC,CAAC,MAAM,EAAE;oCAC/P,KAAK,CAAC,IAAI,CAAC;wCACV,MAAM,EAAE,0BAA0B;qCAClC,CAAC,CAAC;iCACH;gCAED,YAAY;gCACZ,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,CAAC;gCAE9C,KAAK,GAAG,EAAE,CAAC;gCAEf,iBAAiB,CAAC,OAAO,CAAC,UAAA,WAAW;;oCACpC,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oCAElD,IAAI,SAAS,GAAG,EAAE,CAAC;oCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCAE9C,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;wCAE1B,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;4CACjF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAxE,CAAwE,CAAC,EAAE;gDAC/F,KAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;wDACpB,IAAI,EAAE,WAAW,CAAC,iBAAiB;wDACnC,UAAU,EAAE,WAAW,CAAC,gBAAgB;wDACxC,YAAY,EAAE,WAAW,CAAC,kBAAkB;wDAC5C,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;qDAC9C,EAAC,CAAC,CAAC;gDAEJ,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;gDAC1D,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;gDAElK,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;6CACpH;yCACD;6CACI;4CACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;gDAClH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gDAC1C,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;gDAEjH,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;6CACnF;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAEH,qCAAqC;gCACrC,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG;;oCACpB,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wCAC5B,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wCAEtC,IAAI,WAAS,GAAG,EAAE,CAAC;wCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAE9C,WAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;4CAE1B,IAAI,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gDACjF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAzE,CAAyE,CAAC,EAAE;oDAChG,KAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;4DACpB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,iBAAiB;4DACpC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,gBAAgB;4DACzC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,kBAAkB;4DAC7C,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;yDAC/C,EAAC,CAAC,CAAC;oDAEJ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC3D,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAEpK,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACrH;6CACD;iDACI;gDACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;oDAClH,KAAK,CAAC,IAAI,CAAC,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC1C,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAEjH,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACnF;6CACD;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAEH,8CAA8C;gCAC9C,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;;oCAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wCAClC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wCAE5C,IAAI,WAAS,GAAG,EAAE,CAAC;wCAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAE9C,WAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;4CAE1B,IAAI,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gDACjF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAlE,CAAkE,CAAC,EAAE;oDACzF,KAAK,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE;4DACpB,IAAI,EAAE,KAAK,CAAC,iBAAiB;4DAC7B,UAAU,EAAE,KAAK,CAAC,gBAAgB;4DAClC,YAAY,EAAE,KAAK,CAAC,kBAAkB;4DACtC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;yDACxC,EAAC,CAAC,CAAC;oDAEJ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;oDACpD,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAEtJ,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDAC9G;6CACD;iDACI;gDACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAA3F,CAA2F,CAAC,EAAE;oDAClH,KAAK,CAAC,IAAI,CAAC,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oDAC1C,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,OAAO,GAAG,WAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAG,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,GAAG,GAAG,WAAS,EAAE,EAAE,CAAC,EAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oDAEjH,KAAK,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,GAAG,GAAG,WAAS,EAAE,0BAA0B,EAAE,IAAI,EAAC,EAAC,CAAC,CAAC;iDACnF;6CACD;yCACD;qCACD;gCACF,CAAC,CAAC,CAAC;gCAGC,SAAS,GAAG,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC;gCAEjC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,KAAK,EAAhB,CAAgB,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCACtD,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;wCAChG,IAAI,UAAU,GAAG,EAAE,CAAC;wCAEpB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;4CACpC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gDACjB,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;4CAClG,CAAC,CAAC,CAAC;yCACH;6CACI;4CACJ,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/C,CAA+C,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAvG,CAAuG,CAAC,EAAvQ,CAAuQ,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;gDACtS,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;4CAClG,CAAC,CAAC,CAAC;yCACH;wCAED,IAAI,UAAU,CAAC,MAAM,EAAE;4CACtB,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;gDACpC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG;oDACjD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;iDAC5C,CAAC;6CACF;iDACI;gDACJ,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG;oDACjD,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;iDAC9E,CAAC;6CACF;yCACD;6CACI;4CACJ,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;gDACpC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;6CAC3D;iDACI;gDACJ,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;6CAC7F;yCACD;oCACF,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,CAAC;gCAEH,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,KAAK,EAArD,CAAqD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCAC9F,IAAI,UAAU,GAAG,EAAE,CAAC;oCAEpB,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/C,CAA+C,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAvG,CAAuG,CAAC,EAA5U,CAA4U,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;wCAC3W,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;oCAClG,CAAC,CAAC,CAAC;oCAEH,IAAI,UAAU,CAAC,MAAM,EAAE;wCACtB,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG;4CAC5D,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;yCAC9E,CAAC;qCACF;gCACF,CAAC,CAAC,CAAC;gCAEH,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,aAAa,KAAK,OAAO,EAA3B,CAA2B,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oCACpE,IAAI,UAAU,GAAG,EAAE,CAAC;oCAEpB,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAA/C,CAA+C,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAvG,CAAuG,CAAC,EAA5U,CAA4U,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;wCAC3W,UAAU,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC;oCAClG,CAAC,CAAC,CAAC;oCAEH,IAAI,UAAU,CAAC,MAAM,EAAE;wCACtB,SAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG;4CACvE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;yCAC5C,CAAC;qCACF;yCACI;wCACJ,SAAS,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;qCACjF;gCACF,CAAC,CAAC,CAAC;gCAEH,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oCACjD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iCACtB;gCAED,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,EAA/B,CAA+B,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;;oCACnE,KAAK,CAAC,IAAI,CAAC,EAAC,UAAU,YAAG,GAAC,IAAI,CAAC,EAAE,IAAG,EAAC,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAC,KAAC,EAAC,CAAC,CAAC;oCAC3I,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,YAAG,GAAC,IAAI,CAAC,EAAE,IAAG,CAAC,KAAC,EAAC,CAAC,CAAC;gCACtC,CAAC,CAAC,CAAC;gCAGC,yBAAyB,GAAG;oCAC/B,IAAI,EAAE,EAAE;iCACR,CAAC;gCAEF,IAAI,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAArJ,CAAqJ,CAAC,CAAC,MAAM,EAAE;oCACtL,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAtB,CAAsB,CAAC,EAAhD,CAAgD,CAAC,CAAC,EAArJ,CAAqJ,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;wCACxL,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCAChD,CAAC,CAAC,CAAC;iCACH;gCAED,YAAY,CAAC,OAAO,CAAC,UAAA,MAAM;oCAC1B,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAChD,CAAC,CAAC,CAAC;gCAEH,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE;oCAC1C,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,yBAAyB,EAAC,CAAC,CAAC;iCAChD;gCAGG,UAAU,GAAG;oCAChB,GAAG,EAAE,EAAE;iCACP,CAAC;gCAEF,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,KAAK,SAAS,EAAE;oCAChF,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;wCACtB,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC;qCACxB;oCAED,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG;wCACpB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wCAE9D,IAAI,UAAU,IAAI,aAAa,EAAE;4CAChC,IAAI,aAAa,KAAK,OAAO,EAAE;gDAC9B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAC,aAAa,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDACrI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,QAAQ,EAAE;gDACpC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,UAAU,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDACnI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,cAAc,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CACvI;iDACI,IAAI,aAAa,KAAK,SAAS,EAAE;gDACrC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,WAAW,EAAE;gDACvC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC,QAAQ,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;gDAClI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;iDACI,IAAI,aAAa,KAAK,QAAQ,EAAE;gDACpC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAC,OAAO,EAAG,EAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAC,EAAC,CAAC;6CAChI;yCACD;oCACF,CAAC,CAAC,CAAC;oCAEH,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;wCAC3B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CACtC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;4CACvC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;4CACzC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;yCACpF;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC5E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;4CACnG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC9E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE;4CACxC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC7E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE;4CACxC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC7E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE;4CAC1C,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,WAAW,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCACjF;6CACI;4CACJ,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC7E;oCACF,CAAC,CAAC,CAAC;oCAEH,SAAS;oCACT,IAAI,WAAW,CAAC,MAAM,EAAE;wCACvB,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;4CACxB,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gDAChG,iGAAiG;gDACjG,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,EAAC,CAAC;4CACjF,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;qCACH;oCAED,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;iCACjC;qCACI;oCAEA,oBAAkB;wCACrB,GAAG,EAAE,CAAC;qCACN,CAAC;oCAEF,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;wCAC3B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CACtC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;4CACvC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;4CACzC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC;yCACtC;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;4CAC3C,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC;yCAC/E;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;4CACzC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;yCACtF;6CACI,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE;4CACxC,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAC,MAAM,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC;yCACvF;6CACI;4CACJ,iBAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;yCACvE;oCACF,CAAC,CAAC,CAAC;oCAEH,QAAQ;oCACR,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO,CAAC,EAAE;wCAC/E,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;4CACxB,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;;gDAChG,iBAAe,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,aAAI,GAAC,GAAG,GAAG,KAAK,CAAC,IAAI,IAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,KAAC,CAAC;4CACpG,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;qCACH;oCAED,KAAK,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,iBAAe,EAAC,CAAC,CAAC;iCACxC;gCAED,OAAO;gCACP,IAAI,WAAW,CAAC,IAAI,EAAE;oCACrB,KAAK,CAAC,IAAI,CAAC;wCACV,KAAK,EAAE,WAAW,CAAC,IAAI;qCACvB,CAAC,CAAC;iCACH;gCAED,IAAI,UAAU,KAAK,eAAe,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wDAClD,CAAC;;wCACT,IAAI,SAAS,GAAG,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC;wCAEzB,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;4CAC5B,GAAG,YAAG,GAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAC;yCACnD,CAAC;wCAEF,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4CAC/B,cAAc,CAAC,OAAO,CAAC,UAAA,KAAK;gDAC3B,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;4CACvD,CAAC,CAAC,CAAC;yCACH;6CACI;4CACJ,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;yCAC5E;wCAED,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;4CAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;gDACnG,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gDAC/C,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;4CACrG,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;wCAEH,KAAK,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;wCAElC,IAAI,OAAO,GAAG;4CACb,GAAG,EAAE,EAAE;yCACP,CAAC;wCAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yCACzD;wCAED,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;4CAC1B,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;yCAC5B,CAAC;wCAEF,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;4CAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;;gDACnG,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,aAAI,GAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,KAAC,CAAA;4CAC1G,CAAC,CAAC,CAAC;wCACJ,CAAC,CAAC,CAAC;wCAEH,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;;oCA3C/B,KAAS,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gDAArC,CAAC;qCA4CT;iCACD;gCAIG,GAAG,GAAG,IAAI,CAAC;;;;gCAGR,qBAAM,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAA;;gCAA/D,GAAG,GAAG,SAAyD,CAAC;;;;gCAGhE,OAAO,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC;;;gCAGd,SAAS,GAAG,EAAE,CAAC;gCAEnB,IAAI,GAAG,EAAE;oCACR,WAAW,CAAC,OAAO,CAAC,UAAA,QAAQ;wCAC3B,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,EAAvD,CAAuD,CAAC,CAAC,OAAO,CAAC,UAAA,QAAQ;4CACnG,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDAC5B,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAvC,CAAuC,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;6CAC9H;iDACI,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gDACjC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAvC,CAAuC,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;6CACvJ;wCACF,CAAC,CAAC,CAAC;oCACJ,CAAC,CAAC,CAAC;iCACH;gCAEG,MAAM,GAAG,CAAC;wCACb,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wCAC3B,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;wCAChF,MAAM,EAAE,SAAS;qCACjB,CAAC,CAAC;gCAEH,OAAO,CAAC,MAAM,CAAC,CAAC;;;;qBAChB,CAAC,CAAC;YACJ,CAAC;SACD;KACD,CAAC,CAAC;AACJ,CAAC;AA/mBD,4DA+mBC;AAgBD,4CAA4C;AACvC,+EAA+E;AAC/E,6DAA6D;AAE7D,mBAAmB;AAEnB,wDAAwD;AACxD,8BAA8B;AAE9B,uEAAuE;AACvE,iDAAiD;AACjD,MAAM;AACN,KAAK;AACL,MAAM;AAEN,YAAY;AACZ,uCAAuC;AAEvC,2EAA2E;AAC3E,oDAAoD;AAEpD,mBAAmB;AAEnB,wDAAwD;AACxD,8BAA8B;AAE9B,uHAAuH;AACvH,4CAA4C;AAC5C,MAAM;AACN,KAAK;AACL,MAAM;AAEN,WAAW;AACX,4BAA4B;AAC5B,8EAA8E;AAC9E,gIAAgI;AAChI,QAAQ;AACR,KAAK;AAEL,6DAA6D;AAC7D,0BAA0B;AAE1B,mDAAmD;AACnD,sHAAsH;AACtH,QAAQ;AAER,uBAAuB;AACvB,wBAAwB;AACxB,QAAQ;AACR,KAAK;AAyCL,iEAAiE;AAEjE,qBAAqB;AACrB,yBAAyB;AACzB,6BAA6B;AAC7B,kCAAkC;AAClC,2CAA2C;AAE3C,wBAAwB;AAExB,qDAAqD;AAErD,gCAAgC;AAEhC,2CAA2C;AAC3C,oCAAoC;AACpC,6CAA6C;AAC7C,kDAAkD;AAClD,sDAAsD;AACtD,uDAAuD;AACvD,WAAW;AAEX,qBAAqB;AACrB,iCAAiC;AACjC,0CAA0C;AAE1C,uCAAuC;AACvC,+GAA+G;AAC/G,8DAA8D;AAC9D,wPAAwP;AACxP,aAAa;AACb,aAAa;AACb,YAAY;AAEZ,+DAA+D;AAC/D,uCAAuC;AACvC,UAAU;AACV,UAAU;AACV,QAAQ;AAER,wBAAwB;AACxB,0FAA0F;AAC1F,YAAY;AACZ,wBAAwB;AACxB,yDAAyD;AACzD,WAAW;AAEX,sIAAsI;AACtI,OAAO;AAEP,oBAAoB;AACpB,gCAAgC;AAChC,yCAAyC;AAEzC,sCAAsC;AACtC,qNAAqN;AACrN,6DAA6D;AAC7D,mLAAmL;AACnL,YAAY;AACZ,YAAY;AACZ,WAAW;AAEX,8DAA8D;AAC9D,sCAAsC;AACtC,SAAS;AACT,QAAQ;AACR,OAAO;AAEP,gGAAgG;AAEhG,+BAA+B;AAC/B,wCAAwC;AAExC,qCAAqC;AACrC,+KAA+K;AAC/K,sGAAsG;AACtG,WAAW;AACX,UAAU;AAEV,6DAA6D;AAC7D,qCAAqC;AACrC,QAAQ;AACR,OAAO;AACP,MAAM;AACN,KAAK;AACL,MAAM;AAEN,2BAA2B;AAC3B,qCAAqC;AACrC,iDAAiD;AAEjD,wBAAwB;AAExB,qDAAqD;AAErD,gCAAgC;AAEhC,2CAA2C;AAC3C,oCAAoC;AACpC,sCAAsC;AACtC,2CAA2C;AAC3C,+CAA+C;AAC/C,gDAAgD;AAChD,WAAW;AAEX,qBAAqB;AACrB,iCAAiC;AACjC,0CAA0C;AAE1C,uCAAuC;AACvC,+GAA+G;AAC/G,8DAA8D;AAC9D,0OAA0O;AAC1O,aAAa;AACb,aAAa;AACb,YAAY;AAEZ,+DAA+D;AAC/D,uCAAuC;AACvC,UAAU;AACV,UAAU;AACV,QAAQ;AAER,wBAAwB;AACxB,0FAA0F;AAC1F,YAAY;AACZ,wBAAwB;AACxB,yDAAyD;AACzD,WAAW;AAEX,+HAA+H;AAC/H,OAAO;AAEP,oBAAoB;AACpB,gCAAgC;AAChC,yCAAyC;AAEzC,sCAAsC;AACtC,qNAAqN;AACrN,6DAA6D;AAC7D,mLAAmL;AACnL,YAAY;AACZ,YAAY;AACZ,WAAW;AAEX,8DAA8D;AAC9D,sCAAsC;AACtC,SAAS;AACT,QAAQ;AACR,OAAO;AAEP,gGAAgG;AAEhG,+BAA+B;AAC/B,wCAAwC;AAExC,qCAAqC;AACrC,+KAA+K;AAC/K,sGAAsG;AACtG,WAAW;AACX,UAAU;AAEV,6DAA6D;AAC7D,qCAAqC;AACrC,QAAQ;AACR,OAAO;AACP,MAAM;AACN,OAAO;AACP,IAAI;AAEJ,4CAA4C;AAC5C,sCAAsC;AAEtC,gBAAgB;AAChB,0BAA0B;AAC1B,sBAAsB;AACtB,YAAY;AACZ,MAAM;AAEN,8BAA8B;AAC9B,mEAAmE;AAEnE,uCAAuC;AACvC,sCAAsC;AACtC,4IAA4I;AAC5I,yIAAyI;AACzI,uIAAuI;AACvI,OAAO;AACP,4CAA4C;AAC5C,0IAA0I;AAC1I,uFAAuF;AACvF,uIAAuI;AACvI,OAAO;AACP,6CAA6C;AAC7C,yIAAyI;AACzI,uIAAuI;AACvI,OAAO;AACP,+CAA+C;AAC/C,yIAAyI;AACzI,uIAAuI;AACvI,OAAO;AACP,4CAA4C;AAC5C,uIAAuI;AACvI,OAAO;AAEP,uGAAuG;AACvG,MAAM;AACN,OAAO;AAEP,qCAAqC;AACrC,6CAA6C;AAC7C,mFAAmF;AACnF,MAAM;AACN,8CAA8C;AAC9C,mFAAmF;AACnF,MAAM;AACN,gDAAgD;AAChD,0CAA0C;AAC1C,MAAM;AACN,kDAAkD;AAClD,mFAAmF;AACnF,MAAM;AACN,kDAAkD;AAClD,mFAAmF;AACnF,MAAM;AACN,gDAAgD;AAChD,qFAAqF;AACrF,MAAM;AACN,+CAA+C;AAC/C,oFAAoF;AACpF,MAAM;AACN,WAAW;AACX,mFAAmF;AACnF,MAAM;AAEN,iDAAiD;AAEjD,SAAS;AACT,OAAO;AAEP,YAAY;AACZ,6BAA6B;AAC7B,mCAAmC;AACnC,6EAA6E;AAC7E,qGAAqG;AAErG,SAAS;AACT,QAAQ;AACR,KAAK;AAEL,uCAAuC;AACvC,kEAAkE;AAClE,qFAAqF;AACrF,OAAO;AAEP,6EAA6E;AAC7E,uDAAuD;AACvD,iGAAiG;AACjG,MAAM;AACN,OAAO;AAEP,qCAAqC;AACrC,IAAI;AACJ,SAAS;AACT,sBAAsB;AACtB,gBAAgB;AAChB,MAAM;AAEN,8EAA8E;AAC9E,6CAA6C;AAC7C,mFAAmF;AACnF,MAAM;AACN,8CAA8C;AAC9C,mFAAmF;AACnF,MAAM;AACN,gDAAgD;AAChD,0CAA0C;AAC1C,MAAM;AACN,kDAAkD;AAClD,mFAAmF;AACnF,MAAM;AACN,kDAAkD;AAClD,mFAAmF;AACnF,MAAM;AACN,gDAAgD;AAChD,qFAAqF;AACrF,MAAM;AACN,+CAA+C;AAC/C,oFAAoF;AACpF,MAAM;AACN,WAAW;AACX,mFAAmF;AACnF,MAAM;AACN,OAAO;AAEP,YAAY;AACZ,6BAA6B;AAC7B,mCAAmC;AACnC,6EAA6E;AAC7E,qGAAqG;AAErG,SAAS;AACT,QAAQ;AACR,KAAK;AAEL,uCAAuC;AACvC,kEAAkE;AAClE,qFAAqF;AACrF,OAAO;AAEP,6EAA6E;AAC7E,uDAAuD;AACvD,iGAAiG;AACjG,MAAM;AACN,OAAO;AAEP,qCAAqC;AACrC,IAAI;AAEJ,kEAAkE;AAElE,4BAA4B;AAC5B,4EAA4E;AAC5E,2BAA2B;AAE3B,8GAA8G;AAC9G,2BAA2B;AAC3B,iDAAiD;AACjD,sCAAsC;AACtC,SAAS;AACT,KAAK;AAEL,mBAAmB;AAEnB,+CAA+C;AAC/C,kEAAkE;AAClE,4CAA4C;AAE5C,cAAc;AACd,yIAAyI;AACzI,4BAA4B;AAC5B,kBAAkB;AAClB,uCAAuC;AACvC,UAAU;AACV,MAAM;AAEN,YAAY;AACZ,2FAA2F;AAC3F,+EAA+E;AAC/E,qDAAqD;AACrD,uBAAuB;AACvB,uCAAuC;AACvC,uDAAuD;AACvD,wBAAwB;AACxB,yCAAyC;AAEzC,mEAAmE;AACnE,mBAAmB;AACnB,UAAU;AACV,uBAAuB;AACvB,uBAAuB;AACvB,mBAAmB;AACnB,0DAA0D;AAC1D,yDAAyD;AACzD,aAAa;AACb,YAAY;AACZ,WAAW;AACX,WAAW;AACX,UAAU;AACV,mBAAmB;AACnB,uBAAuB;AACvB,WAAW;AACX,UAAU;AACV,UAAU;AACV,QAAQ;AACR,SAAS;AACT,MAAM;AAEN,aAAa;AACb,wFAAwF;AACxF,oCAAoC;AACpC,qEAAqE;AACrE,SAAS;AAET,MAAM;AACN,KAAK;AAEL,cAAc;AACd,0BAA0B;AAC1B,YAAY;AACZ,MAAM;AAEN,4BAA4B;AAC5B,iCAAiC;AACjC,KAAK;AAEL,8BAA8B;AAC9B,mDAAmD;AAEnD,uCAAuC;AACvC,sCAAsC;AACtC,8CAA8C;AAC9C,kDAAkD;AAClD,gDAAgD;AAChD,OAAO;AACP,4CAA4C;AAC5C,gDAAgD;AAChD,uFAAuF;AACvF,gDAAgD;AAChD,OAAO;AACP,6CAA6C;AAC7C,kDAAkD;AAClD,gDAAgD;AAChD,OAAO;AACP,+CAA+C;AAC/C,kDAAkD;AAClD,gDAAgD;AAChD,OAAO;AACP,4CAA4C;AAC5C,gDAAgD;AAChD,OAAO;AACP,MAAM;AACN,OAAO;AAEP,wCAAwC;AACxC,oCAAoC;AACpC,iDAAiD;AACjD,4LAA4L;AAC5L,OAAO;AACP,kDAAkD;AAClD,4LAA4L;AAC5L,OAAO;AACP,oDAAoD;AACpD,iDAAiD;AACjD,OAAO;AACP,sDAAsD;AACtD,4LAA4L;AAC5L,OAAO;AACP,sDAAsD;AACtD,4LAA4L;AAC5L,OAAO;AACP,oDAAoD;AACpD,8LAA8L;AAC9L,OAAO;AACP,mDAAmD;AACnD,6LAA6L;AAC7L,OAAO;AACP,YAAY;AACZ,4LAA4L;AAC5L,OAAO;AACP,MAAM;AACN,WAAW;AACX,mEAAmE;AACnE,MAAM;AACN,OAAO;AAEP,YAAY;AACZ,6BAA6B;AAC7B,mCAAmC;AACnC,gFAAgF;AAChF,sCAAsC;AACtC,gHAAgH;AAChH,QAAQ;AACR,aAAa;AACb,oGAAoG;AACpG,QAAQ;AACR,SAAS;AACT,QAAQ;AACR,KAAK;AAEL,uCAAuC;AACvC,kEAAkE;AAClE,yFAAyF;AACzF,OAAO;AAEP,gFAAgF;AAChF,oCAAoC;AACpC,+DAA+D;AAC/D,4GAA4G;AAC5G,OAAO;AACP,MAAM;AACN,WAAW;AACX,+DAA+D;AAC/D,6GAA6G;AAC7G,OAAO;AACP,MAAM;AACN,OAAO;AAEP,yCAAyC;AAEzC,WAAW;AAEX,MAAM;AAgCN,qGAAqG;AACrG,yFAAyF;AACzF,2FAA2F;AAC3F,yBAAyB;AACzB,qCAAqC;AACrC,0CAA0C;AAC1C,8CAA8C;AAC9C,+CAA+C;AAC/C,SAAS;AACT,MAAM;AACN,OAAO;AACP,MAAM;AAEN,4CAA4C;AAC5C,+EAA+E;AAC/E,6DAA6D;AAE7D,mBAAmB;AAEnB,wDAAwD;AACxD,8BAA8B;AAE9B,uEAAuE;AACvE,iDAAiD;AACjD,MAAM;AACN,KAAK;AACL,MAAM;AAEN,YAAY;AACZ,uCAAuC;AAEvC,2EAA2E;AAC3E,oDAAoD;AAEpD,mBAAmB;AAEnB,wDAAwD;AACxD,8BAA8B;AAE9B,uHAAuH;AACvH,4CAA4C;AAC5C,MAAM;AACN,KAAK;AACL,MAAM;AAEN,WAAW;AACX,4BAA4B;AAC5B,8EAA8E;AAC9E,gIAAgI;AAChI,QAAQ;AACR,KAAK;AAEL,6DAA6D;AAC7D,0BAA0B;AAE1B,mDAAmD;AACnD,sHAAsH;AACtH,QAAQ;AAER,uBAAuB;AACvB,wBAAwB;AACxB,QAAQ;AACR,KAAK;AAEL,2CAA2C;AAE3C,yCAAyC;AACzC,qDAAqD;AACrD,iEAAiE;AAEjE,2BAA2B;AAC3B,cAAc;AACd,QAAQ;AAER,mCAAmC;AACnC,sEAAsE;AACtE,OAAO;AAEP,8BAA8B;AAC9B,qDAAqD;AACrD,QAAQ;AAER,uCAAuC;AACvC,wCAAwC;AACxC,oDAAoD;AACpD,UAAU;AACV,OAAO;AACP,YAAY;AACZ,2EAA2E;AAC3E,OAAO;AAEP,oCAAoC;AACpC,8EAA8E;AAC9E,sFAAsF;AACtF,yGAAyG;AACzG,UAAU;AACV,SAAS;AAET,mEAAmE;AAEnE,gDAAgD;AAChD,MAAM;AAEN,gEAAgE;AAChE,KAAK;AACL,sCAAsC;AACtC,iCAAiC;AACjC,sBAAsB;AACtB,kBAAkB;AAClB,sBAAsB;AACtB,yBAAyB;AACzB,wCAAwC;AACxC,uEAAuE;AACvE,YAAY;AACZ,WAAW;AACX,YAAY;AACZ,gCAAgC;AAChC,WAAW;AACX,UAAU;AACV,KAAK;AACL,IAAI;AAEJ,eAAe;AACf,0BAA0B;AAC1B,UAAU;AACV,KAAK;AAEL,oCAAoC;AACpC,4CAA4C;AAC5C,oFAAoF;AACpF,KAAK;AACL,6CAA6C;AAC7C,oFAAoF;AACpF,KAAK;AACL,+CAA+C;AAC/C,2CAA2C;AAC3C,KAAK;AACL,iDAAiD;AACjD,oFAAoF;AACpF,KAAK;AACL,iDAAiD;AACjD,oFAAoF;AACpF,KAAK;AACL,+CAA+C;AAC/C,2FAA2F;AAC3F,KAAK;AACL,8CAA8C;AAC9C,4FAA4F;AAC5F,KAAK;AACL,UAAU;AACV,4EAA4E;AAC5E,KAAK;AACL,MAAM;AAEN,UAAU;AAEV,2BAA2B;AAC3B,6EAA6E;AAC7E,oIAAoI;AACpI,OAAO;AACP,IAAI;AAEJ,WAAW;AACX,0BAA0B;AAE1B,oFAAoF;AACpF,kCAAkC;AAClC,4EAA4E;AAC5E,yBAAyB;AACzB,wBAAwB;AACxB,OAAO;AAEP,6GAA6G;AAC7G,QAAQ;AACR,OAAO;AACP,IAAI;AAEJ,qEAAqE;AAIrE,8BAA8B;AAC9B,oFAAoF;AACpF,gBAAgB;AAChB,eAAe;AACf,iBAAiB;AACjB,sCAAsC;AACtC,MAAM;AACN,OAAO;AACP,MAAM;AAEN,yFAAyF;AACzF,gBAAgB;AAChB,eAAe;AACf,iBAAiB;AACjB,uCAAuC;AACvC,MAAM;AACN,OAAO;AACP,MAAM;AAEN,oBAAoB;AACpB,mFAAmF;AACnF,0EAA0E;AAC1E,iBAAiB;AACjB,gBAAgB;AAChB,kBAAkB;AAClB,uCAAuC;AACvC,OAAO;AACP,QAAQ;AACR,KAAK;AACL,MAAM;AAEN,wFAAwF;AACxF,0EAA0E;AAC1E,iBAAiB;AACjB,gBAAgB;AAChB,kBAAkB;AAClB,wCAAwC;AACxC,OAAO;AACP,QAAQ;AACR,KAAK;AACL,MAAM;AAEN,mBAAmB;AACnB,0BAA0B;AAC1B,2HAA2H;AAC3H,IAAI;AAEJ,8BAA8B;AAC9B,oCAAoC;AACpC,YAAY;AACZ,KAAK;AAEL,2LAA2L;AAC3L,kMAAkM;AAClM,oDAAoD;AACpD,OAAO;AACP,IAAI;AAEJ,mCAAmC;AACnC,mDAAmD;AACnD,MAAM;AAEN,uIAAuI;AACvI,gBAAgB;AAChB,sCAAsC;AACtC,OAAO;AACP,IAAI;AAEJ,kCAAkC;AAClC,0BAA0B;AAC1B,kCAAkC;AAClC,uBAAuB;AACvB,OAAO;AAEP,yCAAyC;AACzC,wEAAwE;AAExE,kCAAkC;AAClC,qCAAqC;AACrC,MAAM;AAEN,mEAAmE;AACnE,uBAAuB;AACvB,QAAQ;AAER,4CAA4C;AAE5C,wBAAwB;AAExB,iBAAiB;AACjB,uBAAuB;AACvB,QAAQ;AACR,KAAK;AACL,IAAI;AACJ,SAAS;AACT,gBAAgB;AAChB,8BAA8B;AAC9B,OAAO;AACP,IAAI;AAEJ,WAAW;AACX,2BAA2B;AAC3B,6FAA6F;AAC7F,mDAAmD;AACnD,KAAK;AACL,UAAU;AACV,sBAAsB;AAEtB,8EAA8E;AAC9E,mCAAmC;AACnC,QAAQ;AAER,0BAA0B;AAC1B,4CAA4C;AAC5C,MAAM;AACN,KAAK;AACL,IAAI;AAKJ,iBAAiB;AACjB,qCAAqC;AACrC,oCAAoC;AACpC,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,wBAAwB;AACxB,4BAA4B;AAC5B,yBAAyB;AACzB,SAAS;AACT,iBAAiB;AACjB,yBAAyB;AACzB,QAAQ;AACR,OAAO;AACP,QAAQ;AACR,KAAK;AACL,0CAA0C;AAC1C,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,0BAA0B;AAC1B,+BAA+B;AAC/B,yBAAyB;AACzB,SAAS;AACT,iBAAiB;AACjB,yBAAyB;AACzB,QAAQ;AACR,OAAO;AACP,QAAQ;AACR,KAAK;AACL,2CAA2C;AAC3C,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,4BAA4B;AAC5B,yBAAyB;AACzB,SAAS;AACT,iBAAiB;AACjB,yBAAyB;AACzB,QAAQ;AACR,OAAO;AACP,QAAQ;AACR,KAAK;AACL,6CAA6C;AAC7C,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,4BAA4B;AAC5B,yBAAyB;AACzB,SAAS;AACT,iBAAiB;AACjB,yBAAyB;AACzB,QAAQ;AACR,OAAO;AACP,QAAQ;AACR,KAAK;AACL,0CAA0C;AAC1C,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,yBAAyB;AACzB,SAAS;AACT,iBAAiB;AACjB,yBAAyB;AACzB,QAAQ;AACR,OAAO;AACP,QAAQ;AACR,KAAK;AACL,IAAI;AAEJ,2BAA2B;AAC3B,eAAe;AACf,aAAa;AACb,eAAe;AACf,sBAAsB;AACtB,+BAA+B;AAC/B,KAAK;AACL,MAAM;AAEN,2BAA2B;AAC3B,4BAA4B;AAC5B,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf,gBAAgB;AAChB,gEAAgE;AAChE,OAAO;AACP,MAAM;AACN,OAAO;AAEP,+BAA+B;AAC/B,8DAA8D;AAC9D,KAAK;AACL,IAAI;AACJ,mCAAmC;AACnC,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf,iBAAiB;AACjB,yBAAyB;AACzB,MAAM;AACN,OAAO;AACP,IAAI","file":"report-builder.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions, PaginationOptionsSchema } from '../models/pagination.model';\nimport { ResolveIOServer } from '../index';\nimport { getReportLookupSchemas, buildTree, mongoCommand } from '../util/schema-report-builder';\n\nexport function loadReportBuilderMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\treportBuilderBuildTree: {\n\t\t\tskipQueue: true,\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}),\n\t\t\tfunction: function(collection_root: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet lookupSchemaData = getReportLookupSchemas(collection_root).sort((a, b) => a.collection_name.localeCompare(b.collection_name));\n\t\t\t\t\tlet lookupSchemaTree = lookupSchemaData.filter(a => a.is_root === true)[0].tree;\n\n\t\t\t\t\tlet treeItems = buildTree(collection_root, lookupSchemaTree);\n\n\t\t\t\t\tObject.keys(lookupSchemaTree).filter(a => a.endsWith('(Lookup)')).forEach(lookup => {\n\t\t\t\t\t\tlet fieldPath = lookup.split('.');\n\t\t\t\t\t\tlet field = null;\n\t\t\t\t\t\tfieldPath.forEach(path => {\n\t\t\t\t\t\t\tif (!field) {\n\t\t\t\t\t\t\t\tfield = treeItems.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tfield = field.children.filter(a => a.fieldName === path)[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfield.children = buildTree(lookupSchemaTree[lookup].lookup_collection, lookupSchemaData.filter(a => a.collection_name === lookupSchemaTree[lookup].lookup_collection)[0].tree, field);\n\t\t\t\t\t});\n\n\t\t\t\t\t// console.log('----------- Tree Items -----------', treeItems);\n\n\t\t\t\t\tresolve({isLeaf: false, children: treeItems});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetDistinctValue: {\n\t\t\tskipQueue: true,\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: function(treeLeaf) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (treeLeaf.fieldType === 'String') {\n\t\t\t\t\t\tif (treeLeaf.fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/^.+\\(Lookup\\)\\.\\$\\./g, '').replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(await mongoCommand('distinct', treeLeaf.collection_name, treeLeaf.fieldPath.replace(/\\.\\$/g, '')));\n\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve([]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treportBuilderGetResults: {\n\t\t\tskipQueue: 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\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\ttabularDisplayType: {\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(reportType: string, rootCollectionName: string, rootOptions: PaginationOptions, filters: any[] = [], filterArrays: any[] = [], filterArrayFields: any[] = [], selectedFields: any[] = [], groupsRow: any[] = [], fieldsTotal: any[] = [], fieldsLink: any[] = [], date_field = '', date_interval = '', tabularDisplayType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\n\t\t\t\t\t\n\t\t\t\t\t// console.log(reportType, rootCollectionName, rootOptions, filters, selectedFields, groupsRow, fieldsTotal, fieldsLink);\n\n\t\t\t\t\t// let uniqueSelectedFieldCollections = selectedFields.map(a => a.collection_name).filter((elem, index, self) => {\n\t\t\t\t\t// \treturn index === self.indexOf(elem);\n\t\t\t\t\t// });\n\n\t\t\t\t\tlet modelCollection = ResolveIOServer.getMainDB().model(rootCollectionName);\n\n\t\t\t\t\t// Query\n\t\t\t\t\tlet query = [];\n\t\t\t\t\t\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\t\t{\n\t\t\t\t\t\t\t\t$or: []\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.collection_name === rootCollectionName).forEach(field => {\n\t\t\t\t\t\tinitialQueryMatchCondition['$and'][0].$or.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 (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) {\n\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\tinitialQueryMatchCondition['$and'].push(filter);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add filter to query\n\t\t\t\t\tif (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\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.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\t\n\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === filterField.lookup_as.replace(/\\.\\$/g, ''))) {\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: filterField.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\tforeignField: filterField.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\tas: filterField.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\tsizes.push(filterField.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + filterField.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + filterField.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + filterField.lookup_as.replace(/\\.\\$/g, ''), 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\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\n\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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\tif (row.field.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = row.field.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === row.treeItem.lookup_as.replace(/\\.\\$/g, ''))) {\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: row.treeItem.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + row.treeItem.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Selected Fields - Lookups / Sizes / Unwinds\n\t\t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t\tif (field.fieldPath.includes('$')) {\n\t\t\t\t\t\t\tlet fieldData = field.fieldPath.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\t\n\t\t\t\t\t\t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t\t\t\tif (fieldPath.split('.$')[fieldPath.split('.$').length - 1].includes('(Lookup)')) {\n\t\t\t\t\t\t\t\t\tif (!query.some(a => a.$lookup && a.$lookup.as === field.lookup_as.replace(/\\.\\$/g, ''))) {\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: field.lookup_collection,\n\t\t\t\t\t\t\t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t\t\t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t\t\t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t\t\t\t\t\t}});\n\n\t\t\t\t\t\t\t\t\t\tsizes.push(field.lookup_as.replace(/\\.\\$\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + field.lookup_as.replace(/\\.\\$\\./g, '_')]: {$size: {$ifNull: ['$' + field.lookup_as.replace(/\\.\\$/g, ''), []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), 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, '_')))) {\n\t\t\t\t\t\t\t\t\t\tsizes.push(fieldPath.replace(/\\./g, '_'));\n\t\t\t\t\t\t\t\t\t\tquery.push({$addFields: {['size_' + fieldPath.replace(/\\./g, '_')]: {$size: {$ifNull: ['$' + fieldPath, []]}}}});\n\t\t\t\n\t\t\t\t\t\t\t\t\t\tquery.push({'$unwind': {path: '$' + fieldPath, 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}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\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\tlet multFields = [];\n\n\t\t\t\t\t\t\tif (!field.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 => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.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: ['$' + field.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] = '$' + field.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\tlet multFields = [];\n\n\t\t\t\t\t\tsizes.filter(a => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !groupsRow.some(b => b.field.replace(/\\.\\$\\./g, '_').includes(a)) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.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[field.fieldPath.replace(/\\.\\$/g, '')] = {\n\t\t\t\t\t\t\t\t$divide: ['$' + field.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\tlet multFields = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\tsizes.filter(a => !field.fieldPath.replace(/\\.\\$\\./g, '_').includes(a) && !groupsRow.some(b => b.field.replace(/\\.\\$\\./g, '_').includes(a)) && !filterArrayFields.some(b => b.fieldPath.replace(/\\.\\$\\./g, '_').includes(a)) && !fieldsLink.some(b => b.field_first.replace(/\\.\\$\\./g, '_').includes(a) || b.field_second.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_' + field.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\tdivFields.$addFields['count_' + field.fieldPath.replace(/\\.\\$/g, '')] = '$count';\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\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 (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) {\n\t\t\t\t\t\tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t\t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t\t});\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 || !tabularDisplayType || tabularDisplayType === '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\t\n\t\t\t\t\t\tgroupsRow.forEach(row => {\n\t\t\t\t\t\t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t\t\tif (date_field && date_interval) {\n\t\t\t\t\t\t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$isoWeekYear' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\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\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = { '$sum': '$count_' + field.fieldPath.replace(/\\.\\$/g, '') };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'First' || (!groupsRow.length && !field.fieldPath.includes('.$'))) {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Unique') {\n\t\t\t\t\t\t\t\tqueryGroup[field.id] = {'$addToSet': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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\t// queryGroup[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\n\t\t\t\t\t\t\t\t\tqueryGroup[total.id + '_' + field.id] = {$sum: '$' + total.id + '_' + field.id};\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\tselectedFields.forEach(field => {\n\t\t\t\t\t\t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$avg: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$min: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$max: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), 0]};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t\t\t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), -1]};\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[field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\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 === 'Tabular' || 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\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\tquery.push({\n\t\t\t\t\t\t\t$sort: rootOptions.sort\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (reportType === 'Tabular 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\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\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\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tquery.push({$group: grQuery});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// console.log('_____________ query __________'); console.log(query); console.log(JSON.stringify(query, null, 2));\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);\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] = Math.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\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\tresolve(tmpRes);\n\t\t\t\t});\n\t\t\t},\n\t\t}\n\t});\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// let queryGroupUnwindCollectionPaths = [];\n\t\t\t\t\t// groupsRow.filter(a => a.treeItem.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.treeItem.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryGroupUnwindCollectionPaths.filter(a => a === path)[0]) {\n\t\t\t\t\t// \t\t\tqueryGroupUnwindCollectionPaths.push(path);\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// // Unwind\n\t\t\t\t\t// let queryUnwindCollectionPaths = [];\n\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryUnwindCollectionPaths.some(a => a === path) && !queryGroupUnwindCollectionPaths.some(a => a === path)) {\n\t\t\t\t\t// \t\t\tqueryUnwindCollectionPaths.push(path);\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// \t//Links\n\t\t\t\t\t// \tif (fieldsLink.length) {\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\tqueryGroup[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\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 && reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet correctSort = {};\n\n\t\t\t\t\t// \t\tObject.keys(rootOptions.sort).forEach(key => {\n\t\t\t\t\t// \t\t\tcorrectSort[selectedFields.filter(a => a.id === key)[0].fieldPath.replace(/\\.\\$/g, '')] = rootOptions.sort[key];\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tqueryGroups.push({\n\t\t\t\t\t// \t\t\t$sort: correctSort\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t/* --------------------- START IF GROUP ---------------------- */\n\n\t\t\t\t\t// Lookups for Groups\n\t\t\t\t\t// let groupQueries = [];\n\t\t\t\t\t// groupsRow.forEach(row => {\n\t\t\t\t\t// \tif (row.field.includes('$')) {\n\t\t\t\t\t// \t\tlet fieldData = row.field.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\t\n\t\t\t\t\t// \t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t// \t\t\tif (fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t// \t\t\t\tgroupQueries.push({$lookup: {\n\t\t\t\t\t// \t\t\t\t\tfrom: row.treeItem.lookup_collection,\n\t\t\t\t\t// \t\t\t\t\tlocalField: row.treeItem.lookup_local_key,\n\t\t\t\t\t// \t\t\t\t\tforeignField: row.treeItem.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\t\tas: row.treeItem.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t}});\n\n\t\t\t\t\t// \t\t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.include('.$') && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '')} , 0 ] }, then: {$size: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, '')}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\t\tgroupQueries.push(addFields);\n\t\t\t\t\t// \t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t} \n\t\t\t\t\t// \t\t\t\t}\n\n\t\t\t\t\t// \t\t\t\t// total_1_f_0: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$loaded_miles.loaded_miles', {$multiply: [{$size: '$chemicals'}] } ]\n\t\t\t\t\t// \t\t\t\t// },\n\t\t\t\t\t// \t\t\t\t// total_1_f_1: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$wo_number', {$size: '$chemicals'}]\n\t\t\t\t\t// \t\t\t\t// }\n\t\t\n\t\t\t\t\t// \t\t\t\t// groupQueries.push({'$unwind': {path: '$' + row.treeItem.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.includes('.$') && a.fieldType === 'Number' && !groupQueries.some(b => b.$addFields && Object.keys(b.$addFields).includes(total.id + '_' + a.id))).forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + fieldPath} , 0 ] }, then: {$size: '$' + fieldPath}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\tgroupQueries.push(addFields);\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\n\t\t\t\t\t// \t\t\tgroupQueries.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\n\t\t\t\t\t// \t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\tselectedFields.filter(a => a.fieldPath.replace(/\\.\\$/g, '').includes(fieldPath) && a.fieldPath.split('.$').length === 2 && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\tgroupQueries.push(addFields);\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\t\t\t\t\t// });\n\n\t\t\t\t\t// if (!groupsRow.length) {\n\t\t\t\t\t// \tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\tlet fieldData = field.fieldPath.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\t\n\t\t\t\t\t// \t\t\tfieldPath += fieldData[i];\n\n\t\t\t\t\t// \t\t\tif (fieldPath.includes('(Lookup)')) {\n\t\t\t\t\t// \t\t\t\tgroupQueries.push({$lookup: {\n\t\t\t\t\t// \t\t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t// \t\t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t// \t\t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\t\tas: field.lookup_as.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t}});\n\n\t\t\t\t\t// \t\t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.include('.$') && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + field.lookup_as.replace(/\\.\\$/g, '')} , 0 ] }, then: {$size: '$' + field.lookup_as.replace(/\\.\\$/g, '')}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\t\tgroupQueries.push(addFields);\n\t\t\t\t\t// \t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t} \n\t\t\t\t\t// \t\t\t\t}\n\n\t\t\t\t\t// \t\t\t\t// total_1_f_0: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$loaded_miles.loaded_miles', {$multiply: [{$size: '$chemicals'}] } ]\n\t\t\t\t\t// \t\t\t\t// },\n\t\t\t\t\t// \t\t\t\t// total_1_f_1: {\n\t\t\t\t\t// \t\t\t\t// \t$divide: ['$wo_number', {$size: '$chemicals'}]\n\t\t\t\t\t// \t\t\t\t// }\n\t\t\n\t\t\t\t\t// \t\t\t\t// groupQueries.push({'$unwind': {path: '$' + field.lookup_as.replace(/\\.\\$/g, ''), preserveNullAndEmptyArrays: true}});\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tif (i === 0) {\n\t\t\t\t\t// \t\t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\t\tselectedFields.filter(a => !a.fieldPath.includes('.$') && a.fieldType === 'Number' && !groupQueries.some(b => b.$addFields && Object.keys(b.$addFields).includes(total.id + '_' + a.id))).forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t$divide: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), {$multiply: [{$cond: { if: { $gt: [{$size: '$' + fieldPath} , 0 ] }, then: {$size: '$' + fieldPath}, else: 1 }}]}]\n\t\t\t\t\t// \t\t\t\t\t\t\t};\n\t\t\t\t\t// \t\t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\t\tgroupQueries.push(addFields);\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\n\t\t\t\t\t// \t\t\tgroupQueries.push({'$unwind': {path: '$' + fieldPath, preserveNullAndEmptyArrays: true}});\n\n\t\t\t\t\t// \t\t\tif (fieldsTotal.length) {\n\t\t\t\t\t// \t\t\t\tlet addFields = {$addFields: {}};\n\n\t\t\t\t\t// \t\t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\t\tselectedFields.filter(a => a.fieldPath.replace(/\\.\\$/g, '').includes(fieldPath) && a.fieldPath.split('.$').length === 2 && a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\t\taddFields.$addFields[total.id + '_' + field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t\t// \t\t\t\t});\n\n\t\t\t\t\t// \t\t\t\tif (Object.entries(addFields.$addFields).length > 0) {\n\t\t\t\t\t// \t\t\t\t\tgroupQueries.push(addFields);\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\t\t\t\t\t// }\n\n\t\t\t\t\t// // Add group lookups and unwinds to query\n\t\t\t\t\t// query = query.concat(groupQueries);\n\n\t\t\t\t\t// // GROUP\t\t\t\t\t\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tlet queryGroup = {\n\t\t\t\t\t// \t\t_id: {}\n\t\t\t\t\t// \t};\n\t\t\t\t\t\t\n\t\t\t\t\t// \tgroupsRow.forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup._id[row.id] = '$' + row.field.replace(/\\.\\$/g, '');\n\n\t\t\t\t\t// \t\tif (date_field && date_interval) {\n\t\t\t\t\t// \t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['day'] = {'$dayOfMonth' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['week'] = {'$isoWeek' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\t// queryGroup._id['month'] = {'$month' : '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['month'] = {'$month' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\t\t\tqueryGroup._id['year'] = {'$year' : {'date': '$' + date_field.replace(/\\.\\$/g, ''), 'timezone': this.serverConfig['TIMEZONE']}};\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\t// queryGroup[date_field.replace(/\\.\\$/g, '')] = {$first: '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': 1};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\t// if (field.fieldPath.includes('.$') && ) {\n\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').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\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryGroup[field.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\tqueryGroup[field.fieldPath.split('.$')[0]] = {$push: '$' + field.fieldPath.split('.$')[0]};\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\t// else {\n\t\t\t\t\t// \tlet queryGroup = {\n\t\t\t\t\t// \t\t_id: '$_id'\n\t\t\t\t\t// \t};\n\n\t\t\t\t\t// \tselectedFields.filter(a => !a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$avg': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$sum': 1};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$min': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$max': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$first': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\t\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t\telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\tqueryGroup[field.id] = {'$last': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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[field.id] = {'$push': '$' + field.fieldPath.replace(/\\.\\$/g, '')};\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').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\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryGroup[field.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\tqueryGroup[field.fieldPath.split('.$')[0]] = {$push: '$' + field.fieldPath.split('.$')[0]};\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\n\t\t\t\t\t// /* --------------------- END IF GROUP ---------------------- */\n\n\t\t\t\t\t// // Lookup Selected Fields\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('.$')).forEach(field => {\n\t\t\t\t\t// \t// Unwind if from group\n\n\t\t\t\t\t// \tif (groupsRow.length && !groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\tquery.push({$unwind: {\n\t\t\t\t\t// \t\t\tpath: '$' + field.fieldPath.split('.$')[0],\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: true\n\t\t\t\t\t// \t\t}});\n\t\t\t\t\t// \t}\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \t// Loop for each array value (Not Grouped!)\n\t\t\t\t\t// \tfor (let i = 0; i < field.fieldPath.split('.$').length; i++) {\n\t\t\t\t\t// \t\tpath += field.fieldPath.split('.$')[i];\n\n\t\t\t\t\t// \t\t// Unwind\n\t\t\t\t\t// \t\tif (i < field.fieldPath.split('.$').length - 1 && !groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\t\tquery.push({$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: true\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\t// Link\n\t\t\t\t\t// \t\tif (!groupsRow.some(a => a.field.split('.$')[0] === field.fieldPath.split('.$')[0])) {\n\t\t\t\t\t// \t\t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\t\tlet firstLink = link.field_first.split('.$.');\n\t\t\t\t\t// \t\t\t\tfirstLink.pop();\n\t\t\t\t\t// \t\t\t\tfirstLink = firstLink.join('.');\n\t\t\t\t\t// \t\t\t\tlet secondLink = link.field_second.split('.$.');\n\t\t\t\t\t// \t\t\t\tsecondLink.pop();\n\t\t\t\t\t// \t\t\t\tsecondLink = secondLink.join('.');\n\n\t\t\t\t\t// \t\t\t\tif ('$' + firstLink === path || '$' + secondLink === path) {\n\t\t\t\t\t// \t\t\t\t\tquery.push(\n\t\t\t\t\t// \t\t\t\t\t\t{\n\t\t\t\t\t// \t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t[link.id]: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t$cmp: [\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t\t'$' + link.field_first.replace(/\\.\\$/g, ''), \n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t\t'$' + link.field_second.replace(/\\.\\$/g, '')\n\t\t\t\t\t// \t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t// \t\t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t},\n\t\t\t\t\t// \t\t\t\t\t\t{\n\t\t\t\t\t// \t\t\t\t\t\t\t$match: {\n\t\t\t\t\t// \t\t\t\t\t\t\t\t[link.id]: 0\n\t\t\t\t\t// \t\t\t\t\t\t\t}\n\t\t\t\t\t// \t\t\t\t\t\t}\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}\n\n\t\t\t\t\t// \t\t//Totals\n\t\t\t\t\t// \t\tif (i === field.fieldPath.split('.$').length - 1 && field.fieldType === 'Number') {\n\t\t\t\t\t// \t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\tquery.push({$addFields: {[total.id + '_' + field.id]: path}});\n\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// Regroup\n\t\t\t\t\t// \tlet queryLoopGroup = {\n\t\t\t\t\t// \t\t_id: {}\n\t\t\t\t\t// \t};\n\n\t\t\t\t\t// \tif (!groupsRow.length) {\n\t\t\t\t\t// \t\tqueryLoopGroup._id = '$_id';\n\t\t\t\t\t// \t}\n\t\t\t\t\t\t\n\t\t\t\t\t// \tgroupsRow.forEach(row => {\n\t\t\t\t\t// \t\tqueryLoopGroup._id[row.id] = '$_id.' + row.id;\n\n\t\t\t\t\t// \t\tif (date_field && date_interval) {\n\t\t\t\t\t// \t\t\tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['day'] = '$_id.day';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['week'] = '$_id.week';\n\t\t\t\t\t// \t\t\t\t// queryGroup._id['month'] = {'$month' : '$' + date_field.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['month'] = '$_id.month';\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup._id['year'] = '$_id.year';\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// \tselectedFields.forEach(selField => {\n\t\t\t\t\t// \t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\tif (selField.leafValueType === 'Average') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$avg': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$sum': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Count') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$sum': 1};\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$min': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$max': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'First') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$first': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.fieldPath.replace(/\\.\\$/g, ''))};\t\n\t\t\t\t\t// \t\t\t}\n\t\t\t\t\t// \t\t\telse if (selField.leafValueType === 'Last') {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.id] = {'$last': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.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\tqueryLoopGroup[selField.id] = {'$push': '$' + (selField.collection_name === rootCollectionName ? selField.fieldPath.replace(/\\.\\$/g, '') : selField.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\telse {\n\t\t\t\t\t// \t\t\tqueryLoopGroup[selField.id] = {'$first': '$' + selField.id};\t\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').forEach(selField => {\n\t\t\t\t\t// \t\t\t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\t\t\tqueryLoopGroup[total.id + '_' + selField.id] = {['$' + total.type]: '$' + total.id + '_' + selField.id};\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\tqueryLoopGroup[total.id + '_' + selField.id] = {$first: '$' + total.id + '_' + selField.id};\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// Copy Group Arrays Moving Forward\n\t\t\t\t\t// \tgroupsRow.filter(a => a.field.includes('.$')).forEach(row => {\n\t\t\t\t\t// \t\tqueryLoopGroup[row.field.split('.$')[0]] = {$first: '$' + row.field.split('.$')[0]};\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tselectedFields.filter(a => a.fieldPath.includes('.$')).forEach(selField => {\n\t\t\t\t\t// \t\tif (selField.id === field.id) {\n\t\t\t\t\t// \t\t\tif (!queryLoopGroup[selField.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.fieldPath.split('.$')[0]] = {$push: '$' + selField.fieldPath.split('.$')[0]};\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 (!queryLoopGroup[selField.fieldPath.split('.$')[0]]) {\n\t\t\t\t\t// \t\t\t\tqueryLoopGroup[selField.fieldPath.split('.$')[0]] = {$first: '$' + selField.fieldPath.split('.$')[0]};\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: queryLoopGroup});\n\n\t\t\t\t\t// \t// Sort\n\t\t\t\t\t\t\n\t\t\t\t\t// });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\n\n\t\t\t\t\t// uniqueSelectedFieldCollections.filter(a => a !== rootCollectionName).forEach(uniqueCollection => {\n\t\t\t\t\t// \tselectedFields.filter(a => a.collection_name === uniqueCollection).forEach(field => {\n\t\t\t\t\t// \t\tif (!queryLookups.filter(a => a.as === field.lookup_as.replace(/\\.\\$/g, '')).length) {\n\t\t\t\t\t// \t\t\tqueryLookups.push({\n\t\t\t\t\t// \t\t\t\tfrom: field.lookup_collection,\n\t\t\t\t\t// \t\t\t\tlocalField: field.lookup_local_key,\n\t\t\t\t\t// \t\t\t\tforeignField: field.lookup_foreign_key,\n\t\t\t\t\t// \t\t\t\tas: field.lookup_as.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\t// let queryGroupUnwindCollectionPaths = [];\n\t\t\t\t\t// groupsRow.filter(a => a.treeItem.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.treeItem.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryGroupUnwindCollectionPaths.filter(a => a === path)[0]) {\n\t\t\t\t\t// \t\t\tqueryGroupUnwindCollectionPaths.push(path);\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// // Unwind\n\t\t\t\t\t// let queryUnwindCollectionPaths = [];\n\n\t\t\t\t\t// selectedFields.filter(a => a.fieldPath.includes('$')).forEach(field => {\n\t\t\t\t\t// \tlet arrayPartData = field.fieldPath.split('.$');\n\n\t\t\t\t\t// \tlet path = '$';\n\n\t\t\t\t\t// \tfor (let i = 0; i < arrayPartData.length - 1; i++) {\n\t\t\t\t\t// \t\tpath += arrayPartData[i];\n\n\t\t\t\t\t// \t\tif (!queryUnwindCollectionPaths.some(a => a === path) && !queryGroupUnwindCollectionPaths.some(a => a === path)) {\n\t\t\t\t\t// \t\t\tqueryUnwindCollectionPaths.push(path);\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// \t//Links\n\t\t\t\t\t// \tif (fieldsLink.length) {\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\tqueryGroup[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\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 && reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet correctSort = {};\n\n\t\t\t\t\t// \t\tObject.keys(rootOptions.sort).forEach(key => {\n\t\t\t\t\t// \t\t\tcorrectSort[selectedFields.filter(a => a.id === key)[0].fieldPath.replace(/\\.\\$/g, '')] = rootOptions.sort[key];\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tqueryGroups.push({\n\t\t\t\t\t// \t\t\t$sort: correctSort\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\n\t\t\t\t\t// \tqueryGroups.push({$group: queryGroup});\n\n\t\t\t\t\t// \tif (reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tfor (let i = groupsRow.length - 1; i > 0; i--) {\n\t\t\t\t\t// \t\t\tqueryGroups.push({$sort: {['_id.' + groupsRow[i].id]: 1}});\n\n\t\t\t\t\t// \t\t\tlet tmpQueryGroup = {\n\t\t\t\t\t// \t\t\t\t_id: {}\n\t\t\t\t\t// \t\t\t};\n\n\t\t\t\t\t// \t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t// \t\t\t\ttmpQueryGroup._id[groupsRow[j].id] = '$_id.' + groupsRow[j].id;\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tlet tmpQueryGroupObj = {\n\t\t\t\t\t// \t\t\t\t[groupsRow[i].id]: '$_id.' + [groupsRow[i].id]\n\t\t\t\t\t// \t\t\t};\n\n\t\t\t\t\t// \t\t\tif (i === groupsRow.length - 1) {\n\t\t\t\t\t// \t\t\t\tselectedFields.forEach(field => {\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroupObj[field.id] = '$' + field.id;\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\ttmpQueryGroupObj[groupsRow[i + 1].id] = '$' + [groupsRow[i + 1].id];\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\t\t\tselectedFields.filter(a => a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroupObj[total.id + '_' + field.id] = '$' + total.id + '_' + field.id;\n\t\t\t\t\t// \t\t\t\t\ttmpQueryGroup[total.id + '_' + field.id] = {['$' + total.type]: '$' + total.id + '_' + field.id};\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\ttmpQueryGroup[groupsRow[i].id] = {'$push': tmpQueryGroupObj};\n\n\t\t\t\t\t// \t\t\tqueryGroups.push({$group: tmpQueryGroup});\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\tqueryGroups.push({$sort: {['_id.' + groupsRow[0].id]: 1}});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (reportType === 'Dated') {\n\t\t\t\t\t// \t\t// db.collection.aggregate([\n\t\t\t\t\t// \t\t// \t{ \"$group\": {\n\t\t\t\t\t// \t\t// \t\t\"_id\": {\n\t\t\t\t\t// \t\t// \t\t\"$toDate\": {\n\t\t\t\t\t// \t\t// \t\t\t\"$subtract\": [\n\t\t\t\t\t// \t\t// \t\t\t{ \"$toLong\": \"$created_at\" },\n\t\t\t\t\t// \t\t// \t\t\t{ \"$mod\": [ { \"$toLong\": \"$created_at\" }, 1000 * 60 * 15 ] }\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\t},\n\t\t\t\t\t// \t\t// \t\t\"count\": { \"$sum\": 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}\n\t\t\t\t\t// }\n\t\t\t\t\t\n\t\t\t\t\t// //Projection\n\t\t\t\t\t// let queryProjection = {\n\t\t\t\t\t// \t_id: 1\n\t\t\t\t\t// };\n\n\t\t\t\t\t// selectedFields.forEach(field => {\n\t\t\t\t\t// \tif (field.leafValueType === 'Average') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$avg: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Sum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$sum: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Count') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$sum: 1};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Minimum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$min: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Maximum') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$max: '$' + field.fieldPath.replace(/\\.\\$/g, '')};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'First') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), 0]};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse if (field.leafValueType === 'Last') {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = {$slice: ['$' + field.fieldPath.replace(/\\.\\$/g, ''), -1]};\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse {\n\t\t\t\t\t// \t\tqueryProjection[field.id] = '$' + field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\t// \t}\n\t\t\t\t\t// });\n\n\t\t\t\t\t// //Links\n\n\t\t\t\t\t// if (fieldsLink.length) {\n\t\t\t\t\t// \tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\tqueryProjection[link.id] = {$cmp: ['$' + link.field_first.replace(/\\.\\$/g, ''), '$' + link.field_second.replace(/\\.\\$/g, '')]};\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// //Totals\n\t\t\t\t\t// let queryTotals = null;\n\n\t\t\t\t\t// if (fieldsTotal.length && (reportType === 'Tabular' || reportType === 'Dated')) {\n\t\t\t\t\t// \tfieldsTotal.forEach(total => {\n\t\t\t\t\t// \t\tselectedFields.filter(a => a.fieldType === 'Number').forEach(field => {\n\t\t\t\t\t// \t\t\tif (!queryTotals) {\n\t\t\t\t\t// \t\t\t\tqueryTotals = {};\n\t\t\t\t\t// \t\t\t}\n\n\t\t\t\t\t// \t\t\tqueryTotals[total.id + '_' + field.id] = {['$' + total.type]: '$results.' + total.id + '_' + field.id};\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// // ---------------------------------------------------------------\n\n\t\t\t\t\t\n\n\t\t\t\t\t// // Unwind Pre-Lookup Arrays\n\t\t\t\t\t// queryUnwindCollectionPaths.filter(a => !a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$unwind: {\n\t\t\t\t\t// \t\t\tpath: path,\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: true\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// queryGroupUnwindCollectionPaths.filter(a => !a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$unwind: {\n\t\t\t\t\t// \t\t\tpath: path,\n\t\t\t\t\t// \t\t\tpreserveNullAndEmptyArrays: false\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// // Unwind Lookups\n\t\t\t\t\t// queryUnwindCollectionPaths.filter(a => a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tif (!query.filter(a => a.$unwind && a.$unwind.path === path).length) {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: 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// queryGroupUnwindCollectionPaths.filter(a => a.includes('(Lookup)')).forEach(path => {\n\t\t\t\t\t// \tif (!query.filter(a => a.$unwind && a.$unwind.path === path).length) {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$unwind: {\n\t\t\t\t\t// \t\t\t\tpath: path,\n\t\t\t\t\t// \t\t\t\tpreserveNullAndEmptyArrays: 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\t\t\t\t\t// });\n\n\t\t\t\t\t// // Group Unwinds\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tquery = query.concat(queryGroupUnwind.filter(a => !query.some(b => b.$unwind && (b.$unwind.path === a.$unwind.path))));\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Array and Lookup Filters\n\t\t\t\t\t// let queryMatchConditionLookup = {\n\t\t\t\t\t// \t$and: []\n\t\t\t\t\t// };\n\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) {\n\t\t\t\t\t// \tfilters.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)'))))).forEach(filter => {\n\t\t\t\t\t// \t\tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// filterArrays.forEach(filter => {\n\t\t\t\t\t// \tqueryMatchConditionLookup['$and'].push(filter);\n\t\t\t\t\t// });\n\n\t\t\t\t\t// if (queryMatchConditionLookup.$and.some(a => !a['$or'] || (a['$or'] && a['$or'].length)) || queryMatchConditionLookup.$and.length) {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$match: queryMatchConditionLookup\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Group Queries and Projection\n\t\t\t\t\t// if (groupsRow.length) {\n\t\t\t\t\t// \tqueryGroups.forEach(group => {\n\t\t\t\t\t// \t\tquery.push(group);\n\t\t\t\t\t// \t});\n\n\t\t\t\t\t// \tif (reportType === 'Tabular Group') {\n\t\t\t\t\t// \t\tlet tmpProj = deepCopy(queryGroups[queryGroups.length - 2].$group);\n\n\t\t\t\t\t// \t\tif (groupsRow.length === 1) {\n\t\t\t\t\t// \t\t\ttmpProj._id.gr_1 = '$_id.gr_1';\n\t\t\t\t\t// \t\t}\n\n\t\t\t\t\t// \t\tObject.keys(tmpProj).filter(a => a !== '_id').forEach(key => {\n\t\t\t\t\t// \t\t\ttmpProj[key] = 1;\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tObject.assign(tmpProj, tmpProj['_id']);\n\n\t\t\t\t\t// \t\ttmpProj['_id'] = 0;\n\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$project: tmpProj\n\t\t\t\t\t// \t\t});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t\t// else {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: queryProjection\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }\n\n\t\t\t\t\t// // Links\n\t\t\t\t\t// if (fieldsLink.length) {\n\t\t\t\t\t// \tif (fieldsLink.length === 1 && fieldsLink[0].field_first && fieldsLink[0].field_second) {\n\t\t\t\t\t// \t\tquery.push({$match: {[fieldsLink[0].id]: 0}});\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \telse {\n\t\t\t\t\t// \t\tlet tmpAnds = [];\n\n\t\t\t\t\t// \t\tfieldsLink.filter(a => a.field_first && a.field_second).forEach(link => {\n\t\t\t\t\t// \t\t\ttmpAnds.push({[link.id]: 0});\n\t\t\t\t\t// \t\t});\n\n\t\t\t\t\t// \t\tif (tmpAnds.length) {\n\t\t\t\t\t// \t\t\tquery.push({$match: {$and: tmpAnds}});\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\n\n\n\n\t\t\t\t\t// Dated Grouping\n\t\t\t\t\t// if (date_field && date_interval) {\n\t\t\t\t\t// \tif (date_interval === 'Daily') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tday: '$_id.day',\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Weekly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tweek: '$_id.week',\n\t\t\t\t\t// \t\t\t\t\t// month: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Monthly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Quarterly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tmonth: '$_id.month',\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// \telse if (date_interval === 'Yearly') {\n\t\t\t\t\t// \t\tquery.push({\n\t\t\t\t\t// \t\t\t$group: {\n\t\t\t\t\t// \t\t\t\t_id: {\n\t\t\t\t\t// \t\t\t\t\tyear: '$_id.year'\n\t\t\t\t\t// \t\t\t\t},\n\t\t\t\t\t// \t\t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t\t'$push': '$$ROOT'\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\t\t\t\t\t// }\n\n\t\t\t\t\t// GROUP TO GET TOTAL COUNT\n\t\t\t\t\t// query.push({\n\t\t\t\t\t// \t$group: {\n\t\t\t\t\t// \t\t_id: null,\n\t\t\t\t\t// \t\tcount: {$sum: 1},\n\t\t\t\t\t// \t\tresults: {$push: '$$ROOT'}\n\t\t\t\t\t// \t}\n\t\t\t\t\t// });\n\n\t\t\t\t\t// if (rootOptions.limit) {\n\t\t\t\t\t// \t// PROJECT TO SKIP/LIMIT\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: {\n\t\t\t\t\t// \t\t\tcount: 1,\n\t\t\t\t\t// \t\t\tresults: {\n\t\t\t\t\t// \t\t\t\t$slice: ['$results', rootOptions.skip, rootOptions.limit]\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 (queryTotals !== null) {\n\t\t\t\t\t// \t\tquery[query.length - 1].$project['totals'] = queryTotals;\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t\t// else if (queryTotals !== null) {\n\t\t\t\t\t// \tquery.push({\n\t\t\t\t\t// \t\t$project: {\n\t\t\t\t\t// \t\t\tcount: 1,\n\t\t\t\t\t// \t\t\tresults: 1,\n\t\t\t\t\t// \t\t\ttotals: queryTotals\n\t\t\t\t\t// \t\t}\n\t\t\t\t\t// \t});\n\t\t\t\t\t// }"]}
|