fleetmap-reports 1.0.965 → 1.0.967
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 +11 -0
- package/src/partnerReports/dailyuse-report.js +79 -1
- package/src/partnerReports/performance-report.js +11 -11
- package/src/tests/activity.test.js +2 -2
- package/src/tests/index.js +1 -1
- package/src/tests/performance.test.js +23 -3
- package/src/util/trips.js +2 -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
|
@@ -19,6 +19,7 @@ function Reports (config, axios, cookieJar) {
|
|
|
19
19
|
drivers: await this.traccar.drivers.driversGet().then(d => d.data),
|
|
20
20
|
geofences: await this.traccar.geofences.geofencesGet().then(d => d.data),
|
|
21
21
|
byGroup: false,
|
|
22
|
+
allWeek: true,
|
|
22
23
|
dayHours: { startTime: '00:00', endTime: '23:59' }
|
|
23
24
|
}
|
|
24
25
|
}
|
|
@@ -193,5 +194,15 @@ function Reports (config, axios, cookieJar) {
|
|
|
193
194
|
this.performanceReportToExcel = (userData, reportData) => {
|
|
194
195
|
return require('./partnerReports/performance-report').exportPerformanceReportToExcel(userData, reportData)
|
|
195
196
|
}
|
|
197
|
+
|
|
198
|
+
this.dailyUseReport = (from, to, userData) => {
|
|
199
|
+
return require('./partnerReports/dailyuse-report').createDailyUseReport(from, to, userData, this.traccar)
|
|
200
|
+
}
|
|
201
|
+
this.dailyUseReportToPDF = (userData, reportData) => {
|
|
202
|
+
return require('./partnerReports/dailyuse-report').exportDailyUseReportToPDF(userData, reportData)
|
|
203
|
+
}
|
|
204
|
+
this.dailyUseReportToExcel = (userData, reportData) => {
|
|
205
|
+
return require('./partnerReports/dailyuse-report').exportDailyUseReportToExcel(userData, reportData)
|
|
206
|
+
}
|
|
196
207
|
}
|
|
197
208
|
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, headerFromUser} = require("../util/pdfDocument");
|
|
5
9
|
|
|
6
10
|
async function createDailyUseReport (from, to, userData, traccar) {
|
|
7
11
|
const reportData = []
|
|
@@ -77,4 +81,78 @@ function processDeviceData (allInOne, d, userData) {
|
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
|
|
84
|
+
async 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
|
+
await headerFromUser(doc, 'Rapport de Performance', userData.user)
|
|
135
|
+
const style = getStyle(getUserPartner(userData.user))
|
|
136
|
+
|
|
137
|
+
const footValues = []
|
|
138
|
+
|
|
139
|
+
doc.setFontSize(11)
|
|
140
|
+
doc.text(new Date(userData.from).toLocaleString() + ' - ' + new Date(userData.to).toLocaleString(), 20, 33)
|
|
141
|
+
|
|
142
|
+
style.headerFontSize = 8
|
|
143
|
+
style.bodyFontSize = 7
|
|
144
|
+
const columnStyles = {}
|
|
145
|
+
for (let i = 1; i < 18; i++) {
|
|
146
|
+
columnStyles[i] = { halign: 'right' }
|
|
147
|
+
}
|
|
148
|
+
addTable(doc, headers, data, footValues, style, 40, columnStyles)
|
|
149
|
+
return doc
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function exportDailyUseReportToExcel (userData, reportData) {
|
|
153
|
+
|
|
154
|
+
}
|
|
155
|
+
|
|
80
156
|
exports.createDailyUseReport = createDailyUseReport
|
|
157
|
+
exports.exportDailyUseReportToPDF = exportDailyUseReportToPDF
|
|
158
|
+
exports.exportDailyUseReportToExcel = exportDailyUseReportToExcel
|
|
@@ -3,7 +3,7 @@ const traccarHelper = require('../util/traccar')
|
|
|
3
3
|
const { getUncompletedTrip } = require('../util/trips')
|
|
4
4
|
const { getEndTripMessages, getCanDriverStyleMessages, parseEndTripMessage, parseCanDriverStyleMessage } = require('../util/xpert')
|
|
5
5
|
const { calculateDistance, getTranslations, convertMS } = require('../util/utils')
|
|
6
|
-
const { addTable } = require('../util/pdfDocument')
|
|
6
|
+
const { addTable, headerFromUser} = require('../util/pdfDocument')
|
|
7
7
|
const jsPDF = require('jspdf')
|
|
8
8
|
const { getStyle } = require('../reportStyle')
|
|
9
9
|
const { getUserPartner } = require('fleetmap-partners')
|
|
@@ -218,7 +218,7 @@ function calculateRPMSections (route, min, max) {
|
|
|
218
218
|
return sections
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
function exportPerformanceReportToPDF (userData, reportData) {
|
|
221
|
+
async function exportPerformanceReportToPDF (userData, reportData) {
|
|
222
222
|
const translations = getTranslations(userData)
|
|
223
223
|
|
|
224
224
|
const headers = [
|
|
@@ -268,6 +268,8 @@ function exportPerformanceReportToPDF (userData, reportData) {
|
|
|
268
268
|
})
|
|
269
269
|
|
|
270
270
|
const doc = new jsPDF.jsPDF('l')
|
|
271
|
+
await headerFromUser(doc, 'Rapport de Performance', userData.user)
|
|
272
|
+
|
|
271
273
|
const style = getStyle(getUserPartner(userData.user))
|
|
272
274
|
|
|
273
275
|
const footValues = []
|
|
@@ -314,7 +316,7 @@ function exportPerformanceReportToExcel (userData, reportData) {
|
|
|
314
316
|
|
|
315
317
|
let data = []
|
|
316
318
|
data = data.concat([{}])
|
|
317
|
-
|
|
319
|
+
data = data.concat(reportData.map(d => {
|
|
318
320
|
return {
|
|
319
321
|
name: d.device,
|
|
320
322
|
totalUse: convertMS((d.drivingTime + d.idleTime) * 1000),
|
|
@@ -323,21 +325,19 @@ function exportPerformanceReportToExcel (userData, reportData) {
|
|
|
323
325
|
totalConsumption: d.drivingConsumption + d.idleConsumption,
|
|
324
326
|
drivingConsumption: d.drivingConsumption,
|
|
325
327
|
idleConsumption: d.idleConsumption,
|
|
326
|
-
drivingDistance: d.drivingDistance,
|
|
328
|
+
drivingDistance: Number(d.drivingDistance.toFixed(2)),
|
|
327
329
|
economicTime: convertMS(d.economicTime * 1000),
|
|
328
|
-
economicConsumption: d.economicConsumption,
|
|
329
|
-
economicDistance: d.economicDistance,
|
|
330
|
+
economicConsumption: Number(d.economicConsumption.toFixed(1)),
|
|
331
|
+
economicDistance: Number(d.economicDistance.toFixed(2)),
|
|
330
332
|
cruiseControlTime: convertMS(d.cruiseControlTime * 1000),
|
|
331
|
-
cruiseControlConsumption: d.cruiseControlConsumption,
|
|
332
|
-
cruiseControlDistance: d.cruiseControlDistance,
|
|
333
|
+
cruiseControlConsumption: Number(d.cruiseControlConsumption.toFixed(1)),
|
|
334
|
+
cruiseControlDistance: Number(d.cruiseControlDistance.toFixed(2)),
|
|
333
335
|
highEngineRPM: d.highEngineRPM,
|
|
334
336
|
hardAcceleration: d.hardAcceleration,
|
|
335
337
|
hardBraking: d.hardBraking,
|
|
336
338
|
hardCornering: d.hardCornering
|
|
337
339
|
}
|
|
338
|
-
}))
|
|
339
|
-
|
|
340
|
-
console.log(data)
|
|
340
|
+
}))
|
|
341
341
|
|
|
342
342
|
return {
|
|
343
343
|
headers,
|
|
@@ -35,8 +35,8 @@ describe('activity report', function () {
|
|
|
35
35
|
const report = await getReports()
|
|
36
36
|
const userData = await report.getUserData()
|
|
37
37
|
userData.groupByDay = true
|
|
38
|
-
const data = await report.activityReport(new Date(
|
|
39
|
-
new Date(
|
|
38
|
+
const data = await report.activityReport(new Date(2023, 9, 1, 0, 0, 0, 0),
|
|
39
|
+
new Date(2023, 9, 20, 23, 59, 59, 0),
|
|
40
40
|
userData)
|
|
41
41
|
assert.equal(data.length, 1)
|
|
42
42
|
const device = data[0].devices.find(d => d.device.id === 22326)
|
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/util/trips.js
CHANGED
|
@@ -118,9 +118,8 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
|
|
|
118
118
|
|
|
119
119
|
const tripsByDay = []
|
|
120
120
|
if (data.trips) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}))
|
|
121
|
+
const filteredTrips = data.trips.filter(t => new Date(t.endTime) > startDate && new Date(t.startTime) < endDate)
|
|
122
|
+
tripsByDay.push(...filteredTrips.map(t => { return { ...t } }))
|
|
124
123
|
|
|
125
124
|
for (const t of tripsByDay) {
|
|
126
125
|
await calculatePartialTrip(device, startDate, endDate, data.route, t, traccarInstance)
|
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)
|