3 var _ = require('lodash');
4 var util = require('util');
5 var DefaultReport = require('../../models').DefaultReport;
7 // Get list of default reports
8 exports.index = function(req, res, next) {
10 var attributes = ['name', 'description', 'parent'];
11 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
12 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
17 offset: page * per_page
20 _.forIn(req.query, function(value, key) {
26 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
32 attributes.forEach(function(attribute) {
35 $like: '%' + value + '%'
38 query.where.$or.push(tmp);
43 $or: value.split(/[\s,]+/)
47 var params = JSON.parse(value);
48 _.forOwn(params, function(pValue, pKey) {
49 query.where[pKey] = pValue;
56 query.where[key].$like = '%' + value + '%';
61 .findAndCountAll(query)
62 .then(function(result) {
63 var total_pages = Math.ceil(result.count / per_page);
64 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;
65 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
67 res.status(200).send({
71 previous_page: previous_page,
72 total_pages: total_pages
76 .catch(function(err) {
77 res.status(500).send({
78 error: 'Something blew up!'
84 // Get a single report
85 exports.show = function(req, res) {
87 .findById(req.params.id)
88 .then(function(report) {
90 return res.sendStatus(404);
92 return res.send(report);
94 .catch(function(err) {
95 return handleError(res, err);
99 // Creates a new report in the DB.
100 exports.create = function(req, res) {
103 .then(function(report) {
104 return res.status(201).send(report);
106 .catch(function(err) {
107 return handleError(res, err);
111 // Updates an existing report in the DB.
112 exports.update = function(req, res) {
117 .findById(req.params.id)
118 .then(function(report) {
120 return res.sendStatus(404);
122 var updated = _.merge(report, req.body);
125 return res.status(200).send(report);
127 .catch(function(err) {
128 return handleError(res, err);
131 .catch(function(err) {
132 return handleError(res, err);
136 // Deletes a report from the DB.
137 exports.destroy = function(req, res) {
139 .findById(req.params.id)
140 .then(function(report) {
142 return res.sendStatus(404);
146 return res.sendStatus(204);
148 .catch(function(err) {
149 return handleError(res, err);
152 .catch(function(err) {
153 return handleError(res, err);
157 function handleError(res, err) {
158 return res.status(500).send(err);