Built motion from commit 497d3d92.|2.5.43
[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 _0x5e8d=['complete','argv','existsSync','file\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','path','lodash','papaparse','util','bluebird','moment','squel','../../../mysqldb','../../../config/environment','import','redis','defaults','localhost','socket.io-emitter','format','test','select','phone','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','insert','into','fromQuery','scheduledat','ContactId','ListId','createdAt','updatedAt','priority','recallme','fields','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId','.CmListId\x20=\x20?','\x22always\x22','cm_contacts.phone\x20NOT\x20IN\x20(?)','toString','cm_contacts.id','cm_hopper_black','cm_contacts.createdAt\x20=\x20?','field','\x20=\x20?','CompanyId','ListId\x20=\x20?','deletedAt\x20IS\x20NULL','id\x20IN\x20?','MIN(id)','min_id','info','Received\x20SIGINT','error','push','code','message','sequelize','spread','main','stringify','send','start','binding','root','server/files/tmp','.csv','keys','header','writeFileSync','parse','createReadStream','data','length','errors','trim','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','UserId','isNumber','includes','email','email\x20wrong\x20format','dateOfBirth','YYYY-MM-DD','firstName','\x20not\x20specified','SystemRow','appendFileSync','contact:import:','Abort\x20parser','abort','SystemError','step','duplicates','cm_contacts_','CREATE\x20TABLE\x20','\x20LIKE\x20cm_contacts;','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_has_cm_blacklists','voice_queues','VoiceQueueId','campaigns_has_cm_lists','CampaignId','campaigns_has_cm_blacklists','campaigns','each','finish','affectedRows','emit','unlink','exit'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x5e8d,0x11a));var _0xd5e8=function(_0xba4721,_0x113673){_0xba4721=_0xba4721-0x0;var _0x200b31=_0x5e8d[_0xba4721];return _0x200b31;};'use strict';var fs=require('fs');var path=require(_0xd5e8('0x0'));var _=require(_0xd5e8('0x1'));var Papa=require(_0xd5e8('0x2'));var util=require(_0xd5e8('0x3'));var BPromise=require(_0xd5e8('0x4'));var moment=require(_0xd5e8('0x5'));var squel=require(_0xd5e8('0x6'));var Redis=require('ioredis');var db=require(_0xd5e8('0x7'))['db'];var config=require(_0xd5e8('0x8'));var logger=require('../../../config/logger')(_0xd5e8('0x9'));config[_0xd5e8('0xa')]=_[_0xd5e8('0xb')](config['redis'],{'host':_0xd5e8('0xc'),'port':0x18eb});var socket=require(_0xd5e8('0xd'))(new Redis(config[_0xd5e8('0xa')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0xd5e8('0xe')]('YYYY-MM-DD\x20HH:mm:ss');function isEmail(_0x55bdd1){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))*$/[_0xd5e8('0xf')](_0x55bdd1);}function selectNotIn(_0x2ba696,_0x3422fb,_0x433a0d,_0x4feaea,_0x1470cb){return squel[_0xd5e8('0x10')]()['field'](_0xd5e8('0x11'))[_0xd5e8('0x12')](_0x4feaea)[_0xd5e8('0x13')](_0x3422fb,null,_0x3422fb+_0xd5e8('0x14')+_0x4feaea+'.'+_0x433a0d)[_0xd5e8('0x15')](_0x4feaea+'.'+_0x433a0d+_0xd5e8('0x16')+_0x2ba696+'.'+_0x433a0d)[_0xd5e8('0x15')](_0x3422fb+_0xd5e8('0x17')+_0x1470cb[_0xd5e8('0x13')]()+')');}function insertCmHopper(_0x5df4fb,_0x5a6665,_0x457bfb,_0x32de91,_0x470d94){var _0x3ce0c5=[_0xd5e8('0x18'),_0xd5e8('0x19'),'cm_contacts.id',_0xd5e8('0x1a'),_0x5a6665+'.'+_0x32de91,_0xd5e8('0x1b'),_0xd5e8('0x1c'),_0xd5e8('0x1d'),'cm_contacts.UserId','\x22'+_0x470d94+'\x22'];return squel[_0xd5e8('0x1e')]()[_0xd5e8('0x1f')]('cm_hopper')[_0xd5e8('0x20')]([_0xd5e8('0x11'),_0xd5e8('0x21'),_0xd5e8('0x22'),_0xd5e8('0x23'),_0x32de91,_0xd5e8('0x24'),_0xd5e8('0x25'),_0xd5e8('0x26'),'UserId',_0xd5e8('0x27')],squel[_0xd5e8('0x10')]()[_0xd5e8('0x28')](_0x3ce0c5)[_0xd5e8('0x12')](_0x5a6665)[_0xd5e8('0x13')](_0xd5e8('0x29'),null,_0xd5e8('0x2a')+_0x5a6665+_0xd5e8('0x2b'))[_0xd5e8('0x13')](_0x457bfb,null,_0x457bfb+_0xd5e8('0x14')+_0x5a6665+'.'+_0x32de91)[_0xd5e8('0x15')](_0x5a6665+_0xd5e8('0x2c'),_0x5df4fb)[_0xd5e8('0x15')]('cm_contacts.createdAt\x20=\x20?',NOW)['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x5a6665,_0x457bfb,_0x32de91,'cm_hopper',[_0xd5e8('0x2d'),'\x22onlyIfOpen\x22']))[_0xd5e8('0x15')](_0xd5e8('0x2e'),selectNotIn(_0x5a6665,_0x457bfb,_0x32de91,'cm_hopper',['\x22always\x22'])))[_0xd5e8('0x2f')]();}function insertCmHopperBlack(_0xfaad96,_0x2e220b,_0x26018b,_0x2f7ef3){var _0x314352=[_0xd5e8('0x18'),_0xd5e8('0x30'),_0xd5e8('0x1a'),_0x2e220b+'.'+_0x2f7ef3,'cm_contacts.createdAt',_0xd5e8('0x1c')];return squel['insert']()[_0xd5e8('0x1f')](_0xd5e8('0x31'))[_0xd5e8('0x20')]([_0xd5e8('0x11'),_0xd5e8('0x22'),'ListId',_0x2f7ef3,_0xd5e8('0x24'),_0xd5e8('0x25')],squel['select']()[_0xd5e8('0x28')](_0x314352)['from'](_0x2e220b)[_0xd5e8('0x13')](_0xd5e8('0x29'),null,_0xd5e8('0x2a')+_0x2e220b+_0xd5e8('0x2b'))[_0xd5e8('0x13')](_0x26018b,null,_0x26018b+_0xd5e8('0x14')+_0x2e220b+'.'+_0x2f7ef3)[_0xd5e8('0x15')](_0x2e220b+_0xd5e8('0x2c'),_0xfaad96)['where'](_0xd5e8('0x32'),NOW)[_0xd5e8('0x15')](_0xd5e8('0x2e'),squel[_0xd5e8('0x10')]()[_0xd5e8('0x33')](_0xd5e8('0x11'))[_0xd5e8('0x12')](_0xd5e8('0x31'))['where']('ListId\x20=\x20?',_0xfaad96)['where'](_0x2f7ef3+_0xd5e8('0x34'),_0x2e220b+'.'+_0x2f7ef3)))[_0xd5e8('0x2f')]();}function insertCmContact(_0x429921,_0x1508ee,_0x3e894d,_0x31477b){var _0x1d2b4a=_['concat'](_['keys'](_0x31477b),[_0xd5e8('0x23'),_0xd5e8('0x35'),_0xd5e8('0x24'),_0xd5e8('0x25')]);return squel[_0xd5e8('0x1e')]()[_0xd5e8('0x1f')](_0xd5e8('0x29'))[_0xd5e8('0x20')](_0x1d2b4a,squel[_0xd5e8('0x10')]()[_0xd5e8('0x28')](_0x1d2b4a)[_0xd5e8('0x12')](_0x1508ee)['where']('('+_0x3e894d[_0xd5e8('0x13')](',')+')\x20NOT\x20IN\x20?',squel[_0xd5e8('0x10')]()['fields'](_0x3e894d)[_0xd5e8('0x12')]('cm_contacts')[_0xd5e8('0x15')](_0xd5e8('0x36'),_0x429921)[_0xd5e8('0x15')](_0xd5e8('0x37')))[_0xd5e8('0x15')](_0xd5e8('0x38'),squel['select']()['field'](_0xd5e8('0x39'),_0xd5e8('0x3a'))['from'](_0x1508ee)['group'](_0x3e894d[_0xd5e8('0x13')](','))))[_0xd5e8('0x2f')]();}function handleStop(){logger[_0xd5e8('0x3b')](_0xd5e8('0x3c'));stopped=!![];}function handleUncaughtException(_0x30f3fa){logger[_0xd5e8('0x3d')](_0x30f3fa['message']);process['exit'](0x1);}function handleError(_0xaa1c36,_0x3b09f2){stats['errors'][_0xd5e8('0x3e')]({'name':_0x3b09f2[_0xd5e8('0x3f')],'message':_0x3b09f2[_0xd5e8('0x40')],'row':_0xaa1c36});}function handleQuery(_0x30ae6){logger[_0xd5e8('0x3b')](_0x30ae6);return db[_0xd5e8('0x41')]['query'](_0x30ae6)[_0xd5e8('0x42')](function(_0x26b14e){results['push'](_0x26b14e);})['catch'](function(_0x4229d3){logger[_0xd5e8('0x3d')](_0x4229d3[_0xd5e8('0x40')]);});}function main(_0x50cf35,_0x511ee8,_0x165326,_0x1b6220){logger['info'](_0xd5e8('0x43'),_0x50cf35,JSON[_0xd5e8('0x44')](_0x511ee8));process[_0xd5e8('0x45')](_0xd5e8('0x46'));var _0x216c11=_0x511ee8[_0xd5e8('0x47')];var _0x2677fb=_0x511ee8['socket_timestamp'];var _0x204d40=path[_0xd5e8('0x13')](config[_0xd5e8('0x48')],_0xd5e8('0x49'),_0x2677fb+_0xd5e8('0x4a'));var _0x460943=_[_0xd5e8('0x4b')](_0x216c11)[_0xd5e8('0x13')]();logger['info'](_0xd5e8('0x4c'),_0x460943);fs[_0xd5e8('0x4d')](_0x204d40,_0x460943+'\x0a');Papa[_0xd5e8('0x4e')](fs[_0xd5e8('0x4f')](_0x50cf35),{'header':!![],'skipEmptyLines':!![],'step':function(_0x25cd4f,_0x4db32f){try{for(var _0x34bdc8=0x0,_0x363051=[];_0x34bdc8<_0x25cd4f[_0xd5e8('0x50')][_0xd5e8('0x51')];_0x34bdc8++){stats['rows']+=0x1;if(_0x25cd4f[_0xd5e8('0x52')][_0x34bdc8]){handleError(_0x25cd4f[_0xd5e8('0x50')][_0x34bdc8],_0x25cd4f[_0xd5e8('0x52')][_0x34bdc8]);}else{var _0x58f353=[];for(var _0x58a40b in _0x216c11){if(_0x216c11['hasOwnProperty'](_0x58a40b)){if(_0x25cd4f['data'][_0x34bdc8][_0x216c11[_0x58a40b]]){var _0x234529=_[_0xd5e8('0x53')](_0x25cd4f[_0xd5e8('0x50')][_0x34bdc8][_0x216c11[_0x58a40b]]['replace'](/"/g,'\x27'));switch(_0x58a40b){case _0xd5e8('0x21'):var _0x19b810=moment(_0x234529,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x19b810['isValid']()){_0x363051['push']('\x22'+_0x234529+'\x22');}else{_0x58f353[_0xd5e8('0x3e')](_0xd5e8('0x54'));}break;case _0xd5e8('0x26'):var _0x590413=parseInt(_0x234529);_0x234529=_['isNaN'](_0x590413)||_0x590413<0x0||_0x590413>0x4?_0x1b6220?0x3:0x2:_0x590413;_0x363051[_0xd5e8('0x3e')]('\x22'+_0x234529+'\x22');break;case _0xd5e8('0x55'):var _0x40c385=parseInt(_0x234529);if(_[_0xd5e8('0x56')](_0x40c385)&&_[_0xd5e8('0x57')](_0x165326,_0x40c385)){_0x363051[_0xd5e8('0x3e')]('\x22'+_0x40c385+'\x22');}else{_0x58f353[_0xd5e8('0x3e')]('agent\x20not\x20exists');}break;case _0xd5e8('0x58'):if(isEmail(_0x234529)){_0x363051[_0xd5e8('0x3e')]('\x22'+_0x234529+'\x22');}else{_0x58f353['push'](_0xd5e8('0x59'));}break;case _0xd5e8('0x5a'):var _0x5d24f6=moment(_0x234529,_0xd5e8('0x5b'),!![]);if(_0x5d24f6['isValid']()){_0x363051[_0xd5e8('0x3e')]('\x22'+_0x234529+'\x22');}else{_0x58f353[_0xd5e8('0x3e')]('dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)');}break;default:_0x363051['push']('\x22'+_0x234529+'\x22');}}else{switch(_0x58a40b){case _0xd5e8('0x5c'):case _0xd5e8('0x11'):_0x58f353['push'](_0x58a40b+_0xd5e8('0x5d'));break;default:_0x363051[_0xd5e8('0x3e')]('\x22\x22');}}}}if(_0x58f353['length']){handleError(_0x25cd4f[_0xd5e8('0x50')][_0x34bdc8],{'code':_0xd5e8('0x5e'),'message':_0x58f353[_0xd5e8('0x13')]()});}else{fs[_0xd5e8('0x5f')](_0x204d40,_0x363051[_0xd5e8('0x13')]()+'\x0a');}_0x363051=[];}if(!(stats['rows']%0xc8)){socket['emit'](_0xd5e8('0x60')+_0x2677fb,stats);stats[_0xd5e8('0x52')]=[];}}if(stopped){logger[_0xd5e8('0x3b')](_0xd5e8('0x61'));_0x4db32f[_0xd5e8('0x62')]();}}catch(_0x4eb31d){handleError(_0x25cd4f['data'][_0x34bdc8],{'code':_0xd5e8('0x63'),'message':_0x4eb31d[_0xd5e8('0x40')]});logger[_0xd5e8('0x3d')](_0xd5e8('0x64'),_0x4eb31d[_0xd5e8('0x40')]);}},'complete':function(){try{var _0x3c6ee9=[];var _0x47f091=_0xd5e8('0x29');if(_0x511ee8[_0xd5e8('0x65')]&&_0x511ee8[_0xd5e8('0x65')][_0xd5e8('0x51')]){_0x47f091=_0xd5e8('0x66')+_0x2677fb;_0x3c6ee9[_0xd5e8('0x3e')](_0xd5e8('0x67')+_0x47f091+_0xd5e8('0x68'));}var _0x2d42af=util[_0xd5e8('0xe')](_0xd5e8('0x69'),_0x204d40,_0x47f091,_0x460943,_0x511ee8['ListId'],_0x511ee8[_0xd5e8('0x35')]||null,NOW,NOW);if(_[_0xd5e8('0x6a')](_0x216c11[_0xd5e8('0x21')])){_0x2d42af+=_0xd5e8('0x6b');}_0x3c6ee9['push'](_0x2d42af);if(_0x511ee8[_0xd5e8('0x65')]&&_0x511ee8['duplicates'][_0xd5e8('0x51')]){_0x3c6ee9[_0xd5e8('0x3e')](insertCmContact(_0x511ee8['ListId'],_0x47f091,_0x511ee8['duplicates'],_0x216c11));_0x3c6ee9['push'](_0xd5e8('0x6c')+_0x47f091+';');}_0x3c6ee9['push'](insertCmHopper(_0x511ee8[_0xd5e8('0x23')],_0xd5e8('0x6d'),'voice_queues','VoiceQueueId',_0x1b6220));_0x3c6ee9[_0xd5e8('0x3e')](insertCmHopperBlack(_0x511ee8[_0xd5e8('0x23')],_0xd5e8('0x6e'),_0xd5e8('0x6f'),_0xd5e8('0x70')));_0x3c6ee9[_0xd5e8('0x3e')](insertCmHopper(_0x511ee8[_0xd5e8('0x23')],_0xd5e8('0x71'),'campaigns',_0xd5e8('0x72'),_0x1b6220));_0x3c6ee9[_0xd5e8('0x3e')](insertCmHopperBlack(_0x511ee8[_0xd5e8('0x23')],_0xd5e8('0x73'),_0xd5e8('0x74'),_0xd5e8('0x72')));BPromise[_0xd5e8('0x75')](_0x3c6ee9,handleQuery)['then'](function(_0x384548){stats[_0xd5e8('0x76')]=!![];stats['affectedRows']=_0x511ee8[_0xd5e8('0x65')]&&_0x511ee8[_0xd5e8('0x65')][_0xd5e8('0x51')]?results[0x2][_0xd5e8('0x77')]:results[0x0][_0xd5e8('0x77')];socket[_0xd5e8('0x78')](_0xd5e8('0x60')+_0x2677fb,stats);fs['unlink'](_0x50cf35);fs[_0xd5e8('0x79')](_0x204d40);process[_0xd5e8('0x7a')](0x0);})['catch'](function(_0x5eb6b9){logger[_0xd5e8('0x3d')](_0x5eb6b9[_0xd5e8('0x40')]);process[_0xd5e8('0x7a')](0x1);});}catch(_0x5802d3){logger[_0xd5e8('0x3d')](_0xd5e8('0x7b'),_0x5802d3[_0xd5e8('0x40')]);process[_0xd5e8('0x7a')](0x1);}},'error':function(_0x4f11b4,_0x3ee81a,_0x5eec51,_0x2abe00){throw new Error(_0x2abe00);}});}function validate(){if(process[_0xd5e8('0x7c')]&&process[_0xd5e8('0x7c')][_0xd5e8('0x51')]<0x4){throw new Error('arguments\x20<filename>\x20<parameters>\x20<agents>');}var _0x481875=path[_0xd5e8('0x13')](config[_0xd5e8('0x48')],_0xd5e8('0x49'),process['argv'][0x2]);if(!fs[_0xd5e8('0x7d')](_0x481875)){throw new Error(_0xd5e8('0x7e'));}var _0x2fb610={};try{_0x2fb610=JSON['parse'](process['argv'][0x3]);if(!_0x2fb610[_0xd5e8('0x47')]){throw new Error('binding\x20doesn\x27t\x20exists');}if(!_0x2fb610[_0xd5e8('0x47')][_0xd5e8('0x11')]){throw new Error(_0xd5e8('0x7f'));}if(!_0x2fb610[_0xd5e8('0x47')][_0xd5e8('0x5c')]){throw new Error(_0xd5e8('0x80'));}var _0x57a78d=0x0;if(_0x2fb610[_0xd5e8('0x47')][_0xd5e8('0x55')]){_0x57a78d=0x1;}if(!_0x2fb610['ListId']){throw new Error(_0xd5e8('0x81'));}}catch(_0xd67876){throw new Error(_0xd5e8('0x82'));}var _0x428e90=[];try{_0x428e90=_[_0xd5e8('0x83')](JSON[_0xd5e8('0x4e')](process['argv'][0x4]),'id');}catch(_0x33031e){logger[_0xd5e8('0x3b')](_0xd5e8('0x84'));}main(_0x481875,_0x2fb610,_0x428e90,_0x57a78d);}validate();process['on'](_0xd5e8('0x85'),handleStop);process['on'](_0xd5e8('0x86'),handleUncaughtException);