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.
- package/.idea/workspace.xml +15 -4
- package/package.json +1 -1
- package/src/activity-report.js +30 -6
- package/src/kms-report.js +78 -0
- package/src/trip-report.js +6 -1
package/.idea/workspace.xml
CHANGED
|
@@ -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="
|
|
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="
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
package/src/activity-report.js
CHANGED
|
@@ -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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
package/src/trip-report.js
CHANGED
|
@@ -471,7 +471,12 @@ function isInsideTimetable(t, userData){
|
|
|
471
471
|
console.log(tripStart, startDate, endDate)
|
|
472
472
|
|
|
473
473
|
//Trips inside time period
|
|
474
|
-
|
|
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
|