fleetmap-reports 1.0.682 → 1.0.684
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 +2 -2
- package/src/idle-report.js +2 -2
- package/src/kms-report.js +7 -10
- package/src/location-report.js +8 -9
- package/src/speeding-report.js +3 -3
- package/src/trip-report.js +7 -9
- package/src/util/driver.js +16 -2
- package/src/util/geofence.js +2 -2
package/package.json
CHANGED
package/src/activity-report.js
CHANGED
|
@@ -12,6 +12,7 @@ const traccar = require('./util/traccar')
|
|
|
12
12
|
const { isInsideTimetable, isPartialInsideTimetable, calculateTrip } = require('./util/trips')
|
|
13
13
|
const tripHelper = require('./util/trips')
|
|
14
14
|
const { devicesToProcess } = require('./util/device')
|
|
15
|
+
const { getDriverData } = require('./util/driver')
|
|
15
16
|
|
|
16
17
|
const fileName = 'ActivityReport'
|
|
17
18
|
|
|
@@ -255,8 +256,7 @@ function processDrivers (from, to, drivers, data, userData) {
|
|
|
255
256
|
console.log(data)
|
|
256
257
|
const driversResult = []
|
|
257
258
|
drivers.forEach(d => {
|
|
258
|
-
const
|
|
259
|
-
const trips = data.trips.filter(t => t.driverUniqueId === d.uniqueId)
|
|
259
|
+
const { route, trips } = getDriverData(d, data)
|
|
260
260
|
trips.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime())
|
|
261
261
|
if (trips.length > 0) {
|
|
262
262
|
const driverData = {
|
package/src/idle-report.js
CHANGED
|
@@ -7,7 +7,7 @@ const { devicesToProcess } = require('./util/device')
|
|
|
7
7
|
const automaticReports = require('./automaticReports')
|
|
8
8
|
const traccarHelper = require('./util/traccar')
|
|
9
9
|
const { getIdleEvents } = require('./util/route')
|
|
10
|
-
const { reportByDriver } = require('./util/driver')
|
|
10
|
+
const { reportByDriver, getDriverData } = require('./util/driver')
|
|
11
11
|
const { getNearestPOIs, insideGeofence, loadGroupsData } = require('./util/geofence')
|
|
12
12
|
|
|
13
13
|
const fileName = 'IdleReport'
|
|
@@ -140,7 +140,7 @@ async function createIdleReportByDevice (from, to, userData, traccarInstance) {
|
|
|
140
140
|
function processDrivers (from, to, userData, data) {
|
|
141
141
|
const driversResult = []
|
|
142
142
|
userData.drivers.forEach(d => {
|
|
143
|
-
const route =
|
|
143
|
+
const { route } = getDriverData(d, data)
|
|
144
144
|
|
|
145
145
|
if (route.length > 0) {
|
|
146
146
|
const idleEvents = getIdleEvents(data.route, d, userData.idleSpeedThreshold / 1.85200)
|
package/src/kms-report.js
CHANGED
|
@@ -13,6 +13,7 @@ const drivers = require('./util/driver')
|
|
|
13
13
|
const { isInsideTimetable, isPartialInsideTimetable, calculateTrip } = require('./util/trips')
|
|
14
14
|
const traccarHelper = require('./util/traccar')
|
|
15
15
|
const { devicesToProcess } = require('./util/device')
|
|
16
|
+
const { getDriverData } = require('./util/driver')
|
|
16
17
|
|
|
17
18
|
const fileName = 'KmsReport'
|
|
18
19
|
|
|
@@ -72,10 +73,8 @@ async function createKmsReportByDriver (from, to, userData, traccarInstance) {
|
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
const allInOne = await traccarHelper.getAllInOne(traccarInstance, from, to, devices, true, true, false, false)
|
|
75
|
-
const tripsData = allInOne.trips
|
|
76
|
-
const routeData = allInOne.route
|
|
77
76
|
|
|
78
|
-
return { drivers: processDrivers(from, to, userData,
|
|
77
|
+
return { drivers: processDrivers(from, to, userData, allInOne) }
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
async function createKmsReportByGroup (from, to, userData, traccarInstance) {
|
|
@@ -113,14 +112,12 @@ async function createKmsReportByGroup (from, to, userData, traccarInstance) {
|
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
function processDrivers (from, to, userData, data) {
|
|
116
|
-
console.log(data)
|
|
117
115
|
const driversResult = []
|
|
118
116
|
userData.drivers.forEach(d => {
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
(userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, route)))
|
|
117
|
+
const { route, trips } = getDriverData(d, data)
|
|
118
|
+
const filteredTrips = trips.filter(t => (userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, route)))
|
|
122
119
|
|
|
123
|
-
if (
|
|
120
|
+
if (filteredTrips.length > 0) {
|
|
124
121
|
const driverData = {
|
|
125
122
|
driver: d
|
|
126
123
|
}
|
|
@@ -131,7 +128,7 @@ function processDrivers (from, to, userData, data) {
|
|
|
131
128
|
const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
|
|
132
129
|
const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
|
|
133
130
|
|
|
134
|
-
const tripsByDay =
|
|
131
|
+
const tripsByDay = filteredTrips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay))
|
|
135
132
|
|
|
136
133
|
driverData.days.push({
|
|
137
134
|
date,
|
|
@@ -140,7 +137,7 @@ function processDrivers (from, to, userData, data) {
|
|
|
140
137
|
}
|
|
141
138
|
} else {
|
|
142
139
|
driverData.summary = {
|
|
143
|
-
distance:
|
|
140
|
+
distance: filteredTrips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
|
|
144
141
|
}
|
|
145
142
|
}
|
|
146
143
|
driversResult.push(driverData)
|
package/src/location-report.js
CHANGED
|
@@ -7,7 +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
|
+
const { getDriverName, getDriverData } = require('./util/driver')
|
|
11
11
|
|
|
12
12
|
const fileName = 'LocationReport'
|
|
13
13
|
|
|
@@ -42,9 +42,8 @@ async function createLocationReportByDriver (from, to, userData, traccar) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
const allInOne = await traccarHelper.getAllInOne(traccar, from, to, devices, true, false, false, false)
|
|
45
|
-
const routeData = allInOne.route
|
|
46
45
|
|
|
47
|
-
return { drivers: processDrivers(from, to, userData,
|
|
46
|
+
return { drivers: processDrivers(from, to, userData, allInOne) }
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
async function createLocationReportByGroup (from, to, userData, traccar) {
|
|
@@ -148,14 +147,14 @@ function processDevices (from, to, devices, data) {
|
|
|
148
147
|
return devicesResult
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
function processDrivers (from, to, userData,
|
|
150
|
+
function processDrivers (from, to, userData, data) {
|
|
152
151
|
const driversResult = []
|
|
153
152
|
userData.drivers.forEach(d => {
|
|
154
|
-
const
|
|
155
|
-
if (
|
|
156
|
-
|
|
153
|
+
const { route } = getDriverData(d, data)
|
|
154
|
+
if (route.length > 0) {
|
|
155
|
+
route.sort((a, b) => new Date(a.fixTime).getTime() - new Date(b.fixTime).getTime())
|
|
157
156
|
|
|
158
|
-
|
|
157
|
+
route.forEach(p => {
|
|
159
158
|
const device = userData.devices.find(d => d.id === p.deviceId)
|
|
160
159
|
if (device) {
|
|
161
160
|
p.vehicleName = device.name
|
|
@@ -166,7 +165,7 @@ function processDrivers (from, to, userData, route) {
|
|
|
166
165
|
driver: d,
|
|
167
166
|
from,
|
|
168
167
|
to,
|
|
169
|
-
positions
|
|
168
|
+
positions: route
|
|
170
169
|
}
|
|
171
170
|
driversResult.push(driverData)
|
|
172
171
|
}
|
package/src/speeding-report.js
CHANGED
|
@@ -14,6 +14,7 @@ const { insideGeofence } = require('./util/geofence')
|
|
|
14
14
|
const booleanPointInPolygon = require('@turf/boolean-point-in-polygon')
|
|
15
15
|
const automaticReports = require('./automaticReports')
|
|
16
16
|
const { default: axios } = require('axios')
|
|
17
|
+
const { getDriverName, getDriverData } = require('./util/driver')
|
|
17
18
|
|
|
18
19
|
const fileName = 'SpeedingReport'
|
|
19
20
|
const eventTypes = ['deviceOverspeed']
|
|
@@ -192,7 +193,7 @@ async function processDrivers (from, to, events, routes, userData) {
|
|
|
192
193
|
findEventsPosition(from, to, userData.devices, events, routes, userData)
|
|
193
194
|
|
|
194
195
|
userData.drivers.forEach(d => {
|
|
195
|
-
const driverEvents =
|
|
196
|
+
const driverEvents = getDriverData(d, { events }).events
|
|
196
197
|
if (driverEvents.length > 0) {
|
|
197
198
|
driverEvents.sort((a, b) => a.positionId - b.positionId)
|
|
198
199
|
driversResult.push({
|
|
@@ -254,8 +255,7 @@ function findEventsPosition (from, to, devices, events, routes, userData) {
|
|
|
254
255
|
calculateEventData(positions, pIndex, a, d, geofence, userData)
|
|
255
256
|
}
|
|
256
257
|
if (a.position.attributes.driverUniqueId) {
|
|
257
|
-
|
|
258
|
-
a.driver = (driver && driver.name) || a.position.attributes.driverUniqueId
|
|
258
|
+
a.driver = getDriverName(a.position.attributes.driverUniqueId, a.position.fixTime, userData)
|
|
259
259
|
}
|
|
260
260
|
a.deviceName = d.name
|
|
261
261
|
} else {
|
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, getDriverName } = require('./util/driver')
|
|
13
|
+
const { reportByDriver, getDriverName, getDriverData } = require('./util/driver')
|
|
14
14
|
const { getNearestPOIs } = require('./util/geofence')
|
|
15
15
|
|
|
16
16
|
const fileName = 'TripReport'
|
|
@@ -216,15 +216,13 @@ function processDrivers (from, to, userData, data) {
|
|
|
216
216
|
console.log(data)
|
|
217
217
|
const driversResult = []
|
|
218
218
|
userData.drivers.forEach(d => {
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
trips = trips.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime())
|
|
219
|
+
const { route, trips } = getDriverData(d, data)
|
|
220
|
+
const filteredTrips = trips.filter(t => (userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, route)))
|
|
221
|
+
filteredTrips.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime())
|
|
224
222
|
|
|
225
223
|
const idleEvents = getIdleEvents(data.route, d)
|
|
226
224
|
|
|
227
|
-
|
|
225
|
+
filteredTrips.forEach(function (trip, i) {
|
|
228
226
|
trip.totalKms = trip.distance / 1000
|
|
229
227
|
|
|
230
228
|
const nearestPOIs = getNearestPOIs(trip.endLon, trip.endLat, userData.geofences)
|
|
@@ -238,12 +236,12 @@ function processDrivers (from, to, userData, data) {
|
|
|
238
236
|
trip.stopDuration = (i !== trips.length - 1 ? (new Date(trips[i + 1].startTime) - new Date(trip.endTime)) : (to - new Date(trip.endTime))) - trip.stopEngineHours
|
|
239
237
|
})
|
|
240
238
|
|
|
241
|
-
if (
|
|
239
|
+
if (filteredTrips.length > 0) {
|
|
242
240
|
const driverData = {
|
|
243
241
|
driver: d,
|
|
244
242
|
from,
|
|
245
243
|
to,
|
|
246
|
-
trips
|
|
244
|
+
trips: filteredTrips
|
|
247
245
|
}
|
|
248
246
|
driversResult.push(driverData)
|
|
249
247
|
}
|
package/src/util/driver.js
CHANGED
|
@@ -8,7 +8,7 @@ async function devicesByDriver (traccarInstance, from, to, drivers, devices) {
|
|
|
8
8
|
const deviceIds = []
|
|
9
9
|
for (const d of drivers) {
|
|
10
10
|
const events = eventsData.filter(e => {
|
|
11
|
-
return e.attributes.driverUniqueId
|
|
11
|
+
return !d.uniqueId.localeCompare(e.attributes.driverUniqueId, undefined, { sensitivity: 'base' })
|
|
12
12
|
})
|
|
13
13
|
|
|
14
14
|
deviceIds.push(...events.map(e => e.deviceId))
|
|
@@ -55,7 +55,8 @@ function getDriverName (driverUniqueId, date, userData) {
|
|
|
55
55
|
return timeline.driverName
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
const driver = userData.drivers.find(d => d.uniqueId
|
|
58
|
+
const driver = userData.drivers.find(d => !d.uniqueId.localeCompare(driverUniqueId, undefined, { sensitivity: 'base' }))
|
|
59
|
+
|
|
59
60
|
return driver
|
|
60
61
|
? driver.name + ' ' + ((driver.attributes && driver.attributes.notes) || '')
|
|
61
62
|
: driverUniqueId
|
|
@@ -64,6 +65,19 @@ function getDriverName (driverUniqueId, date, userData) {
|
|
|
64
65
|
return ''
|
|
65
66
|
}
|
|
66
67
|
|
|
68
|
+
function getDriverData (d, data) {
|
|
69
|
+
const route = data.route ? data.route.filter(p => !d.uniqueId.localeCompare(p.attributes.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
70
|
+
const trips = data.trips ? data.trips.filter(t => !d.uniqueId.localeCompare(t.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
71
|
+
const events = data.events ? data.events.filter(e => e.position && !d.uniqueId.localeCompare(e.position.attributes.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
route,
|
|
75
|
+
trips,
|
|
76
|
+
events
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
exports.getDriverData = getDriverData
|
|
67
81
|
exports.getDriverName = getDriverName
|
|
68
82
|
exports.getDriverUniqueIdTimeline = getDriverUniqueIdTimeline
|
|
69
83
|
exports.devicesByDriver = devicesByDriver
|
package/src/util/geofence.js
CHANGED
|
@@ -41,8 +41,8 @@ exports.checkGeofenceIn = function checkGeofenceIn (p, g) {
|
|
|
41
41
|
case 'Polygon':
|
|
42
42
|
return booleanPointInPolygon.default(p, g)
|
|
43
43
|
case 'Point':
|
|
44
|
-
return distance.default(p, g, { units: 'meters' })
|
|
44
|
+
return distance.default(p, g, { units: 'meters' }) <= g.properties.distance
|
|
45
45
|
case 'LineString':
|
|
46
|
-
return pointToLineDistance.default(p, g, { units: 'meters' })
|
|
46
|
+
return pointToLineDistance.default(p, g, { units: 'meters' }) < (g.properties.geofence.attributes.polylineDistance || 25)
|
|
47
47
|
}
|
|
48
48
|
}
|