c5157bbd927c72240368eae8aa7cd584d367a258
[motion.git] / server / api / fax_queue / fax_queue.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var util = require('util');
5
6 var FaxQueue = require('../../models').FaxQueue;
7
8 // Get list of fax_queues
9 exports.index = function(req, res) {
10
11   var attributes = ['description', 'name', 'timeout', 'strategy'];
12   var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
13   var page = req.query.page ? parseInt(req.query.page, 10) : 0;
14
15   var query = {
16     where: {},
17     limit: per_page,
18     offset: page * per_page,
19     include: [{
20       all: true
21     }]
22   };
23
24   _.forIn(req.query, function(value, key) {
25     switch (key) {
26       case 'per_page':
27       case 'page':
28         break;
29       case 'sort_by':
30         query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
31         break;
32       case 'sort_order':
33         break;
34       case '$':
35         query.where.$or = [];
36         attributes.forEach(function(attribute) {
37           var tmp = {};
38           tmp[attribute] = {
39             $like: '%' + value + '%'
40           };
41
42           query.where.$or.push(tmp);
43         });
44         break;
45       default:
46         query.where[key] = {
47           $like: {}
48         };
49         query.where[key].$like = '%' + value + '%';
50     }
51   });
52
53   FaxQueue
54     .findAndCountAll(query)
55     .then(function(result) {
56       var total_pages = Math.ceil(result.count / per_page);
57       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;
58       var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
59
60       res.status(200).send({
61         count: result.count,
62         rows: result.rows,
63         next_page: next_page,
64         previous_page: previous_page,
65         total_pages: total_pages
66       });
67
68     })
69     .catch(function(err) {
70       return handleError(res, err);
71     });
72 };
73
74 // Get a single fax_queue
75 exports.show = function(req, res) {
76   FaxQueue
77     .findById(req.params.id)
78     .then(function(fax_queue) {
79       if (!fax_queue) {
80         return res.sendStatus(404);
81       }
82       return res.send(fax_queue);
83     })
84     .catch(function(err) {
85       return handleError(res, err);
86     });
87 };
88
89 // Creates a new fax_queue in the DB.
90 exports.create = function(req, res) {
91   FaxQueue
92     .create(req.body)
93     .then(function(fax_queue) {
94       return res.status(201).send(fax_queue);
95     })
96     .catch(function(err) {
97       return handleError(res, err);
98     });
99 };
100
101 // Updates an existing fax_queue in the DB.
102 exports.update = function(req, res) {
103   if (req.body.id) {
104     delete req.body.id;
105   }
106   FaxQueue
107     .find({
108       where: {
109         id: req.params.id
110       }
111     })
112     .then(function(fax_queue) {
113       if (!fax_queue) {
114         return res.sendStatus(404);
115       }
116       var updated = _.merge(fax_queue, req.body);
117       updated.save()
118         .then(function() {
119           return res.status(200).send(fax_queue);
120         })
121         .catch(function(err) {
122           return handleError(res, err);
123         });
124     })
125     .catch(function(err) {
126       return handleError(res, err);
127     });
128 };
129
130 // Deletes a fax_queue from the DB.
131 exports.destroy = function(req, res) {
132   FaxQueue
133     .find({
134       where: {
135         id: req.params.id
136       }
137     })
138     .then(function(fax_queue) {
139       if (!fax_queue) {
140         return res.sendStatus(404);
141       }
142       fax_queue.destroy()
143         .then(function() {
144           return res.sendStatus(204);
145         })
146         .catch(function(err) {
147           return handleError(res, err);
148         });
149     })
150     .catch(function(err) {
151       return handleError(res, err);
152     });
153 };
154
155 exports.addAgents = function(req, res, next) {
156   FaxQueue
157     .findById(req.params.id)
158     .then(function(faxQueue) {
159       if (faxQueue) {
160         // QUEUE FOUND
161         // ADD AGENTS
162         faxQueue
163           .addUsers(req.body.agents)
164           .then(function() {
165             return res.sendStatus(200);
166           })
167           .catch(function(err) {
168             return next(err);
169           });
170       } else {
171         return next(new Error('no fax queue found'));
172       }
173     })
174     .catch(function(err) {
175       return next(err);
176     });
177 };
178
179 exports.removeAgents = function(req, res, next) {
180   FaxQueue
181     .findById(req.params.id)
182     .then(function(faxQueue) {
183       if (faxQueue) {
184         // QUEUE FOUND
185         // REMOVE AGENTS
186         faxQueue
187           .removeUsers(req.body.agents)
188           .then(function() {
189             return res.sendStatus(200);
190           })
191           .catch(function(err) {
192             return next(err);
193           });
194       } else {
195         return next(new Error('no fax queue found'));
196       }
197     })
198     .catch(function(err) {
199       return next(err);
200     });
201 };
202
203 // Deletes a agent from the DB.
204 exports.bulkDestroy = function(req, res) {
205   FaxQueue
206     .destroy({
207       where: {
208         id: req.query.id
209       },
210       individualHooks: true
211     })
212     .then(function() {
213       return res.sendStatus(204);
214     })
215     .catch(function(err) {
216       return handleError(res, err);
217     });
218 };
219
220 function handleError(res, err) {
221   return res.status(500).send(err);
222 }