aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web/app/AttributeFormatter.js15
-rw-r--r--web/app/model/ReportSummary.js3
-rw-r--r--web/app/view/ReportController.js5
-rw-r--r--web/l10n/en.json7
4 files changed, 29 insertions, 1 deletions
diff --git a/web/app/AttributeFormatter.js b/web/app/AttributeFormatter.js
index 3432ca1e0..7d008dc64 100644
--- a/web/app/AttributeFormatter.js
+++ b/web/app/AttributeFormatter.js
@@ -34,6 +34,19 @@ Ext.define('Traccar.AttributeFormatter', {
return Ext.getStore('DistanceUnits').formatValue(value, Traccar.app.getPreference('distanceUnit'));
},
+ intervalFormatter: function (value) {
+ var days, hours, minutes, seconds;
+ seconds = Math.floor(value / 1000);
+ days = Math.floor(seconds / 86400);
+ hours = ('0' + Math.floor(seconds / 3600) % 24).slice(-2);
+ minutes = ('0' + Math.floor(seconds / 60) % 60).slice(-2);
+ seconds = ('0' + seconds % 60).slice(-2);
+ return (days > 0 ? days + Strings.sharedDayAbbreviation + ' ' : '')
+ + (hours > 0 ? hours + Strings.sharedHourAbbreviation + ' ' : '')
+ + (minutes > 0 ? minutes + Strings.sharedMinuteAbbreviation + ' ' : '')
+ + (seconds > 60 ? seconds : seconds + Strings.sharedSecondAbbreviation);
+ },
+
defaultFormatter: function (value) {
if (typeof value === 'number') {
return Number(value.toFixed(Traccar.Style.numberPrecision));
@@ -58,6 +71,8 @@ Ext.define('Traccar.AttributeFormatter', {
return this.courseFormatter;
} else if (key === 'distance' || key === 'odometer') {
return this.distanceFormatter;
+ } else if (key === 'interval') {
+ return this.intervalFormatter;
} else {
return this.defaultFormatter;
}
diff --git a/web/app/model/ReportSummary.js b/web/app/model/ReportSummary.js
index 7821e1c00..2017d164a 100644
--- a/web/app/model/ReportSummary.js
+++ b/web/app/model/ReportSummary.js
@@ -33,5 +33,8 @@ Ext.define('Traccar.model.ReportSummary', {
}, {
name: 'distance',
type: 'float'
+ }, {
+ name: 'motorHours',
+ type: 'int'
}]
});
diff --git a/web/app/view/ReportController.js b/web/app/view/ReportController.js
index ecc7b0f91..5ac84e8e2 100644
--- a/web/app/view/ReportController.js
+++ b/web/app/view/ReportController.js
@@ -227,6 +227,11 @@ Ext.define('Traccar.view.ReportController', {
dataIndex: 'maxSpeed',
flex: 1,
renderer: Traccar.AttributeFormatter.getFormatter('speed')
+ }, {
+ text: Strings.reportMotorHours,
+ dataIndex: 'motorHours',
+ flex: 1,
+ renderer: Traccar.AttributeFormatter.getFormatter('interval')
}];
if (newValue === 'route') {
diff --git a/web/l10n/en.json b/web/l10n/en.json
index ef318bd74..11088e9bf 100644
--- a/web/l10n/en.json
+++ b/web/l10n/en.json
@@ -26,6 +26,10 @@
"sharedMute": "Mute",
"sharedType": "Type",
"sharedDistance": "Distance",
+ "sharedDayAbbreviation": "d",
+ "sharedHourAbbreviation": "h",
+ "sharedMinuteAbbreviation": "m",
+ "sharedSecondAbbreviation": "s",
"errorTitle": "Error",
"errorUnknown": "Unknown error",
"errorConnection": "Connection error",
@@ -141,5 +145,6 @@
"reportCsv": "CSV",
"reportDeviceName": "Device Name",
"reportAverageSpeed": "Average Speed",
- "reportMaximumSpeed": "Maximum Speed"
+ "reportMaximumSpeed": "Maximum Speed",
+ "reportMotorHours": "Motor Hours"
} \ No newline at end of file