0fa1fc5a21f8f6c746a86f9cf68928f5219508e0
[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 _0x5287=['sqlOperator','conditions','length','find','dateOfBirth','fieldType','datetime','castTo','buildExpression','type','default','text','value','end','Tag','map','tags','clause','and','ids','User','user','uc.UserId\x20=\x20?','skip','some','name','compact','Contact','c.ListId\x20IN\x20?','\x20=\x20?','then','fields','filter','resolve','getLists','c.ListId\x20IS\x20NULL','attributes','c.id','limit','offset','group','having','order','DESC','color','keyBy','Sequelize','QueryTypes','SELECT','CmContact','query','toString','Tags','clone','COUNT(*)','getSelectedTags','t.id\x20IN\x20?','sequelize','squel','../parsers/advancedSearch','../../mysqldb','role','agent','search','ListId','autocomplete','true','select','from','cm_contacts','where','c.deletedAt\x20IS\x20NULL','subqry','cm_user_has_contacts','uc.CmContactId\x20=\x20','.id','cm_contact_has_tags','left_join','firstName','lastName','fax','CompanyId','createdAt','updatedAt','deletedAt','TagIds','includes','push','forEach','GROUP_CONCAT(DISTINCT\x20t.id)','field','expr','CONCAT(\x27,\x27,\x20subqry.TagIds,\x20\x27,\x27)\x20LIKE\x20?','replace','split','MATCH\x20(c.firstName,\x20c.lastName,\x20c.phone,\x20c.mobile,\x20c.fax,\x20c.email)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','getFullTextValue','isNumeric','c.phone\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','c.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','c.lastName\x20LIKE\x20?','parseSearch'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5287,0x10c));var _0x7528=function(_0x2654d2,_0x431293){_0x2654d2=_0x2654d2-0x0;var _0x3057df=_0x5287[_0x2654d2];return _0x3057df;};'use strict';var _=require('lodash');var squel=require(_0x7528('0x0'));var as=require(_0x7528('0x1'));var qs=require('../parsers/qs');var utils=require('../interaction/utils');var db=require(_0x7528('0x2'))['db'];function skipContactsQuery(_0x324830,_0x6ac564){var _0x13071b=![];if(_0x324830[_0x7528('0x3')]===_0x7528('0x4')&&!_0x6ac564[_0x7528('0x5')]&&!_0x6ac564[_0x7528('0x6')]&&_0x6ac564[_0x7528('0x7')]!==_0x7528('0x8')){_0x13071b=!![];}return _0x13071b;}function getContactsSubquery(){return squel[_0x7528('0x9')]()[_0x7528('0xa')](_0x7528('0xb'),'c')[_0x7528('0xc')](_0x7528('0xd'));}function applyJoinClauses(_0x431d2f,_0x581304){var _0x51538c=_0x581304?'c':_0x7528('0xe');_0x431d2f['left_join'](_0x7528('0xf'),'uc',_0x7528('0x10')+_0x51538c+_0x7528('0x11'))['left_join'](_0x7528('0x12'),'ct','ct.CmContactId\x20=\x20'+_0x51538c+_0x7528('0x11'))[_0x7528('0x13')]('tools_tags','t','t.id\x20=\x20ct.TagId');return _0x431d2f;}function addFieldsToQuery(_0xbf712d,_0x5cd329,_0x53da59,_0x26fc5e,_0x2bd5b6){var _0x42e9c1=_0x2bd5b6?'c':_0x7528('0xe');if(!_0x5cd329){_0x5cd329=['id',_0x7528('0x14'),_0x7528('0x15'),'phone','mobile',_0x7528('0x16'),'email',_0x7528('0x6'),_0x7528('0x17'),_0x7528('0x18'),_0x7528('0x19'),_0x7528('0x1a'),_0x7528('0x1b')];}else if(!_0x5cd329[_0x7528('0x1c')]('id')){_0x5cd329[_0x7528('0x1d')]('id');}var _0x161451=_0x53da59&&_0x2bd5b6||!_0x53da59&&!_0x2bd5b6;if(_0x26fc5e){_0x161451=_0x26fc5e&&_0x2bd5b6||!_0x26fc5e&&!_0x2bd5b6;}_0x5cd329[_0x7528('0x1e')](function(_0x256e1e){if(_0x256e1e==='TagIds'){if(_0x161451){_0xbf712d['field'](_0x7528('0x1f'),_0x256e1e);}else if(_0x53da59||_0x26fc5e){_0xbf712d['field'](_0x42e9c1+'.'+_0x256e1e);}}else{_0xbf712d[_0x7528('0x20')](_0x42e9c1+'.'+_0x256e1e);}});return _0xbf712d;}function getSqlClauses(){var _0xec5a12={'default':squel['expr'](),'fields':squel[_0x7528('0x21')](),'filter':squel[_0x7528('0x21')](),'tags':{'clause':squel[_0x7528('0x21')](),'ids':null},'user':{'clause':squel[_0x7528('0x21')](),'skip':![]}};return _0xec5a12;}function parseTagParameter(_0x2036b9){var _0x57024f=squel[_0x7528('0x21')]();if(_0x2036b9){var _0x3fd3ef=utils['getSelectedTags'](_0x2036b9);_0x3fd3ef[_0x7528('0x1e')](function(_0x334f2f){_0x57024f['or'](_0x7528('0x22'),'%,'+_0x334f2f+',%');});}return _0x57024f;}function parseSearchFilter(_0xb3fc4c){var _0x2f2ffa=squel[_0x7528('0x21')]();if(_0xb3fc4c){var _0x1866bf=_0xb3fc4c[_0x7528('0x23')]('\x5c','\x5c\x5c')[_0x7528('0x23')](/'/g,'\x27\x27');if(_0x1866bf[_0x7528('0x24')]('\x20')['length']>0x1){_0x2f2ffa['or'](_0x7528('0x25'),qs[_0x7528('0x26')](_0x1866bf),null);}else{if(qs[_0x7528('0x27')](_0x1866bf)){_0x2f2ffa['or']('c.id\x20LIKE\x20?',_0x1866bf+'%');_0x2f2ffa['or'](_0x7528('0x28'),_0x1866bf+'%');_0x2f2ffa['or'](_0x7528('0x29'),_0x1866bf+'%');_0x2f2ffa['or'](_0x7528('0x2a'),_0x1866bf+'%');}else if(qs['isEmail'](_0x1866bf)){_0x2f2ffa['or'](_0x7528('0x2b'),_0x1866bf+'%');}else{_0x2f2ffa['or'](_0x7528('0x2c'),'%'+_0x1866bf+'%');_0x2f2ffa['or'](_0x7528('0x2d'),'%'+_0x1866bf+'%');_0x2f2ffa['or'](_0x7528('0x2b'),'%'+_0x1866bf+'%');}}}return _0x2f2ffa;}function parseAdvancedSearchFilter(_0x19e19c,_0x30978f){var _0x3b8630=getSqlClauses();var _0x1c97d1=as[_0x7528('0x2e')](_0x19e19c);var _0x182e3c=_0x1c97d1[_0x7528('0x2f')];for(var _0x3f5765=0x0;_0x3f5765<_0x1c97d1[_0x7528('0x30')][_0x7528('0x31')];_0x3f5765++){var _0x371b48=_0x1c97d1[_0x7528('0x30')][_0x3f5765];var _0x3660fa='c';var _0x56e406=_[_0x7528('0x32')](_0x30978f,['name',_0x371b48[_0x7528('0x20')]]);if(_0x56e406){if(_0x371b48[_0x7528('0x20')]===_0x7528('0x33')||_0x56e406[_0x7528('0x34')]===_0x7528('0x35')){_0x371b48[_0x7528('0x36')]='DATE';}var _0x17db78=as[_0x7528('0x37')](_0x3660fa,_0x56e406[_0x7528('0x38')],_0x371b48);_0x3b8630[_0x7528('0x39')][_0x182e3c](_0x17db78[_0x7528('0x3a')],_0x17db78[_0x7528('0x3b')]['start'],_0x17db78[_0x7528('0x3b')][_0x7528('0x3c')]);}else{if(_0x371b48[_0x7528('0x20')]===_0x7528('0x3d')){var _0x3dadb5=_0x371b48[_0x7528('0x3b')][_0x7528('0x24')](',')[_0x7528('0x3e')](function(_0x427cd6){return Number(_0x427cd6);});var _0x1dfb21=parseTagParameter(_0x3dadb5);_0x3b8630[_0x7528('0x3f')][_0x7528('0x40')][_0x7528('0x41')](_0x1dfb21);_0x3b8630[_0x7528('0x3f')][_0x7528('0x42')]=_0x3dadb5;}else if(_0x371b48[_0x7528('0x20')]===_0x7528('0x43')){_0x3b8630[_0x7528('0x44')]['clause'][_0x7528('0x41')](_0x7528('0x45'),_0x371b48[_0x7528('0x3b')]);_0x3b8630[_0x7528('0x44')][_0x7528('0x46')]=!![];}}}return _0x3b8630;}function parseModelFields(_0x538a38,_0x43b404){var _0x2593e9=squel[_0x7528('0x21')]();var _0x421833=_(_0x538a38)['keys']()[_0x7528('0x3e')](function(_0x55858e){return _[_0x7528('0x47')](_0x43b404,[_0x7528('0x48'),_0x55858e])?_0x55858e:undefined;})[_0x7528('0x49')]()[_0x7528('0x3b')]();if(_0x538a38[_0x7528('0x4a')]){_0x421833[_0x7528('0x1d')](_0x7528('0x4a'));}if(_0x421833[_0x7528('0x31')]>0x0){_0x421833[_0x7528('0x1e')](function(_0x1b02c9){if(_0x1b02c9===_0x7528('0x6')){_0x2593e9[_0x7528('0x41')](_0x7528('0x4b'),[]['concat'](_0x538a38[_0x1b02c9]));}else if(_0x1b02c9===_0x7528('0x4a')){var _0x461680='%'+_0x538a38[_0x1b02c9]+'%';_0x2593e9[_0x7528('0x41')]('CONCAT_WS(\x27\x20\x27,\x20c.firstName,\x20c.lastName,\x20c.email)\x20LIKE\x20?',_0x461680);}else{_0x2593e9['and']('c.'+_0x1b02c9+_0x7528('0x4c'),_0x538a38[_0x1b02c9]);}});}return _0x2593e9;}function parseQueryParameters(_0x30c27d,_0x55d562){var _0xe33ce4=getSqlClauses();return Promise['resolve']()[_0x7528('0x4d')](function(){return parseModelFields(_0x30c27d,_0x55d562);})[_0x7528('0x4d')](function(_0x18ac01){_0xe33ce4[_0x7528('0x4e')][_0x7528('0x41')](_0x18ac01);return parseTagParameter(_0x30c27d['tag']);})[_0x7528('0x4d')](function(_0x2372d2){_0xe33ce4[_0x7528('0x3f')][_0x7528('0x40')][_0x7528('0x41')](_0x2372d2);return parseSearchFilter(_0x30c27d['filter']);})[_0x7528('0x4d')](function(_0x1b87b3){_0xe33ce4[_0x7528('0x4f')]=_0x1b87b3;return _0xe33ce4;});}function checkListsRestrictions(_0x53c960,_0x3d473b,_0x3b0065){var _0xefb15b=squel['expr']();return Promise[_0x7528('0x50')]()[_0x7528('0x4d')](function(){if(_0x3d473b[_0x7528('0x5')]&&_0x53c960[_0x7528('0x3')]===_0x7528('0x4')&&!_0x3b0065){return _0x53c960[_0x7528('0x51')]({'attributes':['id'],'raw':!![]});}})[_0x7528('0x4d')](function(_0x46ffc7){if(_0x46ffc7){if(_0x46ffc7[_0x7528('0x31')]===0x0){_0xefb15b['and'](_0x7528('0x52'));}else{_0xefb15b[_0x7528('0x41')](_0x7528('0x4b'),_[_0x7528('0x3e')](_0x46ffc7,'id'));}}})[_0x7528('0x4d')](function(){return _0xefb15b;});}function buildContactsQuery(_0x4579df,_0x126c4a,_0x1e23b3,_0x3d9aeb,_0x21559b,_0x58fe12){if(_0x126c4a){_0x126c4a=_0x1e23b3[_0x7528('0x53')];}_0x4579df=addFieldsToQuery(_0x4579df,_0x126c4a,_0x3d9aeb,_0x58fe12,!![]);var _0x2667d6=squel[_0x7528('0x9')]();_0x2667d6=addFieldsToQuery(_0x2667d6,_0x126c4a,_0x3d9aeb,_0x58fe12,![]);if(_0x3d9aeb||_0x58fe12){_0x4579df=applyJoinClauses(_0x4579df,!![]);_0x4579df['group'](_0x7528('0x54'));if(_0x1e23b3['limit']){_0x2667d6[_0x7528('0x55')](_0x1e23b3[_0x7528('0x55')]);}if(_0x1e23b3[_0x7528('0x56')]){_0x2667d6[_0x7528('0x56')](_0x1e23b3[_0x7528('0x56')]);}}else{_0x2667d6=applyJoinClauses(_0x2667d6,![]);_0x2667d6[_0x7528('0x57')]('subqry.id');if(_0x1e23b3[_0x7528('0x55')]){_0x4579df[_0x7528('0x55')](_0x1e23b3[_0x7528('0x55')]);}if(_0x1e23b3['offset']){_0x4579df[_0x7528('0x56')](_0x1e23b3[_0x7528('0x56')]);}}_0x2667d6[_0x7528('0x58')](_0x21559b);if(_0x1e23b3['order']){_0x1e23b3['order'][_0x7528('0x1e')](function(_0x11eeb1){_0x4579df[_0x7528('0x59')]('c.'+_0x11eeb1[0x0],_0x11eeb1[0x1]===_0x7528('0x5a')?![]:!![]);_0x2667d6[_0x7528('0x59')]('subqry.'+_0x11eeb1[0x0],_0x11eeb1[0x1]===_0x7528('0x5a')?![]:!![]);});}_0x2667d6[_0x7528('0xa')](_0x4579df,_0x7528('0xe'));return _0x2667d6;}function getFilteredContacts(_0x1f14e7){var _0x56b250=[];return db['Tag']['findAll']({'attributes':['id',_0x7528('0x48'),_0x7528('0x5b')],'raw':!![]})['then'](function(_0x3528f1){_0x56b250=_[_0x7528('0x5c')](_0x3528f1,'id');var _0x2e3479={'type':db[_0x7528('0x5d')][_0x7528('0x5e')][_0x7528('0x5f')],'model':db[_0x7528('0x60')],'mapToModel':!![],'nest':!![],'raw':!![]};return db['sequelize'][_0x7528('0x61')](_0x1f14e7[_0x7528('0x62')](),_0x2e3479);})[_0x7528('0x4d')](function(_0x49233b){_0x49233b[_0x7528('0x1e')](function(_0x45d0d0){if(_0x45d0d0[_0x7528('0x1b')]){_0x45d0d0[_0x7528('0x63')]=[];_0x45d0d0[_0x7528('0x1b')][_0x7528('0x24')](',')[_0x7528('0x1e')](function(_0x303c1c){_0x45d0d0[_0x7528('0x63')][_0x7528('0x1d')](_0x56b250[_0x303c1c]);});}delete _0x45d0d0[_0x7528('0x1b')];});return _0x49233b;});}function countFilteredContacts(_0x53003a,_0x168533){var _0x1617be=_0x53003a[_0x7528('0x64')]();_0x1617be[_0x7528('0x20')](_0x7528('0x65'));_0x1617be=applyJoinClauses(_0x1617be,!![]);_0x53003a[_0x7528('0x57')](_0x7528('0x54'));var _0x1d041b=utils[_0x7528('0x66')](_0x168533);if(!_['isEmpty'](_0x1d041b)){_0x1617be['where'](_0x7528('0x67'),_0x1d041b);}var _0x298389={'type':db['Sequelize']['QueryTypes'][_0x7528('0x5f')],'raw':!![]};return db[_0x7528('0x68')]['query'](_0x1617be[_0x7528('0x62')](),_0x298389)[_0x7528('0x4d')](function(_0x28cdc9){return _0x28cdc9[0x0][_0x7528('0x65')];});}module['exports']={'buildContactsQuery':buildContactsQuery,'checkListsRestrictions':checkListsRestrictions,'countFilteredContacts':countFilteredContacts,'getContactsSubquery':getContactsSubquery,'getFilteredContacts':getFilteredContacts,'parseAdvancedSearchFilter':parseAdvancedSearchFilter,'parseQueryParameters':parseQueryParameters,'skipContactsQuery':skipContactsQuery};