fleetmap-reports 1.0.965 → 1.0.966
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RapportPerformance.xlsx +0 -0
- package/package.json +1 -1
- package/src/fuelconsumption-report.js +1 -1
- package/src/index.js +10 -0
- package/src/partnerReports/dailyuse-report.js +78 -1
- package/src/partnerReports/performance-report.js +7 -9
- package/src/tests/index.js +1 -1
- package/src/tests/performance.test.js +23 -3
- package/src/zone-report.js +0 -4
|
Binary file
|
package/package.json
CHANGED
|
@@ -54,7 +54,7 @@ async function createFuelConsumptionReport (from, to, userData, traccar) {
|
|
|
54
54
|
|
|
55
55
|
const odooAvgConsumption = useOdooFuelData(d, route) ? getOdooAvgConsumption(date, refuelingPositions, trips) : 0
|
|
56
56
|
const distance = summaryByDevice.distance
|
|
57
|
-
const spentFuel = calculateConsumption(d, { trips: tripsByDay, stops: [], route: routeByDay }, odooAvgConsumption)
|
|
57
|
+
const spentFuel = calculateConsumption(d, { trips: tripsByDay, stops: [], route: routeByDay, summary: summaryByDevice }, odooAvgConsumption)
|
|
58
58
|
|
|
59
59
|
const dataRow = {
|
|
60
60
|
date,
|
package/src/index.js
CHANGED
|
@@ -193,5 +193,15 @@ function Reports (config, axios, cookieJar) {
|
|
|
193
193
|
this.performanceReportToExcel = (userData, reportData) => {
|
|
194
194
|
return require('./partnerReports/performance-report').exportPerformanceReportToExcel(userData, reportData)
|
|
195
195
|
}
|
|
196
|
+
|
|
197
|
+
this.dailyUseReport = (from, to, userData) => {
|
|
198
|
+
return require('./partnerReports/dailyuse-report').createDailyUseReport(from, to, userData, this.traccar)
|
|
199
|
+
}
|
|
200
|
+
this.dailyUseReportToPDF = (userData, reportData) => {
|
|
201
|
+
return require('./partnerReports/dailyuse-report').exportDailyUseReportToPDF(userData, reportData)
|
|
202
|
+
}
|
|
203
|
+
this.dailyUseReportToExcel = (userData, reportData) => {
|
|
204
|
+
return require('./partnerReports/dailyuse-report').exportDailyUseReportToExcel(userData, reportData)
|
|
205
|
+
}
|
|
196
206
|
}
|
|
197
207
|
module.exports = Reports
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
const traccarHelper = require('../util/traccar')
|
|
2
2
|
const { isInsideTimetable } = require('../util/trips')
|
|
3
|
-
const { convertFromUTCDate } = require('../util/utils')
|
|
3
|
+
const { convertFromUTCDate, getTranslations, convertMS} = require('../util/utils')
|
|
4
4
|
const automaticReports = require('../automaticReports')
|
|
5
|
+
const jsPDF = require("jspdf");
|
|
6
|
+
const {getStyle} = require("../reportStyle");
|
|
7
|
+
const {getUserPartner} = require("fleetmap-partners");
|
|
8
|
+
const {addTable} = require("../util/pdfDocument");
|
|
5
9
|
|
|
6
10
|
async function createDailyUseReport (from, to, userData, traccar) {
|
|
7
11
|
const reportData = []
|
|
@@ -77,4 +81,77 @@ function processDeviceData (allInOne, d, userData) {
|
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
|
|
84
|
+
function exportDailyUseReportToPDF (userData, reportData) {
|
|
85
|
+
const translations = getTranslations(userData)
|
|
86
|
+
|
|
87
|
+
const headers = [
|
|
88
|
+
translations.report.vehicle,
|
|
89
|
+
'Utilisation',
|
|
90
|
+
'Conduite',
|
|
91
|
+
'Ralenti',
|
|
92
|
+
'Totale (L)',
|
|
93
|
+
'Conduite (L)',
|
|
94
|
+
'Ralenti (L)',
|
|
95
|
+
'Conduite (Km)',
|
|
96
|
+
'Économique',
|
|
97
|
+
'Économique (L)',
|
|
98
|
+
'Économique (Km)',
|
|
99
|
+
'Cruise Control',
|
|
100
|
+
'Cruise Control (L)',
|
|
101
|
+
'Cruise Control (Km)',
|
|
102
|
+
'Tour moteur élevé',
|
|
103
|
+
'Accéleration brusque (Sum)',
|
|
104
|
+
'Freinage brusque (Sum)',
|
|
105
|
+
'Virages brusque'
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
const data = []
|
|
109
|
+
reportData.forEach(d => {
|
|
110
|
+
const row = [
|
|
111
|
+
d.device,
|
|
112
|
+
convertMS((d.drivingTime + d.idleTime) * 1000),
|
|
113
|
+
convertMS(d.drivingTime * 1000),
|
|
114
|
+
convertMS(d.idleTime * 1000),
|
|
115
|
+
d.drivingConsumption + d.idleConsumption,
|
|
116
|
+
d.drivingConsumption,
|
|
117
|
+
d.idleConsumption,
|
|
118
|
+
d.drivingDistance.toFixed(2),
|
|
119
|
+
convertMS(d.economicTime * 1000),
|
|
120
|
+
d.economicConsumption.toFixed(1),
|
|
121
|
+
d.economicDistance.toFixed(2),
|
|
122
|
+
convertMS(d.cruiseControlTime * 1000),
|
|
123
|
+
d.cruiseControlConsumption.toFixed(1),
|
|
124
|
+
d.cruiseControlDistance.toFixed(2),
|
|
125
|
+
convertMS(d.highEngineRPM * 1000),
|
|
126
|
+
d.hardAcceleration,
|
|
127
|
+
d.hardBraking,
|
|
128
|
+
d.hardCornering
|
|
129
|
+
]
|
|
130
|
+
data.push(row)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const doc = new jsPDF.jsPDF('l')
|
|
134
|
+
const style = getStyle(getUserPartner(userData.user))
|
|
135
|
+
|
|
136
|
+
const footValues = []
|
|
137
|
+
|
|
138
|
+
doc.setFontSize(11)
|
|
139
|
+
doc.text(new Date(userData.from).toLocaleString() + ' - ' + new Date(userData.to).toLocaleString(), 20, 33)
|
|
140
|
+
|
|
141
|
+
style.headerFontSize = 8
|
|
142
|
+
style.bodyFontSize = 7
|
|
143
|
+
const columnStyles = {}
|
|
144
|
+
for (let i = 1; i < 18; i++) {
|
|
145
|
+
columnStyles[i] = { halign: 'right' }
|
|
146
|
+
}
|
|
147
|
+
addTable(doc, headers, data, footValues, style, 40, columnStyles)
|
|
148
|
+
return doc
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function exportDailyUseReportToExcel (userData, reportData) {
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
80
155
|
exports.createDailyUseReport = createDailyUseReport
|
|
156
|
+
exports.exportDailyUseReportToPDF = exportDailyUseReportToPDF
|
|
157
|
+
exports.exportDailyUseReportToExcel = exportDailyUseReportToExcel
|
|
@@ -314,7 +314,7 @@ function exportPerformanceReportToExcel (userData, reportData) {
|
|
|
314
314
|
|
|
315
315
|
let data = []
|
|
316
316
|
data = data.concat([{}])
|
|
317
|
-
|
|
317
|
+
data = data.concat(reportData.map(d => {
|
|
318
318
|
return {
|
|
319
319
|
name: d.device,
|
|
320
320
|
totalUse: convertMS((d.drivingTime + d.idleTime) * 1000),
|
|
@@ -323,21 +323,19 @@ function exportPerformanceReportToExcel (userData, reportData) {
|
|
|
323
323
|
totalConsumption: d.drivingConsumption + d.idleConsumption,
|
|
324
324
|
drivingConsumption: d.drivingConsumption,
|
|
325
325
|
idleConsumption: d.idleConsumption,
|
|
326
|
-
drivingDistance: d.drivingDistance,
|
|
326
|
+
drivingDistance: Number(d.drivingDistance.toFixed(2)),
|
|
327
327
|
economicTime: convertMS(d.economicTime * 1000),
|
|
328
|
-
economicConsumption: d.economicConsumption,
|
|
329
|
-
economicDistance: d.economicDistance,
|
|
328
|
+
economicConsumption: Number(d.economicConsumption.toFixed(1)),
|
|
329
|
+
economicDistance: Number(d.economicDistance.toFixed(2)),
|
|
330
330
|
cruiseControlTime: convertMS(d.cruiseControlTime * 1000),
|
|
331
|
-
cruiseControlConsumption: d.cruiseControlConsumption,
|
|
332
|
-
cruiseControlDistance: d.cruiseControlDistance,
|
|
331
|
+
cruiseControlConsumption: Number(d.cruiseControlConsumption.toFixed(1)),
|
|
332
|
+
cruiseControlDistance: Number(d.cruiseControlDistance.toFixed(2)),
|
|
333
333
|
highEngineRPM: d.highEngineRPM,
|
|
334
334
|
hardAcceleration: d.hardAcceleration,
|
|
335
335
|
hardBraking: d.hardBraking,
|
|
336
336
|
hardCornering: d.hardCornering
|
|
337
337
|
}
|
|
338
|
-
}))
|
|
339
|
-
|
|
340
|
-
console.log(data)
|
|
338
|
+
}))
|
|
341
339
|
|
|
342
340
|
return {
|
|
343
341
|
headers,
|
package/src/tests/index.js
CHANGED
|
@@ -16,7 +16,7 @@ axiosCookieJarSupport(axios)
|
|
|
16
16
|
|
|
17
17
|
const getReports = async (email, password) => {
|
|
18
18
|
try {
|
|
19
|
-
|
|
19
|
+
console.log('email / pass', process.env.email || email, process.env.password || password)
|
|
20
20
|
await new SessionApi(traccarConfig, null, axios).sessionPost(email || process.env.email, password || process.env.password)
|
|
21
21
|
return new Index(traccarConfig, axios, cookieJar)
|
|
22
22
|
} catch (e) {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const { getReports } = require('./index')
|
|
2
|
-
const { createPerformanceReport } = require('../partnerReports/performance-report')
|
|
2
|
+
const { createPerformanceReport, exportPerformanceReportToExcel } = require('../partnerReports/performance-report')
|
|
3
3
|
const assert = require('assert')
|
|
4
4
|
const { convertMS } = require('../util/utils')
|
|
5
|
+
const xlsx = require("@jcardus/json-as-xlsx");
|
|
6
|
+
|
|
5
7
|
// eslint-disable-next-line no-undef
|
|
6
8
|
describe('performance', function () {
|
|
7
9
|
// eslint-disable-next-line no-undef
|
|
@@ -15,9 +17,10 @@ describe('performance', function () {
|
|
|
15
17
|
userData,
|
|
16
18
|
report.traccar)
|
|
17
19
|
console.log(data)
|
|
20
|
+
|
|
18
21
|
assert.equal(data[0].consumption, 19.799999999999997)
|
|
19
|
-
assert.equal(data[0].distance, 326.
|
|
20
|
-
assert.equal(convertMS(data[1].time * 1000, false), '08:
|
|
22
|
+
assert.equal(data[0].distance, 326.8844199999999)
|
|
23
|
+
assert.equal(convertMS(data[1].time * 1000, false), '08:31')
|
|
21
24
|
}, 8000000)
|
|
22
25
|
|
|
23
26
|
// eslint-disable-next-line no-undef
|
|
@@ -33,4 +36,21 @@ describe('performance', function () {
|
|
|
33
36
|
console.log(data)
|
|
34
37
|
assert.equal(data[0].consumption, 168.51989999999998)
|
|
35
38
|
}, 8000000)
|
|
39
|
+
|
|
40
|
+
it('performance report export excel', async () => {
|
|
41
|
+
const report = await getReports()
|
|
42
|
+
const userData = await report.getUserData()
|
|
43
|
+
const data = await createPerformanceReport(
|
|
44
|
+
new Date(Date.UTC(2023, 6, 1, 0, 0, 0, 0)),
|
|
45
|
+
new Date(Date.UTC(2023, 6, 17, 23, 59, 59, 0)),
|
|
46
|
+
userData,
|
|
47
|
+
report.traccar)
|
|
48
|
+
console.log(data)
|
|
49
|
+
const excel = exportPerformanceReportToExcel(userData, data)
|
|
50
|
+
xlsx([{
|
|
51
|
+
sheet: 'Sheet1',
|
|
52
|
+
columns: excel.headers,
|
|
53
|
+
content: excel.data
|
|
54
|
+
}], excel.settings)
|
|
55
|
+
}, 8000000)
|
|
36
56
|
})
|
package/src/zone-report.js
CHANGED
|
@@ -110,8 +110,6 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
110
110
|
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
111
111
|
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
112
112
|
|
|
113
|
-
console.log(startDate, endDate)
|
|
114
|
-
|
|
115
113
|
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData: filteredByGeofence }, userData)
|
|
116
114
|
|
|
117
115
|
const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > startDate)
|
|
@@ -147,8 +145,6 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
147
145
|
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
148
146
|
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
149
147
|
|
|
150
|
-
console.log(startDate, endDate)
|
|
151
|
-
|
|
152
148
|
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData }, userData)
|
|
153
149
|
|
|
154
150
|
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOutAny', d)
|