fleetmap-reports 1.0.898 → 1.0.899

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.898",
3
+ "version": "1.0.899",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -144,7 +144,7 @@ function getDeviceData (allInOne, d) {
144
144
  ? a.map((p, index) => index === 0 ? 0 : new Date(p.fixTime).getTime() - new Date(a[index - 1].fixTime).getTime()).reduce((a, b) => a + b, 0)
145
145
  : 0).reduce((a, b) => a + b, 0)
146
146
  const economicDistance = economicRPMSections.map(a => a.length > 1
147
- ? calculateDistance(a)
147
+ ? calculateDistance(a, d.attributes['report.ignoreOdometer'])
148
148
  : 0).reduce((a, b) => a + b, 0)
149
149
  const economicConsumption = economicRPMSections.map(a => a.length > 1
150
150
  ? a[a.length - 1].attributes.fuelUsed - a[0].attributes.fuelUsed
package/src/util/trips.js CHANGED
@@ -120,7 +120,7 @@ function calculateTrip (device, route) {
120
120
  return {
121
121
  deviceId: device.id,
122
122
  deviceName: device.name,
123
- distance: calculateDistance(route) * 1000,
123
+ distance: calculateDistance(route, device.attributes['report.ignoreOdometer']) * 1000,
124
124
  averageSpeed: Math.round((route.map(p => p.speed).reduce((a, b) => a + b, 0)) / route.length),
125
125
  maxSpeed: route.map(p => p.speed).reduce(function (a, b) { return Math.max(a, b) }),
126
126
  spentFuel: 0,
package/src/util/utils.js CHANGED
@@ -241,7 +241,11 @@ exports.getLogo = (user) => {
241
241
  }
242
242
  exports.convertToFeature = convertToFeature
243
243
  exports.convertPositionToFeature = convertPositionToFeature
244
- exports.calculateDistance = (positions) => {
244
+ exports.calculateDistance = (positions, ignoreOdometer) => {
245
+ if (!ignoreOdometer && positions.length > 1 && positions[0].attributes.odometer && positions[positions.length - 1].attributes.odometer) {
246
+ return (positions[positions.length - 1].attributes.odometer - positions[0].attributes.odometer) / 1000
247
+ }
248
+
245
249
  return positions
246
250
  .sort((a, b) => new Date(a.fixTime).getTime() - new Date(b.fixTime).getTime())
247
251
  .map(p => [p.longitude, p.latitude])
@@ -93,7 +93,7 @@ async function processDevices (from, to, devices, userData, data) {
93
93
  for (const d of devices) {
94
94
  const alerts = data.alerts.filter(t => t.deviceId === d.id)
95
95
  const deviceRoute = data.route.filter(p => p.deviceId === d.id)
96
- const zoneInOutData = analyseAlerts(alerts, deviceRoute, userData, from, to).filter(d => !userData.onlyWithStop || d.stopped)
96
+ const zoneInOutData = analyseAlerts(alerts, deviceRoute, userData, from, to, d).filter(d => !userData.onlyWithStop || d.stopped)
97
97
 
98
98
  if (userData.groupByDay || userData.zonesByColumn) {
99
99
  const dates = getDates(from, to, userData.user.attributes.timezone)
@@ -115,8 +115,8 @@ async function processDevices (from, to, devices, userData, data) {
115
115
  const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < toByDay)
116
116
 
117
117
  const timeIn = calculateTimeIn(zoneInOutDayData, fromByDay, from, toByDay, to)
118
- const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, dayRoute, fromByDay, toByDay, to)
119
- const distanceOut = calculateDistanceOut(zoneInOutDayData, dayRoute, fromByDay, toByDay, 'distanceOut')
118
+ const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, dayRoute, fromByDay, toByDay, to, d)
119
+ const distanceOut = calculateDistanceOut(zoneInOutDayData, dayRoute, fromByDay, toByDay, 'distanceOut', d)
120
120
 
121
121
  dataByDay.push({
122
122
  date,
@@ -265,7 +265,7 @@ function getAnyNextIn (outDate, alerts, deviceRoute) {
265
265
  new Date(deviceRoute.slice(-1)[0].fixTime).getTime()
266
266
  }
267
267
 
268
- function calculateDistanceIn (zoneInOutDayData, deviceRoute, dayRoute, fromByDay, toByDay, to) {
268
+ function calculateDistanceIn (zoneInOutDayData, deviceRoute, dayRoute, fromByDay, toByDay, to, device) {
269
269
  let distanceIn = zoneInOutDayData.length && dayRoute.length ? zoneInOutDayData.reduce((a, b) => a + (b.distanceIn || 0), 0) : 0
270
270
 
271
271
  if (zoneInOutDayData.length) {
@@ -273,21 +273,21 @@ function calculateDistanceIn (zoneInOutDayData, deviceRoute, dayRoute, fromByDay
273
273
  if (!zoneInOutDayData[0].inTime || new Date(zoneInOutDayData[0].inTime.fixTime) < fromByDay) {
274
274
  const routeDayBefore = deviceRoute.filter(p => (!zoneInOutDayData[0].inTime || (new Date(p.fixTime) >= new Date(zoneInOutDayData[0].inTime.fixTime))) &&
275
275
  new Date(p.fixTime) < fromByDay)
276
- distanceIn = distanceIn - calculateDistance(routeDayBefore)
276
+ distanceIn = distanceIn - calculateDistance(routeDayBefore, device.attributes['report.ignoreOdometer'])
277
277
  }
278
278
 
279
279
  // Check if the last entry ends only on the next day
280
280
  if (!zoneInOutDayData[zoneInOutDayData.length - 1].outTime || new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) > toByDay) {
281
281
  const outTime = zoneInOutDayData[zoneInOutDayData.length - 1].outTime ? new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) : to
282
282
  const routeDayAfter = deviceRoute.filter(p => new Date(p.fixTime) < outTime && new Date(p.fixTime) > toByDay)
283
- distanceIn = distanceIn - calculateDistance(routeDayAfter)
283
+ distanceIn = distanceIn - calculateDistance(routeDayAfter, device.attributes['report.ignoreOdometer'])
284
284
  }
285
285
  }
286
286
 
287
287
  return distanceIn
288
288
  }
289
289
 
290
- function calculateDistanceOut (zoneInOutDayData, dayRoute, fromByDay, toByDay, field) {
290
+ function calculateDistanceOut (zoneInOutDayData, dayRoute, fromByDay, toByDay, field, device) {
291
291
  if (zoneInOutDayData.length) {
292
292
  let distanceOut = zoneInOutDayData.reduce((a, b) => a + (b[field] || 0), 0) -
293
293
  (zoneInOutDayData[zoneInOutDayData.length - 1][field] || 0)
@@ -298,23 +298,23 @@ function calculateDistanceOut (zoneInOutDayData, dayRoute, fromByDay, toByDay, f
298
298
  new Date(p.fixTime).getTime() < new Date(zoneInOutDayData[0].inTime.fixTime).getTime() &&
299
299
  new Date(p.fixTime).getTime() >= fromByDay.getTime()
300
300
  )
301
- distanceOut = distanceOut + calculateDistance(routeOut)
301
+ distanceOut = distanceOut + calculateDistance(routeOut, device.attributes['report.ignoreOdometer'])
302
302
  }
303
303
 
304
304
  if (zoneInOutDayData[zoneInOutDayData.length - 1].outTime && new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) < toByDay) {
305
305
  const routeOut = dayRoute.filter(p =>
306
306
  new Date(p.fixTime) >= new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime).getTime() &&
307
307
  new Date(p.fixTime) < toByDay.getTime())
308
- distanceOut = distanceOut + calculateDistance(routeOut)
308
+ distanceOut = distanceOut + calculateDistance(routeOut, device.attributes['report.ignoreOdometer'])
309
309
  }
310
310
 
311
311
  return distanceOut
312
312
  }
313
313
 
314
- return calculateDistance(dayRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay))
314
+ return calculateDistance(dayRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay), device.attributes['report.ignoreOdometer'])
315
315
  }
316
316
 
317
- function analyseAlerts (alerts, deviceRoute, userData, from, to) {
317
+ function analyseAlerts (alerts, deviceRoute, userData, from, to, device) {
318
318
  const zoneInOutData = []
319
319
  const zoneInData = {}
320
320
 
@@ -338,14 +338,14 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
338
338
  new Date(p.fixTime).getTime() < nextIn
339
339
  )
340
340
  const totalOutTime = nextIn - outDate
341
- const distanceOut = calculateDistance(routeAfterOut)
341
+ const distanceOut = calculateDistance(routeAfterOut, device.attributes['report.ignoreOdometer'])
342
342
 
343
343
  const anyNextIn = getAnyNextIn(outDate, alerts, deviceRoute)
344
344
  const routeAfterOutAndBeforeAnyNextIn = deviceRoute.filter(p =>
345
345
  new Date(p.fixTime).getTime() >= outDate &&
346
- new Date(p.fixTime).getTime() < anyNextIn
346
+ new Date(p.fixTime).getTime() <= anyNextIn
347
347
  )
348
- const distanceOutAny = Object.keys(zoneInData).length < 2 ? Math.round(calculateDistance(routeAfterOutAndBeforeAnyNextIn)) : 0
348
+ const distanceOutAny = Object.keys(zoneInData).length < 2 ? Math.round(calculateDistance(routeAfterOutAndBeforeAnyNextIn, device.attributes['report.ignoreOdometer'])) : 0
349
349
 
350
350
  if (zoneInData[a.geofenceId]) {
351
351
  const totalInTime = new Date(a.position.fixTime).getTime() - new Date(zoneInData[a.geofenceId].position.fixTime).getTime()
@@ -359,7 +359,7 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
359
359
  outTime: a.position,
360
360
  totalInTime,
361
361
  totalOutTime,
362
- distanceIn: calculateDistance(routeIn),
362
+ distanceIn: calculateDistance(routeIn, device.attributes['report.ignoreOdometer']),
363
363
  distanceOut,
364
364
  distanceOutAny,
365
365
  geofenceName: geofence.name,
@@ -380,7 +380,7 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
380
380
  geofenceId: geofence.id,
381
381
  totalInTime,
382
382
  totalOutTime,
383
- distanceIn: calculateDistance(routeIn),
383
+ distanceIn: calculateDistance(routeIn, device.attributes['report.ignoreOdometer']),
384
384
  driverName: '',
385
385
  distanceOut,
386
386
  distanceOutAny
@@ -401,7 +401,7 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
401
401
  zoneInOutData.push({
402
402
  inTime: zoneInData[i].position,
403
403
  totalInTime,
404
- distanceIn: calculateDistance(routeIn),
404
+ distanceIn: calculateDistance(routeIn, device.attributes['report.ignoreOdometer']),
405
405
  geofenceName: geofence.name,
406
406
  geofenceId: geofence.id,
407
407
  driverName: zoneInData[i].position.driverName
@@ -413,8 +413,8 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
413
413
  if (!zoneInOutData.length && userData.groupByDay) {
414
414
  const geofenceIn = alerts.find(a => a.type === 'geofenceIn')
415
415
  zoneInOutData.push({
416
- distanceIn: geofenceIn ? calculateDistance(deviceRoute) : 0,
417
- distanceOut: !geofenceIn ? calculateDistance(deviceRoute) : 0,
416
+ distanceIn: geofenceIn ? calculateDistance(deviceRoute, device.attributes['report.ignoreOdometer']) : 0,
417
+ distanceOut: !geofenceIn ? calculateDistance(deviceRoute, device.attributes['report.ignoreOdometer']) : 0,
418
418
  totalTime: to.getTime() - from.getTime()
419
419
  })
420
420
  }