3 var _ = require('lodash');
4 var util = require('util');
6 var User = require('../../models').User;
7 var Service = require('../../models').Service;
8 var UserHasService = require('../../models').UserHasService;
9 var CustomField = require('../../models').CustomField;
10 var Contact = require('../../models').Contact;
12 // Get list of services
13 exports.index = function(req, res) {
14 var attributes = ['name', 'description'];
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 // .scope('customFields')
55 .findAndCountAll(query)
56 .then(function(result) {
57 console.log(result.count);
58 var total_pages = Math.ceil(result.count / per_page);
59 console.log(total_pages);
60 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;
61 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
63 res.status(200).send({
67 previous_page: previous_page,
68 total_pages: total_pages
72 .catch(function(err) {
73 return handleError(res, err);
77 // Get all custom_fields
78 exports.getCustomFields = function(req, res) {
82 ServiceId: req.params.id,
86 .then(function(customFields) {
87 return res.status(200).send(customFields);
89 .catch(function(err) {
91 return handleError(res, err);
95 exports.showCustomField = function(req, res) {
97 .findById(req.params.id)
98 .then(function(customField) {
100 return res.sendStatus(404);
102 return res.send(customField);
104 .catch(function(err) {
105 return handleError(res, err);
109 exports.updateCustomField = function(req, res) {
119 .then(function(customFields) {
121 return res.sendStatus(404);
123 if (customFields.length > 0) {
124 return res.status(500).send({
125 message: 'MESSAGE_EXIST_CUSTOM_FIELD'
132 .findById(req.params.id)
133 .then(function(customField) {
135 return res.sendStatus(404);
137 var updated = _.merge(customField, req.body);
140 return res.status(200).send(customField);
142 .catch(function(err) {
143 return handleError(res, err);
146 .catch(function(err) {
147 return handleError(res, err);
150 .catch(function(err) {
151 return handleError(res, err);
155 exports.createCustomField = function(req, res) {
156 req.body.ServiceId = req.params.id;
159 .then(function(customField) {
160 return res.status(201).send(customField);
162 .catch(function(err) {
163 return handleError(res, err);
167 // Get a single service
168 exports.show = function(req, res) {
170 .findById(req.params.id)
171 .then(function(service) {
173 return res.sendStatus(404);
175 return res.send(service);
177 .catch(function(err) {
178 return handleError(res, err);
182 // Validate the existence of a service
183 exports.serviceValidation = function(req, res) {
184 console.log(req.body);
191 .then(function(service) {
193 return res.sendStatus(404);
195 return res.send(service);
197 .catch(function(err) {
198 return handleError(res, err);
202 // Creates a new service in the DB.
203 exports.create = function(req, res) {
210 .then(function(existingServices) {
211 console.log(existingServices);
212 console.log('Finding app row.....');
213 if (!existingServices) {
214 return res.sendStatus(404);
216 if (existingServices.length > 0) {
217 return res.status(500).send({
218 message: 'MESSAGE_EXIST_SERVICE'
223 .then(function(service) {
224 return res.status(201).send(service);
226 .catch(function(err) {
227 return handleError(res, err);
230 .catch(function(err) {
231 return handleError(res, err);
235 // Updates an existing service in the DB.
236 exports.update = function(req, res) {
243 .then(function(existingServices) {
244 console.log(existingServices);
245 console.log('Finding app row.....');
246 if (!existingServices) {
247 return res.sendStatus(404);
249 if (existingServices.length > 0) {
250 return res.status(500).send({
251 message: 'MESSAGE_EXIST_SERVICE'
255 .findById(req.params.id);
257 .then(function(service) {
259 return res.sendStatus(404);
264 var updated = _.merge(service, req.body);
265 return updated.save();
267 .then(function(service) {
268 return res.status(200).send(service);
270 .catch(function(err) {
271 return handleError(res, err);
276 // Updates an existing user_has_service in the DB.
277 exports.addAgents = function(req, res, next) {
279 console.log('addAgents');
280 console.log(req.params);
281 console.log(req.body);
290 .then(function(users) {
291 // console.log(users);
292 var userHasServices = _.map(users, function(user) {
294 service: req.params.id,
295 membername: user.name,
301 .bulkCreate(userHasServices, {
302 individualHooks: true
305 return res.sendStatus(200);
307 .catch(function(err) {
311 .catch(function(err) {
316 exports.removeAgents = function(req, res, next) {
323 .then(function(service) {
328 .removeUsers(req.body.agents, {
329 individualHooks: true
332 return res.sendStatus(200);
334 .catch(function(err) {
338 return next(new Error('no service found'));
341 .catch(function(err) {
346 // Deletes a service from the DB.
347 exports.destroy = function(req, res) {
348 destroyService(req.params.id, res);
351 // Deletes multiple services from the DB.
352 exports.bulkDestroy = function(req, res) { //add the check for associated contacts
353 destroyService(req.query.id, res);
356 function destroyService(id, res) {
357 return delOrUpdateCf(id)
360 return Service.destroy({
364 individualHooks: true
368 return res.sendStatus(204);
370 .catch(function(err) {
372 return handleError(res, err);
376 function delOrUpdateCf(id) {
377 return CustomField.findAll({
385 .then(function(customFields) {
386 console.log(customFields.length);
388 _.forEach(customFields, function(elem) {
389 if (elem.Contacts.length) {
390 delOrDeact.push(elem.update({
394 delOrDeact.push(elem.destroy());
401 exports.deactivateCustomField = function(req, res) {
403 .findById(req.params.id, {
408 .then(function(customField) {
410 return res.sendStatus(404);
412 if (customField.Contacts.length) {
413 return customField.update({
417 return customField.destroy();
421 return res.sendStatus(204);
423 .catch(function(err) {
424 return handleError(res, err);
429 function handleError(res, err) {
430 return res.status(500).send(err);