fleetmap-reports 1.0.960 → 1.0.962
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/index.js +2 -1
- package/src/tests/zones.test.js +21 -3
- package/src/util/trips.js +15 -7
- package/src/zone-report.js +18 -16
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -18,7 +18,8 @@ function Reports (config, axios, cookieJar) {
|
|
|
18
18
|
groups: await this.traccar.groups.groupsGet().then(d => d.data),
|
|
19
19
|
drivers: await this.traccar.drivers.driversGet().then(d => d.data),
|
|
20
20
|
geofences: await this.traccar.geofences.geofencesGet().then(d => d.data),
|
|
21
|
-
byGroup: false
|
|
21
|
+
byGroup: false,
|
|
22
|
+
dayHours: { startTime: '00:00', endTime: '23:59' }
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
this.speedingReport = (from, to, userData) => {
|
package/src/tests/zones.test.js
CHANGED
|
@@ -88,12 +88,30 @@ describe('zones', function () {
|
|
|
88
88
|
g.name === 'baliza 2 - raio amarelo')
|
|
89
89
|
userData.onlyWithKmsOut = false
|
|
90
90
|
const result = await report.zoneReport(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
new Date(Date.UTC(2023, 8, 1, 0, 0, 0, 0)),
|
|
92
|
+
new Date(Date.UTC(2023, 8, 10, 23, 59, 59, 0)),
|
|
93
|
+
userData)
|
|
94
94
|
const first = result[0].devices[0]
|
|
95
95
|
console.log(first)
|
|
96
96
|
assert.equal(first.days[0].distanceOut, 294.0468270741282)
|
|
97
97
|
assert.equal(first.days[1].distanceOut, 35.21209134706803)
|
|
98
98
|
}, 4000000)
|
|
99
|
+
|
|
100
|
+
it('works with casais zones in columns 4', async () => {
|
|
101
|
+
const report = await getReports()
|
|
102
|
+
const userData = await report.getUserData()
|
|
103
|
+
userData.zonesByColumn = true
|
|
104
|
+
userData.devices = userData.devices.filter(d => d.id === 81164)
|
|
105
|
+
userData.geofences = userData.geofences.filter(g => g.name === 'baliza 1 - raio verde ' ||
|
|
106
|
+
g.name === 'baliza 2 - raio amarelo')
|
|
107
|
+
userData.onlyWithKmsOut = false
|
|
108
|
+
const result = await report.zoneReport(
|
|
109
|
+
new Date(Date.UTC(2023, 8, 10, 0, 0, 0, 0)),
|
|
110
|
+
new Date(Date.UTC(2023, 8, 11, 23, 59, 59, 0)),
|
|
111
|
+
userData)
|
|
112
|
+
const first = result[0].devices[0]
|
|
113
|
+
console.log(first)
|
|
114
|
+
assert.equal(first.days[0].distanceOut, 24)
|
|
115
|
+
assert.equal(first.days[1].distanceOut, 0)
|
|
116
|
+
}, 4000000)
|
|
99
117
|
})
|
package/src/util/trips.js
CHANGED
|
@@ -116,19 +116,27 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
|
|
|
116
116
|
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
117
117
|
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
118
118
|
|
|
119
|
-
const tripsByDay =
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
119
|
+
const tripsByDay = []
|
|
120
|
+
if (data.trips) {
|
|
121
|
+
tripsByDay.concat(data.trips.filter(t => new Date(t.endTime) > startDate && new Date(t.startTime) < endDate).map(t => {
|
|
122
|
+
return { ...t }
|
|
123
|
+
}))
|
|
124
|
+
|
|
125
|
+
for (const t of tripsByDay) {
|
|
126
|
+
await calculatePartialTrip(device, startDate, endDate, data.route, t, traccarInstance)
|
|
127
|
+
}
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
const routeByDay = data.route ? data.route.filter(p => (new Date(p.fixTime) > startDate && new Date(p.fixTime) < endDate)) : []
|
|
128
131
|
|
|
129
132
|
const refuelingPositionsByDay = data.refuelingPositions ? data.refuelingPositions.filter(p => (new Date(p.date) > startDate && new Date(p.date) < endDate)) : []
|
|
130
133
|
|
|
131
|
-
|
|
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 }
|
|
132
140
|
}
|
|
133
141
|
|
|
134
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')
|
|
@@ -20,6 +20,7 @@ const {
|
|
|
20
20
|
} = require('./util/route')
|
|
21
21
|
const { checkGeofenceIn } = require('./util/geofence')
|
|
22
22
|
const { parallel } = require('./util/parallel')
|
|
23
|
+
const { getDataByDay } = require('./util/trips')
|
|
23
24
|
const sliceSize = 100
|
|
24
25
|
const deviceChunk = 5
|
|
25
26
|
const fileName = 'ZoneReport'
|
|
@@ -104,19 +105,19 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
104
105
|
|
|
105
106
|
const dataByDay = []
|
|
106
107
|
for (const date of dates) {
|
|
107
|
-
const
|
|
108
|
-
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)
|
|
109
112
|
|
|
110
|
-
const
|
|
111
|
-
const zoneInOutDayData = filteredByGeofence.filter(z => (!z.inTime || (new Date(z.inTime.fixTime) < toByDay)) &&
|
|
112
|
-
(!z.outTime || (new Date(z.outTime.fixTime) > fromByDay)))
|
|
113
|
+
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData: filteredByGeofence }, userData)
|
|
113
114
|
|
|
114
|
-
const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) >
|
|
115
|
-
const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) <
|
|
115
|
+
const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > startDate)
|
|
116
|
+
const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < endDate)
|
|
116
117
|
|
|
117
|
-
const timeIn = calculateTimeIn(zoneInOutDayData,
|
|
118
|
-
const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute,
|
|
119
|
-
const distanceOut = calculateDistanceOut(zoneInOutDayData,
|
|
118
|
+
const timeIn = calculateTimeIn(zoneInOutDayData, startDate, from, endDate, to)
|
|
119
|
+
const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, routeByDay, startDate, endDate, to, d)
|
|
120
|
+
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOut', d)
|
|
120
121
|
|
|
121
122
|
dataByDay.push({
|
|
122
123
|
date,
|
|
@@ -139,13 +140,14 @@ async function processDevices (from, to, devices, userData, data) {
|
|
|
139
140
|
if (userData.zonesByColumn) {
|
|
140
141
|
const groupByDay = []
|
|
141
142
|
for (const date of dates) {
|
|
142
|
-
const
|
|
143
|
-
const
|
|
143
|
+
const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
|
|
144
|
+
const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
|
|
145
|
+
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
146
|
+
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
144
147
|
|
|
145
|
-
const zoneInOutDayData =
|
|
146
|
-
(!z.outTime || (new Date(z.outTime.fixTime) > fromByDay)))
|
|
148
|
+
const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData }, userData)
|
|
147
149
|
|
|
148
|
-
const distanceOut = calculateDistanceOut(zoneInOutDayData,
|
|
150
|
+
const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOutAny', d)
|
|
149
151
|
|
|
150
152
|
const geofences = geofencesData.map(g => {
|
|
151
153
|
const day = g.days.find(day => day.date === date)
|