fleetmap-reports 1.0.993 → 1.0.996

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.993",
3
+ "version": "1.0.996",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -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.forEach(d => {
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
  }
@@ -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.forEach(d => {
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
- driverToProcess.forEach(d => {
170
- const { route, trips } = getDriverData(d, data)
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 (filteredTrips.length > 0) {
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 = filteredTrips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay))
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: filteredTrips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
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
  }
@@ -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.forEach(d => {
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
@@ -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.forEach(d => {
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
  }
@@ -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(2022, 0, 3, 0, 0, 0, 0)),
88
- new Date(Date.UTC(2022, 0, 4, 23, 59, 59, 0)),
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
- // 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, 172190.92999999225) // Total Kms
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: '18:00',
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(2022, 0, 10, 0, 0, 0, 0)),
118
- new Date(Date.UTC(2022, 0, 14, 23, 59, 59, 0)),
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
- /* const device = data[0].devices.find(d => d.device.id === 22326)
123
- assert.equal(device.trips.length, 22) // Total Trips
124
- assert.equal(device.totalDistance, 214334.7800000161) // Total Kms */
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
@@ -268,38 +268,31 @@ async function processDrivers (from, to, userData, data) {
268
268
  }
269
269
 
270
270
  for (const d of userData.drivers) {
271
- const { route, trips } = getDriverData(d, data)
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
- filteredTrips.forEach(trip => {
283
- trip.totalKms = trip.distance / 1000
273
+ if (trips) {
274
+ trips.forEach(trip => {
275
+ trip.totalKms = trip.distance / 1000
284
276
 
285
- const nearestPOIs = getNearestPOIs(trip.endLon, trip.endLat, userData.geofences)
286
- if (nearestPOIs.length > 0) {
287
- trip.endPOIName = nearestPOIs[0].p.name
288
- }
277
+ const nearestPOIs = getNearestPOIs(trip.endLon, trip.endLat, userData.geofences)
278
+ if (nearestPOIs.length > 0) {
279
+ trip.endPOIName = nearestPOIs[0].p.name
280
+ }
289
281
 
290
- const stop = data.stops.find(s => s.deviceId === trip.deviceId && (new Date(s.startTime).getTime() === new Date(trip.endTime).getTime()))
282
+ const stop = data.stops.find(s => s.deviceId === trip.deviceId && (new Date(s.startTime).getTime() === new Date(trip.endTime).getTime()))
291
283
 
292
- trip.stopEngineHours = getTripIdleTime(trip, idleEvents) + (stop ? stop.engineHours : 0)
293
- })
284
+ trip.stopEngineHours = getTripIdleTime(trip, idleEvents) + (stop ? stop.engineHours : 0)
285
+ })
294
286
 
295
- if (filteredTrips.length > 0) {
296
- const driverData = {
297
- driver: d,
298
- from,
299
- to,
300
- trips: filteredTrips
287
+ if (trips.length > 0) {
288
+ const driverData = {
289
+ driver: d,
290
+ from,
291
+ to,
292
+ trips
293
+ }
294
+ driversResult.push(driverData)
301
295
  }
302
- driversResult.push(driverData)
303
296
  }
304
297
  }
305
298
 
@@ -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
  }
@@ -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
- endDate.setDate(endDate.getDate() + 1)
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()