fleetmap-reports 1.0.950 → 1.0.952
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 +1 -1
- package/src/activity-report.js +14 -4
- package/src/fuelconsumption-report.js +19 -38
- package/src/kms-report.js +2 -25
- package/src/util/traccar.js +28 -0
- package/src/util/trips.js +4 -1
package/package.json
CHANGED
package/src/activity-report.js
CHANGED
|
@@ -17,6 +17,7 @@ const { devicesToProcess } = require('./util/device')
|
|
|
17
17
|
const { getDriverData } = require('./util/driver')
|
|
18
18
|
const { calculateConsumption } = require('./util/fuel')
|
|
19
19
|
const axios = require('axios')
|
|
20
|
+
const { getSummaryByDay } = require('./util/traccar')
|
|
20
21
|
|
|
21
22
|
const fileName = 'ActivityReport'
|
|
22
23
|
|
|
@@ -101,6 +102,12 @@ async function createActivityReportByDevice (from, to, userData, traccarInstance
|
|
|
101
102
|
const sliced = automaticReports.sliceArray(allDevices, 10)
|
|
102
103
|
await executeServerSide(allData, sliced, from, to, userData, allDevices.length)
|
|
103
104
|
} else {
|
|
105
|
+
let summaryByDay = []
|
|
106
|
+
if (userData.allWeek && userData.groupByDay) {
|
|
107
|
+
const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
|
|
108
|
+
summaryByDay = await getSummaryByDay(dates, userData, traccarInstance, allDevices, true)
|
|
109
|
+
}
|
|
110
|
+
|
|
104
111
|
let deviceCount = 0
|
|
105
112
|
const sliced = automaticReports.sliceArray(allDevices, 20)
|
|
106
113
|
for (const devices of sliced) {
|
|
@@ -113,7 +120,7 @@ async function createActivityReportByDevice (from, to, userData, traccarInstance
|
|
|
113
120
|
|
|
114
121
|
// Process report data
|
|
115
122
|
if (summary.length || trips.length) {
|
|
116
|
-
allData.devices = allData.devices.concat(await processDevices(from, to, devices, { summary, trips, route }, userData, traccarInstance))
|
|
123
|
+
allData.devices = allData.devices.concat(await processDevices(from, to, devices, { summaryByDay, summary, trips, route }, userData, traccarInstance))
|
|
117
124
|
}
|
|
118
125
|
deviceCount += devices.length
|
|
119
126
|
}
|
|
@@ -201,9 +208,12 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
|
|
|
201
208
|
})
|
|
202
209
|
}
|
|
203
210
|
} else {
|
|
211
|
+
const summaryByDay = data.summaryByDay.find(a => a.date.getTime() === date.getTime())
|
|
212
|
+
const summaryByDevice = summaryByDay.summary.find(a => a.deviceId === d.id)
|
|
213
|
+
|
|
204
214
|
const summaryCurrentDay = { date, deviceId: d.id }
|
|
205
215
|
summaryCurrentDay.engineHours = tripsByDay.reduce((a, b) => a + b.duration, 0)
|
|
206
|
-
summaryCurrentDay.distance = distance
|
|
216
|
+
summaryCurrentDay.distance = summaryByDevice.distance
|
|
207
217
|
summaryCurrentDay.averageSpeed = distance > 0 ? ((tripsByDay.reduce((a, b) => a + (b.averageSpeed * b.distance), 0)) / distance) : 0
|
|
208
218
|
summaryCurrentDay.maxSpeed = tripsByDay.reduce((a, b) => { return a > b.maxSpeed ? a : b.maxSpeed }, 0)
|
|
209
219
|
summaryCurrentDay.convertedSpentFuel = calculateConsumption(d, { route: routeByDay })
|
|
@@ -211,8 +221,8 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
|
|
|
211
221
|
summaryCurrentDay.startAddress = tripsByDay.length && tripsByDay[0].startAddress
|
|
212
222
|
summaryCurrentDay.endTime = tripsByDay.length && tripsByDay[tripsByDay.length - 1].endTime
|
|
213
223
|
summaryCurrentDay.endAddress = tripsByDay.length && tripsByDay[tripsByDay.length - 1].endAddress
|
|
214
|
-
summaryCurrentDay.startOdometer =
|
|
215
|
-
summaryCurrentDay.endOdometer =
|
|
224
|
+
summaryCurrentDay.startOdometer = summaryByDevice.startOdometer
|
|
225
|
+
summaryCurrentDay.endOdometer = summaryByDevice.endOdometer
|
|
216
226
|
summaryCurrentDay.startTimeIsOut = tripsByDay.some(t => t.startTimeIsOut)
|
|
217
227
|
summaryCurrentDay.endTimeIsOut = tripsByDay.some(t => t.endTimeIsOut)
|
|
218
228
|
summary.push(summaryCurrentDay)
|
|
@@ -2,12 +2,14 @@ const refuelingReport = require('./refueling-report')
|
|
|
2
2
|
const traccarHelper = require('./util/traccar')
|
|
3
3
|
const odoo = require('./util/odoo')
|
|
4
4
|
const { devicesToProcess } = require('./util/device')
|
|
5
|
-
const { getTranslations, convertToLocaleString, getLanguage, convertMS, formatNumber } = require('./util/utils')
|
|
5
|
+
const { getTranslations, convertToLocaleString, getLanguage, convertMS, formatNumber, getDates } = require('./util/utils')
|
|
6
6
|
const { getStyle } = require('./reportStyle')
|
|
7
7
|
const { getUserPartner } = require('fleetmap-partners')
|
|
8
8
|
const { addTable, headerFromUser } = require('./util/pdfDocument')
|
|
9
9
|
const jsPDF = require('jspdf')
|
|
10
10
|
const { useOdooFuelData, calculateConsumption } = require('./util/fuel')
|
|
11
|
+
const { getSummaryByDay } = require('./util/traccar')
|
|
12
|
+
const { getDataByDay } = require('./util/trips')
|
|
11
13
|
|
|
12
14
|
async function createFuelConsumptionReport (from, to, userData, traccar) {
|
|
13
15
|
console.log('Create FuelConsumption Report')
|
|
@@ -22,7 +24,9 @@ async function createFuelConsumptionReport (from, to, userData, traccar) {
|
|
|
22
24
|
|
|
23
25
|
const devices = devicesToProcess(userData)
|
|
24
26
|
|
|
25
|
-
const allInOne = await traccarHelper.getAllInOne(traccar, from, to, devices, true, true,
|
|
27
|
+
const allInOne = await traccarHelper.getAllInOne(traccar, from, to, devices, true, true, false, false)
|
|
28
|
+
const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
|
|
29
|
+
const summary = await getSummaryByDay(dates, userData, traccar, devices)
|
|
26
30
|
|
|
27
31
|
const fuelServicesData = []
|
|
28
32
|
if (devices.some(d => d.attributes.odooId)) {
|
|
@@ -38,56 +42,33 @@ async function createFuelConsumptionReport (from, to, userData, traccar) {
|
|
|
38
42
|
for (const d of devices) {
|
|
39
43
|
const trips = allInOne.trips.filter(t => t.deviceId === d.id)
|
|
40
44
|
const route = allInOne.route.filter(r => r.deviceId === d.id)
|
|
41
|
-
const stops = allInOne.stops.filter(s => s.deviceId === d.id)
|
|
42
45
|
const deviceFuelServices = fuelServicesData.filter(f => Number.parseInt(d.attributes.odooId) === f.vehicle_id[0])
|
|
43
46
|
|
|
44
47
|
if (trips.length > 0) {
|
|
45
48
|
const refuelingPositions = await refuelingReport.calculateRefuelingPositions(userData, d, { route, trips, fuelServices: deviceFuelServices })
|
|
46
|
-
const groupedRefuelingsByDay = refuelingPositions.reduce(
|
|
47
|
-
(entryMap, e) => entryMap.set(e.date.substring(0, 10), [...entryMap.get(e.date.substring(0, 10)) || [], e]),
|
|
48
|
-
new Map()
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
trips.forEach(t => { t.startDate = t.startTime.substring(0, 10) })
|
|
52
|
-
const groupedTripsByDay = trips.reduce(
|
|
53
|
-
(entryMap, e) => entryMap.set(e.startDate, [...entryMap.get(e.startDate) || [], e]),
|
|
54
|
-
new Map()
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
stops.forEach(s => { s.startDate = s.startTime.substring(0, 10) })
|
|
58
|
-
const groupedStopsByDay = stops.reduce(
|
|
59
|
-
(entryMap, e) => entryMap.set(e.startDate, [...entryMap.get(e.startDate) || [], e]),
|
|
60
|
-
new Map()
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
route.forEach(p => { p.startDate = p.fixTime.substring(0, 10) })
|
|
64
|
-
const groupedRouteByDay = route.reduce(
|
|
65
|
-
(entryMap, e) => entryMap.set(e.startDate, [...entryMap.get(e.startDate) || [], e]),
|
|
66
|
-
new Map()
|
|
67
|
-
)
|
|
68
|
-
|
|
69
49
|
const days = []
|
|
70
|
-
const
|
|
50
|
+
for (const date of dates) {
|
|
51
|
+
const { tripsByDay, routeByDay, refuelingPositionsByDay } = await getDataByDay(d, date, { trips, route, refuelingPositions }, userData, traccar)
|
|
52
|
+
const summaryByDay = summary.find(a => a.date === date).summary
|
|
53
|
+
const summaryByDevice = summaryByDay.find(a => a.deviceId === d.id)
|
|
71
54
|
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const dayRefueling = groupedRefuelingsByDay.get(day)
|
|
76
|
-
const distance = dayTrips.reduce((a, b) => a + b.distance, 0)
|
|
77
|
-
const spentFuel = calculateConsumption(d, { trips: dayTrips, stops: groupedStopsByDay.get(day), route: groupedRouteByDay.get(day) }, odooAvgConsumption)
|
|
55
|
+
const odooAvgConsumption = useOdooFuelData(d, route) ? getOdooAvgConsumption(date, refuelingPositions, trips) : 0
|
|
56
|
+
const distance = summaryByDevice.distance
|
|
57
|
+
const spentFuel = calculateConsumption(d, { trips: tripsByDay, stops: [], route: routeByDay }, odooAvgConsumption)
|
|
78
58
|
|
|
79
59
|
const dataRow = {
|
|
80
|
-
date
|
|
60
|
+
date,
|
|
81
61
|
distance,
|
|
82
62
|
spentFuel,
|
|
83
63
|
avgConsumption: useOdooFuelData(d, route) ? odooAvgConsumption : getCanAvgConsumption(distance, spentFuel),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
64
|
+
startOdometer: summaryByDevice.startOdometer,
|
|
65
|
+
endOdometer: summaryByDevice.endOdometer,
|
|
66
|
+
duration: tripsByDay.reduce((a, b) => a + b.duration, 0),
|
|
67
|
+
refueling: (refuelingPositionsByDay && refuelingPositionsByDay.length > 0) ? refuelingPositionsByDay.reduce((a, b) => a + b.diff, 0) : 0
|
|
87
68
|
}
|
|
88
69
|
|
|
89
70
|
days.push(dataRow)
|
|
90
|
-
}
|
|
71
|
+
}
|
|
91
72
|
|
|
92
73
|
if (days.length > 0) {
|
|
93
74
|
allData.devices.push({
|
package/src/kms-report.js
CHANGED
|
@@ -7,13 +7,14 @@ const {
|
|
|
7
7
|
} = require('./util/pdfDocument')
|
|
8
8
|
const { getUserPartner } = require('fleetmap-partners')
|
|
9
9
|
const traccar = require('./util/traccar')
|
|
10
|
-
const { getDates, getTranslations, isClientSide, executeServerSide
|
|
10
|
+
const { getDates, getTranslations, isClientSide, executeServerSide } = require('./util/utils')
|
|
11
11
|
const drivers = require('./util/driver')
|
|
12
12
|
const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay, checkTripsKms, getKms } = require('./util/trips')
|
|
13
13
|
const traccarHelper = require('./util/traccar')
|
|
14
14
|
const { devicesToProcess } = require('./util/device')
|
|
15
15
|
const { getDriverData } = require('./util/driver')
|
|
16
16
|
const automaticReports = require('./automaticReports')
|
|
17
|
+
const { getSummaryByDay } = require('./util/traccar')
|
|
17
18
|
|
|
18
19
|
const fileName = 'KmsReport'
|
|
19
20
|
|
|
@@ -34,30 +35,6 @@ async function createKmsReport (from, to, userData, traccarInstance) {
|
|
|
34
35
|
return reportData
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
async function getSummaryByDay (dates, userData, traccarInstance, allDevices) {
|
|
38
|
-
const days = []
|
|
39
|
-
let counter = 0
|
|
40
|
-
for (const date of dates) {
|
|
41
|
-
const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
|
|
42
|
-
const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
|
|
43
|
-
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
44
|
-
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
45
|
-
|
|
46
|
-
const {
|
|
47
|
-
summary
|
|
48
|
-
} = await traccar.getAllInOne(traccarInstance, startDate, endDate, allDevices, false, false, false, true, 0, allDevices.length, allDevices.length, allDevices.length, undefined, true)
|
|
49
|
-
|
|
50
|
-
counter = counter + 1
|
|
51
|
-
console.log(`PROGRESS_PERC:${counter / dates.length * 100}`)
|
|
52
|
-
days.push({
|
|
53
|
-
date,
|
|
54
|
-
summary
|
|
55
|
-
})
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return days
|
|
59
|
-
}
|
|
60
|
-
|
|
61
38
|
async function createKmsReportByDevice (from, to, userData, traccarInstance) {
|
|
62
39
|
const allDevices = devicesToProcess(userData)
|
|
63
40
|
|
package/src/util/traccar.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const automaticReports = require('../automaticReports')
|
|
2
|
+
const { convertFromUTC, isClientSide, convertFromLocal } = require('./utils')
|
|
2
3
|
|
|
3
4
|
async function getRoute (traccar, from, to, devices) {
|
|
4
5
|
const devicesToSlice = devices.slice()
|
|
@@ -128,9 +129,36 @@ async function getAllInOne (
|
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
async function getSummaryByDay (dates, userData, traccarInstance, allDevices, ignorePercentage = false) {
|
|
133
|
+
const days = []
|
|
134
|
+
let counter = 0
|
|
135
|
+
for (const date of dates) {
|
|
136
|
+
const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
|
|
137
|
+
const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
|
|
138
|
+
const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
|
|
139
|
+
const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
|
|
140
|
+
|
|
141
|
+
const {
|
|
142
|
+
summary
|
|
143
|
+
} = await getAllInOne(traccarInstance, startDate, endDate, allDevices, false, false, false, true, 0, allDevices.length, allDevices.length, allDevices.length, undefined, true)
|
|
144
|
+
|
|
145
|
+
counter = counter + 1
|
|
146
|
+
if (!ignorePercentage) {
|
|
147
|
+
console.log(`PROGRESS_PERC:${counter / dates.length * 100}`)
|
|
148
|
+
}
|
|
149
|
+
days.push({
|
|
150
|
+
date,
|
|
151
|
+
summary
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return days
|
|
156
|
+
}
|
|
157
|
+
|
|
131
158
|
exports.getRoute = getRoute
|
|
132
159
|
exports.getTrips = getTrips
|
|
133
160
|
exports.getStops = getStops
|
|
134
161
|
exports.getEvents = getEvents
|
|
135
162
|
exports.getSummary = getSummary
|
|
163
|
+
exports.getSummaryByDay = getSummaryByDay
|
|
136
164
|
exports.getAllInOne = getAllInOne
|
package/src/util/trips.js
CHANGED
|
@@ -125,7 +125,10 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
const routeByDay = data.route ? data.route.filter(p => (new Date(p.fixTime) > startDate && new Date(p.fixTime) < endDate)) : []
|
|
128
|
-
|
|
128
|
+
|
|
129
|
+
const refuelingPositionsByDay = data.refuelingPositions ? data.refuelingPositions.filter(p => (new Date(p.date) > startDate && new Date(p.date) < endDate)) : []
|
|
130
|
+
|
|
131
|
+
return { tripsByDay, routeByDay, refuelingPositionsByDay }
|
|
129
132
|
}
|
|
130
133
|
|
|
131
134
|
function getKms (trips) {
|