fleetmap-reports 1.0.907 → 1.0.909

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.907",
3
+ "version": "1.0.909",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,7 +1,7 @@
1
1
  const automaticReports = require('./automaticReports')
2
2
  const {
3
3
  convertMS, getDates, getTranslations, weekDaySelected, convertToLocaleString, isClientSide,
4
- getLanguage, convertFromUTC, convertFromLocal
4
+ getLanguage
5
5
  } = require('./util/utils')
6
6
  const jsPDF = require('jspdf')
7
7
  require('jspdf-autotable')
@@ -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, calculatePartialTrip } = require('./util/trips')
15
+ const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay } = require('./util/trips')
16
16
  const { devicesToProcess } = require('./util/device')
17
17
  const { getDriverData } = require('./util/driver')
18
18
  const { calculateConsumption } = require('./util/fuel')
@@ -157,14 +157,6 @@ async function createActivityReportByDriver (from, to, userData, traccarInstance
157
157
  return allData
158
158
  }
159
159
 
160
- function checkTripsPartialInsideDate (date, userData, tripsByDay, deviceRoute) {
161
- const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
162
- const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
163
- const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
164
- const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
165
- tripsByDay.forEach(t => calculatePartialTrip(startDate, endDate, deviceRoute, t))
166
- }
167
-
168
160
  function processDevices (from, to, devices, data, userData) {
169
161
  const devicesResult = []
170
162
 
@@ -183,18 +175,11 @@ function processDevices (from, to, devices, data, userData) {
183
175
  const summary = []
184
176
  if (userData.groupByDay) {
185
177
  const trips = deviceTrips.filter(t => userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, deviceRoute))
186
-
187
178
  const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
188
179
  for (const date of dates) {
189
- const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
190
- const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
191
- const tripsByDay = trips.filter(t => new Date(t.endTime) > fromByDay && new Date(t.startTime) < toByDay).map(t => { return { ...t } })
180
+ const { tripsByDay, routeByDay } = getDataByDay(date, trips, userData, deviceRoute)
192
181
 
193
- checkTripsPartialInsideDate(date, userData, tripsByDay, deviceRoute)
194
-
195
- const routeByDay = deviceRoute.filter(p => (new Date(p.fixTime) > fromByDay && new Date(p.fixTime) < toByDay))
196
182
  const distance = tripsByDay.reduce((a, b) => a + b.distance, 0)
197
-
198
183
  if (!userData.allWeek && userData.weekDays && userData.dayHours) {
199
184
  if (weekDaySelected(date, userData.weekDays)) {
200
185
  summary.push({
package/src/kms-report.js CHANGED
@@ -7,10 +7,10 @@ const {
7
7
  } = require('./util/pdfDocument')
8
8
  const { getUserPartner } = require('fleetmap-partners')
9
9
  const traccar = require('./util/traccar')
10
- const { getDates, convertFromUTC, getTranslations } = require('./util/utils')
10
+ const { getDates, getTranslations } = require('./util/utils')
11
11
  const trips = require('./util/trips')
12
12
  const drivers = require('./util/driver')
13
- const { isInsideTimetable, isPartialInsideTimetable, calculateTrip } = require('./util/trips')
13
+ const { isInsideTimetable, isPartialInsideTimetable, calculateTrip, getDataByDay } = require('./util/trips')
14
14
  const traccarHelper = require('./util/traccar')
15
15
  const { devicesToProcess } = require('./util/device')
16
16
  const { getDriverData } = require('./util/driver')
@@ -43,7 +43,7 @@ async function createKmsReportByDevice (from, to, userData, traccarInstance) {
43
43
  to
44
44
  }
45
45
 
46
- const needRoute = !userData.allWeek
46
+ const needRoute = !userData.allWeek || userData.groupByDay
47
47
  const allInOne = await traccarHelper.getAllInOne(traccarInstance, from, to, devices, needRoute, true, false, false, 0, devices.length, 20)
48
48
  const tripsData = allInOne.trips
49
49
  const routeData = allInOne.route
@@ -161,43 +161,22 @@ function processDevices (from, to, devices, data, userData) {
161
161
 
162
162
  if (userData.groupByDay) {
163
163
  if (trips.length > 0) {
164
- trips.forEach(t => {
165
- const tripDay = convertFromUTC(t.startTime, userData.user.attributes.timezone)
166
- tripDay.setHours(12, 0, 0)
167
- t.tripDay = tripDay.toISOString()
168
- })
169
- const groupedTrips = trips.reduce(
170
- (entryMap, e) => entryMap.set(e.tripDay, [...entryMap.get(e.tripDay) || [], e]),
171
- new Map()
172
- )
173
-
174
- const allDates = getDates(from, to)
175
-
176
164
  const days = []
177
- let keys = Array.from(groupedTrips.keys())
178
- allDates.forEach(d => {
179
- d.setHours(12, 0, 0)
180
- const day = d.toISOString()
181
- if (!keys.includes(day)) {
182
- groupedTrips.set(day, [])
183
- }
184
- })
185
-
186
- keys = Array.from(groupedTrips.keys())
187
- keys.sort((a, b) => new Date(a).getTime() - new Date(b).getTime())
188
- keys.forEach(key => {
189
- const currentDate = new Date(key)
190
- const dayTrips = groupedTrips.get(key)
165
+ const trips = deviceTrips.filter(t => userData.allWeek || !userData.weekDays || isInsideTimetable(t, userData) || isPartialInsideTimetable(t, userData, deviceRoute))
166
+ const dates = getDates(from, to, userData.user.attributes.timezone || getUserPartner(userData.user).timezone)
167
+ for (const date of dates) {
168
+ const { tripsByDay } = getDataByDay(date, trips, userData, deviceRoute)
191
169
  const day = {
192
- date: currentDate,
193
- kms: 0
170
+ date,
171
+ kms: tripsByDay.reduce((a, b) => a + b.distance, 0)
194
172
  }
195
- day.kms = dayTrips.reduce((a, b) => a + b.distance, 0)
196
-
197
173
  days.push(day)
198
- })
174
+ }
175
+
199
176
  devicesResult.push({
200
177
  device: d,
178
+ startOdometer: trips.length ? trips[0].startOdometer : 0,
179
+ endOdometer: trips.length ? trips[trips.length - 1].endOdometer : 0,
201
180
  days
202
181
  })
203
182
  }
@@ -205,6 +184,8 @@ function processDevices (from, to, devices, data, userData) {
205
184
  devicesResult.push({
206
185
  device: d,
207
186
  summary: {
187
+ startOdometer: trips.length ? trips[0].startOdometer : 0,
188
+ endOdometer: trips.length ? trips[trips.length - 1].endOdometer : 0,
208
189
  distance: trips.filter(t => t.distance > 0).reduce((a, b) => a + b.distance, 0)
209
190
  }
210
191
  })
@@ -344,14 +325,16 @@ function exportKmsReportToExcel (userData, reportData) {
344
325
  headers.push(
345
326
  { label: translations.report.vehicle, value: 'name' },
346
327
  { label: translations.settings.vehicle_licenseplate, value: 'licenseplate' },
347
- { label: translations.report.group, value: 'group' })
328
+ { label: translations.report.group, value: 'group' },
329
+ { label: translations.report.startOdometer, value: 'startOdometer' })
348
330
 
349
331
  const days = info[0].days
350
332
  days.forEach((day, index) => {
351
333
  headers.push({ label: new Date(day.date).toLocaleDateString(), value: 'day' + index })
352
334
  })
353
335
 
354
- headers.push({ label: translations.report.total, value: 'total' })
336
+ headers.push({ label: translations.report.total, value: 'total' },
337
+ { label: translations.report.endOdometer, value: 'endOdometer' })
355
338
  } else if (userData.byDriver) {
356
339
  headers.push(
357
340
  { label: translations.report.driver, value: 'name' },
@@ -377,7 +360,9 @@ function exportKmsReportToExcel (userData, reportData) {
377
360
  const vehicle = {
378
361
  name: d.device.name,
379
362
  group: group ? group.name : '',
380
- licenseplate: d.device.attributes.license_plate
363
+ licenseplate: d.device.attributes.license_plate,
364
+ startOdometer: Number((d.startOdometer / 1000).toFixed(1)),
365
+ endOdometer: Number((d.endOdometer / 1000).toFixed(1))
381
366
  }
382
367
 
383
368
  d.days.forEach((day, index) => {
package/src/util/trips.js CHANGED
@@ -93,6 +93,24 @@ function isPartialInsideTimetable (t, userData, route) {
93
93
  return false
94
94
  }
95
95
 
96
+ function getDataByDay (date, trips, userData, deviceRoute) {
97
+ const fromByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0)
98
+ const toByDay = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59)
99
+ const tripsByDay = trips.filter(t => new Date(t.endTime) > fromByDay && new Date(t.startTime) < toByDay).map(t => {
100
+ return { ...t }
101
+ })
102
+
103
+ const startDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.startTime)
104
+ const endDateLocal = new Date(convertFromUTC(date, userData.user.attributes.timezone).toISOString().split('T')[0] + ' ' + userData.dayHours.endTime)
105
+ const startDate = isClientSide() ? startDateLocal : convertFromLocal(startDateLocal, userData.user.attributes.timezone)
106
+ const endDate = isClientSide() ? endDateLocal : convertFromLocal(endDateLocal, userData.user.attributes.timezone)
107
+ tripsByDay.forEach(t => calculatePartialTrip(startDate, endDate, deviceRoute, t))
108
+ console.log(date, tripsByDay)
109
+
110
+ const routeByDay = deviceRoute.filter(p => (new Date(p.fixTime) > fromByDay && new Date(p.fixTime) < toByDay))
111
+ return { tripsByDay, routeByDay }
112
+ }
113
+
96
114
  function isInsideTimetable (t, userData) {
97
115
  return isInside(t.startTime, t.endTime, userData)
98
116
  }
@@ -162,6 +180,7 @@ function calculateStopDuration (stop) {
162
180
  exports.checkTripsKms = checkTripsKms
163
181
  exports.isInsideTimetable = isInsideTimetable
164
182
  exports.isPartialInsideTimetable = isPartialInsideTimetable
183
+ exports.getDataByDay = getDataByDay
165
184
  exports.calculatePartialTrip = calculatePartialTrip
166
185
  exports.calculateTrip = calculateTrip
167
186
  exports.getTripIdleTime = getTripIdleTime