-'use strict';
-
-var _ = require('lodash');
-var util = require('util');
-var DefaultReport = require('../../models').DefaultReport;
-var sequelize = require('../../models').sequelize;
-var CustomReport = require('../../models').CustomReport;
-var ExtractedReport = require('../../models').ExtractedReport;
-var extractUtils = require('../../utils/report_extraction');
-
-// Get list of default reports
-exports.index = function(req, res, next) {
-
- var attributes = ['name', 'description', 'parent'];
- var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
- var page = req.query.page ? parseInt(req.query.page, 10) : 0;
-
- var query = {
- where: {},
- limit: per_page,
- offset: page * per_page
- };
-
- _.forIn(req.query, function(value, key) {
- switch (key) {
- case 'per_page':
- case 'page':
- break;
- case 'sort_by':
- query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
- break;
- case 'sort_order':
- break;
- case '$':
- query.where.$or = [];
- attributes.forEach(function(attribute) {
- var tmp = {};
- tmp[attribute] = {
- $like: '%' + value + '%'
- };
-
- query.where.$or.push(tmp);
- });
- break;
- case 'role':
- query.where.role = {
- $or: value.split(/[\s,]+/)
- };
- break;
- case 'clientQuery':
- var params = JSON.parse(value);
- _.forOwn(params, function(pValue, pKey) {
- query.where[pKey] = pValue;
- });
- break;
- default:
- query.where[key] = {
- $like: {}
- };
- query.where[key].$like = '%' + value + '%';
- }
- });
-
- DefaultReport
- .findAndCountAll(query)
- .then(function(result) {
- var total_pages = Math.ceil(result.count / per_page);
- var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
- var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
-
- res.status(200).send({
- count: result.count,
- rows: result.rows,
- next_page: next_page,
- previous_page: previous_page,
- total_pages: total_pages
- });
-
- })
- .catch(function(err) {
- res.status(500).send({
- error: 'Something blew up!'
- });
- });
-};
-
-exports.preview = function(req, res) {
- DefaultReport
- .findById(req.params.id, {
- include: [{
- all: true
- }]
- })
- .then(function(report) {
- console.log('found report');
- if (!report) {
- return res.sendStatus(404);
- }
- var query = buildReport(report.dataValues, req.query);
- // console.log(query);
- var queries = [sequelize.query(query, {
- type: sequelize.QueryTypes.SELECT
- })];
- if (req.query.uiPagination) {
- var countQuery = buildReport(report.dataValues, req.query, true);
- queries.push(sequelize.query(countQuery, {
- type: sequelize.QueryTypes.SELECT
- }));
- }
- return queries;
- })
- .all()
- .spread(function(results, totalItems) {
- console.log(results.length);
- console.log(totalItems);
- res.status(200).send({
- rows: results,
- count: totalItems ? totalItems[0] : null
- });
- })
- .catch(function(err) {
- console.log(err);
- return handleError(res, err);
- });
-};
-
-exports.extractPdf = function(req, res) {
- // console.log('extractPdf api function');
- docExtract(req, res, 'PDF')
-};
-
-exports.extractCsv = function(req, res) {
- // console.log('extractCsv api function');
- docExtract(req, res, 'CSV');
-};
-
-function docExtract(req, res, typeFunction) {
- // console.log('common docExtract api function');
- if (!req.body.startDate || !req.body.endDate) {
- return res.status(500).send({
- message: 'MESSAGE_START_OR_END_DATE_MISSING'
- });
- }
- DefaultReport
- .findById(req.params.id, {
- include: [{
- all: true
- }]
- })
- .then(function(report) {
- if (!report) {
- return res.sendStatus(404);
- }
- // console.log('found the report, creating the new DB row for extracted reports..');
- //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING'
- return [report, ExtractedReport.create({
- name: report.name,
- startDate: req.body.startDate,
- endDate: req.body.endDate,
- output: typeFunction
- })]
- })
- .spread(function(report, extractedReport) {
- // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction);
- extractUtils['extract' + typeFunction](report, req.body.startDate, req.body.endDate, extractedReport.id);
- })
- .catch(function(err) {
- console.log(err);
- return handleError(res, err);
- });
- return res.sendStatus(200);
-}
-
-function buildReport(report, query, count) {
- var fields = [],
- groupBy = [],
- orderBy = [];
- _.forEach(report.Fields, function(elem) {
- var field = '';
- if (elem.function) {
- switch (elem.function) {
- case 'COUNT DISTINCT':
- field = util.format('COUNT(DISTINCT %s)', elem.field);
- break;
- case 'GROUP_CONCAT ASC':
- field = util.format('GROUP_CONCAT(%s ORDER BY %s ASC)', elem.field, elem.field);
- break;
- case 'GROUP_CONCAT DESC':
- field = util.format('GROUP_CONCAT(%s ORDER BY %s DESC)', elem.field, elem.field);
- break;
- default:
- field = util.format('%s(%s)', elem.function, elem.field);
- }
- } else {
- field = elem.field;
- }
- fields.push(util.format('%s AS \'%s\'', field, elem.alias));
- if (elem.groupBy) {
- groupBy.push(elem.field);
- }
- if (elem.orderBy) {
- orderBy.push(util.format('%s %s', elem.field, elem.orderBy));
- }
- });
- var conditions = getConditions(JSON.parse(report.conditions).group);
- var resultQuery = 'SELECT';
- // query += fields.length ? ' ' + fields.join(',') : ' *';//right if you want to select all fields also
- resultQuery += ' ' + fields.join(','); //generate a wrong query if there isn' t any field
- if (count) {
- resultQuery += ',COUNT(*)';
- }
- resultQuery += ' FROM ' + report.table;
- resultQuery += conditions !== '()' ? ' WHERE ' + conditions : '';
- var limit = false;
- var offset = false;
- if (query) {
- _.forOwn(query, function(value, key) {
- switch (key) {
- case 'page':
- if (query.perPage) {
- limit = parseInt(query.perPage, 10);
- offset = parseInt(value, 10) * limit;
- }
- break;
- case 'perPage':
- limit = parseInt(value, 10);
- break;
- case 'startDate':
- resultQuery += ' AND createdAt >= \'' + value + '\'';
- break;
- case 'endDate':
- resultQuery += ' AND createdAt <= \'' + value + '\'';
- break;
- case 'uiPagination':
- break;
- default:
- var column = _.find(report.Fields, {
- alias: key
- }).field;
- if (column) {
- resultQuery += ' AND ' + column + ' LIKE \'%' + value + '%\'';
- } else {
- resultQuery += ' AND ' + key + ' LIKE \'%' + value + '%\'';
- }
- }
- });
- }
- resultQuery += groupBy.length ? ' GROUP BY ' + groupBy.join(',') : '';
- resultQuery += orderBy.length ? ' ORDER BY ' + orderBy.join(',') : '';
- resultQuery += limit && !count ? ' LIMIT ' + limit : '';
- resultQuery += offset && !count ? ' OFFSET ' + offset : '';
- return resultQuery;
-}
-
-function getConditions(group) {
- if (!group) return "";
- for (var str = "(", i = 0; i < group.rules.length; i++) {
- i > 0 && (str += " " + group.operator + " ");
- str += group.rules[i].group ?
- getConditions(group.rules[i].group) :
- group.rules[i].field + " " + group.rules[i].condition + " '" + (group.rules[i].condition === 'LIKE' ? "%" + group.rules[i].value + "%" : group.rules[i].value) + "'";
- }
-
- return str + ')';
-}
-
-// Get a single report
-exports.show = function(req, res) {
- DefaultReport
- .findById(req.params.id, {
- include: [{
- all: true
- }]
- })
- .then(function(report) {
- if (!report) {
- return res.sendStatus(404);
- }
- return res.send(report);
- })
- .catch(function(err) {
- return handleError(res, err);
- });
-};
-
-// Copy a default report
-exports.copy = function(req, res) {
- DefaultReport
- .findById(req.params.id, {
- include: [{
- all: true
- }]
- })
- .then(function(report) {
- if (!report) {
- return res.sendStatus(404);
- }
- var newReport = report.dataValues;
- delete newReport.id;
- delete newReport.createdAt;
- delete newReport.updatedAt;
- newReport.parent = req.body.parent;
- newReport.Fields = _.pluck(newReport.Fields, 'dataValues');
- _.forEach(newReport.Fields, function(elem) {
- delete elem.id;
- delete elem.DefaultReportId;
- delete elem.createdAt;
- delete elem.updatedAt;
- });
-
- return CustomReport.create(newReport, {
- include: [{
- all: true
- }]
- })
- })
- .then(function() {
- return res.sendStatus(201);
- })
- .catch(function(err) {
- console.log(err);
- return handleError(res, err);
- });
-};
-
-// Creates a new report in the DB.
-exports.create = function(req, res) {
- DefaultReport
- .create(req.body)
- .then(function(report) {
- return res.status(201).send(report);
- })
- .catch(function(err) {
- return handleError(res, err);
- });
-};
-
-// Updates an existing report in the DB.
-exports.update = function(req, res) {
- if (req.body.id) {
- delete req.body.id;
- }
- DefaultReport
- .findById(req.params.id)
- .then(function(report) {
- if (!report) {
- return res.sendStatus(404);
- }
- var updated = _.merge(report, req.body);
- updated.save()
- .then(function() {
- return res.status(200).send(report);
- })
- .catch(function(err) {
- return handleError(res, err);
- });
- })
- .catch(function(err) {
- return handleError(res, err);
- });
-};
-
-// Deletes a report from the DB.
-exports.destroy = function(req, res) {
- DefaultReport
- .findById(req.params.id)
- .then(function(report) {
- if (!report) {
- return res.sendStatus(404);
- }
- report.destroy()
- .then(function() {
- return res.sendStatus(204);
- })
- .catch(function(err) {
- return handleError(res, err);
- });
- })
- .catch(function(err) {
- return handleError(res, err);
- });
-};
-
-function handleError(res, err) {
- return res.status(500).send(err);
-}
+var _0x96ae=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x6E\x61\x6D\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x61\x72\x65\x6E\x74","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x72\x6F\x6C\x65","\x73\x70\x6C\x69\x74","\x70\x61\x72\x73\x65","\x66\x6F\x72\x4F\x77\x6E","\x63\x6C\x69\x65\x6E\x74\x51\x75\x65\x72\x79","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77","\x6C\x6F\x67","\x6C\x65\x6E\x67\x74\x68","\x73\x70\x72\x65\x61\x64","\x61\x6C\x6C","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x75\x69\x50\x61\x67\x69\x6E\x61\x74\x69\x6F\x6E","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x62\x6F\x64\x79","\x65\x6E\x64\x44\x61\x74\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x53\x54\x41\x52\x54\x5F\x4F\x52\x5F\x45\x4E\x44\x5F\x44\x41\x54\x45\x5F\x4D\x49\x53\x53\x49\x4E\x47","\x65\x78\x74\x72\x61\x63\x74","\x63\x72\x65\x61\x74\x65","","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x25\x73\x29","\x66\x69\x65\x6C\x64","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x41\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x41\x53\x43","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x44\x45\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x44\x45\x53\x43","\x25\x73\x28\x25\x73\x29","\x25\x73\x20\x41\x53\x20\x27\x25\x73\x27","\x61\x6C\x69\x61\x73","\x67\x72\x6F\x75\x70\x42\x79","\x6F\x72\x64\x65\x72\x42\x79","\x67\x72\x6F\x75\x70","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x20","\x2C","\x6A\x6F\x69\x6E","\x2C\x43\x4F\x55\x4E\x54\x28\x2A\x29","\x20\x46\x52\x4F\x4D\x20","\x74\x61\x62\x6C\x65","\x28\x29","\x20\x57\x48\x45\x52\x45\x20","\x70\x65\x72\x50\x61\x67\x65","\x20\x41\x4E\x44\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3E\x3D\x20\x27","\x27","\x20\x41\x4E\x44\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3C\x3D\x20\x27","\x66\x69\x6E\x64","\x20\x41\x4E\x44\x20","\x20\x4C\x49\x4B\x45\x20\x27\x25","\x25\x27","\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20","\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20","\x20\x4C\x49\x4D\x49\x54\x20","\x20\x4F\x46\x46\x53\x45\x54\x20","\x28","\x72\x75\x6C\x65\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x27","\x4C\x49\x4B\x45","\x76\x61\x6C\x75\x65","\x29","\x73\x68\x6F\x77","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x46\x69\x65\x6C\x64\x73","\x70\x6C\x75\x63\x6B","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x96ae[0];var _=require(_0x96ae[1]);var util=require(_0x96ae[2]);var DefaultReport=require(_0x96ae[4])[_0x96ae[3]];var sequelize=require(_0x96ae[4])[_0x96ae[5]];var CustomReport=require(_0x96ae[4])[_0x96ae[6]];var ExtractedReport=require(_0x96ae[4])[_0x96ae[7]];var extractUtils=require(_0x96ae[8]);exports[_0x96ae[9]]=function(_0x86b6x8,_0x86b6x9,_0x86b6xa){var _0x86b6xb=[_0x96ae[10],_0x96ae[11],_0x96ae[12]];var _0x86b6xc=_0x86b6x8[_0x96ae[14]][_0x96ae[13]]?parseInt(_0x86b6x8[_0x96ae[14]][_0x96ae[13]],10):100;var _0x86b6xd=_0x86b6x8[_0x96ae[14]][_0x96ae[15]]?parseInt(_0x86b6x8[_0x96ae[14]][_0x96ae[15]],10):0;var _0x86b6xe={where:{},limit:_0x86b6xc,offset:_0x86b6xd*_0x86b6xc};_[_0x96ae[34]](_0x86b6x8[_0x96ae[14]],function(_0x86b6xf,_0x86b6x10){switch(_0x86b6x10){case _0x96ae[13]:;case _0x96ae[15]:break ;;case _0x96ae[18]:_0x86b6xe[_0x96ae[16]]=util[_0x96ae[21]](_0x96ae[17],_0x86b6x8[_0x96ae[14]][_0x96ae[18]],_0x86b6x8[_0x96ae[14]][_0x96ae[19]]||_0x96ae[20])||null;break ;;case _0x96ae[19]:break ;;case _0x96ae[27]:_0x86b6xe[_0x96ae[23]][_0x96ae[22]]=[];_0x86b6xb[_0x96ae[26]](function(_0x86b6x11){var _0x86b6x12={};_0x86b6x12[_0x86b6x11]={$like:_0x96ae[24]+_0x86b6xf+_0x96ae[24]};_0x86b6xe[_0x96ae[23]][_0x96ae[22]][_0x96ae[25]](_0x86b6x12);});break ;;case _0x96ae[28]:_0x86b6xe[_0x96ae[23]][_0x96ae[28]]={$or:_0x86b6xf[_0x96ae[29]](/[\s,]+/)};break ;;case _0x96ae[32]:var _0x86b6x13=JSON[_0x96ae[30]](_0x86b6xf);_[_0x96ae[31]](_0x86b6x13,function(_0x86b6x14,_0x86b6x15){_0x86b6xe[_0x96ae[23]][_0x86b6x15]=_0x86b6x14});break ;;default:_0x86b6xe[_0x96ae[23]][_0x86b6x10]={$like:{}};_0x86b6xe[_0x96ae[23]][_0x86b6x10][_0x96ae[33]]=_0x96ae[24]+_0x86b6xf+_0x96ae[24];;}});DefaultReport[_0x96ae[49]](_0x86b6xe)[_0x96ae[48]](function(_0x86b6x17){var _0x86b6x18=Math[_0x96ae[40]](_0x86b6x17[_0x96ae[39]]/_0x86b6xc);var _0x86b6x19=_0x86b6x18>(_0x86b6xe[_0x96ae[41]]+1)?util[_0x96ae[21]](_0x96ae[42],_0x86b6x8[_0x96ae[43]],_0x86b6x8[_0x96ae[45]][_0x96ae[44]],_0x86b6x8[_0x96ae[46]],_0x86b6xd+1):null;var _0x86b6x1a=_0x86b6xd>0?util[_0x96ae[21]](_0x96ae[42],_0x86b6x8[_0x96ae[43]],_0x86b6x8[_0x96ae[45]][_0x96ae[44]],_0x86b6x8[_0x96ae[46]],_0x86b6xd-1):null;_0x86b6x9[_0x96ae[37]](200)[_0x96ae[36]]({count:_0x86b6x17[_0x96ae[39]],rows:_0x86b6x17[_0x96ae[47]],next_page:_0x86b6x19,previous_page:_0x86b6x1a,total_pages:_0x86b6x18});})[_0x96ae[38]](function(_0x86b6x16){_0x86b6x9[_0x96ae[37]](500)[_0x96ae[36]]({error:_0x96ae[35]})});};exports[_0x96ae[50]]=function(_0x86b6x8,_0x86b6x9){DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]],{include:[{all:true}]})[_0x96ae[48]](function(_0x86b6x1d){console[_0x96ae[51]](_0x96ae[55]);if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};var _0x86b6xe=buildReport(_0x86b6x1d[_0x96ae[57]],_0x86b6x8[_0x96ae[14]]);var _0x86b6x1e=[sequelize[_0x96ae[14]](_0x86b6xe,{type:sequelize[_0x96ae[59]][_0x96ae[58]]})];if(_0x86b6x8[_0x96ae[14]][_0x96ae[60]]){var _0x86b6x1f=buildReport(_0x86b6x1d[_0x96ae[57]],_0x86b6x8[_0x96ae[14]],true);_0x86b6x1e[_0x96ae[25]](sequelize[_0x96ae[14]](_0x86b6x1f,{type:sequelize[_0x96ae[59]][_0x96ae[58]]}));};return _0x86b6x1e;})[_0x96ae[54]]()[_0x96ae[53]](function(_0x86b6x1b,_0x86b6x1c){console[_0x96ae[51]](_0x86b6x1b[_0x96ae[52]]);console[_0x96ae[51]](_0x86b6x1c);_0x86b6x9[_0x96ae[37]](200)[_0x96ae[36]]({rows:_0x86b6x1b,count:_0x86b6x1c?_0x86b6x1c[0]:null});})[_0x96ae[38]](function(_0x86b6x16){console[_0x96ae[51]](_0x86b6x16);return handleError(_0x86b6x9,_0x86b6x16);})};exports[_0x96ae[64]]=function(_0x86b6x8,_0x86b6x9){docExtract(_0x86b6x8,_0x86b6x9,_0x96ae[65])};exports[_0x96ae[66]]=function(_0x86b6x8,_0x86b6x9){docExtract(_0x86b6x8,_0x86b6x9,_0x96ae[67])};function docExtract(_0x86b6x8,_0x86b6x9,_0x86b6x21){if(!_0x86b6x8[_0x96ae[69]][_0x96ae[68]]||!_0x86b6x8[_0x96ae[69]][_0x96ae[70]]){return _0x86b6x9[_0x96ae[37]](500)[_0x96ae[36]]({message:_0x96ae[71]})};DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]],{include:[{all:true}]})[_0x96ae[48]](function(_0x86b6x1d){if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};return [_0x86b6x1d,ExtractedReport[_0x96ae[73]]({name:_0x86b6x1d[_0x96ae[10]],startDate:_0x86b6x8[_0x96ae[69]][_0x96ae[68]],endDate:_0x86b6x8[_0x96ae[69]][_0x96ae[70]],output:_0x86b6x21})];})[_0x96ae[53]](function(_0x86b6x1d,_0x86b6x22){extractUtils[_0x96ae[72]+_0x86b6x21](_0x86b6x1d,_0x86b6x8[_0x96ae[69]][_0x96ae[68]],_0x86b6x8[_0x96ae[69]][_0x96ae[70]],_0x86b6x22[_0x96ae[61]])})[_0x96ae[38]](function(_0x86b6x16){console[_0x96ae[51]](_0x86b6x16);return handleError(_0x86b6x9,_0x86b6x16);});return _0x86b6x9[_0x96ae[56]](200);}function buildReport(_0x86b6x1d,_0x86b6xe,_0x86b6x24){var _0x86b6x25=[],_0x86b6x26=[],_0x86b6x27=[];_[_0x96ae[26]](_0x86b6x1d.Fields,function(_0x86b6x28){var _0x86b6x29=_0x96ae[74];if(_0x86b6x28[_0x96ae[75]]){switch(_0x86b6x28[_0x96ae[75]]){case _0x96ae[78]:_0x86b6x29=util[_0x96ae[21]](_0x96ae[76],_0x86b6x28[_0x96ae[77]]);break ;;case _0x96ae[80]:_0x86b6x29=util[_0x96ae[21]](_0x96ae[79],_0x86b6x28[_0x96ae[77]],_0x86b6x28[_0x96ae[77]]);break ;;case _0x96ae[82]:_0x86b6x29=util[_0x96ae[21]](_0x96ae[81],_0x86b6x28[_0x96ae[77]],_0x86b6x28[_0x96ae[77]]);break ;;default:_0x86b6x29=util[_0x96ae[21]](_0x96ae[83],_0x86b6x28[_0x96ae[75]],_0x86b6x28[_0x96ae[77]]);;}}else {_0x86b6x29=_0x86b6x28[_0x96ae[77]]};_0x86b6x25[_0x96ae[25]](util[_0x96ae[21]](_0x96ae[84],_0x86b6x29,_0x86b6x28[_0x96ae[85]]));if(_0x86b6x28[_0x96ae[86]]){_0x86b6x26[_0x96ae[25]](_0x86b6x28[_0x96ae[77]])};if(_0x86b6x28[_0x96ae[87]]){_0x86b6x27[_0x96ae[25]](util[_0x96ae[21]](_0x96ae[17],_0x86b6x28[_0x96ae[77]],_0x86b6x28[_0x96ae[87]]))};});var _0x86b6x2a=getConditions(JSON[_0x96ae[30]](_0x86b6x1d[_0x96ae[89]])[_0x96ae[88]]);var _0x86b6x2b=_0x96ae[58];_0x86b6x2b+=_0x96ae[90]+_0x86b6x25[_0x96ae[92]](_0x96ae[91]);if(_0x86b6x24){_0x86b6x2b+=_0x96ae[93]};_0x86b6x2b+=_0x96ae[94]+_0x86b6x1d[_0x96ae[95]];_0x86b6x2b+=_0x86b6x2a!==_0x96ae[96]?_0x96ae[97]+_0x86b6x2a:_0x96ae[74];var _0x86b6x2c=false;var _0x86b6x2d=false;if(_0x86b6xe){_[_0x96ae[31]](_0x86b6xe,function(_0x86b6xf,_0x86b6x10){switch(_0x86b6x10){case _0x96ae[15]:if(_0x86b6xe[_0x96ae[98]]){_0x86b6x2c=parseInt(_0x86b6xe[_0x96ae[98]],10);_0x86b6x2d=parseInt(_0x86b6xf,10)*_0x86b6x2c;};break ;;case _0x96ae[98]:_0x86b6x2c=parseInt(_0x86b6xf,10);break ;;case _0x96ae[68]:_0x86b6x2b+=_0x96ae[99]+_0x86b6xf+_0x96ae[100];break ;;case _0x96ae[70]:_0x86b6x2b+=_0x96ae[101]+_0x86b6xf+_0x96ae[100];break ;;case _0x96ae[60]:break ;;default:var _0x86b6x2e=_[_0x96ae[102]](_0x86b6x1d.Fields,{alias:_0x86b6x10})[_0x96ae[77]];if(_0x86b6x2e){_0x86b6x2b+=_0x96ae[103]+_0x86b6x2e+_0x96ae[104]+_0x86b6xf+_0x96ae[105]}else {_0x86b6x2b+=_0x96ae[103]+_0x86b6x10+_0x96ae[104]+_0x86b6xf+_0x96ae[105]};;}})};_0x86b6x2b+=_0x86b6x26[_0x96ae[52]]?_0x96ae[106]+_0x86b6x26[_0x96ae[92]](_0x96ae[91]):_0x96ae[74];_0x86b6x2b+=_0x86b6x27[_0x96ae[52]]?_0x96ae[107]+_0x86b6x27[_0x96ae[92]](_0x96ae[91]):_0x96ae[74];_0x86b6x2b+=_0x86b6x2c&&!_0x86b6x24?_0x96ae[108]+_0x86b6x2c:_0x96ae[74];_0x86b6x2b+=_0x86b6x2d&&!_0x86b6x24?_0x96ae[109]+_0x86b6x2d:_0x96ae[74];return _0x86b6x2b;}function getConditions(_0x86b6x30){if(!_0x86b6x30){return _0x96ae[74]};for(var _0x86b6x31=_0x96ae[110],_0x86b6x32=0;_0x86b6x32<_0x86b6x30[_0x96ae[111]][_0x96ae[52]];_0x86b6x32++){_0x86b6x32>0&&(_0x86b6x31+=_0x96ae[90]+_0x86b6x30[_0x96ae[112]]+_0x96ae[90]);_0x86b6x31+=_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[88]]?getConditions(_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[88]]):_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[77]]+_0x96ae[90]+_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[113]]+_0x96ae[114]+(_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[113]]===_0x96ae[115]?_0x96ae[24]+_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[116]]+_0x96ae[24]:_0x86b6x30[_0x96ae[111]][_0x86b6x32][_0x96ae[116]])+_0x96ae[100];};return _0x86b6x31+_0x96ae[117];}exports[_0x96ae[118]]=function(_0x86b6x8,_0x86b6x9){DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]],{include:[{all:true}]})[_0x96ae[48]](function(_0x86b6x1d){if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};return _0x86b6x9[_0x96ae[36]](_0x86b6x1d);})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)})};exports[_0x96ae[119]]=function(_0x86b6x8,_0x86b6x9){DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]],{include:[{all:true}]})[_0x96ae[48]](function(_0x86b6x1d){if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};var _0x86b6x33=_0x86b6x1d[_0x96ae[57]];delete _0x86b6x33[_0x96ae[61]];delete _0x86b6x33[_0x96ae[120]];delete _0x86b6x33[_0x96ae[121]];_0x86b6x33[_0x96ae[12]]=_0x86b6x8[_0x96ae[69]][_0x96ae[12]];_0x86b6x33[_0x96ae[122]]=_[_0x96ae[123]](_0x86b6x33.Fields,_0x96ae[57]);_[_0x96ae[26]](_0x86b6x33.Fields,function(_0x86b6x28){delete _0x86b6x28[_0x96ae[61]];delete _0x86b6x28[_0x96ae[124]];delete _0x86b6x28[_0x96ae[120]];delete _0x86b6x28[_0x96ae[121]];});return CustomReport[_0x96ae[73]](_0x86b6x33,{include:[{all:true}]});})[_0x96ae[48]](function(){return _0x86b6x9[_0x96ae[56]](201)})[_0x96ae[38]](function(_0x86b6x16){console[_0x96ae[51]](_0x86b6x16);return handleError(_0x86b6x9,_0x86b6x16);})};exports[_0x96ae[73]]=function(_0x86b6x8,_0x86b6x9){DefaultReport[_0x96ae[73]](_0x86b6x8[_0x96ae[69]])[_0x96ae[48]](function(_0x86b6x1d){return _0x86b6x9[_0x96ae[37]](201)[_0x96ae[36]](_0x86b6x1d)})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)})};exports[_0x96ae[125]]=function(_0x86b6x8,_0x86b6x9){if(_0x86b6x8[_0x96ae[69]][_0x96ae[61]]){delete _0x86b6x8[_0x96ae[69]][_0x96ae[61]]};DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]])[_0x96ae[48]](function(_0x86b6x1d){if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};var _0x86b6x34=_[_0x96ae[126]](_0x86b6x1d,_0x86b6x8[_0x96ae[69]]);_0x86b6x34[_0x96ae[127]]()[_0x96ae[48]](function(){return _0x86b6x9[_0x96ae[37]](200)[_0x96ae[36]](_0x86b6x1d)})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)});})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)});};exports[_0x96ae[128]]=function(_0x86b6x8,_0x86b6x9){DefaultReport[_0x96ae[63]](_0x86b6x8[_0x96ae[62]][_0x96ae[61]])[_0x96ae[48]](function(_0x86b6x1d){if(!_0x86b6x1d){return _0x86b6x9[_0x96ae[56]](404)};_0x86b6x1d[_0x96ae[128]]()[_0x96ae[48]](function(){return _0x86b6x9[_0x96ae[56]](204)})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)});})[_0x96ae[38]](function(_0x86b6x16){return handleError(_0x86b6x9,_0x86b6x16)})};function handleError(_0x86b6x9,_0x86b6x16){return _0x86b6x9[_0x96ae[37]](500)[_0x96ae[36]](_0x86b6x16)}
\ No newline at end of file