fleetmap-reports 1.0.961 → 1.0.963
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/util/trips.js +6 -1
- package/src/zone-report.js +26 -24
package/package.json
CHANGED
package/src/util/trips.js
CHANGED
|
@@ -131,7 +131,12 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
|
|
|
131
131
|
|
|
132
132
|
const refuelingPositionsByDay = data.refuelingPositions ? data.refuelingPositions.filter(p => (new Date(p.date) > startDate && new Date(p.date) < endDate)) : []
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
const zoneInOutDayData = data.zoneInOutData
|
|
135
|
+
? data.zoneInOutData.filter(z => (!z.inTime || (new Date(z.inTime.fixTime) < endDate)) &&
|
|
136
|
+
(!z.outTime || (new Date(z.outTime.fixTime) > startDate)))
|
|
137
|
+
: []
|
|
138
|
+
|
|
139
|
+
return { tripsByDay, routeByDay, refuelingPositionsByDay, zoneInOutDayData }
|
|
135
140
|
}
|
|
136
141
|
|
|
137
142
|
function getKms (trips) {
|
package/src/zone-report.js
CHANGED
|
@@ -4,7 +4,7 @@ const {
|
|
|
4
4
|
calculateDistance,
|
|
5
5
|
sortPositions, getDates, convertToLocaleDateString, convertToLocaleTimeString,
|
|
6
6
|
isClientSide,
|
|
7
|
-
getLanguage
|
|
7
|
+
getLanguage, convertFromUTC, convertFromLocal
|
|
8
8
|
} = require('./util/utils')
|
|
9
9
|
const jsPDF = require('jspdf')
|
|
10
10
|
require('jspdf-autotable')
|
|
@@ -105,20 +105,21 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
105
105
|
|
|
106
106
|
const dataByDay = []
|
|
107
107
|
for (const date of dates) {
|
|
108
|
-
const
|
|
109
|
-
const
|
|
108
|
+
const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
|
|
109
|
+
const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
|
|
110
|
+
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
111
|
+
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
110
112
|
|
|
111
|
-
|
|
113
|
+
console.log(startDate, endDate)
|
|
112
114
|
|
|
113
|
-
const zoneInOutDayData =
|
|
114
|
-
(!z.outTime || (new Date(z.outTime.fixTime) > fromByDay)))
|
|
115
|
+
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData: filteredByGeofence }, userData)
|
|
115
116
|
|
|
116
|
-
const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) >
|
|
117
|
-
const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) <
|
|
117
|
+
const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > startDate)
|
|
118
|
+
const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < endDate)
|
|
118
119
|
|
|
119
|
-
const timeIn = calculateTimeIn(zoneInOutDayData,
|
|
120
|
-
const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, routeByDay,
|
|
121
|
-
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay,
|
|
120
|
+
const timeIn = calculateTimeIn(zoneInOutDayData, startDate, from, endDate, to)
|
|
121
|
+
const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, routeByDay, startDate, endDate, to, d)
|
|
122
|
+
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOut', d)
|
|
122
123
|
|
|
123
124
|
dataByDay.push({
|
|
124
125
|
date,
|
|
@@ -141,15 +142,16 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
141
142
|
if (userData.zonesByColumn) {
|
|
142
143
|
const groupByDay = []
|
|
143
144
|
for (const date of dates) {
|
|
144
|
-
const
|
|
145
|
-
const
|
|
145
|
+
const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
|
|
146
|
+
const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
|
|
147
|
+
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
148
|
+
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
146
149
|
|
|
147
|
-
|
|
150
|
+
console.log(startDate, endDate)
|
|
148
151
|
|
|
149
|
-
const zoneInOutDayData =
|
|
150
|
-
(!z.outTime || (new Date(z.outTime.fixTime) > fromByDay)))
|
|
152
|
+
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData }, userData)
|
|
151
153
|
|
|
152
|
-
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay,
|
|
154
|
+
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOutAny', d)
|
|
153
155
|
|
|
154
156
|
const geofences = geofencesData.map(g => {
|
|
155
157
|
const day = g.days.find(day => day.date === date)
|
|
@@ -309,33 +311,33 @@ function calculateDistanceIn (zoneInOutDayData, deviceRoute, dayRoute, fromByDay
|
|
|
309
311
|
return distanceIn
|
|
310
312
|
}
|
|
311
313
|
|
|
312
|
-
function calculateDistanceOut (zoneInOutDayData, dayRoute,
|
|
314
|
+
function calculateDistanceOut (zoneInOutDayData, dayRoute, from, to, field, device) {
|
|
313
315
|
if (zoneInOutDayData.length) {
|
|
314
|
-
const dataInsideDay = zoneInOutDayData.filter(z => z.outTime && new Date(z.outTime.fixTime) <
|
|
316
|
+
const dataInsideDay = zoneInOutDayData.filter(z => z.outTime && new Date(z.outTime.fixTime) < to)
|
|
315
317
|
let distanceOut = dataInsideDay.reduce((a, b) => a + (b[field] || 0), 0)
|
|
316
318
|
|
|
317
|
-
if (zoneInOutDayData[0].inTime && new Date(zoneInOutDayData[0].inTime.fixTime) >
|
|
319
|
+
if (zoneInOutDayData[0].inTime && new Date(zoneInOutDayData[0].inTime.fixTime) > from && (field !== 'distanceOutAny' || zoneInOutDayData[0].anyLastExit)) {
|
|
318
320
|
// Add distanceOut before the first entry
|
|
319
321
|
const routeOut = dayRoute.filter(p =>
|
|
320
322
|
new Date(p.fixTime).getTime() < new Date(zoneInOutDayData[0].inTime.fixTime).getTime() &&
|
|
321
|
-
new Date(p.fixTime).getTime() >=
|
|
323
|
+
new Date(p.fixTime).getTime() >= from.getTime()
|
|
322
324
|
)
|
|
323
325
|
distanceOut = distanceOut + calculateDistance(routeOut, device.attributes['report.ignoreOdometer'])
|
|
324
326
|
}
|
|
325
327
|
|
|
326
|
-
if (zoneInOutDayData[zoneInOutDayData.length - 1].outTime && new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) <
|
|
328
|
+
if (zoneInOutDayData[zoneInOutDayData.length - 1].outTime && new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) < to && (field !== 'distanceOutAny' || zoneInOutDayData[zoneInOutDayData.length - 1].anyNextIn)) {
|
|
327
329
|
// Add distanceOut after last exit
|
|
328
330
|
distanceOut = distanceOut - zoneInOutDayData[zoneInOutDayData.length - 1][field]
|
|
329
331
|
const routeOut = dayRoute.filter(p =>
|
|
330
332
|
new Date(p.fixTime) >= new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime).getTime() &&
|
|
331
|
-
new Date(p.fixTime) <
|
|
333
|
+
new Date(p.fixTime) < to.getTime())
|
|
332
334
|
distanceOut = distanceOut + calculateDistance(routeOut, device.attributes['report.ignoreOdometer'])
|
|
333
335
|
}
|
|
334
336
|
|
|
335
337
|
return distanceOut
|
|
336
338
|
}
|
|
337
339
|
|
|
338
|
-
return calculateDistance(dayRoute.filter(p => new Date(p.fixTime) >=
|
|
340
|
+
return calculateDistance(dayRoute.filter(p => new Date(p.fixTime) >= from && new Date(p.fixTime) < to), device.attributes['report.ignoreOdometer'])
|
|
339
341
|
}
|
|
340
342
|
|
|
341
343
|
function analyseAlerts (alerts, deviceRoute, userData, from, to, device) {
|