fleetmap-reports 1.0.263 → 1.0.264

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.
@@ -1,11 +1,13 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
3
  <component name="ChangeListManager">
4
- <list default="true" id="eb665c86-c893-4333-bd2a-721dc27980b9" name="Changes" comment="fix activity report by driver">
4
+ <list default="true" id="eb665c86-c893-4333-bd2a-721dc27980b9" name="Changes" comment="activity report by driver grouped by day">
5
5
  <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
6
6
  <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
7
7
  <change beforePath="$PROJECT_DIR$/src/activity-report.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/activity-report.js" afterDir="false" />
8
8
  <change beforePath="$PROJECT_DIR$/src/index.test.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.test.js" afterDir="false" />
9
+ <change beforePath="$PROJECT_DIR$/src/kms-report.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/kms-report.js" afterDir="false" />
10
+ <change beforePath="$PROJECT_DIR$/src/trip-report.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/trip-report.js" afterDir="false" />
9
11
  </list>
10
12
  <option name="SHOW_DIALOG" value="false" />
11
13
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -219,7 +221,8 @@
219
221
  <workItem from="1640866364417" duration="67000" />
220
222
  <workItem from="1640866782794" duration="123000" />
221
223
  <workItem from="1640866964393" duration="1022000" />
222
- <workItem from="1640870147277" duration="6811000" />
224
+ <workItem from="1640870147277" duration="8236000" />
225
+ <workItem from="1641321068227" duration="13602000" />
223
226
  </task>
224
227
  <task id="LOCAL-00001" summary="Fix getStyle">
225
228
  <created>1636983717385</created>
@@ -361,7 +364,14 @@
361
364
  <option name="project" value="LOCAL" />
362
365
  <updated>1640872780968</updated>
363
366
  </task>
364
- <option name="localTasksCounter" value="21" />
367
+ <task id="LOCAL-00021" summary="activity report by driver grouped by day">
368
+ <created>1640878664617</created>
369
+ <option name="number" value="00021" />
370
+ <option name="presentableId" value="LOCAL-00021" />
371
+ <option name="project" value="LOCAL" />
372
+ <updated>1640878664617</updated>
373
+ </task>
374
+ <option name="localTasksCounter" value="22" />
365
375
  <servers />
366
376
  </component>
367
377
  <component name="TypeScriptGeneratedFilesManager">
@@ -399,6 +409,7 @@
399
409
  <MESSAGE value="timezone - check if it's running on client side" />
400
410
  <MESSAGE value="calculate avg speed" />
401
411
  <MESSAGE value="fix activity report by driver" />
402
- <option name="LAST_COMMIT_MESSAGE" value="fix activity report by driver" />
412
+ <MESSAGE value="activity report by driver grouped by day" />
413
+ <option name="LAST_COMMIT_MESSAGE" value="activity report by driver grouped by day" />
403
414
  </component>
404
415
  </project>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.263",
3
+ "version": "1.0.264",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -87,6 +87,9 @@ async function createActivityReportByDevice(from, to){
87
87
  //Get report data from traccar
88
88
  devicesToProcess.sort((a, b) => (a.name > b.name) ? 1 : -1)
89
89
 
90
+ // use the km report to calculate kms
91
+ const kmsReport = await createKmsReport(from, to, userData, traccarInstance)
92
+
90
93
  let data = []
91
94
  if(userData.groupByDay) {
92
95
  const dates = getDates(from, to)
@@ -110,9 +113,33 @@ async function createActivityReportByDevice(from, to){
110
113
  const fromByDay = new Date(new Date(date).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
111
114
  const toByDay = new Date(new Date(date).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
112
115
 
113
- const summary = await traccar.getSummary(traccarInstance, fromByDay, toByDay, devicesToProcess)
114
- summary.forEach(s => s.date = date)
115
- data = data.concat(summary)
116
+ if(fromByDay.getTime() < toByDay.getTime()) {
117
+ const summary = await traccar.getSummary(traccarInstance, new Date(fromByDay.toUTCString()), new Date(toByDay.toUTCString()), devicesToProcess)
118
+ summary.forEach(s => s.date = date)
119
+ data = data.concat(summary)
120
+ } else {
121
+ const dayStart = new Date(new Date(date).toISOString().split('T')[0] + ' 00:00:00')
122
+ const dayEnd = new Date(new Date(date).toISOString().split('T')[0] + ' 23:59:59')
123
+
124
+ const summaryStart = await traccar.getSummary(traccarInstance, new Date(dayStart.toUTCString()), new Date(toByDay.toUTCString()), devicesToProcess)
125
+ const summaryEnd = await traccar.getSummary(traccarInstance, new Date(fromByDay.toUTCString()), new Date(dayEnd.toUTCString()), devicesToProcess)
126
+
127
+ const summary = []
128
+ summaryStart.forEach(s => {
129
+ const sEnd = summaryEnd.find(a => s.deviceId === a.deviceId)
130
+ summary.push({
131
+ date: date,
132
+ deviceId: s.deviceId,
133
+ averageSpeed: (s.averageSpeed + sEnd.averageSpeed) / 2,
134
+ distance: s.distance + sEnd.distance,
135
+ engineHours: s.engineHours + sEnd.engineHours,
136
+ maxSpeed: s.maxSpeed > sEnd.maxSpeed ? s.maxSpeed : sEnd.maxSpeed,
137
+ endOdometer: 0,
138
+ startOdometer: 0
139
+ })
140
+ })
141
+ data = data.concat(summary)
142
+ }
116
143
  }else {
117
144
  data = data.concat({date: date})
118
145
  }
@@ -122,9 +149,6 @@ async function createActivityReportByDevice(from, to){
122
149
  data = await traccar.getSummary(traccarInstance, from, to, devicesToProcess)
123
150
  }
124
151
 
125
- // use the km report to calculate kms
126
- const kmsReport = await createKmsReport(from, to, userData, traccarInstance)
127
-
128
152
  console.log('Summary:' + data.length)
129
153
 
130
154
  //Process report data
package/src/kms-report.js CHANGED
@@ -7,6 +7,7 @@ const {getUserPartner} = require("fleetmap-partners");
7
7
  const traccar = require("./util/traccar");
8
8
  const {getDates} = require("./util/utils");
9
9
  const trips = require("./util/trips");
10
+ const drivers = require("./util/driver");
10
11
 
11
12
 
12
13
  let traccarInstance
@@ -39,13 +40,90 @@ async function createKmsReportByDevice(from, to) {
39
40
  }
40
41
 
41
42
  async function createKmsReportByDriver(from, to) {
43
+ const deviceIds = await drivers.devicesByDriver(traccarInstance, from, to, userData.drivers, userData.devices)
44
+ console.log(deviceIds.length)
42
45
 
46
+ let tripsData = []
47
+ if(deviceIds.length > 0) {
48
+ const response = await traccarInstance.reports.reportsTripsGet(from, to, deviceIds)
49
+ tripsData = response.data
50
+ }
51
+
52
+ const allData = {
53
+ drivers: []
54
+ }
55
+
56
+ allData.drivers = processDrivers(from, to, userData.drivers, tripsData)
57
+
58
+ return allData
43
59
  }
44
60
 
45
61
  async function createKmsReportByGroup(from, to) {
46
62
 
47
63
  }
48
64
 
65
+ function processDrivers(from, to, drivers, data) {
66
+ console.log(data)
67
+ const driversResult = []
68
+ drivers.forEach(d => {
69
+ const trips = data.filter(t => t.driverUniqueId === d.uniqueId)
70
+ if (trips.length > 0) {
71
+ const driverData = {
72
+ driver: d
73
+ }
74
+ if(userData.groupByDay) {
75
+ driverData.days = []
76
+ const dates = getDates(from, to)
77
+ for(const date of dates){
78
+ if(userData.allWeek){
79
+ const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
80
+ const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
81
+
82
+ const tripsByDay = trips.filter(t => new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay)
83
+
84
+ driverData.days.push({
85
+ date: date,
86
+ kms: tripsByDay.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
87
+ })
88
+ } else {
89
+ if((date.getDay() === 0 && userData.weekDays.sunday) ||
90
+ (date.getDay() === 1 && userData.weekDays.monday) ||
91
+ (date.getDay() === 2 && userData.weekDays.tuesday) ||
92
+ (date.getDay() === 3 && userData.weekDays.wednesday) ||
93
+ (date.getDay() === 4 && userData.weekDays.thursday) ||
94
+ (date.getDay() === 5 && userData.weekDays.friday) ||
95
+ (date.getDay() === 6 && userData.weekDays.saturday)) {
96
+
97
+ const fromByDay = new Date(new Date(date).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
98
+ const toByDay = new Date(new Date(date).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
99
+
100
+ const tripsByDay = trips.filter(t => new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay)
101
+
102
+ driverData.days.push({
103
+ date: date,
104
+ kms: tripsByDay.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
105
+ })
106
+ }else {
107
+ driverData.days.push({
108
+ date: date,
109
+ kms: 0
110
+ })
111
+ }
112
+ }
113
+ }
114
+ } else {
115
+ driverData.summary = {
116
+ distance: trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
117
+ }
118
+ }
119
+ driversResult.push(driverData)
120
+ }
121
+ })
122
+
123
+ return driversResult
124
+ }
125
+
126
+
49
127
  function processDevices(from, to, devices, route, trips) {
50
128
  const devicesResult = []
51
129
 
@@ -471,7 +471,12 @@ function isInsideTimetable(t, userData){
471
471
  console.log(tripStart, startDate, endDate)
472
472
 
473
473
  //Trips inside time period
474
- return tripStart.getTime() > startDate.getTime() && tripEnd.getTime() < endDate.getTime()
474
+ if(startDate.getTime() < endDate.getTime()) {
475
+ return tripStart.getTime() > startDate.getTime() && tripEnd.getTime() < endDate.getTime()
476
+ } else {
477
+ return (tripStart.getTime() < endDate.getTime() && tripEnd.getTime() < endDate.getTime()) ||
478
+ (tripStart.getTime() > startDate.getTime())
479
+ }
475
480
  }
476
481
 
477
482
  return false