fleetmap-reports 2.0.357 → 2.0.358

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.
Files changed (87) hide show
  1. package/.claude/worktrees/eager-stonebraker-c08ac7/.eslintrc.js +15 -0
  2. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/enGB.js +309 -0
  3. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/esCL.js +297 -0
  4. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/frFR.json +324 -0
  5. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/index.js +35 -0
  6. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/ptBR.js +301 -0
  7. package/.claude/worktrees/eager-stonebraker-c08ac7/lang/ptPT.js +310 -0
  8. package/.claude/worktrees/eager-stonebraker-c08ac7/package-lock.json +11944 -0
  9. package/.claude/worktrees/eager-stonebraker-c08ac7/package.json +45 -0
  10. package/.claude/worktrees/eager-stonebraker-c08ac7/src/activity-report.js +822 -0
  11. package/.claude/worktrees/eager-stonebraker-c08ac7/src/automaticReports.js +34 -0
  12. package/.claude/worktrees/eager-stonebraker-c08ac7/src/carbone/index.js +13 -0
  13. package/.claude/worktrees/eager-stonebraker-c08ac7/src/custom/vistawasteActivity-report.js +544 -0
  14. package/.claude/worktrees/eager-stonebraker-c08ac7/src/events-report.js +360 -0
  15. package/.claude/worktrees/eager-stonebraker-c08ac7/src/fuel-consumption-report.js +296 -0
  16. package/.claude/worktrees/eager-stonebraker-c08ac7/src/fuel-drop-report.js +128 -0
  17. package/.claude/worktrees/eager-stonebraker-c08ac7/src/here.js +172 -0
  18. package/.claude/worktrees/eager-stonebraker-c08ac7/src/idle-report.js +403 -0
  19. package/.claude/worktrees/eager-stonebraker-c08ac7/src/index.js +244 -0
  20. package/.claude/worktrees/eager-stonebraker-c08ac7/src/kms-report.js +549 -0
  21. package/.claude/worktrees/eager-stonebraker-c08ac7/src/location-report.js +496 -0
  22. package/.claude/worktrees/eager-stonebraker-c08ac7/src/machines-report.js +278 -0
  23. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/afriquia.js +129 -0
  24. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/dailyuse-report.js +80 -0
  25. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/delayedstart-report.js +223 -0
  26. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/driverranking-report.js +328 -0
  27. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/gpsjump-report.js +61 -0
  28. package/.claude/worktrees/eager-stonebraker-c08ac7/src/partnerReports/performance-report.js +359 -0
  29. package/.claude/worktrees/eager-stonebraker-c08ac7/src/refueling-report.js +345 -0
  30. package/.claude/worktrees/eager-stonebraker-c08ac7/src/reportStyle.js +34 -0
  31. package/.claude/worktrees/eager-stonebraker-c08ac7/src/sensor-report.js +447 -0
  32. package/.claude/worktrees/eager-stonebraker-c08ac7/src/speeding-report.js +663 -0
  33. package/.claude/worktrees/eager-stonebraker-c08ac7/src/stop-report.js +242 -0
  34. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/ActivityReportTemplate.mjml +51 -0
  35. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/EmptyReportTemplate.mjml +25 -0
  36. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/EventsReportTemplate.mjml +75 -0
  37. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/FuelDropReportTemplate.mjml +60 -0
  38. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/IdleReportTemplate.mjml +54 -0
  39. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/KmsReportGroupByDayTemplate.mjml +43 -0
  40. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/KmsReportTemplate.mjml +44 -0
  41. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/LocationReportTemplate.mjml +37 -0
  42. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/RefuelingReportTemplate.mjml +60 -0
  43. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/SensorReportTemplate.mjml +23 -0
  44. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/SpeedingReportTemplate.mjml +80 -0
  45. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/TripReportTemplate.mjml +97 -0
  46. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/ZoneReportTemplate.mjml +52 -0
  47. package/.claude/worktrees/eager-stonebraker-c08ac7/src/templates/report.mjml +96 -0
  48. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/activity.test.js +99 -0
  49. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/carbone.test.js +20 -0
  50. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/events.test.js +30 -0
  51. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/fuel.test.js +35 -0
  52. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/idle.test.js +16 -0
  53. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/index.js +24 -0
  54. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/index.test.js +203 -0
  55. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/kms.test.js +74 -0
  56. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/performance.test.js +36 -0
  57. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/positions.test.js +67 -0
  58. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/speeding.test.js +120 -0
  59. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/translations.test.js +21 -0
  60. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/trips.test.js +140 -0
  61. package/.claude/worktrees/eager-stonebraker-c08ac7/src/tests/zones.test.js +162 -0
  62. package/.claude/worktrees/eager-stonebraker-c08ac7/src/trip-report.js +641 -0
  63. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/device.js +13 -0
  64. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/driver.js +90 -0
  65. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/fuel.js +102 -0
  66. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/geofence.js +52 -0
  67. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/odoo.js +18 -0
  68. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/parallel.js +64 -0
  69. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/pdfDocument.js +140 -0
  70. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/route.js +78 -0
  71. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/timetable.js +30 -0
  72. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/traccar.js +213 -0
  73. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/traccar.worker.js +49 -0
  74. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/trips.js +270 -0
  75. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/utils.js +358 -0
  76. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/worker.js +14 -0
  77. package/.claude/worktrees/eager-stonebraker-c08ac7/src/util/xpert.js +58 -0
  78. package/.claude/worktrees/eager-stonebraker-c08ac7/src/word/index.js +95 -0
  79. package/.claude/worktrees/eager-stonebraker-c08ac7/src/zone-report.js +904 -0
  80. package/lang/enGB.js +18 -0
  81. package/lang/esCL.js +18 -0
  82. package/lang/frFR.json +7 -1
  83. package/lang/ptBR.js +18 -0
  84. package/lang/ptPT.js +18 -0
  85. package/package.json +1 -1
  86. package/src/partnerReports/driverranking-report.js +149 -49
  87. package/src/util/pdfDocument.js +2 -1
@@ -0,0 +1,203 @@
1
+ /* eslint-disable no-undef */
2
+ const { getReports } = require('./index')
3
+ const assert = require('assert')
4
+ const utils = require('../util/utils')
5
+
6
+ // eslint-disable-next-line no-undef
7
+ describe('Test_Reports', function () {
8
+ it('converts to pdf', async () => {
9
+ const report = await getReports()
10
+ const userData = await report.getUserData()
11
+ userData.roadSpeedLimits = false
12
+ userData.customSpeed = false
13
+ userData.useVehicleSpeedLimit = true
14
+ const data = await report.speedingReport(
15
+ new Date(Date.UTC(2023, 7, 1, 0, 0, 0, 0)),
16
+ new Date(Date.UTC(2023, 7, 2, 23, 59, 59, 0)),
17
+ userData)
18
+ const pdf = await report.speedingReportToPDF(userData, data[0])
19
+ pdf.save()
20
+ }, 40000)
21
+
22
+ it('converts madrid time', async () => {
23
+ assert.equal(false, utils.isClientSide())
24
+ console.log(utils.convertToLocaleString(new Date(), 'es-CL', 'Europe/Madrid'))
25
+ })
26
+
27
+ it('Idle by device', async () => {
28
+ const report = await getReports()
29
+ const userData = await report.getUserData()
30
+ userData.minimumIdleMinutes = 2
31
+ const data = await report.idleReport(new Date(2022, 0, 3, 0, 0, 0, 0),
32
+ new Date(2022, 0, 7, 23, 59, 59, 0),
33
+ userData)
34
+ assert.equal(data.length, 1)
35
+ const device = data[0].devices.find(d => d.device.id === 22326)
36
+ const totalIdleTime = device.idleEvents.reduce((a, b) => a + b.idleTime, 0)
37
+ assert.equal(device.idleEvents.length, 9) // Total Alerts
38
+ assert.equal(totalIdleTime, 1592000) // Total Duration
39
+ }, 20000)
40
+ // eslint-disable-next-line no-undef
41
+ it('Idle by driver', async () => {
42
+ const report = await getReports()
43
+ const userData = await report.getUserData()
44
+ userData.minimumIdleMinutes = 0
45
+ userData.byDriver = true
46
+
47
+ console.log(userData.drivers)
48
+ const data = await report.idleReport(new Date(2022, 0, 3, 0, 0, 0, 0),
49
+ new Date(2022, 0, 7, 23, 59, 59, 0),
50
+ userData)
51
+ assert.equal(data.length, 1)
52
+ const driver = data[0].drivers.find(d => d.driver.id === 14020)
53
+
54
+ const totalIdleTime = driver.idleEvents.reduce((a, b) => a + b.idleTime, 0)
55
+ assert.equal(driver.idleEvents.length, 15) // Total Alerts
56
+ assert.equal(totalIdleTime, 16000) // Total Duration
57
+ }, 20000)
58
+ // eslint-disable-next-line no-undef
59
+ it('test allinone', async () => {
60
+ console.log('Start')
61
+ const reports = await getReports()
62
+ const userData = await reports.getUserData()
63
+ const r = await require('../util/traccar').getAllInOne(reports.traccar,
64
+ new Date(2022, 1, 1, 0, 0, 0, 0),
65
+ new Date(2022, 1, 4, 23, 59, 59, 0),
66
+ userData.devices,
67
+ false,
68
+ true,
69
+ true,
70
+ false)
71
+
72
+ assert.equal(r.trips.filter(t => t.deviceId === 22327).length, 20)
73
+ assert.equal(r.stops.filter(t => t.deviceId === 22327).length, 21)
74
+ }, 20000)
75
+ // eslint-disable-next-line no-undef
76
+ it('Total KMS', async () => {
77
+ const report = await getReports()
78
+ const userData = await report.getUserData()
79
+
80
+ const tripsReport = await report.tripReport(
81
+ new Date(Date.UTC(2022, 1, 11, 0, 0, 0, 0)),
82
+ new Date(Date.UTC(2022, 1, 14, 23, 59, 59, 0)),
83
+ userData)
84
+
85
+ const kmsReport = await report.kmsReport(
86
+ new Date(Date.UTC(2022, 1, 11, 0, 0, 0, 0)),
87
+ new Date(Date.UTC(2022, 1, 14, 23, 59, 59, 0)),
88
+ userData)
89
+
90
+ assert.equal(tripsReport.length, 1)
91
+ const device1 = tripsReport[0].devices.find(d => d.device.id === 22327)
92
+ assert.equal(device1.trips.length, 14) // Total Trips
93
+ assert.equal(device1.totalDistance, 85462.79000000097) // Total Kms
94
+
95
+ const device2 = kmsReport[0].devices.find(d => d.device.id === 22327)
96
+ assert.equal(device2.summary.distance, device1.totalDistance) // Total Kms
97
+ }, 30000)
98
+ // eslint-disable-next-line no-undef
99
+ it('Refueling Report', async () => {
100
+ const report = await getReports()
101
+ const userData = await report.getUserData()
102
+
103
+ const data = await report.refuelingReport(
104
+ new Date(Date.UTC(2022, 1, 2, 0, 0, 0, 0)),
105
+ new Date(Date.UTC(2022, 1, 2, 23, 59, 59, 0)),
106
+ userData)
107
+
108
+ assert.equal(data.length, 1)
109
+ }, 30000)
110
+ // eslint-disable-next-line no-undef
111
+ it('Refueling2 Report', async () => {
112
+ const report = await getReports()
113
+ const userData = await report.getUserData()
114
+
115
+ const data = await report.refuelingReport(new Date(2022, 1, 21, 0, 0, 0, 0),
116
+ new Date(2022, 1, 25, 23, 59, 59, 0),
117
+ userData)
118
+
119
+ assert.equal(data.length, 1)
120
+ }, 30000)
121
+ // eslint-disable-next-line no-undef
122
+ it('FuelConsumption Report', async () => {
123
+ const device1 = 22326
124
+ const device2 = 122575
125
+ const report = await getReports()
126
+ const userData = await report.getUserData()
127
+ const devices = userData.devices
128
+ userData.devices = devices.filter(d => d.id === device1)
129
+ let data = await report.fuelConsumptionReport(new Date(2022, 0, 1, 0, 0, 0, 0),
130
+ new Date(2022, 0, 10, 23, 59, 59, 0),
131
+ userData)
132
+
133
+ assert.equal(data.length, 1)
134
+ let device = data[0].devices.find(d => d.device.id === device1)
135
+ console.log(device.days)
136
+ assert.equal(device.days.length, 8)
137
+ assert.equal(device.days[0].spentFuel, 2)
138
+ userData.devices = devices.filter(d => d.id === device2)
139
+ data = await report.fuelConsumptionReport(new Date(2023, 0, 26, 0, 0, 0, 0),
140
+ new Date(2023, 0, 26, 23, 59, 59, 0),
141
+ userData)
142
+ device = data[0].devices.find(d => d.device.id === device2)
143
+ console.log(device.days)
144
+ }, 30000)
145
+ // eslint-disable-next-line no-undef
146
+ it('FuelConsumption Odoo Report', async () => {
147
+ const report = await getReports()
148
+ const userData = await report.getUserData()
149
+ userData.devices = userData.devices.filter(d => d.id === 22326)
150
+ const data = await report.fuelConsumptionReport(
151
+ new Date(Date.UTC(2022, 9, 1, 0, 0, 0, 0)),
152
+ new Date(Date.UTC(2022, 9, 31, 23, 59, 59, 0)),
153
+ userData)
154
+
155
+ assert.equal(data.length, 1)
156
+ const device = data[0].devices.find(d => d.device.id === 22326)
157
+ assert.equal(device.days.length, 26)
158
+ }, 30000)
159
+ // eslint-disable-next-line no-undef
160
+ it('FuelConsumption xpert', async () => {
161
+ const report = await getReports()
162
+ const userData = await report.getUserData()
163
+ userData.devices = userData.devices.filter(d => d.id === 69114)
164
+ const data = await report.fuelConsumptionReport(new Date(2023, 5, 11, 0, 0, 0, 0),
165
+ new Date(2023, 6, 11, 23, 59, 59, 0),
166
+ userData)
167
+ assert.equal(data.length, 1)
168
+ const device = data[0].devices.find(d => d.device.id === 69114)
169
+ assert.equal(device.days.reduce((a, b) => a + b.spentFuel, 0), 168.91999999999985)
170
+ }, 30000)
171
+ // eslint-disable-next-line no-undef
172
+ it('Zone Report', async () => {
173
+ const report = await getReports()
174
+ const userData = await report.getUserData()
175
+ const data = await report.zoneReport(new Date(2022, 3, 25, 0, 0, 0, 0),
176
+ new Date(2022, 3, 28, 23, 59, 59, 0),
177
+ { ...userData, devices: userData.devices.filter(d => d.id === 22326) })
178
+
179
+ assert.equal(data.length, 1)
180
+ const device = data[0].devices.find(d => d.device.id === 22326)
181
+ assert.equal(device.geofences.length, 19)
182
+ console.log(device.geofences[0])
183
+ assert.equal(device.geofences[0].inTime.fixTime, '2022-04-25T23:47:58.000+0000')
184
+ assert.equal(device.geofences[0].outTime.fixTime, '2022-04-26T07:47:35.000+0000')
185
+ assert.equal(device.geofences[0].totalTime, '28777')
186
+ assert.equal(device.geofences[0].geofenceName, 'Casa João')
187
+ assert.equal(device.geofences[0].distanceIn, 0.38569639521207727)
188
+ // expect(device.geofences[0].distanceOut).toBeGreaterThan(0)
189
+ }, 990000)
190
+ // eslint-disable-next-line no-undef
191
+ it('Zone Report With Stops', async () => {
192
+ const report = await getReports()
193
+ const userData = await report.getUserData()
194
+ userData.onlyWithStop = true
195
+ const data = await report.zoneReport(new Date(2023, 1, 1, 0, 0, 0, 0),
196
+ new Date(2023, 1, 5, 23, 59, 59, 0),
197
+ userData)
198
+
199
+ assert.equal(data.length, 1)
200
+ const device = data[0].devices.find(d => d.device.id === 82063)
201
+ assert.equal(device.geofences.length, 15)
202
+ }, 30000)
203
+ })
@@ -0,0 +1,74 @@
1
+ /* eslint-disable no-undef */
2
+ const { getReports } = require('./index')
3
+ const assert = require('assert')
4
+ const { convertFromLocal } = require('../util/utils')
5
+
6
+ describe('Kms_Reports', function () {
7
+ // eslint-disable-next-line no-undef
8
+ it('KmsReport by device', async () => {
9
+ const reports = await getReports()
10
+ const userData = await reports.getUserData()
11
+ userData.devices = userData.devices.filter(d => d.id === 22326)
12
+ const data = await reports.kmsReport(new Date(2023, 5, 1, 0, 0, 0), new Date(2023, 5, 31, 23, 59, 59),
13
+ userData)
14
+ assert.equal(data.length, 1)
15
+ assert.equal(data.length, 1)
16
+ const device = data[0].devices.find(d => d.device.id === 22326)
17
+ assert.notEqual(device, undefined)
18
+ assert.equal(device.summary.distance, 1878840.7300000389) // Total Kms
19
+ }, 30000)
20
+ it('works with many devices', async () => {
21
+ const reports = await getReports(process.env.USER_NOGARTEL, process.env.PASS_NOGARTEL)
22
+ const userData = await reports.getUserData()
23
+ const data = await reports.kmsReport(new Date(2023, 5, 1, 0, 0, 0), new Date(2023, 5, 31, 23, 59, 59),
24
+ userData)
25
+ assert.equal(data.length, 1)
26
+ assert.notEqual(device, undefined)
27
+ assert.equal(device.summary.distance, 1878840.7300000389) // Total Kms
28
+ }, 300000)
29
+ // eslint-disable-next-line no-undef
30
+ it('KmsReport byDevice groupByDay', async () => {
31
+ const reports = await getReports()
32
+ const userData = await reports.getUserData()
33
+ userData.devices = userData.devices.filter(d => d.id === 22326)
34
+ userData.groupByDay = true
35
+ const data = await reports.kmsReport(new Date(2021, 10, 1, 0, 0, 0), new Date(2021, 10, 10, 23, 59, 59),
36
+ userData)
37
+ assert.equal(data.length, 1)
38
+ assert.equal(data.length, 1)
39
+ const device = data[0].devices.find(d => d.device.id === 22326)
40
+ assert.equal(device.days.length, 10) // Total Kms
41
+ assert.equal(device.days[5].kms, 23124.280000001192) // Total Kms
42
+ }, 30000)
43
+ // eslint-disable-next-line no-undef
44
+ it('KmsReport by device2', async () => {
45
+ const reports = await getReports()
46
+ const userData = await reports.getUserData()
47
+ userData.groupByDay = true
48
+ userData.devices = userData.devices.filter(d => d.id === 25000)
49
+ const data = await reports.kmsReport(new Date(2023, 4, 26, 0, 0, 0), new Date(2023, 5, 24, 23, 59, 59),
50
+ userData)
51
+ assert.equal(data.length, 1)
52
+ const device = data[0].devices.find(d => d.device.id === 25000)// Total Kms
53
+ assert.equal(device.days.length, 30) // Total Kms
54
+ assert.equal(device.days[29].kms, 136174.93281451002) // Total Kms
55
+ }, 30000)
56
+ it('KmsReport by driver', async () => {
57
+ const reports = await getReports(process.env.USER_CTM_MOVIFLOTTE, process.env.PASS_CTM_MOVIFLOTTE)
58
+ const userData = await reports.getUserData()
59
+ userData.byDriver = true
60
+ console.log(userData.drivers)
61
+ const data = await reports.kmsReport(new Date(2024, 0, 1, 0, 0, 0), new Date(2024, 0, 31, 23, 59, 59),
62
+ userData)
63
+ assert.equal(data.length, 1)
64
+ }, 3000000)
65
+ it('KmsReport by timezone marrocos', async () => {
66
+ const reports = await getReports(process.env.email, process.env.password)
67
+ const userData = await reports.getUserData()
68
+ userData.devices = userData.devices.filter(d => d.id === 93497)
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),
70
+ userData)
71
+ const device = data[0].devices.find(d => d.device.id === 93497)
72
+ assert.equal(device, 1)
73
+ }, 3000000)
74
+ })
@@ -0,0 +1,36 @@
1
+ const { getReports } = require('./index')
2
+ const { createPerformanceReport } = require('../partnerReports/performance-report')
3
+ const assert = require('assert')
4
+ const { convertMS } = require('../util/utils')
5
+ // eslint-disable-next-line no-undef
6
+ describe('performance', function () {
7
+ // eslint-disable-next-line no-undef
8
+ it('performance report teltonika', async () => {
9
+ const report = await getReports()
10
+ const userData = await report.getUserData()
11
+ userData.devices = userData.devices.filter(d => d.id === 22326)
12
+ const data = await createPerformanceReport(
13
+ new Date(Date.UTC(2023, 6, 1, 0, 0, 0, 0)),
14
+ new Date(Date.UTC(2023, 6, 17, 23, 59, 59, 0)),
15
+ userData,
16
+ report.traccar)
17
+ console.log(data)
18
+ assert.equal(data[0].consumption, 19.799999999999997)
19
+ assert.equal(data[0].distance, 326.7657)
20
+ assert.equal(convertMS(data[1].time * 1000, false), '08:19')
21
+ }, 8000000)
22
+
23
+ // eslint-disable-next-line no-undef
24
+ it('performance report inofleet', async () => {
25
+ const report = await getReports()
26
+ const userData = await report.getUserData()
27
+ userData.devices = userData.devices.filter(d => d.id === 69114)
28
+ const data = await createPerformanceReport(
29
+ new Date(Date.UTC(2023, 5, 11, 0, 0, 0, 0)),
30
+ new Date(Date.UTC(2023, 6, 11, 23, 59, 59, 0)),
31
+ userData,
32
+ report.traccar)
33
+ console.log(data)
34
+ assert.equal(data[0].consumption, 168.51989999999998)
35
+ }, 8000000)
36
+ })
@@ -0,0 +1,67 @@
1
+ const { getReports } = require('./index')
2
+ const assert = require('assert')
3
+ const xlsx = require('json-as-xlsx')
4
+ // eslint-disable-next-line no-undef
5
+ describe('test positions', function () {
6
+ // eslint-disable-next-line no-undef
7
+ it('works by device', async () => {
8
+ const deviceId = 209673
9
+ const report = await getReports(process.env.USER_NOGARTEL, process.env.PASS_NOGARTEL)
10
+ const userData = await report.getUserData()
11
+ userData.devices = userData.devices.filter(d => d.id === deviceId)
12
+ const data = await report.locationReport(
13
+ new Date(Date.UTC(2023, 7, 24, 0, 0, 0, 0)),
14
+ new Date(Date.UTC(2023, 7, 24, 23, 59, 59, 0)),
15
+ userData)
16
+ assert.equal(data.length, 1)
17
+ console.log('data', data)
18
+ const device = data[0].devices.find(d => d.device.id === deviceId)
19
+ assert.equal(device.positions.length, 2414) // Total Positions
20
+ userData.includeDigitalPorts = true
21
+ const pdf = await report.locationReportToPDF(userData, data[0])
22
+ pdf.save('report.pdf')
23
+ }, 30000)
24
+ // eslint-disable-next-line no-undef
25
+ it('works by driver', async () => {
26
+ const report = await getReports()
27
+ try {
28
+ const userData = await report.getUserData()
29
+ userData.byDriver = true
30
+ userData.drivers = userData.drivers.filter(d => d.name.startsWith('ERICA'))
31
+ const data = await report.locationReport(
32
+ new Date(Date.UTC(2025, 0, 1, 0, 0, 0)),
33
+ new Date(Date.UTC(2025, 0, 31, 23, 59, 59, 0)),
34
+ userData)
35
+ assert.equal(data.length, 1)
36
+ console.log(data[0].drivers)
37
+ const driver = data[0].drivers.find(d => d.driver.name.startsWith('ERICA'))
38
+ console.log(driver.positions)
39
+ assert.equal(driver.positions.length, 8805) // Total Positions
40
+ } catch (e) {
41
+ console.error(e.message, e.response && e.response.data, e)
42
+ }
43
+ }, 2000000)
44
+ // eslint-disable-next-line no-undef
45
+ it('works with sensores', async () => {
46
+ const deviceId = 288082
47
+ const report = await getReports(process.env.USER_ARCESE, process.env.PASS_ARCESE)
48
+ const userData = await report.getUserData()
49
+ userData.devices = userData.devices.filter(d => d.id === deviceId)
50
+ userData.includeDigitalPorts = true
51
+ const [data] = await report.locationReport(
52
+ new Date(Date.UTC(2024, 0, 23, 22, 0, 0, 0)),
53
+ new Date(Date.UTC(2024, 0, 24, 23, 59, 59, 0)),
54
+ userData)
55
+ const device = data.devices.find(d => d.device.id === deviceId)
56
+ assert.equal(device.positions.length, 3599) // Total Positions
57
+ const pdf = await report.locationReportToPDF(userData, data)
58
+ pdf.save()
59
+ const excel = report.locationReportToExcel(userData, data)
60
+ xlsx([{
61
+ sheet: 'Sheet1',
62
+ columns: excel.headers,
63
+ content: excel.data
64
+ }], excel.settings)
65
+ }, 30000)
66
+ // eslint-disable-next-line no-undef
67
+ })
@@ -0,0 +1,120 @@
1
+ const { getReports } = require('./index')
2
+ const assert = require('assert')
3
+ const { getCountry } = require('../util/utils')
4
+
5
+ async function getSpeedingReport (report, userData) {
6
+ const data = await report.speedingReport(
7
+ new Date(Date.UTC(2025, 4, 1, 0, 0, 0, 0)),
8
+ new Date(Date.UTC(2025, 4, 31, 23, 59, 59, 0)),
9
+ userData)
10
+
11
+ const device = data[0].devices[0]
12
+ const totalDistance = device && device.alerts.reduce((a, b) => a + b.distance, 0)
13
+ const totalEventTime = device && device.alerts.reduce((a, b) => a + b.eventTime, 0)
14
+ return { device, totalDistance, totalEventTime }
15
+ }
16
+ // eslint-disable-next-line no-undef
17
+ describe('speeding tests', function () {
18
+ // eslint-disable-next-line no-undef
19
+ it('works with road speed limits in Chile', async () => {
20
+ const report = await getReports(process.env.USER_CHILE, process.env.PASS_CHILE)
21
+ const userData = await report.getUserData()
22
+ // userData.devices = [userData.devices[0]]
23
+ userData.roadSpeedLimits = true
24
+ const { device } = await getSpeedingReport(report, userData)
25
+ assert.equal(device.alerts.length, 6) // Total Alerts
26
+ console.log(device.alerts)
27
+ }, 200000)
28
+
29
+ // eslint-disable-next-line no-undef
30
+ it('works by device speed limit', async () => {
31
+ const report = await getReports()
32
+ const userData = await report.getUserData()
33
+ userData.roadSpeedLimits = false
34
+ userData.customSpeed = false
35
+ userData.useVehicleSpeedLimit = true
36
+ const data = await report.speedingReport(
37
+ new Date(Date.UTC(2023, 7, 22, 0, 0, 0, 0)),
38
+ new Date(Date.UTC(2023, 7, 23, 23, 59, 59, 0)),
39
+ userData)
40
+ console.log(data[0].devices[0].alerts.length)
41
+ console.log(data[0].devices[0].alerts)
42
+ assert.equal(data[0].devices.length, 2)
43
+ }, 900000)
44
+
45
+ // eslint-disable-next-line no-undef
46
+ it('Speeding with custom speed', async () => {
47
+ const report = await getReports()
48
+ const userData = await report.getUserData()
49
+
50
+ userData.useVehicleSpeedLimit = false
51
+ userData.customSpeed = 100
52
+ const {
53
+ device,
54
+ totalDistance,
55
+ totalEventTime
56
+ } = await getSpeedingReport(report, userData)
57
+ assert.equal(device.alerts.length, 13) // Total Alerts
58
+ assert.equal(totalDistance, 46.64576895855739) // Total Kms
59
+ assert.equal(totalEventTime, 1402000) // Total Duration
60
+ }, 999990000)
61
+
62
+ // eslint-disable-next-line no-undef
63
+ it('Speeding by driver', async () => {
64
+ const report = await getReports(process.env.email, process.env.password)
65
+ const userData = await report.getUserData()
66
+ userData.byDriver = true
67
+ userData.useVehicleSpeedLimit = false
68
+ userData.customSpeed = 60
69
+ const data = await report.speedingReport(
70
+ new Date(Date.UTC(2024, 4, 2, 0, 0, 0, 0)),
71
+ new Date(Date.UTC(2024, 4, 2, 23, 59, 59, 0)),
72
+ userData)
73
+ assert.equal(data.drivers[0].alerts.length, 2) // Total Alerts
74
+ }, 999990000)
75
+
76
+ // eslint-disable-next-line no-undef
77
+ it('detects brazil', () => {
78
+ const p = {
79
+ id: 24088423790,
80
+ attributes: {
81
+ door: false,
82
+ hours: 2520745000,
83
+ motion: false,
84
+ distance: 0,
85
+ odometer: 5973617,
86
+ sat: 17,
87
+ battery: 4.03,
88
+ hdop: 0.7,
89
+ idleTime: 0,
90
+ output: 0,
91
+ input: 0,
92
+ driverUniqueId: '',
93
+ power: 12.61,
94
+ event: 0,
95
+ totalDistance: 31419705.27,
96
+ ignition: false,
97
+ adc3: 0,
98
+ adc2: 0,
99
+ status: 61,
100
+ tripTime: 0
101
+ },
102
+ deviceId: 28097,
103
+ type: null,
104
+ protocol: 'startek',
105
+ serverTime: '2024-01-20T03:01:50.000+00:00',
106
+ deviceTime: '2024-01-20T03:01:50.000+00:00',
107
+ fixTime: '2024-01-20T03:01:50.000+00:00',
108
+ outdated: false,
109
+ valid: true,
110
+ latitude: -22.295906,
111
+ longitude: -48.576135,
112
+ altitude: 579,
113
+ speed: 0,
114
+ course: 80,
115
+ address: 'Avenida Deputado Zien Nassif, 938, Vila Industrial, Jaú - SP, 17204-212, Brazil',
116
+ accuracy: 0
117
+ }
118
+ assert.equal('BRA', getCountry(p))
119
+ })
120
+ })
@@ -0,0 +1,21 @@
1
+ const lang = require('../../lang')
2
+
3
+ // eslint-disable-next-line no-undef
4
+ describe('translations', function () {
5
+ // eslint-disable-next-line no-undef
6
+ it('s not missing any', function () {
7
+ recursiveCheck(lang['pt-BR'], lang['pt-PT'])
8
+ recursiveCheck(lang['pt-BR'], lang['fr-FR'])
9
+ recursiveCheck(lang['es-CL'], lang['fr-FR'])
10
+ console.log(JSON.stringify(lang['fr-FR']))
11
+ })
12
+ })
13
+
14
+ function recursiveCheck (object1, object2) {
15
+ Object.keys(object1).forEach(k1 => {
16
+ Object.keys(object1[k1]).forEach(k2 => {
17
+ console.log(k1)
18
+ expect(object2[k1]).toHaveProperty(k2)
19
+ })
20
+ })
21
+ }
@@ -0,0 +1,140 @@
1
+ const { getReports } = require('./index')
2
+ const assert = require('assert')
3
+ // eslint-disable-next-line no-undef
4
+ describe('trips', function () {
5
+ // eslint-disable-next-line no-undef
6
+ it('converts to pdf', async () => {
7
+ const report = await getReports()
8
+ const userData = await report.getUserData()
9
+ userData.roadSpeedLimits = false
10
+ userData.customSpeed = false
11
+ userData.useVehicleSpeedLimit = true
12
+ await report.tripReport(
13
+ new Date(Date.UTC(2022, 9, 22, 0, 0, 0, 0)),
14
+ new Date(Date.UTC(2022, 9, 22, 23, 59, 59, 0)),
15
+ userData)
16
+ // await report.tripReportToPDF(userData, data)
17
+ }, 40000)
18
+ // eslint-disable-next-line no-undef
19
+ it('Trip by device', async () => {
20
+ const report = await getReports()
21
+ const userData = await report.getUserData()
22
+
23
+ const data = await report.tripReport(new Date(2022, 0, 3, 0, 0, 0, 0),
24
+ new Date(2022, 0, 4, 23, 59, 59, 0),
25
+ userData)
26
+
27
+ assert.equal(data.length, 1)
28
+ const device = data[0].devices.find(d => d.device.id === 22326)
29
+ assert.equal(device.trips.length, 7) // Total Trips
30
+ assert.equal(device.trips[0].endPOIName, 'Casa João')
31
+ assert.equal(device.trips[0].idleTime, 602000)
32
+ assert.equal(device.trips[1].endPOIName, undefined)
33
+ assert.equal(device.totalDistance, 339170.3099999875) // Total Kms
34
+ }, 30000)
35
+ // eslint-disable-next-line no-undef
36
+ it('Trip by driver', async () => {
37
+ const report = await getReports()
38
+ const userData = await report.getUserData()
39
+ userData.byDriver = true
40
+ const data = await report.tripReport(new Date(2022, 1, 1, 0, 0, 0, 0),
41
+ new Date(2022, 1, 10, 23, 59, 59, 0),
42
+ userData)
43
+ assert.equal(data.length, 1)
44
+ console.log(data[0].drivers)
45
+ const driver = data[0].drivers.find(d => d.driver.id === 14020)
46
+ assert.equal(driver.trips.length, 13) // Total Trips
47
+ assert.equal(driver.totalDuration, 8159000)
48
+ assert.equal(driver.maxSpeed, 78.8337)
49
+ }, 90000)
50
+ // eslint-disable-next-line no-undef
51
+ it('Trip without addresses', async () => {
52
+ const report = await getReports()
53
+ const userData = await report.getUserData()
54
+
55
+ const data = await report.tripReport(new Date(2022, 4, 27, 0, 0, 0, 0),
56
+ new Date(2022, 4, 27, 23, 59, 59, 0),
57
+ userData)
58
+
59
+ assert.equal(data.length, 1)
60
+ const device = data[0].devices.find(d => d.device.id === 25808)
61
+ assert.equal(device.trips.length, 12) // Total Trips
62
+ console.log(device.trips[0])
63
+ // assert.equal(device.trips[0].endAddress, 'RS-409, 184-314 - Centro, Vera Cruz - RS, 96880-000, Brazil')
64
+ assert.equal(device.trips[1].endPOIName, undefined)
65
+ }, 20000)
66
+ // eslint-disable-next-line no-undef
67
+ it('Trip by device with time period ', async () => {
68
+ const report = await getReports(process.env.jppenas_email, process.env.jppenas_password)
69
+ const userData = await report.getUserData()
70
+
71
+ userData.allWeek = false
72
+ userData.weekDays = {
73
+ sunday: true,
74
+ monday: true,
75
+ tuesday: true,
76
+ wednesday: true,
77
+ thursday: true,
78
+ friday: true,
79
+ saturday: true
80
+ }
81
+ userData.dayHours = {
82
+ startTime: '15:00',
83
+ endTime: '19:00'
84
+ }
85
+
86
+ const data = await report.tripReport(
87
+ new Date(Date.UTC(2023, 9, 1, 0, 0, 0, 0)),
88
+ new Date(Date.UTC(2023, 9, 1, 23, 59, 59, 0)),
89
+ userData)
90
+
91
+ assert.equal(data.length, 1)
92
+ const device = data[0].devices.find(d => d.device.id === 22326)
93
+ assert.equal(device.trips.length, 1) // Total Trips
94
+ assert.equal(device.totalDistance, 33538.860000000335) // Total Kms
95
+ }, 20000)
96
+ // eslint-disable-next-line no-undef
97
+ it('Trip by device with time period 2', async () => {
98
+ const report = await getReports(process.env.jppenas_email, process.env.jppenas_password)
99
+ const userData = await report.getUserData()
100
+
101
+ userData.allWeek = false
102
+ userData.weekDays = {
103
+ sunday: true,
104
+ monday: true,
105
+ tuesday: true,
106
+ wednesday: true,
107
+ thursday: true,
108
+ friday: true,
109
+ saturday: true
110
+ }
111
+ userData.dayHours = {
112
+ startTime: '20:00',
113
+ endTime: '09:00'
114
+ }
115
+
116
+ const data = await report.tripReport(
117
+ new Date(Date.UTC(2023, 9, 2, 0, 0, 0, 0)),
118
+ new Date(Date.UTC(2023, 9, 2, 23, 59, 59, 0)),
119
+ userData)
120
+
121
+ assert.equal(data.length, 1)
122
+ const device = data[0].devices.find(d => d.device.id === 22326)
123
+ assert.equal(device.trips.length, 3) // Total Trips
124
+ assert.equal(device.totalDistance, 18589.02999999933) // Total Kms
125
+ }, 20000)
126
+
127
+ // eslint-disable-next-line no-undef
128
+ it('Trip fuel consumption', async () => {
129
+ const report = await getReports()
130
+ const userData = await report.getUserData()
131
+ userData.devices = userData.devices.filter(d => d.id === 69114)
132
+ const data = await report.tripReport(new Date(2023, 5, 11, 0, 0, 0, 0),
133
+ new Date(2023, 6, 11, 23, 59, 59, 0),
134
+ userData)
135
+
136
+ assert.equal(data.length, 1)
137
+ const device = data[0].devices.find(d => d.device.id === 69114)
138
+ assert.equal(device.trips.reduce((a, b) => a + b.fuelConsumption, 0), 167.69999999999987) // Total Trips
139
+ }, 30000)
140
+ })