Built motion from commit 05106a3.|0.0.33
[motion.git] / server / api / contact_manager / contact_manager.controller.js
index f2641f7..78e1325 100644 (file)
@@ -1,501 +1 @@
-'use strict';
-
-var _ = require('lodash');
-var Contact = require('../../models').Contact;
-var ContactPhone = require('../../models').ContactPhone;
-var ContactEmail = require('../../models').ContactEmail;
-var CustomField = require('../../models').CustomField;
-var ReportCall = require('../../models').ReportCall;
-var ReportIntegration = require('../../models').ReportIntegration;
-var Service = require('../../models').Service;
-var ReportCallHistory = require('../../models').history.ReportCallHistory;
-var ReportMailSession = require('../../models').ReportMailSession;
-var ReportMailSessionHistory = require('../../models').history.ReportMailSessionHistory;
-var Tag = require('../../models').Tag;
-var stream = require('stream');
-var sequelize = require('../../models').sequelize;
-var util = require('util');
-
-// Get list of contacts
-exports.index = function(req, res) {
-
-  var attributes = ['name', 'Service.name', 'description'];
-  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,
-    include: [{
-      model: Service
-    }]
-  };
-
-  _.forIn(req.query, function(value, key) {
-    switch (key) {
-      case 'per_page':
-      case 'page':
-        break;
-      case 'sort_by':
-        if (value === 'service') {
-          _.find(query.include, {
-            model: Service
-          }).order = util.format('name %s', req.query.sort_order || 'ASC');
-        } else {
-          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 'service':
-        _.find(query.include, {
-          model: Service
-        }).where = {
-          name: {
-            $like: '%' + value + '%'
-          }
-        };
-        break;
-      default:
-        query.where[key] = {
-          $like: {}
-        };
-        query.where[key].$like = '%' + value + '%';
-    }
-  });
-  console.log(query);
-
-
-  Contact
-    .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!'
-      });
-    });
-};
-
-// Get a single managed_contact
-exports.show = function(req, res) {
-  Contact
-    .findById(req.params.id, {
-      include: [{
-        model: ContactPhone,
-        as: 'Phones',
-        include: [{
-          model: ReportCall,
-          as: 'Inbounds',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportCall,
-          as: 'Outbounds',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportCallHistory,
-          as: 'HistoryInbounds',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportCallHistory,
-          as: 'HistoryOutbounds',
-          include: [{
-            all: true
-          }]
-        }]
-      }, {
-        model: ContactEmail,
-        as: 'Emails',
-        include: [{
-          model: ReportMailSession,
-          as: 'InboundMessages',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportMailSession,
-          as: 'OutboundMessages',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportMailSessionHistory,
-          as: 'HistoryInboundMessages',
-          include: [{
-            all: true
-          }]
-        }, {
-          model: ReportMailSessionHistory,
-          as: 'HistoryOutboundMessages',
-          include: [{
-            all: true
-          }]
-        }]
-      }, {
-        model: CustomField,
-        as: 'CustomFields'
-      }, {
-        model: Service
-      }]
-    })
-    .then(function(managed_contact) {
-      if (!managed_contact) {
-        return res.sendStatus(404);
-      }
-      return res.status(200).send(managed_contact);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return handleError(res, err);
-    });
-};
-
-exports.getEventContacts = function(req, res) {
-  ReportIntegration
-    .findById(req.params.id)
-    .then(function(event) {
-      var modelInclude = {};
-      switch (event.eventChannel) {
-        case 'voice':
-          modelInclude = {
-            model: ContactPhone,
-            as: 'Phones',
-            where: {
-              phone: event.calleridnum
-            }
-          };
-          break;
-        case 'mail':
-          modelInclude = {
-            model: ContactEmail,
-            as: 'Emails',
-            where: {
-              email: event.from
-            }
-          };
-          break;
-        default:
-      }
-      return Contact.findAll({
-        include: [modelInclude, {
-          model: Service,
-          where: {
-            id: _.pluck(_.pluck(req.user.Services, 'dataValues'), 'id')
-          }
-        }]
-      });
-    })
-    .then(function(contacts) {
-      return res.status(200).send(contacts);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return handleError(res, err);
-    });
-
-};
-
-// validate contact uniqueness
-exports.contactValidation = function(req, res) {
-  Contact.findAll({
-      where: {
-        $or: {
-          '$Phones.phone$': req.body.phones,
-          '$Emails.email$': req.body.emails
-        }
-      },
-      include: [{
-        all: true
-      }]
-    })
-    .then(function(contacts) {
-      console.log(contacts);
-      return res.status(200).send(contacts);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return handleError(res, err);
-    });
-};
-
-// Creates a new managed_contact in the DB.
-exports.create = function(req, res, next) {
-  var newPhones = [],
-    newEmails = [],
-    newCustomFields = {};
-  Tag.findAll()
-    .then(function(tags) {
-      var newTags = [];
-      var tagList = _.pluck(_.pluck(tags, 'dataValues'), 'name');
-      if (req.body.tags) {
-        var contactTags = req.body.tags.split(',');
-        contactTags.forEach(function(elem) {
-          if (!_.includes(tags, elem)) {
-            newTags.push({
-              name: elem
-            });
-          }
-        });
-        if (newTags.length) {
-          Tag.bulkCreate(newTags, {
-            individualHooks: true
-          });
-        }
-      }
-      req.body.UserId = req.user.id;
-      var phones = _.uniq(_.pluck(req.body.Phones, 'phone'));
-      var contactPhones = [];
-      phones.forEach(function(elem) {
-        contactPhones.push(ContactPhone.findOrCreate({
-          where: {
-            phone: elem
-          },
-          defaults: {
-            phone: elem
-          }
-        }));
-      });
-      return contactPhones;
-    })
-    .all()
-    .then(function(res) {
-      newPhones = _.map(res, function(elem) {
-        return elem[0];
-      });
-
-      var contactEmails = [];
-      var emails = _.uniq(_.pluck(req.body.Emails, 'email'));
-      emails.forEach(function(elem) {
-        contactEmails.push(ContactEmail.findOrCreate({
-          where: {
-            email: elem
-          },
-          defaults: {
-            email: elem
-          }
-        }));
-      });
-      return contactEmails;
-    })
-    .all()
-    .then(function(res) {
-      newEmails = _.map(res, function(elem) {
-        return elem[0];
-      });
-      delete req.body.Phones;
-      delete req.body.Emails;
-      newCustomFields = _.clone(req.body.customFields);
-      delete req.body.customFields;
-
-      return Contact.create(req.body);
-    })
-    .then(function(contact) {
-      return [contact, contact.setPhones(newPhones)];
-    })
-    .spread(function(contact) {
-      return [contact, contact.setEmails(newEmails)];
-    })
-    .spread(function(contact) {
-      var customFieldsIds = _.keys(newCustomFields);
-      return [contact, CustomField.findAll({
-        where: {
-          id: customFieldsIds
-        }
-      })];
-    })
-    .spread(function(contact, customFields) {
-      customFields.forEach(function(elem) {
-        elem.ContactHasCustomField = {
-          value: newCustomFields[String(elem.id)]
-        }
-      });
-      return [contact, contact.setCustomFields(customFields)];
-    })
-    .spread(function(contact) {
-      return res.status(201).send(contact);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return next(err);
-    });
-};
-
-// Updates an existing managed_contact in the DB.
-exports.update = function(req, res, next) {
-  var newPhones = [],
-    newEmails = [],
-    newCustomFields = {};
-  Tag.findAll()
-    .then(function(tags) {
-      var newTags = [];
-      var tagList = _.pluck(_.pluck(tags, 'dataValues'), 'name');
-      if (req.body.tags) {
-        var contactTags = req.body.tags.split(',');
-        contactTags.forEach(function(elem) {
-          if (!_.includes(tags, elem)) {
-            newTags.push({
-              name: elem
-            });
-          }
-        });
-        if (newTags.length) {
-          Tag.bulkCreate(newTags, {
-            individualHooks: true
-          });
-        }
-      }
-      var contactPhones = [];
-      var phones = _.uniq(_.pluck(req.body.Phones, 'phone'));
-      phones.forEach(function(elem) {
-        contactPhones.push(ContactPhone.findOrCreate({
-          where: {
-            phone: elem
-          },
-          defaults: {
-            phone: elem
-          }
-        }));
-      });
-      return contactPhones;
-    })
-    .all()
-    .then(function(res) {
-      newPhones = _.map(res, function(elem) {
-        return elem[0];
-      });
-
-      var contactEmails = [];
-      var emails = _.uniq(_.pluck(req.body.Emails, 'email'));
-      emails.forEach(function(elem) {
-        contactEmails.push(ContactEmail.findOrCreate({
-          where: {
-            email: elem
-          },
-          defaults: {
-            email: elem
-          }
-        }));
-      });
-      return contactEmails;
-    })
-    .all()
-    .then(function(res) {
-      newEmails = _.map(res, function(elem) {
-        return elem[0];
-      });
-      delete req.body.Phones;
-      delete req.body.Emails;
-      newCustomFields = _.clone(req.body.customFields);
-      delete req.body.customFields;
-      delete req.body.CustomFields;
-      var updateId = req.body.id;
-      delete req.body.id;
-
-      return Contact.findById(updateId);
-    })
-    .then(function(contact) {
-      return [contact, contact.setPhones(newPhones)];
-    })
-    .spread(function(contact) {
-      return [contact, contact.setEmails(newEmails)];
-    })
-    .spread(function(contact) {
-      var customFieldsIds = _.keys(newCustomFields);
-      return [contact, CustomField.findAll({
-        where: {
-          id: customFieldsIds
-        }
-      })];
-    })
-    .spread(function(contact, customFields) {
-      customFields.forEach(function(elem) {
-        elem.ContactHasCustomField = {
-          value: newCustomFields[String(elem.id)]
-        }
-      });
-      return [contact, contact.setCustomFields(customFields)];
-    })
-    .spread(function(contact) {
-      return contact.updateAttributes(req.body)
-    })
-    .then(function(contact) {
-      return res.status(200).send(contact);
-    })
-    .catch(function(err) {
-      console.log(err);
-      return handleError(res, err);
-    });
-};
-
-// Deletes a managed_contact from the DB.
-exports.destroy = function(req, res) {
-  Contact
-    .findById(req.params.id)
-    .then(function(managed_contact) {
-      if (!managed_contact) {
-        return res.sendStatus(404);
-      }
-      managed_contact.destroy()
-        .then(function() {
-          return res.sendStatus(204);
-        })
-        .catch(function(err) {
-          return handleError(res, err);
-        });
-    })
-    .catch(function(err) {
-      return handleError(res, err);
-    });
-};
-
-// Deletes a managed_contact from the DB.
-exports.bulkDestroy = function(req, res) {
-  Contact
-    .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 _0xbc3d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x65\x72\x76\x69\x63\x65","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x54\x61\x67","\x73\x74\x72\x65\x61\x6D","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x6E\x61\x6D\x65","\x53\x65\x72\x76\x69\x63\x65\x2E\x6E\x61\x6D\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x73\x65\x72\x76\x69\x63\x65","\x6F\x72\x64\x65\x72","\x69\x6E\x63\x6C\x75\x64\x65","\x66\x69\x6E\x64","\x6E\x61\x6D\x65\x20\x25\x73","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x6C\x6F\x67","\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","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x50\x68\x6F\x6E\x65\x73","\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x48\x69\x73\x74\x6F\x72\x79\x49\x6E\x62\x6F\x75\x6E\x64\x73","\x48\x69\x73\x74\x6F\x72\x79\x4F\x75\x74\x62\x6F\x75\x6E\x64\x73","\x45\x6D\x61\x69\x6C\x73","\x49\x6E\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x48\x69\x73\x74\x6F\x72\x79\x49\x6E\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x48\x69\x73\x74\x6F\x72\x79\x4F\x75\x74\x62\x6F\x75\x6E\x64\x4D\x65\x73\x73\x61\x67\x65\x73","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x45\x76\x65\x6E\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x76\x6F\x69\x63\x65","\x66\x72\x6F\x6D","\x6D\x61\x69\x6C","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x75\x73\x65\x72","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x6C\x75\x63\x6B","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x6F\x6E\x74\x61\x63\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x68\x6F\x6E\x65\x73","\x62\x6F\x64\x79","\x65\x6D\x61\x69\x6C\x73","\x63\x72\x65\x61\x74\x65","\x73\x70\x72\x65\x61\x64","\x43\x6F\x6E\x74\x61\x63\x74\x48\x61\x73\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x73\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x6B\x65\x79\x73","\x73\x65\x74\x45\x6D\x61\x69\x6C\x73","\x73\x65\x74\x50\x68\x6F\x6E\x65\x73","\x6D\x61\x70","\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x63\x6C\x6F\x6E\x65","\x61\x6C\x6C","\x65\x6D\x61\x69\x6C","\x75\x6E\x69\x71","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x74\x61\x67\x73","\x2C","\x73\x70\x6C\x69\x74","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x70\x68\x6F\x6E\x65","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0xbc3d[0];var _=require(_0xbc3d[1]);var Contact=require(_0xbc3d[3])[_0xbc3d[2]];var ContactPhone=require(_0xbc3d[3])[_0xbc3d[4]];var ContactEmail=require(_0xbc3d[3])[_0xbc3d[5]];var CustomField=require(_0xbc3d[3])[_0xbc3d[6]];var ReportCall=require(_0xbc3d[3])[_0xbc3d[7]];var ReportIntegration=require(_0xbc3d[3])[_0xbc3d[8]];var Service=require(_0xbc3d[3])[_0xbc3d[9]];var ReportCallHistory=require(_0xbc3d[3])[_0xbc3d[11]][_0xbc3d[10]];var ReportMailSession=require(_0xbc3d[3])[_0xbc3d[12]];var ReportMailSessionHistory=require(_0xbc3d[3])[_0xbc3d[11]][_0xbc3d[13]];var Tag=require(_0xbc3d[3])[_0xbc3d[14]];var stream=require(_0xbc3d[15]);var sequelize=require(_0xbc3d[3])[_0xbc3d[16]];var util=require(_0xbc3d[17]);exports[_0xbc3d[18]]=function(_0xd3cax10,_0xd3cax11){var _0xd3cax12=[_0xbc3d[19],_0xbc3d[20],_0xbc3d[21]];var _0xd3cax13=_0xd3cax10[_0xbc3d[23]][_0xbc3d[22]]?parseInt(_0xd3cax10[_0xbc3d[23]][_0xbc3d[22]],10):100;var _0xd3cax14=_0xd3cax10[_0xbc3d[23]][_0xbc3d[24]]?parseInt(_0xd3cax10[_0xbc3d[23]][_0xbc3d[24]],10):0;var _0xd3cax15={where:{},limit:_0xd3cax13,offset:_0xd3cax14*_0xd3cax13,include:[{model:Service}]};_[_0xbc3d[42]](_0xd3cax10[_0xbc3d[23]],function(_0xd3cax16,_0xd3cax17){switch(_0xd3cax17){case _0xbc3d[22]:;case _0xbc3d[24]:break ;;case _0xbc3d[34]:if(_0xd3cax16===_0xbc3d[25]){_[_0xbc3d[28]](_0xd3cax15[_0xbc3d[27]],{model:Service})[_0xbc3d[26]]=util[_0xbc3d[32]](_0xbc3d[29],_0xd3cax10[_0xbc3d[23]][_0xbc3d[30]]||_0xbc3d[31])}else {_0xd3cax15[_0xbc3d[26]]=util[_0xbc3d[32]](_0xbc3d[33],_0xd3cax10[_0xbc3d[23]][_0xbc3d[34]],_0xd3cax10[_0xbc3d[23]][_0xbc3d[30]]||_0xbc3d[31])||null};break ;;case _0xbc3d[30]:break ;;case _0xbc3d[40]:_0xd3cax15[_0xbc3d[36]][_0xbc3d[35]]=[];_0xd3cax12[_0xbc3d[39]](function(_0xd3cax18){var _0xd3cax19={};_0xd3cax19[_0xd3cax18]={$like:_0xbc3d[37]+_0xd3cax16+_0xbc3d[37]};_0xd3cax15[_0xbc3d[36]][_0xbc3d[35]][_0xbc3d[38]](_0xd3cax19);});break ;;case _0xbc3d[25]:_[_0xbc3d[28]](_0xd3cax15[_0xbc3d[27]],{model:Service})[_0xbc3d[36]]={name:{$like:_0xbc3d[37]+_0xd3cax16+_0xbc3d[37]}};break ;;default:_0xd3cax15[_0xbc3d[36]][_0xd3cax17]={$like:{}};_0xd3cax15[_0xbc3d[36]][_0xd3cax17][_0xbc3d[41]]=_0xbc3d[37]+_0xd3cax16+_0xbc3d[37];;}});console[_0xbc3d[43]](_0xd3cax15);Contact[_0xbc3d[58]](_0xd3cax15)[_0xbc3d[57]](function(_0xd3cax1b){var _0xd3cax1c=Math[_0xbc3d[49]](_0xd3cax1b[_0xbc3d[48]]/_0xd3cax13);var _0xd3cax1d=_0xd3cax1c>(_0xd3cax15[_0xbc3d[50]]+1)?util[_0xbc3d[32]](_0xbc3d[51],_0xd3cax10[_0xbc3d[52]],_0xd3cax10[_0xbc3d[54]][_0xbc3d[53]],_0xd3cax10[_0xbc3d[55]],_0xd3cax14+1):null;var _0xd3cax1e=_0xd3cax14>0?util[_0xbc3d[32]](_0xbc3d[51],_0xd3cax10[_0xbc3d[52]],_0xd3cax10[_0xbc3d[54]][_0xbc3d[53]],_0xd3cax10[_0xbc3d[55]],_0xd3cax14-1):null;_0xd3cax11[_0xbc3d[46]](200)[_0xbc3d[45]]({count:_0xd3cax1b[_0xbc3d[48]],rows:_0xd3cax1b[_0xbc3d[56]],next_page:_0xd3cax1d,previous_page:_0xd3cax1e,total_pages:_0xd3cax1c});})[_0xbc3d[47]](function(_0xd3cax1a){_0xd3cax11[_0xbc3d[46]](500)[_0xbc3d[45]]({error:_0xbc3d[44]})});};exports[_0xbc3d[59]]=function(_0xd3cax10,_0xd3cax11){Contact[_0xbc3d[74]](_0xd3cax10[_0xbc3d[62]][_0xbc3d[61]],{include:[{model:ContactPhone,as:_0xbc3d[63],include:[{model:ReportCall,as:_0xbc3d[64],include:[{all:true}]},{model:ReportCall,as:_0xbc3d[65],include:[{all:true}]},{model:ReportCallHistory,as:_0xbc3d[66],include:[{all:true}]},{model:ReportCallHistory,as:_0xbc3d[67],include:[{all:true}]}]},{model:ContactEmail,as:_0xbc3d[68],include:[{model:ReportMailSession,as:_0xbc3d[69],include:[{all:true}]},{model:ReportMailSession,as:_0xbc3d[70],include:[{all:true}]},{model:ReportMailSessionHistory,as:_0xbc3d[71],include:[{all:true}]},{model:ReportMailSessionHistory,as:_0xbc3d[72],include:[{all:true}]}]},{model:CustomField,as:_0xbc3d[73]},{model:Service}]})[_0xbc3d[57]](function(_0xd3cax1f){if(!_0xd3cax1f){return _0xd3cax11[_0xbc3d[60]](404)};return _0xd3cax11[_0xbc3d[46]](200)[_0xbc3d[45]](_0xd3cax1f);})[_0xbc3d[47]](function(_0xd3cax1a){console[_0xbc3d[43]](_0xd3cax1a);return handleError(_0xd3cax11,_0xd3cax1a);})};exports[_0xbc3d[75]]=function(_0xd3cax10,_0xd3cax11){ReportIntegration[_0xbc3d[74]](_0xd3cax10[_0xbc3d[62]][_0xbc3d[61]])[_0xbc3d[57]](function(_0xd3cax21){var _0xd3cax22={};switch(_0xd3cax21[_0xbc3d[80]]){case _0xbc3d[77]:_0xd3cax22={model:ContactPhone,as:_0xbc3d[63],where:{phone:_0xd3cax21[_0xbc3d[76]]}};break ;;case _0xbc3d[79]:_0xd3cax22={model:ContactEmail,as:_0xbc3d[68],where:{email:_0xd3cax21[_0xbc3d[78]]}};break ;;default:;};return Contact[_0xbc3d[84]]({include:[_0xd3cax22,{model:Service,where:{id:_[_0xbc3d[83]](_[_0xbc3d[83]](_0xd3cax10[_0xbc3d[81]].Services,_0xbc3d[82]),_0xbc3d[61])}}]});})[_0xbc3d[57]](function(_0xd3cax20){return _0xd3cax11[_0xbc3d[46]](200)[_0xbc3d[45]](_0xd3cax20)})[_0xbc3d[47]](function(_0xd3cax1a){console[_0xbc3d[43]](_0xd3cax1a);return handleError(_0xd3cax11,_0xd3cax1a);})};exports[_0xbc3d[85]]=function(_0xd3cax10,_0xd3cax11){Contact[_0xbc3d[84]]({where:{$or:{"\x24\x50\x68\x6F\x6E\x65\x73\x2E\x70\x68\x6F\x6E\x65\x24":_0xd3cax10[_0xbc3d[87]][_0xbc3d[86]],"\x24\x45\x6D\x61\x69\x6C\x73\x2E\x65\x6D\x61\x69\x6C\x24":_0xd3cax10[_0xbc3d[87]][_0xbc3d[88]]}},include:[{all:true}]})[_0xbc3d[57]](function(_0xd3cax20){console[_0xbc3d[43]](_0xd3cax20);return _0xd3cax11[_0xbc3d[46]](200)[_0xbc3d[45]](_0xd3cax20);})[_0xbc3d[47]](function(_0xd3cax1a){console[_0xbc3d[43]](_0xd3cax1a);return handleError(_0xd3cax11,_0xd3cax1a);})};exports[_0xbc3d[89]]=function(_0xd3cax10,_0xd3cax11,_0xd3cax23){var _0xd3cax24=[],_0xd3cax25=[],_0xd3cax26={};Tag[_0xbc3d[84]]()[_0xbc3d[57]](function(_0xd3cax2d){var _0xd3cax2e=[];var _0xd3cax2f=_[_0xbc3d[83]](_[_0xbc3d[83]](_0xd3cax2d,_0xbc3d[82]),_0xbc3d[19]);if(_0xd3cax10[_0xbc3d[87]][_0xbc3d[103]]){var _0xd3cax30=_0xd3cax10[_0xbc3d[87]][_0xbc3d[103]][_0xbc3d[105]](_0xbc3d[104]);_0xd3cax30[_0xbc3d[39]](function(_0xd3cax29){if(!_[_0xbc3d[106]](_0xd3cax2d,_0xd3cax29)){_0xd3cax2e[_0xbc3d[38]]({name:_0xd3cax29})}});if(_0xd3cax2e[_0xbc3d[107]]){Tag[_0xbc3d[108]](_0xd3cax2e,{individualHooks:true})};};_0xd3cax10[_0xbc3d[87]][_0xbc3d[109]]=_0xd3cax10[_0xbc3d[81]][_0xbc3d[61]];var _0xd3cax31=_[_0xbc3d[101]](_[_0xbc3d[83]](_0xd3cax10[_0xbc3d[87]].Phones,_0xbc3d[110]));var _0xd3cax32=[];_0xd3cax31[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax32[_0xbc3d[38]](ContactPhone[_0xbc3d[102]]({where:{phone:_0xd3cax29},defaults:{phone:_0xd3cax29}}))});return _0xd3cax32;})[_0xbc3d[99]]()[_0xbc3d[57]](function(_0xd3cax11){_0xd3cax24=_[_0xbc3d[96]](_0xd3cax11,function(_0xd3cax29){return _0xd3cax29[0]});var _0xd3cax2b=[];var _0xd3cax2c=_[_0xbc3d[101]](_[_0xbc3d[83]](_0xd3cax10[_0xbc3d[87]].Emails,_0xbc3d[100]));_0xd3cax2c[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax2b[_0xbc3d[38]](ContactEmail[_0xbc3d[102]]({where:{email:_0xd3cax29},defaults:{email:_0xd3cax29}}))});return _0xd3cax2b;})[_0xbc3d[99]]()[_0xbc3d[57]](function(_0xd3cax11){_0xd3cax25=_[_0xbc3d[96]](_0xd3cax11,function(_0xd3cax29){return _0xd3cax29[0]});delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[63]];delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[68]];_0xd3cax26=_[_0xbc3d[98]](_0xd3cax10[_0xbc3d[87]][_0xbc3d[97]]);delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[97]];return Contact[_0xbc3d[89]](_0xd3cax10[_0xbc3d[87]]);})[_0xbc3d[57]](function(_0xd3cax27){return [_0xd3cax27,_0xd3cax27[_0xbc3d[95]](_0xd3cax24)]})[_0xbc3d[90]](function(_0xd3cax27){return [_0xd3cax27,_0xd3cax27[_0xbc3d[94]](_0xd3cax25)]})[_0xbc3d[90]](function(_0xd3cax27){var _0xd3cax2a=_[_0xbc3d[93]](_0xd3cax26);return [_0xd3cax27,CustomField[_0xbc3d[84]]({where:{id:_0xd3cax2a}})];})[_0xbc3d[90]](function(_0xd3cax27,_0xd3cax28){_0xd3cax28[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax29[_0xbc3d[91]]={value:_0xd3cax26[String(_0xd3cax29[_0xbc3d[61]])]}});return [_0xd3cax27,_0xd3cax27[_0xbc3d[92]](_0xd3cax28)];})[_0xbc3d[90]](function(_0xd3cax27){return _0xd3cax11[_0xbc3d[46]](201)[_0xbc3d[45]](_0xd3cax27)})[_0xbc3d[47]](function(_0xd3cax1a){console[_0xbc3d[43]](_0xd3cax1a);return _0xd3cax23(_0xd3cax1a);});};exports[_0xbc3d[111]]=function(_0xd3cax10,_0xd3cax11,_0xd3cax23){var _0xd3cax24=[],_0xd3cax25=[],_0xd3cax26={};Tag[_0xbc3d[84]]()[_0xbc3d[57]](function(_0xd3cax2d){var _0xd3cax2e=[];var _0xd3cax2f=_[_0xbc3d[83]](_[_0xbc3d[83]](_0xd3cax2d,_0xbc3d[82]),_0xbc3d[19]);if(_0xd3cax10[_0xbc3d[87]][_0xbc3d[103]]){var _0xd3cax30=_0xd3cax10[_0xbc3d[87]][_0xbc3d[103]][_0xbc3d[105]](_0xbc3d[104]);_0xd3cax30[_0xbc3d[39]](function(_0xd3cax29){if(!_[_0xbc3d[106]](_0xd3cax2d,_0xd3cax29)){_0xd3cax2e[_0xbc3d[38]]({name:_0xd3cax29})}});if(_0xd3cax2e[_0xbc3d[107]]){Tag[_0xbc3d[108]](_0xd3cax2e,{individualHooks:true})};};var _0xd3cax32=[];var _0xd3cax31=_[_0xbc3d[101]](_[_0xbc3d[83]](_0xd3cax10[_0xbc3d[87]].Phones,_0xbc3d[110]));_0xd3cax31[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax32[_0xbc3d[38]](ContactPhone[_0xbc3d[102]]({where:{phone:_0xd3cax29},defaults:{phone:_0xd3cax29}}))});return _0xd3cax32;})[_0xbc3d[99]]()[_0xbc3d[57]](function(_0xd3cax11){_0xd3cax24=_[_0xbc3d[96]](_0xd3cax11,function(_0xd3cax29){return _0xd3cax29[0]});var _0xd3cax2b=[];var _0xd3cax2c=_[_0xbc3d[101]](_[_0xbc3d[83]](_0xd3cax10[_0xbc3d[87]].Emails,_0xbc3d[100]));_0xd3cax2c[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax2b[_0xbc3d[38]](ContactEmail[_0xbc3d[102]]({where:{email:_0xd3cax29},defaults:{email:_0xd3cax29}}))});return _0xd3cax2b;})[_0xbc3d[99]]()[_0xbc3d[57]](function(_0xd3cax11){_0xd3cax25=_[_0xbc3d[96]](_0xd3cax11,function(_0xd3cax29){return _0xd3cax29[0]});delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[63]];delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[68]];_0xd3cax26=_[_0xbc3d[98]](_0xd3cax10[_0xbc3d[87]][_0xbc3d[97]]);delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[97]];delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[73]];var _0xd3cax33=_0xd3cax10[_0xbc3d[87]][_0xbc3d[61]];delete _0xd3cax10[_0xbc3d[87]][_0xbc3d[61]];return Contact[_0xbc3d[74]](_0xd3cax33);})[_0xbc3d[57]](function(_0xd3cax27){return [_0xd3cax27,_0xd3cax27[_0xbc3d[95]](_0xd3cax24)]})[_0xbc3d[90]](function(_0xd3cax27){return [_0xd3cax27,_0xd3cax27[_0xbc3d[94]](_0xd3cax25)]})[_0xbc3d[90]](function(_0xd3cax27){var _0xd3cax2a=_[_0xbc3d[93]](_0xd3cax26);return [_0xd3cax27,CustomField[_0xbc3d[84]]({where:{id:_0xd3cax2a}})];})[_0xbc3d[90]](function(_0xd3cax27,_0xd3cax28){_0xd3cax28[_0xbc3d[39]](function(_0xd3cax29){_0xd3cax29[_0xbc3d[91]]={value:_0xd3cax26[String(_0xd3cax29[_0xbc3d[61]])]}});return [_0xd3cax27,_0xd3cax27[_0xbc3d[92]](_0xd3cax28)];})[_0xbc3d[90]](function(_0xd3cax27){return _0xd3cax27[_0xbc3d[112]](_0xd3cax10[_0xbc3d[87]])})[_0xbc3d[57]](function(_0xd3cax27){return _0xd3cax11[_0xbc3d[46]](200)[_0xbc3d[45]](_0xd3cax27)})[_0xbc3d[47]](function(_0xd3cax1a){console[_0xbc3d[43]](_0xd3cax1a);return handleError(_0xd3cax11,_0xd3cax1a);});};exports[_0xbc3d[113]]=function(_0xd3cax10,_0xd3cax11){Contact[_0xbc3d[74]](_0xd3cax10[_0xbc3d[62]][_0xbc3d[61]])[_0xbc3d[57]](function(_0xd3cax1f){if(!_0xd3cax1f){return _0xd3cax11[_0xbc3d[60]](404)};_0xd3cax1f[_0xbc3d[113]]()[_0xbc3d[57]](function(){return _0xd3cax11[_0xbc3d[60]](204)})[_0xbc3d[47]](function(_0xd3cax1a){return handleError(_0xd3cax11,_0xd3cax1a)});})[_0xbc3d[47]](function(_0xd3cax1a){return handleError(_0xd3cax11,_0xd3cax1a)})};exports[_0xbc3d[114]]=function(_0xd3cax10,_0xd3cax11){Contact[_0xbc3d[113]]({where:{id:_0xd3cax10[_0xbc3d[23]][_0xbc3d[61]]},individualHooks:true})[_0xbc3d[57]](function(){return _0xd3cax11[_0xbc3d[60]](204)})[_0xbc3d[47]](function(_0xd3cax1a){return handleError(_0xd3cax11,_0xd3cax1a)})};function handleError(_0xd3cax11,_0xd3cax1a){return _0xd3cax11[_0xbc3d[46]](500)[_0xbc3d[45]](_0xd3cax1a)}
\ No newline at end of file