diff --git a/web/assets/js/attendance.js b/web/assets/js/attendance.js index fec5b52229d9fa1185ef980e69d31bf993b0bfba..808c042a637a042be2561e31b009a1c7a2d2b048 100644 --- a/web/assets/js/attendance.js +++ b/web/assets/js/attendance.js @@ -197,7 +197,7 @@ angular.module('datasid.attendance', []). config.plotOptions.series.events = { click: function(event) { $scope.$apply(function () { - $location.path($location.path() + '/' + event.point.category[0]); + $scope.barChart.click(event); }); } }; @@ -206,6 +206,14 @@ angular.module('datasid.attendance', []). $scope.barChart.load(); }, + click: function (event) { + if (typeof $state.params.state !== 'undefined') { + window.open('/api/reports/'+$state.current.project+'/avail_report/'+event.point.category[0], '_blank'); + } + else + $location.path($location.path() + '/' + event.point.category[0]); + }, + load: function () { var options = { project: $state.current.project, diff --git a/web/reports/build-report.sh b/web/reports/build-report.sh index 7eb0365bff52db6efbe45aa0a18af33d11a5681d..53b9a2e953f533af8743a305a9f2b4ee63810206 100755 --- a/web/reports/build-report.sh +++ b/web/reports/build-report.sh @@ -1,3 +1,11 @@ #!/bin/bash -java -cp .:lib/* ReportBuilder $* +cd $(dirname $(readlink -f $0)) + +tmp=$(mktemp) + +java -cp .:lib/* ReportBuilder $* > $tmp + +echo -n $tmp + +cd - >/dev/null 2>&1 diff --git a/web/routes/charts.js b/web/routes/charts.js index da98c45adbb64246fde0642dbe11eb60797ac0fe..d873419d2da69b86d9224484f5e0e574d0bd0e8d 100644 --- a/web/routes/charts.js +++ b/web/routes/charts.js @@ -1,3 +1,6 @@ +var exec = require('child_process').exec, + fs = require('fs'); + exports.get_data = function(req, res) { if (typeof req.params.project === 'undefined') return res.json(400, {error: 'missing_project'}); @@ -132,3 +135,64 @@ exports.get_data = function(req, res) { res.json(400, {error: 'invalid_params'}); } + +exports.get_report = function(req, res) { + if (typeof req.params.project === 'undefined') + return res.json(400, {error: 'missing_project'}); + + if (typeof req.params.type === 'undefined') + return res.json(400, {error: 'missing_report_type'}); + + /* + * routes = { 'project': [{ type: 'type', file: 'file', params: 'params}, ...]} + */ + var routes = { + 'tlbr': [ + /* Availability */ + { + type: 'avail_report', file: 'telecentroAvail.jrxml' + , params: [ req.params.id_city ] + } + ], + + 'gesac': [ + /* Availability */ + { + type: 'avail_report', file: 'gesacAvail.jrxml' + , params: [ req.params.id_city ] + } + ] + }; + + var project = req.params.project; + if (routes[project] === 'undefined') + return res.json(400, {error: 'invalid_project'}); + + var queries = routes[project]; + for (var i=0; i<queries.length; i++) { + var query = queries[i]; + if ( query.type === req.params.type ) { + for (var p=0; p<query.params.length; p++) { + query.params[p] = query.params[p] || null; + } + + var cmdline = 'reports/build-report.sh '+query.file+' '+query.params.join(' '); + + exec(cmdline, function (err, stdout, stderr) { + if (err) { + console.log(err); + return res.json(500, {error: 'report_building_failed'}); + } + + res.type('application/pdf'); + res.sendfile(stdout, function (err) { + fs.unlink(stdout); + }); + }); + + return; + } + } + + res.json(400, {error: 'invalid_params'}); +} diff --git a/web/server.js b/web/server.js index 989e4955dabae3096a00b15b2621eb2f42c91fe7..10ce519e98447586990f99ed93794aa02b729a10 100755 --- a/web/server.js +++ b/web/server.js @@ -22,6 +22,8 @@ app.all('/api/points/count', db.connect, points.count); app.all('/api/telecenters/:state?/:city_id?/:telecenter_id?', db.connect, telecenters.list); +app.get('/api/reports/:project/:type/:id_city', db.connect, charts.get_report); + app.get('/api/:project/:type', db.connect, charts.get_data); app.get('/api/:project/:type/:region', db.connect, charts.get_data); app.get('/api/:project/:type/:region/:state', db.connect, charts.get_data);