fleetmap-reports 1.0.659 → 1.0.661
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/package.json +1 -1
- package/src/activity-report.js +5 -26
- package/src/kms-report.js +65 -84
- package/src/location-report.js +5 -12
- package/src/trip-report.js +4 -15
- package/src/util/driver.js +25 -0
- package/src/util/pdfDocument.js +28 -0
package/package.json
CHANGED
package/src/activity-report.js
CHANGED
|
@@ -2,7 +2,10 @@ const automaticReports = require('./automaticReports')
|
|
|
2
2
|
const { convertMS, getDates, getTranslations, weekDaySelected } = require('./util/utils')
|
|
3
3
|
const jsPDF = require('jspdf')
|
|
4
4
|
require('jspdf-autotable')
|
|
5
|
-
const {
|
|
5
|
+
const {
|
|
6
|
+
headerFromUser, addTable,
|
|
7
|
+
pdfPageByDay
|
|
8
|
+
} = require('./util/pdfDocument')
|
|
6
9
|
const { getStyle } = require('./reportStyle')
|
|
7
10
|
const { getUserPartner } = require('fleetmap-partners')
|
|
8
11
|
const traccar = require('./util/traccar')
|
|
@@ -428,31 +431,7 @@ function exportActivityReportToPDFVehicleGroupByDay (doc, translations, reportDa
|
|
|
428
431
|
]
|
|
429
432
|
|
|
430
433
|
reportData.devices.forEach(function (d, index) {
|
|
431
|
-
|
|
432
|
-
const group = userData.byDriver ? userData.groups.find(g => g.drivers.includes(d.id)) : userData.groups.find(g => d.device.groupId === g.id)
|
|
433
|
-
|
|
434
|
-
const space = index === 0 ? 8 : 0
|
|
435
|
-
if (index) {
|
|
436
|
-
doc.addPage()
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
doc.setFontSize(13)
|
|
440
|
-
doc.text(name, 20, space + 20)
|
|
441
|
-
doc.setFontSize(11)
|
|
442
|
-
doc.text(group ? translations.report.group + ': ' + group.name : '', 150, space + 20)
|
|
443
|
-
doc.text(new Date(reportData.from).toLocaleString() + ' - ' + new Date(reportData.to).toLocaleString(), 20, space + 25)
|
|
444
|
-
|
|
445
|
-
if (!userData.allWeek && userData.weekDays) {
|
|
446
|
-
doc.text((userData.weekDays.monday ? ' ' + translations.report.monday + ',' : '') +
|
|
447
|
-
(userData.weekDays.tuesday ? ' ' + translations.report.tuesday + ',' : '') +
|
|
448
|
-
(userData.weekDays.wednesday ? ' ' + translations.report.wednesday + ',' : '') +
|
|
449
|
-
(userData.weekDays.thursday ? ' ' + translations.report.thursday + ',' : '') +
|
|
450
|
-
(userData.weekDays.friday ? ' ' + translations.report.friday + ',' : '') +
|
|
451
|
-
(userData.weekDays.saturday ? ' ' + translations.report.saturday + ',' : '') +
|
|
452
|
-
(userData.weekDays.sunday ? ' ' + translations.report.sunday + ',' : '') +
|
|
453
|
-
' das ' +
|
|
454
|
-
userData.dayHours.startTime + ' - ' + userData.dayHours.endTime, 20, space + 30)
|
|
455
|
-
}
|
|
434
|
+
pdfPageByDay(userData, d, index, doc, translations, reportData)
|
|
456
435
|
|
|
457
436
|
const data = []
|
|
458
437
|
d.summary.forEach(s => {
|
package/src/kms-report.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
const jsPDF = require('jspdf')
|
|
2
2
|
require('jspdf-autotable')
|
|
3
3
|
const { getStyle } = require('./reportStyle')
|
|
4
|
-
const {
|
|
4
|
+
const {
|
|
5
|
+
headerFromUser, addTable,
|
|
6
|
+
pdfPageByDay
|
|
7
|
+
} = require('./util/pdfDocument')
|
|
5
8
|
const { getUserPartner } = require('fleetmap-partners')
|
|
6
9
|
const traccar = require('./util/traccar')
|
|
7
10
|
const { getDates, convertFromUTC, getTranslations } = require('./util/utils')
|
|
@@ -165,53 +168,52 @@ function processDevices (from, to, devices, data, userData) {
|
|
|
165
168
|
const trips = deviceTrips.filter(t => userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, deviceRoute))
|
|
166
169
|
|
|
167
170
|
if (trips.length > 0 && userData.groupByDay) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
171
|
+
trips.forEach(t => {
|
|
172
|
+
t.tripDay = convertFromUTC(t.startTime, userData.user.attributes.timezone).toISOString().split('T')[0] + ' 12:00 PM'
|
|
173
|
+
})
|
|
174
|
+
const groupedTrips = trips.reduce(
|
|
175
|
+
(entryMap, e) => entryMap.set(e.tripDay, [...entryMap.get(e.tripDay) || [], e]),
|
|
176
|
+
new Map()
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
const allDates = getDates(from, to)
|
|
180
|
+
|
|
181
|
+
const days = []
|
|
182
|
+
let keys = Array.from(groupedTrips.keys())
|
|
183
|
+
allDates.forEach(d => {
|
|
184
|
+
const day = d.toISOString().split('T')[0] + ' 12:00 PM'
|
|
185
|
+
if (!keys.includes(day)) {
|
|
186
|
+
groupedTrips.set(day, [])
|
|
187
|
+
}
|
|
188
|
+
})
|
|
186
189
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
190
|
+
keys = Array.from(groupedTrips.keys())
|
|
191
|
+
keys.sort((a, b) => new Date(a).getTime() - new Date(b).getTime())
|
|
192
|
+
keys.forEach(key => {
|
|
193
|
+
const currentDate = new Date(key)
|
|
194
|
+
const dayTrips = groupedTrips.get(key)
|
|
195
|
+
const day = {
|
|
196
|
+
date: currentDate,
|
|
197
|
+
kms: 0
|
|
198
|
+
}
|
|
196
199
|
|
|
197
|
-
|
|
200
|
+
day.kms = dayTrips.reduce((a, b) => a + b.distance, 0)
|
|
198
201
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
202
|
+
days.push(day)
|
|
203
|
+
})
|
|
204
|
+
devicesResult.push({
|
|
205
|
+
device: d,
|
|
206
|
+
days
|
|
207
|
+
})
|
|
208
|
+
} else {
|
|
209
|
+
devicesResult.push({
|
|
210
|
+
device: d,
|
|
211
|
+
summary: {
|
|
212
|
+
distance: trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
|
|
213
|
+
}
|
|
214
|
+
})
|
|
213
215
|
}
|
|
214
|
-
|
|
216
|
+
}
|
|
215
217
|
|
|
216
218
|
return devicesResult
|
|
217
219
|
}
|
|
@@ -246,55 +248,34 @@ async function exportKmsReportToPDF (userData, reportData) {
|
|
|
246
248
|
}
|
|
247
249
|
if (kmsData) {
|
|
248
250
|
const orientation = userData.groupByDay ? 'p' : 'l'
|
|
251
|
+
// eslint-disable-next-line new-cap
|
|
249
252
|
const doc = new jsPDF.jsPDF(orientation)
|
|
250
253
|
await headerFromUser(doc, translations.report.titleKmsReport, userData.user, orientation)
|
|
251
254
|
|
|
252
255
|
if (userData.groupByDay) {
|
|
253
256
|
kmsData.forEach(function (d, index) {
|
|
254
|
-
|
|
255
|
-
const group = userData.byDriver ? userData.groups.find(g => g.drivers.includes(d.id)) : userData.groups.find(g => d.device.groupId === g.id)
|
|
256
|
-
|
|
257
|
-
const space = index === 0 ? 8 : 0
|
|
258
|
-
if (index) {
|
|
259
|
-
doc.addPage()
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
doc.setFontSize(13)
|
|
263
|
-
doc.text(name, 20, space + 20)
|
|
264
|
-
doc.setFontSize(11)
|
|
265
|
-
doc.text(group ? translations.report.group + ': ' + group.name : '', 150, space + 20)
|
|
266
|
-
doc.text(new Date(reportData.from).toLocaleString() + ' - ' + new Date(reportData.to).toLocaleString(), 20, space + 25)
|
|
267
|
-
|
|
268
|
-
if (!userData.allWeek && userData.weekDays) {
|
|
269
|
-
doc.text((userData.weekDays.monday ? ' ' + translations.report.monday + ',' : '') +
|
|
270
|
-
(userData.weekDays.tuesday ? ' ' + translations.report.tuesday + ',' : '') +
|
|
271
|
-
(userData.weekDays.wednesday ? ' ' + translations.report.wednesday + ',' : '') +
|
|
272
|
-
(userData.weekDays.thursday ? ' ' + translations.report.thursday + ',' : '') +
|
|
273
|
-
(userData.weekDays.friday ? ' ' + translations.report.friday + ',' : '') +
|
|
274
|
-
(userData.weekDays.saturday ? ' ' + translations.report.saturday + ',' : '') +
|
|
275
|
-
(userData.weekDays.sunday ? ' ' + translations.report.sunday + ',' : '') +
|
|
276
|
-
' das ' +
|
|
277
|
-
userData.dayHours.startTime + ' - ' + userData.dayHours.endTime, 20, space + 30)
|
|
278
|
-
}
|
|
257
|
+
pdfPageByDay(userData, d, index, doc, translations, reportData)
|
|
279
258
|
|
|
280
259
|
const data = []
|
|
281
|
-
d.days
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
260
|
+
if (d.days) {
|
|
261
|
+
d.days.forEach(day => {
|
|
262
|
+
const temp = [
|
|
263
|
+
new Date(day.date).toLocaleDateString() + ' - ' + weekDays[day.date.getDay()],
|
|
264
|
+
(day.kms / 1000).toFixed(0)
|
|
265
|
+
]
|
|
266
|
+
|
|
267
|
+
data.push(temp)
|
|
268
|
+
})
|
|
286
269
|
|
|
287
|
-
|
|
288
|
-
|
|
270
|
+
const footValues = []
|
|
271
|
+
footValues.push(
|
|
272
|
+
'',
|
|
273
|
+
(d.days.reduce((a, b) => a + b.kms, 0) / 1000).toFixed(0)
|
|
274
|
+
)
|
|
289
275
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
(d.days.reduce((a, b) => a + b.kms, 0) / 1000).toFixed(0)
|
|
294
|
-
)
|
|
295
|
-
|
|
296
|
-
const style = getStyle(getUserPartner(userData.user))
|
|
297
|
-
addTable(doc, headers, data, footValues, style, 40)
|
|
276
|
+
const style = getStyle(getUserPartner(userData.user))
|
|
277
|
+
addTable(doc, headers, data, footValues, style, 40)
|
|
278
|
+
}
|
|
298
279
|
})
|
|
299
280
|
} else {
|
|
300
281
|
doc.setFontSize(11)
|
package/src/location-report.js
CHANGED
|
@@ -7,6 +7,7 @@ const { convertToLocaleString, getTranslations } = require('./util/utils')
|
|
|
7
7
|
const traccarHelper = require('./util/traccar')
|
|
8
8
|
const { devicesToProcess } = require('./util/device')
|
|
9
9
|
const automaticReports = require('./automaticReports')
|
|
10
|
+
const { getDriverName } = require('./util/driver')
|
|
10
11
|
|
|
11
12
|
const fileName = 'LocationReport'
|
|
12
13
|
|
|
@@ -129,7 +130,8 @@ function processDevices (from, to, devices, data) {
|
|
|
129
130
|
door2: p.attributes.door2,
|
|
130
131
|
sensor: p.attributes.sensor,
|
|
131
132
|
rain: p.attributes.rain,
|
|
132
|
-
ignition: p.attributes.ignition
|
|
133
|
+
ignition: p.attributes.ignition,
|
|
134
|
+
alarm: p.attributes.alarm
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
})
|
|
@@ -248,7 +250,7 @@ async function exportLocationReportToPDF (userData, reportData) {
|
|
|
248
250
|
a.address,
|
|
249
251
|
Math.round(a.speed * 1.85200),
|
|
250
252
|
a.attributes.ignition ? translations.report.ignitionOn : translations.report.ignitionOff,
|
|
251
|
-
userData.byDriver ? a.vehicleName : getDriverName(a, userData
|
|
253
|
+
userData.byDriver ? a.vehicleName : getDriverName(a.attributes.driverUniqueId, a.fixTime, userData)
|
|
252
254
|
]
|
|
253
255
|
|
|
254
256
|
if (userData.includeTemperature) {
|
|
@@ -389,7 +391,7 @@ function exportLocationReportToExcel (userData, reportData) {
|
|
|
389
391
|
address: a.address,
|
|
390
392
|
speed: Math.round(a.speed * 1.85200),
|
|
391
393
|
ignition: a.attributes.ignition ? translations.report.ignitionOn : translations.report.ignitionOff,
|
|
392
|
-
driver: userData.byDriver ? d.driver.name : getDriverName(a, userData
|
|
394
|
+
driver: userData.byDriver ? d.driver.name : getDriverName(a.attributes.driverUniqueId, a.fixTime, userData),
|
|
393
395
|
temperature: getTempValue(a),
|
|
394
396
|
digitalport1: getDigitalPortValue(a, 1, translations, d.device.attributes),
|
|
395
397
|
digitalport2: getDigitalPortValue(a, 2, translations, d.device.attributes),
|
|
@@ -426,15 +428,6 @@ function getLocationDate (location, user) {
|
|
|
426
428
|
return convertToLocaleString(location.fixTime, user.attributes.lang, user.attributes.timezone)
|
|
427
429
|
}
|
|
428
430
|
|
|
429
|
-
function getDriverName (location, drivers) {
|
|
430
|
-
if (location.attributes.driverUniqueId) {
|
|
431
|
-
const driver = drivers.find(d => d.uniqueId === location.attributes.driverUniqueId)
|
|
432
|
-
return driver ? driver.name : location.attributes.driverUniqueId
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
return ''
|
|
436
|
-
}
|
|
437
|
-
|
|
438
431
|
function getMaxSpeed (data) {
|
|
439
432
|
const values = data.map(item => {
|
|
440
433
|
return item.speed
|
package/src/trip-report.js
CHANGED
|
@@ -10,7 +10,7 @@ const trips = require('./util/trips')
|
|
|
10
10
|
const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getTripIdleTime } = require('./util/trips')
|
|
11
11
|
const { devicesToProcess, deviceName } = require('./util/device')
|
|
12
12
|
const { getIdleEvents } = require('./util/route')
|
|
13
|
-
const { reportByDriver } = require('./util/driver')
|
|
13
|
+
const { reportByDriver, getDriverName } = require('./util/driver')
|
|
14
14
|
const { getNearestPOIs } = require('./util/geofence')
|
|
15
15
|
|
|
16
16
|
const fileName = 'TripReport'
|
|
@@ -346,7 +346,7 @@ async function exportTripReportToPDF (userData, reportData) {
|
|
|
346
346
|
if (userData.byDriver) {
|
|
347
347
|
temp.push(a.deviceName)
|
|
348
348
|
} else {
|
|
349
|
-
temp.push(getDriverName(
|
|
349
|
+
temp.push(getDriverName(a.driverUniqueId, a.startTime, userData))
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
data.push(temp)
|
|
@@ -436,7 +436,7 @@ function exportTripReportToExcel (userData, reportData) {
|
|
|
436
436
|
data = data.concat([{}])
|
|
437
437
|
data = data.concat(d.trips.map(a => {
|
|
438
438
|
return {
|
|
439
|
-
name: userData.byDriver ?
|
|
439
|
+
name: userData.byDriver ? d.driver.name : a.deviceName,
|
|
440
440
|
date: getTripDate(userData.user, a),
|
|
441
441
|
start: getTripStart(userData.user, a),
|
|
442
442
|
end: getTripEnd(userData.user, a),
|
|
@@ -449,7 +449,7 @@ function exportTripReportToExcel (userData, reportData) {
|
|
|
449
449
|
maxSpeed: Math.round(a.maxSpeed * 1.85200),
|
|
450
450
|
consumption: a.fuelConsumption && a.fuelConsumption.toFixed(1),
|
|
451
451
|
avgConsumption: a.avgFuelConsumption && a.avgFuelConsumption.toFixed(1),
|
|
452
|
-
subname: userData.byDriver ? a.deviceName : getDriverName(
|
|
452
|
+
subname: userData.byDriver ? a.deviceName : getDriverName(a.driverUniqueId, a.startTime, userData)
|
|
453
453
|
}
|
|
454
454
|
}))
|
|
455
455
|
// Totals
|
|
@@ -487,17 +487,6 @@ function getTripEnd (user, trip) {
|
|
|
487
487
|
return convertToLocaleTimeString(trip.endTime, user.attributes.lang, user.attributes.timezone)
|
|
488
488
|
}
|
|
489
489
|
|
|
490
|
-
function getDriverName (drivers, driverUniqueId) {
|
|
491
|
-
if (driverUniqueId) {
|
|
492
|
-
const driver = drivers.find(d => d.uniqueId === driverUniqueId)
|
|
493
|
-
return driver
|
|
494
|
-
? driver.name + ' ' + ((driver.attributes && driver.attributes.notes) || '')
|
|
495
|
-
: driverUniqueId
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
return ''
|
|
499
|
-
}
|
|
500
|
-
|
|
501
490
|
function getSumTotalKms (user, data) {
|
|
502
491
|
const values = data.map(item => {
|
|
503
492
|
return item.totalKms ? parseFloat(item.totalKms) : 0
|
package/src/util/driver.js
CHANGED
|
@@ -37,5 +37,30 @@ async function reportByDriver (devices, traccar, from, to, userData, processor)
|
|
|
37
37
|
return report
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
function getDriverUniqueIdTimeline (driverUniqueIdTimeline, driverUniqueId, date) {
|
|
41
|
+
return driverUniqueIdTimeline.find(d => d.uniqueId === driverUniqueId &&
|
|
42
|
+
new Date(d.startDate) <= new Date(date) &&
|
|
43
|
+
new Date(d.endDate) >= new Date(date))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getDriverName (driverUniqueId, date, userData) {
|
|
47
|
+
if (driverUniqueId) {
|
|
48
|
+
const timeline = getDriverUniqueIdTimeline(userData.driverUniqueIdTimeline, driverUniqueId, date)
|
|
49
|
+
|
|
50
|
+
if (timeline) {
|
|
51
|
+
return timeline.driverName
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const driver = userData.drivers.find(d => d.uniqueId === driverUniqueId)
|
|
55
|
+
return driver
|
|
56
|
+
? driver.name + ' ' + ((driver.attributes && driver.attributes.notes) || '')
|
|
57
|
+
: driverUniqueId
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return ''
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
exports.getDriverName = getDriverName
|
|
64
|
+
exports.getDriverUniqueIdTimeline = getDriverUniqueIdTimeline
|
|
40
65
|
exports.devicesByDriver = devicesByDriver
|
|
41
66
|
exports.reportByDriver = reportByDriver
|