Built motion from commit 47436d59.|2.6.7
[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 _0x6a55=['subqry.id','having','order','DESC','subqry.','color','keyBy','Sequelize','QueryTypes','SELECT','CmContact','sequelize','query','toString','Tags','clone','COUNT(*)','t.id\x20IN\x20?','exports','lodash','../parsers/advancedSearch','../parsers/qs','../../mysqldb','role','agent','search','ListId','autocomplete','true','select','from','cm_contacts','where','subqry','uc.CmContactId\x20=\x20','.id','left_join','cm_contact_has_tags','ct.CmContactId\x20=\x20','tools_tags','t.id\x20=\x20ct.TagId','firstName','phone','mobile','fax','email','CompanyId','createdAt','updatedAt','deletedAt','forEach','TagIds','field','GROUP_CONCAT(DISTINCT\x20t.id)','expr','getSelectedTags','replace','split','length','getFullTextValue','isNumeric','c.phone\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','parseSearch','sqlOperator','conditions','dateOfBirth','datetime','DATE','buildExpression','type','default','text','value','end','Tag','map','tags','clause','and','ids','user','uc.UserId\x20=\x20?','skip','some','name','compact','push','Contact','c.ListId\x20IN\x20?','concat','CONCAT_WS(\x27\x20\x27,\x20c.firstName,\x20c.lastName,\x20c.email)\x20LIKE\x20?','\x20=\x20?','then','fields','filter','resolve','getLists','attributes','group','c.id','limit','offset'];(function(_0x8e9e1c,_0x1b2af5){var _0x3f9faa=function(_0xf0e41c){while(--_0xf0e41c){_0x8e9e1c['push'](_0x8e9e1c['shift']());}};_0x3f9faa(++_0x1b2af5);}(_0x6a55,0x154));var _0x56a5=function(_0x2726ad,_0x5073b1){_0x2726ad=_0x2726ad-0x0;var _0xd87993=_0x6a55[_0x2726ad];return _0xd87993;};'use strict';var _=require(_0x56a5('0x0'));var squel=require('squel');var as=require(_0x56a5('0x1'));var qs=require(_0x56a5('0x2'));var utils=require('../interaction/utils');var db=require(_0x56a5('0x3'))['db'];function skipContactsQuery(_0x1b2de9,_0x158cd1){var _0x2f47e4=![];if(_0x1b2de9[_0x56a5('0x4')]===_0x56a5('0x5')&&!_0x158cd1[_0x56a5('0x6')]&&!_0x158cd1[_0x56a5('0x7')]&&_0x158cd1[_0x56a5('0x8')]!==_0x56a5('0x9')){_0x2f47e4=!![];}return _0x2f47e4;}function getContactsSubquery(){return squel[_0x56a5('0xa')]()[_0x56a5('0xb')](_0x56a5('0xc'),'c')[_0x56a5('0xd')]('c.deletedAt\x20IS\x20NULL');}function applyJoinClauses(_0x1e93dc,_0x4600a2){var _0x4dc973=_0x4600a2?'c':_0x56a5('0xe');_0x1e93dc['left_join']('cm_user_has_contacts','uc',_0x56a5('0xf')+_0x4dc973+_0x56a5('0x10'))[_0x56a5('0x11')](_0x56a5('0x12'),'ct',_0x56a5('0x13')+_0x4dc973+_0x56a5('0x10'))[_0x56a5('0x11')](_0x56a5('0x14'),'t',_0x56a5('0x15'));return _0x1e93dc;}function addFieldsToQuery(_0x5a80ed,_0x1a388c,_0x1a647a,_0x5806d1,_0x281d8b){var _0x145174=_0x281d8b?'c':_0x56a5('0xe');if(!_0x1a388c){_0x1a388c=['id',_0x56a5('0x16'),'lastName',_0x56a5('0x17'),_0x56a5('0x18'),_0x56a5('0x19'),_0x56a5('0x1a'),_0x56a5('0x7'),_0x56a5('0x1b'),_0x56a5('0x1c'),_0x56a5('0x1d'),_0x56a5('0x1e'),'TagIds'];}var _0x52758f=_0x1a647a&&_0x281d8b||!_0x1a647a&&!_0x281d8b;if(_0x5806d1){_0x52758f=_0x5806d1&&_0x281d8b||!_0x5806d1&&!_0x281d8b;}_0x1a388c[_0x56a5('0x1f')](function(_0x4ed8dc){if(_0x4ed8dc===_0x56a5('0x20')){if(_0x52758f){_0x5a80ed[_0x56a5('0x21')](_0x56a5('0x22'),_0x4ed8dc);}else if(_0x1a647a||_0x5806d1){_0x5a80ed[_0x56a5('0x21')](_0x145174+'.'+_0x4ed8dc);}}else{_0x5a80ed[_0x56a5('0x21')](_0x145174+'.'+_0x4ed8dc);}});return _0x5a80ed;}function getSqlClauses(){var _0x51f753={'default':squel['expr'](),'fields':squel[_0x56a5('0x23')](),'filter':squel['expr'](),'tags':{'clause':squel[_0x56a5('0x23')](),'ids':null},'user':{'clause':squel['expr'](),'skip':![]}};return _0x51f753;}function parseTagParameter(_0x3a8046){var _0x1bd05a=squel[_0x56a5('0x23')]();if(_0x3a8046){var _0x4cc2e2=utils[_0x56a5('0x24')](_0x3a8046);_0x4cc2e2['forEach'](function(_0x1e0365){_0x1bd05a['or']('CONCAT(\x27,\x27,\x20subqry.TagIds,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x1e0365+',%');});}return _0x1bd05a;}function parseSearchFilter(_0x5749ea){var _0x1228af=squel['expr']();if(_0x5749ea){var _0x2cc3c0=_0x5749ea['replace']('\x5c','\x5c\x5c')[_0x56a5('0x25')](/'/g,'\x27\x27');if(_0x2cc3c0[_0x56a5('0x26')]('\x20')[_0x56a5('0x27')]>0x1){_0x1228af['or']('MATCH\x20(c.firstName,\x20c.lastName,\x20c.phone,\x20c.mobile,\x20c.fax,\x20c.email)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',qs[_0x56a5('0x28')](_0x2cc3c0),null);}else{if(qs[_0x56a5('0x29')](_0x2cc3c0)){_0x1228af['or']('c.id\x20LIKE\x20?',_0x2cc3c0+'%');_0x1228af['or'](_0x56a5('0x2a'),_0x2cc3c0+'%');_0x1228af['or'](_0x56a5('0x2b'),_0x2cc3c0+'%');_0x1228af['or'](_0x56a5('0x2c'),_0x2cc3c0+'%');}else if(qs[_0x56a5('0x2d')](_0x2cc3c0)){_0x1228af['or'](_0x56a5('0x2e'),_0x2cc3c0+'%');}else{_0x1228af['or'](_0x56a5('0x2f'),'%'+_0x2cc3c0+'%');_0x1228af['or']('c.lastName\x20LIKE\x20?','%'+_0x2cc3c0+'%');_0x1228af['or'](_0x56a5('0x2e'),'%'+_0x2cc3c0+'%');}}}return _0x1228af;}function parseAdvancedSearchFilter(_0x5ecc5f,_0x2f897d){var _0x42b87b=getSqlClauses();var _0x1355d6=as[_0x56a5('0x30')](_0x5ecc5f);var _0x263188=_0x1355d6[_0x56a5('0x31')];for(var _0x512a48=0x0;_0x512a48<_0x1355d6[_0x56a5('0x32')][_0x56a5('0x27')];_0x512a48++){var _0x2e431c=_0x1355d6['conditions'][_0x512a48];var _0x38b761='c';var _0x2f8159=_['find'](_0x2f897d,['name',_0x2e431c[_0x56a5('0x21')]]);if(_0x2f8159){if(_0x2e431c[_0x56a5('0x21')]===_0x56a5('0x33')||_0x2f8159['fieldType']===_0x56a5('0x34')){_0x2e431c['castTo']=_0x56a5('0x35');}var _0x26f514=as[_0x56a5('0x36')](_0x38b761,_0x2f8159[_0x56a5('0x37')],_0x2e431c);_0x42b87b[_0x56a5('0x38')][_0x263188](_0x26f514[_0x56a5('0x39')],_0x26f514['value']['start'],_0x26f514[_0x56a5('0x3a')][_0x56a5('0x3b')]);}else{if(_0x2e431c['field']===_0x56a5('0x3c')){var _0x320c1=_0x2e431c[_0x56a5('0x3a')]['split'](',')[_0x56a5('0x3d')](function(_0x1e389d){return Number(_0x1e389d);});var _0x299a0b=parseTagParameter(_0x320c1);_0x42b87b[_0x56a5('0x3e')][_0x56a5('0x3f')][_0x56a5('0x40')](_0x299a0b);_0x42b87b['tags'][_0x56a5('0x41')]=_0x320c1;}else if(_0x2e431c[_0x56a5('0x21')]==='User'){_0x42b87b[_0x56a5('0x42')][_0x56a5('0x3f')][_0x56a5('0x40')](_0x56a5('0x43'),_0x2e431c['value']);_0x42b87b[_0x56a5('0x42')][_0x56a5('0x44')]=!![];}}}return _0x42b87b;}function parseModelFields(_0x3174bd,_0x2beb57){var _0x1418ee=squel[_0x56a5('0x23')]();var _0x47a8fe=_(_0x3174bd)['keys']()[_0x56a5('0x3d')](function(_0x4c679f){return _[_0x56a5('0x45')](_0x2beb57,[_0x56a5('0x46'),_0x4c679f])?_0x4c679f:undefined;})[_0x56a5('0x47')]()[_0x56a5('0x3a')]();if(_0x3174bd['Contact']){_0x47a8fe[_0x56a5('0x48')](_0x56a5('0x49'));}if(_0x47a8fe['length']>0x0){_0x47a8fe['forEach'](function(_0xb44fb0){if(_0xb44fb0===_0x56a5('0x7')){_0x1418ee['and'](_0x56a5('0x4a'),[][_0x56a5('0x4b')](_0x3174bd[_0xb44fb0]));}else if(_0xb44fb0==='Contact'){var _0x38d253='%'+_0x3174bd[_0xb44fb0]+'%';_0x1418ee[_0x56a5('0x40')](_0x56a5('0x4c'),_0x38d253);}else{_0x1418ee['and']('c.'+_0xb44fb0+_0x56a5('0x4d'),_0x3174bd[_0xb44fb0]);}});}return _0x1418ee;}function parseQueryParameters(_0x2d31e5,_0x487f5b){var _0x23bfa5=getSqlClauses();return Promise['resolve']()[_0x56a5('0x4e')](function(){return parseModelFields(_0x2d31e5,_0x487f5b);})['then'](function(_0x782fe9){_0x23bfa5[_0x56a5('0x4f')][_0x56a5('0x40')](_0x782fe9);return parseTagParameter(_0x2d31e5['tag']);})[_0x56a5('0x4e')](function(_0x5840c3){_0x23bfa5[_0x56a5('0x3e')][_0x56a5('0x3f')][_0x56a5('0x40')](_0x5840c3);return parseSearchFilter(_0x2d31e5[_0x56a5('0x50')]);})[_0x56a5('0x4e')](function(_0x16163b){_0x23bfa5[_0x56a5('0x50')]=_0x16163b;return _0x23bfa5;});}function checkListsRestrictions(_0x2717a3,_0x4a9d5d,_0xf9465f){var _0x362e97=squel['expr']();return Promise[_0x56a5('0x51')]()[_0x56a5('0x4e')](function(){if(_0x4a9d5d['search']&&_0x2717a3['role']===_0x56a5('0x5')&&!_0xf9465f){return _0x2717a3[_0x56a5('0x52')]({'attributes':['id'],'raw':!![]});}})[_0x56a5('0x4e')](function(_0x2b27d2){if(_0x2b27d2){if(_0x2b27d2[_0x56a5('0x27')]===0x0){_0x362e97[_0x56a5('0x40')]('c.ListId\x20IS\x20NULL');}else{_0x362e97['and'](_0x56a5('0x4a'),_[_0x56a5('0x3d')](_0x2b27d2,'id'));}}})[_0x56a5('0x4e')](function(){return _0x362e97;});}function buildContactsQuery(_0x5b7c02,_0x2abd44,_0x5e5efd,_0x1f4c3f,_0x3e3bfa,_0x318f52){if(_0x2abd44){_0x2abd44=_0x5e5efd[_0x56a5('0x53')];}_0x5b7c02=addFieldsToQuery(_0x5b7c02,_0x2abd44,_0x1f4c3f,_0x318f52,!![]);var _0x37faf5=squel[_0x56a5('0xa')]();_0x37faf5=addFieldsToQuery(_0x37faf5,_0x2abd44,_0x1f4c3f,_0x318f52,![]);if(_0x1f4c3f||_0x318f52){_0x5b7c02=applyJoinClauses(_0x5b7c02,!![]);_0x5b7c02[_0x56a5('0x54')](_0x56a5('0x55'));if(_0x5e5efd[_0x56a5('0x56')]){_0x37faf5['limit'](_0x5e5efd[_0x56a5('0x56')]);}if(_0x5e5efd[_0x56a5('0x57')]){_0x37faf5['offset'](_0x5e5efd[_0x56a5('0x57')]);}}else{_0x37faf5=applyJoinClauses(_0x37faf5,![]);_0x37faf5[_0x56a5('0x54')](_0x56a5('0x58'));if(_0x5e5efd['limit']){_0x5b7c02[_0x56a5('0x56')](_0x5e5efd[_0x56a5('0x56')]);}if(_0x5e5efd[_0x56a5('0x57')]){_0x5b7c02['offset'](_0x5e5efd[_0x56a5('0x57')]);}}_0x37faf5[_0x56a5('0x59')](_0x3e3bfa);if(_0x5e5efd[_0x56a5('0x5a')]){_0x5e5efd[_0x56a5('0x5a')][_0x56a5('0x1f')](function(_0x158c41){_0x5b7c02[_0x56a5('0x5a')]('c.'+_0x158c41[0x0],_0x158c41[0x1]===_0x56a5('0x5b')?![]:!![]);_0x37faf5[_0x56a5('0x5a')](_0x56a5('0x5c')+_0x158c41[0x0],_0x158c41[0x1]===_0x56a5('0x5b')?![]:!![]);});}_0x37faf5[_0x56a5('0xb')](_0x5b7c02,_0x56a5('0xe'));return _0x37faf5;}function getFilteredContacts(_0xff01fa){var _0x169bfe=[];return db[_0x56a5('0x3c')]['findAll']({'attributes':['id','name',_0x56a5('0x5d')],'raw':!![]})[_0x56a5('0x4e')](function(_0x3ea0dd){_0x169bfe=_[_0x56a5('0x5e')](_0x3ea0dd,'id');var _0x5aab3f={'type':db[_0x56a5('0x5f')][_0x56a5('0x60')][_0x56a5('0x61')],'model':db[_0x56a5('0x62')],'mapToModel':!![],'nest':!![],'raw':!![]};return db[_0x56a5('0x63')][_0x56a5('0x64')](_0xff01fa[_0x56a5('0x65')](),_0x5aab3f);})[_0x56a5('0x4e')](function(_0x13861b){_0x13861b[_0x56a5('0x1f')](function(_0x43f33d){if(_0x43f33d[_0x56a5('0x20')]){_0x43f33d[_0x56a5('0x66')]=[];_0x43f33d[_0x56a5('0x20')][_0x56a5('0x26')](',')[_0x56a5('0x1f')](function(_0x307dbe){_0x43f33d[_0x56a5('0x66')][_0x56a5('0x48')](_0x169bfe[_0x307dbe]);});}delete _0x43f33d[_0x56a5('0x20')];});return _0x13861b;});}function countFilteredContacts(_0x5d0c5e,_0x44288c){var _0x18adc3=_0x5d0c5e[_0x56a5('0x67')]();_0x18adc3['field'](_0x56a5('0x68'));_0x18adc3=applyJoinClauses(_0x18adc3,!![]);_0x5d0c5e[_0x56a5('0x54')]('c.id');var _0x54fd1f=utils[_0x56a5('0x24')](_0x44288c);if(!_['isEmpty'](_0x54fd1f)){_0x18adc3[_0x56a5('0xd')](_0x56a5('0x69'),_0x54fd1f);}var _0x15fd92={'type':db[_0x56a5('0x5f')]['QueryTypes']['SELECT'],'raw':!![]};return db[_0x56a5('0x63')][_0x56a5('0x64')](_0x18adc3['toString'](),_0x15fd92)['then'](function(_0x8bc846){return _0x8bc846[0x0]['COUNT(*)'];});}module[_0x56a5('0x6a')]={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};