fleetmap-reports 1.0.965 → 1.0.967

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.
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.965",
3
+ "version": "1.0.967",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -54,7 +54,7 @@ async function createFuelConsumptionReport (from, to, userData, traccar) {
54
54
 
55
55
  const odooAvgConsumption = useOdooFuelData(d, route) ? getOdooAvgConsumption(date, refuelingPositions, trips) : 0
56
56
  const distance = summaryByDevice.distance
57
- const spentFuel = calculateConsumption(d, { trips: tripsByDay, stops: [], route: routeByDay }, odooAvgConsumption)
57
+ const spentFuel = calculateConsumption(d, { trips: tripsByDay, stops: [], route: routeByDay, summary: summaryByDevice }, odooAvgConsumption)
58
58
 
59
59
  const dataRow = {
60
60
  date,
package/src/index.js CHANGED
@@ -19,6 +19,7 @@ function Reports (config, axios, cookieJar) {
19
19
  drivers: await this.traccar.drivers.driversGet().then(d => d.data),
20
20
  geofences: await this.traccar.geofences.geofencesGet().then(d => d.data),
21
21
  byGroup: false,
22
+ allWeek: true,
22
23
  dayHours: { startTime: '00:00', endTime: '23:59' }
23
24
  }
24
25
  }
@@ -193,5 +194,15 @@ function Reports (config, axios, cookieJar) {
193
194
  this.performanceReportToExcel = (userData, reportData) => {
194
195
  return require('./partnerReports/performance-report').exportPerformanceReportToExcel(userData, reportData)
195
196
  }
197
+
198
+ this.dailyUseReport = (from, to, userData) => {
199
+ return require('./partnerReports/dailyuse-report').createDailyUseReport(from, to, userData, this.traccar)
200
+ }
201
+ this.dailyUseReportToPDF = (userData, reportData) => {
202
+ return require('./partnerReports/dailyuse-report').exportDailyUseReportToPDF(userData, reportData)
203
+ }
204
+ this.dailyUseReportToExcel = (userData, reportData) => {
205
+ return require('./partnerReports/dailyuse-report').exportDailyUseReportToExcel(userData, reportData)
206
+ }
196
207
  }
197
208
  module.exports = Reports
@@ -1,7 +1,11 @@
1
1
  const traccarHelper = require('../util/traccar')
2
2
  const { isInsideTimetable } = require('../util/trips')
3
- const { convertFromUTCDate } = require('../util/utils')
3
+ const { convertFromUTCDate, getTranslations, convertMS} = 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");
5
9
 
6
10
  async function createDailyUseReport (from, to, userData, traccar) {
7
11
  const reportData = []
@@ -77,4 +81,78 @@ function processDeviceData (allInOne, d, userData) {
77
81
  }
78
82
  }
79
83
 
84
+ async function exportDailyUseReportToPDF (userData, reportData) {
85
+ const translations = getTranslations(userData)
86
+
87
+ const headers = [
88
+ translations.report.vehicle,
89
+ 'Utilisation',
90
+ 'Conduite',
91
+ 'Ralenti',
92
+ 'Totale (L)',
93
+ 'Conduite (L)',
94
+ 'Ralenti (L)',
95
+ 'Conduite (Km)',
96
+ 'Économique',
97
+ 'Économique (L)',
98
+ 'Économique (Km)',
99
+ 'Cruise Control',
100
+ 'Cruise Control (L)',
101
+ 'Cruise Control (Km)',
102
+ 'Tour moteur élevé',
103
+ 'Accéleration brusque (Sum)',
104
+ 'Freinage brusque (Sum)',
105
+ 'Virages brusque'
106
+ ]
107
+
108
+ const data = []
109
+ reportData.forEach(d => {
110
+ const row = [
111
+ d.device,
112
+ convertMS((d.drivingTime + d.idleTime) * 1000),
113
+ convertMS(d.drivingTime * 1000),
114
+ convertMS(d.idleTime * 1000),
115
+ d.drivingConsumption + d.idleConsumption,
116
+ d.drivingConsumption,
117
+ d.idleConsumption,
118
+ d.drivingDistance.toFixed(2),
119
+ convertMS(d.economicTime * 1000),
120
+ d.economicConsumption.toFixed(1),
121
+ d.economicDistance.toFixed(2),
122
+ convertMS(d.cruiseControlTime * 1000),
123
+ d.cruiseControlConsumption.toFixed(1),
124
+ d.cruiseControlDistance.toFixed(2),
125
+ convertMS(d.highEngineRPM * 1000),
126
+ d.hardAcceleration,
127
+ d.hardBraking,
128
+ d.hardCornering
129
+ ]
130
+ data.push(row)
131
+ })
132
+
133
+ const doc = new jsPDF.jsPDF('l')
134
+ await headerFromUser(doc, 'Rapport de Performance', userData.user)
135
+ const style = getStyle(getUserPartner(userData.user))
136
+
137
+ const footValues = []
138
+
139
+ doc.setFontSize(11)
140
+ doc.text(new Date(userData.from).toLocaleString() + ' - ' + new Date(userData.to).toLocaleString(), 20, 33)
141
+
142
+ style.headerFontSize = 8
143
+ style.bodyFontSize = 7
144
+ const columnStyles = {}
145
+ for (let i = 1; i < 18; i++) {
146
+ columnStyles[i] = { halign: 'right' }
147
+ }
148
+ addTable(doc, headers, data, footValues, style, 40, columnStyles)
149
+ return doc
150
+ }
151
+
152
+ function exportDailyUseReportToExcel (userData, reportData) {
153
+
154
+ }
155
+
80
156
  exports.createDailyUseReport = createDailyUseReport
157
+ exports.exportDailyUseReportToPDF = exportDailyUseReportToPDF
158
+ exports.exportDailyUseReportToExcel = exportDailyUseReportToExcel
@@ -3,7 +3,7 @@ const traccarHelper = require('../util/traccar')
3
3
  const { getUncompletedTrip } = require('../util/trips')
4
4
  const { getEndTripMessages, getCanDriverStyleMessages, parseEndTripMessage, parseCanDriverStyleMessage } = require('../util/xpert')
5
5
  const { calculateDistance, getTranslations, convertMS } = require('../util/utils')
6
- const { addTable } = require('../util/pdfDocument')
6
+ const { addTable, headerFromUser} = require('../util/pdfDocument')
7
7
  const jsPDF = require('jspdf')
8
8
  const { getStyle } = require('../reportStyle')
9
9
  const { getUserPartner } = require('fleetmap-partners')
@@ -218,7 +218,7 @@ function calculateRPMSections (route, min, max) {
218
218
  return sections
219
219
  }
220
220
 
221
- function exportPerformanceReportToPDF (userData, reportData) {
221
+ async function exportPerformanceReportToPDF (userData, reportData) {
222
222
  const translations = getTranslations(userData)
223
223
 
224
224
  const headers = [
@@ -268,6 +268,8 @@ function exportPerformanceReportToPDF (userData, reportData) {
268
268
  })
269
269
 
270
270
  const doc = new jsPDF.jsPDF('l')
271
+ await headerFromUser(doc, 'Rapport de Performance', userData.user)
272
+
271
273
  const style = getStyle(getUserPartner(userData.user))
272
274
 
273
275
  const footValues = []
@@ -314,7 +316,7 @@ function exportPerformanceReportToExcel (userData, reportData) {
314
316
 
315
317
  let data = []
316
318
  data = data.concat([{}])
317
- /*data = data.concat(reportData.map(d => {
319
+ data = data.concat(reportData.map(d => {
318
320
  return {
319
321
  name: d.device,
320
322
  totalUse: convertMS((d.drivingTime + d.idleTime) * 1000),
@@ -323,21 +325,19 @@ function exportPerformanceReportToExcel (userData, reportData) {
323
325
  totalConsumption: d.drivingConsumption + d.idleConsumption,
324
326
  drivingConsumption: d.drivingConsumption,
325
327
  idleConsumption: d.idleConsumption,
326
- drivingDistance: d.drivingDistance,
328
+ drivingDistance: Number(d.drivingDistance.toFixed(2)),
327
329
  economicTime: convertMS(d.economicTime * 1000),
328
- economicConsumption: d.economicConsumption,
329
- economicDistance: d.economicDistance,
330
+ economicConsumption: Number(d.economicConsumption.toFixed(1)),
331
+ economicDistance: Number(d.economicDistance.toFixed(2)),
330
332
  cruiseControlTime: convertMS(d.cruiseControlTime * 1000),
331
- cruiseControlConsumption: d.cruiseControlConsumption,
332
- cruiseControlDistance: d.cruiseControlDistance,
333
+ cruiseControlConsumption: Number(d.cruiseControlConsumption.toFixed(1)),
334
+ cruiseControlDistance: Number(d.cruiseControlDistance.toFixed(2)),
333
335
  highEngineRPM: d.highEngineRPM,
334
336
  hardAcceleration: d.hardAcceleration,
335
337
  hardBraking: d.hardBraking,
336
338
  hardCornering: d.hardCornering
337
339
  }
338
- }))*/
339
-
340
- console.log(data)
340
+ }))
341
341
 
342
342
  return {
343
343
  headers,
@@ -35,8 +35,8 @@ describe('activity report', function () {
35
35
  const report = await getReports()
36
36
  const userData = await report.getUserData()
37
37
  userData.groupByDay = true
38
- const data = await report.activityReport(new Date(2022, 0, 1, 0, 0, 0, 0),
39
- new Date(2022, 0, 20, 23, 59, 59, 0),
38
+ const data = await report.activityReport(new Date(2023, 9, 1, 0, 0, 0, 0),
39
+ new Date(2023, 9, 20, 23, 59, 59, 0),
40
40
  userData)
41
41
  assert.equal(data.length, 1)
42
42
  const device = data[0].devices.find(d => d.device.id === 22326)
@@ -16,7 +16,7 @@ axiosCookieJarSupport(axios)
16
16
 
17
17
  const getReports = async (email, password) => {
18
18
  try {
19
- // console.log('email / pass', process.env.email || email, process.env.password || password)
19
+ console.log('email / pass', process.env.email || email, process.env.password || password)
20
20
  await new SessionApi(traccarConfig, null, axios).sessionPost(email || process.env.email, password || process.env.password)
21
21
  return new Index(traccarConfig, axios, cookieJar)
22
22
  } catch (e) {
@@ -1,7 +1,9 @@
1
1
  const { getReports } = require('./index')
2
- const { createPerformanceReport } = require('../partnerReports/performance-report')
2
+ const { createPerformanceReport, exportPerformanceReportToExcel } = require('../partnerReports/performance-report')
3
3
  const assert = require('assert')
4
4
  const { convertMS } = require('../util/utils')
5
+ const xlsx = require("@jcardus/json-as-xlsx");
6
+
5
7
  // eslint-disable-next-line no-undef
6
8
  describe('performance', function () {
7
9
  // eslint-disable-next-line no-undef
@@ -15,9 +17,10 @@ describe('performance', function () {
15
17
  userData,
16
18
  report.traccar)
17
19
  console.log(data)
20
+
18
21
  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')
22
+ assert.equal(data[0].distance, 326.8844199999999)
23
+ assert.equal(convertMS(data[1].time * 1000, false), '08:31')
21
24
  }, 8000000)
22
25
 
23
26
  // eslint-disable-next-line no-undef
@@ -33,4 +36,21 @@ describe('performance', function () {
33
36
  console.log(data)
34
37
  assert.equal(data[0].consumption, 168.51989999999998)
35
38
  }, 8000000)
39
+
40
+ it('performance report export excel', async () => {
41
+ const report = await getReports()
42
+ const userData = await report.getUserData()
43
+ const data = await createPerformanceReport(
44
+ new Date(Date.UTC(2023, 6, 1, 0, 0, 0, 0)),
45
+ new Date(Date.UTC(2023, 6, 17, 23, 59, 59, 0)),
46
+ userData,
47
+ report.traccar)
48
+ console.log(data)
49
+ const excel = exportPerformanceReportToExcel(userData, data)
50
+ xlsx([{
51
+ sheet: 'Sheet1',
52
+ columns: excel.headers,
53
+ content: excel.data
54
+ }], excel.settings)
55
+ }, 8000000)
36
56
  })
package/src/util/trips.js CHANGED
@@ -118,9 +118,8 @@ async function getDataByDay (device, date, data, userData, traccarInstance) {
118
118
 
119
119
  const tripsByDay = []
120
120
  if (data.trips) {
121
- tripsByDay.concat(data.trips.filter(t => new Date(t.endTime) > startDate && new Date(t.startTime) < endDate).map(t => {
122
- return { ...t }
123
- }))
121
+ const filteredTrips = data.trips.filter(t => new Date(t.endTime) > startDate && new Date(t.startTime) < endDate)
122
+ tripsByDay.push(...filteredTrips.map(t => { return { ...t } }))
124
123
 
125
124
  for (const t of tripsByDay) {
126
125
  await calculatePartialTrip(device, startDate, endDate, data.route, t, traccarInstance)
@@ -110,8 +110,6 @@ async function processDevices (from, to, devices, userData, data) {
110
110
  const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
111
111
  const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
112
112
 
113
- console.log(startDate, endDate)
114
-
115
113
  const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData: filteredByGeofence }, userData)
116
114
 
117
115
  const firstIn = zoneInOutDayData.find(z => z.inTime && new Date(z.inTime.fixTime) > startDate)
@@ -147,8 +145,6 @@ async function processDevices (from, to, devices, userData, data) {
147
145
  const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
148
146
  const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
149
147
 
150
- console.log(startDate, endDate)
151
-
152
148
  const { routeByDay, zoneInOutDayData } = await getDataByDay(d, date, { route: deviceRoute, zoneInOutData }, userData)
153
149
 
154
150
  const distanceOut = calculateDistanceOut(zoneInOutDayData, routeByDay, startDate, endDate, 'distanceOutAny', d)