6b62b55af40223dbe0452055de808df8338d474e
[motion2.git] / server / components / import / cm / csv2.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 _0xf8dc=['parse','createReadStream','data','rows','hasOwnProperty','trim','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','isNaN','isNumber','includes','agent\x20not\x20exists','email','email\x20wrong\x20format','dateOfBirth','isValid','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','\x20not\x20specified','length','SystemRow','appendFileSync','Abort\x20parser','abort','SystemError','step','duplicates','cm_contacts_','CREATE\x20TABLE\x20','LOAD\x20DATA\x20LOCAL\x20INFILE\x20\x27%s\x27\x20INTO\x20TABLE\x20%s\x20CHARACTER\x20SET\x20UTF8\x20FIELDS\x20TERMINATED\x20BY\x20\x27,\x27\x20ENCLOSED\x20BY\x20\x27\x22\x27\x20LINES\x20TERMINATED\x20BY\x20\x27\x0a\x27\x20IGNORE\x201\x20ROWS\x20(%s)\x20SET\x20id\x20=\x20NULL,\x20ListId\x20=\x20%s,\x20CompanyId\x20=\x20%s,\x20createdAt\x20=\x20\x27%s\x27,\x20updatedAt\x20=\x20\x27%s\x27','isNil',',\x20scheduledAt\x20=\x20NOW()','DROP\x20TABLE\x20','voice_queues_has_cm_lists','voice_queues','voice_queues_has_cm_blacklists','VoiceQueueId','campaigns_has_cm_lists','campaigns','CampaignId','campaigns_has_cm_blacklists','each','then','finish','affectedRows','contact:import:','exit','argv','root','existsSync','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName\x20is\x20mandatory','UserId','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','uncaughtException','path','lodash','papaparse','util','bluebird','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','import','socket.io-emitter','redis','format','YYYY-MM-DD\x20HH:mm:ss','test','field','phone','from','join','where','\x20=\x20','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','cm_contacts.UserId','insert','into','cm_hopper','fromQuery','scheduledat','ContactId','ListId','updatedAt','priority','fields','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId','.id\x20=\x20','cm_contacts.createdAt\x20=\x20?','cm_contacts.phone\x20NOT\x20IN\x20(?)','\x22always\x22','\x22onlyIfOpen\x22','toString','cm_hopper_black','createdAt','select','.CmListId\x20=\x20?','ListId\x20=\x20?','CompanyId','id\x20IN\x20?','MIN(id)','min_id','group','info','Received\x20SIGINT','error','errors','push','message','sequelize','query','spread','catch','main','send','start','binding','socket_timestamp','server/files/tmp','keys','header','writeFileSync'];(function(_0x480bc8,_0x1fac40){var _0x28c245=function(_0x22a049){while(--_0x22a049){_0x480bc8['push'](_0x480bc8['shift']());}};_0x28c245(++_0x1fac40);}(_0xf8dc,0x142));var _0xcf8d=function(_0x513aa5,_0x1fba79){_0x513aa5=_0x513aa5-0x0;var _0x1a1a7c=_0xf8dc[_0x513aa5];return _0x1a1a7c;};'use strict';var fs=require('fs');var path=require(_0xcf8d('0x0'));var _=require(_0xcf8d('0x1'));var Papa=require(_0xcf8d('0x2'));var util=require(_0xcf8d('0x3'));var BPromise=require(_0xcf8d('0x4'));var moment=require('moment');var squel=require(_0xcf8d('0x5'));var Redis=require(_0xcf8d('0x6'));var db=require(_0xcf8d('0x7'))['db'];var config=require(_0xcf8d('0x8'));var logger=require(_0xcf8d('0x9'))(_0xcf8d('0xa'));config['redis']=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xcf8d('0xb'))(new Redis(config[_0xcf8d('0xc')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0xcf8d('0xd')](_0xcf8d('0xe'));function isEmail(_0x474c45){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/[_0xcf8d('0xf')](_0x474c45);}function selectNotIn(_0x10ae95,_0x3154c9,_0x411828,_0x372f93,_0x128ee0){return squel['select']()[_0xcf8d('0x10')](_0xcf8d('0x11'))[_0xcf8d('0x12')](_0x372f93)[_0xcf8d('0x13')](_0x3154c9,null,_0x3154c9+'.id\x20=\x20'+_0x372f93+'.'+_0x411828)[_0xcf8d('0x14')](_0x372f93+'.'+_0x411828+_0xcf8d('0x15')+_0x10ae95+'.'+_0x411828)['where'](_0x3154c9+'.dialCheckDuplicateType\x20IN\x20('+_0x128ee0[_0xcf8d('0x13')]()+')');}function insertCmHopper(_0x2f6f6b,_0x909d97,_0x1b0b73,_0x30a20f,_0x2d155a){var _0x1d0f47=[_0xcf8d('0x16'),_0xcf8d('0x17'),'cm_contacts.id',_0xcf8d('0x18'),_0x909d97+'.'+_0x30a20f,_0xcf8d('0x19'),_0xcf8d('0x1a'),_0xcf8d('0x1b'),_0xcf8d('0x1c'),'\x22'+_0x2d155a+'\x22'];return squel[_0xcf8d('0x1d')]()[_0xcf8d('0x1e')](_0xcf8d('0x1f'))[_0xcf8d('0x20')]([_0xcf8d('0x11'),_0xcf8d('0x21'),_0xcf8d('0x22'),_0xcf8d('0x23'),_0x30a20f,'createdAt',_0xcf8d('0x24'),_0xcf8d('0x25'),'UserId','recallme'],squel['select']()[_0xcf8d('0x26')](_0x1d0f47)[_0xcf8d('0x12')](_0x909d97)['join'](_0xcf8d('0x27'),null,_0xcf8d('0x28')+_0x909d97+_0xcf8d('0x29'))[_0xcf8d('0x13')](_0x1b0b73,null,_0x1b0b73+_0xcf8d('0x2a')+_0x909d97+'.'+_0x30a20f)[_0xcf8d('0x14')](_0x909d97+'.CmListId\x20=\x20?',_0x2f6f6b)['where'](_0xcf8d('0x2b'),NOW)[_0xcf8d('0x14')](_0xcf8d('0x2c'),selectNotIn(_0x909d97,_0x1b0b73,_0x30a20f,_0xcf8d('0x1f'),[_0xcf8d('0x2d'),_0xcf8d('0x2e')]))[_0xcf8d('0x14')](_0xcf8d('0x2c'),selectNotIn(_0x909d97,_0x1b0b73,_0x30a20f,_0xcf8d('0x1f'),[_0xcf8d('0x2d')])))[_0xcf8d('0x2f')]();}function insertCmHopperBlack(_0xd0fe99,_0x135e87,_0x527460,_0x1243d0){var _0x4d4424=[_0xcf8d('0x16'),'cm_contacts.id','cm_contacts.ListId',_0x135e87+'.'+_0x1243d0,'cm_contacts.createdAt','cm_contacts.updatedAt'];return squel[_0xcf8d('0x1d')]()['into'](_0xcf8d('0x30'))[_0xcf8d('0x20')]([_0xcf8d('0x11'),_0xcf8d('0x22'),_0xcf8d('0x23'),_0x1243d0,_0xcf8d('0x31'),_0xcf8d('0x24')],squel[_0xcf8d('0x32')]()[_0xcf8d('0x26')](_0x4d4424)['from'](_0x135e87)[_0xcf8d('0x13')](_0xcf8d('0x27'),null,_0xcf8d('0x28')+_0x135e87+_0xcf8d('0x29'))[_0xcf8d('0x13')](_0x527460,null,_0x527460+_0xcf8d('0x2a')+_0x135e87+'.'+_0x1243d0)[_0xcf8d('0x14')](_0x135e87+_0xcf8d('0x33'),_0xd0fe99)[_0xcf8d('0x14')](_0xcf8d('0x2b'),NOW)[_0xcf8d('0x14')](_0xcf8d('0x2c'),squel['select']()['field'](_0xcf8d('0x11'))[_0xcf8d('0x12')](_0xcf8d('0x30'))['where'](_0xcf8d('0x34'),_0xd0fe99)[_0xcf8d('0x14')](_0x1243d0+'\x20=\x20?',_0x135e87+'.'+_0x1243d0)))[_0xcf8d('0x2f')]();}function insertCmContact(_0x44e571,_0x1e5b3e,_0x4b9400,_0x2dd4c1){var _0x34cfba=_['concat'](_['keys'](_0x2dd4c1),[_0xcf8d('0x23'),_0xcf8d('0x35'),_0xcf8d('0x31'),'updatedAt']);return squel['insert']()[_0xcf8d('0x1e')]('cm_contacts')[_0xcf8d('0x20')](_0x34cfba,squel[_0xcf8d('0x32')]()['fields'](_0x34cfba)['from'](_0x1e5b3e)['where']('('+_0x4b9400['join'](',')+')\x20NOT\x20IN\x20?',squel['select']()[_0xcf8d('0x26')](_0x4b9400)[_0xcf8d('0x12')](_0xcf8d('0x27'))[_0xcf8d('0x14')]('ListId\x20=\x20?',_0x44e571)[_0xcf8d('0x14')]('deletedAt\x20IS\x20NULL'))[_0xcf8d('0x14')](_0xcf8d('0x36'),squel['select']()[_0xcf8d('0x10')](_0xcf8d('0x37'),_0xcf8d('0x38'))['from'](_0x1e5b3e)[_0xcf8d('0x39')](_0x4b9400[_0xcf8d('0x13')](','))))[_0xcf8d('0x2f')]();}function handleStop(){logger[_0xcf8d('0x3a')](_0xcf8d('0x3b'));stopped=!![];}function handleUncaughtException(_0x399a9d){logger[_0xcf8d('0x3c')](_0x399a9d['message']);process['exit'](0x1);}function handleError(_0x2ba84b,_0x25e98e){stats[_0xcf8d('0x3d')][_0xcf8d('0x3e')]({'name':_0x25e98e['code'],'message':_0x25e98e[_0xcf8d('0x3f')],'row':_0x2ba84b});}function handleQuery(_0x45aeea){logger[_0xcf8d('0x3a')](_0x45aeea);return db[_0xcf8d('0x40')][_0xcf8d('0x41')](_0x45aeea)[_0xcf8d('0x42')](function(_0x14146d){results[_0xcf8d('0x3e')](_0x14146d);})[_0xcf8d('0x43')](function(_0x311712){logger['error'](_0x311712[_0xcf8d('0x3f')]);});}function main(_0x436f9b,_0x4fd1f8,_0x380814,_0x41594b){logger[_0xcf8d('0x3a')](_0xcf8d('0x44'),_0x436f9b,JSON['stringify'](_0x4fd1f8));process[_0xcf8d('0x45')](_0xcf8d('0x46'));var _0x32aa54=_0x4fd1f8[_0xcf8d('0x47')];var _0x4628af=_0x4fd1f8[_0xcf8d('0x48')];var _0xfd06fb=path[_0xcf8d('0x13')](config['root'],_0xcf8d('0x49'),_0x4628af+'.csv');var _0x56c2e5=_[_0xcf8d('0x4a')](_0x32aa54)[_0xcf8d('0x13')]();logger[_0xcf8d('0x3a')](_0xcf8d('0x4b'),_0x56c2e5);fs[_0xcf8d('0x4c')](_0xfd06fb,_0x56c2e5+'\x0a');Papa[_0xcf8d('0x4d')](fs[_0xcf8d('0x4e')](_0x436f9b),{'header':!![],'skipEmptyLines':!![],'step':function(_0x24bd05,_0x56c503){try{for(var _0x4d6e6d=0x0,_0x52a43e=[];_0x4d6e6d<_0x24bd05[_0xcf8d('0x4f')]['length'];_0x4d6e6d++){stats[_0xcf8d('0x50')]+=0x1;if(_0x24bd05[_0xcf8d('0x3d')][_0x4d6e6d]){handleError(_0x24bd05[_0xcf8d('0x4f')][_0x4d6e6d],_0x24bd05[_0xcf8d('0x3d')][_0x4d6e6d]);}else{var _0x3fa16e=[];for(var _0x266af4 in _0x32aa54){if(_0x32aa54[_0xcf8d('0x51')](_0x266af4)){if(_0x24bd05[_0xcf8d('0x4f')][_0x4d6e6d][_0x32aa54[_0x266af4]]){var _0x5794dd=_[_0xcf8d('0x52')](_0x24bd05[_0xcf8d('0x4f')][_0x4d6e6d][_0x32aa54[_0x266af4]]['replace'](/"/g,'\x27'));switch(_0x266af4){case _0xcf8d('0x21'):var _0x1731c0=moment(_0x5794dd,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x1731c0['isValid']()){_0x52a43e[_0xcf8d('0x3e')]('\x22'+_0x5794dd+'\x22');}else{_0x3fa16e[_0xcf8d('0x3e')](_0xcf8d('0x53'));}break;case _0xcf8d('0x25'):var _0x1f2783=parseInt(_0x5794dd);_0x5794dd=_[_0xcf8d('0x54')](_0x1f2783)||_0x1f2783<0x0||_0x1f2783>0x4?_0x41594b?0x3:0x2:_0x1f2783;_0x52a43e['push']('\x22'+_0x5794dd+'\x22');break;case'UserId':var _0x46dbde=parseInt(_0x5794dd);if(_[_0xcf8d('0x55')](_0x46dbde)&&_[_0xcf8d('0x56')](_0x380814,_0x46dbde)){_0x52a43e[_0xcf8d('0x3e')]('\x22'+_0x46dbde+'\x22');}else{_0x3fa16e[_0xcf8d('0x3e')](_0xcf8d('0x57'));}break;case _0xcf8d('0x58'):if(isEmail(_0x5794dd)){_0x52a43e[_0xcf8d('0x3e')]('\x22'+_0x5794dd+'\x22');}else{_0x3fa16e[_0xcf8d('0x3e')](_0xcf8d('0x59'));}break;case _0xcf8d('0x5a'):var _0x3bac5b=moment(_0x5794dd,'YYYY-MM-DD',!![]);if(_0x3bac5b[_0xcf8d('0x5b')]()){_0x52a43e[_0xcf8d('0x3e')]('\x22'+_0x5794dd+'\x22');}else{_0x3fa16e['push'](_0xcf8d('0x5c'));}break;default:_0x52a43e['push']('\x22'+_0x5794dd+'\x22');}}else{switch(_0x266af4){case'firstName':case _0xcf8d('0x11'):_0x3fa16e[_0xcf8d('0x3e')](_0x266af4+_0xcf8d('0x5d'));break;default:_0x52a43e[_0xcf8d('0x3e')]('\x22\x22');}}}}if(_0x3fa16e[_0xcf8d('0x5e')]){handleError(_0x24bd05['data'][_0x4d6e6d],{'code':_0xcf8d('0x5f'),'message':_0x3fa16e[_0xcf8d('0x13')]()});}else{fs[_0xcf8d('0x60')](_0xfd06fb,_0x52a43e[_0xcf8d('0x13')]()+'\x0a');}_0x52a43e=[];}if(!(stats['rows']%0xc8)){socket['emit']('contact:import:'+_0x4628af,stats);stats[_0xcf8d('0x3d')]=[];}}if(stopped){logger[_0xcf8d('0x3a')](_0xcf8d('0x61'));_0x56c503[_0xcf8d('0x62')]();}}catch(_0x2deecf){handleError(_0x24bd05['data'][_0x4d6e6d],{'code':_0xcf8d('0x63'),'message':_0x2deecf[_0xcf8d('0x3f')]});logger['error'](_0xcf8d('0x64'),_0x2deecf[_0xcf8d('0x3f')]);}},'complete':function(){try{var _0x9155b5=[];var _0x170d47=_0xcf8d('0x27');if(_0x4fd1f8[_0xcf8d('0x65')]&&_0x4fd1f8[_0xcf8d('0x65')][_0xcf8d('0x5e')]){_0x170d47=_0xcf8d('0x66')+_0x4628af;_0x9155b5[_0xcf8d('0x3e')](_0xcf8d('0x67')+_0x170d47+'\x20LIKE\x20cm_contacts;');}var _0x96a7=util[_0xcf8d('0xd')](_0xcf8d('0x68'),_0xfd06fb,_0x170d47,_0x56c2e5,_0x4fd1f8[_0xcf8d('0x23')],_0x4fd1f8[_0xcf8d('0x35')]||null,NOW,NOW);if(_[_0xcf8d('0x69')](_0x32aa54[_0xcf8d('0x21')])){_0x96a7+=_0xcf8d('0x6a');}_0x9155b5[_0xcf8d('0x3e')](_0x96a7);if(_0x4fd1f8[_0xcf8d('0x65')]&&_0x4fd1f8[_0xcf8d('0x65')][_0xcf8d('0x5e')]){_0x9155b5[_0xcf8d('0x3e')](insertCmContact(_0x4fd1f8[_0xcf8d('0x23')],_0x170d47,_0x4fd1f8['duplicates'],_0x32aa54));_0x9155b5['push'](_0xcf8d('0x6b')+_0x170d47+';');}_0x9155b5[_0xcf8d('0x3e')](insertCmHopper(_0x4fd1f8[_0xcf8d('0x23')],_0xcf8d('0x6c'),_0xcf8d('0x6d'),'VoiceQueueId',_0x41594b));_0x9155b5[_0xcf8d('0x3e')](insertCmHopperBlack(_0x4fd1f8[_0xcf8d('0x23')],_0xcf8d('0x6e'),_0xcf8d('0x6d'),_0xcf8d('0x6f')));_0x9155b5[_0xcf8d('0x3e')](insertCmHopper(_0x4fd1f8[_0xcf8d('0x23')],_0xcf8d('0x70'),_0xcf8d('0x71'),_0xcf8d('0x72'),_0x41594b));_0x9155b5[_0xcf8d('0x3e')](insertCmHopperBlack(_0x4fd1f8['ListId'],_0xcf8d('0x73'),_0xcf8d('0x71'),_0xcf8d('0x72')));BPromise[_0xcf8d('0x74')](_0x9155b5,handleQuery)[_0xcf8d('0x75')](function(_0x5eefdf){stats[_0xcf8d('0x76')]=!![];stats[_0xcf8d('0x77')]=_0x4fd1f8[_0xcf8d('0x65')]&&_0x4fd1f8[_0xcf8d('0x65')]['length']?results[0x2][_0xcf8d('0x77')]:results[0x0][_0xcf8d('0x77')];socket['emit'](_0xcf8d('0x78')+_0x4628af,stats);fs['unlink'](_0x436f9b);fs['unlink'](_0xfd06fb);process['exit'](0x0);})[_0xcf8d('0x43')](function(_0x10d931){logger[_0xcf8d('0x3c')](_0x10d931[_0xcf8d('0x3f')]);process[_0xcf8d('0x79')](0x1);});}catch(_0x3e3b32){logger[_0xcf8d('0x3c')]('complete',_0x3e3b32[_0xcf8d('0x3f')]);process['exit'](0x1);}},'error':function(_0x5edba3,_0x5684c6,_0x3696f8,_0x42eb0f){throw new Error(_0x42eb0f);}});}function validate(){if(process[_0xcf8d('0x7a')]&&process[_0xcf8d('0x7a')][_0xcf8d('0x5e')]<0x4){throw new Error('arguments\x20<filename>\x20<parameters>\x20<agents>');}var _0x38395d=path[_0xcf8d('0x13')](config[_0xcf8d('0x7b')],'server/files/tmp',process[_0xcf8d('0x7a')][0x2]);if(!fs[_0xcf8d('0x7c')](_0x38395d)){throw new Error('file\x20doesn\x27t\x20exists');}var _0x382dbd={};try{_0x382dbd=JSON[_0xcf8d('0x4d')](process[_0xcf8d('0x7a')][0x3]);if(!_0x382dbd['binding']){throw new Error(_0xcf8d('0x7d'));}if(!_0x382dbd[_0xcf8d('0x47')][_0xcf8d('0x11')]){throw new Error(_0xcf8d('0x7e'));}if(!_0x382dbd[_0xcf8d('0x47')]['firstName']){throw new Error(_0xcf8d('0x7f'));}var _0x4043f2=0x0;if(_0x382dbd[_0xcf8d('0x47')][_0xcf8d('0x80')]){_0x4043f2=0x1;}if(!_0x382dbd[_0xcf8d('0x23')]){throw new Error(_0xcf8d('0x81'));}}catch(_0x104d9a){throw new Error(_0xcf8d('0x82'));}var _0xfd2f8c=[];try{_0xfd2f8c=_[_0xcf8d('0x83')](JSON['parse'](process[_0xcf8d('0x7a')][0x4]),'id');}catch(_0x43e26f){logger[_0xcf8d('0x3a')]('No\x20agent\x20available');}main(_0x38395d,_0x382dbd,_0xfd2f8c,_0x4043f2);}validate();process['on']('SIGINT',handleStop);process['on'](_0xcf8d('0x84'),handleUncaughtException);