From b2bba6ca6b9907589da6021fb5fe9a482f6f2a12 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Mon, 2 May 2016 16:38:45 -0500 Subject: [PATCH] Fixed CSV file download --- .../api/controllers/Tag_valController.js | 83 ++++++++++++++++++- tagserverApp/assets/js/controller.js | 2 + tagserverApp/assets/templates/dashboard.html | 2 +- tagserverApp/assets/templates/tagVals.html | 3 +- tagserverApp/config/routes.js | 2 +- 5 files changed, 85 insertions(+), 7 deletions(-) diff --git a/tagserverApp/api/controllers/Tag_valController.js b/tagserverApp/api/controllers/Tag_valController.js index e5f1224..8322327 100644 --- a/tagserverApp/api/controllers/Tag_valController.js +++ b/tagserverApp/api/controllers/Tag_valController.js @@ -5,6 +5,37 @@ * @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers */ +var mysqlDate = function(d){ + var year = d.substring(0,4); + var month = d.substring(4,6); + var day = d.substring(6,8); + var hour = d.substring(9,11); + var min = d.substring(11,13); + var sec = d.substring(13,15); + return "".concat(year, "-", month, "-", day, " ", hour, ":", min, ":", sec); +}; + +var createCSVrow = function(header, dataRow){ + var i = header.indexOf(dataRow.tagID); + // for (var x = 0; x < header.length; x++){ + // console.log(dataRow.id, header[x], parseInt(dataRow.tagID) == parseInt(header[x])); + // } + var csvRow = dataRow.id.toString() + ',' + dataRow.createdAt + ','; + if(i >= 0){ + var j = 2; + while (j < header.length){ + if (j == i){ + csvRow = csvRow + dataRow.val.toString() + ','; + } else { + csvRow = csvRow + ','; + } + j++; + } + csvRow = csvRow.slice(0, -1) + '\u000d'; + return csvRow; + } +}; + module.exports = { latest: function(req, res){ var query = "SELECT v1.id as id, v1.createdAt as dtime, t.id as t_id, t.name as name, t.tag as tag, v1.val as val, t.units as units, t.description as description, t.minExpected as minExpected, t.maxExpected as maxExpected FROM tag_vals v1 INNER JOIN tags t ON t.id = v1.tagID WHERE v1.id = (SELECT v2.id FROM tag_vals v2 WHERE v2.tagID = v1.tagID ORDER BY v2.id DESC LIMIT 1) ORDER BY t.id"; @@ -31,13 +62,57 @@ module.exports = { }, csvSingle: function(req, res){ - + var w = {'where':{'tagID': req.params.id, 'createdAt': {">":mysqlDate(req.params.start), "<": mysqlDate(req.params.end)}}}; + Tag_val.find(w).exec(function(err, rows){ + if (err) return res.serverError(err); + Tag.find({'where':{'id': req.params.id}}).exec(function(tag_err, tag_names){ + if (tag_err) return res.serverError(tag_err); + var h = ['id', 'DateAdded']; + var hid = ['id', 'DateAdded']; + for (var j = 0; j < tag_names.length; j++){ + h.push(tag_names[j].name); + hid.push(tag_names[j].id); + } + console.log(h); + var csvString = ""; + csvString = csvString + h.join(',') + '\u000d'; + + var i = 0; + while (i < rows.length){ + csvString = csvString + createCSVrow(hid, rows[i]); + i++; + } + res.set('Content-Type', 'text/csv'); + res.set('Content-Disposition', 'attachment;filename=tagdata.csv'); + res.send(csvString); + }); + }); }, csvAll: function(req, res){ + Tag_val.find().exec(function(err, rows){ + if (err) return res.serverError(err); + Tag.find().exec(function(tag_err, tag_names){ + if (tag_err) return res.serverError(tag_err); + var h = ['id', 'DateAdded']; + var hid = ['id', 'DateAdded']; + for (var j = 0; j < tag_names.length; j++){ + h.push(tag_names[j].name); + hid.push(tag_names[j].id); + } + console.log(h); + var csvString = ""; + csvString = csvString + h.join(',') + '\u000d'; + var i = 0; + while (i < rows.length){ + csvString = csvString + createCSVrow(hid, rows[i]); + i++; + } + res.set('Content-Type', 'text/csv'); + res.set('Content-Disposition', 'attachment;filename=tagdata.csv'); + res.send(csvString); + }); + }); } - - - }; diff --git a/tagserverApp/assets/js/controller.js b/tagserverApp/assets/js/controller.js index 744ea80..d7ba4cf 100644 --- a/tagserverApp/assets/js/controller.js +++ b/tagserverApp/assets/js/controller.js @@ -542,10 +542,12 @@ poconsole.controller('tagValsCtrl', function($scope, $route, $http, $routeParams $scope.startDatetime.setHours($scope.endDatetime.getHours() - 2); } $log.info({start: $scope.startDatetime, end:$scope.endDatetime}); + $scope.loadTagVals = function(sDTime, eDTime){ $scope.loading = true; var tags_to_get = $routeParams.tagID.split(","); var getTag = tags.getTag(tags_to_get); + $scope.tags_to_get = tags_to_get.toString(); getTag.then(function(tagData){ $scope.tag = tagData.tag; var getTagHistoryBetween = tags.getTagHistoryBetween(tags_to_get, sDTime, eDTime); diff --git a/tagserverApp/assets/templates/dashboard.html b/tagserverApp/assets/templates/dashboard.html index 38db16e..ae65810 100644 --- a/tagserverApp/assets/templates/dashboard.html +++ b/tagserverApp/assets/templates/dashboard.html @@ -21,7 +21,7 @@
- Download All Data + Download All Data
diff --git a/tagserverApp/assets/templates/tagVals.html b/tagserverApp/assets/templates/tagVals.html index 962673e..b392775 100644 --- a/tagserverApp/assets/templates/tagVals.html +++ b/tagserverApp/assets/templates/tagVals.html @@ -56,7 +56,8 @@
- Download Data + + Download Data diff --git a/tagserverApp/config/routes.js b/tagserverApp/config/routes.js index d3a252c..7f75d4d 100644 --- a/tagserverApp/config/routes.js +++ b/tagserverApp/config/routes.js @@ -48,5 +48,5 @@ module.exports.routes = { "/tag_val/clear/all": "Tag_valController.clearAllTagData", "/tag_val/clear/:id": "Tag_valController.clearSingleTagData", "/csv/all": "Tag_valController.csvAll", - "/csv/:id": "Tag_valController.csvSingle", + "/csv/:id/:start/:end": "Tag_valController.csvSingle", };