@resolveio/server-lib 20.11.11 → 20.11.13

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.
@@ -15,4 +15,6 @@ export declare class CronManager {
15
15
  private stopCronJob;
16
16
  private stopAllCronJobs;
17
17
  private runCronJob;
18
+ private safeStringify;
19
+ private getCircularReplacer;
18
20
  }
@@ -403,7 +403,7 @@ var CronManager = /** @class */ (function () {
403
403
  return __generator(this, function (_a) {
404
404
  switch (_a.label) {
405
405
  case 0:
406
- console.log(new Date(), 'Cron Timeout', JSON.stringify(cron, null, 2));
406
+ console.log(new Date(), 'Cron Timeout', this.safeStringify(cron));
407
407
  if (!res.repeat) return [3 /*break*/, 2];
408
408
  nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);
409
409
  cronHistory_1.date_next = nextDate;
@@ -445,8 +445,8 @@ var CronManager = /** @class */ (function () {
445
445
  case 11: return [3 /*break*/, 18];
446
446
  case 12:
447
447
  err_1 = _a.sent();
448
- console.log(new Date(), 'Cron Error', JSON.stringify(err_1, null, 2));
449
- cronHistory_1.error = JSON.stringify(err_1, null, 2);
448
+ console.log(new Date(), 'Cron Error', this.safeStringify(err_1));
449
+ cronHistory_1.error = this.safeStringify(err_1);
450
450
  cronHistory_1.passed = false;
451
451
  if (!res.repeat) return [3 /*break*/, 14];
452
452
  nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);
@@ -491,6 +491,26 @@ var CronManager = /** @class */ (function () {
491
491
  });
492
492
  });
493
493
  };
494
+ CronManager.prototype.safeStringify = function (obj) {
495
+ try {
496
+ return JSON.stringify(obj, this.getCircularReplacer(), 2);
497
+ }
498
+ catch (e) {
499
+ return "Error stringifying object: ".concat(e.message);
500
+ }
501
+ };
502
+ CronManager.prototype.getCircularReplacer = function () {
503
+ var seen = new WeakSet();
504
+ return function (key, value) {
505
+ if (typeof value === 'object' && value !== null) {
506
+ if (seen.has(value)) {
507
+ return '[Circular]';
508
+ }
509
+ seen.add(value);
510
+ }
511
+ return value;
512
+ };
513
+ };
494
514
  return CronManager;
495
515
  }());
496
516
  exports.CronManager = CronManager;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/cron.manager.ts"],"names":[],"mappings":"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","file":"cron.manager.js","sourcesContent":["import { ChangeStream, ChangeStreamDocument } from 'mongodb';\nimport { CronJobHistories } from '../collections/cron-job-history.collection';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport { CronJobManager } from '../cron/cron';\nimport { CronJobHistoryModel } from '../models/cron-job-history.model';\nimport { CronJobModel } from '../models/cron-job.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\n\nexport class CronManager {\n\tprivate _cronManager: CronJobManager;\n\tprivate _watchCrons$: ChangeStream;\n\tprivate _jobs: CronJobModel[] = [];\n\n\tconstructor() {}\n\n\tstatic create() {\n\t\tconst cronManager = new CronManager();\n\t\tsetImmediate(async () => await cronManager.initialize());\n\t\treturn cronManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._cronManager = new CronJobManager();\n\t\tawait this.watchCrons();\n\t}\n\n\tprivate async watchCrons() {\n\t\tif (this._watchCrons$ && !this._watchCrons$.closed) {\n\t\t\tthis._watchCrons$.removeAllListeners();\n\t\t\tawait this._watchCrons$.close();\n\t\t\tthis._watchCrons$ = null;\n\t\t}\n\t\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\t\n\t\tif (!this._watchCrons$ || this._watchCrons$.closed) {\t\t\t\n\t\t\tlet res = await CronJobs.find();\n\t\t\tthis._jobs = res;\n\n\t\t\tfor (let job of this._jobs) {\n\t\t\t\tawait this.addCronJob(job);\n\t\t\t\tif (job.running) {\n\t\t\t\t\tawait CronJobs.updateOne({_id: job._id}, {$set: {running: false}});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._watchCrons$ = CronJobs.watchCollection([], {fullDocument: 'updateLookup'});\n\n\t\t\tthis._watchCrons$.on('change', async (doc: ChangeStreamDocument<CronJobModel>) => {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (!this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'replace' || doc.operationType === 'update') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tlet oldDoc = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1, doc.fullDocument);\n\n\t\t\t\t\t\t\tif (oldDoc.name !== doc.fullDocument.name) {\n\t\t\t\t\t\t\t\tawait this.removeCronJob(oldDoc.name);\n\t\t\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (typeof oldDoc.time_to_run !== typeof doc.fullDocument.time_to_run || (typeof oldDoc.time_to_run === 'string' && oldDoc.time_to_run !== doc.fullDocument.time_to_run) ||\n\t\t\t\t\t\t\t\t(oldDoc.time_to_run instanceof Date && oldDoc.time_to_run.getTime() !== (<Date>doc.fullDocument.time_to_run).getTime()) || \n\t\t\t\t\t\t\t\toldDoc.timezone !== doc.fullDocument.timezone\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tawait this.updateCronJob(doc.fullDocument);\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\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tlet job = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\t\tawait this.removeCronJob(job.name);\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\tif (this._jobs.some(a => a._id === (<any>doc).documentKey['_id'])) {\n\t\t\t\t\t\tlet job = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\tawait this.removeCronJob(job.name);\n\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', async () => {\n\t\t\t\tawait this._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('end', async () => {\n\t\t\t\tawait this._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('close', async () => {\n\t\t\t\tthis._watchCrons$.removeAllListeners();\n\t\t\t\tthis._watchCrons$ = null;\n\t\t\t\tawait this.watchCrons();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doesCronJobExist(cron: CronJobModel) {\n\t\treturn this._cronManager.exists(cron.name);\n\t}\n\n\tprivate doesCronJobNameExist(cron_name: string) {\n\t\treturn this._cronManager.exists(cron_name);\n\t}\n\n\tprivate async addCronJob(cron: CronJobModel) {\n\t\tif (!this.doesCronJobExist(cron)) {\n\t\t\ttry {\n\t\t\t\tawait this._cronManager.add(\n\t\t\t\t\tcron.name,\n\t\t\t\t\tcron.time_to_run,\n\t\t\t\t\t() => this.runCronJob(cron),\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t\tcron.timezone,\n\t\t\t\t\tnull, \n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(cron.name).nextDate()['ts']);\n\n\t\t\t\tif (cron.running || (nextDate && !cron.next_run || nextDate.getTime() !== cron.next_run.getTime())) {\n\t\t\t\t\tawait CronJobs.updateOne({_id: cron._id}, {$set: {running: false, next_run: nextDate || null}});\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(e) {\n\t\t\t\tconsole.log('Cron error', e);\n\n\t\t\t\tif (cron.time_to_run instanceof Date) {\n\t\t\t\t\tawait this.runCronJob(cron);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async updateCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tawait this._cronManager.update(cron.name, cron.time_to_run, () => this.runCronJob(cron), null, true, cron.timezone);\n\n\t\t\tlet nextDate = new Date(this._cronManager.getJob(cron.name).nextDate()['ts']);\n\n\t\t\tif (nextDate && (!cron.next_run || nextDate.getTime() !== cron.next_run.getTime())) {\n\t\t\t\tawait CronJobs.updateOne({_id: cron._id}, {$set: {next_run: nextDate}});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async removeCronJob(cron_name: string) {\n\t\tif (this.doesCronJobNameExist(cron_name)) {\n\t\t\tawait this._cronManager.delete(cron_name);\n\t\t}\n\t}\n\n\tprivate startCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.start(cron.name);\n\t\t}\n\t}\n\n\tprivate async stopCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tawait this._cronManager.stop(cron.name);\n\t\t}\n\t}\n\n\tprivate async stopAllCronJobs() {\n\t\tawait this._cronManager.stopAll();\n\t}\n\n\tprivate async runCronJob(cron: CronJobModel) {\n\t\tlet now = new Date();\n\n\t\tlet res = await CronJobs.findOneAndUpdate({\n\t\t\t$and: [\n\t\t\t\t{_id: cron._id},\n\t\t\t\t{running: false},\n\t\t\t\t{\n\t\t\t\t\t$or: [\n\t\t\t\t\t\t{next_run: {$exists: false}},\n\t\t\t\t\t\t{next_run: null},\n\t\t\t\t\t\t{next_run: {$lte: now}}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}, {$set: {running: true}});\n\t\t\t\n\t\tif (res) {\n\t\t\tlet cronHistory: CronJobHistoryModel = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\tname: res.name,\n\t\t\t\treoccuring: res.repeat,\n\t\t\t\ttime_to_run: res.time_to_run,\n\t\t\t\tmethod_name: res.method_run,\n\t\t\t\tid_cronjob: res._id,\n\t\t\t\tserver_restart: true,\n\t\t\t\tpassed: true,\n\t\t\t\terror: '',\n\t\t\t\tdate_scheduled: res.next_run,\n\t\t\t\tdate_start: new Date(),\n\t\t\t\tdate_end: null,\n\t\t\t\tdate_next: null\n\t\t\t};\n\t\t\t\n\t\t\tawait CronJobHistories.create(cronHistory);\n\n\t\t\tlet timeoutHandle = setTimeout(async () => {\n\t\t\t\tconsole.log(new Date(), 'Cron Timeout', JSON.stringify(cron, null, 2));\n\n\t\t\t\tif (res.repeat) {\n\t\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t\t}\n\t\t\t}, 5 * 60 * 1000); // 5 minutes in milliseconds\n\n\t\t\ttry {\n\t\t\t\tif (res.method_run_data) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_run, res.method_run_data);\t\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_run);\n\t\t\t\t}\n\n\t\t\t\tif (res.method_complete) {\n\t\t\t\t\tif (res.method_complete_data) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_complete, res.method_complete_data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_complete);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(new Date(), 'Cron Error', JSON.stringify(err, null, 2));\n\t\t\t\tcronHistory.error = JSON.stringify(err, null, 2);\n\t\t\t\tcronHistory.passed = false;\n\n\t\t\t\tif (res.repeat) {\n\t\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\t// Clear the timeout if the job completes or fails before the timeout\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t}\n\n\t\t\tif (res.repeat) {\n\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t} \n\t\t\telse {\n\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t}\n\n\t\t\tawait CronJobHistories.updateOne({_id: cronHistory._id}, {$set: {\n\t\t\t\tserver_restart: false,\n\t\t\t\tpassed: cronHistory.passed,\n\t\t\t\terror: cronHistory.error,\n\t\t\t\tdate_end: new Date(),\n\t\t\t\tdate_next: cronHistory.date_next\n\t\t\t}});\n\t\t}\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/managers/cron.manager.ts"],"names":[],"mappings":"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","file":"cron.manager.js","sourcesContent":["import { ChangeStream, ChangeStreamDocument } from 'mongodb';\nimport { CronJobHistories } from '../collections/cron-job-history.collection';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport { CronJobManager } from '../cron/cron';\nimport { CronJobHistoryModel } from '../models/cron-job-history.model';\nimport { CronJobModel } from '../models/cron-job.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\n\nexport class CronManager {\n\tprivate _cronManager: CronJobManager;\n\tprivate _watchCrons$: ChangeStream;\n\tprivate _jobs: CronJobModel[] = [];\n\n\tconstructor() {}\n\n\tstatic create() {\n\t\tconst cronManager = new CronManager();\n\t\tsetImmediate(async () => await cronManager.initialize());\n\t\treturn cronManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._cronManager = new CronJobManager();\n\t\tawait this.watchCrons();\n\t}\n\n\tprivate async watchCrons() {\n\t\tif (this._watchCrons$ && !this._watchCrons$.closed) {\n\t\t\tthis._watchCrons$.removeAllListeners();\n\t\t\tawait this._watchCrons$.close();\n\t\t\tthis._watchCrons$ = null;\n\t\t}\n\t\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\t\n\t\tif (!this._watchCrons$ || this._watchCrons$.closed) {\t\t\t\n\t\t\tlet res = await CronJobs.find();\n\t\t\tthis._jobs = res;\n\n\t\t\tfor (let job of this._jobs) {\n\t\t\t\tawait this.addCronJob(job);\n\t\t\t\tif (job.running) {\n\t\t\t\t\tawait CronJobs.updateOne({_id: job._id}, {$set: {running: false}});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._watchCrons$ = CronJobs.watchCollection([], {fullDocument: 'updateLookup'});\n\n\t\t\tthis._watchCrons$.on('change', async (doc: ChangeStreamDocument<CronJobModel>) => {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tif (!this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'replace' || doc.operationType === 'update') {\n\t\t\t\t\tif (doc.fullDocument) {\n\t\t\t\t\t\tlet oldDoc = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\tif (oldDoc) {\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1, doc.fullDocument);\n\n\t\t\t\t\t\t\tif (oldDoc.name !== doc.fullDocument.name) {\n\t\t\t\t\t\t\t\tawait this.removeCronJob(oldDoc.name);\n\t\t\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (typeof oldDoc.time_to_run !== typeof doc.fullDocument.time_to_run || (typeof oldDoc.time_to_run === 'string' && oldDoc.time_to_run !== doc.fullDocument.time_to_run) ||\n\t\t\t\t\t\t\t\t(oldDoc.time_to_run instanceof Date && oldDoc.time_to_run.getTime() !== (<Date>doc.fullDocument.time_to_run).getTime()) || \n\t\t\t\t\t\t\t\toldDoc.timezone !== doc.fullDocument.timezone\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tawait this.updateCronJob(doc.fullDocument);\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\tthis._jobs.push(doc.fullDocument);\n\t\t\t\t\t\t\tawait this.addCronJob(doc.fullDocument);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (this._jobs.some(a => a._id === <any>doc.documentKey['_id'])) {\n\t\t\t\t\t\t\tlet job = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\t\tawait this.removeCronJob(job.name);\n\t\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\tif (this._jobs.some(a => a._id === (<any>doc).documentKey['_id'])) {\n\t\t\t\t\t\tlet job = this._jobs.find(a => a._id === <any>doc.documentKey['_id']);\n\t\t\t\t\t\tawait this.removeCronJob(job.name);\n\t\t\t\t\t\tthis._jobs.splice(this._jobs.map(a => a._id).indexOf(<any>doc.documentKey['_id']), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', async () => {\n\t\t\t\tawait this._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('end', async () => {\n\t\t\t\tawait this._watchCrons$.close();\n\t\t\t})\n\t\t\t.on('close', async () => {\n\t\t\t\tthis._watchCrons$.removeAllListeners();\n\t\t\t\tthis._watchCrons$ = null;\n\t\t\t\tawait this.watchCrons();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doesCronJobExist(cron: CronJobModel) {\n\t\treturn this._cronManager.exists(cron.name);\n\t}\n\n\tprivate doesCronJobNameExist(cron_name: string) {\n\t\treturn this._cronManager.exists(cron_name);\n\t}\n\n\tprivate async addCronJob(cron: CronJobModel) {\n\t\tif (!this.doesCronJobExist(cron)) {\n\t\t\ttry {\n\t\t\t\tawait this._cronManager.add(\n\t\t\t\t\tcron.name,\n\t\t\t\t\tcron.time_to_run,\n\t\t\t\t\t() => this.runCronJob(cron),\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t\tcron.timezone,\n\t\t\t\t\tnull, \n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(cron.name).nextDate()['ts']);\n\n\t\t\t\tif (cron.running || (nextDate && !cron.next_run || nextDate.getTime() !== cron.next_run.getTime())) {\n\t\t\t\t\tawait CronJobs.updateOne({_id: cron._id}, {$set: {running: false, next_run: nextDate || null}});\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(e) {\n\t\t\t\tconsole.log('Cron error', e);\n\n\t\t\t\tif (cron.time_to_run instanceof Date) {\n\t\t\t\t\tawait this.runCronJob(cron);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async updateCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tawait this._cronManager.update(cron.name, cron.time_to_run, () => this.runCronJob(cron), null, true, cron.timezone);\n\n\t\t\tlet nextDate = new Date(this._cronManager.getJob(cron.name).nextDate()['ts']);\n\n\t\t\tif (nextDate && (!cron.next_run || nextDate.getTime() !== cron.next_run.getTime())) {\n\t\t\t\tawait CronJobs.updateOne({_id: cron._id}, {$set: {next_run: nextDate}});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async removeCronJob(cron_name: string) {\n\t\tif (this.doesCronJobNameExist(cron_name)) {\n\t\t\tawait this._cronManager.delete(cron_name);\n\t\t}\n\t}\n\n\tprivate startCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tthis._cronManager.start(cron.name);\n\t\t}\n\t}\n\n\tprivate async stopCronJob(cron: CronJobModel) {\n\t\tif (this.doesCronJobExist(cron)) {\n\t\t\tawait this._cronManager.stop(cron.name);\n\t\t}\n\t}\n\n\tprivate async stopAllCronJobs() {\n\t\tawait this._cronManager.stopAll();\n\t}\n\n\tprivate async runCronJob(cron: CronJobModel) {\n\t\tlet now = new Date();\n\n\t\tlet res = await CronJobs.findOneAndUpdate({\n\t\t\t$and: [\n\t\t\t\t{_id: cron._id},\n\t\t\t\t{running: false},\n\t\t\t\t{\n\t\t\t\t\t$or: [\n\t\t\t\t\t\t{next_run: {$exists: false}},\n\t\t\t\t\t\t{next_run: null},\n\t\t\t\t\t\t{next_run: {$lte: now}}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}, {$set: {running: true}});\n\t\t\t\n\t\tif (res) {\n\t\t\tlet cronHistory: CronJobHistoryModel = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\tname: res.name,\n\t\t\t\treoccuring: res.repeat,\n\t\t\t\ttime_to_run: res.time_to_run,\n\t\t\t\tmethod_name: res.method_run,\n\t\t\t\tid_cronjob: res._id,\n\t\t\t\tserver_restart: true,\n\t\t\t\tpassed: true,\n\t\t\t\terror: '',\n\t\t\t\tdate_scheduled: res.next_run,\n\t\t\t\tdate_start: new Date(),\n\t\t\t\tdate_end: null,\n\t\t\t\tdate_next: null\n\t\t\t};\n\t\t\t\n\t\t\tawait CronJobHistories.create(cronHistory);\n\n\t\t\tlet timeoutHandle = setTimeout(async () => {\n\t\t\t\tconsole.log(new Date(), 'Cron Timeout', this.safeStringify(cron));\n\n\t\t\t\tif (res.repeat) {\n\t\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t\t}\n\t\t\t}, 5 * 60 * 1000); // 5 minutes in milliseconds\n\n\t\t\ttry {\n\t\t\t\tif (res.method_run_data) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_run, res.method_run_data);\t\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_run);\n\t\t\t\t}\n\n\t\t\t\tif (res.method_complete) {\n\t\t\t\t\tif (res.method_complete_data) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_complete, res.method_complete_data);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait ResolveIOServer.getMainServer().getMethodManager().callMethodCron(res.method_complete);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.log(new Date(), 'Cron Error', this.safeStringify(err));\n\t\t\t\tcronHistory.error = this.safeStringify(err);\n\t\t\t\tcronHistory.passed = false;\n\n\t\t\t\tif (res.repeat) {\n\t\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\t// Clear the timeout if the job completes or fails before the timeout\n\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t}\n\n\t\t\tif (res.repeat) {\n\t\t\t\tlet nextDate = new Date(this._cronManager.getJob(res.name).nextDate()['ts']);\n\t\t\t\tcronHistory.date_next = nextDate;\n\t\t\t\tawait CronJobs.updateOne({_id: res._id}, {$set: {running: false, next_run: nextDate}});\n\t\t\t} \n\t\t\telse {\n\t\t\t\tawait CronJobs.deleteOne({_id: res._id});\n\t\t\t}\n\n\t\t\tawait CronJobHistories.updateOne({_id: cronHistory._id}, {$set: {\n\t\t\t\tserver_restart: false,\n\t\t\t\tpassed: cronHistory.passed,\n\t\t\t\terror: cronHistory.error,\n\t\t\t\tdate_end: new Date(),\n\t\t\t\tdate_next: cronHistory.date_next\n\t\t\t}});\n\t\t}\n\t}\n\n\tprivate safeStringify(obj: unknown)\n\t{\n\t\ttry\n\t\t{\n\t\t\treturn JSON.stringify(obj, this.getCircularReplacer(), 2);\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\treturn `Error stringifying object: ${e.message}`;\n\t\t}\n\t}\n\n\tprivate getCircularReplacer()\n\t{\n\t\tconst seen = new WeakSet();\n\t\treturn (key, value) =>\n\t\t{\n\t\t\tif (typeof value === 'object' && value !== null)\n\t\t\t{\n\t\t\t\tif (seen.has(value))\n\t\t\t\t{\n\t\t\t\t\treturn '[Circular]';\n\t\t\t\t}\n\t\t\t\tseen.add(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\t}\n}\n"]}
package/methods/aws.js CHANGED
@@ -348,7 +348,7 @@ function loadAWSMethods(methodManager) {
348
348
  return __generator(this, function (_b) {
349
349
  switch (_b.label) {
350
350
  case 0:
351
- if (keys.length === 0) {
351
+ if (!Array.isArray(keys) || keys.length === 0) {
352
352
  return [2 /*return*/, 0];
353
353
  }
354
354
  return [4 /*yield*/, file_collection_1.Files.find({ key: { $in: keys } })];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/aws.ts"],"names":[],"mappings":"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","file":"aws.js","sourcesContent":["import { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport axios from 'axios';\nimport SimpleSchema from 'simpl-schema';\nimport { Files } from '../collections/file.collection';\nimport { AWS, MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\nlet fs = require('fs');\nlet pdfCnt = 1000000;\n\nexport function loadAWSMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tuploadFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileData: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileSize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileOrder: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcompress: {\n\t\t\t\t\ttype: Boolean\n\t\t\t\t}\n\t\t\t}),\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tfunction: async function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string, compress: Boolean) {\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + (pdfCnt++) + '-' + fileName;\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tconst maxRetries = 3;\n\t\t\t\tlet attempt = 0;\n\n\t\t\t\twhile (attempt <= maxRetries) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\t\tKey: key,\n\t\t\t\t\t\t\tBody: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: fileData.split(',')[0].split(':')[1].split(';')[0], \n\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\treturn Files.create({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\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\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tattempt++;\n\t\t\t\t\t\tif (attempt <= maxRetries) {\n\t\t\t\t\t\t\tconst backoff = Math.pow(2, attempt) * 1000;\n\t\t\t\t\t\t\tconsole.warn(`Attempt ${attempt} failed. Retrying in ${backoff / 1000} seconds...`);\n\t\t\t\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, backoff));\n\t\t\t\t\t\t} \n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthrow new Error(`Error in AWS Upload File And Save: Failed to upload after ${maxRetries} attempts: ${err.message}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tuploadNonPDFFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: Buffer.from(fileData), \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF File And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tuploadNonPDFBufferAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileDataBuffer: {\t\n\t\t\t\t\ttype: Buffer\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileDataBuffer, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: fileDataBuffer, \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\t\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF Buffer And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tuploadNonPDFStreamAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileData: string, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: fs.createReadStream(fileData), \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: 1, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF Stream And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tdeleteFiles: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(keys: string[]) {\n\t\t\t\tif (keys.length === 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tlet files = await Files.find({key: {$in: keys}});\n\t\n\t\t\t\tlet deleteCnt = files.length;\n\t\n\t\t\t\tfor (let file of files) {\n\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t\t\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tdeleteCnt--;\n\t\t\t\t\t\t\tif (!deleteCnt) {\n\t\t\t\t\t\t\t\treturn files.length;\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\tcatch (err) {\n\t\t\t\t\t\terr.mesage = 'Error In AWS Delete Files: ' + err.mesage;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\tdeleteFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(key: string) {\t\t\n\t\t\t\tlet file = await Files.findOne({key: key});\n\t\n\t\t\t\tif (file) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.mesage = 'Error In AWS Delete File (Resolve Side): ' + err.mesage;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File (AWS Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdeleteFileWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string) {\n\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\t\n\t\t\t\tif (!file) {\n\t\t\t\t\tthrow new Error('Error in AWS Delete File With ID: Could not find file');\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File With ID (Resolve Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File With ID (AWS Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlsAndFilesWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tids: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'ids.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(ids: string[], expires: number) {\n\t\t\t\tlet res = [];\n\n\t\t\t\tlet files = await Files.find({_id: {$in: ids}});\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\t\t\tlet file = files[i];\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {res: res, fileArray: files.map(a => a.name)};\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string, expires: number) {\n\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\tKey: file.key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlUSEast1BucketAndKey: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tbucket: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(bucket: string, key: string, expires: number) {\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3USEast1();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: bucket, \n\t\t\t\t\tKey: key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrl: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string, expires: number) {\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\tKey: key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrls: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(keys: string[], expires: number) {\n\t\t\t\tlet res = [];\n\n\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\tlet key = keys[i];\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\n\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t}\n\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\t\tgetDataURIfromURL: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\turl: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(url: string) {\n\t\t\t\tconst response = await axios.get(url, {\n\t\t\t\t\tresponseType: 'arraybuffer'\n\t\t\t\t});\n\t\t\t\n\t\t\t\tif (response.status !== 200) {\n\t\t\t\t\tthrow new Error(`Error in Get Data URI From URL: Failed to fetch URL, status: ${response.status}`);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tconst contentType = response.headers['content-type'];\n\t\t\t\tconst dataBase64 = Buffer.from(response.data).toString('base64');\n\t\t\t\treturn `data:${contentType};base64,${dataBase64}`;\n\t\t\t}\n\t\t},\n\t\temailFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n additional_message: {\n type: String\n }\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string, email: string, additional_message) {\n\t\t\t\tlet file = await Files.findById(id_file);\n\n\t\t\t\tif (!file) {\n\t\t\t\t\tthrow new Error('Error in AWS Email File: Could not find file');\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet resPDF = await this.callMethod('getSignedUrl', file.key, 259200);\n\t\t\t\t\t\n\t\t\t\t\tif (resPDF) {\n\t\t\t\t\t\tif (file.size < 5000000) {\n\t\t\t\t\t\t\tlet emailMessage = 'Attached is the file requested for email.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\n\t\t\t\t\t\t\tawait this.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{\n\t\t\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\t\t\tpath: resPDF\n\t\t\t\t\t\t\t}], null, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet emailMessage = 'Please click the link to the requested file.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tawait this.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '', null, null, '');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in AWS Email File: Could not get file URL');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Email File: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}"]}
1
+ {"version":3,"sources":["../../src/methods/aws.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,wCAohBC;AA/hBD,gDAAsD;AACtD,sEAA6D;AAC7D,+BAA0B;AAC1B,6CAAwC;AACxC,kEAAuD;AAEvD,gEAA0D;AAC1D,yCAAmD;AACnD,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,IAAI,MAAM,GAAG,OAAO,CAAC;AAErB,SAAgB,cAAc,CAAC,aAA4B;IAC1D,aAAa,CAAC,OAAO,CAAC;QACrB,iBAAiB,EAAE;YAClB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,OAAO;iBACb;aACD,CAAC;YACF,0CAA0C;YAC1C,QAAQ,EAAE,UAAe,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAiB;;;;;;gCACpI,IAAI,CAAC,QAAQ,EAAE,CAAC;oCACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gCAC/C,CAAC;gCAEG,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;gCAClE,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gCAC7B,UAAU,GAAG,CAAC,CAAC;gCACjB,OAAO,GAAG,CAAC,CAAC;;;;;;;gDAIJ,qBAAM,EAAE,CAAC,SAAS,CAAC;wDAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wDACjC,GAAG,EAAE,GAAG;wDACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;wDAC5H,GAAG,EAAE,SAAS;wDACd,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wDAC/D,kBAAkB,EAAE,QAAQ;qDAC5B,CAAC,EAAA;;gDAPE,GAAG,GAAG,SAOR;gDAEF,IAAI,GAAG,EAAE,CAAC;mFACF,uBAAK,CAAC,MAAM,CAAC;gEACnB,GAAG,EAAE,IAAA,0BAAiB,GAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;6DAC5G,CAAC;gDACH,CAAC;qDACI,CAAC;mFACE,IAAI;gDACZ,CAAC;;;;gDAGD,OAAO,EAAE,CAAC;qDACN,CAAA,OAAO,IAAI,UAAU,CAAA,EAArB,wBAAqB;gDAClB,YAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;gDAC5C,OAAO,CAAC,IAAI,CAAC,kBAAW,OAAO,kCAAwB,SAAO,GAAG,IAAI,gBAAa,CAAC,CAAC;gDACpF,gDAAgD;gDAChD,qBAAM,IAAI,OAAO,CAAC,UAAA,OAAO,IAAI,OAAA,UAAU,CAAC,OAAO,EAAE,SAAO,CAAC,EAA5B,CAA4B,CAAC,EAAA;;gDAD1D,gDAAgD;gDAChD,SAA0D,CAAC;;oDAG3D,MAAM,IAAI,KAAK,CAAC,oEAA6D,UAAU,wBAAc,KAAG,CAAC,OAAO,CAAE,CAAC,CAAC;;;;;;;;qCA7BhH,CAAA,OAAO,IAAI,UAAU,CAAA;;;;;;;oCAkC5B,sBAAO,IAAI,EAAC;;;;aACZ;SACD;QACD,uBAAuB,EAAE;YACxB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAgB;;;;;;gCACjH,IAAI,CAAC,QAAQ,EAAE,CAAC;oCACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gCAC/C,CAAC;gCAEG,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC;gCAE/C,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,SAAS,CAAC;wCAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,GAAG;wCACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;wCAC3B,GAAG,EAAE,SAAS;wCACd,WAAW,EAAE,kBAAkB;wCAC/B,kBAAkB,EAAE,QAAQ;qCAC5B,CAAC,EAAA;;gCAPE,GAAG,GAAG,SAOR;gCAEF,IAAI,GAAG,EAAE,CAAC;oCACT,sBAAO,uBAAK,CAAC,MAAM,CAAC;4CACnB,GAAG,EAAE,IAAA,0BAAiB,GAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;yCAC5G,CAAC,EAAC;gCACJ,CAAC;qCACI,CAAC;oCACL,sBAAO,IAAI,EAAC;gCACb,CAAC;;;;gCAGD,KAAG,CAAC,MAAM,GAAG,6CAA6C,GAAG,KAAG,CAAC,MAAM,CAAC;gCACxE,MAAM,KAAG,CAAC;;;;;aAEX;SACD;QACD,yBAAyB,EAAE;YAC1B,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,QAAgB,EAAE,cAAc,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAgB;;;;;;gCAC/G,IAAI,CAAC,QAAQ,EAAE,CAAC;oCACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gCAC/C,CAAC;gCAEG,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC;gCAE/C,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,SAAS,CAAC;wCAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,GAAG;wCACR,IAAI,EAAE,cAAc;wCACpB,GAAG,EAAE,SAAS;wCACd,WAAW,EAAE,kBAAkB;wCAC/B,kBAAkB,EAAE,QAAQ;qCAC5B,CAAC,EAAA;;gCAPE,GAAG,GAAG,SAOR;gCAEF,IAAI,GAAG,EAAE,CAAC;oCACT,sBAAO,uBAAK,CAAC,MAAM,CAAC;4CACnB,GAAG,EAAE,IAAA,0BAAiB,GAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;yCAC5G,CAAC,EAAC;gCACJ,CAAC;qCACI,CAAC;oCACL,sBAAO,IAAI,EAAC;gCACb,CAAC;;;;gCAGD,KAAG,CAAC,MAAM,GAAG,+CAA+C,GAAG,KAAG,CAAC,MAAM,CAAC;gCAC1E,MAAM,KAAG,CAAC;;;;;aAEX;SACD;QACD,yBAAyB,EAAE;YAC1B,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,QAAgB,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAgB;;;;;;gCAC/F,IAAI,CAAC,QAAQ,EAAE,CAAC;oCACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gCAC/C,CAAC;gCAEG,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC;gCAE/C,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,SAAS,CAAC;wCAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,GAAG;wCACR,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;wCACnC,GAAG,EAAE,SAAS;wCACd,WAAW,EAAE,kBAAkB;wCAC/B,kBAAkB,EAAE,QAAQ;qCAC5B,CAAC,EAAA;;gCAPE,GAAG,GAAG,SAOR;gCAEF,IAAI,GAAG,EAAE,CAAC;oCACT,sBAAO,uBAAK,CAAC,MAAM,CAAC;4CACnB,GAAG,EAAE,IAAA,0BAAiB,GAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ;yCACrG,CAAC,EAAC;gCACJ,CAAC;qCACI,CAAC;oCACL,sBAAO,IAAI,EAAC;gCACb,CAAC;;;;gCAGD,KAAG,CAAC,MAAM,GAAG,+CAA+C,GAAG,KAAG,CAAC,MAAM,CAAC;gCAC1E,MAAM,KAAG,CAAC;;;;;aAEX;SACD;QACD,WAAW,EAAE;YACZ,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,IAAI,EAAE;oBACL,IAAI,EAAE,KAAK;iBACX;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,IAAc;;;;;;;gCACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCAC/C,sBAAO,CAAC,EAAC;gCACV,CAAC;gCAEW,qBAAM,uBAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,EAAC,CAAC,EAAA;;gCAA5C,KAAK,GAAG,SAAoC;gCAE5C,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;;;;gCAEZ,UAAA,SAAA,KAAK,CAAA;;;;gCAAb,IAAI;gCACZ,qBAAM,uBAAK,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,EAAA;;gCAAtC,SAAsC,CAAC;gCAEnC,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,YAAY,CAAC;wCAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,IAAI,CAAC,GAAG;qCACb,CAAC,EAAA;;gCAHE,GAAG,GAAG,SAGR;gCAEF,IAAI,GAAG,EAAE,CAAC;oCACT,SAAS,EAAE,CAAC;oCACZ,IAAI,CAAC,SAAS,EAAE,CAAC;wCAChB,sBAAO,KAAK,CAAC,MAAM,EAAC;oCACrB,CAAC;gCACF,CAAC;;;;gCAGD,KAAG,CAAC,MAAM,GAAG,6BAA6B,GAAG,KAAG,CAAC,MAAM,CAAC;gCACxD,MAAM,KAAG,CAAC;;;;;;;;;;;;;;;qCAIZ,sBAAO,CAAC,EAAC;;;;aACT;SACD;QACD,UAAU,EAAE;YACX,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,GAAG,EAAE;oBACJ,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,GAAW;;;;;oCACxB,qBAAM,uBAAK,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC,EAAA;;gCAAtC,IAAI,GAAG,SAA+B;qCAEtC,IAAI,EAAJ,wBAAI;;;;gCAEN,qBAAM,uBAAK,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,EAAA;;gCAAtC,SAAsC,CAAC;;;;gCAGvC,KAAG,CAAC,MAAM,GAAG,2CAA2C,GAAG,KAAG,CAAC,MAAM,CAAC;gCACtE,MAAM,KAAG,CAAC;;gCAIR,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,YAAY,CAAC;wCAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,GAAG;qCACR,CAAC,EAAA;;gCAHE,GAAG,GAAG,SAGR;gCAEF,sBAAO,GAAG,EAAC;;;gCAGX,KAAG,CAAC,MAAM,GAAG,uCAAuC,GAAG,KAAG,CAAC,MAAM,CAAC;gCAClE,MAAM,KAAG,CAAC;;;;;aAEX;SACD;QACD,gBAAgB,EAAE;YACjB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,OAAe;;;;;oCAC5B,qBAAM,uBAAK,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,OAAO,EAAC,CAAC,EAAA;;gCAA1C,IAAI,GAAG,SAAmC;gCAE9C,IAAI,CAAC,IAAI,EAAE,CAAC;oCACX,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gCAC1E,CAAC;;;;gCAGA,qBAAM,uBAAK,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,EAAA;;gCAAtC,SAAsC,CAAC;;;;gCAGvC,KAAG,CAAC,MAAM,GAAG,mDAAmD,GAAG,KAAG,CAAC,MAAM,CAAC;gCAC9E,MAAM,KAAG,CAAC;;gCAGP,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;;;;gCAGxB,qBAAM,EAAE,CAAC,YAAY,CAAC;wCAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;wCACjC,GAAG,EAAE,IAAI,CAAC,GAAG;qCACb,CAAC,EAAA;;gCAHE,GAAG,GAAG,SAGR;gCAEF,sBAAO,GAAG,EAAC;;;gCAGX,KAAG,CAAC,MAAM,GAAG,+CAA+C,GAAG,KAAG,CAAC,MAAM,CAAC;gCAC1E,MAAM,KAAG,CAAC;;;;;aAEX;SACD;QACD,2BAA2B,EAAE;YAC5B,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,GAAG,EAAE;oBACJ,IAAI,EAAE,KAAK;iBACX;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,GAAa,EAAE,OAAe;;;;;;gCAClD,GAAG,GAAG,EAAE,CAAC;gCAED,qBAAM,uBAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,EAAC,GAAG,EAAE,GAAG,EAAC,EAAC,CAAC,EAAA;;gCAA3C,KAAK,GAAG,SAAmC;gCAEtC,CAAC,GAAG,CAAC;;;qCAAE,CAAA,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;gCAC3B,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gCAChB,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gCAC/B,UAAU,GAAG,IAAI,4BAAgB,CAAC;oCACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;oCACjC,GAAG,EAAE,IAAI,CAAC,GAAG;iCACb,CAAC,CAAC;gCACH,KAAA,CAAA,KAAA,GAAG,CAAA,CAAC,IAAI,CAAA;gCAAC,qBAAM,IAAA,mCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,EAAA;;gCAAjE,cAAS,SAAwD,EAAC,CAAC;;;gCAPlC,CAAC,EAAE,CAAA;;oCAUrC,sBAAO,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,EAAC,EAAC;;;;aACrD;SACD;QACD,kBAAkB,EAAE;YACnB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,OAAe,EAAE,OAAe;;;;;oCAC7C,qBAAM,uBAAK,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,OAAO,EAAC,CAAC,EAAA;;gCAA1C,IAAI,GAAG,SAAmC;gCAE1C,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gCAC/B,UAAU,GAAG,IAAI,4BAAgB,CAAC;oCACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;oCACjC,GAAG,EAAE,IAAI,CAAC,GAAG;iCACb,CAAC,CAAC;gCAEH,sBAAO,IAAA,mCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,EAAC;;;;aAC1D;SACD;QACD,+BAA+B,EAAE;YAChC,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,MAAM,EAAE;oBACP,IAAI,EAAE,MAAM;iBACZ;gBACD,GAAG,EAAE;oBACJ,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,MAAc,EAAE,GAAW,EAAE,OAAe;gBAC9D,IAAI,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,SAAS,EAAE,CAAC;gBAC1C,IAAI,UAAU,GAAG,IAAI,4BAAgB,CAAC;oBACrC,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,GAAG;iBACR,CAAC,CAAC;gBAEH,OAAO,IAAA,mCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;YAC3D,CAAC;SACD;QACD,YAAY,EAAE;YACb,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,GAAG,EAAE;oBACJ,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAS,GAAW,EAAE,OAAe;gBAC9C,IAAI,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,UAAU,GAAG,IAAI,4BAAgB,CAAC;oBACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;oBACjC,GAAG,EAAE,GAAG;iBACR,CAAC,CAAC;gBAEH,OAAO,IAAA,mCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;YAC3D,CAAC;SACD;QACD,aAAa,EAAE;YACd,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,IAAI,EAAE;oBACL,IAAI,EAAE,KAAK;iBACX;gBACD,QAAQ,EAAE;oBACT,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,IAAc,EAAE,OAAe;;;;;;gCACnD,GAAG,GAAG,EAAE,CAAC;gCAEJ,CAAC,GAAG,CAAC;;;qCAAE,CAAA,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;gCAC1B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gCACd,EAAE,GAAS,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gCAC/B,UAAU,GAAG,IAAI,4BAAgB,CAAC;oCACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;oCACjC,GAAG,EAAE,GAAG;iCACR,CAAC,CAAC;gCAEH,KAAA,CAAA,KAAA,GAAG,CAAA,CAAC,IAAI,CAAA;gCAAC,qBAAM,IAAA,mCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,EAAA;;gCAAjE,cAAS,SAAwD,EAAC,CAAC;;;gCARnC,CAAC,EAAE,CAAA;;oCAWpC,sBAAO,GAAG,EAAC;;;;aACX;SACD;QACD,iBAAiB,EAAE;YAClB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,GAAG,EAAE;oBACJ,IAAI,EAAE,MAAM;iBACZ;aACD,CAAC;YACF,QAAQ,EAAE,UAAe,GAAW;;;;;oCAClB,qBAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;oCACrC,YAAY,EAAE,aAAa;iCAC3B,CAAC,EAAA;;gCAFI,QAAQ,GAAG,SAEf;gCAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oCAC7B,MAAM,IAAI,KAAK,CAAC,uEAAgE,QAAQ,CAAC,MAAM,CAAE,CAAC,CAAC;gCACpG,CAAC;gCAEK,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gCAC/C,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gCACjE,sBAAO,eAAQ,WAAW,qBAAW,UAAU,CAAE,EAAC;;;;aAClD;SACD;QACD,SAAS,EAAE;YACV,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;gBACD,KAAK,EAAE;oBACN,IAAI,EAAE,MAAM;iBACZ;gBACW,kBAAkB,EAAE;oBAChB,IAAI,EAAE,MAAM;iBACf;aACb,CAAC;YACF,QAAQ,EAAE,UAAe,OAAe,EAAE,KAAa,EAAE,kBAAkB;;;;;oCAC/D,qBAAM,uBAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAA;;gCAApC,IAAI,GAAG,SAA6B;gCAExC,IAAI,CAAC,IAAI,EAAE,CAAC;oCACX,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gCACjE,CAAC;;;;gCAGa,qBAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAA;;gCAAhE,MAAM,GAAG,SAAuD;qCAEhE,MAAM,EAAN,wBAAM;qCACL,CAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA,EAAnB,wBAAmB;gCAClB,YAAY,GAAG,6CAA6C,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,yBAAyB,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE;gCAE7J,qBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,sCAAe,CAAC,aAAa,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;4CACxG,QAAQ,EAAE,IAAI,CAAC,IAAI;4CACnB,IAAI,EAAE,MAAM;yCACZ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAA;;gCAHb,SAGa,CAAC;;;gCAGV,YAAY,GAAG,gDAAgD,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,yBAAyB,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE;gCAEhK,qBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,sCAAe,CAAC,aAAa,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAA;;gCAAhI,SAAgI,CAAC;;oCAGlI,sBAAO,IAAI,EAAC;oCAGZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;;;;gCAIpE,MAAG,CAAC,MAAM,GAAG,2BAA2B,GAAG,MAAG,CAAC,MAAM,CAAC;gCACtD,MAAM,MAAG,CAAC;;;;;aAEX;SACD;KACD,CAAC,CAAC;AACJ,CAAC","file":"aws.js","sourcesContent":["import { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport axios from 'axios';\nimport SimpleSchema from 'simpl-schema';\nimport { Files } from '../collections/file.collection';\nimport { AWS, MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\nlet fs = require('fs');\nlet pdfCnt = 1000000;\n\nexport function loadAWSMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tuploadFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileData: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileSize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileOrder: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcompress: {\n\t\t\t\t\ttype: Boolean\n\t\t\t\t}\n\t\t\t}),\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tfunction: async function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string, compress: Boolean) {\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + (pdfCnt++) + '-' + fileName;\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tconst maxRetries = 3;\n\t\t\t\tlet attempt = 0;\n\n\t\t\t\twhile (attempt <= maxRetries) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\t\tKey: key,\n\t\t\t\t\t\t\tBody: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: fileData.split(',')[0].split(':')[1].split(';')[0], \n\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\treturn Files.create({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\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\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tattempt++;\n\t\t\t\t\t\tif (attempt <= maxRetries) {\n\t\t\t\t\t\t\tconst backoff = Math.pow(2, attempt) * 1000;\n\t\t\t\t\t\t\tconsole.warn(`Attempt ${attempt} failed. Retrying in ${backoff / 1000} seconds...`);\n\t\t\t\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, backoff));\n\t\t\t\t\t\t} \n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthrow new Error(`Error in AWS Upload File And Save: Failed to upload after ${maxRetries} attempts: ${err.message}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tuploadNonPDFFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: Buffer.from(fileData), \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF File And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tuploadNonPDFBufferAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileDataBuffer: {\t\n\t\t\t\t\ttype: Buffer\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileDataBuffer, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: fileDataBuffer, \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\t\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF Buffer And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tuploadNonPDFStreamAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: async function(fileName: string, fileData: string, fileOrder: number, fileType: string) {\t\n\t\t\t\tif (!fileName) {\n\t\t\t\t\tthrow new Error(\"Invalid File Name provided\");\n\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.putObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\tBody: fs.createReadStream(fileData), \n\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t});\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\treturn Files.create({\t\n\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: 1, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Upload Non PDF Stream And Save: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tdeleteFiles: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(keys: string[]) {\n\t\t\t\tif (!Array.isArray(keys) || keys.length === 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tlet files = await Files.find({key: {$in: keys}});\n\t\n\t\t\t\tlet deleteCnt = files.length;\n\t\n\t\t\t\tfor (let file of files) {\n\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t\t\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tdeleteCnt--;\n\t\t\t\t\t\t\tif (!deleteCnt) {\n\t\t\t\t\t\t\t\treturn files.length;\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\tcatch (err) {\n\t\t\t\t\t\terr.mesage = 'Error In AWS Delete Files: ' + err.mesage;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\tdeleteFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(key: string) {\t\t\n\t\t\t\tlet file = await Files.findOne({key: key});\n\t\n\t\t\t\tif (file) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.mesage = 'Error In AWS Delete File (Resolve Side): ' + err.mesage;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File (AWS Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdeleteFileWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string) {\n\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\t\n\t\t\t\tif (!file) {\n\t\t\t\t\tthrow new Error('Error in AWS Delete File With ID: Could not find file');\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Files.deleteOne({_id: file._id});\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File With ID (Resolve Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await s3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Delete File With ID (AWS Side): ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlsAndFilesWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tids: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'ids.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(ids: string[], expires: number) {\n\t\t\t\tlet res = [];\n\n\t\t\t\tlet files = await Files.find({_id: {$in: ids}});\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\t\t\tlet file = files[i];\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {res: res, fileArray: files.map(a => a.name)};\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string, expires: number) {\n\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\tKey: file.key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlUSEast1BucketAndKey: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tbucket: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(bucket: string, key: string, expires: number) {\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3USEast1();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: bucket, \n\t\t\t\t\tKey: key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrl: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string, expires: number) {\n\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\tKey: key\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn getSignedUrl(s3, getCommand, {expiresIn: expires});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrls: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(keys: string[], expires: number) {\n\t\t\t\tlet res = [];\n\n\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\tlet key = keys[i];\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\n\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t}\n\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\t\tgetDataURIfromURL: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\turl: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(url: string) {\n\t\t\t\tconst response = await axios.get(url, {\n\t\t\t\t\tresponseType: 'arraybuffer'\n\t\t\t\t});\n\t\t\t\n\t\t\t\tif (response.status !== 200) {\n\t\t\t\t\tthrow new Error(`Error in Get Data URI From URL: Failed to fetch URL, status: ${response.status}`);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tconst contentType = response.headers['content-type'];\n\t\t\t\tconst dataBase64 = Buffer.from(response.data).toString('base64');\n\t\t\t\treturn `data:${contentType};base64,${dataBase64}`;\n\t\t\t}\n\t\t},\n\t\temailFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n additional_message: {\n type: String\n }\n\t\t\t}),\n\t\t\tfunction: async function(id_file: string, email: string, additional_message) {\n\t\t\t\tlet file = await Files.findById(id_file);\n\n\t\t\t\tif (!file) {\n\t\t\t\t\tthrow new Error('Error in AWS Email File: Could not find file');\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet resPDF = await this.callMethod('getSignedUrl', file.key, 259200);\n\t\t\t\t\t\n\t\t\t\t\tif (resPDF) {\n\t\t\t\t\t\tif (file.size < 5000000) {\n\t\t\t\t\t\t\tlet emailMessage = 'Attached is the file requested for email.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\n\t\t\t\t\t\t\tawait this.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{\n\t\t\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\t\t\tpath: resPDF\n\t\t\t\t\t\t\t}], null, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet emailMessage = 'Please click the link to the requested file.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tawait this.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '', null, null, '');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Error in AWS Email File: Could not get file URL');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.mesage = 'Error In AWS Email File: ' + err.mesage;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
@@ -68,7 +68,7 @@ function loadCronJobMethods(methodManager) {
68
68
  case 1:
69
69
  files = _a.sent();
70
70
  if (!files.length) return [3 /*break*/, 4];
71
- return [4 /*yield*/, this.callMethod('deleteFiles')];
71
+ return [4 /*yield*/, this.callMethod('deleteFiles', files.map(function (file) { return file.key; }))];
72
72
  case 2:
73
73
  _a.sent();
74
74
  return [4 /*yield*/, file_collection_1.Files.deleteMany({ _id: { $in: files.map(function (a) { return a._id; }) } })];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/cron-jobs.ts"],"names":[],"mappings":"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","file":"cron-jobs.js","sourcesContent":["import * as Excel from 'exceljs';\nimport * as moment from 'moment-timezone';\nimport SimpleSchema from 'simpl-schema';\nimport * as XLSX from 'xlsx';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport { Files } from '../collections/file.collection';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions } from '../models/pagination.model';\nimport { deepCopy, mergeDeep, round, toTitleCase } from '../util/common';\n\nexport function loadCronJobMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tcronEmailMergedDocsCleanUp: {\n\t\t\tfunction: async function() {\n\t\t\t\tlet files = await Files.find({$and: [{type: 'Email Merged Docs'}, {createdAt: {$lte: moment().subtract(1, 'day').toDate()}}]});\n\t\t\t\t\n\t\t\t\tif (files.length) {\n\t\t\t\t\tawait this.callMethod('deleteFiles');\n\t\t\t\t\tawait Files.deleteMany({_id: {$in: files.map(a => a._id)}});\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tstuckCronJob: {\n\t\t\tfunction: async function() {\n\t\t\t\tlet fiveMin = moment().subtract(5, 'minutes').toDate();\n\t\t\t\tlet cronJobs = await CronJobs.find({running: true, updatedAt: {$lte: fiveMin}});\n\n\t\t\t\tif (cronJobs.length) {\n\t\t\t\t\tawait CronJobs.updateMany({_id: {$in: cronJobs.map(a => a._id)}}, {$set: {running: false}});\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\treportbuilderCronJob: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdata: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(data: Object) {\n\t\t\t\tlet report = await ReportBuilderReports.findById(data['id_report']);\n\n\t\t\t\treport.fields_selected.forEach((field: any) => {\n\t\t\t\t\tlet dotPath = field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\tlet fieldData = dotPath.split('.');\n\t\t\t\t\tfield.fieldPathObj = null;\n\t\t\t\t\tfor (let i = fieldData.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (!field.fieldPathObj) {\n\t\t\t\t\t\t\tfield.fieldPathObj = {[fieldData[i]]: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfield.fieldPathObj = {[fieldData[i]]: field.fieldPathObj};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ((report.fields_selected && report.fields_selected.length) || (report.groups_row && report.groups_row.length)) {\n\t\t\t\t\tlet fieldsObj = {};\n\n\t\t\t\t\tlet count = 0;\n\n\t\t\t\t\treport.fields_selected.forEach((field: any) => {\n\t\t\t\t\t\tif (field.collection_name === report.collection_root) {\n\t\t\t\t\t\t\tfieldsObj = mergeDeep(fieldsObj, field.fieldPathObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet sortIndex = report.fields_sort.findIndex(a => a.field === field['id']);\n\n\t\t\t\t\t\tif (sortIndex >= 0) {\n\t\t\t\t\t\t\treport.fields_sort[sortIndex].field = ('f_' + count);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfield['id'] = 'f_' + count;\n\n\t\t\t\t\t\tcount += 1;\n\t\t\t\t\t});\n\n\t\t\t\t\tlet sortObj = {};\n\t\t\t\t\tif (report.fields_sort.length) {\n\t\t\t\t\t\treport.fields_sort.forEach(sortField => {\n\t\t\t\t\t\t\tif (sortField.field.startsWith('gr_')) {\n\t\t\t\t\t\t\t\tsortObj['_id.' + sortField.field] = (sortField.order === 'asc' ? 1 : -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\tsortObj[sortField.field] = (sortField.order === 'asc' ? 1 : -1);\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\telse {\n\t\t\t\t\t\tsortObj = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet rootOptions: PaginationOptions = {\n\t\t\t\t\t\tlimit: 0,\n\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\tfields: fieldsObj,\n\t\t\t\t\t\tsort: sortObj\n\t\t\t\t\t};\n\n\t\t\t\t\tlet filters = [];\n\t\t\t\t\treport.fields_filter.forEach(filterAnd => {\n\t\t\t\t\t\tlet ors = [];\n\t\t\t\t\t\tfilterAnd.ors.filter(a => !a.field.includes('.$.')).forEach(filter => {\n\t\t\t\t\t\t\tif (filter.condition && filter.field && ((filter.value !== null && (!Array.isArray(filter.value) || filter.value.length)) || filter.condition === 'null' || filter.condition === 'nnull')) {\n\t\t\t\t\t\t\t\tif (filter.condition === 'bw') {\n\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'Date' && filter.is_rolling) {\n\t\t\t\t\t\t\t\t\t\tlet startDate = null;\n\t\t\t\t\t\t\t\t\t\tlet endDate = null;\n\n\t\t\t\t\t\t\t\t\t\tif (filter.rolling_interval === 'Q1') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(2).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q2') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(2).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(3).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q3') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(3).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(4).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q4') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(4).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Today') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Yesterday') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(1, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Week') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Week') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('isoWeek').subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Month') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Month') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('month').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last 30 Days') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(30, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Quarter') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(moment().quarter()).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Quarter') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(moment().quarter()).subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('quarter').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Year') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Year') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'All') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = new Date(2017, 0, 1, 0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tendDate.setHours(23);\n\t\t\t\t\t\t\t\t\t\tendDate.setMinutes(59);\n\t\t\t\t\t\t\t\t\t\tendDate.setSeconds(59);\n\t\t\t\t\t\t\t\t\t\tendDate.setMilliseconds(999);\n\n\t\t\t\t\t\t\t\t\t\tors.push({$and: [{[filter.field]: {'$gte': startDate}}, {[filter.field]: {'$lte': endDate}}]});\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\tors.push({$and: [{[filter.field]: {'$gte': filter.value}}, {[filter.field]: {'$lte': filter.highValue}}]});\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 if (filter.condition === 'nnull') {\n\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$exists': true}});\n\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$ne': null}});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'String') {\n\t\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$ne': ''}});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (filter.condition === 'null') {\n\t\t\t\t\t\t\t\t\tors.push({[filter.field]: {'$eq': null}});\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 (Array.isArray(filter.value)) {\n\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'ne') {\n\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\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 (and.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push(and[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\tlet or = [];\n\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\tor.push({[filter.field]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (or.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$or: or});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push(or[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\tors.push({[filter.field]: {['$' + filter.condition]: filter.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (ors.length) {\n\t\t\t\t\t\t\tfilters.push({$or: ors});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet collectionTree = await this.callMethod('reportBuilderBuildTree', report.collection_root);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collectionTree) {\n\t\t\t\t\t\t\tcollectionTree.layers = [collectionTree];\n\t\t\t\n\t\t\t\t\t\t\tlet treeLeaves = [];\n\t\t\t\t\t\t\tlet allLeaves = [];\n\t\t\t\t\t\t\tgetTreeLeaves(collectionTree.children, treeLeaves);\n\t\t\t\t\t\t\tgetTreeLeaves(collectionTree.children, allLeaves, true);\n\n\t\t\t\t\t\t\tlet filterArrayFields = [];\n\t\t\t\t\t\t\tlet filterArrays = [];\n\t\t\t\t\t\t\treport.fields_filter.forEach(filterAnd => {\n\t\t\t\t\t\t\t\tlet ors = [];\n\t\t\t\t\t\t\t\tfilterAnd.ors.filter(a => a.field.includes('.$.')).forEach(filter => {\n\t\t\t\t\t\t\t\t\tlet filterLeaf = allLeaves.find(a => a.fieldPath === filter.field);\n\t\t\t\t\t\t\t\t\tif (filterLeaf) {\n\t\t\t\t\t\t\t\t\t\tfilterArrayFields.push(filterLeaf);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (filter.condition && filter.field && ((filter.value !== null && (!Array.isArray(filter.value) || filter.value.length)) || filter.condition === 'null' || filter.condition === 'nnull')) {\n\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'bw') {\n\t\t\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'Date' && filter.is_rolling) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet startDate = null;\n\t\t\t\t\t\t\t\t\t\t\t\tlet endDate = null;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (filter.rolling_interval === 'Q1') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(2).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q2') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(2).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(3).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q3') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(3).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(4).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q4') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(4).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('year').toDate();\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\telse if (filter.rolling_interval === 'Today') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Yesterday') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(1, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().subtract(1, 'days').endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Week') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Week') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('isoWeek').subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('isoWeek').toDate();\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\telse if (filter.rolling_interval === 'Month') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Month') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('month').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('month').toDate();\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\telse if (filter.rolling_interval === 'Last 30 Days') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(30, 'days').startOf('day').toDate();\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\telse if (filter.rolling_interval === 'Quarter') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(moment().quarter()).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Quarter') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(moment().quarter()).subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('quarter').toDate();\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\telse if (filter.rolling_interval === 'Year') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Year') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('year').toDate();\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\telse if (filter.rolling_interval === 'All') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = new Date(2017, 0, 1, 0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\tendDate.setHours(23);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setMinutes(59);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setSeconds(59);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setMilliseconds(999);\n\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: [{[filter.field.replace(/\\.\\$/g, '')]: {'$gte': startDate}}, {[filter.field.replace(/\\.\\$/g, '')]: {'$lte': endDate}}]});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tfilterArrays.push({$and: [{[filter.field.replace(/\\.\\$/g, '')]: {'$gte': filter.value}}, {[filter.field.replace(/\\.\\$/g, '')]: {'$lte': filter.highValue}}]});\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\telse if (filter.condition === 'nnull') {\n\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$exists': true}});\n\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$ne': null}});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$ne': ''}});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.condition === 'null') {\n\t\t\t\t\t\t\t\t\t\t\tors.push({[filter.field.replace(/\\.\\$/g, '')]: {'$eq': null}});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(filter.value)) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'ne') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (and.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push(and[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet or = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tor.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (or.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push({$or: or});\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push(or[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: filter.value}});\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\n\t\t\t\t\t\t\t\tif (ors.length) {\n\t\t\t\t\t\t\t\t\tfilterArrays.push({$or: ors});\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\ttry {\n\t\t\t\t\t\t\t\tlet res = await this.callMethod('reportBuilderGetResults', report.type, report.collection_root, rootOptions, filters, filterArrays, filterArrayFields, report.fields_selected, report.fields_custom, report.groups_row, report.fields_total, report.fields_link, report.id_date_field || null, report.date_interval || null, report.group_type);\n\t\t\t\t\t\t\t\tif (res && res[0]) {\n\t\t\t\t\t\t\t\t\tlet results = res[0].results;\n\t\t\t\t\t\t\t\t\tlet reportTotals = res[0].totals;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (report.type === 'List') {\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\tif ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'Number') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined ).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id].toLocaleString();\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\telse if ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id].toLocaleString('en-US', { style: 'currency', currency: 'USD' });\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\telse if ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'Currency') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = round(result[field.id], 2).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\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\telse if (field.fieldType === 'Boolean' && (!field.leafFormatType || field.leafFormatType === 'Boolean')) {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 'True' : 'False';\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\telse if (field.fieldType === 'Boolean' && field.leafFormatType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 'Yes' : 'No';\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\telse if (field.fieldType === 'Boolean' && field.leafFormatType === 'Boolean_Number') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 1 : 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\telse if (field.fieldType === 'Date' && (field.leafFormatType === 'Date')) {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('L');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Time') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LT');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'DateTime') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('MM/DD/YYYY h:mm A');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Date_long') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LL');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'DateTime_long') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LLL');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Timestamp') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).toDate().getTime();\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\tlet lines: any = [];\n\n\t\t\t\t\t\t\t\t\t\tlet tmpHeaders = {};\n\n\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\ttmpHeaders[group.id] = group.columnName;\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(header => {\n\t\t\t\t\t\t\t\t\t\t\ttmpHeaders[header.columnName] = header.columnName;\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlet wb = XLSX.utils.book_new();\n\n\t\t\t\t\t\t\t\t\t\tresults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmp = {};\n\t\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(result._id[group.id])) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id].join(',');\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (group.treeItem.fieldType === 'Number') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id] ? (typeof(result._id[group.id]) === 'string' ? parseFloat(result._id[group.id].replace(/,/g, '').replace(/\\$/g, '')) : result._id[group.id]) : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id] || '';\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\treport.fields_selected.filter(a => a.show).forEach(header => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(result[header.id])) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id].join(',');\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (header.fieldType === 'Number' || header.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id] ? (typeof(result[header.id]) === 'string' ? parseFloat(result[header.id].replace(/,/g, '').replace(/\\$/g, '')) : result[header.id]) : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id] || '';\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\n\t\t\t\t\t\t\t\t\t\t\tlines.push(tmp);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlet ws = XLSX.utils.json_to_sheet(lines);\n\t\t\t\t\t\t\t\t\t\tXLSX.utils.book_append_sheet(wb, ws, 'RB Data');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlet wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'base64'});\n\n\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(email,\n\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t<b>` + this.serverConfig['CLIENT_NAME'] + ` Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>` + report.report_name + `<br>\n\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>` + data['user'] + `<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: report.report_name + '-' + moment().format('MM-DD-YYYY-hh-mm-A') + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: wbout,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tencoding: 'base64'\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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\telse if (report.type === 'Group') {\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\tresults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\tmodifyDataTypeField(report, result, field, 1);\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\tlet wb = new Excel.Workbook();\n\t\t\t\t\t\t\t\t\t\tlet ws = wb.addWorksheet('RB_1', {views: [{showGridLines: false}]});\n\t\t\t\t\t\t\t\t\t\twb.properties.date1904 = false;\n\t\t\t\t\t\t\t\t\t\twb.calcProperties.fullCalcOnLoad = true;\n\n\t\t\t\t\t\t\t\t\t\tlet currentRow = 1;\n\t\t\t\t\t\t\t\t\t\tlet row = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Report Name:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = report.report_name;\n\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Run Date:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = moment().format('LLL');\n\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 2;\n\n\t\t\t\t\t\t\t\t\t\tlet copy = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\tlet widths = [];\n\t\t\t\t\t\t\t\t\t\tcopy.forEach(res => {\n\t\t\t\t\t\t\t\t\t\t\tcurrentRow = tabGroupExcelRecursive(report, ws, currentRow, 1, res);\n\t\t\t\t\t\t\t\t\t\t\ttabGroupExcelWidthRecursive(report, 1, res, widths);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tfor (let i = 1; i < ws.columns.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\tws.columns[i].width = widths[i - 1];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tlet now = new Date();\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet buffer = await wb.xlsx.writeBuffer();\n\t\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(email,\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>` + this.serverConfig['CLIENT_NAME'] + ` Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>` + report.report_name + `<br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>` + data['user'] + `<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tHave a great day!<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: 'Group_Report_' + report.report_name + '_' + now.getFullYear() + '_' + (now.getMonth() + 1) + '_' + now.getDate() + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: buffer\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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}\n\t\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error writing excel export', err)\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\telse if (report.type === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tlet datedUniqueDates = [];\n\t\t\t\t\t\t\t\t\t\tlet datedUniqueGroups = [];\n\t\t\t\t\t\t\t\t\t\tlet datedData = [];\n\t\t\t\t\t\t\t\t\t\tlet reportTotalGroups = [];\n\t\t\t\t\t\t\t\t\t\tlet reportTotalDates = [];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Step 1: Handle quarterly dates if applicable\n\t\t\t\t\t\t\t\t\t\tif (report.date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\t\tresults.forEach(dataPt => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (dataPt._id.month < 4) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 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\telse if (dataPt._id.month < 7) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 2;\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\telse if (dataPt._id.month < 10) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 3;\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdelete dataPt._id.month;\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t// Deduplicate quarterly data\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = results.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet dataPt = results[i];\n\t\t\t\t\t\t\t\t\t\t\t\tif (results.filter(a => JSON.stringify(a._id) === JSON.stringify(dataPt._id)).length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet tmpData = results.find(a => JSON.stringify(a._id) === JSON.stringify(dataPt._id));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(tmpData)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(a => a !== '_id')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData[key] += dataPt[key];\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\n\t\t\t\t\t\t\t\t\t\t\t\t\tresults.splice(i, 1); // Remove the duplicate entry\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\t// Step 2: Prepare unique groups\n\t\t\t\t\t\t\t\t\t\tlet tmpResults = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\ttmpResults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.day;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.week;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.month;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.quarter;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.year;\n\n\t\t\t\t\t\t\t\t\t\t\tlet tmpGroup = {};\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\ttmpGroup[key] = result._id[key];\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 (!datedUniqueGroups.find(a => JSON.stringify(a) === JSON.stringify(tmpGroup))) {\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.push(tmpGroup);\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\t// Step 3: Prepare unique dates\n\t\t\t\t\t\t\t\t\t\ttmpResults = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\ttmpResults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id)\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(a => a !== 'second' && a !== 'hour' && a !== 'minute' && a !== 'day' && a !== 'week' && a !== 'month' && a !== 'quarter' && a !== 'year')\n\t\t\t\t\t\t\t\t\t\t\t\t.forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdelete result._id[key];\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tlet tmpDate = {};\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\ttmpDate[key] = result._id[key];\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 (!datedUniqueDates.find(a => JSON.stringify(a) === JSON.stringify(tmpDate))) {\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.push(tmpDate);\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\t// Build the date strings\n\t\t\t\t\t\t\t\t\t\t// Ensure moment is using America/Chicago timezone for all date processing\n\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tif (!result.year) {\n\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'No Date';\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tif (report.date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1, // Use `month - 1` since months are zero-indexed in moment as well\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminute: result.minute,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: result.second\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH:mm:ss');\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\telse if (report.date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminute: result.minute\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH:mm');\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\telse if (report.date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH');\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\telse if (report.date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY');\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\telse if (report.date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tweek: result.week\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).day('Monday').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateLast = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tweek: result.week\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).day('Sunday').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'Week #' + result.week + ' ' + result.year + ' (' + moment(result.date).format('MM/DD/YY') + ' - ' + moment(result.dateLast).format('MM/DD/YY') + ')';\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\telse if (report.date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1, // Months are zero-indexed in moment\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM YYYY');\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\telse if (report.date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).quarter(result.quarter).toDate();;\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'Q' + result.quarter + ' ' + result.year;\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\telse if (report.date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = result.year.toString();\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\t\tdatedUniqueDates = datedUniqueDates.filter(a => !a.date)\n\t\t\t\t\t\t\t\t\t\t\t.concat(datedUniqueDates.filter(a => a.date).sort((a, b) => a.date.getTime() - b.date.getTime()));\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Step 4: Build datedData and reportTotalGroups\n\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(date => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmpData = [];\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalDated = {};\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalCnt = {};\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalType = {};\n\n\t\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet result = results.find(a => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet match = true;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Match the group fields\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(group).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== group[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Match the date fields\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(date).filter(key => key !== 'date' && key !== 'dateLast' && key !== 'dateString').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== date[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn match;\n\t\t\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\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData.push(result);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).filter(a => a).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (report.fields_total.filter(a => a.fields.includes(key)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalDated[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] = result._id[key];\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] += result._id[key];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalCnt[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] = 1;\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalType[key] = report.fields_total.find(a => a.fields.includes(key)).type;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(result).filter(a => a && a !== '_id').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (report.fields_total.filter(a => a.fields.includes(key)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalDated[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] = result[key];\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] += result[key];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalCnt[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] = 1;\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalType[key] = report.fields_total.find(a => a.fields.includes(key)).type;\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData.push(null);\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\t// Handle averaging for totals\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(tmpTotalType).forEach(totalKey => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (tmpTotalType[totalKey] === 'avg') {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[totalKey] = tmpTotalDated[totalKey] / tmpTotalCnt[totalKey];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[totalKey] = round(tmpTotalDated[totalKey], 2);\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\treportTotalDates.push(tmpTotalDated);\n\t\t\t\t\t\t\t\t\t\t\tdatedData.push(tmpData);\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\t// Calculate group-level totals\n\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalGroup = {};\n\t\t\t\t\t\t\t\t\t\t\tlet filteredData = results.filter(a => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet match = (!Object.keys(group).length || group._id === null) ? false : true;\n\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(group).filter(a => a !== 'date' && a !== 'dateLast' && a !== 'dateString' && a !== 'second' && a !== 'minute' && a !== 'hour' && a !== 'day' && a !== 'week' && a !== 'month' && a !== 'quarter' && a !== 'year').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== group[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\treturn match;\n\t\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\t\treport.fields_total.forEach(total => {\n\t\t\t\t\t\t\t\t\t\t\t\ttotal.fields.forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (filteredData.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = filteredData.filter(a => a && a[field])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(a => a[field])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (total.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = round(tmpTotalGroup[field] / filteredData.length, 2);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = 0;\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\treportTotalGroups.push(tmpTotalGroup);\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\t// Step 5: Proceed with Excel generation using datedData and reportTotalGroups\n\t\t\t\t\t\t\t\t\t\tlet wb = new Excel.Workbook();\n\t\t\t\t\t\t\t\t\t\tlet ws = wb.addWorksheet('Dated_Report', {views: [{showGridLines: true}]});\n\t\t\t\t\t\t\t\t\t\twb.properties.date1904 = false;\n\t\t\t\t\t\t\t\t\t\twb.calcProperties.fullCalcOnLoad = true;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlet currentRow = 1;\n\t\t\t\t\t\t\t\t\t\tlet currentCol = 1;\n\t\t\t\t\t\t\t\t\t\tlet row = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Report Name:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = report.report_name;\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Run Date:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = moment().format('LLL');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 2;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Add group column headers\n\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = group.columnName;\n\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\t// Add field headers\n\t\t\t\t\t\t\t\t\t\tcurrentCol += report.fields_selected.filter(a => a.show).length;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Add the date interval headers\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(date => {\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = date.dateString;\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\t\t// Add totals headers\n\t\t\t\t\t\t\t\t\t\treport.fields_total.forEach(total => {\n\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = 'Totals - ' + toTitleCase(total.type);\n\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Populate data for each group and field with date intervals\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < datedUniqueGroups.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\tlet group = datedUniqueGroups[i];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (let j = 0; j < report.fields_selected.filter(a => a.show).length; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet field = report.fields_selected.filter(a => a.show)[j];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Populate group data\n\t\t\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(groupRow => {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = (j === 0) ? group[groupRow.id] : '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\t// Populate field data\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = field.columnName;\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Populate date interval data for each field\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let k = 0; k < datedUniqueDates.length; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet result = datedData[k];\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (result[i]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = result[i][field.id] ? result[i][field.id] : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = '';\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\tcurrentCol++;\n\t\t\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\t\t\t// Add totals for each field in the report\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let k = 0; k < report.fields_total.length; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = reportTotalGroups[i][field.id] ? reportTotalGroups[i][field.id] : '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\tcurrentRow++; // Move to the next row for the next field\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\t\t// Add report totals at the bottom\n\t\t\t\t\t\t\t\t\t\tif (reportTotals) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < report.fields_total.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet total = report.fields_total[i];\n\t\t\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = toTitleCase(total.type) + ' Totals';\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol += report.groups_row.length; // Skip group columns\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Skip the date columns for the totals row\n\t\t\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\t// Set totals in the correct fields\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let j = 0; j < report.fields_selected.filter(a => a.show).length; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet field = report.fields_selected.filter(a => a.show)[j];\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = reportTotals[total.id + '_' + field.id] || '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\tcurrentRow++; // Move to the next row for the next total\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\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// Save the Excel file and send it via email\n\t\t\t\t\t\t\t\t\t\t\tlet buffer = await wb.xlsx.writeBuffer();\n\t\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(\n\t\t\t\t\t\t\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>${this.serverConfig['CLIENT_NAME']} Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>${report.report_name}<br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>${data['user']}<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: report.report_name + '-' + moment().format('MM-DD-YYYY-hh-mm-A') + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: buffer\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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}\n\t\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error writing excel export', err)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn 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\tcatch (err) {\n\t\t\t\t\t\t\t\tthrow err;\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\tcatch(err) {\n\t\t\t\t\t\terr.message = `Error in Report Builder Cron Job - Report Builder Build Tree: ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction getTreeLeaves(items, resArray, allowLookups = false) {\n\titems.forEach(item => {\n\t\tif (item.isLeaf) {\n\t\t\tresArray.push(item);\n\t\t}\n\t\telse {\n\t\t\tif (!item.lookup_collection || allowLookups) {\n\t\t\t\tgetTreeLeaves(item.children, resArray, allowLookups);\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction modifyDataTypeField(report, result, field, index) {\n\tconst processFieldValue = (value, field) => {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (field.fieldType === 'Boolean') {\n\t\t\tif (!field.leafFormatType || field.leafFormatType === 'Boolean') {\n\t\t\t\treturn value === true ? 'True' : 'False';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'String') {\n\t\t\t\treturn value === true ? 'Yes' : 'No';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Boolean_Number') {\n\t\t\t\treturn value === true ? 1 : 0;\n\t\t\t}\n\t\t}\n\t\telse if (field.fieldType === 'Number' || field.leafValueType === 'Count') {\n\t\t\tif (field.leafFormatType === 'Number') {\n\t\t\t\treturn value.toLocaleString();\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'String') {\n\t\t\t\treturn value.toString();\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Currency') {\n\t\t\t\treturn round(value, 2).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\n\t\t\t}\n\t\t}\n\t\telse if (field.fieldType === 'Date') {\n\t\t\tswitch (field.leafFormatType) {\n\t\t\t\tcase 'Date':\n\t\t\t\t\treturn moment(value).format('L');\n\t\t\t\tcase 'Time':\n\t\t\t\t\treturn moment(value).format('LT');\n\t\t\t\tcase 'DateTime':\n\t\t\t\t\treturn moment(value).format('MM/DD/YYYY h:mm A');\n\t\t\t\tcase 'Date_long':\n\t\t\t\t\treturn moment(value).format('LL');\n\t\t\t\tcase 'DateTime_long':\n\t\t\t\t\treturn moment(value).format('LLL');\n\t\t\t\tcase 'Timestamp':\n\t\t\t\t\treturn moment(value).toDate().getTime();\n\t\t\t\tdefault:\n\t\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t};\n\n\tconst processArrayField = (array, field) => {\n\t\treturn array.map(value => processFieldValue(value, field));\n\t};\n\n\tif (index < report.groups_row.length) {\n\t\t// Handle grouped data\n\t\tconst groupKey = 'gr_' + (index + 1);\n\t\tif (result[groupKey]) {\n\t\t\tresult[groupKey].forEach(subResult => {\n\t\t\t\tmodifyDataTypeField(report, subResult, field, index + 1);\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\t// Process final-level fields\n\t\tif (Array.isArray(result[field.id])) {\n\t\t\tresult[field.id] = processArrayField(result[field.id], field);\n\t\t}\n\t\telse {\n\t\t\tresult[field.id] = processFieldValue(result[field.id], field);\n\t\t}\n\t}\n}\n\nfunction tabGroupExcelRecursive(report, ws: Excel.Worksheet, currentRow, level, result) {\n\tlet row = ws.getRow(currentRow);\n\n\tif (level < report.groups_row.length) {\n\t\trow.getCell(2).fill = {\n\t\t\tfgColor: {argb: report.groups_row[level - 1].fill_color ? report.groups_row[level - 1].fill_color.replace('#', '') : 'ffffff'},\n\t\t\ttype: 'pattern',\n\t\t\tpattern: 'solid'\n\t\t};\n\t\trow.getCell(2).font = {\n\t\t\tcolor: {argb: report.groups_row[level - 1].font_color ? report.groups_row[level - 1].font_color.replace('#', '') : '000000'},\n\t\t\tname: 'Arial',\n\t\t\tbold: true,\n\t\t\tsize: 14\n\t\t};\n\n\t\trow.getCell(2).value = report.groups_row[level - 1].columnName + ': ' + result._id['gr_' + level];\n\t\tws.mergeCells(row.getCell(2).$col$row + ':' + row.getCell(report.fields_selected.filter(a => a.show).length + 1).$col$row);\n\t\t\n\t\trow.getCell(2).border = {\n\t\t\ttop: {style:'thick'},\n\t\t\tleft: {style:'thick'},\n\t\t\tright: {style: 'thick'}\n\t\t};\n\n\t\tif (report.fields_total.length) {\n\t\t\treport.fields_total.forEach(total => {\n\t\t\t\tcurrentRow += 1;\n\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).value = field.columnName;\n\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\tsize: 10\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\t// Totals\n\t\treport.fields_total.forEach(total => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[total.id + '_' + field.id];\n\n\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\tsize: 10\n\t\t\t\t\t};\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tleft: {style:'thick'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'},\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\tcurrentRow += 1;\n\n\t\tresult = result['gr_' + (level + 1)];\n\t\tresult.forEach(tDataRes => {\n\t\t\tcurrentRow = tabGroupExcelRecursive(report, ws, currentRow, level + 1, tDataRes);\n\t\t});\n\t}\n\telse {\n\t\trow.getCell(2).fill = {\n\t\t\tfgColor: {argb: report.groups_row[level - 1].fill_color ? report.groups_row[level - 1].fill_color.replace('#', '') : 'ffffff'},\n\t\t\ttype: 'pattern',\n\t\t\tpattern: 'solid'\n\t\t};\n\t\trow.getCell(2).font = {\n\t\t\tcolor: {argb: report.groups_row[level - 1].font_color ? report.groups_row[level - 1].font_color.replace('#', '') : '000000'},\n\t\t\tname: 'Arial',\n\t\t\tbold: true,\n\t\t\tsize: 12\n\t\t};\n\n\t\trow.getCell(2).value = report.groups_row[level - 1].columnName + ': ' + result._id['gr_' + level];\n\t\tws.mergeCells(row.getCell(2).$col$row + ':' + row.getCell(report.fields_selected.filter(a => a.show).length + 1).$col$row);\n\n\t\trow.getCell(2).border = {\n\t\t\ttop: {style:'thick'},\n\t\t\tleft: {style:'thick'},\n\t\t\tright: {style: 'thick'}\n\t\t};\n\n\t\tcurrentRow += 1;\n\t\trow = ws.getRow(currentRow);\n\t\t// Headers\n\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\trow.getCell(fieldIndex + 2).value = field.columnName;\n\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\tname: 'Arial',\n\t\t\t\tbold: true,\n\t\t\t\tsize: 10\n\t\t\t};\n\n\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t}\n\n\t\t\tif (fieldIndex === 0) {\n\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\t// Data\n\t\tresult['f_0'].forEach((res, resIndex) => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (field.fieldType === 'Number' && typeof(result[field.id][resIndex]) === 'string' && result[field.id][resIndex]) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = parseFloat(result[field.id][resIndex].replace(new RegExp(/\\,/g), '').replace(new RegExp(/\\$/g), ''));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[field.id][resIndex];\n\t\t\t\t}\n\n\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t}\n\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t}\n\n\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\tname: 'Arial',\n\t\t\t\t\tsize: 10\n\t\t\t\t};\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\t// Totals\n\t\treport.fields_total.forEach(total => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[total.id + '_' + field.id];\n\n\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\tsize: 10\n\t\t\t\t\t};\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tleft: {style:'thick'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'},\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\treturn currentRow + 1;\n}\n\nfunction tabGroupExcelWidthRecursive(report, level, result, cols) {\n\tif (level < report.groups_row.length) {\n\t\tresult = result['gr_' + (level + 1)];\n\t\tresult.forEach(tDataRes => {\n\t\t\tcols = tabGroupExcelWidthRecursive(report, level + 1, tDataRes, cols);\n\t\t});\n\t}\n\telse {\n\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\tif (Array.isArray(result[field.id])) {\n\t\t\t\tresult[field.id].forEach(res => {\n\t\t\t\t\tlet length = 10;\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tlength = res.length + 3;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!cols[fieldIndex]) {\n\t\t\t\t\t\tcols[fieldIndex] = Math.max(10, field.columnName.length);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (length > cols[fieldIndex]) {\n\t\t\t\t\t\tcols[fieldIndex] = length;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet res = result[field.id];\n\n\t\t\t\tif (res) {\n\t\t\t\t\tlength = res.length + 3;\n\t\t\t\t}\n\n\t\t\t\tif (!cols[fieldIndex]) {\n\t\t\t\t\tcols[fieldIndex] = Math.max(10, field.columnName.length);\n\t\t\t\t}\n\n\t\t\t\tif (length > cols[fieldIndex]) {\n\t\t\t\t\tcols[fieldIndex] = length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn cols;\n}"]}
1
+ {"version":3,"sources":["../../src/methods/cron-jobs.ts"],"names":[],"mappings":"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","file":"cron-jobs.js","sourcesContent":["import * as Excel from 'exceljs';\nimport * as moment from 'moment-timezone';\nimport SimpleSchema from 'simpl-schema';\nimport * as XLSX from 'xlsx';\nimport { CronJobs } from '../collections/cron-job.collection';\nimport { Files } from '../collections/file.collection';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { PaginationOptions } from '../models/pagination.model';\nimport { deepCopy, mergeDeep, round, toTitleCase } from '../util/common';\n\nexport function loadCronJobMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tcronEmailMergedDocsCleanUp: {\n\t\t\tfunction: async function() {\n\t\t\t\tlet files = await Files.find({$and: [{type: 'Email Merged Docs'}, {createdAt: {$lte: moment().subtract(1, 'day').toDate()}}]});\n\t\t\t\t\n\t\t\t\tif (files.length) {\n\t\t\t\t\tawait this.callMethod('deleteFiles', files.map(file => file.key));\n\t\t\t\t\tawait Files.deleteMany({_id: {$in: files.map(a => a._id)}});\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tstuckCronJob: {\n\t\t\tfunction: async function() {\n\t\t\t\tlet fiveMin = moment().subtract(5, 'minutes').toDate();\n\t\t\t\tlet cronJobs = await CronJobs.find({running: true, updatedAt: {$lte: fiveMin}});\n\n\t\t\t\tif (cronJobs.length) {\n\t\t\t\t\tawait CronJobs.updateMany({_id: {$in: cronJobs.map(a => a._id)}}, {$set: {running: false}});\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\treportbuilderCronJob: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdata: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(data: Object) {\n\t\t\t\tlet report = await ReportBuilderReports.findById(data['id_report']);\n\n\t\t\t\treport.fields_selected.forEach((field: any) => {\n\t\t\t\t\tlet dotPath = field.fieldPath.replace(/\\.\\$/g, '');\n\t\t\t\t\tlet fieldData = dotPath.split('.');\n\t\t\t\t\tfield.fieldPathObj = null;\n\t\t\t\t\tfor (let i = fieldData.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (!field.fieldPathObj) {\n\t\t\t\t\t\t\tfield.fieldPathObj = {[fieldData[i]]: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfield.fieldPathObj = {[fieldData[i]]: field.fieldPathObj};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ((report.fields_selected && report.fields_selected.length) || (report.groups_row && report.groups_row.length)) {\n\t\t\t\t\tlet fieldsObj = {};\n\n\t\t\t\t\tlet count = 0;\n\n\t\t\t\t\treport.fields_selected.forEach((field: any) => {\n\t\t\t\t\t\tif (field.collection_name === report.collection_root) {\n\t\t\t\t\t\t\tfieldsObj = mergeDeep(fieldsObj, field.fieldPathObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet sortIndex = report.fields_sort.findIndex(a => a.field === field['id']);\n\n\t\t\t\t\t\tif (sortIndex >= 0) {\n\t\t\t\t\t\t\treport.fields_sort[sortIndex].field = ('f_' + count);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfield['id'] = 'f_' + count;\n\n\t\t\t\t\t\tcount += 1;\n\t\t\t\t\t});\n\n\t\t\t\t\tlet sortObj = {};\n\t\t\t\t\tif (report.fields_sort.length) {\n\t\t\t\t\t\treport.fields_sort.forEach(sortField => {\n\t\t\t\t\t\t\tif (sortField.field.startsWith('gr_')) {\n\t\t\t\t\t\t\t\tsortObj['_id.' + sortField.field] = (sortField.order === 'asc' ? 1 : -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\tsortObj[sortField.field] = (sortField.order === 'asc' ? 1 : -1);\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\telse {\n\t\t\t\t\t\tsortObj = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet rootOptions: PaginationOptions = {\n\t\t\t\t\t\tlimit: 0,\n\t\t\t\t\t\tskip: 0,\n\t\t\t\t\t\tfields: fieldsObj,\n\t\t\t\t\t\tsort: sortObj\n\t\t\t\t\t};\n\n\t\t\t\t\tlet filters = [];\n\t\t\t\t\treport.fields_filter.forEach(filterAnd => {\n\t\t\t\t\t\tlet ors = [];\n\t\t\t\t\t\tfilterAnd.ors.filter(a => !a.field.includes('.$.')).forEach(filter => {\n\t\t\t\t\t\t\tif (filter.condition && filter.field && ((filter.value !== null && (!Array.isArray(filter.value) || filter.value.length)) || filter.condition === 'null' || filter.condition === 'nnull')) {\n\t\t\t\t\t\t\t\tif (filter.condition === 'bw') {\n\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'Date' && filter.is_rolling) {\n\t\t\t\t\t\t\t\t\t\tlet startDate = null;\n\t\t\t\t\t\t\t\t\t\tlet endDate = null;\n\n\t\t\t\t\t\t\t\t\t\tif (filter.rolling_interval === 'Q1') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(2).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q2') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(2).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(3).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q3') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(3).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(4).subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Q4') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(4).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Today') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Yesterday') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(1, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Week') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Week') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('isoWeek').subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Month') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Month') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('month').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last 30 Days') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(30, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Quarter') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(moment().quarter()).toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Quarter') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(moment().quarter()).subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('quarter').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Year') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'Last Year') {\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.rolling_interval === 'All') {\n\t\t\t\t\t\t\t\t\t\t\tstartDate = new Date(2017, 0, 1, 0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tendDate.setHours(23);\n\t\t\t\t\t\t\t\t\t\tendDate.setMinutes(59);\n\t\t\t\t\t\t\t\t\t\tendDate.setSeconds(59);\n\t\t\t\t\t\t\t\t\t\tendDate.setMilliseconds(999);\n\n\t\t\t\t\t\t\t\t\t\tors.push({$and: [{[filter.field]: {'$gte': startDate}}, {[filter.field]: {'$lte': endDate}}]});\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\tors.push({$and: [{[filter.field]: {'$gte': filter.value}}, {[filter.field]: {'$lte': filter.highValue}}]});\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 if (filter.condition === 'nnull') {\n\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$exists': true}});\n\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$ne': null}});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'String') {\n\t\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {'$ne': ''}});\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (filter.condition === 'null') {\n\t\t\t\t\t\t\t\t\tors.push({[filter.field]: {'$eq': null}});\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 (Array.isArray(filter.value)) {\n\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'ne') {\n\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\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 (and.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push(and[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\tlet or = [];\n\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\tor.push({[filter.field]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (or.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$or: or});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push(or[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\tors.push({[filter.field]: {['$' + filter.condition]: filter.value}});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (ors.length) {\n\t\t\t\t\t\t\tfilters.push({$or: ors});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet collectionTree = await this.callMethod('reportBuilderBuildTree', report.collection_root);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collectionTree) {\n\t\t\t\t\t\t\tcollectionTree.layers = [collectionTree];\n\t\t\t\n\t\t\t\t\t\t\tlet treeLeaves = [];\n\t\t\t\t\t\t\tlet allLeaves = [];\n\t\t\t\t\t\t\tgetTreeLeaves(collectionTree.children, treeLeaves);\n\t\t\t\t\t\t\tgetTreeLeaves(collectionTree.children, allLeaves, true);\n\n\t\t\t\t\t\t\tlet filterArrayFields = [];\n\t\t\t\t\t\t\tlet filterArrays = [];\n\t\t\t\t\t\t\treport.fields_filter.forEach(filterAnd => {\n\t\t\t\t\t\t\t\tlet ors = [];\n\t\t\t\t\t\t\t\tfilterAnd.ors.filter(a => a.field.includes('.$.')).forEach(filter => {\n\t\t\t\t\t\t\t\t\tlet filterLeaf = allLeaves.find(a => a.fieldPath === filter.field);\n\t\t\t\t\t\t\t\t\tif (filterLeaf) {\n\t\t\t\t\t\t\t\t\t\tfilterArrayFields.push(filterLeaf);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (filter.condition && filter.field && ((filter.value !== null && (!Array.isArray(filter.value) || filter.value.length)) || filter.condition === 'null' || filter.condition === 'nnull')) {\n\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'bw') {\n\t\t\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'Date' && filter.is_rolling) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet startDate = null;\n\t\t\t\t\t\t\t\t\t\t\t\tlet endDate = null;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (filter.rolling_interval === 'Q1') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(2).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q2') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(2).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(3).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q3') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(3).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(4).subtract(1, 'days').toDate();\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\telse if (filter.rolling_interval === 'Q4') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(4).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('year').toDate();\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\telse if (filter.rolling_interval === 'Today') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Yesterday') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(1, 'days').startOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().subtract(1, 'days').endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Week') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('isoWeek').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Week') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('isoWeek').subtract(1, 'days').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('isoWeek').toDate();\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\telse if (filter.rolling_interval === 'Month') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('month').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Month') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('month').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('month').toDate();\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\telse if (filter.rolling_interval === 'Last 30 Days') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().subtract(30, 'days').startOf('day').toDate();\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\telse if (filter.rolling_interval === 'Quarter') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').quarter(moment().quarter()).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Quarter') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').quarter(moment().quarter()).subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('quarter').toDate();\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\telse if (filter.rolling_interval === 'Year') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment().startOf('year').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\telse if (filter.rolling_interval === 'Last Year') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().startOf('year').subtract(1, 'days').endOf('day').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = moment(endDate).startOf('year').toDate();\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\telse if (filter.rolling_interval === 'All') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate = new Date(2017, 0, 1, 0, 0, 0, 0);\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate = moment().endOf('day').toDate();\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\tendDate.setHours(23);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setMinutes(59);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setSeconds(59);\n\t\t\t\t\t\t\t\t\t\t\t\tendDate.setMilliseconds(999);\n\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: [{[filter.field.replace(/\\.\\$/g, '')]: {'$gte': startDate}}, {[filter.field.replace(/\\.\\$/g, '')]: {'$lte': endDate}}]});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tfilterArrays.push({$and: [{[filter.field.replace(/\\.\\$/g, '')]: {'$gte': filter.value}}, {[filter.field.replace(/\\.\\$/g, '')]: {'$lte': filter.highValue}}]});\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\telse if (filter.condition === 'nnull') {\n\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$exists': true}});\n\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$ne': null}});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (filter.fieldType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {'$ne': ''}});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (filter.condition === 'null') {\n\t\t\t\t\t\t\t\t\t\t\tors.push({[filter.field.replace(/\\.\\$/g, '')]: {'$eq': null}});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(filter.value)) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (filter.condition === 'ne') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet and = [];\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tand.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (and.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push({$and: and});\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push(and[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet or = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.value.forEach(filt => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tor.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: (Array.isArray(filt) ? filt[0] : filt)}});\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (or.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push({$or: or});\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tors.push(or[0]);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tors.push({[filter.field.replace(/\\.\\$/g, '')]: {['$' + filter.condition]: filter.value}});\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\n\t\t\t\t\t\t\t\tif (ors.length) {\n\t\t\t\t\t\t\t\t\tfilterArrays.push({$or: ors});\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\ttry {\n\t\t\t\t\t\t\t\tlet res = await this.callMethod('reportBuilderGetResults', report.type, report.collection_root, rootOptions, filters, filterArrays, filterArrayFields, report.fields_selected, report.fields_custom, report.groups_row, report.fields_total, report.fields_link, report.id_date_field || null, report.date_interval || null, report.group_type);\n\t\t\t\t\t\t\t\tif (res && res[0]) {\n\t\t\t\t\t\t\t\t\tlet results = res[0].results;\n\t\t\t\t\t\t\t\t\tlet reportTotals = res[0].totals;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (report.type === 'List') {\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\tif ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'Number') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined ).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id].toLocaleString();\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\telse if ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id].toLocaleString('en-US', { style: 'currency', currency: 'USD' });\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\telse if ((field.fieldType === 'Number' || field.leafValueType === 'Count') && field.leafFormatType === 'Currency') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = round(result[field.id], 2).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\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\telse if (field.fieldType === 'Boolean' && (!field.leafFormatType || field.leafFormatType === 'Boolean')) {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 'True' : 'False';\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\telse if (field.fieldType === 'Boolean' && field.leafFormatType === 'String') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 'Yes' : 'No';\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\telse if (field.fieldType === 'Boolean' && field.leafFormatType === 'Boolean_Number') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = result[field.id] === true ? 1 : 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\telse if (field.fieldType === 'Date' && (field.leafFormatType === 'Date')) {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('L');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Time') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LT');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'DateTime') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('MM/DD/YYYY h:mm A');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Date_long') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LL');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'DateTime_long') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).format('LLL');\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\telse if (field.fieldType === 'Date' && field.leafFormatType === 'Timestamp') {\n\t\t\t\t\t\t\t\t\t\t\t\tresults.filter(a => a[field.id] !== null && a[field.id] !== undefined).forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult[field.id] = moment(result[field.id]).toDate().getTime();\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\tlet lines: any = [];\n\n\t\t\t\t\t\t\t\t\t\tlet tmpHeaders = {};\n\n\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\ttmpHeaders[group.id] = group.columnName;\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(header => {\n\t\t\t\t\t\t\t\t\t\t\ttmpHeaders[header.columnName] = header.columnName;\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlet wb = XLSX.utils.book_new();\n\n\t\t\t\t\t\t\t\t\t\tresults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmp = {};\n\t\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(result._id[group.id])) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id].join(',');\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (group.treeItem.fieldType === 'Number') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id] ? (typeof(result._id[group.id]) === 'string' ? parseFloat(result._id[group.id].replace(/,/g, '').replace(/\\$/g, '')) : result._id[group.id]) : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[group.columnName] = result._id[group.id] || '';\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\treport.fields_selected.filter(a => a.show).forEach(header => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(result[header.id])) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id].join(',');\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (header.fieldType === 'Number' || header.leafValueType === 'Count') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id] ? (typeof(result[header.id]) === 'string' ? parseFloat(result[header.id].replace(/,/g, '').replace(/\\$/g, '')) : result[header.id]) : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmp[header.columnName] = result[header.id] || '';\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\n\t\t\t\t\t\t\t\t\t\t\tlines.push(tmp);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlet ws = XLSX.utils.json_to_sheet(lines);\n\t\t\t\t\t\t\t\t\t\tXLSX.utils.book_append_sheet(wb, ws, 'RB Data');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlet wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'base64'});\n\n\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(email,\n\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t<b>` + this.serverConfig['CLIENT_NAME'] + ` Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>` + report.report_name + `<br>\n\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>` + data['user'] + `<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: report.report_name + '-' + moment().format('MM-DD-YYYY-hh-mm-A') + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: wbout,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tencoding: 'base64'\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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\telse if (report.type === 'Group') {\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\tresults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\t\tmodifyDataTypeField(report, result, field, 1);\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\tlet wb = new Excel.Workbook();\n\t\t\t\t\t\t\t\t\t\tlet ws = wb.addWorksheet('RB_1', {views: [{showGridLines: false}]});\n\t\t\t\t\t\t\t\t\t\twb.properties.date1904 = false;\n\t\t\t\t\t\t\t\t\t\twb.calcProperties.fullCalcOnLoad = true;\n\n\t\t\t\t\t\t\t\t\t\tlet currentRow = 1;\n\t\t\t\t\t\t\t\t\t\tlet row = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Report Name:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = report.report_name;\n\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Run Date:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = moment().format('LLL');\n\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 2;\n\n\t\t\t\t\t\t\t\t\t\tlet copy = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\tlet widths = [];\n\t\t\t\t\t\t\t\t\t\tcopy.forEach(res => {\n\t\t\t\t\t\t\t\t\t\t\tcurrentRow = tabGroupExcelRecursive(report, ws, currentRow, 1, res);\n\t\t\t\t\t\t\t\t\t\t\ttabGroupExcelWidthRecursive(report, 1, res, widths);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tfor (let i = 1; i < ws.columns.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\tws.columns[i].width = widths[i - 1];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tlet now = new Date();\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet buffer = await wb.xlsx.writeBuffer();\n\t\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(email,\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>` + this.serverConfig['CLIENT_NAME'] + ` Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>` + report.report_name + `<br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>` + data['user'] + `<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tHave a great day!<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: 'Group_Report_' + report.report_name + '_' + now.getFullYear() + '_' + (now.getMonth() + 1) + '_' + now.getDate() + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: buffer\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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}\n\t\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error writing excel export', err)\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\telse if (report.type === 'Dated') {\n\t\t\t\t\t\t\t\t\t\tlet datedUniqueDates = [];\n\t\t\t\t\t\t\t\t\t\tlet datedUniqueGroups = [];\n\t\t\t\t\t\t\t\t\t\tlet datedData = [];\n\t\t\t\t\t\t\t\t\t\tlet reportTotalGroups = [];\n\t\t\t\t\t\t\t\t\t\tlet reportTotalDates = [];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Step 1: Handle quarterly dates if applicable\n\t\t\t\t\t\t\t\t\t\tif (report.date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\t\tresults.forEach(dataPt => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (dataPt._id.month < 4) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 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\telse if (dataPt._id.month < 7) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 2;\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\telse if (dataPt._id.month < 10) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 3;\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdataPt._id.quarter = 4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdelete dataPt._id.month;\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t// Deduplicate quarterly data\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = results.length - 1; i >= 1; i--) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet dataPt = results[i];\n\t\t\t\t\t\t\t\t\t\t\t\tif (results.filter(a => JSON.stringify(a._id) === JSON.stringify(dataPt._id)).length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet tmpData = results.find(a => JSON.stringify(a._id) === JSON.stringify(dataPt._id));\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(tmpData)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(a => a !== '_id')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData[key] += dataPt[key];\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\n\t\t\t\t\t\t\t\t\t\t\t\t\tresults.splice(i, 1); // Remove the duplicate entry\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\t// Step 2: Prepare unique groups\n\t\t\t\t\t\t\t\t\t\tlet tmpResults = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\ttmpResults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.day;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.week;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.month;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.quarter;\n\t\t\t\t\t\t\t\t\t\t\tdelete result._id.year;\n\n\t\t\t\t\t\t\t\t\t\t\tlet tmpGroup = {};\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\ttmpGroup[key] = result._id[key];\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 (!datedUniqueGroups.find(a => JSON.stringify(a) === JSON.stringify(tmpGroup))) {\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.push(tmpGroup);\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\t// Step 3: Prepare unique dates\n\t\t\t\t\t\t\t\t\t\ttmpResults = deepCopy(results);\n\t\t\t\t\t\t\t\t\t\ttmpResults.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id)\n\t\t\t\t\t\t\t\t\t\t\t\t.filter(a => a !== 'second' && a !== 'hour' && a !== 'minute' && a !== 'day' && a !== 'week' && a !== 'month' && a !== 'quarter' && a !== 'year')\n\t\t\t\t\t\t\t\t\t\t\t\t.forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdelete result._id[key];\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tlet tmpDate = {};\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\ttmpDate[key] = result._id[key];\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 (!datedUniqueDates.find(a => JSON.stringify(a) === JSON.stringify(tmpDate))) {\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.push(tmpDate);\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\t// Build the date strings\n\t\t\t\t\t\t\t\t\t\t// Ensure moment is using America/Chicago timezone for all date processing\n\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(result => {\n\t\t\t\t\t\t\t\t\t\t\tif (!result.year) {\n\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'No Date';\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tif (report.date_interval === 'Seconds') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1, // Use `month - 1` since months are zero-indexed in moment as well\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminute: result.minute,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecond: result.second\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH:mm:ss');\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\telse if (report.date_interval === 'Minutes') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminute: result.minute\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH:mm');\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\telse if (report.date_interval === 'Hours') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thour: result.hour\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY HH');\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\telse if (report.date_interval === 'Daily') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tday: result.day\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM DD YYYY');\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\telse if (report.date_interval === 'Weekly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tweek: result.week\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).day('Monday').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateLast = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tweek: result.week\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).day('Sunday').toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'Week #' + result.week + ' ' + result.year + ' (' + moment(result.date).format('MM/DD/YY') + ' - ' + moment(result.dateLast).format('MM/DD/YY') + ')';\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\telse if (report.date_interval === 'Monthly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmonth: result.month - 1, // Months are zero-indexed in moment\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = moment(result.date).format('MMM YYYY');\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\telse if (report.date_interval === 'Quarterly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).quarter(result.quarter).toDate();;\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = 'Q' + result.quarter + ' ' + result.year;\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\telse if (report.date_interval === 'Yearly') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.date = moment.tz({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tyear: result.year\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, (process.env.TZ_CLIENT || 'America/Chicago')).toDate();\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult.dateString = result.year.toString();\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\t\tdatedUniqueDates = datedUniqueDates.filter(a => !a.date)\n\t\t\t\t\t\t\t\t\t\t\t.concat(datedUniqueDates.filter(a => a.date).sort((a, b) => a.date.getTime() - b.date.getTime()));\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Step 4: Build datedData and reportTotalGroups\n\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(date => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmpData = [];\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalDated = {};\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalCnt = {};\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalType = {};\n\n\t\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet result = results.find(a => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet match = true;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Match the group fields\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(group).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== group[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Match the date fields\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(date).filter(key => key !== 'date' && key !== 'dateLast' && key !== 'dateString').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== date[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn match;\n\t\t\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\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData.push(result);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(result._id).filter(a => a).forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (report.fields_total.filter(a => a.fields.includes(key)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalDated[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] = result._id[key];\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] += result._id[key];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalCnt[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] = 1;\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalType[key] = report.fields_total.find(a => a.fields.includes(key)).type;\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\n\t\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(result).filter(a => a && a !== '_id').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (report.fields_total.filter(a => a.fields.includes(key)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalDated[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] = result[key];\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[key] += result[key];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!tmpTotalCnt[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] = 1;\n\t\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\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalCnt[key] += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalType[key] = report.fields_total.find(a => a.fields.includes(key)).type;\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpData.push(null);\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\t// Handle averaging for totals\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(tmpTotalType).forEach(totalKey => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (tmpTotalType[totalKey] === 'avg') {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[totalKey] = tmpTotalDated[totalKey] / tmpTotalCnt[totalKey];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalDated[totalKey] = round(tmpTotalDated[totalKey], 2);\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\treportTotalDates.push(tmpTotalDated);\n\t\t\t\t\t\t\t\t\t\t\tdatedData.push(tmpData);\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\t// Calculate group-level totals\n\t\t\t\t\t\t\t\t\t\tdatedUniqueGroups.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\tlet tmpTotalGroup = {};\n\t\t\t\t\t\t\t\t\t\t\tlet filteredData = results.filter(a => {\n\t\t\t\t\t\t\t\t\t\t\t\tlet match = (!Object.keys(group).length || group._id === null) ? false : true;\n\t\t\t\t\t\t\t\t\t\t\t\tObject.keys(group).filter(a => a !== 'date' && a !== 'dateLast' && a !== 'dateString' && a !== 'second' && a !== 'minute' && a !== 'hour' && a !== 'day' && a !== 'week' && a !== 'month' && a !== 'quarter' && a !== 'year').forEach(key => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (a._id[key] !== group[key]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmatch = false;\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\treturn match;\n\t\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\t\treport.fields_total.forEach(total => {\n\t\t\t\t\t\t\t\t\t\t\t\ttotal.fields.forEach(field => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (filteredData.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = filteredData.filter(a => a && a[field])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(a => a[field])\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (total.type === 'avg') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = round(tmpTotalGroup[field] / filteredData.length, 2);\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttmpTotalGroup[field] = 0;\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\treportTotalGroups.push(tmpTotalGroup);\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\t// Step 5: Proceed with Excel generation using datedData and reportTotalGroups\n\t\t\t\t\t\t\t\t\t\tlet wb = new Excel.Workbook();\n\t\t\t\t\t\t\t\t\t\tlet ws = wb.addWorksheet('Dated_Report', {views: [{showGridLines: true}]});\n\t\t\t\t\t\t\t\t\t\twb.properties.date1904 = false;\n\t\t\t\t\t\t\t\t\t\twb.calcProperties.fullCalcOnLoad = true;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tlet currentRow = 1;\n\t\t\t\t\t\t\t\t\t\tlet currentCol = 1;\n\t\t\t\t\t\t\t\t\t\tlet row = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Report Name:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = report.report_name;\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).font = {\n\t\t\t\t\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\trow.getCell(2).value = 'Run Date:';\n\t\t\t\t\t\t\t\t\t\trow.getCell(4).value = moment().format('LLL');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 2;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Add group column headers\n\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(group => {\n\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = group.columnName;\n\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\t// Add field headers\n\t\t\t\t\t\t\t\t\t\tcurrentCol += report.fields_selected.filter(a => a.show).length;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Add the date interval headers\n\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(date => {\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = date.dateString;\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\t\t// Add totals headers\n\t\t\t\t\t\t\t\t\t\treport.fields_total.forEach(total => {\n\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = 'Totals - ' + toTitleCase(total.type);\n\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\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\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\tcurrentRow += 1;\n\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Populate data for each group and field with date intervals\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < datedUniqueGroups.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\tlet group = datedUniqueGroups[i];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (let j = 0; j < report.fields_selected.filter(a => a.show).length; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet field = report.fields_selected.filter(a => a.show)[j];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Populate group data\n\t\t\t\t\t\t\t\t\t\t\t\treport.groups_row.forEach(groupRow => {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = (j === 0) ? group[groupRow.id] : '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\t// Populate field data\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = field.columnName;\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Populate date interval data for each field\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let k = 0; k < datedUniqueDates.length; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet result = datedData[k];\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (result[i]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = result[i][field.id] ? result[i][field.id] : '';\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\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = '';\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\tcurrentCol++;\n\t\t\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\t\t\t// Add totals for each field in the report\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let k = 0; k < report.fields_total.length; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = reportTotalGroups[i][field.id] ? reportTotalGroups[i][field.id] : '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\tcurrentRow++; // Move to the next row for the next field\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\t\t// Add report totals at the bottom\n\t\t\t\t\t\t\t\t\t\tif (reportTotals) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < report.fields_total.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\tlet total = report.fields_total[i];\n\t\t\t\t\t\t\t\t\t\t\t\trow = ws.getRow(currentRow);\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol = 1;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = toTitleCase(total.type) + ' Totals';\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol += report.groups_row.length; // Skip group columns\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Skip the date columns for the totals row\n\t\t\t\t\t\t\t\t\t\t\t\treport.fields_selected.filter(a => a.show).forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol += 1;\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\tdatedUniqueDates.forEach(() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\t// Set totals in the correct fields\n\t\t\t\t\t\t\t\t\t\t\t\tfor (let j = 0; j < report.fields_selected.filter(a => a.show).length; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet field = report.fields_selected.filter(a => a.show)[j];\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.getCell(currentCol).value = reportTotals[total.id + '_' + field.id] || '';\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentCol++;\n\t\t\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\t\t\tcurrentRow++; // Move to the next row for the next total\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\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// Save the Excel file and send it via email\n\t\t\t\t\t\t\t\t\t\t\tlet buffer = await wb.xlsx.writeBuffer();\n\t\t\t\t\t\t\t\t\t\t\tfor (let email of data['emails']) {\n\t\t\t\t\t\t\t\t\t\t\t\tawait this.sendEmail(\n\t\t\t\t\t\t\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.serverConfig['CLIENT_NAME'] + ' Scheduled Report - ' + report.report_name,\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\t`\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>${this.serverConfig['CLIENT_NAME']} Automated Report</b><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Report Name: </b>${report.report_name}<br>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<b>Prepared By: </b>${data['user']}<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tAttached are the results of this automated report.<br><br>\n\t\t\t\t\t\t\t\t\t\t\t\t\tResolveIO<br><br>`,\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\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: report.report_name + '-' + moment().format('MM-DD-YYYY-hh-mm-A') + '.xlsx',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: buffer\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\tthis.serverConfig['MAIL_FROM_REPORTS'],\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}\n\t\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error writing excel export', err)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn 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\tcatch (err) {\n\t\t\t\t\t\t\t\tthrow err;\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\tcatch(err) {\n\t\t\t\t\t\terr.message = `Error in Report Builder Cron Job - Report Builder Build Tree: ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction getTreeLeaves(items, resArray, allowLookups = false) {\n\titems.forEach(item => {\n\t\tif (item.isLeaf) {\n\t\t\tresArray.push(item);\n\t\t}\n\t\telse {\n\t\t\tif (!item.lookup_collection || allowLookups) {\n\t\t\t\tgetTreeLeaves(item.children, resArray, allowLookups);\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction modifyDataTypeField(report, result, field, index) {\n\tconst processFieldValue = (value, field) => {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (field.fieldType === 'Boolean') {\n\t\t\tif (!field.leafFormatType || field.leafFormatType === 'Boolean') {\n\t\t\t\treturn value === true ? 'True' : 'False';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'String') {\n\t\t\t\treturn value === true ? 'Yes' : 'No';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Boolean_Number') {\n\t\t\t\treturn value === true ? 1 : 0;\n\t\t\t}\n\t\t}\n\t\telse if (field.fieldType === 'Number' || field.leafValueType === 'Count') {\n\t\t\tif (field.leafFormatType === 'Number') {\n\t\t\t\treturn value.toLocaleString();\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'String') {\n\t\t\t\treturn value.toString();\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Currency') {\n\t\t\t\treturn round(value, 2).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\n\t\t\t}\n\t\t}\n\t\telse if (field.fieldType === 'Date') {\n\t\t\tswitch (field.leafFormatType) {\n\t\t\t\tcase 'Date':\n\t\t\t\t\treturn moment(value).format('L');\n\t\t\t\tcase 'Time':\n\t\t\t\t\treturn moment(value).format('LT');\n\t\t\t\tcase 'DateTime':\n\t\t\t\t\treturn moment(value).format('MM/DD/YYYY h:mm A');\n\t\t\t\tcase 'Date_long':\n\t\t\t\t\treturn moment(value).format('LL');\n\t\t\t\tcase 'DateTime_long':\n\t\t\t\t\treturn moment(value).format('LLL');\n\t\t\t\tcase 'Timestamp':\n\t\t\t\t\treturn moment(value).toDate().getTime();\n\t\t\t\tdefault:\n\t\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t};\n\n\tconst processArrayField = (array, field) => {\n\t\treturn array.map(value => processFieldValue(value, field));\n\t};\n\n\tif (index < report.groups_row.length) {\n\t\t// Handle grouped data\n\t\tconst groupKey = 'gr_' + (index + 1);\n\t\tif (result[groupKey]) {\n\t\t\tresult[groupKey].forEach(subResult => {\n\t\t\t\tmodifyDataTypeField(report, subResult, field, index + 1);\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\t// Process final-level fields\n\t\tif (Array.isArray(result[field.id])) {\n\t\t\tresult[field.id] = processArrayField(result[field.id], field);\n\t\t}\n\t\telse {\n\t\t\tresult[field.id] = processFieldValue(result[field.id], field);\n\t\t}\n\t}\n}\n\nfunction tabGroupExcelRecursive(report, ws: Excel.Worksheet, currentRow, level, result) {\n\tlet row = ws.getRow(currentRow);\n\n\tif (level < report.groups_row.length) {\n\t\trow.getCell(2).fill = {\n\t\t\tfgColor: {argb: report.groups_row[level - 1].fill_color ? report.groups_row[level - 1].fill_color.replace('#', '') : 'ffffff'},\n\t\t\ttype: 'pattern',\n\t\t\tpattern: 'solid'\n\t\t};\n\t\trow.getCell(2).font = {\n\t\t\tcolor: {argb: report.groups_row[level - 1].font_color ? report.groups_row[level - 1].font_color.replace('#', '') : '000000'},\n\t\t\tname: 'Arial',\n\t\t\tbold: true,\n\t\t\tsize: 14\n\t\t};\n\n\t\trow.getCell(2).value = report.groups_row[level - 1].columnName + ': ' + result._id['gr_' + level];\n\t\tws.mergeCells(row.getCell(2).$col$row + ':' + row.getCell(report.fields_selected.filter(a => a.show).length + 1).$col$row);\n\t\t\n\t\trow.getCell(2).border = {\n\t\t\ttop: {style:'thick'},\n\t\t\tleft: {style:'thick'},\n\t\t\tright: {style: 'thick'}\n\t\t};\n\n\t\tif (report.fields_total.length) {\n\t\t\treport.fields_total.forEach(total => {\n\t\t\t\tcurrentRow += 1;\n\t\t\t\trow = ws.getRow(currentRow);\n\n\t\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).value = field.columnName;\n\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\t\tsize: 10\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\t// Totals\n\t\treport.fields_total.forEach(total => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[total.id + '_' + field.id];\n\n\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\tsize: 10\n\t\t\t\t\t};\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tleft: {style:'thick'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'},\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\tcurrentRow += 1;\n\n\t\tresult = result['gr_' + (level + 1)];\n\t\tresult.forEach(tDataRes => {\n\t\t\tcurrentRow = tabGroupExcelRecursive(report, ws, currentRow, level + 1, tDataRes);\n\t\t});\n\t}\n\telse {\n\t\trow.getCell(2).fill = {\n\t\t\tfgColor: {argb: report.groups_row[level - 1].fill_color ? report.groups_row[level - 1].fill_color.replace('#', '') : 'ffffff'},\n\t\t\ttype: 'pattern',\n\t\t\tpattern: 'solid'\n\t\t};\n\t\trow.getCell(2).font = {\n\t\t\tcolor: {argb: report.groups_row[level - 1].font_color ? report.groups_row[level - 1].font_color.replace('#', '') : '000000'},\n\t\t\tname: 'Arial',\n\t\t\tbold: true,\n\t\t\tsize: 12\n\t\t};\n\n\t\trow.getCell(2).value = report.groups_row[level - 1].columnName + ': ' + result._id['gr_' + level];\n\t\tws.mergeCells(row.getCell(2).$col$row + ':' + row.getCell(report.fields_selected.filter(a => a.show).length + 1).$col$row);\n\n\t\trow.getCell(2).border = {\n\t\t\ttop: {style:'thick'},\n\t\t\tleft: {style:'thick'},\n\t\t\tright: {style: 'thick'}\n\t\t};\n\n\t\tcurrentRow += 1;\n\t\trow = ws.getRow(currentRow);\n\t\t// Headers\n\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\trow.getCell(fieldIndex + 2).value = field.columnName;\n\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\tname: 'Arial',\n\t\t\t\tbold: true,\n\t\t\t\tsize: 10\n\t\t\t};\n\n\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t}\n\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t}\n\n\t\t\tif (fieldIndex === 0) {\n\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\t// Data\n\t\tresult['f_0'].forEach((res, resIndex) => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (field.fieldType === 'Number' && typeof(result[field.id][resIndex]) === 'string' && result[field.id][resIndex]) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = parseFloat(result[field.id][resIndex].replace(new RegExp(/\\,/g), '').replace(new RegExp(/\\$/g), ''));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[field.id][resIndex];\n\t\t\t\t}\n\n\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t}\n\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t}\n\n\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\tname: 'Arial',\n\t\t\t\t\tsize: 10\n\t\t\t\t};\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\tleft: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t\n\t\t// Totals\n\t\treport.fields_total.forEach(total => {\n\t\t\tcurrentRow += 1;\n\t\t\trow = ws.getRow(currentRow);\n\n\t\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\t\tif (total.fields.includes(field.id)) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).value = result[total.id + '_' + field.id];\n\n\t\t\t\t\trow.getCell(fieldIndex + 2).font = {\n\t\t\t\t\t\tname: 'Arial',\n\t\t\t\t\t\tbold: true,\n\t\t\t\t\t\tsize: 10\n\t\t\t\t\t};\n\n\t\t\t\t\tif (field.leafFormatType === 'Currency') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '\"$\"#,##0.00';\n\t\t\t\t\t}\n\t\t\t\t\telse if (field.leafFormatType === 'Number') {\n\t\t\t\t\t\trow.getCell(fieldIndex + 2).numFmt = '#,##0';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (fieldIndex === 0) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tleft: {style:'thick'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (fieldIndex === report.fields_selected.filter(a => a.show).length - 1) {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'},\n\t\t\t\t\t\tright: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow.getCell(fieldIndex + 2).border = {\n\t\t\t\t\t\ttop: {style:'thin'},\n\t\t\t\t\t\tbottom: {style:'thick'}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\treturn currentRow + 1;\n}\n\nfunction tabGroupExcelWidthRecursive(report, level, result, cols) {\n\tif (level < report.groups_row.length) {\n\t\tresult = result['gr_' + (level + 1)];\n\t\tresult.forEach(tDataRes => {\n\t\t\tcols = tabGroupExcelWidthRecursive(report, level + 1, tDataRes, cols);\n\t\t});\n\t}\n\telse {\n\t\treport.fields_selected.filter(a => a.show).forEach((field, fieldIndex) => {\n\t\t\tif (Array.isArray(result[field.id])) {\n\t\t\t\tresult[field.id].forEach(res => {\n\t\t\t\t\tlet length = 10;\n\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tlength = res.length + 3;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!cols[fieldIndex]) {\n\t\t\t\t\t\tcols[fieldIndex] = Math.max(10, field.columnName.length);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (length > cols[fieldIndex]) {\n\t\t\t\t\t\tcols[fieldIndex] = length;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet res = result[field.id];\n\n\t\t\t\tif (res) {\n\t\t\t\t\tlength = res.length + 3;\n\t\t\t\t}\n\n\t\t\t\tif (!cols[fieldIndex]) {\n\t\t\t\t\tcols[fieldIndex] = Math.max(10, field.columnName.length);\n\t\t\t\t}\n\n\t\t\t\tif (length > cols[fieldIndex]) {\n\t\t\t\t\tcols[fieldIndex] = length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn cols;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.11.11",
3
+ "version": "20.11.13",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",