Fixed CSV file download
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user