Built motion from commit bab6f49e.|2.6.17
[motion2.git] / server / components / contacts / sql-utils.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 _0xb9b0=['c.id','limit','offset','having','order','DESC','subqry.','Tag','findAll','keyBy','QueryTypes','CmContact','sequelize','query','toString','Tags','split','clone','COUNT(*)','isEmpty','Sequelize','exports','lodash','squel','../parsers/qs','role','agent','search','ListId','autocomplete','true','select','from','cm_contacts','where','c.deletedAt\x20IS\x20NULL','subqry','left_join','cm_user_has_contacts','.id','cm_contact_has_tags','tools_tags','firstName','lastName','phone','mobile','email','CompanyId','updatedAt','includes','forEach','TagIds','field','GROUP_CONCAT(DISTINCT\x20t.id)','expr','getSelectedTags','replace','length','MATCH\x20(c.firstName,\x20c.lastName,\x20c.phone,\x20c.mobile,\x20c.fax,\x20c.email)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','getFullTextValue','c.id\x20LIKE\x20?','c.phone\x20LIKE\x20?','c.fax\x20LIKE\x20?','c.email\x20LIKE\x20?','c.lastName\x20LIKE\x20?','parseSearch','sqlOperator','conditions','find','name','dateOfBirth','datetime','DATE','type','default','text','value','start','map','tags','clause','ids','and','uc.UserId\x20=\x20?','skip','some','compact','Contact','push','c.ListId\x20IN\x20?','concat','CONCAT_WS(\x27\x20\x27,\x20c.firstName,\x20c.lastName,\x20c.email)\x20LIKE\x20?','\x20=\x20?','resolve','then','fields','tag','filter','getLists','c.ListId\x20IS\x20NULL','attributes','group'];(function(_0x4af376,_0x22c5c0){var _0x17f4c6=function(_0xa3de50){while(--_0xa3de50){_0x4af376['push'](_0x4af376['shift']());}};_0x17f4c6(++_0x22c5c0);}(_0xb9b0,0x148));var _0x0b9b=function(_0x2c7103,_0x12b16a){_0x2c7103=_0x2c7103-0x0;var _0x5a817b=_0xb9b0[_0x2c7103];return _0x5a817b;};'use strict';var _=require(_0x0b9b('0x0'));var squel=require(_0x0b9b('0x1'));var as=require('../parsers/advancedSearch');var qs=require(_0x0b9b('0x2'));var utils=require('../interaction/utils');var db=require('../../mysqldb')['db'];function skipContactsQuery(_0x235377,_0xbd3ce){var _0x17d827=![];if(_0x235377[_0x0b9b('0x3')]===_0x0b9b('0x4')&&!_0xbd3ce[_0x0b9b('0x5')]&&!_0xbd3ce[_0x0b9b('0x6')]&&_0xbd3ce[_0x0b9b('0x7')]!==_0x0b9b('0x8')){_0x17d827=!![];}return _0x17d827;}function getContactsSubquery(){return squel[_0x0b9b('0x9')]()[_0x0b9b('0xa')](_0x0b9b('0xb'),'c')[_0x0b9b('0xc')](_0x0b9b('0xd'));}function applyJoinClauses(_0x213896,_0x1c9b06){var _0x5ddabd=_0x1c9b06?'c':_0x0b9b('0xe');_0x213896[_0x0b9b('0xf')](_0x0b9b('0x10'),'uc','uc.CmContactId\x20=\x20'+_0x5ddabd+_0x0b9b('0x11'))[_0x0b9b('0xf')](_0x0b9b('0x12'),'ct','ct.CmContactId\x20=\x20'+_0x5ddabd+_0x0b9b('0x11'))[_0x0b9b('0xf')](_0x0b9b('0x13'),'t','t.id\x20=\x20ct.TagId');return _0x213896;}function addFieldsToQuery(_0x2fd372,_0x13c5e7,_0x46bad6,_0x3c2d34,_0xf824c0){var _0x17250b=_0xf824c0?'c':_0x0b9b('0xe');if(!_0x13c5e7){_0x13c5e7=['id',_0x0b9b('0x14'),_0x0b9b('0x15'),_0x0b9b('0x16'),_0x0b9b('0x17'),'fax',_0x0b9b('0x18'),_0x0b9b('0x6'),_0x0b9b('0x19'),'createdAt',_0x0b9b('0x1a'),'deletedAt','TagIds'];}else if(!_0x13c5e7[_0x0b9b('0x1b')]('id')){_0x13c5e7['push']('id');}var _0x245a1b=_0x46bad6&&_0xf824c0||!_0x46bad6&&!_0xf824c0;if(_0x3c2d34){_0x245a1b=_0x3c2d34&&_0xf824c0||!_0x3c2d34&&!_0xf824c0;}_0x13c5e7[_0x0b9b('0x1c')](function(_0x271f8e){if(_0x271f8e===_0x0b9b('0x1d')){if(_0x245a1b){_0x2fd372[_0x0b9b('0x1e')](_0x0b9b('0x1f'),_0x271f8e);}else if(_0x46bad6||_0x3c2d34){_0x2fd372[_0x0b9b('0x1e')](_0x17250b+'.'+_0x271f8e);}}else{_0x2fd372['field'](_0x17250b+'.'+_0x271f8e);}});return _0x2fd372;}function getSqlClauses(){var _0x335f27={'default':squel[_0x0b9b('0x20')](),'fields':squel[_0x0b9b('0x20')](),'filter':squel['expr'](),'tags':{'clause':squel[_0x0b9b('0x20')](),'ids':null},'user':{'clause':squel[_0x0b9b('0x20')](),'skip':![]}};return _0x335f27;}function parseTagParameter(_0x472e2f){var _0x147394=squel[_0x0b9b('0x20')]();if(_0x472e2f){var _0x59385d=utils[_0x0b9b('0x21')](_0x472e2f);_0x59385d[_0x0b9b('0x1c')](function(_0xb642ce){_0x147394['or']('CONCAT(\x27,\x27,\x20subqry.TagIds,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0xb642ce+',%');});}return _0x147394;}function parseSearchFilter(_0x2607d5){var _0x20ba83=squel[_0x0b9b('0x20')]();if(_0x2607d5){var _0x20c5d7=_0x2607d5[_0x0b9b('0x22')]('\x5c','\x5c\x5c')[_0x0b9b('0x22')](/'/g,'\x27\x27');if(_0x20c5d7['split']('\x20')[_0x0b9b('0x23')]>0x1){_0x20ba83['or'](_0x0b9b('0x24'),qs[_0x0b9b('0x25')](_0x20c5d7,!![]),null);}else{if(qs['isNumeric'](_0x20c5d7)){_0x20ba83['or'](_0x0b9b('0x26'),_0x20c5d7+'%');_0x20ba83['or'](_0x0b9b('0x27'),_0x20c5d7+'%');_0x20ba83['or']('c.mobile\x20LIKE\x20?',_0x20c5d7+'%');_0x20ba83['or'](_0x0b9b('0x28'),_0x20c5d7+'%');}else if(qs['isEmail'](_0x20c5d7)){_0x20ba83['or'](_0x0b9b('0x29'),_0x20c5d7+'%');}else{_0x20ba83['or']('c.firstName\x20LIKE\x20?','%'+_0x20c5d7+'%');_0x20ba83['or'](_0x0b9b('0x2a'),'%'+_0x20c5d7+'%');_0x20ba83['or'](_0x0b9b('0x29'),'%'+_0x20c5d7+'%');}}}return _0x20ba83;}function parseAdvancedSearchFilter(_0x435e16,_0x4bf53e){var _0x4c859f=getSqlClauses();var _0x50e42e=as[_0x0b9b('0x2b')](_0x435e16);var _0x13da9d=_0x50e42e[_0x0b9b('0x2c')];for(var _0x566dfc=0x0;_0x566dfc<_0x50e42e['conditions']['length'];_0x566dfc++){var _0x385df6=_0x50e42e[_0x0b9b('0x2d')][_0x566dfc];var _0x2f4856='c';var _0x57f38e=_[_0x0b9b('0x2e')](_0x4bf53e,[_0x0b9b('0x2f'),_0x385df6[_0x0b9b('0x1e')]]);if(_0x57f38e){if(_0x385df6['field']===_0x0b9b('0x30')||_0x57f38e['fieldType']===_0x0b9b('0x31')){_0x385df6['castTo']=_0x0b9b('0x32');}var _0x222a93=as['buildExpression'](_0x2f4856,_0x57f38e[_0x0b9b('0x33')],_0x385df6);_0x4c859f[_0x0b9b('0x34')][_0x13da9d](_0x222a93[_0x0b9b('0x35')],_0x222a93[_0x0b9b('0x36')][_0x0b9b('0x37')],_0x222a93[_0x0b9b('0x36')]['end']);}else{if(_0x385df6[_0x0b9b('0x1e')]==='Tag'){var _0x374694=_0x385df6[_0x0b9b('0x36')]['split'](',')[_0x0b9b('0x38')](function(_0x2ef198){return Number(_0x2ef198);});var _0x401e0d=parseTagParameter(_0x374694);_0x4c859f[_0x0b9b('0x39')][_0x0b9b('0x3a')]['and'](_0x401e0d);_0x4c859f[_0x0b9b('0x39')][_0x0b9b('0x3b')]=_0x374694;}else if(_0x385df6[_0x0b9b('0x1e')]==='User'){_0x4c859f['user']['clause'][_0x0b9b('0x3c')](_0x0b9b('0x3d'),_0x385df6[_0x0b9b('0x36')]);_0x4c859f['user'][_0x0b9b('0x3e')]=!![];}}}return _0x4c859f;}function parseModelFields(_0x2dfb6f,_0x549c51){var _0x2c8263=squel[_0x0b9b('0x20')]();var _0x18fa07=_(_0x2dfb6f)['keys']()[_0x0b9b('0x38')](function(_0x4c3115){return _[_0x0b9b('0x3f')](_0x549c51,[_0x0b9b('0x2f'),_0x4c3115])?_0x4c3115:undefined;})[_0x0b9b('0x40')]()[_0x0b9b('0x36')]();if(_0x2dfb6f[_0x0b9b('0x41')]){_0x18fa07['push'](_0x0b9b('0x41'));}if(_0x2dfb6f['User']){_0x18fa07[_0x0b9b('0x42')]('User');}if(_0x18fa07[_0x0b9b('0x23')]>0x0){_0x18fa07[_0x0b9b('0x1c')](function(_0x327183){if(_0x327183===_0x0b9b('0x6')){_0x2c8263[_0x0b9b('0x3c')](_0x0b9b('0x43'),[][_0x0b9b('0x44')](_0x2dfb6f[_0x327183]));}else if(_0x327183===_0x0b9b('0x41')){var _0x19a55e='%'+_0x2dfb6f[_0x327183]+'%';_0x2c8263[_0x0b9b('0x3c')](_0x0b9b('0x45'),_0x19a55e);}else if(_0x327183==='User'){_0x2c8263[_0x0b9b('0x3c')]('uc.UserId\x20=\x20?',_0x2dfb6f[_0x327183]);}else{_0x2c8263[_0x0b9b('0x3c')]('c.'+_0x327183+_0x0b9b('0x46'),_0x2dfb6f[_0x327183]);}});}return _0x2c8263;}function parseQueryParameters(_0x31e13a,_0x29a213){var _0x246d9f=getSqlClauses();return Promise[_0x0b9b('0x47')]()[_0x0b9b('0x48')](function(){return parseModelFields(_0x31e13a,_0x29a213);})[_0x0b9b('0x48')](function(_0x52d88a){_0x246d9f[_0x0b9b('0x49')][_0x0b9b('0x3c')](_0x52d88a);return parseTagParameter(_0x31e13a[_0x0b9b('0x4a')]);})['then'](function(_0x4ab763){_0x246d9f[_0x0b9b('0x39')]['clause']['and'](_0x4ab763);return parseSearchFilter(_0x31e13a[_0x0b9b('0x4b')]);})['then'](function(_0x240d27){_0x246d9f['filter']=_0x240d27;return _0x246d9f;});}function checkListsRestrictions(_0x114132,_0x3a83f8,_0x3b5651){var _0x3cfca3=squel[_0x0b9b('0x20')]();return Promise[_0x0b9b('0x47')]()[_0x0b9b('0x48')](function(){if(_0x3a83f8['search']&&_0x114132[_0x0b9b('0x3')]===_0x0b9b('0x4')&&!_0x3b5651){return _0x114132[_0x0b9b('0x4c')]({'attributes':['id'],'raw':!![]});}})[_0x0b9b('0x48')](function(_0x2f58d4){if(_0x2f58d4){if(_0x2f58d4[_0x0b9b('0x23')]===0x0){_0x3cfca3[_0x0b9b('0x3c')](_0x0b9b('0x4d'));}else{_0x3cfca3['and'](_0x0b9b('0x43'),_[_0x0b9b('0x38')](_0x2f58d4,'id'));}}})[_0x0b9b('0x48')](function(){return _0x3cfca3;});}function buildContactsQuery(_0x2a96d5,_0x34735b,_0x1f36cf,_0x4ffe0a,_0x1d58fc,_0x1d905b){if(_0x34735b){_0x34735b=_0x1f36cf[_0x0b9b('0x4e')];}_0x2a96d5=addFieldsToQuery(_0x2a96d5,_0x34735b,_0x4ffe0a,_0x1d905b,!![]);var _0x4de177=squel[_0x0b9b('0x9')]();_0x4de177=addFieldsToQuery(_0x4de177,_0x34735b,_0x4ffe0a,_0x1d905b,![]);if(_0x4ffe0a||_0x1d905b){_0x2a96d5=applyJoinClauses(_0x2a96d5,!![]);_0x2a96d5[_0x0b9b('0x4f')](_0x0b9b('0x50'));if(_0x1f36cf[_0x0b9b('0x51')]){_0x4de177[_0x0b9b('0x51')](_0x1f36cf[_0x0b9b('0x51')]);}if(_0x1f36cf[_0x0b9b('0x52')]){_0x4de177['offset'](_0x1f36cf[_0x0b9b('0x52')]);}}else{_0x4de177=applyJoinClauses(_0x4de177,![]);_0x4de177[_0x0b9b('0x4f')]('subqry.id');if(_0x1f36cf['limit']){_0x2a96d5['limit'](_0x1f36cf[_0x0b9b('0x51')]);}if(_0x1f36cf[_0x0b9b('0x52')]){_0x2a96d5[_0x0b9b('0x52')](_0x1f36cf[_0x0b9b('0x52')]);}}_0x4de177[_0x0b9b('0x53')](_0x1d58fc);if(_0x1f36cf[_0x0b9b('0x54')]){_0x1f36cf[_0x0b9b('0x54')][_0x0b9b('0x1c')](function(_0x2e10ad){_0x2a96d5[_0x0b9b('0x54')]('c.'+_0x2e10ad[0x0],_0x2e10ad[0x1]===_0x0b9b('0x55')?![]:!![]);_0x4de177[_0x0b9b('0x54')](_0x0b9b('0x56')+_0x2e10ad[0x0],_0x2e10ad[0x1]==='DESC'?![]:!![]);});}_0x4de177[_0x0b9b('0xa')](_0x2a96d5,'subqry');return _0x4de177;}function getFilteredContacts(_0x1446f5){var _0x33dd93=[];return db[_0x0b9b('0x57')][_0x0b9b('0x58')]({'attributes':['id',_0x0b9b('0x2f'),'color'],'raw':!![]})[_0x0b9b('0x48')](function(_0xbb2b2c){_0x33dd93=_[_0x0b9b('0x59')](_0xbb2b2c,'id');var _0x51bec4={'type':db['Sequelize'][_0x0b9b('0x5a')]['SELECT'],'model':db[_0x0b9b('0x5b')],'mapToModel':!![],'nest':!![],'raw':!![]};return db[_0x0b9b('0x5c')][_0x0b9b('0x5d')](_0x1446f5[_0x0b9b('0x5e')](),_0x51bec4);})[_0x0b9b('0x48')](function(_0xab713f){_0xab713f['forEach'](function(_0x180622){if(_0x180622[_0x0b9b('0x1d')]){_0x180622[_0x0b9b('0x5f')]=[];_0x180622['TagIds'][_0x0b9b('0x60')](',')[_0x0b9b('0x1c')](function(_0xa7e76e){_0x180622[_0x0b9b('0x5f')][_0x0b9b('0x42')](_0x33dd93[_0xa7e76e]);});}delete _0x180622[_0x0b9b('0x1d')];});return _0xab713f;});}function countFilteredContacts(_0x3a8f5c,_0x3b621f){var _0x7511a2=_0x3a8f5c[_0x0b9b('0x61')]();_0x7511a2[_0x0b9b('0x1e')](_0x0b9b('0x62'));_0x7511a2=applyJoinClauses(_0x7511a2,!![]);_0x3a8f5c['group'](_0x0b9b('0x50'));var _0x6e7875=utils['getSelectedTags'](_0x3b621f);if(!_[_0x0b9b('0x63')](_0x6e7875)){_0x7511a2[_0x0b9b('0xc')]('t.id\x20IN\x20?',_0x6e7875);}var _0x3a23c9={'type':db[_0x0b9b('0x64')]['QueryTypes']['SELECT'],'raw':!![]};return db[_0x0b9b('0x5c')][_0x0b9b('0x5d')](_0x7511a2[_0x0b9b('0x5e')](),_0x3a23c9)['then'](function(_0x13a680){return _0x13a680[0x0][_0x0b9b('0x62')];});}module[_0x0b9b('0x65')]={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};