ea72ffeacbc690cf6806aee8a98002d2d73e0e6b
[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 _0x0824=['find','dateOfBirth','fieldType','datetime','DATE','type','text','value','end','Tag','map','tags','and','ids','User','user','clause','uc.UserId\x20=\x20?','keys','some','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','search','c.ListId\x20IS\x20NULL','attributes','group','c.id','limit','offset','subqry.id','having','order','DESC','subqry.','findAll','name','color','keyBy','Sequelize','QueryTypes','CmContact','sequelize','query','toString','TagIds','Tags','isEmpty','t.id\x20IN\x20?','SELECT','exports','../parsers/qs','../interaction/utils','../../mysqldb','role','agent','autocomplete','true','select','from','cm_contacts','where','c.deletedAt\x20IS\x20NULL','subqry','left_join','cm_user_has_contacts','uc.CmContactId\x20=\x20','.id','cm_contact_has_tags','ct.CmContactId\x20=\x20','tools_tags','t.id\x20=\x20ct.TagId','firstName','phone','mobile','fax','ListId','CompanyId','createdAt','updatedAt','deletedAt','includes','field','expr','getSelectedTags','forEach','CONCAT(\x27,\x27,\x20subqry.TagIds,\x20\x27,\x27)\x20LIKE\x20?','replace','split','length','MATCH\x20(c.firstName,\x20c.lastName,\x20c.phone,\x20c.mobile,\x20c.fax,\x20c.email)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','getFullTextValue','isNumeric','c.id\x20LIKE\x20?','c.phone\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','c.lastName\x20LIKE\x20?','parseSearch','sqlOperator','conditions'];(function(_0x5d0004,_0x4bcb9a){var _0x4be732=function(_0x30e2f4){while(--_0x30e2f4){_0x5d0004['push'](_0x5d0004['shift']());}};_0x4be732(++_0x4bcb9a);}(_0x0824,0xab));var _0x4082=function(_0x5a7e2b,_0x14a856){_0x5a7e2b=_0x5a7e2b-0x0;var _0xe0ddc0=_0x0824[_0x5a7e2b];return _0xe0ddc0;};'use strict';var _=require('lodash');var squel=require('squel');var as=require('../parsers/advancedSearch');var qs=require(_0x4082('0x0'));var utils=require(_0x4082('0x1'));var db=require(_0x4082('0x2'))['db'];function skipContactsQuery(_0x5c9f2d,_0x15e9f4){var _0x53e0b3=![];if(_0x5c9f2d[_0x4082('0x3')]===_0x4082('0x4')&&!_0x15e9f4['search']&&!_0x15e9f4['ListId']&&_0x15e9f4[_0x4082('0x5')]!==_0x4082('0x6')){_0x53e0b3=!![];}return _0x53e0b3;}function getContactsSubquery(){return squel[_0x4082('0x7')]()[_0x4082('0x8')](_0x4082('0x9'),'c')[_0x4082('0xa')](_0x4082('0xb'));}function applyJoinClauses(_0x14088b,_0x324aa8){var _0x30f8c8=_0x324aa8?'c':_0x4082('0xc');_0x14088b[_0x4082('0xd')](_0x4082('0xe'),'uc',_0x4082('0xf')+_0x30f8c8+_0x4082('0x10'))[_0x4082('0xd')](_0x4082('0x11'),'ct',_0x4082('0x12')+_0x30f8c8+_0x4082('0x10'))[_0x4082('0xd')](_0x4082('0x13'),'t',_0x4082('0x14'));return _0x14088b;}function addFieldsToQuery(_0x21278f,_0x16de78,_0x5e26bf,_0x241ac1,_0x46d3aa){var _0xfdbaeb=_0x46d3aa?'c':'subqry';if(!_0x16de78){_0x16de78=['id',_0x4082('0x15'),'lastName',_0x4082('0x16'),_0x4082('0x17'),_0x4082('0x18'),'email',_0x4082('0x19'),_0x4082('0x1a'),_0x4082('0x1b'),_0x4082('0x1c'),_0x4082('0x1d'),'TagIds'];}else if(!_0x16de78[_0x4082('0x1e')]('id')){_0x16de78['push']('id');}var _0x4a237e=_0x5e26bf&&_0x46d3aa||!_0x5e26bf&&!_0x46d3aa;if(_0x241ac1){_0x4a237e=_0x241ac1&&_0x46d3aa||!_0x241ac1&&!_0x46d3aa;}_0x16de78['forEach'](function(_0x248f95){if(_0x248f95==='TagIds'){if(_0x4a237e){_0x21278f['field']('GROUP_CONCAT(DISTINCT\x20t.id)',_0x248f95);}else if(_0x5e26bf||_0x241ac1){_0x21278f[_0x4082('0x1f')](_0xfdbaeb+'.'+_0x248f95);}}else{_0x21278f['field'](_0xfdbaeb+'.'+_0x248f95);}});return _0x21278f;}function getSqlClauses(){var _0x1dfe65={'default':squel[_0x4082('0x20')](),'fields':squel[_0x4082('0x20')](),'filter':squel[_0x4082('0x20')](),'tags':{'clause':squel[_0x4082('0x20')](),'ids':null},'user':{'clause':squel['expr'](),'skip':![]}};return _0x1dfe65;}function parseTagParameter(_0x4fa448){var _0x345176=squel[_0x4082('0x20')]();if(_0x4fa448){var _0x9fbc21=utils[_0x4082('0x21')](_0x4fa448);_0x9fbc21[_0x4082('0x22')](function(_0x2d07ea){_0x345176['or'](_0x4082('0x23'),'%,'+_0x2d07ea+',%');});}return _0x345176;}function parseSearchFilter(_0x704352){var _0x387486=squel['expr']();if(_0x704352){var _0x7aa984=_0x704352['replace']('\x5c','\x5c\x5c')[_0x4082('0x24')](/'/g,'\x27\x27');if(_0x7aa984[_0x4082('0x25')]('\x20')[_0x4082('0x26')]>0x1){_0x387486['or'](_0x4082('0x27'),qs[_0x4082('0x28')](_0x7aa984,!![]),null);}else{if(qs[_0x4082('0x29')](_0x7aa984)){_0x387486['or'](_0x4082('0x2a'),_0x7aa984+'%');_0x387486['or'](_0x4082('0x2b'),_0x7aa984+'%');_0x387486['or'](_0x4082('0x2c'),_0x7aa984+'%');_0x387486['or'](_0x4082('0x2d'),_0x7aa984+'%');}else if(qs[_0x4082('0x2e')](_0x7aa984)){_0x387486['or'](_0x4082('0x2f'),_0x7aa984+'%');}else{_0x387486['or'](_0x4082('0x30'),'%'+_0x7aa984+'%');_0x387486['or'](_0x4082('0x31'),'%'+_0x7aa984+'%');_0x387486['or'](_0x4082('0x2f'),'%'+_0x7aa984+'%');}}}return _0x387486;}function parseAdvancedSearchFilter(_0x2493fc,_0x1940a7){var _0x300a45=getSqlClauses();var _0x217802=as[_0x4082('0x32')](_0x2493fc);var _0xf92029=_0x217802[_0x4082('0x33')];for(var _0x36a5ee=0x0;_0x36a5ee<_0x217802[_0x4082('0x34')][_0x4082('0x26')];_0x36a5ee++){var _0x4e57be=_0x217802[_0x4082('0x34')][_0x36a5ee];var _0x3da9eb='c';var _0x330916=_[_0x4082('0x35')](_0x1940a7,['name',_0x4e57be[_0x4082('0x1f')]]);if(_0x330916){if(_0x4e57be[_0x4082('0x1f')]===_0x4082('0x36')||_0x330916[_0x4082('0x37')]===_0x4082('0x38')){_0x4e57be['castTo']=_0x4082('0x39');}var _0x449814=as['buildExpression'](_0x3da9eb,_0x330916[_0x4082('0x3a')],_0x4e57be);_0x300a45['default'][_0xf92029](_0x449814[_0x4082('0x3b')],_0x449814[_0x4082('0x3c')]['start'],_0x449814[_0x4082('0x3c')][_0x4082('0x3d')]);}else{if(_0x4e57be[_0x4082('0x1f')]===_0x4082('0x3e')){var _0x442deb=_0x4e57be[_0x4082('0x3c')][_0x4082('0x25')](',')[_0x4082('0x3f')](function(_0x574641){return Number(_0x574641);});var _0x43f7a3=parseTagParameter(_0x442deb);_0x300a45[_0x4082('0x40')]['clause'][_0x4082('0x41')](_0x43f7a3);_0x300a45[_0x4082('0x40')][_0x4082('0x42')]=_0x442deb;}else if(_0x4e57be[_0x4082('0x1f')]===_0x4082('0x43')){_0x300a45[_0x4082('0x44')][_0x4082('0x45')]['and'](_0x4082('0x46'),_0x4e57be[_0x4082('0x3c')]);_0x300a45[_0x4082('0x44')]['skip']=!![];}}}return _0x300a45;}function parseModelFields(_0x4e211c,_0x57a861){var _0x18d660=squel[_0x4082('0x20')]();var _0xca1a76=_(_0x4e211c)[_0x4082('0x47')]()[_0x4082('0x3f')](function(_0x536162){return _[_0x4082('0x48')](_0x57a861,['name',_0x536162])?_0x536162:undefined;})['compact']()['value']();if(_0x4e211c[_0x4082('0x49')]){_0xca1a76[_0x4082('0x4a')](_0x4082('0x49'));}if(_0x4e211c[_0x4082('0x43')]){_0xca1a76[_0x4082('0x4a')](_0x4082('0x43'));}if(_0xca1a76[_0x4082('0x26')]>0x0){_0xca1a76['forEach'](function(_0x4b07ca){if(_0x4b07ca===_0x4082('0x19')){_0x18d660[_0x4082('0x41')](_0x4082('0x4b'),[][_0x4082('0x4c')](_0x4e211c[_0x4b07ca]));}else if(_0x4b07ca===_0x4082('0x49')){var _0x2f6d72='%'+_0x4e211c[_0x4b07ca]+'%';_0x18d660[_0x4082('0x41')](_0x4082('0x4d'),_0x2f6d72);}else if(_0x4b07ca===_0x4082('0x43')){_0x18d660['and'](_0x4082('0x46'),_0x4e211c[_0x4b07ca]);}else{_0x18d660[_0x4082('0x41')]('c.'+_0x4b07ca+_0x4082('0x4e'),_0x4e211c[_0x4b07ca]);}});}return _0x18d660;}function parseQueryParameters(_0x423f98,_0x3876dc){var _0x159e7f=getSqlClauses();return Promise[_0x4082('0x4f')]()[_0x4082('0x50')](function(){return parseModelFields(_0x423f98,_0x3876dc);})[_0x4082('0x50')](function(_0x321dc1){_0x159e7f[_0x4082('0x51')][_0x4082('0x41')](_0x321dc1);return parseTagParameter(_0x423f98[_0x4082('0x52')]);})['then'](function(_0x532bc7){_0x159e7f['tags'][_0x4082('0x45')][_0x4082('0x41')](_0x532bc7);return parseSearchFilter(_0x423f98[_0x4082('0x53')]);})['then'](function(_0x260353){_0x159e7f['filter']=_0x260353;return _0x159e7f;});}function checkListsRestrictions(_0x1540e5,_0x310d6c,_0x368976){var _0x452ecf=squel[_0x4082('0x20')]();return Promise[_0x4082('0x4f')]()[_0x4082('0x50')](function(){if(_0x310d6c[_0x4082('0x54')]&&_0x1540e5[_0x4082('0x3')]===_0x4082('0x4')&&!_0x368976){return _0x1540e5['getLists']({'attributes':['id'],'raw':!![]});}})[_0x4082('0x50')](function(_0x289632){if(_0x289632){if(_0x289632[_0x4082('0x26')]===0x0){_0x452ecf[_0x4082('0x41')](_0x4082('0x55'));}else{_0x452ecf[_0x4082('0x41')](_0x4082('0x4b'),_[_0x4082('0x3f')](_0x289632,'id'));}}})[_0x4082('0x50')](function(){return _0x452ecf;});}function buildContactsQuery(_0x152d22,_0x54b2e0,_0x565804,_0x2e593d,_0x56b51d,_0x3bd8c5){if(_0x54b2e0){_0x54b2e0=_0x565804[_0x4082('0x56')];}_0x152d22=addFieldsToQuery(_0x152d22,_0x54b2e0,_0x2e593d,_0x3bd8c5,!![]);var _0xe73601=squel[_0x4082('0x7')]();_0xe73601=addFieldsToQuery(_0xe73601,_0x54b2e0,_0x2e593d,_0x3bd8c5,![]);if(_0x2e593d||_0x3bd8c5){_0x152d22=applyJoinClauses(_0x152d22,!![]);_0x152d22[_0x4082('0x57')](_0x4082('0x58'));if(_0x565804['limit']){_0xe73601[_0x4082('0x59')](_0x565804['limit']);}if(_0x565804['offset']){_0xe73601[_0x4082('0x5a')](_0x565804[_0x4082('0x5a')]);}}else{_0xe73601=applyJoinClauses(_0xe73601,![]);_0xe73601[_0x4082('0x57')](_0x4082('0x5b'));if(_0x565804[_0x4082('0x59')]){_0x152d22[_0x4082('0x59')](_0x565804['limit']);}if(_0x565804[_0x4082('0x5a')]){_0x152d22['offset'](_0x565804[_0x4082('0x5a')]);}}_0xe73601[_0x4082('0x5c')](_0x56b51d);if(_0x565804[_0x4082('0x5d')]){_0x565804[_0x4082('0x5d')][_0x4082('0x22')](function(_0x558d09){_0x152d22[_0x4082('0x5d')]('c.'+_0x558d09[0x0],_0x558d09[0x1]===_0x4082('0x5e')?![]:!![]);_0xe73601['order'](_0x4082('0x5f')+_0x558d09[0x0],_0x558d09[0x1]===_0x4082('0x5e')?![]:!![]);});}_0xe73601[_0x4082('0x8')](_0x152d22,_0x4082('0xc'));return _0xe73601;}function getFilteredContacts(_0x43424b){var _0x2e60bb=[];return db['Tag'][_0x4082('0x60')]({'attributes':['id',_0x4082('0x61'),_0x4082('0x62')],'raw':!![]})[_0x4082('0x50')](function(_0x45cb00){_0x2e60bb=_[_0x4082('0x63')](_0x45cb00,'id');var _0x420de1={'type':db[_0x4082('0x64')][_0x4082('0x65')]['SELECT'],'model':db[_0x4082('0x66')],'mapToModel':!![],'nest':!![],'raw':!![]};return db[_0x4082('0x67')][_0x4082('0x68')](_0x43424b[_0x4082('0x69')](),_0x420de1);})['then'](function(_0x7f0405){_0x7f0405[_0x4082('0x22')](function(_0x4ac274){if(_0x4ac274[_0x4082('0x6a')]){_0x4ac274[_0x4082('0x6b')]=[];_0x4ac274[_0x4082('0x6a')]['split'](',')['forEach'](function(_0x329f83){_0x4ac274[_0x4082('0x6b')][_0x4082('0x4a')](_0x2e60bb[_0x329f83]);});}delete _0x4ac274[_0x4082('0x6a')];});return _0x7f0405;});}function countFilteredContacts(_0x1b3956,_0x357c31){var _0x7a13fc=_0x1b3956['clone']();_0x7a13fc[_0x4082('0x1f')]('COUNT(*)');_0x7a13fc=applyJoinClauses(_0x7a13fc,!![]);_0x1b3956[_0x4082('0x57')](_0x4082('0x58'));var _0x3fa2db=utils['getSelectedTags'](_0x357c31);if(!_[_0x4082('0x6c')](_0x3fa2db)){_0x7a13fc['where'](_0x4082('0x6d'),_0x3fa2db);}var _0x3245be={'type':db[_0x4082('0x64')]['QueryTypes'][_0x4082('0x6e')],'raw':!![]};return db['sequelize'][_0x4082('0x68')](_0x7a13fc[_0x4082('0x69')](),_0x3245be)[_0x4082('0x50')](function(_0x23aed8){return _0x23aed8[0x0]['COUNT(*)'];});}module[_0x4082('0x6f')]={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};