fleetmap-reports 1.0.937 → 1.0.939

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.937",
3
+ "version": "1.0.939",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -12,7 +12,7 @@ const {
12
12
  const { getStyle } = require('./reportStyle')
13
13
  const { getUserPartner } = require('fleetmap-partners')
14
14
  const traccar = require('./util/traccar')
15
- const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay } = require('./util/trips')
15
+ const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay, getKms } = require('./util/trips')
16
16
  const { devicesToProcess } = require('./util/device')
17
17
  const { getDriverData } = require('./util/driver')
18
18
  const { calculateConsumption } = require('./util/fuel')
@@ -178,8 +178,7 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
178
178
  const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
179
179
  for (const date of dates) {
180
180
  const { tripsByDay, routeByDay } = await getDataByDay(d, date, { trips, route: deviceRoute }, userData, traccarInstance)
181
-
182
- const distance = tripsByDay.reduce((a, b) => a + b.distance, 0)
181
+ const distance = getKms(tripsByDay)
183
182
  if (!userData.allWeek && userData.weekDays && userData.dayHours) {
184
183
  if (weekDaySelected(date, userData.weekDays)) {
185
184
  summary.push({
@@ -222,7 +221,7 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
222
221
  } else {
223
222
  if (!userData.allWeek && userData.weekDays && userData.dayHours) {
224
223
  const trips = deviceTrips.filter(t => userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, deviceRoute))
225
- const distance = trips.reduce((a, b) => a + b.distance, 0)
224
+ const distance = getKms(trips)
226
225
  summary.push({
227
226
  deviceId: d.id,
228
227
  averageSpeed: distance > 0 ? ((trips.reduce((a, b) => a + (b.averageSpeed * b.distance), 0)) / distance) : 0,
@@ -244,7 +243,7 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
244
243
  if (summary.length) {
245
244
  summary.forEach(s => {
246
245
  s.engineHours = deviceTrips.reduce((a, b) => a + b.duration, 0)
247
- s.distance = deviceTrips.reduce((a, b) => a + b.distance, 0)
246
+ s.distance = getKms(deviceTrips)
248
247
  s.convertedSpentFuel = calculateConsumption(d, { route: deviceRoute, summary: s })
249
248
  s.startTime = deviceTrips.length && deviceTrips[0].startTime
250
249
  s.startAddress = deviceTrips.length && deviceTrips[0].startAddress
package/src/kms-report.js CHANGED
@@ -9,7 +9,7 @@ const { getUserPartner } = require('fleetmap-partners')
9
9
  const traccar = require('./util/traccar')
10
10
  const { getDates, getTranslations, isClientSide, executeServerSide } = require('./util/utils')
11
11
  const drivers = require('./util/driver')
12
- const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay, checkTripsKms } = require('./util/trips')
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')
@@ -178,10 +178,9 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
178
178
  const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
179
179
  const days = await Promise.all(dates.map(async date => {
180
180
  const { tripsByDay } = await getDataByDay(d, date, { trips }, userData, traccarInstance)
181
- const odometerKms = tripsByDay.length > 0 ? tripsByDay[tripsByDay.length - 1].endOdometer - tripsByDay[0].startOdometer : 0
182
181
  return {
183
182
  date,
184
- kms: odometerKms > 0 ? odometerKms : tripsByDay.reduce((a, b) => a + b.distance, 0)
183
+ kms: getKms(tripsByDay)
185
184
  }
186
185
  }))
187
186
 
@@ -193,13 +192,12 @@ async function processDevices (from, to, devices, data, userData, traccarInstanc
193
192
  })
194
193
  }
195
194
  } else {
196
- const odometerKms = trips.length > 0 ? trips[trips.length - 1].endOdometer - trips[0].startOdometer : 0
197
195
  devicesResult.push({
198
196
  device: d,
199
197
  summary: {
200
198
  startOdometer: trips.length ? trips[0].startOdometer : 0,
201
199
  endOdometer: trips.length ? trips[trips.length - 1].endOdometer : 0,
202
- distance: odometerKms > 0 ? odometerKms : trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
200
+ distance: getKms(trips)
203
201
  }
204
202
  })
205
203
  }
@@ -2,7 +2,11 @@ const automaticReports = require('../automaticReports')
2
2
  const traccarHelper = require('../util/traccar')
3
3
  const { getUncompletedTrip } = require('../util/trips')
4
4
  const { getEndTripMessages, getCanDriverStyleMessages, parseEndTripMessage, parseCanDriverStyleMessage } = require('../util/xpert')
5
- const { calculateDistance } = require('../util/utils')
5
+ const { calculateDistance, getTranslations, getLanguage } = require('../util/utils')
6
+ const { addTable } = require('../util/pdfDocument')
7
+ const jsPDF = require('jspdf')
8
+ const { getStyle } = require('../reportStyle')
9
+ const { getUserPartner } = require('fleetmap-partners')
6
10
 
7
11
  async function createPerformanceReport (from, to, userData, traccar) {
8
12
  const reportData = []
@@ -215,7 +219,41 @@ function calculateRPMSections (route, min, max) {
215
219
  }
216
220
 
217
221
  function exportPerformanceReportToPDF (userData, reportData) {
222
+ const timezone = userData.user.attributes.timezone
223
+ const translations = getTranslations(userData)
224
+ const lang = getLanguage(userData)
225
+
226
+ const headers = [
227
+ translations.report.vehicle,
228
+ 'Totale Utilisation',
229
+ 'Conduite',
230
+ 'Ralenti',
231
+ 'Totale (L)',
232
+ 'Conduite (L)',
233
+ 'Ralenti (L)',
234
+ 'Conduite (Km)',
235
+ 'Économique',
236
+ 'Économique (L)',
237
+ 'Économique (Km)',
238
+ 'Cruise Control',
239
+ 'Cruise Control (L)',
240
+ 'Cruise Control (Km)',
241
+ 'Tour moteur élevé',
242
+ 'Accéleration brusque (Sum)',
243
+ 'Freinage brusque (Sum)',
244
+ 'Virages brusque'
245
+ ]
246
+
247
+ const data = []
248
+ reportData.devices.forEach(d => {
218
249
 
250
+ })
251
+
252
+ const doc = new jsPDF.jsPDF('l')
253
+ const style = getStyle(getUserPartner(userData.user))
254
+
255
+ addTable(doc, headers, data, footValues, style)
256
+ return doc
219
257
  }
220
258
 
221
259
  function exportPerformanceReportToExcel (userData, reportData) {
package/src/util/trips.js CHANGED
@@ -45,7 +45,7 @@ async function calculatePartialTrip (device, startDate, endDate, route, t, tracc
45
45
  route = allInOneData.route
46
46
  }
47
47
  const routeInside = route.filter(p => new Date(p.fixTime).getTime() < new Date(endDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
48
- updateTrip(t, routeInside)
48
+ updateTrip(device, t, routeInside)
49
49
  t.endTime = endDate.toISOString().replace('Z', '+0000')
50
50
  t.endTimeIsOut = true
51
51
  isPartialInside = true
@@ -59,7 +59,7 @@ async function calculatePartialTrip (device, startDate, endDate, route, t, tracc
59
59
  route = allInOneData.route
60
60
  }
61
61
  const routeInside = route.filter(p => new Date(p.fixTime).getTime() > startDate.getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
62
- updateTrip(t, routeInside)
62
+ updateTrip(device, t, routeInside)
63
63
  t.startTime = startDate.toISOString().replace('Z', '+0000')
64
64
  t.startTimeIsOut = true
65
65
  isPartialInside = true
@@ -73,7 +73,7 @@ async function calculatePartialTrip (device, startDate, endDate, route, t, tracc
73
73
  route = allInOneData.route
74
74
  }
75
75
  const routeInside = route.filter(p => new Date(p.fixTime).getTime() > new Date(startDate.toUTCString()).getTime() && new Date(p.fixTime).getTime() < new Date(t.endTime).getTime() && t.deviceId === p.deviceId)
76
- updateTrip(t, routeInside)
76
+ updateTrip(device, t, routeInside)
77
77
  t.startTime = startDate.toISOString().replace('Z', '+0000')
78
78
  t.startTimeIsOut = true
79
79
  isPartialInside = true
@@ -87,7 +87,7 @@ async function calculatePartialTrip (device, startDate, endDate, route, t, tracc
87
87
  route = allInOneData.route
88
88
  }
89
89
  const routeInside = route.filter(p => new Date(p.fixTime).getTime() < endDate.getTime() && new Date(p.fixTime).getTime() > new Date(t.startTime).getTime() && t.deviceId === p.deviceId)
90
- updateTrip(t, routeInside)
90
+ updateTrip(device, t, routeInside)
91
91
  t.endTime = endDate.toISOString().replace('Z', '+0000')
92
92
  t.endTimeIsOut = true
93
93
  isPartialInside = true
@@ -129,11 +129,16 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
129
129
  return { tripsByDay, routeByDay }
130
130
  }
131
131
 
132
+ function getKms (trips) {
133
+ const odometerKms = trips.length > 0 ? trips[trips.length - 1].endOdometer - trips[0].startOdometer : 0
134
+ return odometerKms > 0 ? odometerKms : trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
135
+ }
136
+
132
137
  function isInsideTimetable (t, userData) {
133
138
  return isInside(t.startTime, t.endTime, userData)
134
139
  }
135
140
 
136
- function updateTrip (t, route) {
141
+ function updateTrip (device, t, route) {
137
142
  if (!route[route.length - 1]) { return }
138
143
  route = route.filter(p => p.attributes.ignition)
139
144
  const distance = calculateDistance(route, false) * 1000
@@ -141,6 +146,8 @@ function updateTrip (t, route) {
141
146
  t.duration = new Date(route[route.length - 1].fixTime).getTime() - new Date(route[0].fixTime).getTime()
142
147
  t.maxSpeed = route.reduce((a, b) => Math.max(a, b.speed), 0)
143
148
  t.averageSpeed = distance > 0 ? ((route.reduce((a, b) => a + b.speed, 0)) / route.length) : 0
149
+ t.startOdometer = !device.attributes['report.ignoreOdometer'] && route[0].attributes.odometer ? route[0].attributes.odometer : route[0].attributes.totalDistance
150
+ t.endOdometer = !device.attributes['report.ignoreOdometer'] && route[route.length - 1].attributes.odometer ? route[route.length - 1].attributes.odometer : route[route.length - 1].attributes.totalDistance
144
151
  }
145
152
 
146
153
  function getUncompletedTrip (device, deviceRoute, deviceTrips) {
@@ -199,6 +206,7 @@ exports.checkTripsKms = checkTripsKms
199
206
  exports.isInsideTimetable = isInsideTimetable
200
207
  exports.isPartialInsideTimetable = isPartialInsideTimetable
201
208
  exports.getDataByDay = getDataByDay
209
+ exports.getKms = getKms
202
210
  exports.calculatePartialTrip = calculatePartialTrip
203
211
  exports.calculateTrip = calculateTrip
204
212
  exports.getTripIdleTime = getTripIdleTime