74875d08015ed059fb55dc0c9c7d4e60df54849b
[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 _0x1dae=['Tags','clone','COUNT(*)','isEmpty','t.id\x20IN\x20?','toString','exports','lodash','squel','../parsers/advancedSearch','../../mysqldb','role','agent','search','ListId','autocomplete','true','select','from','cm_contacts','cm_user_has_contacts','uc.CmContactId\x20=\x20','.id','cm_contact_has_tags','left_join','tools_tags','t.id\x20=\x20ct.TagId','subqry','firstName','lastName','phone','fax','createdAt','updatedAt','deletedAt','TagIds','includes','push','field','GROUP_CONCAT(DISTINCT\x20t.id)','expr','getSelectedTags','forEach','CONCAT(\x27,\x27,\x20subqry.TagIds,\x20\x27,\x27)\x20LIKE\x20?','replace','escapeLIKESpecialChars','split','getFullTextValue','isNumeric','c.id\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','c.lastName\x20LIKE\x20?','sqlOperator','length','dateOfBirth','datetime','DATE','buildExpression','type','default','value','start','Tag','map','and','tags','ids','User','user','clause','uc.UserId\x20=\x20?','skip','keys','some','compact','Contact','c.ListId\x20IN\x20?','concat','\x20=\x20?','resolve','then','fields','tag','filter','attributes','group','c.id','limit','offset','subqry.id','having','order','DESC','subqry.','findAll','keyBy','Sequelize','QueryTypes','SELECT','sequelize','query'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1dae,0x1a7));var _0xe1da=function(_0x269730,_0x27b57b){_0x269730=_0x269730-0x0;var _0xb6a0f0=_0x1dae[_0x269730];return _0xb6a0f0;};'use strict';var _=require(_0xe1da('0x0'));var squel=require(_0xe1da('0x1'));var as=require(_0xe1da('0x2'));var qs=require('../parsers/qs');var utils=require('../interaction/utils');var db=require(_0xe1da('0x3'))['db'];function skipContactsQuery(_0x54e272,_0x177d58){var _0x18d478=![];if(_0x54e272[_0xe1da('0x4')]===_0xe1da('0x5')&&!_0x177d58[_0xe1da('0x6')]&&!_0x177d58[_0xe1da('0x7')]&&_0x177d58[_0xe1da('0x8')]!==_0xe1da('0x9')){_0x18d478=!![];}return _0x18d478;}function getContactsSubquery(){return squel[_0xe1da('0xa')]()[_0xe1da('0xb')](_0xe1da('0xc'),'c')['where']('c.deletedAt\x20IS\x20NULL');}function applyJoinClauses(_0x163ab6,_0x1f5be4){var _0x5318fe=_0x1f5be4?'c':'subqry';_0x163ab6['left_join'](_0xe1da('0xd'),'uc',_0xe1da('0xe')+_0x5318fe+_0xe1da('0xf'))['left_join'](_0xe1da('0x10'),'ct','ct.CmContactId\x20=\x20'+_0x5318fe+_0xe1da('0xf'))[_0xe1da('0x11')](_0xe1da('0x12'),'t',_0xe1da('0x13'));return _0x163ab6;}function addFieldsToQuery(_0x549113,_0x2ff8c6,_0x5ac900,_0x2cb716,_0x2c0af1){var _0x339dbb=_0x2c0af1?'c':_0xe1da('0x14');if(!_0x2ff8c6){_0x2ff8c6=['id',_0xe1da('0x15'),_0xe1da('0x16'),_0xe1da('0x17'),'mobile',_0xe1da('0x18'),'email',_0xe1da('0x7'),'CompanyId',_0xe1da('0x19'),_0xe1da('0x1a'),_0xe1da('0x1b'),_0xe1da('0x1c')];}else if(!_0x2ff8c6[_0xe1da('0x1d')]('id')){_0x2ff8c6[_0xe1da('0x1e')]('id');}var _0x465a6f=_0x5ac900&&_0x2c0af1||!_0x5ac900&&!_0x2c0af1;if(_0x2cb716){_0x465a6f=_0x2cb716&&_0x2c0af1||!_0x2cb716&&!_0x2c0af1;}_0x2ff8c6['forEach'](function(_0x390798){if(_0x390798===_0xe1da('0x1c')){if(_0x465a6f){_0x549113[_0xe1da('0x1f')](_0xe1da('0x20'),_0x390798);}else if(_0x5ac900||_0x2cb716){_0x549113[_0xe1da('0x1f')](_0x339dbb+'.'+_0x390798);}}else{_0x549113[_0xe1da('0x1f')](_0x339dbb+'.'+_0x390798);}});return _0x549113;}function getSqlClauses(){var _0x275eb8={'default':squel['expr'](),'fields':squel[_0xe1da('0x21')](),'filter':squel['expr'](),'tags':{'clause':squel[_0xe1da('0x21')](),'ids':null},'user':{'clause':squel[_0xe1da('0x21')](),'skip':![]}};return _0x275eb8;}function parseTagParameter(_0x3b0505){var _0xbedbca=squel[_0xe1da('0x21')]();if(_0x3b0505){var _0x50ae36=utils[_0xe1da('0x22')](_0x3b0505);_0x50ae36[_0xe1da('0x23')](function(_0x43591c){_0xbedbca['or'](_0xe1da('0x24'),'%,'+_0x43591c+',%');});}return _0xbedbca;}function parseSearchFilter(_0x24c8bb){var _0x3e1823=squel['expr']();if(_0x24c8bb){var _0x7228ef=_0x24c8bb[_0xe1da('0x25')]('\x5c','\x5c\x5c')[_0xe1da('0x25')](/'/g,'\x27\x27');var _0x27cef6=qs[_0xe1da('0x26')](_0x7228ef);if(_0x7228ef[_0xe1da('0x27')]('\x20')['length']>0x1){_0x3e1823['or']('MATCH\x20(c.firstName,\x20c.lastName,\x20c.phone,\x20c.mobile,\x20c.fax,\x20c.email)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',qs[_0xe1da('0x28')](_0x7228ef,!![]),null);}else{if(qs[_0xe1da('0x29')](_0x7228ef)){_0x3e1823['or'](_0xe1da('0x2a'),_0x27cef6+'%');_0x3e1823['or']('c.phone\x20LIKE\x20?',_0x27cef6+'%');_0x3e1823['or'](_0xe1da('0x2b'),_0x27cef6+'%');_0x3e1823['or'](_0xe1da('0x2c'),_0x27cef6+'%');}else if(qs[_0xe1da('0x2d')](_0x7228ef)){_0x3e1823['or'](_0xe1da('0x2e'),_0x27cef6+'%');}else{_0x3e1823['or']('c.firstName\x20LIKE\x20?','%'+_0x27cef6+'%');_0x3e1823['or'](_0xe1da('0x2f'),'%'+_0x27cef6+'%');_0x3e1823['or'](_0xe1da('0x2e'),'%'+_0x27cef6+'%');}}}return _0x3e1823;}function parseAdvancedSearchFilter(_0x5143b0,_0x5b4b9f){var _0x17e57a=getSqlClauses();var _0x3bfd7a=as['parseSearch'](_0x5143b0);var _0x47b37b=_0x3bfd7a[_0xe1da('0x30')];for(var _0x5b7354=0x0;_0x5b7354<_0x3bfd7a['conditions'][_0xe1da('0x31')];_0x5b7354++){var _0x3f4236=_0x3bfd7a['conditions'][_0x5b7354];var _0x18e79a='c';var _0x3d8bb8=_['find'](_0x5b4b9f,['name',_0x3f4236[_0xe1da('0x1f')]]);if(_0x3d8bb8){if(_0x3f4236[_0xe1da('0x1f')]===_0xe1da('0x32')||_0x3d8bb8['fieldType']===_0xe1da('0x33')){_0x3f4236['castTo']=_0xe1da('0x34');}var _0x4c4664=as[_0xe1da('0x35')](_0x18e79a,_0x3d8bb8[_0xe1da('0x36')],_0x3f4236);_0x17e57a[_0xe1da('0x37')][_0x47b37b](_0x4c4664['text'],_0x4c4664[_0xe1da('0x38')][_0xe1da('0x39')],_0x4c4664['value']['end']);}else{if(_0x3f4236['field']===_0xe1da('0x3a')){var _0x2edc37=_0x3f4236[_0xe1da('0x38')][_0xe1da('0x27')](',')[_0xe1da('0x3b')](function(_0x3cadff){return Number(_0x3cadff);});var _0x5f50e8=parseTagParameter(_0x2edc37);_0x17e57a['tags']['clause'][_0xe1da('0x3c')](_0x5f50e8);_0x17e57a[_0xe1da('0x3d')][_0xe1da('0x3e')]=_0x2edc37;}else if(_0x3f4236[_0xe1da('0x1f')]===_0xe1da('0x3f')){_0x17e57a[_0xe1da('0x40')][_0xe1da('0x41')][_0xe1da('0x3c')](_0xe1da('0x42'),_0x3f4236[_0xe1da('0x38')]);_0x17e57a[_0xe1da('0x40')][_0xe1da('0x43')]=!![];}}}return _0x17e57a;}function parseModelFields(_0x553a47,_0x284909){var _0x154934=squel[_0xe1da('0x21')]();var _0x2fd9f6=_(_0x553a47)[_0xe1da('0x44')]()['map'](function(_0x1e9b86){return _[_0xe1da('0x45')](_0x284909,['name',_0x1e9b86])?_0x1e9b86:undefined;})[_0xe1da('0x46')]()[_0xe1da('0x38')]();if(_0x553a47[_0xe1da('0x47')]){_0x2fd9f6[_0xe1da('0x1e')](_0xe1da('0x47'));}if(_0x553a47['User']){_0x2fd9f6['push']('User');}if(_0x2fd9f6[_0xe1da('0x31')]>0x0){_0x2fd9f6[_0xe1da('0x23')](function(_0x3fdae8){if(_0x3fdae8===_0xe1da('0x7')){_0x154934[_0xe1da('0x3c')](_0xe1da('0x48'),[][_0xe1da('0x49')](_0x553a47[_0x3fdae8]));}else if(_0x3fdae8==='Contact'){var _0xc0e2fd='%'+_0x553a47[_0x3fdae8]+'%';_0x154934[_0xe1da('0x3c')]('CONCAT_WS(\x27\x20\x27,\x20c.firstName,\x20c.lastName,\x20c.email)\x20LIKE\x20?',_0xc0e2fd);}else if(_0x3fdae8===_0xe1da('0x3f')){_0x154934[_0xe1da('0x3c')](_0xe1da('0x42'),_0x553a47[_0x3fdae8]);}else{_0x154934[_0xe1da('0x3c')]('c.'+_0x3fdae8+_0xe1da('0x4a'),_0x553a47[_0x3fdae8]);}});}return _0x154934;}function parseQueryParameters(_0x5b598f,_0x200965){var _0x5605a9=getSqlClauses();return Promise[_0xe1da('0x4b')]()[_0xe1da('0x4c')](function(){return parseModelFields(_0x5b598f,_0x200965);})[_0xe1da('0x4c')](function(_0x378000){_0x5605a9[_0xe1da('0x4d')][_0xe1da('0x3c')](_0x378000);return parseTagParameter(_0x5b598f[_0xe1da('0x4e')]);})['then'](function(_0x32e6f5){_0x5605a9[_0xe1da('0x3d')][_0xe1da('0x41')]['and'](_0x32e6f5);return parseSearchFilter(_0x5b598f[_0xe1da('0x4f')]);})[_0xe1da('0x4c')](function(_0x20c5f2){_0x5605a9['filter']=_0x20c5f2;return _0x5605a9;});}function checkListsRestrictions(_0x291dfc,_0x34fa38,_0x4275eb){var _0x37b2ce=squel[_0xe1da('0x21')]();return Promise['resolve']()['then'](function(){if(_0x34fa38[_0xe1da('0x6')]&&_0x291dfc[_0xe1da('0x4')]==='agent'&&!_0x4275eb){return _0x291dfc['getLists']({'attributes':['id'],'raw':!![]});}})[_0xe1da('0x4c')](function(_0x5d9ae2){if(_0x5d9ae2){if(_0x5d9ae2[_0xe1da('0x31')]===0x0){_0x37b2ce[_0xe1da('0x3c')]('c.ListId\x20IS\x20NULL');}else{_0x37b2ce['and'](_0xe1da('0x48'),_[_0xe1da('0x3b')](_0x5d9ae2,'id'));}}})[_0xe1da('0x4c')](function(){return _0x37b2ce;});}function buildContactsQuery(_0x3545e3,_0x3944a7,_0x24a241,_0x24fbf0,_0x105ef5,_0x86a835){if(_0x3944a7){_0x3944a7=_0x24a241[_0xe1da('0x50')];}_0x3545e3=addFieldsToQuery(_0x3545e3,_0x3944a7,_0x24fbf0,_0x86a835,!![]);var _0x83f951=squel['select']();_0x83f951=addFieldsToQuery(_0x83f951,_0x3944a7,_0x24fbf0,_0x86a835,![]);if(_0x24fbf0||_0x86a835){_0x3545e3=applyJoinClauses(_0x3545e3,!![]);_0x3545e3[_0xe1da('0x51')](_0xe1da('0x52'));if(_0x24a241['limit']){_0x83f951['limit'](_0x24a241[_0xe1da('0x53')]);}if(_0x24a241['offset']){_0x83f951[_0xe1da('0x54')](_0x24a241[_0xe1da('0x54')]);}}else{_0x83f951=applyJoinClauses(_0x83f951,![]);_0x83f951[_0xe1da('0x51')](_0xe1da('0x55'));if(_0x24a241['limit']){_0x3545e3['limit'](_0x24a241[_0xe1da('0x53')]);}if(_0x24a241['offset']){_0x3545e3[_0xe1da('0x54')](_0x24a241[_0xe1da('0x54')]);}}_0x83f951[_0xe1da('0x56')](_0x105ef5);if(_0x24a241[_0xe1da('0x57')]){_0x24a241[_0xe1da('0x57')][_0xe1da('0x23')](function(_0x41900e){_0x3545e3['order']('c.'+_0x41900e[0x0],_0x41900e[0x1]===_0xe1da('0x58')?![]:!![]);_0x83f951[_0xe1da('0x57')](_0xe1da('0x59')+_0x41900e[0x0],_0x41900e[0x1]==='DESC'?![]:!![]);});}_0x83f951[_0xe1da('0xb')](_0x3545e3,_0xe1da('0x14'));return _0x83f951;}function getFilteredContacts(_0x18a436){var _0x518bd6=[];return db[_0xe1da('0x3a')][_0xe1da('0x5a')]({'attributes':['id','name','color'],'raw':!![]})[_0xe1da('0x4c')](function(_0x367423){_0x518bd6=_[_0xe1da('0x5b')](_0x367423,'id');var _0x106039={'type':db[_0xe1da('0x5c')][_0xe1da('0x5d')][_0xe1da('0x5e')],'model':db['CmContact'],'mapToModel':!![],'nest':!![],'raw':!![]};return db[_0xe1da('0x5f')][_0xe1da('0x60')](_0x18a436['toString'](),_0x106039);})[_0xe1da('0x4c')](function(_0x377e76){_0x377e76[_0xe1da('0x23')](function(_0x5d95c0){if(_0x5d95c0['TagIds']){_0x5d95c0['Tags']=[];_0x5d95c0[_0xe1da('0x1c')][_0xe1da('0x27')](',')[_0xe1da('0x23')](function(_0x5039be){_0x5d95c0[_0xe1da('0x61')][_0xe1da('0x1e')](_0x518bd6[_0x5039be]);});}delete _0x5d95c0[_0xe1da('0x1c')];});return _0x377e76;});}function countFilteredContacts(_0x3a08d6,_0x541f14){var _0x13aa18=_0x3a08d6[_0xe1da('0x62')]();_0x13aa18[_0xe1da('0x1f')](_0xe1da('0x63'));_0x13aa18=applyJoinClauses(_0x13aa18,!![]);_0x3a08d6['group'](_0xe1da('0x52'));var _0xe1a7e2=utils[_0xe1da('0x22')](_0x541f14);if(!_[_0xe1da('0x64')](_0xe1a7e2)){_0x13aa18['where'](_0xe1da('0x65'),_0xe1a7e2);}var _0x3c7a09={'type':db[_0xe1da('0x5c')][_0xe1da('0x5d')]['SELECT'],'raw':!![]};return db[_0xe1da('0x5f')]['query'](_0x13aa18[_0xe1da('0x66')](),_0x3c7a09)[_0xe1da('0x4c')](function(_0x1001aa){return _0x1001aa[0x0][_0xe1da('0x63')];});}module[_0xe1da('0x67')]={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};