fleetmap-reports 1.0.950 → 1.0.951
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/fuelconsumption-report.js +19 -38
- package/src/kms-report.js +2 -25
- package/src/util/traccar.js +26 -0
- package/src/util/trips.js +4 -1
package/package.json
CHANGED
|
@@ -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,34 @@ async function getAllInOne (
|
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
async function getSummaryByDay (dates, userData, traccarInstance, allDevices) {
|
|
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
|
+
console.log(`PROGRESS_PERC:${counter / dates.length * 100}`)
|
|
147
|
+
days.push({
|
|
148
|
+
date,
|
|
149
|
+
summary
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return days
|
|
154
|
+
}
|
|
155
|
+
|
|
131
156
|
exports.getRoute = getRoute
|
|
132
157
|
exports.getTrips = getTrips
|
|
133
158
|
exports.getStops = getStops
|
|
134
159
|
exports.getEvents = getEvents
|
|
135
160
|
exports.getSummary = getSummary
|
|
161
|
+
exports.getSummaryByDay = getSummaryByDay
|
|
136
162
|
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) {
|