fleetmap-reports 2.0.144 → 2.0.146

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": "2.0.144",
3
+ "version": "2.0.146",
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, getKms } = require('./util/trips')
15
+ const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay, getKms, calculateMultiDayTrips } = require('./util/trips')
16
16
  const { devicesToProcess } = require('./util/device')
17
17
  const { getDriverData } = require('./util/driver')
18
18
  const { calculateConsumption } = require('./util/fuel')
@@ -298,6 +298,8 @@ function processDrivers (from, to, drivers, driversData, userData) {
298
298
  const tripsByDay = trips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay) &&
299
299
  (userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, route)))
300
300
 
301
+ calculateMultiDayTrips(trips, route, tripsByDay, fromByDay, toByDay, userData.devices)
302
+
301
303
  driverData.summary.push({
302
304
  date,
303
305
  distance: tripsByDay.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0),
package/src/kms-report.js CHANGED
@@ -11,7 +11,7 @@ const { getDates, getTranslations, isClientSide, executeServerSide } = require('
11
11
  const driversUtil = require('./util/driver')
12
12
  const {
13
13
  isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay, getKms,
14
- getTripTotalKms
14
+ getTripTotalKms, calculateMultiDayTrips
15
15
  } = require('./util/trips')
16
16
  const { devicesToProcess } = require('./util/device')
17
17
  const { getDriverData, reportByDriver } = require('./util/driver')
@@ -183,7 +183,7 @@ async function processDrivers (from, to, userData, data) {
183
183
  const driversResult = []
184
184
 
185
185
  for (const d of userData.drivers) {
186
- const { trips } = await getDriverData(d, data, userData)
186
+ const { trips, route } = await getDriverData(d, data, userData)
187
187
 
188
188
  if (trips.length > 0) {
189
189
  const driverData = {
@@ -198,6 +198,8 @@ async function processDrivers (from, to, userData, data) {
198
198
 
199
199
  const tripsByDay = trips.filter(t => (new Date(t.startTime) > fromByDay && new Date(t.endTime) < toByDay))
200
200
 
201
+ calculateMultiDayTrips(trips, route, tripsByDay, fromByDay, toByDay, userData.devices)
202
+
201
203
  driverData.days.push({
202
204
  date,
203
205
  kms: tripsByDay.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
@@ -1,11 +1,7 @@
1
1
  const traccarHelper = require('../util/traccar')
2
2
  const { isInsideTimetable } = require('../util/trips')
3
- const { convertFromUTCDate, getTranslations, convertMS, convertToLocaleTimeString, isClientSide } = require('../util/utils')
3
+ const { convertFromUTCDate } = require('../util/utils')
4
4
  const automaticReports = require('../automaticReports')
5
- const jsPDF = require('jspdf')
6
- const { getStyle } = require('../reportStyle')
7
- const { getUserPartner } = require('fleetmap-partners')
8
- const { addTable, headerFromUser } = require('../util/pdfDocument')
9
5
 
10
6
  async function createDailyUseReport (from, to, userData, traccar) {
11
7
  const reportData = []
@@ -81,72 +77,4 @@ function processDeviceData (allInOne, d, userData) {
81
77
  }
82
78
  }
83
79
 
84
- async function exportDailyUseReportToPDF (userData, reportData) {
85
- const translations = getTranslations(userData)
86
- const timezone = userData.user.attributes.timezone
87
- const lang = userData.user.attributes.lang || (isClientSide() && navigator.language)
88
-
89
- const headers = [
90
- translations.report.vehicle,
91
- 'Immatriculation',
92
- 'Groupe',
93
- 'Matin départ',
94
- 'Matin arrêt',
95
- 'Matin temps',
96
- 'Déjeuner',
97
- 'Après-midi départ',
98
- 'Après-midi arrêt',
99
- 'Après-midi temps',
100
- 'Total temps',
101
- 'Total conduit',
102
- 'Total arrêts',
103
- 'Total kms'
104
- ]
105
-
106
- const data = []
107
- reportData.forEach(d => {
108
- const row = [
109
- d.device,
110
- d.licensePlate,
111
- d.group,
112
- convertToLocaleTimeString(d.morningStart, lang, timezone, userData.user),
113
- convertToLocaleTimeString(d.morningEnd, lang, timezone, userData.user),
114
- convertMS(d.morningTime),
115
- convertMS(d.lunch),
116
- convertToLocaleTimeString(d.afternoonStart, lang, timezone, userData.user),
117
- convertToLocaleTimeString(d.afternoonEnd, lang, timezone, userData.user),
118
- convertMS(d.afternoonTime),
119
- convertMS(d.totalTime),
120
- convertMS(d.totalDrivingTime),
121
- d.totalStops,
122
- (d.totalDistance / 100).toFixed(1)
123
- ]
124
- data.push(row)
125
- })
126
-
127
- const doc = new jsPDF.jsPDF('l')
128
- await headerFromUser(doc, 'Rapport de Performance', userData.user)
129
- const style = getStyle(getUserPartner(userData.user))
130
-
131
- const footValues = []
132
-
133
- doc.setFontSize(11)
134
- doc.text(new Date(userData.from).toLocaleString() + ' - ' + new Date(userData.to).toLocaleString(), 20, 33)
135
-
136
- style.headerFontSize = 8
137
- style.bodyFontSize = 7
138
- const columnStyles = {}
139
- for (let i = 3; i < 14; i++) {
140
- columnStyles[i] = { halign: 'right' }
141
- }
142
- addTable(doc, headers, data, footValues, style, 40, columnStyles)
143
- return doc
144
- }
145
-
146
- function exportDailyUseReportToExcel (userData, reportData) {
147
-
148
- }
149
-
150
80
  exports.createDailyUseReport = createDailyUseReport
151
- exports.exportDailyUseReportToPDF = exportDailyUseReportToPDF
152
- exports.exportDailyUseReportToExcel = exportDailyUseReportToExcel
@@ -65,11 +65,10 @@ describe('Kms_Reports', function () {
65
65
  it('KmsReport by timezone marrocos', async () => {
66
66
  const reports = await getReports(process.env.email, process.env.password)
67
67
  const userData = await reports.getUserData()
68
- userData.groupByDay = true
69
68
  userData.devices = userData.devices.filter(d => d.id === 93497)
70
69
  const data = await reports.kmsReport(convertFromLocal(new Date(2024, 2, 18, 0, 0, 0), userData.user.attributes.timezone), convertFromLocal(new Date(2024, 2, 18, 23, 59, 59), userData.user.attributes.timezone),
71
70
  userData)
72
71
  const device = data[0].devices.find(d => d.device.id === 93497)
73
- assert.equal(device.days.length, 1)
72
+ assert.equal(device, 1)
74
73
  }, 3000000)
75
74
  })
@@ -159,21 +159,4 @@ describe('zones', function () {
159
159
  console.log(first)
160
160
  assert.equal(first.days[6].distanceOut, 867.0554430738234)
161
161
  }, 4000000)
162
-
163
- it('works with casais zones in columns 7', async () => {
164
- const report = await getReports()
165
- const userData = await report.getUserData()
166
- userData.zonesByColumn = true
167
- userData.devices = userData.devices.filter(d => d.id === 81166)
168
- userData.geofences = userData.geofences.filter(g => g.name === 'baliza 1 - raio verde ' ||
169
- g.name === 'baliza 2 - raio amarelo')
170
- userData.onlyWithKmsOut = false
171
- const result = await report.zoneReport(
172
- new Date(Date.UTC(2023, 9, 9, 0, 0, 0, 0)),
173
- new Date(Date.UTC(2023, 9, 31, 23, 59, 59, 0)),
174
- userData)
175
- const first = result[0].devices[0]
176
- console.log(first)
177
- assert.equal(first.days[17].distanceOut, 720.7985320478997)
178
- }, 4000000)
179
162
  })
package/src/util/trips.js CHANGED
@@ -152,6 +152,7 @@ function getUncompletedTrip (device, deviceRoute, deviceTrips) {
152
152
  }
153
153
 
154
154
  function calculateTrip (device, route) {
155
+ console.log('route', route.length)
155
156
  const startPos = route[0]
156
157
  const endPos = route[route.length - 1]
157
158
 
@@ -235,6 +236,22 @@ function getTripTotalKms (trip, stop, route) {
235
236
  return distance / 1000
236
237
  }
237
238
 
239
+ function calculateMultiDayTrips (trips, route, tripsByDay, fromByDay, toByDay, devices) {
240
+ const startsOutside = trips.filter(t => (new Date(t.startTime) < fromByDay && new Date(t.endTime) > fromByDay))
241
+ if (startsOutside.length > 0) {
242
+ tripsByDay.push(calculateTrip(devices.find(d => d.id === startsOutside[0].deviceId),
243
+ route.filter(p => new Date(p.fixTime) >= fromByDay &&
244
+ new Date(p.fixTime) <= new Date(startsOutside[0].endTime))))
245
+ }
246
+
247
+ const endsOutside = trips.filter(t => (new Date(t.startTime) < toByDay && new Date(t.endTime) > toByDay))
248
+ if (endsOutside.length > 0) {
249
+ tripsByDay.push(calculateTrip(devices.find(d => d.id === endsOutside[0].deviceId),
250
+ route.filter(p => new Date(p.fixTime) >= new Date(endsOutside[0].startTime) &&
251
+ new Date(p.fixTime) <= toByDay)))
252
+ }
253
+ }
254
+
238
255
  exports.isInsideTimetable = isInsideTimetable
239
256
  exports.isPartialInsideTimetable = isPartialInsideTimetable
240
257
  exports.getDataByDay = getDataByDay
@@ -245,3 +262,4 @@ exports.getTripIdleTime = getTripIdleTime
245
262
  exports.calculateStopDuration = calculateStopDuration
246
263
  exports.getUncompletedTrip = getUncompletedTrip
247
264
  exports.getTripTotalKms = getTripTotalKms
265
+ exports.calculateMultiDayTrips = calculateMultiDayTrips
Binary file
@@ -1,46 +0,0 @@
1
- async function createPassengerReport (from, to, userData, traccar) {
2
- //const allDevices = await traccar.axios.get('/devices').then(d => d.data)
3
- const devices = userData.devices
4
- const drivers = await traccar.axios.get('/drivers').then(d => d.data)
5
- const groups = await traccar.axios.get('/groups').then(d => d.data)
6
- await Promise.all(groups.map(async g => {
7
- const driversByGroup = await traccar.axios.get(`/drivers?groupId=${g.id}`).then(d => d.data)
8
- driversByGroup.forEach(d => {
9
- const _driver = drivers.find(a => a.id === d.id)
10
- if (_driver) {
11
- _driver.groupName = g.name
12
- }
13
- })
14
- }))
15
- const eventsUrl = `/reports/events?${devices.map(d => 'deviceId=' + d.id).join('&')
16
- }&from=${from.toISOString()
17
- }&to=${to.toISOString()
18
- }`
19
- const positionsUrl = `/reports/route?${devices.map(d => 'deviceId=' + d.id).join('&')
20
- }&from=${from.toISOString()
21
- }&to=${to.toISOString()
22
- }`
23
- const events = await traccar.axios.get(eventsUrl).then(d => d.data)
24
- const positions = await traccar.axios.get(positionsUrl).then(d => d.data)
25
- events.forEach(e => {
26
- delete e.attributes
27
- const driver = getDriver(e, positions, drivers)
28
- const position = positions.find(p => p.id === e.positionId)
29
- e.deviceName = devices.find(d => d.id === e.deviceId).name
30
- e.groupName = driver.groupName || ''
31
- e.fixtime = position && new Date(position.fixTime)
32
- e.notes = driver && driver.attributes.notes
33
- e.driverName = (driver && driver.name) || (position && position.attributes.driverUniqueId)
34
- })
35
- return events
36
- }
37
-
38
- function getDriver (event, positions, drivers) {
39
- const p = positions.find(p => p.id === event.positionId)
40
- if (!p) { return '' }
41
- const d = drivers.find(d => d.uniqueId === p.attributes.driverUniqueId)
42
- if (!d) { return '' }
43
- return d
44
- }
45
-
46
- exports.createPassengerReport = createPassengerReport
@@ -1,19 +0,0 @@
1
- const { getReports } = require('./index')
2
- const assert = require('assert')
3
- const { createDailyUseReport } = require('../partnerReports/dailyuse-report')
4
-
5
- describe('dailyuse', function () {
6
- // eslint-disable-next-line no-undef
7
- it('dailyuse report', async () => {
8
- const report = await getReports()
9
- const userData = await report.getUserData()
10
-
11
- const data = await createDailyUseReport(
12
- new Date(Date.UTC(2023, 10, 1, 0, 0, 0, 0)),
13
- new Date(Date.UTC(2023, 10, 6, 23, 59, 59, 0)),
14
- userData,
15
- report.traccar)
16
- console.log(data)
17
- assert.equal(data[0].consumption, 19.799999999999997)
18
- }, 8000000)
19
- })
@@ -1,23 +0,0 @@
1
- const { getReports } = require('./index')
2
- const assert = require('assert')
3
- const { convertMS } = require('../util/utils')
4
- const { createGPSJumpReport } = require('../partnerReports/gpsjump-report')
5
-
6
- // eslint-disable-next-line no-undef
7
- describe('gpsjump', function () {
8
- // eslint-disable-next-line no-undef
9
- it('gpsjump report', async () => {
10
- const report = await getReports()
11
- const userData = await report.getUserData()
12
- userData.devices = userData.devices.filter(d => d.id === 22326)
13
- const data = await createGPSJumpReport(
14
- new Date(Date.UTC(2023, 6, 1, 0, 0, 0, 0)),
15
- new Date(Date.UTC(2023, 6, 17, 23, 59, 59, 0)),
16
- userData,
17
- report.traccar)
18
- console.log(data)
19
- assert.equal(data[0].consumption, 19.799999999999997)
20
- assert.equal(data[0].distance, 326.7657)
21
- assert.equal(convertMS(data[1].time * 1000, false), '08:19')
22
- }, 8000000)
23
- })