Built motion from commit 9d1906d1.|2.5.40
[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 _0x9790=['data','rows','hasOwnProperty','replace','push','scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','isNaN','isNumber','includes','agent\x20not\x20exists','email','email\x20wrong\x20format','dateOfBirth','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','firstName','\x20not\x20specified','SystemRow','appendFileSync','emit','Abort\x20parser','abort','SystemError','step','duplicates','length','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','VoiceQueueId','voice_queues_has_cm_blacklists','voice_queues','campaigns','CampaignId','campaigns_has_cm_blacklists','then','affectedRows','contact:import:','unlink','exit','complete','arguments\x20<filename>\x20<parameters>\x20<agents>','argv','existsSync','binding','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','path','lodash','bluebird','moment','squel','../../../mysqldb','../../../config/logger','import','redis','localhost','socket.io-emitter','format','YYYY-MM-DD\x20HH:mm:ss','select','phone','join','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','cm_contacts.UserId','cm_hopper','fromQuery','scheduledat','ContactId','ListId','createdAt','updatedAt','priority','UserId','recallme','fields','from','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_contacts.id','insert','into','cm_hopper_black','.CmListId\x20=\x20?','field','ListId\x20=\x20?','\x20=\x20?','concat','keys','CompanyId','id\x20IN\x20?','MIN(id)','min_id','group','error','message','errors','info','sequelize','query','spread','catch','main','stringify','send','start','root','server/files/tmp','.csv','parse','createReadStream'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x9790,0xc1));var _0x0979=function(_0x221061,_0x4948d5){_0x221061=_0x221061-0x0;var _0x267745=_0x9790[_0x221061];return _0x267745;};'use strict';var fs=require('fs');var path=require(_0x0979('0x0'));var _=require(_0x0979('0x1'));var Papa=require('papaparse');var util=require('util');var BPromise=require(_0x0979('0x2'));var moment=require(_0x0979('0x3'));var squel=require(_0x0979('0x4'));var Redis=require('ioredis');var db=require(_0x0979('0x5'))['db'];var config=require('../../../config/environment');var logger=require(_0x0979('0x6'))(_0x0979('0x7'));config[_0x0979('0x8')]=_['defaults'](config[_0x0979('0x8')],{'host':_0x0979('0x9'),'port':0x18eb});var socket=require(_0x0979('0xa'))(new Redis(config[_0x0979('0x8')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0x0979('0xb')](_0x0979('0xc'));function isEmail(_0x3f61ee){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))*$/['test'](_0x3f61ee);}function selectNotIn(_0xa2125d,_0x48c3df,_0x4d809a,_0x5788a3,_0x1b6ce0){return squel[_0x0979('0xd')]()['field'](_0x0979('0xe'))['from'](_0x5788a3)[_0x0979('0xf')](_0x48c3df,null,_0x48c3df+'.id\x20=\x20'+_0x5788a3+'.'+_0x4d809a)[_0x0979('0x10')](_0x5788a3+'.'+_0x4d809a+_0x0979('0x11')+_0xa2125d+'.'+_0x4d809a)['where'](_0x48c3df+_0x0979('0x12')+_0x1b6ce0['join']()+')');}function insertCmHopper(_0x3bcc70,_0x468cfb,_0x556253,_0x22379e,_0x46741e){var _0x5e55b1=[_0x0979('0x13'),_0x0979('0x14'),'cm_contacts.id',_0x0979('0x15'),_0x468cfb+'.'+_0x22379e,_0x0979('0x16'),_0x0979('0x17'),_0x0979('0x18'),_0x0979('0x19'),'\x22'+_0x46741e+'\x22'];return squel['insert']()['into'](_0x0979('0x1a'))[_0x0979('0x1b')]([_0x0979('0xe'),_0x0979('0x1c'),_0x0979('0x1d'),_0x0979('0x1e'),_0x22379e,_0x0979('0x1f'),_0x0979('0x20'),_0x0979('0x21'),_0x0979('0x22'),_0x0979('0x23')],squel[_0x0979('0xd')]()[_0x0979('0x24')](_0x5e55b1)[_0x0979('0x25')](_0x468cfb)[_0x0979('0xf')](_0x0979('0x26'),null,_0x0979('0x27')+_0x468cfb+_0x0979('0x28'))['join'](_0x556253,null,_0x556253+_0x0979('0x29')+_0x468cfb+'.'+_0x22379e)[_0x0979('0x10')](_0x468cfb+'.CmListId\x20=\x20?',_0x3bcc70)[_0x0979('0x10')](_0x0979('0x2a'),NOW)[_0x0979('0x10')](_0x0979('0x2b'),selectNotIn(_0x468cfb,_0x556253,_0x22379e,_0x0979('0x1a'),[_0x0979('0x2c'),_0x0979('0x2d')]))[_0x0979('0x10')](_0x0979('0x2b'),selectNotIn(_0x468cfb,_0x556253,_0x22379e,_0x0979('0x1a'),['\x22always\x22'])))[_0x0979('0x2e')]();}function insertCmHopperBlack(_0x34e240,_0x183065,_0x2518c4,_0x524630){var _0x39f087=[_0x0979('0x13'),_0x0979('0x2f'),_0x0979('0x15'),_0x183065+'.'+_0x524630,_0x0979('0x16'),_0x0979('0x17')];return squel[_0x0979('0x30')]()[_0x0979('0x31')](_0x0979('0x32'))[_0x0979('0x1b')]([_0x0979('0xe'),_0x0979('0x1d'),_0x0979('0x1e'),_0x524630,_0x0979('0x1f'),'updatedAt'],squel['select']()[_0x0979('0x24')](_0x39f087)[_0x0979('0x25')](_0x183065)[_0x0979('0xf')](_0x0979('0x26'),null,_0x0979('0x27')+_0x183065+_0x0979('0x28'))[_0x0979('0xf')](_0x2518c4,null,_0x2518c4+'.id\x20=\x20'+_0x183065+'.'+_0x524630)[_0x0979('0x10')](_0x183065+_0x0979('0x33'),_0x34e240)[_0x0979('0x10')](_0x0979('0x2a'),NOW)[_0x0979('0x10')](_0x0979('0x2b'),squel['select']()[_0x0979('0x34')](_0x0979('0xe'))[_0x0979('0x25')](_0x0979('0x32'))[_0x0979('0x10')](_0x0979('0x35'),_0x34e240)[_0x0979('0x10')](_0x524630+_0x0979('0x36'),_0x183065+'.'+_0x524630)))[_0x0979('0x2e')]();}function insertCmContact(_0x2a71fd,_0xcce96c,_0x1cf6be,_0x3ce05c){var _0x3d3833=_[_0x0979('0x37')](_[_0x0979('0x38')](_0x3ce05c),['ListId',_0x0979('0x39'),'createdAt',_0x0979('0x20')]);return squel['insert']()[_0x0979('0x31')](_0x0979('0x26'))[_0x0979('0x1b')](_0x3d3833,squel[_0x0979('0xd')]()[_0x0979('0x24')](_0x3d3833)[_0x0979('0x25')](_0xcce96c)['where']('('+_0x1cf6be[_0x0979('0xf')](',')+')\x20NOT\x20IN\x20?',squel['select']()[_0x0979('0x24')](_0x1cf6be)[_0x0979('0x25')](_0x0979('0x26'))[_0x0979('0x10')](_0x0979('0x35'),_0x2a71fd)[_0x0979('0x10')]('deletedAt\x20IS\x20NULL'))[_0x0979('0x10')](_0x0979('0x3a'),squel['select']()['field'](_0x0979('0x3b'),_0x0979('0x3c'))[_0x0979('0x25')](_0xcce96c)[_0x0979('0x3d')](_0x1cf6be['join'](','))))[_0x0979('0x2e')]();}function handleStop(){logger['info']('Received\x20SIGINT');stopped=!![];}function handleUncaughtException(_0x4efe46){logger[_0x0979('0x3e')](_0x4efe46[_0x0979('0x3f')]);process['exit'](0x1);}function handleError(_0x5c08e1,_0x3a7082){stats[_0x0979('0x40')]['push']({'name':_0x3a7082['code'],'message':_0x3a7082[_0x0979('0x3f')],'row':_0x5c08e1});}function handleQuery(_0xbf584a){logger[_0x0979('0x41')](_0xbf584a);return db[_0x0979('0x42')][_0x0979('0x43')](_0xbf584a)[_0x0979('0x44')](function(_0x2b2e3a){results['push'](_0x2b2e3a);})[_0x0979('0x45')](function(_0x5bc0ae){logger[_0x0979('0x3e')](_0x5bc0ae[_0x0979('0x3f')]);});}function main(_0x5ec14a,_0x1cc084,_0x553fa4,_0x123aa5){logger[_0x0979('0x41')](_0x0979('0x46'),_0x5ec14a,JSON[_0x0979('0x47')](_0x1cc084));process[_0x0979('0x48')](_0x0979('0x49'));var _0xe11951=_0x1cc084['binding'];var _0x14b275=_0x1cc084['socket_timestamp'];var _0x43e25a=path[_0x0979('0xf')](config[_0x0979('0x4a')],_0x0979('0x4b'),_0x14b275+_0x0979('0x4c'));var _0x1e2453=_[_0x0979('0x38')](_0xe11951)['join']();logger[_0x0979('0x41')]('header',_0x1e2453);fs['writeFileSync'](_0x43e25a,_0x1e2453+'\x0a');Papa[_0x0979('0x4d')](fs[_0x0979('0x4e')](_0x5ec14a),{'header':!![],'skipEmptyLines':!![],'step':function(_0x5f0f7c,_0x567380){try{for(var _0x226186=0x0,_0x15d3bd=[];_0x226186<_0x5f0f7c[_0x0979('0x4f')]['length'];_0x226186++){stats[_0x0979('0x50')]+=0x1;if(_0x5f0f7c['errors'][_0x226186]){handleError(_0x5f0f7c[_0x0979('0x4f')][_0x226186],_0x5f0f7c[_0x0979('0x40')][_0x226186]);}else{var _0x2f20f3=[];for(var _0x1e4679 in _0xe11951){if(_0xe11951[_0x0979('0x51')](_0x1e4679)){if(_0x5f0f7c[_0x0979('0x4f')][_0x226186][_0xe11951[_0x1e4679]]){var _0x14e90d=_['trim'](_0x5f0f7c['data'][_0x226186][_0xe11951[_0x1e4679]][_0x0979('0x52')](/"/g,'\x27'));switch(_0x1e4679){case _0x0979('0x1c'):var _0x583095=moment(_0x14e90d,'YYYY-MM-DD\x20HH:mm:ss',!![]);if(_0x583095['isValid']()){_0x15d3bd[_0x0979('0x53')]('\x22'+_0x14e90d+'\x22');}else{_0x2f20f3['push'](_0x0979('0x54'));}break;case _0x0979('0x21'):var _0x283dd1=parseInt(_0x14e90d);_0x14e90d=_[_0x0979('0x55')](_0x283dd1)||_0x283dd1<0x0||_0x283dd1>0x4?_0x123aa5?0x3:0x2:_0x283dd1;_0x15d3bd[_0x0979('0x53')]('\x22'+_0x14e90d+'\x22');break;case'UserId':var _0x4a6566=parseInt(_0x14e90d);if(_[_0x0979('0x56')](_0x4a6566)&&_[_0x0979('0x57')](_0x553fa4,_0x4a6566)){_0x15d3bd[_0x0979('0x53')]('\x22'+_0x4a6566+'\x22');}else{_0x2f20f3['push'](_0x0979('0x58'));}break;case _0x0979('0x59'):if(isEmail(_0x14e90d)){_0x15d3bd[_0x0979('0x53')]('\x22'+_0x14e90d+'\x22');}else{_0x2f20f3[_0x0979('0x53')](_0x0979('0x5a'));}break;case _0x0979('0x5b'):var _0x2c006b=moment(_0x14e90d,'YYYY-MM-DD',!![]);if(_0x2c006b['isValid']()){_0x15d3bd[_0x0979('0x53')]('\x22'+_0x14e90d+'\x22');}else{_0x2f20f3['push'](_0x0979('0x5c'));}break;default:_0x15d3bd[_0x0979('0x53')]('\x22'+_0x14e90d+'\x22');}}else{switch(_0x1e4679){case _0x0979('0x5d'):case'phone':_0x2f20f3[_0x0979('0x53')](_0x1e4679+_0x0979('0x5e'));break;default:_0x15d3bd['push']('\x22\x22');}}}}if(_0x2f20f3['length']){handleError(_0x5f0f7c['data'][_0x226186],{'code':_0x0979('0x5f'),'message':_0x2f20f3[_0x0979('0xf')]()});}else{fs[_0x0979('0x60')](_0x43e25a,_0x15d3bd[_0x0979('0xf')]()+'\x0a');}_0x15d3bd=[];}if(!(stats['rows']%0xc8)){socket[_0x0979('0x61')]('contact:import:'+_0x14b275,stats);stats['errors']=[];}}if(stopped){logger[_0x0979('0x41')](_0x0979('0x62'));_0x567380[_0x0979('0x63')]();}}catch(_0xc942c7){handleError(_0x5f0f7c['data'][_0x226186],{'code':_0x0979('0x64'),'message':_0xc942c7[_0x0979('0x3f')]});logger['error'](_0x0979('0x65'),_0xc942c7[_0x0979('0x3f')]);}},'complete':function(){try{var _0x4726f1=[];var _0x1ce4de='cm_contacts';if(_0x1cc084[_0x0979('0x66')]&&_0x1cc084[_0x0979('0x66')][_0x0979('0x67')]){_0x1ce4de=_0x0979('0x68')+_0x14b275;_0x4726f1[_0x0979('0x53')](_0x0979('0x69')+_0x1ce4de+_0x0979('0x6a'));}var _0x3e5ad2=util[_0x0979('0xb')](_0x0979('0x6b'),_0x43e25a,_0x1ce4de,_0x1e2453,_0x1cc084[_0x0979('0x1e')],_0x1cc084[_0x0979('0x39')]||null,NOW,NOW);if(_[_0x0979('0x6c')](_0xe11951[_0x0979('0x1c')])){_0x3e5ad2+=_0x0979('0x6d');}_0x4726f1['push'](_0x3e5ad2);if(_0x1cc084['duplicates']&&_0x1cc084[_0x0979('0x66')][_0x0979('0x67')]){_0x4726f1[_0x0979('0x53')](insertCmContact(_0x1cc084[_0x0979('0x1e')],_0x1ce4de,_0x1cc084[_0x0979('0x66')],_0xe11951));_0x4726f1[_0x0979('0x53')](_0x0979('0x6e')+_0x1ce4de+';');}_0x4726f1[_0x0979('0x53')](insertCmHopper(_0x1cc084[_0x0979('0x1e')],_0x0979('0x6f'),'voice_queues',_0x0979('0x70'),_0x123aa5));_0x4726f1[_0x0979('0x53')](insertCmHopperBlack(_0x1cc084['ListId'],_0x0979('0x71'),_0x0979('0x72'),_0x0979('0x70')));_0x4726f1[_0x0979('0x53')](insertCmHopper(_0x1cc084['ListId'],'campaigns_has_cm_lists',_0x0979('0x73'),_0x0979('0x74'),_0x123aa5));_0x4726f1[_0x0979('0x53')](insertCmHopperBlack(_0x1cc084[_0x0979('0x1e')],_0x0979('0x75'),_0x0979('0x73'),_0x0979('0x74')));BPromise['each'](_0x4726f1,handleQuery)[_0x0979('0x76')](function(_0x22deb8){stats['finish']=!![];stats['affectedRows']=_0x1cc084[_0x0979('0x66')]&&_0x1cc084[_0x0979('0x66')]['length']?results[0x2][_0x0979('0x77')]:results[0x0]['affectedRows'];socket[_0x0979('0x61')](_0x0979('0x78')+_0x14b275,stats);fs['unlink'](_0x5ec14a);fs[_0x0979('0x79')](_0x43e25a);process[_0x0979('0x7a')](0x0);})[_0x0979('0x45')](function(_0x13e30c){logger[_0x0979('0x3e')](_0x13e30c['message']);process[_0x0979('0x7a')](0x1);});}catch(_0x68460a){logger[_0x0979('0x3e')](_0x0979('0x7b'),_0x68460a[_0x0979('0x3f')]);process[_0x0979('0x7a')](0x1);}},'error':function(_0x423b09,_0x39c633,_0x56426e,_0x1c9e19){throw new Error(_0x1c9e19);}});}function validate(){if(process['argv']&&process['argv'][_0x0979('0x67')]<0x4){throw new Error(_0x0979('0x7c'));}var _0x1e667a=path[_0x0979('0xf')](config[_0x0979('0x4a')],'server/files/tmp',process[_0x0979('0x7d')][0x2]);if(!fs[_0x0979('0x7e')](_0x1e667a)){throw new Error('file\x20doesn\x27t\x20exists');}var _0x2114aa={};try{_0x2114aa=JSON[_0x0979('0x4d')](process[_0x0979('0x7d')][0x3]);if(!_0x2114aa[_0x0979('0x7f')]){throw new Error(_0x0979('0x80'));}if(!_0x2114aa['binding'][_0x0979('0xe')]){throw new Error(_0x0979('0x81'));}if(!_0x2114aa[_0x0979('0x7f')][_0x0979('0x5d')]){throw new Error(_0x0979('0x82'));}var _0x2d1880=0x0;if(_0x2114aa[_0x0979('0x7f')][_0x0979('0x22')]){_0x2d1880=0x1;}if(!_0x2114aa[_0x0979('0x1e')]){throw new Error('ListId\x20is\x20mandatory');}}catch(_0x1acf97){throw new Error(_0x0979('0x83'));}var _0x19fbc1=[];try{_0x19fbc1=_[_0x0979('0x84')](JSON[_0x0979('0x4d')](process[_0x0979('0x7d')][0x4]),'id');}catch(_0x1e6666){logger['info'](_0x0979('0x85'));}main(_0x1e667a,_0x2114aa,_0x19fbc1,_0x2d1880);}validate();process['on'](_0x0979('0x86'),handleStop);process['on'](_0x0979('0x87'),handleUncaughtException);