fleetmap-reports 1.0.992 → 1.0.994
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/lang/frFR.json +5 -5
- package/package.json +1 -1
- package/src/activity-report.js +3 -3
- package/src/idle-report.js +4 -4
- package/src/kms-report.js +7 -8
- package/src/location-report.js +5 -5
- package/src/speeding-report.js +3 -3
- package/src/tests/trips.test.js +13 -13
- package/src/trip-report.js +4 -13
- package/src/util/driver.js +15 -2
- package/src/util/timetable.js +7 -2
package/lang/frFR.json
CHANGED
|
@@ -255,11 +255,11 @@
|
|
|
255
255
|
"event_sos": "SOS",
|
|
256
256
|
"event_powerOn": "prise de force",
|
|
257
257
|
"event_powerCut": "Coupure de courant",
|
|
258
|
-
"monday": "
|
|
259
|
-
"tuesday": "
|
|
260
|
-
"wednesday": "
|
|
261
|
-
"thursday": "
|
|
262
|
-
"friday": "
|
|
258
|
+
"monday": "Lundi",
|
|
259
|
+
"tuesday": "Mardi",
|
|
260
|
+
"wednesday": "Mercredi",
|
|
261
|
+
"thursday": "Jeudi",
|
|
262
|
+
"friday": "Vendredi",
|
|
263
263
|
"saturday": "Samedi",
|
|
264
264
|
"sunday": "Dimanche",
|
|
265
265
|
"weekDay": "Jour de la semaine",
|
package/package.json
CHANGED
package/src/activity-report.js
CHANGED
|
@@ -145,8 +145,8 @@ async function createActivityReportByDriver (from, to, userData, traccarInstance
|
|
|
145
145
|
for (const devices of sliced) {
|
|
146
146
|
const data = await traccar.getAllInOne(traccarInstance, from, to, devices, true, true, false, false, deviceCount, allDevices.length)
|
|
147
147
|
|
|
148
|
-
userData.drivers
|
|
149
|
-
const { trips, route } = getDriverData(d, data)
|
|
148
|
+
for (const d of userData.drivers) {
|
|
149
|
+
const { trips, route } = await getDriverData(d, data, userData)
|
|
150
150
|
let driverData = driversData.get(d.id)
|
|
151
151
|
if (!driverData) {
|
|
152
152
|
driverData = { trips: [], route: [] }
|
|
@@ -154,7 +154,7 @@ async function createActivityReportByDriver (from, to, userData, traccarInstance
|
|
|
154
154
|
}
|
|
155
155
|
driverData.trips = driverData.trips.concat(...(trips || []))
|
|
156
156
|
driverData.route = driverData.route.concat(...(route || []))
|
|
157
|
-
}
|
|
157
|
+
}
|
|
158
158
|
|
|
159
159
|
deviceCount += devices.length
|
|
160
160
|
}
|
package/src/idle-report.js
CHANGED
|
@@ -141,10 +141,10 @@ async function createIdleReportByDevice (from, to, userData, traccarInstance) {
|
|
|
141
141
|
return allData
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
function processDrivers (from, to, userData, data) {
|
|
144
|
+
async function processDrivers (from, to, userData, data) {
|
|
145
145
|
const driversResult = []
|
|
146
|
-
userData.drivers
|
|
147
|
-
const { route } = getDriverData(d, data)
|
|
146
|
+
for (const d of userData.drivers) {
|
|
147
|
+
const { route } = await getDriverData(d, data, userData)
|
|
148
148
|
|
|
149
149
|
if (route.length > 0) {
|
|
150
150
|
const idleEvents = getIdleEvents(data.route, d, userData.idleSpeedThreshold / 1.85200)
|
|
@@ -165,7 +165,7 @@ function processDrivers (from, to, userData, data) {
|
|
|
165
165
|
driversResult.push(driverData)
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
-
}
|
|
168
|
+
}
|
|
169
169
|
|
|
170
170
|
return driversResult
|
|
171
171
|
}
|
package/src/kms-report.js
CHANGED
|
@@ -166,11 +166,10 @@ async function processDrivers (from, to, userData, data) {
|
|
|
166
166
|
const driversOnRoute = data.route ? new Set(data.route.map(p => p.attributes.driverUniqueId)) : new Set([])
|
|
167
167
|
const driverToProcess = userData.drivers.filter(d => driversOnRoute.has(d.uniqueId))
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
const {
|
|
171
|
-
const filteredTrips = trips.filter(t => (userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, route)))
|
|
169
|
+
for (const d of driverToProcess) {
|
|
170
|
+
const { trips } = await getDriverData(d, data, userData)
|
|
172
171
|
|
|
173
|
-
if (
|
|
172
|
+
if (trips.length > 0) {
|
|
174
173
|
const driverData = {
|
|
175
174
|
driver: d
|
|
176
175
|
}
|
|
@@ -181,7 +180,7 @@ async function processDrivers (from, to, userData, data) {
|
|
|
181
180
|
const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
|
|
182
181
|
const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
|
|
183
182
|
|
|
184
|
-
const tripsByDay =
|
|
183
|
+
const tripsByDay = trips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay))
|
|
185
184
|
|
|
186
185
|
driverData.days.push({
|
|
187
186
|
date,
|
|
@@ -190,12 +189,12 @@ async function processDrivers (from, to, userData, data) {
|
|
|
190
189
|
}
|
|
191
190
|
} else {
|
|
192
191
|
driverData.summary = {
|
|
193
|
-
distance:
|
|
192
|
+
distance: trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
|
|
194
193
|
}
|
|
195
194
|
}
|
|
196
195
|
driversResult.push(driverData)
|
|
197
196
|
}
|
|
198
|
-
}
|
|
197
|
+
}
|
|
199
198
|
|
|
200
199
|
return driversResult
|
|
201
200
|
}
|
|
@@ -483,7 +482,7 @@ function getExcelContent (userData, d, translations) {
|
|
|
483
482
|
name: d.device.name,
|
|
484
483
|
group: group ? group.name : '',
|
|
485
484
|
licenseplate: d.device.attributes.license_plate,
|
|
486
|
-
date: a.date,
|
|
485
|
+
date: new Date(a.date).toLocaleDateString(),
|
|
487
486
|
weekday: weekDays[new Date(a.date).getDay()],
|
|
488
487
|
distance: Number((a.kms / 1000).toFixed(0))
|
|
489
488
|
}
|
package/src/location-report.js
CHANGED
|
@@ -46,7 +46,7 @@ async function createLocationReportByDriver (from, to, userData, traccar) {
|
|
|
46
46
|
|
|
47
47
|
const allInOne = await traccarHelper.getAllInOne(traccar, from, to, devices, true, false, false, false)
|
|
48
48
|
|
|
49
|
-
return { drivers: processDrivers(from, to, userData, allInOne) }
|
|
49
|
+
return { drivers: await processDrivers(from, to, userData, allInOne) }
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
async function createLocationReportByGroup (from, to, userData, traccar) {
|
|
@@ -151,10 +151,10 @@ function processDevices (from, to, devices, data) {
|
|
|
151
151
|
return devicesResult
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
function processDrivers (from, to, userData, data) {
|
|
154
|
+
async function processDrivers (from, to, userData, data) {
|
|
155
155
|
const driversResult = []
|
|
156
|
-
userData.drivers
|
|
157
|
-
const { route } = getDriverData(d, data)
|
|
156
|
+
for (const d of userData.drivers) {
|
|
157
|
+
const { route } = await getDriverData(d, data, userData)
|
|
158
158
|
if (route.length > 0) {
|
|
159
159
|
route.sort((a, b) => new Date(a.fixTime).getTime() - new Date(b.fixTime).getTime())
|
|
160
160
|
|
|
@@ -173,7 +173,7 @@ function processDrivers (from, to, userData, data) {
|
|
|
173
173
|
}
|
|
174
174
|
driversResult.push(driverData)
|
|
175
175
|
}
|
|
176
|
-
}
|
|
176
|
+
}
|
|
177
177
|
console.log(driversResult)
|
|
178
178
|
|
|
179
179
|
return driversResult
|
package/src/speeding-report.js
CHANGED
|
@@ -195,8 +195,8 @@ async function processDrivers (from, to, events, routes, userData) {
|
|
|
195
195
|
|
|
196
196
|
findEventsPosition(from, to, userData.devices, events, routes, userData)
|
|
197
197
|
|
|
198
|
-
userData.drivers
|
|
199
|
-
const driverEvents = getDriverData(d, { events }).events
|
|
198
|
+
for (const d of userData.drivers) {
|
|
199
|
+
const driverEvents = await getDriverData(d, { events }, userData).events
|
|
200
200
|
if (driverEvents.length > 0) {
|
|
201
201
|
driverEvents.sort((a, b) => a.positionId - b.positionId)
|
|
202
202
|
driversResult.push({
|
|
@@ -209,7 +209,7 @@ async function processDrivers (from, to, events, routes, userData) {
|
|
|
209
209
|
}, 0)
|
|
210
210
|
})
|
|
211
211
|
}
|
|
212
|
-
}
|
|
212
|
+
}
|
|
213
213
|
|
|
214
214
|
return driversResult
|
|
215
215
|
}
|
package/src/tests/trips.test.js
CHANGED
|
@@ -65,7 +65,7 @@ describe('trips', function () {
|
|
|
65
65
|
}, 20000)
|
|
66
66
|
// eslint-disable-next-line no-undef
|
|
67
67
|
it('Trip by device with time period ', async () => {
|
|
68
|
-
const report = await getReports()
|
|
68
|
+
const report = await getReports(process.env.jppenas_email, process.env.jppenas_password)
|
|
69
69
|
const userData = await report.getUserData()
|
|
70
70
|
|
|
71
71
|
userData.allWeek = false
|
|
@@ -84,18 +84,18 @@ describe('trips', function () {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
const data = await report.tripReport(
|
|
87
|
-
new Date(Date.UTC(
|
|
88
|
-
new Date(Date.UTC(
|
|
87
|
+
new Date(Date.UTC(2023, 9, 1, 0, 0, 0, 0)),
|
|
88
|
+
new Date(Date.UTC(2023, 9, 1, 23, 59, 59, 0)),
|
|
89
89
|
userData)
|
|
90
90
|
|
|
91
91
|
assert.equal(data.length, 1)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
const device = data[0].devices.find(d => d.device.id === 22326)
|
|
93
|
+
assert.equal(device.trips.length, 1) // Total Trips
|
|
94
|
+
assert.equal(device.totalDistance, 33538.860000000335) // Total Kms
|
|
95
95
|
}, 20000)
|
|
96
96
|
// eslint-disable-next-line no-undef
|
|
97
97
|
it('Trip by device with time period 2', async () => {
|
|
98
|
-
const report = await getReports()
|
|
98
|
+
const report = await getReports(process.env.jppenas_email, process.env.jppenas_password)
|
|
99
99
|
const userData = await report.getUserData()
|
|
100
100
|
|
|
101
101
|
userData.allWeek = false
|
|
@@ -109,19 +109,19 @@ describe('trips', function () {
|
|
|
109
109
|
saturday: true
|
|
110
110
|
}
|
|
111
111
|
userData.dayHours = {
|
|
112
|
-
startTime: '
|
|
112
|
+
startTime: '20:00',
|
|
113
113
|
endTime: '09:00'
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
const data = await report.tripReport(
|
|
117
|
-
new Date(Date.UTC(
|
|
118
|
-
new Date(Date.UTC(
|
|
117
|
+
new Date(Date.UTC(2023, 9, 2, 0, 0, 0, 0)),
|
|
118
|
+
new Date(Date.UTC(2023, 9, 2, 23, 59, 59, 0)),
|
|
119
119
|
userData)
|
|
120
120
|
|
|
121
121
|
assert.equal(data.length, 1)
|
|
122
|
-
|
|
123
|
-
assert.equal(device.trips.length,
|
|
124
|
-
assert.equal(device.totalDistance,
|
|
122
|
+
const device = data[0].devices.find(d => d.device.id === 22326)
|
|
123
|
+
assert.equal(device.trips.length, 3) // Total Trips
|
|
124
|
+
assert.equal(device.totalDistance, 18589.02999999933) // Total Kms
|
|
125
125
|
}, 20000)
|
|
126
126
|
|
|
127
127
|
// eslint-disable-next-line no-undef
|
package/src/trip-report.js
CHANGED
|
@@ -268,18 +268,9 @@ async function processDrivers (from, to, userData, data) {
|
|
|
268
268
|
}
|
|
269
269
|
|
|
270
270
|
for (const d of userData.drivers) {
|
|
271
|
-
const {
|
|
272
|
-
const filteredTrips = []
|
|
273
|
-
for (const t of trips) {
|
|
274
|
-
if (userData.allWeek ||
|
|
275
|
-
!userData.weekDays ||
|
|
276
|
-
isInsideTimetable(t, userData) ||
|
|
277
|
-
await isPartialInsideTimetable(t, userData, route)) {
|
|
278
|
-
filteredTrips.push(t)
|
|
279
|
-
}
|
|
280
|
-
}
|
|
271
|
+
const { trips } = getDriverData(d, data)
|
|
281
272
|
|
|
282
|
-
|
|
273
|
+
trips.forEach(trip => {
|
|
283
274
|
trip.totalKms = trip.distance / 1000
|
|
284
275
|
|
|
285
276
|
const nearestPOIs = getNearestPOIs(trip.endLon, trip.endLat, userData.geofences)
|
|
@@ -292,12 +283,12 @@ async function processDrivers (from, to, userData, data) {
|
|
|
292
283
|
trip.stopEngineHours = getTripIdleTime(trip, idleEvents) + (stop ? stop.engineHours : 0)
|
|
293
284
|
})
|
|
294
285
|
|
|
295
|
-
if (
|
|
286
|
+
if (trips.length > 0) {
|
|
296
287
|
const driverData = {
|
|
297
288
|
driver: d,
|
|
298
289
|
from,
|
|
299
290
|
to,
|
|
300
|
-
trips
|
|
291
|
+
trips
|
|
301
292
|
}
|
|
302
293
|
driversResult.push(driverData)
|
|
303
294
|
}
|
package/src/util/driver.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const traccar = require('./traccar')
|
|
2
2
|
const automaticReports = require('../automaticReports')
|
|
3
3
|
const traccarHelper = require('./traccar')
|
|
4
|
+
const { isInsideTimetable, isPartialInsideTimetable } = require('./trips')
|
|
4
5
|
|
|
5
6
|
// get devices used by each driver between two dates
|
|
6
7
|
async function devicesByDriver (traccarInstance, from, to, drivers, devices) {
|
|
@@ -60,14 +61,26 @@ function getDriverName (driverUniqueId, date, userData) {
|
|
|
60
61
|
return ''
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
function getDriverData (d, data) {
|
|
64
|
+
async function getDriverData (d, data, userData) {
|
|
64
65
|
const route = data.route ? data.route.filter(p => !d.uniqueId.localeCompare(p.attributes.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
65
66
|
const trips = data.trips ? data.trips.filter(t => !d.uniqueId.localeCompare(t.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
66
67
|
const events = data.events ? data.events.filter(e => e.position && !d.uniqueId.localeCompare(e.position.attributes.driverUniqueId, undefined, { sensitivity: 'base' })) : undefined
|
|
67
68
|
|
|
69
|
+
const filteredTrips = []
|
|
70
|
+
if (trips) {
|
|
71
|
+
for (const t of trips) {
|
|
72
|
+
if (userData.allWeek ||
|
|
73
|
+
!userData.weekDays ||
|
|
74
|
+
isInsideTimetable(t, userData) ||
|
|
75
|
+
await isPartialInsideTimetable(t, userData, route)) {
|
|
76
|
+
filteredTrips.push(t)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
68
81
|
return {
|
|
69
82
|
route,
|
|
70
|
-
trips,
|
|
83
|
+
trips: filteredTrips,
|
|
71
84
|
events
|
|
72
85
|
}
|
|
73
86
|
}
|
package/src/util/timetable.js
CHANGED
|
@@ -11,9 +11,14 @@ function isInside (start, end, userData) {
|
|
|
11
11
|
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
12
12
|
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
13
13
|
|
|
14
|
-
// next day
|
|
15
14
|
if (startDate.getTime() > endDate.getTime()) {
|
|
16
|
-
|
|
15
|
+
const startDatePreviousDay = new Date(startDate)
|
|
16
|
+
startDatePreviousDay.setDate(startDate.getDate() - 1)
|
|
17
|
+
const endDateNextDay = new Date(endDate)
|
|
18
|
+
endDateNextDay.setDate(endDate.getDate() + 1)
|
|
19
|
+
|
|
20
|
+
return (tripStart.getTime() > startDatePreviousDay.getTime() && tripEnd.getTime() < endDate.getTime()) ||
|
|
21
|
+
(tripStart.getTime() > startDate.getTime() && tripEnd.getTime() < endDateNextDay.getTime())
|
|
17
22
|
}
|
|
18
23
|
// Trips inside time period
|
|
19
24
|
return tripStart.getTime() > startDate.getTime() && tripEnd.getTime() < endDate.getTime()
|