3 var _ = require('lodash');
4 var util = require('util');
6 var User = require('../../models').User;
7 var VoiceQueue = require('../../models').VoiceQueue;
8 var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue;
9 var VoiceExtension = require('../../models').VoiceExtension;
11 // Get list of voice_queues
12 exports.index = function(req, res) {
13 // console.log(req.query.page);
14 var attributes = ['name', 'description', 'strategy', 'context'];
15 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
16 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
21 offset: page * per_page
24 _.forIn(req.query, function(value, key) {
30 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
36 attributes.forEach(function(attribute) {
39 $like: '%' + value + '%'
42 query.where.$or.push(tmp);
49 query.where[key].$like = '%' + value + '%';
54 .findAndCountAll(query)
55 .then(function(result) {
56 console.log(result.count);
57 var total_pages = Math.ceil(result.count / per_page);
58 console.log(total_pages);
59 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;
60 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
62 res.status(200).send({
66 previous_page: previous_page,
67 total_pages: total_pages
71 .catch(function(err) {
72 return handleError(res, err);
76 // Get a single voice_queue
77 exports.show = function(req, res) {
79 .findById(req.params.id)
80 .then(function(voice_queue) {
82 return res.sendStatus(404);
84 return res.send(voice_queue);
86 .catch(function(err) {
87 return handleError(res, err);
91 // Validate the existence of a queue
92 exports.queueValidation = function(req, res) {
93 console.log(req.body);
100 .then(function(voice_queue) {
102 return res.sendStatus(404);
104 return res.send(voice_queue);
106 .catch(function(err) {
107 return handleError(res, err);
111 // Creates a new voice_queue in the DB.
112 exports.create = function(req, res) {
119 .then(function(existingQueues) {
120 console.log(existingQueues);
121 console.log('Finding app row.....');
122 if (!existingQueues) {
123 return res.sendStatus(404);
125 if (existingQueues.length > 0) {
126 return res.status(500).send({
127 message: 'MESSAGE_EXIST_QUEUE'
132 .then(function(voice_queue) {
133 return res.status(201).send(voice_queue);
135 .catch(function(err) {
136 return handleError(res, err);
139 .catch(function(err) {
140 return handleError(res, err);
144 // Updates an existing voice_queue in the DB.
145 exports.update = function(req, res) {
152 .then(function(voiceQueue) {
154 return res.sendStatus(404);
159 var updated = _.merge(voiceQueue, req.body);
162 return res.status(200).send(voiceQueue);
164 .catch(function(err) {
165 return handleError(res, err);
168 .catch(function(err) {
169 return handleError(res, err);
174 // Updates an existing user_has_voiceQueue in the DB.
175 exports.addAgents = function(req, res, next) {
177 console.log('addAgents');
178 console.log(req.params);
179 console.log(req.body);
188 .then(function(users) {
189 // console.log(users);
190 var userHasVoiceQueues = _.map(users, function(user) {
192 queue: req.params.id,
193 location: util.format('SIP/%s', user.name),
194 membername: user.name,
195 VoiceQueueName: req.params.id,
201 .bulkCreate(userHasVoiceQueues, {
202 individualHooks: true
205 return res.sendStatus(200);
207 .catch(function(err) {
211 .catch(function(err) {
216 exports.removeAgents = function(req, res, next) {
223 .then(function(voiceQueue) {
228 .removeUsers(req.body.agents, {
229 individualHooks: true
232 return res.sendStatus(200);
234 .catch(function(err) {
238 return next(new Error('no queue found'));
241 .catch(function(err) {
246 // Deletes a voice_queue from the DB.
247 exports.destroy = function(req, res) {
251 name: req.params.name
254 .then(function(voice_queue) {
256 return res.sendStatus(404);
261 queue: voice_queue.name
264 .then(function(contextExtensions) {
265 if (contextExtensions.length > 0) {
266 return res.status(500).send({
267 message: 'MESSAGE_QUEUE_ROUTE_ASSOCIATED'
270 voice_queue.destroy()
272 return res.sendStatus(204);
274 .catch(function(err) {
275 return handleError(res, err);
278 .catch(function(err) {
279 return handleError(res, err);
282 .catch(function(err) {
283 return handleError(res, err);
287 // Deletes multiple voice_queues from the DB.
288 exports.bulkDestroy = function(req, res) {
295 .then(function(voice_queues) {
297 return res.sendStatus(404);
299 var destroyQueuesNames = _.pluck(_.pluck(voice_queues, 'dataValues'), 'name');
300 console.log(destroyQueuesNames);
304 queue: destroyQueuesNames
307 .then(function(contextExtensions) {
308 if (contextExtensions.length > 0) {
309 return res.status(500).send({
310 message: 'MESSAGE_QUEUE_ROUTE_ASSOCIATED'
318 individualHooks: true
321 return res.sendStatus(204);
323 .catch(function(err) {
324 return handleError(res, err);
327 .catch(function(err) {
328 return handleError(res, err);
331 .catch(function(err) {
332 return handleError(res, err);
337 function handleError(res, err) {
338 return res.status(500).send(err);