fleetmap-reports 1.0.257 → 1.0.261

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.
@@ -1,16 +1,11 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
3
  <component name="ChangeListManager">
4
- <list default="true" id="eb665c86-c893-4333-bd2a-721dc27980b9" name="Changes" comment="Fix trips distance because imported positions generate trips with 0 kms">
5
- <change beforePath="$PROJECT_DIR$/lang/enGB.js" beforeDir="false" afterPath="$PROJECT_DIR$/lang/enGB.js" afterDir="false" />
6
- <change beforePath="$PROJECT_DIR$/lang/esCL.js" beforeDir="false" afterPath="$PROJECT_DIR$/lang/esCL.js" afterDir="false" />
7
- <change beforePath="$PROJECT_DIR$/lang/ptBR.js" beforeDir="false" afterPath="$PROJECT_DIR$/lang/ptBR.js" afterDir="false" />
8
- <change beforePath="$PROJECT_DIR$/lang/ptPT.js" beforeDir="false" afterPath="$PROJECT_DIR$/lang/ptPT.js" afterDir="false" />
4
+ <list default="true" id="eb665c86-c893-4333-bd2a-721dc27980b9" name="Changes" comment="timezone - check if it's running on client side">
9
5
  <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
10
6
  <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
11
7
  <change beforePath="$PROJECT_DIR$/src/index.test.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.test.js" afterDir="false" />
12
- <change beforePath="$PROJECT_DIR$/src/location-report.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/location-report.js" afterDir="false" />
13
- <change beforePath="$PROJECT_DIR$/src/util/trips.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/util/trips.js" afterDir="false" />
8
+ <change beforePath="$PROJECT_DIR$/src/trip-report.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/trip-report.js" afterDir="false" />
14
9
  </list>
15
10
  <option name="SHOW_DIALOG" value="false" />
16
11
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -217,7 +212,13 @@
217
212
  <workItem from="1639592539998" duration="27141000" />
218
213
  <workItem from="1639766010908" duration="4991000" />
219
214
  <workItem from="1639872937953" duration="1438000" />
220
- <workItem from="1639954341221" duration="10938000" />
215
+ <workItem from="1639954341221" duration="11986000" />
216
+ <workItem from="1640272520380" duration="2253000" />
217
+ <workItem from="1640789226071" duration="1935000" />
218
+ <workItem from="1640794844118" duration="10128000" />
219
+ <workItem from="1640866364417" duration="67000" />
220
+ <workItem from="1640866782794" duration="123000" />
221
+ <workItem from="1640866964393" duration="478000" />
221
222
  </task>
222
223
  <task id="LOCAL-00001" summary="Fix getStyle">
223
224
  <created>1636983717385</created>
@@ -324,7 +325,28 @@
324
325
  <option name="project" value="LOCAL" />
325
326
  <updated>1640000462825</updated>
326
327
  </task>
327
- <option name="localTasksCounter" value="16" />
328
+ <task id="LOCAL-00016" summary="Fix reports by driver">
329
+ <created>1640274171902</created>
330
+ <option name="number" value="00016" />
331
+ <option name="presentableId" value="LOCAL-00016" />
332
+ <option name="project" value="LOCAL" />
333
+ <updated>1640274171902</updated>
334
+ </task>
335
+ <task id="LOCAL-00017" summary="location report - check if it's running on client side">
336
+ <created>1640795243287</created>
337
+ <option name="number" value="00017" />
338
+ <option name="presentableId" value="LOCAL-00017" />
339
+ <option name="project" value="LOCAL" />
340
+ <updated>1640795243288</updated>
341
+ </task>
342
+ <task id="LOCAL-00018" summary="timezone - check if it's running on client side">
343
+ <created>1640825795052</created>
344
+ <option name="number" value="00018" />
345
+ <option name="presentableId" value="LOCAL-00018" />
346
+ <option name="project" value="LOCAL" />
347
+ <updated>1640825795053</updated>
348
+ </task>
349
+ <option name="localTasksCounter" value="19" />
328
350
  <servers />
329
351
  </component>
330
352
  <component name="TypeScriptGeneratedFilesManager">
@@ -357,6 +379,9 @@
357
379
  <MESSAGE value="fix speeding report" />
358
380
  <MESSAGE value="Trip and activity report with time period" />
359
381
  <MESSAGE value="Fix trips distance because imported positions generate trips with 0 kms" />
360
- <option name="LAST_COMMIT_MESSAGE" value="Fix trips distance because imported positions generate trips with 0 kms" />
382
+ <MESSAGE value="Fix reports by driver" />
383
+ <MESSAGE value="location report - check if it's running on client side" />
384
+ <MESSAGE value="timezone - check if it's running on client side" />
385
+ <option name="LAST_COMMIT_MESSAGE" value="timezone - check if it's running on client side" />
361
386
  </component>
362
387
  </project>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.257",
3
+ "version": "1.0.261",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -5,6 +5,7 @@ require('jspdf-autotable')
5
5
  const {getStyle} = require("./reportStyle");
6
6
  const {headerFromUser} = require("./util/pdfDocument");
7
7
  const {getUserPartner} = require("fleetmap-partners");
8
+ const {convertToLocaleString} = require("./util/utils");
8
9
 
9
10
  const fileName = 'EventReport'
10
11
 
@@ -120,6 +121,7 @@ async function exportSpeedingReportToPDF(userData, reportData) {
120
121
  console.log('Export to PDF')
121
122
 
122
123
  const lang = userData.user.attributes.lang
124
+ const timezone = userData.user.attributes.timezone
123
125
  const translations = messages[lang] ? messages[lang] : messages['en-GB']
124
126
 
125
127
  const headers = [
@@ -149,7 +151,7 @@ async function exportSpeedingReportToPDF(userData, reportData) {
149
151
  doc.text(name, 20, space+20 )
150
152
  doc.setFontSize(11)
151
153
  doc.text(group, 200, space+20 )
152
- doc.text(new Date(d.from).toLocaleString() + ' - ' + new Date(d.to).toLocaleString(), 20, space+25 )
154
+ doc.text(convertToLocaleString(d.from, lang, timezone) + ' - ' + convertToLocaleString(d.to, lang, timezone), 20, space+25 )
153
155
 
154
156
  doc.autoTable(['','','','',''], [
155
157
  [translations.report.event_ignitionOn,translations.report.event_ignitionOff, translations.report.event_geofenceEnter,
@@ -270,10 +272,7 @@ function getAlertInfo(drivers, alert) {
270
272
 
271
273
  function getAlertDate(user, alert) {
272
274
  if(alert.position) {
273
- return new Date(alert.position.fixTime).toLocaleString(user.attributes.lang, {
274
- timeZone: user.attributes.timezone,
275
- hour12: false
276
- })
275
+ return convertToLocaleString(alert.position.fixTime, user.attributes.lang, user.attributes.timezone)
277
276
  }
278
277
  }
279
278
 
package/src/index.test.js CHANGED
@@ -44,6 +44,17 @@ describe('Reports', function() {
44
44
 
45
45
  console.log(reportData)
46
46
 
47
+ await reports.kmsReportToPDF(userData, reportData[0])
48
+ })
49
+ it('test locationReport by day', async () => {
50
+ const reports = await getReports()
51
+ const userData = await reports.getUserData()
52
+ userData.groupByDay = true
53
+ const reportData = await reports.locations(new Date(2021, 10, 1), new Date(2021, 10, 3),
54
+ userData)
55
+
56
+ console.log(reportData)
57
+
47
58
  await reports.kmsReportToPDF(userData, reportData[0])
48
59
  })
49
60
  })
@@ -5,6 +5,7 @@ require('jspdf-autotable')
5
5
  const {headerFromUser} = require("./util/pdfDocument");
6
6
  const {getStyle} = require("./reportStyle")
7
7
  const {getUserPartner} = require("fleetmap-partners");
8
+ const {convertToLocaleString} = require("./util/utils");
8
9
 
9
10
  const fileName = 'LocationReport'
10
11
 
@@ -104,6 +105,7 @@ async function exportLocationReportToPDF(userData, reportData) {
104
105
  console.log('Export to PDF')
105
106
 
106
107
  const lang = userData.user.attributes.lang
108
+ const timezone = userData.user.attributes.timezone
107
109
  const translations = messages[lang] ? messages[lang] : messages['en-GB']
108
110
 
109
111
  const headers = [
@@ -136,7 +138,7 @@ async function exportLocationReportToPDF(userData, reportData) {
136
138
  doc.text(name, 20, space + 20)
137
139
  doc.setFontSize(11)
138
140
  doc.text(group, 200, space + 20)
139
- doc.text(new Date(d.from).toLocaleString() + ' - ' + new Date(d.to).toLocaleString(), 20, space + 25)
141
+ doc.text(convertToLocaleString(d.from, lang, timezone) + ' - ' + convertToLocaleString(d.to, lang, timezone), 20, space + 25)
140
142
  d.positions.map(a => {
141
143
  const temp = [
142
144
  getLocationDate(a, userData.user),
@@ -251,10 +253,7 @@ function deviceName(device){
251
253
  }
252
254
 
253
255
  function getLocationDate(location, user){
254
- return new Date(location.fixTime).toLocaleString(user.attributes.lang, {
255
- timeZone: user.attributes.timezone,
256
- hour12: false
257
- })
256
+ return convertToLocaleString(location.fixTime, user.attributes.lang, user.attributes.timezone)
258
257
  }
259
258
 
260
259
  function getDriverName(location, drivers) {
@@ -1,6 +1,6 @@
1
1
  const messages = require('../lang')
2
2
  const jsPDF = require('jspdf')
3
- const {convertMS} = require("./util/utils")
3
+ const {convertMS, convertToLocaleString} = require("./util/utils")
4
4
  const {headerFromUser} = require("./util/pdfDocument")
5
5
  require('jspdf-autotable')
6
6
  const { parse } = require('wkt')
@@ -318,6 +318,7 @@ async function exportSpeedingReportToPDF(userData, reportData) {
318
318
  console.log('Export to PDF')
319
319
 
320
320
  const lang = userData.user.attributes.lang
321
+ const timezone = userData.user.attributes.timezone
321
322
  const translations = messages[lang] ? messages[lang] : messages['en-GB']
322
323
 
323
324
  const overspeedData = userData.byDriver ? reportData.drivers : reportData.devices
@@ -364,7 +365,7 @@ async function exportSpeedingReportToPDF(userData, reportData) {
364
365
  doc.text(name, 20, space+20 )
365
366
  doc.setFontSize(11)
366
367
  doc.text(group ? translations.report.group + ': ' + group.name : '', 150, space+20 )
367
- doc.text(new Date(d.from).toLocaleString() + ' - ' + new Date(d.to).toLocaleString(), 20, space+25 )
368
+ doc.text(convertToLocaleString(d.from, lang, timezone) + ' - ' + convertToLocaleString(d.to, lang, timezone), 20, space+25 )
368
369
  if (d.alerts[0] && !userData.byDriver) {
369
370
  doc.text(translations.report.speedLimit + ": " + (userData.useVehicleSpeedLimit ? Math.round(d.alerts[0].attributes.speedLimit * 1.85200) : userData.customSpeed) + ' Km/h', 20, space + 30)
370
371
  }
@@ -490,10 +491,7 @@ function deviceName(device){
490
491
  }
491
492
 
492
493
  function getAlertDate(row, user) {
493
- return new Date(row.position.fixTime).toLocaleString(user.attributes.lang, {
494
- timeZone: user.attributes.timezone,
495
- hour12: false
496
- })
494
+ return convertToLocaleString(row.position.fixTime, user.attributes.lang, user.attributes.timezone)
497
495
  }
498
496
 
499
497
  function getMaxSpeed(data) {
@@ -1,7 +1,7 @@
1
1
  const automaticReports = require("./automaticReports")
2
2
  const messages = require('../lang')
3
3
  const jsPDF = require('jspdf')
4
- const {convertMS} = require("./util/utils")
4
+ const {convertMS, convertToLocaleString, convertToLocaleDateString, convertToLocaleTimeString} = require("./util/utils")
5
5
  require('jspdf-autotable')
6
6
  const {coordsDistance} = require("./util/utils")
7
7
  const drivers = require("./util/driver")
@@ -217,6 +217,7 @@ async function exportTripReportToPDF(userData, reportData) {
217
217
  console.log('Export to PDF')
218
218
 
219
219
  const lang = userData.user.attributes.lang
220
+ const timezone = userData.user.attributes.timezone
220
221
  const translations = messages[lang] ? messages[lang] : messages['en-GB']
221
222
  const tripsData = userData.byDriver ? reportData.drivers : reportData.devices
222
223
 
@@ -260,7 +261,7 @@ async function exportTripReportToPDF(userData, reportData) {
260
261
  doc.text(name, 20, space+20 )
261
262
  doc.setFontSize(11)
262
263
  doc.text(group ? translations.report.group + ': ' + group.name : '', 200, space+20 )
263
- doc.text(new Date(d.from).toLocaleString() + ' - ' + new Date(d.to).toLocaleString(), 20, space+25 )
264
+ doc.text(convertToLocaleString(d.from, lang, timezone) + ' - ' + convertToLocaleString(d.to, lang, timezone), 20, space+25 )
264
265
  if(!userData.allWeek) {
265
266
  doc.text((userData.weekDays.monday ? ' ' + translations.report.monday + ',' : '')
266
267
  + (userData.weekDays.tuesday ? ' ' + translations.report.tuesday + ',' : '')
@@ -398,23 +399,17 @@ function deviceName(device){
398
399
  }
399
400
 
400
401
  function getTripDate(user, trip){
401
- return new Date(trip.startTime).toLocaleDateString(user.attributes.lang, {
402
- timeZone: user.attributes.timezone,
403
- hour12: false
404
- })
402
+ return convertToLocaleDateString(trip.startTime, user.attributes.lang, user.attributes.timezone)
405
403
  }
404
+
406
405
  function getTripStart(user, trip){
407
- return new Date(trip.startTime).toLocaleTimeString(user.attributes.lang, {
408
- timeZone: user.attributes.timezone,
409
- hour12: false
410
- })
406
+ return convertToLocaleTimeString(trip.startTime, user.attributes.lang, user.attributes.timezone)
411
407
  }
408
+
412
409
  function getTripEnd(user, trip){
413
- return new Date(trip.endTime).toLocaleTimeString(user.attributes.lang, {
414
- timeZone: user.attributes.timezone,
415
- hour12: false
416
- })
410
+ return convertToLocaleTimeString(trip.endTime, user.attributes.lang, user.attributes.timezone)
417
411
  }
412
+
418
413
  function getDriverName(drivers, driverUniqueId) {
419
414
  if(driverUniqueId) {
420
415
  const driver = drivers.find(d => d.uniqueId === driverUniqueId)
@@ -423,18 +418,22 @@ function getDriverName(drivers, driverUniqueId) {
423
418
 
424
419
  return ''
425
420
  }
421
+
426
422
  function getSumTotalKms(user, data) {
427
423
  const values = data.map(item => {
428
424
  return item.totalKms ? parseFloat(item.totalKms) : 0
429
425
  })
430
426
  return Intl.NumberFormat(user.attributes.lang, {maximumFractionDigits: 2}).format(values.reduce((a, b) => a + b, 0))
431
427
  }
428
+
432
429
  function getSumAvgSpeed(data) {
433
430
  const values = data.map(item => {
434
- return Math.round(item.averageSpeed * 1.85200)
431
+ return Math.round(item.averageSpeed * 1.85200) * item.totalKms
435
432
  })
436
- return Math.round((values.reduce((a, b) => a + b, 0)) / data.length)
433
+ const totalKms = data.reduce((a, b) => a + b.totalKms, 0)
434
+ return totalKms > 0 ? Math.round((values.reduce((a, b) => a + b, 0)) / totalKms) : 0
437
435
  }
436
+
438
437
  function getMaxSpeed(data) {
439
438
  const values = data.map(item => {
440
439
  return item.maxSpeed
@@ -2,8 +2,7 @@ const traccar = require("./traccar");
2
2
 
3
3
  //get devices used by each driver between two dates
4
4
  async function devicesByDriver(traccarInstance, from, to, drivers, devices){
5
- const eventsData = traccar.getEvents(traccarInstance, from, to , devices, ['driverChanged'])
6
-
5
+ const eventsData = await traccar.getEvents(traccarInstance, from, to , devices, ['driverChanged'])
7
6
  const deviceIds = []
8
7
  for(const d of drivers) {
9
8
  const events = eventsData.filter(e => {
package/src/util/utils.js CHANGED
@@ -55,8 +55,46 @@ async function getImgFromUrl(hostname) {
55
55
  }
56
56
  }
57
57
 
58
+ function isClientSide() { typeof window !== "undefined" }
59
+
60
+ function convertToLocaleString(value, lang, timezone){
61
+ if(isClientSide){
62
+ return new Date(value).toLocaleString()
63
+ } else {
64
+ return new Date(value).toLocaleString(lang, {
65
+ timeZone: timezone,
66
+ hour12: false
67
+ })
68
+ }
69
+ }
70
+
71
+ function convertToLocaleDateString(value, lang, timezone){
72
+ if(isClientSide){
73
+ return new Date(value).toLocaleDateString()
74
+ } else {
75
+ return new Date(value).toLocaleDateString(lang, {
76
+ timeZone: timezone,
77
+ hour12: false
78
+ })
79
+ }
80
+ }
81
+
82
+ function convertToLocaleTimeString(value, lang, timezone){
83
+ if(isClientSide){
84
+ return new Date(value).toLocaleTimeString()
85
+ } else {
86
+ return new Date(value).toLocaleTimeString(lang, {
87
+ timeZone: timezone,
88
+ hour12: false
89
+ })
90
+ }
91
+ }
92
+
58
93
  exports.getImgFromUrl = getImgFromUrl
59
94
  exports.convertMS = convertMS
60
95
  exports.coordsDistance = coordsDistance
61
96
  exports.getDates = getDates
97
+ exports.convertToLocaleString = convertToLocaleString
98
+ exports.convertToLocaleDateString = convertToLocaleDateString
99
+ exports.convertToLocaleTimeString = convertToLocaleTimeString
62
100
 
@@ -1,7 +1,7 @@
1
1
  const moment = require('moment')
2
2
  const messages = require('../lang')
3
3
  const automaticReports = require("./automaticReports");
4
- const {convertMS} = require("./util/utils")
4
+ const {convertMS, convertToLocaleString} = require("./util/utils")
5
5
  const jsPDF = require('jspdf')
6
6
  require('jspdf-autotable')
7
7
  const {headerFromUser} = require("./util/pdfDocument");
@@ -150,6 +150,7 @@ async function exportZoneReportToPDF(userData, reportData) {
150
150
  console.log('Export to PDF')
151
151
 
152
152
  const lang = userData.user.attributes.lang
153
+ const timezone = userData.user.attributes.timezone
153
154
  const translations = messages[lang] ? messages[lang] : messages['en-GB']
154
155
 
155
156
  const headers = [
@@ -180,7 +181,7 @@ async function exportZoneReportToPDF(userData, reportData) {
180
181
  doc.text(name, 20, space+20 )
181
182
  doc.setFontSize(11)
182
183
  doc.text(group ? translations.report.group + ': ' + group.name : '', 200, space+20 )
183
- doc.text(new Date(d.from).toLocaleString() + ' - ' + new Date(d.to).toLocaleString(), 20, space+25 )
184
+ doc.text(convertToLocaleString(d.from, lang, timezone) + ' - ' + convertToLocaleString(d.to, lang, timezone), 20, space+25 )
184
185
  d.geofences.map(a => {
185
186
  const temp = [
186
187
  geofenceEnter(userData.user, a),
@@ -271,16 +272,10 @@ function deviceName(device){
271
272
  }
272
273
 
273
274
  function geofenceEnter(user, row){
274
- return row.inTime ? new Date(row.inTime.fixTime).toLocaleString(user.attributes.lang, {
275
- timeZone: user.attributes.timezone,
276
- hour12: false
277
- }) : ''
275
+ return row.inTime ? convertToLocaleString(row.inTime.fixTime, user.attributes.lang, user.attributes.timezone) : ''
278
276
  }
279
277
  function geofenceExit(user, row){
280
- return row.outTime ? new Date(row.outTime.fixTime).toLocaleString(user.attributes.lang, {
281
- timeZone: user.attributes.timezone,
282
- hour12: false
283
- }) : ''
278
+ return row.outTime ? convertToLocaleString(row.outTime.fixTime, user.attributes.lang, user.attributes.timezone) : ''
284
279
  }
285
280
 
286
281
  exports.createZoneReport = createZoneReport