fleetmap-reports 1.0.679 → 1.0.680

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/zone-report.js +77 -68
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.679",
3
+ "version": "1.0.680",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -97,91 +97,91 @@ async function processDevices (from, to, devices, userData, data) {
97
97
 
98
98
  const zoneInOutData = analyseAlerts(alerts, deviceRoute, userData, from, to).filter(d => !userData.onlyWithStop || d.stopped)
99
99
 
100
- if (zoneInOutData.length > 0) {
101
- if (userData.groupByDay) {
102
- const dates = getDates(from, to)
100
+ if (userData.groupByDay) {
101
+ const dates = getDates(from, to)
103
102
 
104
- const geofencesData = []
105
- for (const geofence of userData.geofences) {
106
- const filteredByGeofence = zoneInOutData.filter(d => d.geofenceId === geofence.id)
103
+ const geofencesData = []
104
+ for (const geofence of userData.geofences) {
105
+ const filteredByGeofence = zoneInOutData.filter(d => d.geofenceId === geofence.id)
107
106
 
108
- const dataByDay = []
109
- for (const date of dates) {
110
- const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
111
- const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
107
+ const dataByDay = []
108
+ for (const date of dates) {
109
+ const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
110
+ const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
112
111
 
113
- const dayRoute = deviceRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay)
114
- const zoneInOutDayData = filteredByGeofence.filter(z => (!z.inTime || (new Date(z.inTime.fixTime) < toByDay)) &&
112
+ const dayRoute = deviceRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay)
113
+ const zoneInOutDayData = filteredByGeofence.filter(z => (!z.inTime || (new Date(z.inTime.fixTime) < toByDay)) &&
115
114
  (!z.outTime || (new Date(z.outTime.fixTime) > fromByDay)))
116
115
 
117
- const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > fromByDay)
118
- const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < toByDay)
116
+ const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > fromByDay)
117
+ const lastOut = zoneInOutDayData.slice().reverse().find(z => z.outTime && new Date(z.outTime.fixTime) < toByDay)
119
118
 
120
- let timeIn = zoneInOutDayData.length ? zoneInOutDayData.reduce((a, b) => a + (b.totalInTime || 0), 0) : 0
119
+ let timeIn = zoneInOutDayData.length ? zoneInOutDayData.reduce((a, b) => a + (b.totalInTime || 0), 0) : 0
121
120
 
122
- let distanceIn = zoneInOutDayData.length && dayRoute.length ? zoneInOutDayData.reduce((a, b) => a + (b.distanceIn || 0), 0) : 0
123
- let distanceOut = 0
124
- if (zoneInOutDayData.length) {
125
- distanceOut = zoneInOutDayData.reduce((a, b) => a + (b.distanceOut || 0), 0) - zoneInOutDayData[zoneInOutDayData.length - 1].distanceOut
126
- } else {
127
- distanceOut = calculateDistance(deviceRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay))
128
- }
121
+ let distanceIn = zoneInOutDayData.length && dayRoute.length ? zoneInOutDayData.reduce((a, b) => a + (b.distanceIn || 0), 0) : 0
122
+ let distanceOut = 0
123
+ if (zoneInOutDayData.length) {
124
+ distanceOut = zoneInOutDayData.reduce((a, b) => a + (b.distanceOut || 0), 0) - zoneInOutDayData[zoneInOutDayData.length - 1].distanceOut
125
+ } else {
126
+ distanceOut = calculateDistance(deviceRoute.filter(p => new Date(p.fixTime) >= fromByDay && new Date(p.fixTime) < toByDay))
127
+ }
129
128
 
130
- if (zoneInOutDayData.length) {
131
- // Check if the first entry starts only on the day before
132
- if (!zoneInOutDayData[0].inTime || new Date(zoneInOutDayData[0].inTime.fixTime) < fromByDay) {
133
- const inTime = zoneInOutDayData[0].inTime ? new Date(zoneInOutDayData[0].inTime.fixTime) : from
134
- timeIn = timeIn - (fromByDay.getTime() - inTime.getTime())
135
- const routeDayBefore = deviceRoute.filter(p => (!zoneInOutDayData[0].inTime || new Date(p.fixTime) >= new Date(zoneInOutDayData[0].inTime.fixTime)) &&
129
+ if (zoneInOutDayData.length) {
130
+ // Check if the first entry starts only on the day before
131
+ if (!zoneInOutDayData[0].inTime || new Date(zoneInOutDayData[0].inTime.fixTime) < fromByDay) {
132
+ const inTime = zoneInOutDayData[0].inTime ? new Date(zoneInOutDayData[0].inTime.fixTime) : from
133
+ timeIn = timeIn - (fromByDay.getTime() - inTime.getTime())
134
+ const routeDayBefore = deviceRoute.filter(p => (!zoneInOutDayData[0].inTime || new Date(p.fixTime) >= new Date(zoneInOutDayData[0].inTime.fixTime)) &&
136
135
  new Date(p.fixTime) < fromByDay)
137
- distanceIn = distanceIn - calculateDistance(routeDayBefore)
138
- } else {
139
- // Add distanceOut before the first entry
140
- const routeOut = deviceRoute.filter(p =>
141
- new Date(p.fixTime).getTime() < new Date(zoneInOutDayData[0].inTime.fixTime).getTime() &&
136
+ distanceIn = distanceIn - calculateDistance(routeDayBefore)
137
+ } else {
138
+ // Add distanceOut before the first entry
139
+ const routeOut = deviceRoute.filter(p =>
140
+ new Date(p.fixTime).getTime() < new Date(zoneInOutDayData[0].inTime.fixTime).getTime() &&
142
141
  new Date(p.fixTime).getTime() >= fromByDay.getTime()
143
- )
144
- distanceOut = distanceOut + calculateDistance(routeOut)
145
- }
146
-
147
- // Check if the last entry ends only on the next day
148
- if (!zoneInOutDayData[zoneInOutDayData.length - 1].outTime || new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) > toByDay) {
149
- const outTime = zoneInOutDayData[zoneInOutDayData.length - 1].outTime ? new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) : to
150
- timeIn = timeIn - (outTime.getTime() - (toByDay.getTime() + 1000))
151
- const routeDayAfter = deviceRoute.filter(p => new Date(p.fixTime) <= outTime && new Date(p.fixTime) > toByDay)
152
- distanceIn = distanceIn - calculateDistance(routeDayAfter)
153
- } else {
154
- const routeOut = deviceRoute.filter(p =>
155
- new Date(p.fixTime) >= new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime).getTime() &&
142
+ )
143
+ distanceOut = distanceOut + calculateDistance(routeOut)
144
+ }
145
+
146
+ // Check if the last entry ends only on the next day
147
+ if (!zoneInOutDayData[zoneInOutDayData.length - 1].outTime || new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) > toByDay) {
148
+ const outTime = zoneInOutDayData[zoneInOutDayData.length - 1].outTime ? new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime) : to
149
+ timeIn = timeIn - (outTime.getTime() - (toByDay.getTime() + 1000))
150
+ const routeDayAfter = deviceRoute.filter(p => new Date(p.fixTime) <= outTime && new Date(p.fixTime) > toByDay)
151
+ distanceIn = distanceIn - calculateDistance(routeDayAfter)
152
+ } else {
153
+ const routeOut = deviceRoute.filter(p =>
154
+ new Date(p.fixTime) >= new Date(zoneInOutDayData[zoneInOutDayData.length - 1].outTime.fixTime).getTime() &&
156
155
  new Date(p.fixTime) < toByDay.getTime())
157
- distanceOut = distanceOut + calculateDistance(routeOut)
158
- }
156
+ distanceOut = distanceOut + calculateDistance(routeOut)
159
157
  }
160
- dataByDay.push({
161
- date,
162
- firstIn: firstIn ? firstIn.inTime.fixTime : undefined,
163
- lastOut: lastOut ? lastOut.outTime.fixTime : undefined,
164
- distanceIn: distanceIn > 0 ? distanceIn : 0,
165
- distanceOut,
166
- totalInTime: timeIn,
167
- totalOutTime: (24 * 60 * 60 * 1000) - timeIn
168
- })
169
158
  }
170
-
171
- geofencesData.push({
172
- geofenceName: geofence.name,
173
- days: dataByDay
159
+ dataByDay.push({
160
+ date,
161
+ firstIn: firstIn ? firstIn.inTime.fixTime : undefined,
162
+ lastOut: lastOut ? lastOut.outTime.fixTime : undefined,
163
+ distanceIn: distanceIn > 0 ? distanceIn : 0,
164
+ distanceOut,
165
+ totalInTime: timeIn,
166
+ totalOutTime: (24 * 60 * 60 * 1000) - timeIn
174
167
  })
175
168
  }
176
169
 
177
- devicesResult.push({
178
- device: d,
179
- from,
180
- to,
181
- groupByDay: true,
182
- geofences: geofencesData
170
+ geofencesData.push({
171
+ geofenceName: geofence.name,
172
+ days: dataByDay
183
173
  })
184
- } else {
174
+ }
175
+
176
+ devicesResult.push({
177
+ device: d,
178
+ from,
179
+ to,
180
+ groupByDay: true,
181
+ geofences: geofencesData
182
+ })
183
+ } else {
184
+ if (zoneInOutData.length > 0) {
185
185
  devicesResult.push({
186
186
  device: d,
187
187
  from,
@@ -281,6 +281,15 @@ function analyseAlerts (alerts, deviceRoute, userData, from, to) {
281
281
  }
282
282
  }
283
283
 
284
+ if (!zoneInOutData.length && userData.groupByDay) {
285
+ const geofenceIn = alerts.find(a => a.type === 'geofenceIn')
286
+ zoneInOutData.push({
287
+ distanceIn: geofenceIn ? calculateDistance(deviceRoute) : 0,
288
+ distanceOut: !geofenceIn ? calculateDistance(deviceRoute) : 0,
289
+ totalTime: to.getTime() - from.getTime()
290
+ })
291
+ }
292
+
284
293
  return zoneInOutData
285
294
  }
286
295