Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / voice_queue / voice_queue.controller.js
index 952b858..004e716 100644 (file)
@@ -1 +1,339 @@
-var _0x4206=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x6E\x61\x6D\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x73\x74\x72\x61\x74\x65\x67\x79","\x63\x6F\x6E\x74\x65\x78\x74","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x6C\x6F\x67","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x71\x75\x65\x75\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x46\x69\x6E\x64\x69\x6E\x67\x20\x61\x70\x70\x20\x72\x6F\x77\x2E\x2E\x2E\x2E\x2E","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x51\x55\x45\x55\x45","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x53\x49\x50\x2F\x25\x73","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x6E\x6F\x20\x6D\x61\x69\x6C\x20\x71\x75\x65\x75\x65\x20\x66\x6F\x75\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x4D\x45\x53\x53\x41\x47\x45\x5F\x51\x55\x45\x55\x45\x5F\x52\x4F\x55\x54\x45\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x6C\x75\x63\x6B"];_0x4206[0];var _=require(_0x4206[1]);var util=require(_0x4206[2]);var User=require(_0x4206[4])[_0x4206[3]];var VoiceQueue=require(_0x4206[4])[_0x4206[5]];var UserHasVoiceQueue=require(_0x4206[4])[_0x4206[6]];var VoiceExtension=require(_0x4206[4])[_0x4206[7]];exports[_0x4206[8]]=function(_0xdf06x7,_0xdf06x8){var _0xdf06x9=[_0x4206[9],_0x4206[10],_0x4206[11],_0x4206[12]];var _0xdf06xa=_0xdf06x7[_0x4206[14]][_0x4206[13]]?parseInt(_0xdf06x7[_0x4206[14]][_0x4206[13]],10):100;var _0xdf06xb=_0xdf06x7[_0x4206[14]][_0x4206[15]]?parseInt(_0xdf06x7[_0x4206[14]][_0x4206[15]],10):0;var _0xdf06xc={where:{},limit:_0xdf06xa,offset:_0xdf06xb*_0xdf06xa};_[_0x4206[29]](_0xdf06x7[_0x4206[14]],function(_0xdf06xd,_0xdf06xe){switch(_0xdf06xe){case _0x4206[13]:;case _0x4206[15]:break ;;case _0x4206[18]:_0xdf06xc[_0x4206[16]]=util[_0x4206[21]](_0x4206[17],_0xdf06x7[_0x4206[14]][_0x4206[18]],_0xdf06x7[_0x4206[14]][_0x4206[19]]||_0x4206[20])||null;break ;;case _0x4206[19]:break ;;case _0x4206[27]:_0xdf06xc[_0x4206[23]][_0x4206[22]]=[];_0xdf06x9[_0x4206[26]](function(_0xdf06xf){var _0xdf06x10={};_0xdf06x10[_0xdf06xf]={$like:_0x4206[24]+_0xdf06xd+_0x4206[24]};_0xdf06xc[_0x4206[23]][_0x4206[22]][_0x4206[25]](_0xdf06x10);});break ;;default:_0xdf06xc[_0x4206[23]][_0xdf06xe]={$like:{}};_0xdf06xc[_0x4206[23]][_0xdf06xe][_0x4206[28]]=_0x4206[24]+_0xdf06xd+_0x4206[24];;}});VoiceQueue[_0x4206[44]](_0xdf06xc)[_0x4206[43]](function(_0xdf06x12){console[_0x4206[32]](_0xdf06x12[_0x4206[31]]);var _0xdf06x13=Math[_0x4206[33]](_0xdf06x12[_0x4206[31]]/_0xdf06xa);console[_0x4206[32]](_0xdf06x13);var _0xdf06x14=_0xdf06x13>(_0xdf06xc[_0x4206[34]]+1)?util[_0x4206[21]](_0x4206[35],_0xdf06x7[_0x4206[36]],_0xdf06x7[_0x4206[38]][_0x4206[37]],_0xdf06x7[_0x4206[39]],_0xdf06xb+1):null;var _0xdf06x15=_0xdf06xb>0?util[_0x4206[21]](_0x4206[35],_0xdf06x7[_0x4206[36]],_0xdf06x7[_0x4206[38]][_0x4206[37]],_0xdf06x7[_0x4206[39]],_0xdf06xb-1):null;_0xdf06x8[_0x4206[42]](200)[_0x4206[41]]({count:_0xdf06x12[_0x4206[31]],rows:_0xdf06x12[_0x4206[40]],next_page:_0xdf06x14,previous_page:_0xdf06x15,total_pages:_0xdf06x13});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});};exports[_0x4206[45]]=function(_0xdf06x7,_0xdf06x8){VoiceQueue[_0x4206[49]](_0xdf06x7[_0x4206[48]][_0x4206[47]])[_0x4206[43]](function(_0xdf06x16){if(!_0xdf06x16){return _0xdf06x8[_0x4206[46]](404)};return _0xdf06x8[_0x4206[41]](_0xdf06x16);})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)})};exports[_0x4206[50]]=function(_0xdf06x7,_0xdf06x8){console[_0x4206[32]](_0xdf06x7[_0x4206[51]]);VoiceQueue[_0x4206[52]]({where:{name:_0xdf06x7[_0x4206[51]][_0x4206[9]]}})[_0x4206[43]](function(_0xdf06x16){if(!_0xdf06x16){return _0xdf06x8[_0x4206[46]](404)};return _0xdf06x8[_0x4206[41]](_0xdf06x16);})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});};exports[_0x4206[53]]=function(_0xdf06x7,_0xdf06x8){VoiceQueue[_0x4206[52]]({where:{name:_0xdf06x7[_0x4206[51]][_0x4206[9]]}})[_0x4206[43]](function(_0xdf06x17){console[_0x4206[32]](_0xdf06x17);console[_0x4206[32]](_0x4206[54]);if(!_0xdf06x17){return _0xdf06x8[_0x4206[46]](404)};if(_0xdf06x17[_0x4206[55]]>0){return _0xdf06x8[_0x4206[42]](500)[_0x4206[41]]({message:_0x4206[56]})};VoiceQueue[_0x4206[53]](_0xdf06x7[_0x4206[51]])[_0x4206[43]](function(_0xdf06x16){return _0xdf06x8[_0x4206[42]](201)[_0x4206[41]](_0xdf06x16)})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)})};exports[_0x4206[57]]=function(_0xdf06x7,_0xdf06x8){VoiceQueue[_0x4206[60]]({where:{name:_0xdf06x7[_0x4206[48]][_0x4206[47]]}})[_0x4206[43]](function(_0xdf06x18){if(!_0xdf06x18){return _0xdf06x8[_0x4206[46]](404)};if(_0xdf06x7[_0x4206[51]][_0x4206[47]]){delete _0xdf06x7[_0x4206[51]][_0x4206[47]]};var _0xdf06x19=_[_0x4206[58]](_0xdf06x18,_0xdf06x7[_0x4206[51]]);_0xdf06x19[_0x4206[59]]()[_0x4206[43]](function(){return _0xdf06x8[_0x4206[42]](200)[_0x4206[41]](_0xdf06x18)})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)})};exports[_0x4206[61]]=function(_0xdf06x7,_0xdf06x8,_0xdf06x1a){console[_0x4206[32]](_0x4206[61]);console[_0x4206[32]](_0xdf06x7[_0x4206[48]]);console[_0x4206[32]](_0xdf06x7[_0x4206[51]]);User[_0x4206[52]]({where:{id:{$in:_0xdf06x7[_0x4206[51]][_0x4206[65]]}}})[_0x4206[43]](function(_0xdf06x1b){var _0xdf06x1c=_[_0x4206[63]](_0xdf06x1b,function(_0xdf06x1d){return {queue:_0xdf06x7[_0x4206[48]][_0x4206[47]],location:util[_0x4206[21]](_0x4206[62],_0xdf06x1d[_0x4206[9]]),membername:_0xdf06x1d[_0x4206[9]],VoiceQueueName:_0xdf06x7[_0x4206[48]][_0x4206[47]],UserId:_0xdf06x1d[_0x4206[47]]}});UserHasVoiceQueue[_0x4206[64]](_0xdf06x1c,{individualHooks:true})[_0x4206[43]](function(){return _0xdf06x8[_0x4206[46]](200)})[_0x4206[30]](function(_0xdf06x11){return _0xdf06x1a(_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return _0xdf06x1a(_0xdf06x11)});};exports[_0x4206[66]]=function(_0xdf06x7,_0xdf06x8,_0xdf06x1a){VoiceQueue[_0x4206[60]]({where:{name:_0xdf06x7[_0x4206[48]][_0x4206[47]]}})[_0x4206[43]](function(_0xdf06x18){if(_0xdf06x18){_0xdf06x18[_0x4206[67]](_0xdf06x7[_0x4206[51]][_0x4206[65]],{individualHooks:true})[_0x4206[43]](function(){return _0xdf06x8[_0x4206[46]](200)})[_0x4206[30]](function(_0xdf06x11){return _0xdf06x1a(_0xdf06x11)})}else {return _0xdf06x1a( new Error(_0x4206[68]))}})[_0x4206[30]](function(_0xdf06x11){return _0xdf06x1a(_0xdf06x11)})};exports[_0x4206[69]]=function(_0xdf06x7,_0xdf06x8){VoiceQueue[_0x4206[60]]({where:{name:_0xdf06x7[_0x4206[48]][_0x4206[9]]}})[_0x4206[43]](function(_0xdf06x16){if(!_0xdf06x16){return _0xdf06x8[_0x4206[46]](404)};VoiceExtension[_0x4206[52]]({where:{queue:_0xdf06x16[_0x4206[9]]}})[_0x4206[43]](function(_0xdf06x1e){if(_0xdf06x1e[_0x4206[55]]>0){return _0xdf06x8[_0x4206[42]](500)[_0x4206[41]]({message:_0x4206[70]})};_0xdf06x16[_0x4206[69]]()[_0x4206[43]](function(){return _0xdf06x8[_0x4206[46]](204)})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)})};exports[_0x4206[71]]=function(_0xdf06x7,_0xdf06x8){VoiceQueue[_0x4206[52]]({where:{name:_0xdf06x7[_0x4206[14]][_0x4206[9]]}})[_0x4206[43]](function(_0xdf06x1f){if(!_0xdf06x1f){return _0xdf06x8[_0x4206[46]](404)};var _0xdf06x20=_[_0x4206[73]](_[_0x4206[73]](_0xdf06x1f,_0x4206[72]),_0x4206[9]);console[_0x4206[32]](_0xdf06x20);VoiceExtension[_0x4206[52]]({where:{queue:_0xdf06x20}})[_0x4206[43]](function(_0xdf06x1e){if(_0xdf06x1e[_0x4206[55]]>0){return _0xdf06x8[_0x4206[42]](500)[_0x4206[41]]({message:_0x4206[70]})};VoiceQueue[_0x4206[69]]({where:{name:_0xdf06x7[_0x4206[14]][_0x4206[9]]},individualHooks:true})[_0x4206[43]](function(){return _0xdf06x8[_0x4206[46]](204)})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)});})[_0x4206[30]](function(_0xdf06x11){return handleError(_0xdf06x8,_0xdf06x11)})};function handleError(_0xdf06x8,_0xdf06x11){return _0xdf06x8[_0x4206[42]](500)[_0x4206[41]](_0xdf06x11)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var util = require('util');
+
+var User = require('../../models').User;
+var VoiceQueue = require('../../models').VoiceQueue;
+var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
+var VoiceExtension = require('../../models').VoiceExtension;
+
+// Get list of voice_queues
+exports.index = function(req, res) {
+  // console.log(req.query.page);
+  var attributes = ['name', 'description', 'strategy', 'context'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+  VoiceQueue
+    .findAndCountAll(query)
+    .then(function(result) {
+      console.log(result.count);
+      var total_pages = Math.ceil(result.count / per_page);
+      console.log(total_pages);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voice_queue
+exports.show = function(req, res) {
+  VoiceQueue
+    .findById(req.params.id)
+    .then(function(voice_queue) {
+      if (!voice_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a queue
+exports.queueValidation = function(req, res) {
+  console.log(req.body);
+  VoiceQueue
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(voice_queue) {
+      if (!voice_queue) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_queue);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new voice_queue in the DB.
+exports.create = function(req, res) {
+  VoiceQueue
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(existingQueues) {
+      console.log(existingQueues);
+      console.log('Finding app row.....');
+      if (!existingQueues) {
+        return res.sendStatus(404);
+      }
+      if (existingQueues.length > 0) {
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_QUEUE'
+        });
+      }
+      VoiceQueue
+        .create(req.body)
+        .then(function(voice_queue) {
+          return res.status(201).send(voice_queue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing voice_queue in the DB.
+exports.update = function(req, res) {
+  VoiceQueue
+    .find({
+      where: {
+        name: req.params.id
+      }
+    })
+    .then(function(voiceQueue) {
+      if (!voiceQueue) {
+        return res.sendStatus(404);
+      }
+      if (req.body.id) {
+        delete req.body.id;
+      }
+      var updated = _.merge(voiceQueue, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(voiceQueue);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+// Updates an existing user_has_voiceQueue in the DB.
+exports.addAgents = function(req, res, next) {
+
+  console.log('addAgents');
+  console.log(req.params);
+  console.log(req.body);
+  User
+    .findAll({
+      where: {
+        id: {
+          $in: req.body.agents
+        }
+      }
+    })
+    .then(function(users) {
+      // console.log(users);
+      var userHasVoiceQueues = _.map(users, function(user) {
+        return {
+          queue: req.params.id,
+          location: util.format('SIP/%s', user.name),
+          membername: user.name,
+          VoiceQueueName: req.params.id,
+          UserId: user.id
+        };
+      });
+
+      UserHasVoiceQueue
+        .bulkCreate(userHasVoiceQueues, {
+          individualHooks: true
+        })
+        .then(function() {
+          return res.sendStatus(200);
+        })
+        .catch(function(err) {
+          return next(err);
+        });
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+exports.removeAgents = function(req, res, next) {
+  VoiceQueue
+    .find({
+      where: {
+        name: req.params.id
+      }
+    })
+    .then(function(voiceQueue) {
+      if (voiceQueue) {
+        // QUEUE FOUND
+        // REMOVE AGENTS
+        voiceQueue
+          .removeUsers(req.body.agents, {
+            individualHooks: true
+          })
+          .then(function() {
+            return res.sendStatus(200);
+          })
+          .catch(function(err) {
+            return next(err);
+          });
+      } else {
+        return next(new Error('no queue found'));
+      }
+    })
+    .catch(function(err) {
+      return next(err);
+    });
+};
+
+// Deletes a voice_queue from the DB.
+exports.destroy = function(req, res) {
+  VoiceQueue
+    .find({
+      where: {
+        name: req.params.name
+      }
+    })
+    .then(function(voice_queue) {
+      if (!voice_queue) {
+        return res.sendStatus(404);
+      }
+      VoiceExtension
+        .findAll({
+          where: {
+            queue: voice_queue.name
+          }
+        })
+        .then(function(contextExtensions) {
+          if (contextExtensions.length > 0) {
+            return res.status(500).send({
+              message: 'MESSAGE_QUEUE_ROUTE_ASSOCIATED'
+            });
+          }
+          voice_queue.destroy()
+            .then(function() {
+              return res.sendStatus(204);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple voice_queues from the DB.
+exports.bulkDestroy = function(req, res) {
+  VoiceQueue
+    .findAll({
+      where: {
+        name: req.query.name
+      }
+    })
+    .then(function(voice_queues) {
+      if (!voice_queues) {
+        return res.sendStatus(404);
+      }
+      var destroyQueuesNames = _.pluck(_.pluck(voice_queues, 'dataValues'), 'name');
+      console.log(destroyQueuesNames);
+      VoiceExtension
+        .findAll({
+          where: {
+            queue: destroyQueuesNames
+          }
+        })
+        .then(function(contextExtensions) {
+          if (contextExtensions.length > 0) {
+            return res.status(500).send({
+              message: 'MESSAGE_QUEUE_ROUTE_ASSOCIATED'
+            });
+          }
+          VoiceQueue
+            .destroy({
+              where: {
+                name: req.query.name
+              },
+              individualHooks: true
+            })
+            .then(function() {
+              return res.sendStatus(204);
+            })
+            .catch(function(err) {
+              return handleError(res, err);
+            });
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}