3 var _ = require('lodash');
4 var util = require('util');
5 var CustomReport = require('../../models').CustomReport;
6 var ReportTree = require('../../models').ReportTree;
9 // Get list of custom reports
10 exports.index = function(req, res, next) {
12 var attributes = ['name', 'description', 'parent'];
13 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
14 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
19 offset: page * per_page
22 _.forIn(req.query, function(value, key) {
28 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
34 attributes.forEach(function(attribute) {
37 $like: '%' + value + '%'
40 query.where.$or.push(tmp);
45 $or: value.split(/[\s,]+/)
49 var params = JSON.parse(value);
50 _.forOwn(params, function(pValue, pKey) {
51 query.where[pKey] = pValue;
58 query.where[key].$like = '%' + value + '%';
63 .findAndCountAll(query)
64 .then(function(result) {
65 var total_pages = Math.ceil(result.count / per_page);
66 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;
67 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
69 res.status(200).send({
73 previous_page: previous_page,
74 total_pages: total_pages
78 .catch(function(err) {
79 res.status(500).send({
80 error: 'Something blew up!'
85 // Get a single report
86 exports.show = function(req, res) {
88 .findById(req.params.id)
89 .then(function(report) {
91 return res.sendStatus(404);
93 return res.send(report);
95 .catch(function(err) {
96 return handleError(res, err);
100 // Creates a new report in the DB.
101 exports.create = function(req, res) {
104 .then(function(report) {
105 return res.status(201).send(report);
107 .catch(function(err) {
108 return handleError(res, err);
112 // Updates an existing report in the DB.
113 exports.update = function(req, res) {
118 .findById(req.params.id)
119 .then(function(report) {
121 return res.sendStatus(404);
123 var updated = _.merge(report, req.body);
126 return res.status(200).send(report);
128 .catch(function(err) {
129 return handleError(res, err);
132 .catch(function(err) {
133 return handleError(res, err);
137 // Deletes a report from the DB.
138 exports.destroy = function(req, res) {
140 .findById(req.params.id)
141 .then(function(report) {
143 return res.sendStatus(404);
147 return res.sendStatus(204);
149 .catch(function(err) {
150 return handleError(res, err);
153 .catch(function(err) {
154 return handleError(res, err);
158 function handleError(res, err) {
159 return res.status(500).send(err);