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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.960",
3
+ "version": "1.0.962",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
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) => {
@@ -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
- 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)
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 = data.trips.filter(t => new Date(t.endTime) > startDate && new Date(t.startTime) < endDate).map(t => {
120
- return { ...t }
121
- })
122
-
123
- for (const t of tripsByDay) {
124
- await calculatePartialTrip(device, startDate, endDate, data.route, t, traccarInstance)
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
- return { tripsByDay, routeByDay, refuelingPositionsByDay }
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) {
@@ -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 fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
108
- const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
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 dayRoute = deviceRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay)
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) > fromByDay)
115
- const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < toByDay)
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, fromByDay, from, toByDay, to)
118
- const distanceIn = calculateDistanceIn(zoneInOutDayData, deviceRoute, dayRoute, fromByDay, toByDay, to, d)
119
- const distanceOut = calculateDistanceOut(zoneInOutDayData, dayRoute, fromByDay, toByDay, 'distanceOut', d)
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 fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
143
- const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
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 = zoneInOutData.filter(z => (!z.inTime || (new Date(z.inTime.fixTime) < toByDay)) &&
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, deviceRoute, fromByDay, toByDay, 'distanceOutAny', d)
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)