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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.950",
3
+ "version": "1.0.951",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -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, true, false)
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 keys = Array.from(groupedTripsByDay.keys())
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
- keys.forEach(day => {
73
- const odooAvgConsumption = useOdooFuelData(d, route) ? getOdooAvgConsumption(day, refuelingPositions, trips) : 0
74
- const dayTrips = groupedTripsByDay.get(day)
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: day,
60
+ date,
81
61
  distance,
82
62
  spentFuel,
83
63
  avgConsumption: useOdooFuelData(d, route) ? odooAvgConsumption : getCanAvgConsumption(distance, spentFuel),
84
- endOdometer: dayTrips.slice(-1)[0].endOdometer,
85
- duration: dayTrips.reduce((a, b) => a + b.duration, 0),
86
- refueling: (dayRefueling && dayRefueling.length > 0) ? dayRefueling.reduce((a, b) => a + b.diff, 0) : 0
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, convertFromUTC, convertFromLocal } = require('./util/utils')
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
 
@@ -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
- return { tripsByDay, routeByDay }
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) {