Fixed CSV file download

This commit is contained in:
Patrick McDonagh
2016-05-02 16:38:45 -05:00
parent df9726c799
commit b2bba6ca6b
5 changed files with 85 additions and 7 deletions

View File

@@ -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);
});
});
}
};

View File

@@ -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);

View File

@@ -21,7 +21,7 @@
<div ng-if="!error" class="container">
<div class="row">
<button ng-click="loadDashboard()" class="btn btn-large btn-success"><i class="fa fa-refresh"></i> Reload Dashboard</button>
<a href="/json/csv/all" class="btn btn-large btn-primary"><i class="fa fa-download"></i> Download All Data</a>
<a href="/csv/all" class="btn btn-large btn-primary"><i class="fa fa-download"></i> Download All Data</a>
<div ng-repeat="val in vals">
<div class="col-md-4" style="height:200px; margin-bottom:40px;">
<just-gage id="{{val.name}}" min='val.minExpected' max='val.maxExpected' value='val.val' options="{label:val.units,title:val.name, decimals:2, refreshAnimationType:'bounce', startAnimationType:'bounce'}"></just-gage>

View File

@@ -56,7 +56,8 @@
<div class="row topMargin40">
<div class="col-md-12">
<a href="/json/CSV/{{tag.id}}/{{startDatetime | dString}}/{{endDatetime | dString }}" class="btn btn-large btn-primary padMe"><i class="fa fa-download"></i> Download Data</a>
<a href="/csv/{{tags_to_get}}/{{startDatetime | dString}}/{{endDatetime | dString }}" class="btn btn-large btn-primary padMe"><i class="fa fa-download"></i> Download Data</a>
<button class="btn btn-warning" type="button" data-toggle="collapse" data-target="#collapseJSON" aria-expanded="false" aria-controls="collapseJSON">
Show Source Data
</button>

View File

@@ -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",
};