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 +1 -1
- package/src/activity-report.js +3 -18
- package/src/kms-report.js +22 -37
- package/src/util/trips.js +19 -0
package/package.json
CHANGED
package/src/activity-report.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const automaticReports = require('./automaticReports')
|
|
2
2
|
const {
|
|
3
3
|
convertMS, getDates, getTranslations, weekDaySelected, convertToLocaleString, isClientSide,
|
|
4
|
-
getLanguage
|
|
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,
|
|
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
|
|
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,
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const
|
|
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
|
|
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
|