86db68d8b2e072469297aac2787c1a791df50361
[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 _0xb68b=['left_join','cm_user_has_contacts','.id','cm_contact_has_tags','ct.CmContactId\x20=\x20','tools_tags','t.id\x20=\x20ct.TagId','subqry','lastName','phone','mobile','fax','CompanyId','createdAt','deletedAt','push','GROUP_CONCAT(DISTINCT\x20t.id)','field','expr','getSelectedTags','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.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','c.lastName\x20LIKE\x20?','parseSearch','sqlOperator','conditions','find','dateOfBirth','DATE','default','value','end','Tag','map','clause','and','ids','user','uc.UserId\x20=\x20?','some','name','compact','Contact','User','forEach','c.ListId\x20IN\x20?','concat','CONCAT_WS(\x27\x20\x27,\x20c.firstName,\x20c.lastName,\x20c.email)\x20LIKE\x20?','\x20=\x20?','fields','tag','then','filter','resolve','search','agent','getLists','c.ListId\x20IS\x20NULL','attributes','select','c.id','limit','offset','subqry.id','having','order','subqry.','DESC','findAll','color','keyBy','Sequelize','QueryTypes','CmContact','sequelize','Tags','TagIds','clone','COUNT(*)','isEmpty','SELECT','query','exports','squel','../parsers/advancedSearch','../interaction/utils','role','ListId','true','from','cm_contacts','where','c.deletedAt\x20IS\x20NULL'];(function(_0x631a3c,_0x1b61b6){var _0x2bdfa3=function(_0x21711b){while(--_0x21711b){_0x631a3c['push'](_0x631a3c['shift']());}};_0x2bdfa3(++_0x1b61b6);}(_0xb68b,0x1ef));var _0xbb68=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0xb68b[_0x12fc8d];return _0x3f9d04;};'use strict';var _=require('lodash');var squel=require(_0xbb68('0x0'));var as=require(_0xbb68('0x1'));var qs=require('../parsers/qs');var utils=require(_0xbb68('0x2'));var db=require('../../mysqldb')['db'];function skipContactsQuery(_0x4b3b0e,_0x4e9f25){var _0x762106=![];if(_0x4b3b0e[_0xbb68('0x3')]==='agent'&&!_0x4e9f25['search']&&!_0x4e9f25[_0xbb68('0x4')]&&_0x4e9f25['autocomplete']!==_0xbb68('0x5')){_0x762106=!![];}return _0x762106;}function getContactsSubquery(){return squel['select']()[_0xbb68('0x6')](_0xbb68('0x7'),'c')[_0xbb68('0x8')](_0xbb68('0x9'));}function applyJoinClauses(_0x4d516f,_0x8f9773){var _0x266f81=_0x8f9773?'c':'subqry';_0x4d516f[_0xbb68('0xa')](_0xbb68('0xb'),'uc','uc.CmContactId\x20=\x20'+_0x266f81+_0xbb68('0xc'))['left_join'](_0xbb68('0xd'),'ct',_0xbb68('0xe')+_0x266f81+_0xbb68('0xc'))['left_join'](_0xbb68('0xf'),'t',_0xbb68('0x10'));return _0x4d516f;}function addFieldsToQuery(_0xf1596c,_0x432693,_0x44731b,_0x114b64,_0x4fb137){var _0x4702c3=_0x4fb137?'c':_0xbb68('0x11');if(!_0x432693){_0x432693=['id','firstName',_0xbb68('0x12'),_0xbb68('0x13'),_0xbb68('0x14'),_0xbb68('0x15'),'email','ListId',_0xbb68('0x16'),_0xbb68('0x17'),'updatedAt',_0xbb68('0x18'),'TagIds'];}else if(!_0x432693['includes']('id')){_0x432693[_0xbb68('0x19')]('id');}var _0x38acc4=_0x44731b&&_0x4fb137||!_0x44731b&&!_0x4fb137;if(_0x114b64){_0x38acc4=_0x114b64&&_0x4fb137||!_0x114b64&&!_0x4fb137;}_0x432693['forEach'](function(_0x4cc17c){if(_0x4cc17c==='TagIds'){if(_0x38acc4){_0xf1596c['field'](_0xbb68('0x1a'),_0x4cc17c);}else if(_0x44731b||_0x114b64){_0xf1596c[_0xbb68('0x1b')](_0x4702c3+'.'+_0x4cc17c);}}else{_0xf1596c[_0xbb68('0x1b')](_0x4702c3+'.'+_0x4cc17c);}});return _0xf1596c;}function getSqlClauses(){var _0x3b653e={'default':squel[_0xbb68('0x1c')](),'fields':squel[_0xbb68('0x1c')](),'filter':squel[_0xbb68('0x1c')](),'tags':{'clause':squel[_0xbb68('0x1c')](),'ids':null},'user':{'clause':squel[_0xbb68('0x1c')](),'skip':![]}};return _0x3b653e;}function parseTagParameter(_0x13254b){var _0x1f4f90=squel[_0xbb68('0x1c')]();if(_0x13254b){var _0x3d336f=utils[_0xbb68('0x1d')](_0x13254b);_0x3d336f['forEach'](function(_0x268c02){_0x1f4f90['or'](_0xbb68('0x1e'),'%,'+_0x268c02+',%');});}return _0x1f4f90;}function parseSearchFilter(_0x20af8a){var _0x1fdf76=squel[_0xbb68('0x1c')]();if(_0x20af8a){var _0x2fb1c4=_0x20af8a['replace']('\x5c','\x5c\x5c')[_0xbb68('0x1f')](/'/g,'\x27\x27');if(_0x2fb1c4[_0xbb68('0x20')]('\x20')[_0xbb68('0x21')]>0x1){_0x1fdf76['or'](_0xbb68('0x22'),qs[_0xbb68('0x23')](_0x2fb1c4,!![]),null);}else{if(qs[_0xbb68('0x24')](_0x2fb1c4)){_0x1fdf76['or'](_0xbb68('0x25'),_0x2fb1c4+'%');_0x1fdf76['or']('c.phone\x20LIKE\x20?',_0x2fb1c4+'%');_0x1fdf76['or']('c.mobile\x20LIKE\x20?',_0x2fb1c4+'%');_0x1fdf76['or']('c.fax\x20LIKE\x20?',_0x2fb1c4+'%');}else if(qs['isEmail'](_0x2fb1c4)){_0x1fdf76['or'](_0xbb68('0x26'),_0x2fb1c4+'%');}else{_0x1fdf76['or'](_0xbb68('0x27'),'%'+_0x2fb1c4+'%');_0x1fdf76['or'](_0xbb68('0x28'),'%'+_0x2fb1c4+'%');_0x1fdf76['or'](_0xbb68('0x26'),'%'+_0x2fb1c4+'%');}}}return _0x1fdf76;}function parseAdvancedSearchFilter(_0x3893f4,_0x5ed4aa){var _0xbc65dd=getSqlClauses();var _0x23bbf0=as[_0xbb68('0x29')](_0x3893f4);var _0x1d6479=_0x23bbf0[_0xbb68('0x2a')];for(var _0x1320bb=0x0;_0x1320bb<_0x23bbf0[_0xbb68('0x2b')][_0xbb68('0x21')];_0x1320bb++){var _0x4c505e=_0x23bbf0[_0xbb68('0x2b')][_0x1320bb];var _0x4f25cd='c';var _0x18d196=_[_0xbb68('0x2c')](_0x5ed4aa,['name',_0x4c505e[_0xbb68('0x1b')]]);if(_0x18d196){if(_0x4c505e[_0xbb68('0x1b')]===_0xbb68('0x2d')||_0x18d196['fieldType']==='datetime'){_0x4c505e['castTo']=_0xbb68('0x2e');}var _0x284197=as['buildExpression'](_0x4f25cd,_0x18d196['type'],_0x4c505e);_0xbc65dd[_0xbb68('0x2f')][_0x1d6479](_0x284197['text'],_0x284197[_0xbb68('0x30')]['start'],_0x284197[_0xbb68('0x30')][_0xbb68('0x31')]);}else{if(_0x4c505e[_0xbb68('0x1b')]===_0xbb68('0x32')){var _0xf30554=_0x4c505e['value'][_0xbb68('0x20')](',')[_0xbb68('0x33')](function(_0x4d365c){return Number(_0x4d365c);});var _0x4a11f8=parseTagParameter(_0xf30554);_0xbc65dd['tags'][_0xbb68('0x34')][_0xbb68('0x35')](_0x4a11f8);_0xbc65dd['tags'][_0xbb68('0x36')]=_0xf30554;}else if(_0x4c505e[_0xbb68('0x1b')]==='User'){_0xbc65dd[_0xbb68('0x37')]['clause'][_0xbb68('0x35')](_0xbb68('0x38'),_0x4c505e[_0xbb68('0x30')]);_0xbc65dd['user']['skip']=!![];}}}return _0xbc65dd;}function parseModelFields(_0x14274f,_0x5bd549){var _0x2e6a80=squel[_0xbb68('0x1c')]();var _0x464e9e=_(_0x14274f)['keys']()['map'](function(_0x1194ea){return _[_0xbb68('0x39')](_0x5bd549,[_0xbb68('0x3a'),_0x1194ea])?_0x1194ea:undefined;})[_0xbb68('0x3b')]()['value']();if(_0x14274f[_0xbb68('0x3c')]){_0x464e9e[_0xbb68('0x19')](_0xbb68('0x3c'));}if(_0x14274f[_0xbb68('0x3d')]){_0x464e9e[_0xbb68('0x19')]('User');}if(_0x464e9e[_0xbb68('0x21')]>0x0){_0x464e9e[_0xbb68('0x3e')](function(_0x5c0364){if(_0x5c0364===_0xbb68('0x4')){_0x2e6a80[_0xbb68('0x35')](_0xbb68('0x3f'),[][_0xbb68('0x40')](_0x14274f[_0x5c0364]));}else if(_0x5c0364===_0xbb68('0x3c')){var _0x21cc04='%'+_0x14274f[_0x5c0364]+'%';_0x2e6a80[_0xbb68('0x35')](_0xbb68('0x41'),_0x21cc04);}else if(_0x5c0364===_0xbb68('0x3d')){_0x2e6a80['and']('uc.UserId\x20=\x20?',_0x14274f[_0x5c0364]);}else{_0x2e6a80[_0xbb68('0x35')]('c.'+_0x5c0364+_0xbb68('0x42'),_0x14274f[_0x5c0364]);}});}return _0x2e6a80;}function parseQueryParameters(_0x3f1f62,_0xc03fd9){var _0xa35aae=getSqlClauses();return Promise['resolve']()['then'](function(){return parseModelFields(_0x3f1f62,_0xc03fd9);})['then'](function(_0x56d8ca){_0xa35aae[_0xbb68('0x43')]['and'](_0x56d8ca);return parseTagParameter(_0x3f1f62[_0xbb68('0x44')]);})[_0xbb68('0x45')](function(_0x5cc059){_0xa35aae['tags'][_0xbb68('0x34')][_0xbb68('0x35')](_0x5cc059);return parseSearchFilter(_0x3f1f62[_0xbb68('0x46')]);})['then'](function(_0x66ff19){_0xa35aae[_0xbb68('0x46')]=_0x66ff19;return _0xa35aae;});}function checkListsRestrictions(_0x466c1e,_0x408179,_0x544a0b){var _0x560a0b=squel[_0xbb68('0x1c')]();return Promise[_0xbb68('0x47')]()[_0xbb68('0x45')](function(){if(_0x408179[_0xbb68('0x48')]&&_0x466c1e[_0xbb68('0x3')]===_0xbb68('0x49')&&!_0x544a0b){return _0x466c1e[_0xbb68('0x4a')]({'attributes':['id'],'raw':!![]});}})[_0xbb68('0x45')](function(_0x4d0cd7){if(_0x4d0cd7){if(_0x4d0cd7['length']===0x0){_0x560a0b[_0xbb68('0x35')](_0xbb68('0x4b'));}else{_0x560a0b[_0xbb68('0x35')](_0xbb68('0x3f'),_[_0xbb68('0x33')](_0x4d0cd7,'id'));}}})['then'](function(){return _0x560a0b;});}function buildContactsQuery(_0x2f817b,_0x2ba80d,_0x358151,_0x29295c,_0xdb0d24,_0x3a4a1d){if(_0x2ba80d){_0x2ba80d=_0x358151[_0xbb68('0x4c')];}_0x2f817b=addFieldsToQuery(_0x2f817b,_0x2ba80d,_0x29295c,_0x3a4a1d,!![]);var _0x57c94b=squel[_0xbb68('0x4d')]();_0x57c94b=addFieldsToQuery(_0x57c94b,_0x2ba80d,_0x29295c,_0x3a4a1d,![]);if(_0x29295c||_0x3a4a1d){_0x2f817b=applyJoinClauses(_0x2f817b,!![]);_0x2f817b['group'](_0xbb68('0x4e'));if(_0x358151[_0xbb68('0x4f')]){_0x57c94b[_0xbb68('0x4f')](_0x358151[_0xbb68('0x4f')]);}if(_0x358151[_0xbb68('0x50')]){_0x57c94b[_0xbb68('0x50')](_0x358151[_0xbb68('0x50')]);}}else{_0x57c94b=applyJoinClauses(_0x57c94b,![]);_0x57c94b['group'](_0xbb68('0x51'));if(_0x358151[_0xbb68('0x4f')]){_0x2f817b[_0xbb68('0x4f')](_0x358151[_0xbb68('0x4f')]);}if(_0x358151[_0xbb68('0x50')]){_0x2f817b[_0xbb68('0x50')](_0x358151['offset']);}}_0x57c94b[_0xbb68('0x52')](_0xdb0d24);if(_0x358151[_0xbb68('0x53')]){_0x358151[_0xbb68('0x53')][_0xbb68('0x3e')](function(_0x395e77){_0x2f817b['order']('c.'+_0x395e77[0x0],_0x395e77[0x1]==='DESC'?![]:!![]);_0x57c94b[_0xbb68('0x53')](_0xbb68('0x54')+_0x395e77[0x0],_0x395e77[0x1]===_0xbb68('0x55')?![]:!![]);});}_0x57c94b['from'](_0x2f817b,_0xbb68('0x11'));return _0x57c94b;}function getFilteredContacts(_0x19eff1){var _0x306673=[];return db[_0xbb68('0x32')][_0xbb68('0x56')]({'attributes':['id',_0xbb68('0x3a'),_0xbb68('0x57')],'raw':!![]})[_0xbb68('0x45')](function(_0x1237de){_0x306673=_[_0xbb68('0x58')](_0x1237de,'id');var _0x4d60c5={'type':db[_0xbb68('0x59')][_0xbb68('0x5a')]['SELECT'],'model':db[_0xbb68('0x5b')],'mapToModel':!![],'nest':!![],'raw':!![]};return db[_0xbb68('0x5c')]['query'](_0x19eff1['toString'](),_0x4d60c5);})[_0xbb68('0x45')](function(_0x42c5d4){_0x42c5d4['forEach'](function(_0x777695){if(_0x777695['TagIds']){_0x777695[_0xbb68('0x5d')]=[];_0x777695[_0xbb68('0x5e')][_0xbb68('0x20')](',')['forEach'](function(_0x55c63c){_0x777695['Tags']['push'](_0x306673[_0x55c63c]);});}delete _0x777695[_0xbb68('0x5e')];});return _0x42c5d4;});}function countFilteredContacts(_0x4bc0f6,_0x5a68a2){var _0x5899d7=_0x4bc0f6[_0xbb68('0x5f')]();_0x5899d7[_0xbb68('0x1b')](_0xbb68('0x60'));_0x5899d7=applyJoinClauses(_0x5899d7,!![]);_0x4bc0f6['group']('c.id');var _0x518f69=utils[_0xbb68('0x1d')](_0x5a68a2);if(!_[_0xbb68('0x61')](_0x518f69)){_0x5899d7['where']('t.id\x20IN\x20?',_0x518f69);}var _0x28da38={'type':db[_0xbb68('0x59')][_0xbb68('0x5a')][_0xbb68('0x62')],'raw':!![]};return db[_0xbb68('0x5c')][_0xbb68('0x63')](_0x5899d7['toString'](),_0x28da38)['then'](function(_0x44498d){return _0x44498d[0x0][_0xbb68('0x60')];});}module[_0xbb68('0x64')]={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};