Built motion from commit f7863d46.|2.5.41
[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 _0x6fbb=['fields','from','cm_contacts','.CmListId','.CmListId\x20=\x20?','cm_contacts.createdAt\x20=\x20?','\x22always\x22','\x22onlyIfOpen\x22','cm_hopper','toString','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','insert','into','cm_hopper_black','updatedAt','cm_contacts.ListId\x20=\x20','cm_contacts.phone\x20NOT\x20IN\x20(?)','ListId\x20=\x20?','concat','keys','CompanyId','createdAt',')\x20NOT\x20IN\x20?','deletedAt\x20IS\x20NULL','id\x20IN\x20?','MIN(id)','min_id','group','Received\x20SIGINT','message','exit','info','sequelize','query','spread','push','catch','error','main','stringify','send','start','binding','socket_timestamp','root','server/files/tmp','header','writeFileSync','parse','data','rows','errors','hasOwnProperty','trim','replace','scheduledat','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','priority','isNumber','email\x20wrong\x20format','dateOfBirth','YYYY-MM-DD','isValid','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','firstName','\x20not\x20specified','length','SystemRow','appendFileSync','emit','Abort\x20parser','abort','SystemError','step','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()','duplicates','DROP\x20TABLE\x20','voice_queues_has_cm_lists','VoiceQueueId','voice_queues_has_cm_blacklists','campaigns_has_cm_lists','campaigns','CampaignId','campaigns_has_cm_blacklists','each','then','affectedRows','unlink','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','existsSync','file\x20doesn\x27t\x20exists','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','No\x20agent\x20available','papaparse','bluebird','moment','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','redis','defaults','localhost','socket.io-emitter','format','test','field','phone','join','.id\x20=\x20','where','\x20=\x20','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.id','cm_contacts.priority','fromQuery','ContactId','ListId','UserId','recallme','select'];(function(_0x40d719,_0x4ed66c){var _0x29812b=function(_0x1d912a){while(--_0x1d912a){_0x40d719['push'](_0x40d719['shift']());}};_0x29812b(++_0x4ed66c);}(_0x6fbb,0xee));var _0xb6fb=function(_0xf3b53f,_0x55b917){_0xf3b53f=_0xf3b53f-0x0;var _0x8b238=_0x6fbb[_0xf3b53f];return _0x8b238;};'use strict';var fs=require('fs');var path=require('path');var _=require('lodash');var Papa=require(_0xb6fb('0x0'));var util=require('util');var BPromise=require(_0xb6fb('0x1'));var moment=require(_0xb6fb('0x2'));var squel=require(_0xb6fb('0x3'));var Redis=require(_0xb6fb('0x4'));var db=require(_0xb6fb('0x5'))['db'];var config=require(_0xb6fb('0x6'));var logger=require(_0xb6fb('0x7'))('import');config[_0xb6fb('0x8')]=_[_0xb6fb('0x9')](config[_0xb6fb('0x8')],{'host':_0xb6fb('0xa'),'port':0x18eb});var socket=require(_0xb6fb('0xb'))(new Redis(config[_0xb6fb('0x8')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0xb6fb('0xc')]('YYYY-MM-DD\x20HH:mm:ss');function isEmail(_0x5994fd){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))*$/[_0xb6fb('0xd')](_0x5994fd);}function selectNotIn(_0x23ce59,_0x18e1c2,_0x4edf45,_0x3ce0ba,_0x203f6b){return squel['select']()[_0xb6fb('0xe')](_0xb6fb('0xf'))['from'](_0x3ce0ba)[_0xb6fb('0x10')](_0x18e1c2,null,_0x18e1c2+_0xb6fb('0x11')+_0x3ce0ba+'.'+_0x4edf45)[_0xb6fb('0x12')](_0x3ce0ba+'.'+_0x4edf45+_0xb6fb('0x13')+_0x23ce59+'.'+_0x4edf45)[_0xb6fb('0x12')](_0x18e1c2+'.dialCheckDuplicateType\x20IN\x20('+_0x203f6b[_0xb6fb('0x10')]()+')');}function insertCmHopper(_0x247694,_0x512934,_0x37d52a,_0x31944b,_0x11c7fa){var _0x7c4923=[_0xb6fb('0x14'),_0xb6fb('0x15'),_0xb6fb('0x16'),'cm_contacts.ListId',_0x512934+'.'+_0x31944b,'cm_contacts.createdAt','cm_contacts.updatedAt',_0xb6fb('0x17'),'cm_contacts.UserId','\x22'+_0x11c7fa+'\x22'];return squel['insert']()['into']('cm_hopper')[_0xb6fb('0x18')]([_0xb6fb('0xf'),'scheduledat',_0xb6fb('0x19'),_0xb6fb('0x1a'),_0x31944b,'createdAt','updatedAt','priority',_0xb6fb('0x1b'),_0xb6fb('0x1c')],squel[_0xb6fb('0x1d')]()[_0xb6fb('0x1e')](_0x7c4923)[_0xb6fb('0x1f')](_0x512934)[_0xb6fb('0x10')](_0xb6fb('0x20'),null,'cm_contacts.ListId\x20=\x20'+_0x512934+_0xb6fb('0x21'))[_0xb6fb('0x10')](_0x37d52a,null,_0x37d52a+_0xb6fb('0x11')+_0x512934+'.'+_0x31944b)[_0xb6fb('0x12')](_0x512934+_0xb6fb('0x22'),_0x247694)[_0xb6fb('0x12')](_0xb6fb('0x23'),NOW)['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x512934,_0x37d52a,_0x31944b,'cm_hopper',[_0xb6fb('0x24'),_0xb6fb('0x25')]))[_0xb6fb('0x12')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x512934,_0x37d52a,_0x31944b,_0xb6fb('0x26'),[_0xb6fb('0x24')])))[_0xb6fb('0x27')]();}function insertCmHopperBlack(_0x4c4c8d,_0x18676d,_0x2c1ec0,_0x2b2335){var _0x375e12=[_0xb6fb('0x14'),_0xb6fb('0x16'),_0xb6fb('0x28'),_0x18676d+'.'+_0x2b2335,_0xb6fb('0x29'),_0xb6fb('0x2a')];return squel[_0xb6fb('0x2b')]()[_0xb6fb('0x2c')](_0xb6fb('0x2d'))[_0xb6fb('0x18')]([_0xb6fb('0xf'),_0xb6fb('0x19'),'ListId',_0x2b2335,'createdAt',_0xb6fb('0x2e')],squel[_0xb6fb('0x1d')]()[_0xb6fb('0x1e')](_0x375e12)['from'](_0x18676d)[_0xb6fb('0x10')]('cm_contacts',null,_0xb6fb('0x2f')+_0x18676d+_0xb6fb('0x21'))['join'](_0x2c1ec0,null,_0x2c1ec0+_0xb6fb('0x11')+_0x18676d+'.'+_0x2b2335)['where'](_0x18676d+_0xb6fb('0x22'),_0x4c4c8d)[_0xb6fb('0x12')](_0xb6fb('0x23'),NOW)[_0xb6fb('0x12')](_0xb6fb('0x30'),squel[_0xb6fb('0x1d')]()[_0xb6fb('0xe')](_0xb6fb('0xf'))[_0xb6fb('0x1f')](_0xb6fb('0x2d'))[_0xb6fb('0x12')](_0xb6fb('0x31'),_0x4c4c8d)[_0xb6fb('0x12')](_0x2b2335+'\x20=\x20?',_0x18676d+'.'+_0x2b2335)))[_0xb6fb('0x27')]();}function insertCmContact(_0x43c38f,_0x4ff2c7,_0x15c2de,_0x3e9c86){var _0x4a149e=_[_0xb6fb('0x32')](_[_0xb6fb('0x33')](_0x3e9c86),[_0xb6fb('0x1a'),_0xb6fb('0x34'),_0xb6fb('0x35'),_0xb6fb('0x2e')]);return squel['insert']()[_0xb6fb('0x2c')]('cm_contacts')[_0xb6fb('0x18')](_0x4a149e,squel[_0xb6fb('0x1d')]()[_0xb6fb('0x1e')](_0x4a149e)[_0xb6fb('0x1f')](_0x4ff2c7)['where']('('+_0x15c2de['join'](',')+_0xb6fb('0x36'),squel[_0xb6fb('0x1d')]()['fields'](_0x15c2de)[_0xb6fb('0x1f')](_0xb6fb('0x20'))['where']('ListId\x20=\x20?',_0x43c38f)['where'](_0xb6fb('0x37')))['where'](_0xb6fb('0x38'),squel[_0xb6fb('0x1d')]()[_0xb6fb('0xe')](_0xb6fb('0x39'),_0xb6fb('0x3a'))['from'](_0x4ff2c7)[_0xb6fb('0x3b')](_0x15c2de['join'](','))))[_0xb6fb('0x27')]();}function handleStop(){logger['info'](_0xb6fb('0x3c'));stopped=!![];}function handleUncaughtException(_0x5ba8c3){logger['error'](_0x5ba8c3[_0xb6fb('0x3d')]);process[_0xb6fb('0x3e')](0x1);}function handleError(_0x3bbbb3,_0x52839f){stats['errors']['push']({'name':_0x52839f['code'],'message':_0x52839f[_0xb6fb('0x3d')],'row':_0x3bbbb3});}function handleQuery(_0x2a7c66){logger[_0xb6fb('0x3f')](_0x2a7c66);return db[_0xb6fb('0x40')][_0xb6fb('0x41')](_0x2a7c66)[_0xb6fb('0x42')](function(_0x27bf02){results[_0xb6fb('0x43')](_0x27bf02);})[_0xb6fb('0x44')](function(_0x3256be){logger[_0xb6fb('0x45')](_0x3256be[_0xb6fb('0x3d')]);});}function main(_0x6a98ce,_0x1974d8,_0x5bf45c,_0x1d73cc){logger[_0xb6fb('0x3f')](_0xb6fb('0x46'),_0x6a98ce,JSON[_0xb6fb('0x47')](_0x1974d8));process[_0xb6fb('0x48')](_0xb6fb('0x49'));var _0x37b1f7=_0x1974d8[_0xb6fb('0x4a')];var _0x21608b=_0x1974d8[_0xb6fb('0x4b')];var _0x1bf749=path[_0xb6fb('0x10')](config[_0xb6fb('0x4c')],_0xb6fb('0x4d'),_0x21608b+'.csv');var _0x20f6c3=_[_0xb6fb('0x33')](_0x37b1f7)['join']();logger[_0xb6fb('0x3f')](_0xb6fb('0x4e'),_0x20f6c3);fs[_0xb6fb('0x4f')](_0x1bf749,_0x20f6c3+'\x0a');Papa[_0xb6fb('0x50')](fs['createReadStream'](_0x6a98ce),{'header':!![],'skipEmptyLines':!![],'step':function(_0x2cb116,_0x17a175){try{for(var _0x46932a=0x0,_0x53d0e3=[];_0x46932a<_0x2cb116[_0xb6fb('0x51')]['length'];_0x46932a++){stats[_0xb6fb('0x52')]+=0x1;if(_0x2cb116[_0xb6fb('0x53')][_0x46932a]){handleError(_0x2cb116[_0xb6fb('0x51')][_0x46932a],_0x2cb116[_0xb6fb('0x53')][_0x46932a]);}else{var _0x452cd3=[];for(var _0x4747ec in _0x37b1f7){if(_0x37b1f7[_0xb6fb('0x54')](_0x4747ec)){if(_0x2cb116[_0xb6fb('0x51')][_0x46932a][_0x37b1f7[_0x4747ec]]){var _0x3fd5e8=_[_0xb6fb('0x55')](_0x2cb116[_0xb6fb('0x51')][_0x46932a][_0x37b1f7[_0x4747ec]][_0xb6fb('0x56')](/"/g,'\x27'));switch(_0x4747ec){case _0xb6fb('0x57'):var _0x4c6145=moment(_0x3fd5e8,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x4c6145['isValid']()){_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3fd5e8+'\x22');}else{_0x452cd3[_0xb6fb('0x43')](_0xb6fb('0x58'));}break;case _0xb6fb('0x59'):var _0x46175f=parseInt(_0x3fd5e8);_0x3fd5e8=_['isNaN'](_0x46175f)||_0x46175f<0x0||_0x46175f>0x4?_0x1d73cc?0x3:0x2:_0x46175f;_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3fd5e8+'\x22');break;case _0xb6fb('0x1b'):var _0x3c4824=parseInt(_0x3fd5e8);if(_[_0xb6fb('0x5a')](_0x3c4824)&&_['includes'](_0x5bf45c,_0x3c4824)){_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3c4824+'\x22');}else{_0x452cd3[_0xb6fb('0x43')]('agent\x20not\x20exists');}break;case'email':if(isEmail(_0x3fd5e8)){_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3fd5e8+'\x22');}else{_0x452cd3[_0xb6fb('0x43')](_0xb6fb('0x5b'));}break;case _0xb6fb('0x5c'):var _0x18cc26=moment(_0x3fd5e8,_0xb6fb('0x5d'),!![]);if(_0x18cc26[_0xb6fb('0x5e')]()){_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3fd5e8+'\x22');}else{_0x452cd3[_0xb6fb('0x43')](_0xb6fb('0x5f'));}break;default:_0x53d0e3[_0xb6fb('0x43')]('\x22'+_0x3fd5e8+'\x22');}}else{switch(_0x4747ec){case _0xb6fb('0x60'):case _0xb6fb('0xf'):_0x452cd3[_0xb6fb('0x43')](_0x4747ec+_0xb6fb('0x61'));break;default:_0x53d0e3[_0xb6fb('0x43')]('\x22\x22');}}}}if(_0x452cd3[_0xb6fb('0x62')]){handleError(_0x2cb116['data'][_0x46932a],{'code':_0xb6fb('0x63'),'message':_0x452cd3[_0xb6fb('0x10')]()});}else{fs[_0xb6fb('0x64')](_0x1bf749,_0x53d0e3[_0xb6fb('0x10')]()+'\x0a');}_0x53d0e3=[];}if(!(stats[_0xb6fb('0x52')]%0xc8)){socket[_0xb6fb('0x65')]('contact:import:'+_0x21608b,stats);stats[_0xb6fb('0x53')]=[];}}if(stopped){logger['info'](_0xb6fb('0x66'));_0x17a175[_0xb6fb('0x67')]();}}catch(_0x315271){handleError(_0x2cb116[_0xb6fb('0x51')][_0x46932a],{'code':_0xb6fb('0x68'),'message':_0x315271[_0xb6fb('0x3d')]});logger[_0xb6fb('0x45')](_0xb6fb('0x69'),_0x315271[_0xb6fb('0x3d')]);}},'complete':function(){try{var _0x15ddad=[];var _0x443078=_0xb6fb('0x20');if(_0x1974d8['duplicates']&&_0x1974d8['duplicates'][_0xb6fb('0x62')]){_0x443078=_0xb6fb('0x6a')+_0x21608b;_0x15ddad[_0xb6fb('0x43')](_0xb6fb('0x6b')+_0x443078+'\x20LIKE\x20cm_contacts;');}var _0x3bb628=util[_0xb6fb('0xc')](_0xb6fb('0x6c'),_0x1bf749,_0x443078,_0x20f6c3,_0x1974d8[_0xb6fb('0x1a')],_0x1974d8[_0xb6fb('0x34')]||null,NOW,NOW);if(_[_0xb6fb('0x6d')](_0x37b1f7[_0xb6fb('0x57')])){_0x3bb628+=_0xb6fb('0x6e');}_0x15ddad[_0xb6fb('0x43')](_0x3bb628);if(_0x1974d8[_0xb6fb('0x6f')]&&_0x1974d8[_0xb6fb('0x6f')][_0xb6fb('0x62')]){_0x15ddad[_0xb6fb('0x43')](insertCmContact(_0x1974d8[_0xb6fb('0x1a')],_0x443078,_0x1974d8[_0xb6fb('0x6f')],_0x37b1f7));_0x15ddad['push'](_0xb6fb('0x70')+_0x443078+';');}_0x15ddad[_0xb6fb('0x43')](insertCmHopper(_0x1974d8[_0xb6fb('0x1a')],_0xb6fb('0x71'),'voice_queues',_0xb6fb('0x72'),_0x1d73cc));_0x15ddad[_0xb6fb('0x43')](insertCmHopperBlack(_0x1974d8[_0xb6fb('0x1a')],_0xb6fb('0x73'),'voice_queues',_0xb6fb('0x72')));_0x15ddad['push'](insertCmHopper(_0x1974d8[_0xb6fb('0x1a')],_0xb6fb('0x74'),_0xb6fb('0x75'),_0xb6fb('0x76'),_0x1d73cc));_0x15ddad[_0xb6fb('0x43')](insertCmHopperBlack(_0x1974d8[_0xb6fb('0x1a')],_0xb6fb('0x77'),_0xb6fb('0x75'),'CampaignId'));BPromise[_0xb6fb('0x78')](_0x15ddad,handleQuery)[_0xb6fb('0x79')](function(_0x4571f0){stats['finish']=!![];stats[_0xb6fb('0x7a')]=_0x1974d8[_0xb6fb('0x6f')]&&_0x1974d8['duplicates']['length']?results[0x2]['affectedRows']:results[0x0][_0xb6fb('0x7a')];socket[_0xb6fb('0x65')]('contact:import:'+_0x21608b,stats);fs[_0xb6fb('0x7b')](_0x6a98ce);fs[_0xb6fb('0x7b')](_0x1bf749);process[_0xb6fb('0x3e')](0x0);})[_0xb6fb('0x44')](function(_0x22b2f9){logger[_0xb6fb('0x45')](_0x22b2f9['message']);process[_0xb6fb('0x3e')](0x1);});}catch(_0x5b9789){logger['error'](_0xb6fb('0x7c'),_0x5b9789[_0xb6fb('0x3d')]);process[_0xb6fb('0x3e')](0x1);}},'error':function(_0x5b7984,_0x4f2690,_0x49fa8,_0x7169f6){throw new Error(_0x7169f6);}});}function validate(){if(process[_0xb6fb('0x7d')]&&process[_0xb6fb('0x7d')]['length']<0x4){throw new Error(_0xb6fb('0x7e'));}var _0x273213=path[_0xb6fb('0x10')](config[_0xb6fb('0x4c')],_0xb6fb('0x4d'),process[_0xb6fb('0x7d')][0x2]);if(!fs[_0xb6fb('0x7f')](_0x273213)){throw new Error(_0xb6fb('0x80'));}var _0x270378={};try{_0x270378=JSON[_0xb6fb('0x50')](process[_0xb6fb('0x7d')][0x3]);if(!_0x270378[_0xb6fb('0x4a')]){throw new Error(_0xb6fb('0x81'));}if(!_0x270378['binding'][_0xb6fb('0xf')]){throw new Error(_0xb6fb('0x82'));}if(!_0x270378[_0xb6fb('0x4a')][_0xb6fb('0x60')]){throw new Error(_0xb6fb('0x83'));}var _0x18f43b=0x0;if(_0x270378['binding']['UserId']){_0x18f43b=0x1;}if(!_0x270378[_0xb6fb('0x1a')]){throw new Error(_0xb6fb('0x84'));}}catch(_0x5d41b4){throw new Error('body\x20id\x20mandatory');}var _0x19aa26=[];try{_0x19aa26=_['map'](JSON[_0xb6fb('0x50')](process[_0xb6fb('0x7d')][0x4]),'id');}catch(_0x456bac){logger['info'](_0xb6fb('0x85'));}main(_0x273213,_0x270378,_0x19aa26,_0x18f43b);}validate();process['on']('SIGINT',handleStop);process['on']('uncaughtException',handleUncaughtException);