fleetmap-reports 1.0.905 → 1.0.907

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.905",
3
+ "version": "1.0.907",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,7 +1,7 @@
1
1
  const automaticReports = require('./automaticReports')
2
2
  const {
3
3
  convertMS, getDates, getTranslations, weekDaySelected, convertToLocaleString, isClientSide,
4
- getLanguage
4
+ getLanguage, convertFromUTC, convertFromLocal
5
5
  } = require('./util/utils')
6
6
  const jsPDF = require('jspdf')
7
7
  require('jspdf-autotable')
@@ -12,7 +12,7 @@ const {
12
12
  const { getStyle } = require('./reportStyle')
13
13
  const { getUserPartner } = require('fleetmap-partners')
14
14
  const traccar = require('./util/traccar')
15
- const { isInsideTimetable, isPartialInsideTimetable, calculateTrip } = require('./util/trips')
15
+ const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, calculatePartialTrip } = require('./util/trips')
16
16
  const { devicesToProcess } = require('./util/device')
17
17
  const { getDriverData } = require('./util/driver')
18
18
  const { calculateConsumption } = require('./util/fuel')
@@ -157,6 +157,14 @@ async function createActivityReportByDriver (from, to, userData, traccarInstance
157
157
  return allData
158
158
  }
159
159
 
160
+ function checkTripsPartialInsideDate (date, userData, tripsByDay, deviceRoute) {
161
+ const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
162
+ const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
163
+ const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
164
+ const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
165
+ tripsByDay.forEach(t => calculatePartialTrip(startDate, endDate, deviceRoute, t))
166
+ }
167
+
160
168
  function processDevices (from, to, devices, data, userData) {
161
169
  const devicesResult = []
162
170
 
@@ -180,8 +188,10 @@ function processDevices (from, to, devices, data, userData) {
180
188
  for (const date of dates) {
181
189
  const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
182
190
  const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
191
+ const tripsByDay = trips.filter(t => new Date(t.endTime) > fromByDay && new Date(t.startTime) < toByDay).map(t => { return { ...t } })
192
+
193
+ checkTripsPartialInsideDate(date, userData, tripsByDay, deviceRoute)
183
194
 
184
- const tripsByDay = trips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.startTime) < toByDay))
185
195
  const routeByDay = deviceRoute.filter(p => (new Date(p.fixTime) > fromByDay && new Date(p.fixTime) < toByDay))
186
196
  const distance = tripsByDay.reduce((a, b) => a + b.distance, 0)
187
197
 
@@ -201,7 +211,9 @@ function processDevices (from, to, devices, data, userData) {
201
211
  startTime: tripsByDay.length && tripsByDay[0].startTime,
202
212
  startAddress: tripsByDay.length && tripsByDay[0].startAddress,
203
213
  endTime: tripsByDay.length && tripsByDay[tripsByDay.length - 1].endTime,
204
- endAddress: tripsByDay.length && tripsByDay[tripsByDay.length - 1].endAddress
214
+ endAddress: tripsByDay.length && tripsByDay[tripsByDay.length - 1].endAddress,
215
+ startTimeIsOut: tripsByDay.some(t => t.startTimeIsOut),
216
+ endTimeIsOut: tripsByDay.some(t => t.endTimeIsOut)
205
217
  })
206
218
  }
207
219
  } else {
@@ -217,6 +229,8 @@ function processDevices (from, to, devices, data, userData) {
217
229
  summaryCurrentDay.endAddress = tripsByDay.length && tripsByDay[tripsByDay.length - 1].endAddress
218
230
  summaryCurrentDay.startOdometer = tripsByDay.length ? tripsByDay[0].startOdometer : 0
219
231
  summaryCurrentDay.endOdometer = tripsByDay.length ? tripsByDay[tripsByDay.length - 1].endOdometer : 0
232
+ summaryCurrentDay.startTimeIsOut = tripsByDay.some(t => t.startTimeIsOut)
233
+ summaryCurrentDay.endTimeIsOut = tripsByDay.some(t => t.endTimeIsOut)
220
234
  summary.push(summaryCurrentDay)
221
235
  }
222
236
  }
package/src/util/trips.js CHANGED
@@ -5,7 +5,6 @@ const minDistance = 0
5
5
  const minAvgSpeed = 0
6
6
 
7
7
  function checkTripsKms (traccarInstance, from, to, devices, data) {
8
- console.log('checkTripsKms')
9
8
  const trips = data.trips.filter(t => t.distance === minDistance && t.averageSpeed > minAvgSpeed)
10
9
  if (trips.length > 0) {
11
10
  // Vehicles with imported positions. calculate trip distance with route positions
@@ -31,64 +30,67 @@ function checkTripsKms (traccarInstance, from, to, devices, data) {
31
30
  }
32
31
  }
33
32
 
34
- function isPartialInsideTimetable (t, userData, route) {
33
+ function calculatePartialTrip (startDate, endDate, route, t) {
34
+ let isPartialInside = false
35
35
  const tripStart = new Date(t.startTime)
36
36
  const tripEnd = new Date(t.endTime)
37
37
 
38
- let isPartialInside = false
38
+ if (startDate.getTime() > endDate.getTime()) {
39
+ if (tripStart.getTime() < endDate.getTime() &&
40
+ tripEnd.getTime() > endDate.getTime()) {
41
+ // Trip starts inside time period and ends outside time period
42
+ const routeInside = route.filter(p => new Date(p.fixTime).getTime() < new Date(endDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
43
+ updateTrip(t, routeInside)
44
+ t.endTime = endDate.toISOString().replace('Z', '+0000')
45
+ t.endTimeIsOut = true
46
+ isPartialInside = true
47
+ }
48
+
49
+ if (tripStart.getTime() < startDate.getTime() &&
50
+ new Date(t.endTime).getTime() > startDate.getTime()) {
51
+ // Trip starts outside time period and ends inside time period
52
+ const routeInside = route.filter(p => new Date(p.fixTime).getTime() > startDate.getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
53
+ updateTrip(t, routeInside)
54
+ t.startTime = startDate.toISOString().replace('Z', '+0000')
55
+ t.startTimeIsOut = true
56
+ isPartialInside = true
57
+ }
58
+ } else {
59
+ if (tripStart.getTime() < startDate.getTime() &&
60
+ tripEnd.getTime() > startDate.getTime()) {
61
+ // Trip starts outside time period and ends inside time period
62
+ const routeInside = route.filter(p => new Date(p.fixTime).getTime() > new Date(startDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
63
+ updateTrip(t, routeInside)
64
+ t.startTime = startDate.toISOString().replace('Z', '+0000')
65
+ t.startTimeIsOut = true
66
+ isPartialInside = true
67
+ }
68
+
69
+ if (tripStart.getTime() < endDate.getTime() &&
70
+ tripEnd.getTime() > endDate.getTime()) {
71
+ // Trip starts inside time period and ends outside time period
72
+ const routeInside = route.filter(p => new Date(p.fixTime).getTime() < endDate.getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
73
+ updateTrip(t, routeInside)
74
+ t.endTime = endDate.toISOString().replace('Z', '+0000')
75
+ t.endTimeIsOut = true
76
+ isPartialInside = true
77
+ }
78
+ }
79
+ return isPartialInside
80
+ }
39
81
 
40
- if (weekDaySelected(tripStart, userData.weekDays)) {
82
+ function isPartialInsideTimetable (t, userData, route) {
83
+ if (weekDaySelected(new Date(t.startTime), userData.weekDays)) {
41
84
  const startDateLocal = new Date(convertFromUTC(t.startTime, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
42
85
  const endDateLocal = new Date(convertFromUTC(t.startTime, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
43
86
 
44
87
  const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
45
88
  const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
46
89
 
47
- if (startDate.getTime() > endDate.getTime()) {
48
- // Trip starts outside time period and ends inside time period
49
- if (tripStart.getTime() < endDate.getTime() &&
50
- tripEnd.getTime() > endDate.getTime()) {
51
- // Trip starts inside time period and ends outside time period
52
- const routeInside = route.filter(p => new Date(p.fixTime).getTime() < new Date(endDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
53
- updateTrip(t, routeInside)
54
- t.endTime = endDate.toISOString().replace('Z', '+0000')
55
- t.endTimeIsOut = true
56
- isPartialInside = true
57
- }
58
-
59
- if (tripStart.getTime() < startDate.getTime() &&
60
- new Date(t.endTime).getTime() > startDate.getTime()) {
61
- // Trip starts outside time period and ends inside time period
62
- const routeInside = route.filter(p => new Date(p.fixTime).getTime() > startDate.getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
63
- updateTrip(t, routeInside)
64
- t.startTime = startDate.toISOString().replace('Z', '+0000')
65
- t.startTimeIsOut = true
66
- isPartialInside = true
67
- }
68
- } else {
69
- if (tripStart.getTime() < startDate.getTime() &&
70
- tripEnd.getTime() > startDate.getTime()) {
71
- // Trip starts outside time period and ends inside time period
72
- const routeInside = route.filter(p => new Date(p.fixTime).getTime() > new Date(startDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
73
- updateTrip(t, routeInside)
74
- t.startTime = startDate.toISOString().replace('Z', '+0000')
75
- t.startTimeIsOut = true
76
- isPartialInside = true
77
- }
78
-
79
- if (tripStart.getTime() < endDate.getTime() &&
80
- tripEnd.getTime() > endDate.getTime()) {
81
- // Trip starts inside time period and ends outside time period
82
- const routeInside = route.filter(p => new Date(p.fixTime).getTime() < endDate.getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
83
- updateTrip(t, routeInside)
84
- t.endTime = endDate.toISOString().replace('Z', '+0000')
85
- t.endTimeIsOut = true
86
- isPartialInside = true
87
- }
88
- }
90
+ return calculatePartialTrip(startDate, endDate, route, t)
89
91
  }
90
92
 
91
- return isPartialInside
93
+ return false
92
94
  }
93
95
 
94
96
  function isInsideTimetable (t, userData) {
@@ -97,7 +99,8 @@ function isInsideTimetable (t, userData) {
97
99
 
98
100
  function updateTrip (t, route) {
99
101
  if (!route[route.length - 1]) { return }
100
- const distance = route[route.length - 1].attributes.totalDistance - route[0].attributes.totalDistance
102
+ route = route.filter(p => p.attributes.ignition)
103
+ const distance = calculateDistance(route, false) * 1000
101
104
  t.distance = distance
102
105
  t.duration = new Date(route[route.length - 1].fixTime).getTime() - new Date(route[0].fixTime).getTime()
103
106
  t.maxSpeed = route.reduce((a, b) => Math.max(a, b.speed), 0)
@@ -159,6 +162,7 @@ function calculateStopDuration (stop) {
159
162
  exports.checkTripsKms = checkTripsKms
160
163
  exports.isInsideTimetable = isInsideTimetable
161
164
  exports.isPartialInsideTimetable = isPartialInsideTimetable
165
+ exports.calculatePartialTrip = calculatePartialTrip
162
166
  exports.calculateTrip = calculateTrip
163
167
  exports.getTripIdleTime = getTripIdleTime
164
168
  exports.calculateStopDuration = calculateStopDuration
package/src/util/utils.js CHANGED
@@ -215,13 +215,13 @@ exports.convertFromLocal = (value, timezone) => {
215
215
  }
216
216
 
217
217
  function weekDaySelected (date, weekDays) {
218
- return (date.getDay() === 0 && weekDays.sunday) ||
218
+ return !weekDays || ((date.getDay() === 0 && weekDays.sunday) ||
219
219
  (date.getDay() === 1 && weekDays.monday) ||
220
220
  (date.getDay() === 2 && weekDays.tuesday) ||
221
221
  (date.getDay() === 3 && weekDays.wednesday) ||
222
222
  (date.getDay() === 4 && weekDays.thursday) ||
223
223
  (date.getDay() === 5 && weekDays.friday) ||
224
- (date.getDay() === 6 && weekDays.saturday)
224
+ (date.getDay() === 6 && weekDays.saturday))
225
225
  }
226
226
 
227
227
  exports.getImgFromUrl = getImgFromUrl