Built motion from commit 05106a3.|0.0.33
[motion.git] / server / api / custom_report / custom_report.controller.js
index f849509..1427e47 100644 (file)
@@ -1,423 +1 @@
-'use strict';
-
-var _ = require('lodash');
-var util = require('util');
-var sequelize = require('../../models').sequelize;
-var CustomReport = require('../../models').CustomReport;
-var ReportField = require('../../models').ReportField;
-var ExtractedReport = require('../../models').ExtractedReport;
-var extractUtils = require('../../utils/report_extraction');
-
-// Get list of custom 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 + '%';
-    }
-  });
-
-  CustomReport
-    .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) {
-  CustomReport
-    .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'
-    });
-  }
-  CustomReport
-    .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);
-}
-
-// Get a single report
-exports.show = function(req, res) {
-  CustomReport
-    .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 custom report
-exports.copy = function(req, res) {
-  CustomReport
-    .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.CustomReportId;
-        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);
-    });
-};
-
-// Import a report
-exports.import = function(req, res) {
-  CustomReport
-    .create(req.body, {
-      include: [{
-        all: true
-      }]
-    })
-    .then(function(report) {
-      return res.status(201).send(report);
-    })
-    .catch(function(err) {
-      return handleError(res, err);
-    });
-};
-
-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 + ')';
-}
-
-// Creates a new report in the DB.
-exports.create = function(req, res) {
-  CustomReport
-    .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;
-  }
-  ReportField.destroy({
-      where: {
-        CustomReportId: req.params.id
-      }
-    })
-    .then(function() {
-      return ReportField.bulkCreate(req.body.Fields);
-    })
-    .then(function() {
-      delete req.body.Fields;
-      return CustomReport.update(req.body, {
-        where: {
-          id: req.params.id
-        }
-      });
-    })
-    .then(function() {
-      return res.sendStatus(200);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return handleError(res, err);
-    });
-};
-
-// Deletes a report from the DB.
-exports.destroy = function(req, res) {
-  CustomReport
-    .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);
-    });
-};
-
-exports.bulkDestroy = function(req, res) {
-  CustomReport
-    .destroy({
-      where: {
-        id: req.query.id
-      },
-      individualHooks: true
-    })
-    .then(function() {
-      return res.sendStatus(204);
-    })
-    .catch(function(err) {
-      return handleError(res, err);
-    });
-};
-
-function handleError(res, err) {
-  return res.status(500).send(err);
-}
+var _0x857a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\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","\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","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64","\x69\x6D\x70\x6F\x72\x74","","\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","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x857a[0];var _=require(_0x857a[1]);var util=require(_0x857a[2]);var sequelize=require(_0x857a[4])[_0x857a[3]];var CustomReport=require(_0x857a[4])[_0x857a[5]];var ReportField=require(_0x857a[4])[_0x857a[6]];var ExtractedReport=require(_0x857a[4])[_0x857a[7]];var extractUtils=require(_0x857a[8]);exports[_0x857a[9]]=function(_0x6b79x8,_0x6b79x9,_0x6b79xa){var _0x6b79xb=[_0x857a[10],_0x857a[11],_0x857a[12]];var _0x6b79xc=_0x6b79x8[_0x857a[14]][_0x857a[13]]?parseInt(_0x6b79x8[_0x857a[14]][_0x857a[13]],10):100;var _0x6b79xd=_0x6b79x8[_0x857a[14]][_0x857a[15]]?parseInt(_0x6b79x8[_0x857a[14]][_0x857a[15]],10):0;var _0x6b79xe={where:{},limit:_0x6b79xc,offset:_0x6b79xd*_0x6b79xc};_[_0x857a[34]](_0x6b79x8[_0x857a[14]],function(_0x6b79xf,_0x6b79x10){switch(_0x6b79x10){case _0x857a[13]:;case _0x857a[15]:break ;;case _0x857a[18]:_0x6b79xe[_0x857a[16]]=util[_0x857a[21]](_0x857a[17],_0x6b79x8[_0x857a[14]][_0x857a[18]],_0x6b79x8[_0x857a[14]][_0x857a[19]]||_0x857a[20])||null;break ;;case _0x857a[19]:break ;;case _0x857a[27]:_0x6b79xe[_0x857a[23]][_0x857a[22]]=[];_0x6b79xb[_0x857a[26]](function(_0x6b79x11){var _0x6b79x12={};_0x6b79x12[_0x6b79x11]={$like:_0x857a[24]+_0x6b79xf+_0x857a[24]};_0x6b79xe[_0x857a[23]][_0x857a[22]][_0x857a[25]](_0x6b79x12);});break ;;case _0x857a[28]:_0x6b79xe[_0x857a[23]][_0x857a[28]]={$or:_0x6b79xf[_0x857a[29]](/[\s,]+/)};break ;;case _0x857a[32]:var _0x6b79x13=JSON[_0x857a[30]](_0x6b79xf);_[_0x857a[31]](_0x6b79x13,function(_0x6b79x14,_0x6b79x15){_0x6b79xe[_0x857a[23]][_0x6b79x15]=_0x6b79x14});break ;;default:_0x6b79xe[_0x857a[23]][_0x6b79x10]={$like:{}};_0x6b79xe[_0x857a[23]][_0x6b79x10][_0x857a[33]]=_0x857a[24]+_0x6b79xf+_0x857a[24];;}});CustomReport[_0x857a[49]](_0x6b79xe)[_0x857a[48]](function(_0x6b79x17){var _0x6b79x18=Math[_0x857a[40]](_0x6b79x17[_0x857a[39]]/_0x6b79xc);var _0x6b79x19=_0x6b79x18>(_0x6b79xe[_0x857a[41]]+1)?util[_0x857a[21]](_0x857a[42],_0x6b79x8[_0x857a[43]],_0x6b79x8[_0x857a[45]][_0x857a[44]],_0x6b79x8[_0x857a[46]],_0x6b79xd+1):null;var _0x6b79x1a=_0x6b79xd>0?util[_0x857a[21]](_0x857a[42],_0x6b79x8[_0x857a[43]],_0x6b79x8[_0x857a[45]][_0x857a[44]],_0x6b79x8[_0x857a[46]],_0x6b79xd-1):null;_0x6b79x9[_0x857a[37]](200)[_0x857a[36]]({count:_0x6b79x17[_0x857a[39]],rows:_0x6b79x17[_0x857a[47]],next_page:_0x6b79x19,previous_page:_0x6b79x1a,total_pages:_0x6b79x18});})[_0x857a[38]](function(_0x6b79x16){_0x6b79x9[_0x857a[37]](500)[_0x857a[36]]({error:_0x857a[35]})});};exports[_0x857a[50]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[63]](_0x6b79x8[_0x857a[62]][_0x857a[61]],{include:[{all:true}]})[_0x857a[48]](function(_0x6b79x1d){console[_0x857a[51]](_0x857a[55]);if(!_0x6b79x1d){return _0x6b79x9[_0x857a[56]](404)};var _0x6b79xe=buildReport(_0x6b79x1d[_0x857a[57]],_0x6b79x8[_0x857a[14]]);var _0x6b79x1e=[sequelize[_0x857a[14]](_0x6b79xe,{type:sequelize[_0x857a[59]][_0x857a[58]]})];if(_0x6b79x8[_0x857a[14]][_0x857a[60]]){var _0x6b79x1f=buildReport(_0x6b79x1d[_0x857a[57]],_0x6b79x8[_0x857a[14]],true);_0x6b79x1e[_0x857a[25]](sequelize[_0x857a[14]](_0x6b79x1f,{type:sequelize[_0x857a[59]][_0x857a[58]]}));};return _0x6b79x1e;})[_0x857a[54]]()[_0x857a[53]](function(_0x6b79x1b,_0x6b79x1c){console[_0x857a[51]](_0x6b79x1b[_0x857a[52]]);console[_0x857a[51]](_0x6b79x1c);_0x6b79x9[_0x857a[37]](200)[_0x857a[36]]({rows:_0x6b79x1b,count:_0x6b79x1c?_0x6b79x1c[0]:null});})[_0x857a[38]](function(_0x6b79x16){console[_0x857a[51]](_0x6b79x16);return handleError(_0x6b79x9,_0x6b79x16);})};exports[_0x857a[64]]=function(_0x6b79x8,_0x6b79x9){docExtract(_0x6b79x8,_0x6b79x9,_0x857a[65])};exports[_0x857a[66]]=function(_0x6b79x8,_0x6b79x9){docExtract(_0x6b79x8,_0x6b79x9,_0x857a[67])};function docExtract(_0x6b79x8,_0x6b79x9,_0x6b79x21){if(!_0x6b79x8[_0x857a[69]][_0x857a[68]]||!_0x6b79x8[_0x857a[69]][_0x857a[70]]){return _0x6b79x9[_0x857a[37]](500)[_0x857a[36]]({message:_0x857a[71]})};CustomReport[_0x857a[63]](_0x6b79x8[_0x857a[62]][_0x857a[61]],{include:[{all:true}]})[_0x857a[48]](function(_0x6b79x1d){if(!_0x6b79x1d){return _0x6b79x9[_0x857a[56]](404)};return [_0x6b79x1d,ExtractedReport[_0x857a[73]]({name:_0x6b79x1d[_0x857a[10]],startDate:_0x6b79x8[_0x857a[69]][_0x857a[68]],endDate:_0x6b79x8[_0x857a[69]][_0x857a[70]],output:_0x6b79x21})];})[_0x857a[53]](function(_0x6b79x1d,_0x6b79x22){extractUtils[_0x857a[72]+_0x6b79x21](_0x6b79x1d,_0x6b79x8[_0x857a[69]][_0x857a[68]],_0x6b79x8[_0x857a[69]][_0x857a[70]],_0x6b79x22[_0x857a[61]])})[_0x857a[38]](function(_0x6b79x16){console[_0x857a[51]](_0x6b79x16);return handleError(_0x6b79x9,_0x6b79x16);});return _0x6b79x9[_0x857a[56]](200);}exports[_0x857a[74]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[63]](_0x6b79x8[_0x857a[62]][_0x857a[61]],{include:[{all:true}]})[_0x857a[48]](function(_0x6b79x1d){if(!_0x6b79x1d){return _0x6b79x9[_0x857a[56]](404)};return _0x6b79x9[_0x857a[36]](_0x6b79x1d);})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)})};exports[_0x857a[75]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[63]](_0x6b79x8[_0x857a[62]][_0x857a[61]],{include:[{all:true}]})[_0x857a[48]](function(_0x6b79x1d){if(!_0x6b79x1d){return _0x6b79x9[_0x857a[56]](404)};var _0x6b79x23=_0x6b79x1d[_0x857a[57]];delete _0x6b79x23[_0x857a[61]];delete _0x6b79x23[_0x857a[76]];delete _0x6b79x23[_0x857a[77]];_0x6b79x23[_0x857a[12]]=_0x6b79x8[_0x857a[69]][_0x857a[12]];_0x6b79x23[_0x857a[78]]=_[_0x857a[79]](_0x6b79x23.Fields,_0x857a[57]);_[_0x857a[26]](_0x6b79x23.Fields,function(_0x6b79x24){delete _0x6b79x24[_0x857a[61]];delete _0x6b79x24[_0x857a[80]];delete _0x6b79x24[_0x857a[76]];delete _0x6b79x24[_0x857a[77]];});return CustomReport[_0x857a[73]](_0x6b79x23,{include:[{all:true}]});})[_0x857a[48]](function(){return _0x6b79x9[_0x857a[56]](201)})[_0x857a[38]](function(_0x6b79x16){console[_0x857a[51]](_0x6b79x16);return handleError(_0x6b79x9,_0x6b79x16);})};exports[_0x857a[81]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[73]](_0x6b79x8[_0x857a[69]],{include:[{all:true}]})[_0x857a[48]](function(_0x6b79x1d){return _0x6b79x9[_0x857a[37]](201)[_0x857a[36]](_0x6b79x1d)})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)})};function buildReport(_0x6b79x1d,_0x6b79xe,_0x6b79x26){var _0x6b79x27=[],_0x6b79x28=[],_0x6b79x29=[];_[_0x857a[26]](_0x6b79x1d.Fields,function(_0x6b79x24){var _0x6b79x2a=_0x857a[82];if(_0x6b79x24[_0x857a[83]]){switch(_0x6b79x24[_0x857a[83]]){case _0x857a[86]:_0x6b79x2a=util[_0x857a[21]](_0x857a[84],_0x6b79x24[_0x857a[85]]);break ;;case _0x857a[88]:_0x6b79x2a=util[_0x857a[21]](_0x857a[87],_0x6b79x24[_0x857a[85]],_0x6b79x24[_0x857a[85]]);break ;;case _0x857a[90]:_0x6b79x2a=util[_0x857a[21]](_0x857a[89],_0x6b79x24[_0x857a[85]],_0x6b79x24[_0x857a[85]]);break ;;default:_0x6b79x2a=util[_0x857a[21]](_0x857a[91],_0x6b79x24[_0x857a[83]],_0x6b79x24[_0x857a[85]]);;}}else {_0x6b79x2a=_0x6b79x24[_0x857a[85]]};_0x6b79x27[_0x857a[25]](util[_0x857a[21]](_0x857a[92],_0x6b79x2a,_0x6b79x24[_0x857a[93]]));if(_0x6b79x24[_0x857a[94]]){_0x6b79x28[_0x857a[25]](_0x6b79x24[_0x857a[85]])};if(_0x6b79x24[_0x857a[95]]){_0x6b79x29[_0x857a[25]](util[_0x857a[21]](_0x857a[17],_0x6b79x24[_0x857a[85]],_0x6b79x24[_0x857a[95]]))};});var _0x6b79x2b=getConditions(JSON[_0x857a[30]](_0x6b79x1d[_0x857a[97]])[_0x857a[96]]);var _0x6b79x2c=_0x857a[58];_0x6b79x2c+=_0x857a[98]+_0x6b79x27[_0x857a[100]](_0x857a[99]);if(_0x6b79x26){_0x6b79x2c+=_0x857a[101]};_0x6b79x2c+=_0x857a[102]+_0x6b79x1d[_0x857a[103]];_0x6b79x2c+=_0x6b79x2b!==_0x857a[104]?_0x857a[105]+_0x6b79x2b:_0x857a[82];var _0x6b79x2d=false;var _0x6b79x2e=false;if(_0x6b79xe){_[_0x857a[31]](_0x6b79xe,function(_0x6b79xf,_0x6b79x10){switch(_0x6b79x10){case _0x857a[15]:if(_0x6b79xe[_0x857a[106]]){_0x6b79x2d=parseInt(_0x6b79xe[_0x857a[106]],10);_0x6b79x2e=parseInt(_0x6b79xf,10)*_0x6b79x2d;};break ;;case _0x857a[106]:_0x6b79x2d=parseInt(_0x6b79xf,10);break ;;case _0x857a[68]:_0x6b79x2c+=_0x857a[107]+_0x6b79xf+_0x857a[108];break ;;case _0x857a[70]:_0x6b79x2c+=_0x857a[109]+_0x6b79xf+_0x857a[108];break ;;case _0x857a[60]:break ;;default:var _0x6b79x2f=_[_0x857a[110]](_0x6b79x1d.Fields,{alias:_0x6b79x10})[_0x857a[85]];if(_0x6b79x2f){_0x6b79x2c+=_0x857a[111]+_0x6b79x2f+_0x857a[112]+_0x6b79xf+_0x857a[113]}else {_0x6b79x2c+=_0x857a[111]+_0x6b79x10+_0x857a[112]+_0x6b79xf+_0x857a[113]};;}})};_0x6b79x2c+=_0x6b79x28[_0x857a[52]]?_0x857a[114]+_0x6b79x28[_0x857a[100]](_0x857a[99]):_0x857a[82];_0x6b79x2c+=_0x6b79x29[_0x857a[52]]?_0x857a[115]+_0x6b79x29[_0x857a[100]](_0x857a[99]):_0x857a[82];_0x6b79x2c+=_0x6b79x2d&&!_0x6b79x26?_0x857a[116]+_0x6b79x2d:_0x857a[82];_0x6b79x2c+=_0x6b79x2e&&!_0x6b79x26?_0x857a[117]+_0x6b79x2e:_0x857a[82];return _0x6b79x2c;}function getConditions(_0x6b79x31){if(!_0x6b79x31){return _0x857a[82]};for(var _0x6b79x32=_0x857a[118],_0x6b79x33=0;_0x6b79x33<_0x6b79x31[_0x857a[119]][_0x857a[52]];_0x6b79x33++){_0x6b79x33>0&&(_0x6b79x32+=_0x857a[98]+_0x6b79x31[_0x857a[120]]+_0x857a[98]);_0x6b79x32+=_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[96]]?getConditions(_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[96]]):_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[85]]+_0x857a[98]+_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[121]]+_0x857a[122]+(_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[121]]===_0x857a[123]?_0x857a[24]+_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[124]]+_0x857a[24]:_0x6b79x31[_0x857a[119]][_0x6b79x33][_0x857a[124]])+_0x857a[108];};return _0x6b79x32+_0x857a[125];}exports[_0x857a[73]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[73]](_0x6b79x8[_0x857a[69]])[_0x857a[48]](function(_0x6b79x1d){return _0x6b79x9[_0x857a[37]](201)[_0x857a[36]](_0x6b79x1d)})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)})};exports[_0x857a[126]]=function(_0x6b79x8,_0x6b79x9){if(_0x6b79x8[_0x857a[69]][_0x857a[61]]){delete _0x6b79x8[_0x857a[69]][_0x857a[61]]};ReportField[_0x857a[128]]({where:{CustomReportId:_0x6b79x8[_0x857a[62]][_0x857a[61]]}})[_0x857a[48]](function(){return ReportField[_0x857a[127]](_0x6b79x8[_0x857a[69]].Fields)})[_0x857a[48]](function(){delete _0x6b79x8[_0x857a[69]][_0x857a[78]];return CustomReport[_0x857a[126]](_0x6b79x8[_0x857a[69]],{where:{id:_0x6b79x8[_0x857a[62]][_0x857a[61]]}});})[_0x857a[48]](function(){return _0x6b79x9[_0x857a[56]](200)})[_0x857a[38]](function(_0x6b79x16){console[_0x857a[51]](_0x6b79x16);return handleError(_0x6b79x9,_0x6b79x16);});};exports[_0x857a[128]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[63]](_0x6b79x8[_0x857a[62]][_0x857a[61]])[_0x857a[48]](function(_0x6b79x1d){if(!_0x6b79x1d){return _0x6b79x9[_0x857a[56]](404)};_0x6b79x1d[_0x857a[128]]()[_0x857a[48]](function(){return _0x6b79x9[_0x857a[56]](204)})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)});})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)})};exports[_0x857a[129]]=function(_0x6b79x8,_0x6b79x9){CustomReport[_0x857a[128]]({where:{id:_0x6b79x8[_0x857a[14]][_0x857a[61]]},individualHooks:true})[_0x857a[48]](function(){return _0x6b79x9[_0x857a[56]](204)})[_0x857a[38]](function(_0x6b79x16){return handleError(_0x6b79x9,_0x6b79x16)})};function handleError(_0x6b79x9,_0x6b79x16){return _0x6b79x9[_0x857a[37]](500)[_0x857a[36]](_0x6b79x16)}
\ No newline at end of file