ab18713bc2cecfabe7d6c79599fae1eefb822eda
[motion2.git] / server / api / cmHopper / cmHopper.controller.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x3da0=['sox','ejs','squel','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','json','undefined','count','offset','limit','set','Content-Range','apply','reject','save','update','then','end','error','stack','name','send','merge','body','contact','message','interaction','account','index','map','CmHopper','rawAttributes','fieldName','key','model','query','keys','filters','intersection','concat','$and','$or','$gt','$gte','$lte','$eq','$between','$notIn','$like','$notLike','$iLike','$notILike','$overlap','$contained','$any','attributes','length','nolimit','order','sort','where','filter','type','options','includeAll','include','findAll','show','fields','find','catch','create','params','describe','destroy','VoiceQueueId','VoiceQueue','Campaign','CampaignId','omit','createdAt','updatedAt','state','deleted','campaign','membername','UserId','user','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','campaigntype','queue','ivr','CmContact','ContactId','firstName','isNil','calleridname','lastName','finally','CmHopperFinal','status','outbound','preview','dialOrderByScheduledAt','sequelize','direction','prev','isEmpty','priority','ASC','DESC','literal','COALESCE(CmHopper.UserId,\x200)\x20ASC','hopperIds','COALESCE(CmHopper.UserId,\x200)\x20DESC','findOne','scheduledat','LOCK','Contact','CmCompany','Company','CmList','List','dialActive','getVoiceQueues','CmHopper,\x20%s,\x20%s,\x20%s','getOpenContacts','entity\x20not\x20found','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util'];(function(_0x17fb85,_0x46df23){var _0x9571b7=function(_0x4a7838){while(--_0x4a7838){_0x17fb85['push'](_0x17fb85['shift']());}};_0x9571b7(++_0x46df23);}(_0x3da0,0x124));var _0x03da=function(_0x5e89d8,_0x30a21a){_0x5e89d8=_0x5e89d8-0x0;var _0x5c1153=_0x3da0[_0x5e89d8];return _0x5c1153;};'use strict';var emlformat=require(_0x03da('0x0'));var rimraf=require(_0x03da('0x1'));var zipdir=require(_0x03da('0x2'));var jsonpatch=require(_0x03da('0x3'));var rp=require('request-promise');var moment=require(_0x03da('0x4'));var BPromise=require(_0x03da('0x5'));var Mustache=require(_0x03da('0x6'));var util=require(_0x03da('0x7'));var path=require('path');var sox=require(_0x03da('0x8'));var csv=require('to-csv');var ejs=require(_0x03da('0x9'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0x03da('0xa'));var crypto=require('crypto');var jsforce=require(_0x03da('0xb'));var deskjs=require(_0x03da('0xc'));var toCsv=require(_0x03da('0xd'));var querystring=require(_0x03da('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x03da('0xf'));var qs=require(_0x03da('0x10'));var as=require(_0x03da('0x11'));var hardwareService=require(_0x03da('0x12'));var logger=require('../../config/logger')(_0x03da('0x13'));var utils=require(_0x03da('0x14'));var config=require(_0x03da('0x15'));var licenseUtil=require('../../config/license/util');var db=require(_0x03da('0x16'))['db'];function respondWithStatusCode(_0x170447,_0x5125e7){_0x5125e7=_0x5125e7||0xcc;return function(_0x37110c){if(_0x37110c){return _0x170447[_0x03da('0x17')](_0x5125e7);}return _0x170447['status'](_0x5125e7)['end']();};}function respondWithResult(_0x1e76fe,_0x41a6f1){_0x41a6f1=_0x41a6f1||0xc8;return function(_0x3f6a3d){if(_0x3f6a3d){return _0x1e76fe['status'](_0x41a6f1)[_0x03da('0x18')](_0x3f6a3d);}};}function respondWithFilteredResult(_0x566cef,_0x348ac0){return function(_0x1d976b){if(_0x1d976b){var _0x528dd7=typeof _0x348ac0['offset']==='undefined'&&typeof _0x348ac0['limit']===_0x03da('0x19');var _0x15887b=_0x1d976b[_0x03da('0x1a')];var _0x1bfdcf=_0x528dd7?0x0:_0x348ac0[_0x03da('0x1b')];var _0x793fd4=_0x528dd7?_0x1d976b['count']:_0x348ac0[_0x03da('0x1b')]+_0x348ac0[_0x03da('0x1c')];var _0x981b39;if(_0x793fd4>=_0x15887b){_0x793fd4=_0x15887b;_0x981b39=0xc8;}else{_0x981b39=0xce;}_0x566cef['status'](_0x981b39);return _0x566cef[_0x03da('0x1d')](_0x03da('0x1e'),_0x1bfdcf+'-'+_0x793fd4+'/'+_0x15887b)[_0x03da('0x18')](_0x1d976b);}return null;};}function patchUpdates(_0x1d4d4e){return function(_0x5a6ccc){try{jsonpatch[_0x03da('0x1f')](_0x5a6ccc,_0x1d4d4e,!![]);}catch(_0x5ac695){return BPromise[_0x03da('0x20')](_0x5ac695);}return _0x5a6ccc[_0x03da('0x21')]();};}function saveUpdates(_0x8cf542,_0x248c4d){return function(_0x494dea){if(_0x494dea){return _0x494dea[_0x03da('0x22')](_0x8cf542)[_0x03da('0x23')](function(_0xe5c9b5){return _0xe5c9b5;});}return null;};}function removeEntity(_0x551541,_0x38dcdc){return function(_0x2f879e){if(_0x2f879e){return _0x2f879e['destroy']()['then'](function(){_0x551541['status'](0xcc)[_0x03da('0x24')]();});}};}function handleEntityNotFound(_0x13655a,_0x69642f){return function(_0x40ea10){if(!_0x40ea10){_0x13655a[_0x03da('0x17')](0x194);}return _0x40ea10;};}function handleError(_0x5f4123,_0x4a4518){_0x4a4518=_0x4a4518||0x1f4;return function(_0x52abf6){logger[_0x03da('0x25')](_0x52abf6[_0x03da('0x26')]);if(_0x52abf6[_0x03da('0x27')]){delete _0x52abf6[_0x03da('0x27')];}_0x5f4123['status'](_0x4a4518)[_0x03da('0x28')](_0x52abf6);};}function getMustacheRender(_0x5f02c6,_0x1ad66c){return Mustache['render'](_0x5f02c6,_[_0x03da('0x29')](_0x1ad66c[_0x03da('0x2a')],{'contact':_0x1ad66c[_0x03da('0x2b')],'message':_0x1ad66c[_0x03da('0x2c')],'agent':_0x1ad66c['agent'],'interaction':_0x1ad66c[_0x03da('0x2d')],'account':_0x1ad66c[_0x03da('0x2e')]}))||'';}exports[_0x03da('0x2f')]=function(_0x38b784,_0x45ee44){var _0x46b871={},_0x575387={},_0x4fb43e={'count':0x0,'rows':[]};var _0xe644cc=_[_0x03da('0x30')](db[_0x03da('0x31')][_0x03da('0x32')],function(_0x1daa06){return{'name':_0x1daa06[_0x03da('0x33')],'type':_0x1daa06['type'][_0x03da('0x34')]};});_0x575387[_0x03da('0x35')]=_[_0x03da('0x30')](_0xe644cc,_0x03da('0x27'));_0x575387[_0x03da('0x36')]=_[_0x03da('0x37')](_0x38b784[_0x03da('0x36')]);_0x575387[_0x03da('0x38')]=_[_0x03da('0x39')](_0x575387[_0x03da('0x35')],_0x575387[_0x03da('0x36')]);_0x575387[_0x03da('0x38')]=_[_0x03da('0x3a')](_0x575387['filters'],[_0x03da('0x3b'),_0x03da('0x3c'),_0x03da('0x3d'),_0x03da('0x3e'),'$lt',_0x03da('0x3f'),'$ne',_0x03da('0x40'),'$not',_0x03da('0x41'),'$notBetween','$in',_0x03da('0x42'),_0x03da('0x43'),_0x03da('0x44'),_0x03da('0x45'),_0x03da('0x46'),_0x03da('0x43'),_0x03da('0x47'),'$contains',_0x03da('0x48'),_0x03da('0x49')]);_0x46b871[_0x03da('0x4a')]=_[_0x03da('0x39')](_0x575387[_0x03da('0x35')],qs['fields'](_0x38b784[_0x03da('0x36')]['fields']));_0x46b871['attributes']=_0x46b871['attributes'][_0x03da('0x4b')]?_0x46b871[_0x03da('0x4a')]:_0x575387[_0x03da('0x35')];if(!_0x38b784[_0x03da('0x36')]['hasOwnProperty'](_0x03da('0x4c'))){_0x46b871[_0x03da('0x1c')]=qs['limit'](_0x38b784['query'][_0x03da('0x1c')]);_0x46b871['offset']=qs['offset'](_0x38b784[_0x03da('0x36')][_0x03da('0x1b')]);}_0x46b871[_0x03da('0x4d')]=qs[_0x03da('0x4e')](_0x38b784['query']['sort']);_0x46b871[_0x03da('0x4f')]=qs[_0x03da('0x38')](_['pick'](_0x38b784[_0x03da('0x36')],_0x575387['filters']),_0xe644cc);if(_0x38b784['query'][_0x03da('0x50')]){_0x46b871[_0x03da('0x4f')]=_[_0x03da('0x29')](_0x46b871[_0x03da('0x4f')],{'$or':_[_0x03da('0x30')](_0xe644cc,function(_0x5936de){if(_0x5936de[_0x03da('0x51')]!=='VIRTUAL'){var _0x225aa6={};_0x225aa6[_0x5936de[_0x03da('0x27')]]={'$like':'%'+_0x38b784[_0x03da('0x36')][_0x03da('0x50')]+'%'};return _0x225aa6;}})});}_0x46b871=_[_0x03da('0x29')]({},_0x46b871,_0x38b784[_0x03da('0x52')]);var _0x5f2cd9={'where':_0x46b871[_0x03da('0x4f')]};return db[_0x03da('0x31')][_0x03da('0x1a')](_0x5f2cd9)[_0x03da('0x23')](function(_0x51e367){_0x4fb43e[_0x03da('0x1a')]=_0x51e367;if(_0x38b784[_0x03da('0x36')][_0x03da('0x53')]){_0x46b871[_0x03da('0x54')]=[{'all':!![]}];}return db[_0x03da('0x31')][_0x03da('0x55')](_0x46b871);})[_0x03da('0x23')](function(_0x99202e){_0x4fb43e['rows']=_0x99202e;return _0x4fb43e;})[_0x03da('0x23')](respondWithFilteredResult(_0x45ee44,_0x46b871))['catch'](handleError(_0x45ee44,null));};exports[_0x03da('0x56')]=function(_0x123262,_0x190fda){var _0x24eeb3={'raw':!![],'where':{'id':_0x123262['params']['id']}},_0x24ed34={};_0x24ed34['model']=_[_0x03da('0x37')](db[_0x03da('0x31')][_0x03da('0x32')]);_0x24ed34['query']=_['keys'](_0x123262[_0x03da('0x36')]);_0x24ed34['filters']=_[_0x03da('0x39')](_0x24ed34['model'],_0x24ed34['query']);_0x24eeb3[_0x03da('0x4a')]=_[_0x03da('0x39')](_0x24ed34['model'],qs[_0x03da('0x57')](_0x123262[_0x03da('0x36')][_0x03da('0x57')]));_0x24eeb3['attributes']=_0x24eeb3[_0x03da('0x4a')][_0x03da('0x4b')]?_0x24eeb3[_0x03da('0x4a')]:_0x24ed34[_0x03da('0x35')];if(_0x123262['query']['includeAll']){_0x24eeb3[_0x03da('0x54')]=[{'all':!![]}];}_0x24eeb3=_['merge']({},_0x24eeb3,_0x123262[_0x03da('0x52')]);return db[_0x03da('0x31')][_0x03da('0x58')](_0x24eeb3)[_0x03da('0x23')](handleEntityNotFound(_0x190fda,null))[_0x03da('0x23')](respondWithResult(_0x190fda,null))[_0x03da('0x59')](handleError(_0x190fda,null));};exports[_0x03da('0x5a')]=function(_0xbe2a3,_0x117b28){return db[_0x03da('0x31')]['create'](_0xbe2a3['body'],{})[_0x03da('0x23')](respondWithResult(_0x117b28,0xc9))[_0x03da('0x59')](handleError(_0x117b28,null));};exports[_0x03da('0x22')]=function(_0x338673,_0x545495){if(_0x338673[_0x03da('0x2a')]['id']){delete _0x338673[_0x03da('0x2a')]['id'];}return db[_0x03da('0x31')][_0x03da('0x58')]({'where':{'id':_0x338673[_0x03da('0x5b')]['id']}})[_0x03da('0x23')](handleEntityNotFound(_0x545495,null))['then'](saveUpdates(_0x338673[_0x03da('0x2a')],null))['then'](respondWithResult(_0x545495,null))[_0x03da('0x59')](handleError(_0x545495,null));};exports['describe']=function(_0x14e93c,_0x693942){return db[_0x03da('0x31')][_0x03da('0x5c')]()[_0x03da('0x23')](respondWithResult(_0x693942,null))[_0x03da('0x59')](handleError(_0x693942,null));};exports[_0x03da('0x5d')]=function(_0x52228e,_0x238b7c){var _0x50fd1c;return db['CmHopper']['find']({'where':{'id':_0x52228e[_0x03da('0x5b')]['id']}})[_0x03da('0x23')](handleEntityNotFound(_0x238b7c,null))[_0x03da('0x23')](function(_0x7cae33){if(_0x7cae33){return _0x7cae33[_0x03da('0x5d')]()['then'](function(_0x33afae){return _0x33afae;});}})['then'](function(_0x42b7a7){_0x50fd1c=_0x42b7a7;if(_0x42b7a7){if(_0x42b7a7[_0x03da('0x5e')]||_0x42b7a7['CampaignId']){return db[_0x42b7a7['VoiceQueueId']?_0x03da('0x5f'):_0x03da('0x60')][_0x03da('0x58')]({'where':{'id':_0x42b7a7[_0x03da('0x5e')]?_0x42b7a7['VoiceQueueId']:_0x42b7a7[_0x03da('0x61')]},'attributes':['id','name'],'raw':!![]});}}})[_0x03da('0x23')](function(_0xd5090e){var _0x5ab720={};if(_0xd5090e){_[_0x03da('0x29')](_0x5ab720,_[_0x03da('0x62')](_0x50fd1c['dataValues'],[_0x03da('0x63'),_0x03da('0x64'),'id']));_0x5ab720[_0x03da('0x65')]=0x15;_0x5ab720['statedesc']=_0x03da('0x66');_0x5ab720[_0x03da('0x67')]=_0xd5090e[_0x03da('0x27')];_0x5ab720[_0x03da('0x68')]=_0x52228e['user']['name'];_0x5ab720[_0x03da('0x69')]=_0x52228e[_0x03da('0x6a')]['id'];_0x5ab720[_0x03da('0x66')]=!![];_0x5ab720[_0x03da('0x6b')]=moment()[_0x03da('0x6c')](_0x03da('0x6d'));_0x5ab720[_0x03da('0x6e')]=_0x50fd1c['phone'];_0x5ab720[_0x03da('0x6f')]=_0x50fd1c[_0x03da('0x5e')]?_0x03da('0x70'):_0x03da('0x71');return db[_0x03da('0x72')]['find']({'where':{'id':_0x5ab720[_0x03da('0x73')]},'attributes':[_0x03da('0x74'),'lastName']})[_0x03da('0x23')](function(_0x2e544b){if(!_[_0x03da('0x75')](_0x238b7c)&&!_[_0x03da('0x75')](_0x2e544b[_0x03da('0x74')])){_0x5ab720[_0x03da('0x76')]=_0x2e544b[_0x03da('0x74')];if(!_[_0x03da('0x75')](_0x2e544b['lastName'])){_0x5ab720['calleridname']+='\x20'+_0x2e544b[_0x03da('0x77')];}}})[_0x03da('0x78')](function(){return db[_0x03da('0x79')][_0x03da('0x5a')](_0x5ab720);});}})['then'](function(){return _0x238b7c[_0x03da('0x7a')](0xcc)['end']();})[_0x03da('0x59')](handleError(_0x238b7c,null));};exports['getPreview']=function(_0x3becc1,_0x1fbe50,_0x40b4b3){var _0x5712a8=[];return db[_0x03da('0x72')][_0x03da('0x5c')]()['then'](function(_0x35668c){_0x5712a8=_[_0x03da('0x37')](_0x35668c);return _0x3becc1[_0x03da('0x6a')]['getVoiceQueues']({'where':{'type':_0x03da('0x7b'),'dialActive':!![],'dialMethod':_0x03da('0x7c')},'attributes':['id',_0x03da('0x7d')],'raw':!![]});})['then'](function(_0x3dda76){if(_0x3dda76&&_0x3dda76[_0x03da('0x4b')]){return db[_0x03da('0x7e')]['transaction'](function(_0x3208ea){var _0x2293ff={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x03da('0x6c')](_0x03da('0x6d'))},'VoiceQueueId':{'$in':_[_0x03da('0x30')](_0x3dda76,'id')},'$or':[{'UserId':null},{'UserId':_0x3becc1[_0x03da('0x6a')]['id']}]};var _0x37d942=[];if(_0x3becc1['body'][_0x03da('0x7f')]&&_0x3becc1[_0x03da('0x2a')][_0x03da('0x7f')]===_0x03da('0x80')){if(!_[_0x03da('0x81')](_0x3becc1[_0x03da('0x2a')]['hopperIds'])){_0x2293ff['id']={'$in':_0x3becc1[_0x03da('0x2a')]['hopperIds']};}_0x37d942=[[_0x03da('0x82'),_0x03da('0x83')],['scheduledAt',_0x3dda76[0x0][_0x03da('0x7d')]===_0x03da('0x83')?_0x03da('0x84'):_0x03da('0x83')],db[_0x03da('0x7e')][_0x03da('0x85')](_0x03da('0x86')),['id',_0x03da('0x84')]];}else{if(!_[_0x03da('0x81')](_0x3becc1['body']['hopperIds'])){_0x2293ff['id']={'$notIn':_0x3becc1[_0x03da('0x2a')][_0x03da('0x87')]};}_0x37d942=[[_0x03da('0x82'),'DESC'],['scheduledAt',_0x3dda76[0x0][_0x03da('0x7d')]],db['sequelize']['literal'](_0x03da('0x88')),['id',_0x03da('0x83')]];}return db['CmHopper'][_0x03da('0x89')]({'attributes':['id',_0x03da('0x8a')],'where':_0x2293ff,'order':_0x37d942,'transaction':_0x3208ea,'lock':_0x3208ea[_0x03da('0x8b')]['UPDATE'],'include':[{'model':db['CmContact'],'as':_0x03da('0x8c'),'attributes':_0x5712a8,'include':[{'model':db[_0x03da('0x8d')],'as':_0x03da('0x8e'),'attributes':['id',_0x03da('0x27')]}]},{'model':db[_0x03da('0x8f')],'as':_0x03da('0x90'),'attributes':['id','name']},{'model':db[_0x03da('0x5f')],'as':'Queue','attributes':['id',_0x03da('0x27'),_0x03da('0x91')]}]})['then'](function(_0x26118d){if(_0x26118d){return _0x26118d['update']({'UserId':_0x3becc1[_0x03da('0x6a')]['id']},{'transaction':_0x3208ea});}});});}})[_0x03da('0x23')](handleEntityNotFound(_0x1fbe50,null))[_0x03da('0x23')](respondWithResult(_0x1fbe50,null))['catch'](handleError(_0x1fbe50,null));};exports['getOpenContacts']=function(_0x16f75d,_0x26e1af,_0x3dcbd7){return _0x16f75d['user'][_0x03da('0x92')]({'where':{'type':_0x03da('0x7b'),'dialActive':!![],'dialMethod':_0x03da('0x7c')},'attributes':['id'],'raw':!![]})[_0x03da('0x23')](function(_0x402acd){if(_0x402acd&&_0x402acd[_0x03da('0x4b')]){return db[_0x03da('0x31')][_0x03da('0x1a')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x03da('0x6c')]('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_[_0x03da('0x30')](_0x402acd,'id')},'$or':[{'UserId':null},{'UserId':_0x16f75d['user']['id']}]}});}return 0x0;})['then'](function(_0x47a268){if(!_[_0x03da('0x75')](_0x47a268)&&_['isNumber'](_0x47a268)){return _0x26e1af['status'](0xc8)[_0x03da('0x18')]({'contacts':_0x47a268});}else{logger[_0x03da('0x25')](_0x03da('0x93'),_0x03da('0x94'),0x194,_0x03da('0x95'));_0x26e1af['sendStatus'](0x194);}})['catch'](handleError(_0x26e1af,null));};