@fleetbase/fleetops-engine 0.6.55 → 0.6.56

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 (109) hide show
  1. package/addon/components/admin/map-settings.hbs +1 -1
  2. package/addon/components/device/details.js +1 -1
  3. package/addon/components/device-event/details.hbs +192 -0
  4. package/addon/components/device-event/details.js +151 -0
  5. package/addon/components/driver/schedule.js +1 -1
  6. package/addon/components/layout/fleet-ops-sidebar.js +15 -9
  7. package/addon/components/telematic/details.hbs +1 -1
  8. package/addon/components/telematic/form.hbs +2 -2
  9. package/addon/components/telematic/settings.hbs +1 -1
  10. package/addon/controllers/connectivity/devices/index/details/events.js +1 -1
  11. package/addon/controllers/connectivity/devices/index/details/vehicle.js +2 -2
  12. package/addon/controllers/connectivity/events/details.js +68 -1
  13. package/addon/controllers/connectivity/sensors/index.js +4 -0
  14. package/addon/controllers/connectivity/telematics/details/events.js +1 -1
  15. package/addon/controllers/connectivity/telematics/details/sensors.js +4 -0
  16. package/addon/controllers/settings/map.js +15 -0
  17. package/addon/instance-initializers/register-vroom-allocation.js +1 -1
  18. package/addon/routes/connectivity/events/details.js +26 -1
  19. package/addon/routes/management/vehicles/index/details.js +3 -1
  20. package/addon/services/map-adapter/google.js +25 -0
  21. package/addon/services/map-adapter/leaflet.js +1 -1
  22. package/addon/services/map-adapter-interface.js +1 -1
  23. package/addon/services/map-manager.js +4 -1
  24. package/addon/services/map-settings.js +15 -0
  25. package/addon/styles/fleetops-engine.css +1 -1
  26. package/addon/templates/connectivity/devices/index/details/vehicle.hbs +2 -1
  27. package/addon/templates/connectivity/events/details.hbs +40 -1
  28. package/addon/templates/settings/map.hbs +38 -9
  29. package/addon/utils/leaflet-plugin-loader.js +5 -5
  30. package/addon/utils/route-colors.js +1 -1
  31. package/app/components/device-event/details.hbs +192 -0
  32. package/app/components/device-event/details.js +1 -0
  33. package/composer.json +1 -1
  34. package/extension.json +1 -1
  35. package/package.json +2 -2
  36. package/server/migrations/2026_06_23_000001_delete_bad_afaqy_telematics_sensors.php +34 -0
  37. package/server/src/Exports/ContactExport.php +12 -5
  38. package/server/src/Exports/DeviceExport.php +92 -0
  39. package/server/src/Exports/DriverExport.php +28 -3
  40. package/server/src/Exports/EquipmentExport.php +94 -0
  41. package/server/src/Exports/FleetExport.php +22 -7
  42. package/server/src/Exports/FuelReportExport.php +16 -1
  43. package/server/src/Exports/IssueExport.php +25 -3
  44. package/server/src/Exports/MaintenanceExport.php +106 -0
  45. package/server/src/Exports/MaintenanceScheduleExport.php +99 -0
  46. package/server/src/Exports/OrderExport.php +24 -5
  47. package/server/src/Exports/PartExport.php +99 -0
  48. package/server/src/Exports/PlaceExport.php +33 -7
  49. package/server/src/Exports/SensorExport.php +94 -0
  50. package/server/src/Exports/ServiceAreaExport.php +31 -7
  51. package/server/src/Exports/ServiceRateExport.php +41 -1
  52. package/server/src/Exports/TelematicExport.php +90 -0
  53. package/server/src/Exports/VehicleExport.php +274 -8
  54. package/server/src/Exports/VendorExport.php +15 -2
  55. package/server/src/Exports/WorkOrderExport.php +92 -0
  56. package/server/src/Http/Controllers/Api/v1/Concerns/ResolvesFleetOpsApiResources.php +176 -0
  57. package/server/src/Http/Controllers/Api/v1/DeviceController.php +225 -0
  58. package/server/src/Http/Controllers/Api/v1/EquipmentController.php +114 -0
  59. package/server/src/Http/Controllers/Api/v1/FuelTransactionController.php +185 -0
  60. package/server/src/Http/Controllers/Api/v1/PartController.php +120 -0
  61. package/server/src/Http/Controllers/Api/v1/SensorController.php +132 -0
  62. package/server/src/Http/Controllers/Api/v1/WorkOrderController.php +161 -0
  63. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +18 -0
  64. package/server/src/Http/Controllers/Internal/v1/EquipmentController.php +17 -0
  65. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +17 -0
  66. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +17 -0
  67. package/server/src/Http/Controllers/Internal/v1/PartController.php +17 -0
  68. package/server/src/Http/Controllers/Internal/v1/SensorController.php +18 -0
  69. package/server/src/Http/Controllers/Internal/v1/SettingController.php +29 -5
  70. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +18 -0
  71. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +17 -0
  72. package/server/src/Http/Filter/DeviceFilter.php +33 -10
  73. package/server/src/Http/Filter/EquipmentFilter.php +23 -0
  74. package/server/src/Http/Filter/FuelProviderTransactionFilter.php +57 -2
  75. package/server/src/Http/Filter/PartFilter.php +47 -0
  76. package/server/src/Http/Filter/SensorFilter.php +34 -6
  77. package/server/src/Http/Filter/WorkOrderFilter.php +23 -0
  78. package/server/src/Http/Requests/CreateDeviceRequest.php +51 -0
  79. package/server/src/Http/Requests/CreateEquipmentRequest.php +35 -0
  80. package/server/src/Http/Requests/CreateFuelTransactionRequest.php +50 -0
  81. package/server/src/Http/Requests/CreatePartRequest.php +40 -0
  82. package/server/src/Http/Requests/CreateSensorRequest.php +47 -0
  83. package/server/src/Http/Requests/CreateWorkOrderRequest.php +42 -0
  84. package/server/src/Http/Requests/UpdateDeviceRequest.php +7 -0
  85. package/server/src/Http/Requests/UpdateEquipmentRequest.php +7 -0
  86. package/server/src/Http/Requests/UpdateFuelTransactionRequest.php +7 -0
  87. package/server/src/Http/Requests/UpdatePartRequest.php +7 -0
  88. package/server/src/Http/Requests/UpdateSensorRequest.php +7 -0
  89. package/server/src/Http/Requests/UpdateWorkOrderRequest.php +7 -0
  90. package/server/src/Http/Resources/v1/Device.php +72 -0
  91. package/server/src/Http/Resources/v1/Equipment.php +57 -0
  92. package/server/src/Http/Resources/v1/FuelTransaction.php +69 -0
  93. package/server/src/Http/Resources/v1/Part.php +64 -0
  94. package/server/src/Http/Resources/v1/Sensor.php +68 -0
  95. package/server/src/Jobs/SyncTelematicDevicesJob.php +194 -38
  96. package/server/src/Models/Order.php +2 -1
  97. package/server/src/Observers/PurchaseRateObserver.php +2 -1
  98. package/server/src/Support/Analytics/RevenueTrend.php +3 -8
  99. package/server/src/Support/Metrics/ActiveRevenueQuery.php +121 -0
  100. package/server/src/Support/Metrics/AvgOrderValueMetric.php +1 -7
  101. package/server/src/Support/Metrics/EarningsMetric.php +1 -10
  102. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +104 -5
  103. package/server/src/Support/Telematics/Providers/SafeeProvider.php +550 -54
  104. package/server/src/Support/Telematics/TelematicService.php +28 -9
  105. package/server/src/routes.php +67 -14
  106. package/server/tests/ExportCoverageTest.php +79 -0
  107. package/server/tests/MetricsRegistryTest.php +45 -5
  108. package/server/tests/PublicFleetOpsRestEndpointsTest.php +191 -0
  109. package/server/tests/TelematicsHardeningTest.php +636 -1
@@ -0,0 +1,99 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Exports;
4
+
5
+ use Fleetbase\FleetOps\Models\MaintenanceSchedule;
6
+ use Maatwebsite\Excel\Concerns\FromCollection;
7
+ use Maatwebsite\Excel\Concerns\ShouldAutoSize;
8
+ use Maatwebsite\Excel\Concerns\WithColumnFormatting;
9
+ use Maatwebsite\Excel\Concerns\WithHeadings;
10
+ use Maatwebsite\Excel\Concerns\WithMapping;
11
+ use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
12
+
13
+ class MaintenanceScheduleExport implements FromCollection, WithHeadings, WithMapping, WithColumnFormatting, ShouldAutoSize
14
+ {
15
+ protected array $selections = [];
16
+
17
+ public function __construct(array $selections = [])
18
+ {
19
+ $this->selections = $selections;
20
+ }
21
+
22
+ public function map($schedule): array
23
+ {
24
+ return [
25
+ $schedule->public_id,
26
+ $schedule->name,
27
+ $schedule->subject_name,
28
+ $schedule->type,
29
+ $schedule->status,
30
+ $schedule->interval_method,
31
+ $schedule->interval_type,
32
+ $schedule->interval_value,
33
+ $schedule->interval_unit,
34
+ $schedule->interval_distance,
35
+ $schedule->interval_engine_hours,
36
+ $schedule->last_service_odometer,
37
+ $schedule->last_service_engine_hours,
38
+ $schedule->last_service_date,
39
+ $schedule->next_due_date,
40
+ $schedule->next_due_odometer,
41
+ $schedule->next_due_engine_hours,
42
+ $schedule->default_priority,
43
+ $schedule->default_assignee_name,
44
+ $schedule->last_triggered_at,
45
+ $schedule->created_at,
46
+ $schedule->updated_at,
47
+ ];
48
+ }
49
+
50
+ public function headings(): array
51
+ {
52
+ return [
53
+ 'ID',
54
+ 'Name',
55
+ 'Subject',
56
+ 'Type',
57
+ 'Status',
58
+ 'Interval Method',
59
+ 'Interval Type',
60
+ 'Interval Value',
61
+ 'Interval Unit',
62
+ 'Interval Distance',
63
+ 'Interval Engine Hours',
64
+ 'Last Service Odometer',
65
+ 'Last Service Engine Hours',
66
+ 'Last Service Date',
67
+ 'Next Due Date',
68
+ 'Next Due Odometer',
69
+ 'Next Due Engine Hours',
70
+ 'Default Priority',
71
+ 'Default Assignee',
72
+ 'Last Triggered At',
73
+ 'Date Created',
74
+ 'Date Updated',
75
+ ];
76
+ }
77
+
78
+ public function columnFormats(): array
79
+ {
80
+ return [
81
+ 'N' => NumberFormat::FORMAT_DATE_DDMMYYYY,
82
+ 'O' => NumberFormat::FORMAT_DATE_DDMMYYYY,
83
+ 'T' => NumberFormat::FORMAT_DATE_DDMMYYYY,
84
+ 'U' => NumberFormat::FORMAT_DATE_DDMMYYYY,
85
+ 'V' => NumberFormat::FORMAT_DATE_DDMMYYYY,
86
+ ];
87
+ }
88
+
89
+ public function collection()
90
+ {
91
+ $query = MaintenanceSchedule::where('company_uuid', session('company'))->with(['subject', 'defaultAssignee']);
92
+
93
+ if ($this->selections) {
94
+ $query->whereIn('uuid', $this->selections);
95
+ }
96
+
97
+ return $query->get();
98
+ }
99
+ }
@@ -21,18 +21,23 @@ class OrderExport implements FromCollection, WithHeadings, WithMapping, WithColu
21
21
 
22
22
  public function map($order): array
23
23
  {
24
- $order->loadMissing(['trackingNumber', 'payload', 'customer', 'driverAssigned', 'vehicleAssigned']);
24
+ $order->loadMissing(['trackingNumber', 'payload', 'customer', 'facilitator', 'driverAssigned', 'vehicleAssigned']);
25
25
 
26
26
  return [
27
27
  $order->public_id,
28
28
  data_get($order, 'trackingNumber.tracking_number'),
29
29
  $order->internal_id,
30
+ data_get($order, 'payload.public_id'),
30
31
  $order->driver_name,
31
32
  $order->vehicle_name,
32
33
  $order->customer_name,
34
+ $order->facilitator_name,
33
35
  collect(data_get($order, 'payload.entities'))->map(function ($entity) {
34
36
  return $entity->sku ?? $entity->public_id;
35
37
  })->join('|'),
38
+ $order->total_entities,
39
+ $order->transaction_amount,
40
+ $order->transaction_currency,
36
41
  $order->pickup_name,
37
42
  $order->dropoff_name,
38
43
  $order->return_name,
@@ -40,8 +45,12 @@ class OrderExport implements FromCollection, WithHeadings, WithMapping, WithColu
40
45
  return $waypoint->address;
41
46
  })->join('|'),
42
47
  $order->scheduled_at,
48
+ $order->type,
43
49
  $order->status,
50
+ $order->created_by_name,
51
+ $order->updated_by_name,
44
52
  $order->created_at,
53
+ $order->updated_at,
45
54
  ];
46
55
  }
47
56
 
@@ -51,25 +60,35 @@ class OrderExport implements FromCollection, WithHeadings, WithMapping, WithColu
51
60
  'ID',
52
61
  'Tracking Number',
53
62
  'Internal ID',
63
+ 'Payload ID',
54
64
  'Driver',
55
65
  'Vehicle',
56
66
  'Customer',
67
+ 'Facilitator',
57
68
  'SKU',
69
+ 'Item Count',
70
+ 'Transaction Amount',
71
+ 'Transaction Currency',
58
72
  'Pick Up',
59
73
  'Drop Off',
60
74
  'Return',
61
75
  'Waypoints',
62
76
  'Date Scheduled',
77
+ 'Type',
63
78
  'Status',
79
+ 'Created By',
80
+ 'Updated By',
64
81
  'Date Created',
82
+ 'Date Updated',
65
83
  ];
66
84
  }
67
85
 
68
86
  public function columnFormats(): array
69
87
  {
70
88
  return [
71
- 'H' => NumberFormat::FORMAT_DATE_DDMMYYYY,
72
- 'K' => NumberFormat::FORMAT_DATE_DDMMYYYY,
89
+ 'Q' => NumberFormat::FORMAT_DATE_DDMMYYYY,
90
+ 'V' => NumberFormat::FORMAT_DATE_DDMMYYYY,
91
+ 'W' => NumberFormat::FORMAT_DATE_DDMMYYYY,
73
92
  ];
74
93
  }
75
94
 
@@ -79,9 +98,9 @@ class OrderExport implements FromCollection, WithHeadings, WithMapping, WithColu
79
98
  public function collection()
80
99
  {
81
100
  if (!empty($this->selections)) {
82
- return Order::where('company_uuid', session('company'))->whereIn('uuid', $this->selections)->with(['trackingNumber', 'customer', 'driverAssigned', 'payload'])->get();
101
+ return Order::where('company_uuid', session('company'))->whereIn('uuid', $this->selections)->with(['trackingNumber', 'customer', 'facilitator', 'driverAssigned', 'vehicleAssigned', 'payload'])->get();
83
102
  }
84
103
 
85
- return Order::where('company_uuid', session('company'))->get();
104
+ return Order::where('company_uuid', session('company'))->with(['trackingNumber', 'customer', 'facilitator', 'driverAssigned', 'vehicleAssigned', 'payload'])->get();
86
105
  }
87
106
  }
@@ -0,0 +1,99 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Exports;
4
+
5
+ use Fleetbase\FleetOps\Models\Part;
6
+ use Maatwebsite\Excel\Concerns\FromCollection;
7
+ use Maatwebsite\Excel\Concerns\ShouldAutoSize;
8
+ use Maatwebsite\Excel\Concerns\WithColumnFormatting;
9
+ use Maatwebsite\Excel\Concerns\WithHeadings;
10
+ use Maatwebsite\Excel\Concerns\WithMapping;
11
+ use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
12
+
13
+ class PartExport implements FromCollection, WithHeadings, WithMapping, WithColumnFormatting, ShouldAutoSize
14
+ {
15
+ protected array $selections = [];
16
+
17
+ public function __construct(array $selections = [])
18
+ {
19
+ $this->selections = $selections;
20
+ }
21
+
22
+ public function map($part): array
23
+ {
24
+ return [
25
+ $part->public_id,
26
+ $part->name,
27
+ $part->sku,
28
+ $part->type,
29
+ $part->status,
30
+ $part->quantity_on_hand,
31
+ $part->unit_cost,
32
+ $part->msrp,
33
+ $part->currency,
34
+ $part->manufacturer,
35
+ $part->model,
36
+ $part->serial_number,
37
+ $part->barcode,
38
+ $part->vendor_name,
39
+ $part->asset_name,
40
+ $part->warranty_name,
41
+ $part->total_value,
42
+ $this->yesNo($part->is_in_stock),
43
+ $this->yesNo($part->is_low_stock),
44
+ $part->created_at,
45
+ $part->updated_at,
46
+ ];
47
+ }
48
+
49
+ public function headings(): array
50
+ {
51
+ return [
52
+ 'ID',
53
+ 'Name',
54
+ 'Part Number',
55
+ 'Type',
56
+ 'Status',
57
+ 'Quantity On Hand',
58
+ 'Unit Cost',
59
+ 'MSRP',
60
+ 'Currency',
61
+ 'Manufacturer',
62
+ 'Model',
63
+ 'Serial Number',
64
+ 'Barcode',
65
+ 'Vendor',
66
+ 'Asset',
67
+ 'Warranty',
68
+ 'Total Value',
69
+ 'In Stock',
70
+ 'Low Stock',
71
+ 'Date Created',
72
+ 'Date Updated',
73
+ ];
74
+ }
75
+
76
+ public function columnFormats(): array
77
+ {
78
+ return [
79
+ 'T' => NumberFormat::FORMAT_DATE_DDMMYYYY,
80
+ 'U' => NumberFormat::FORMAT_DATE_DDMMYYYY,
81
+ ];
82
+ }
83
+
84
+ public function collection()
85
+ {
86
+ $query = Part::where('company_uuid', session('company'))->with(['vendor', 'warranty', 'asset']);
87
+
88
+ if ($this->selections) {
89
+ $query->whereIn('uuid', $this->selections);
90
+ }
91
+
92
+ return $query->get();
93
+ }
94
+
95
+ protected function yesNo($value): string
96
+ {
97
+ return $value ? 'Yes' : 'No';
98
+ }
99
+ }
@@ -25,11 +25,21 @@ class PlaceExport implements FromCollection, WithHeadings, WithMapping, WithColu
25
25
  $place->public_id,
26
26
  $place->name,
27
27
  $place->phone,
28
- strtoupper($place->address),
29
- strtoupper($place->city),
28
+ $this->upper($place->address),
29
+ $place->street1,
30
+ $place->street2,
31
+ $this->upper($place->city),
32
+ $this->upper($place->province),
30
33
  $place->postal_code,
31
- strtoupper($place->country_name),
34
+ $place->neighborhood,
35
+ $place->district,
36
+ $place->building,
37
+ $place->security_access_code,
38
+ $this->upper($place->country_name),
39
+ data_get($place, 'owner.name') ?? data_get($place, 'owner.public_id'),
40
+ $place->type,
32
41
  $place->created_at,
42
+ $place->updated_at,
33
43
  ];
34
44
  }
35
45
 
@@ -40,10 +50,20 @@ class PlaceExport implements FromCollection, WithHeadings, WithMapping, WithColu
40
50
  'Name',
41
51
  'Phone',
42
52
  'Address',
53
+ 'Street 1',
54
+ 'Street 2',
43
55
  'City',
56
+ 'Province',
44
57
  'Postal Code',
58
+ 'Neighborhood',
59
+ 'District',
60
+ 'Building',
61
+ 'Security Access Code',
45
62
  'Country',
63
+ 'Owner',
64
+ 'Type',
46
65
  'Date Created',
66
+ 'Date Updated',
47
67
  ];
48
68
  }
49
69
 
@@ -51,20 +71,26 @@ class PlaceExport implements FromCollection, WithHeadings, WithMapping, WithColu
51
71
  {
52
72
  return [
53
73
  'C' => '+#',
54
- 'F' => NumberFormat::FORMAT_GENERAL,
55
- 'H' => NumberFormat::FORMAT_DATE_DDMMYYYY,
74
+ 'I' => NumberFormat::FORMAT_GENERAL,
75
+ 'P' => NumberFormat::FORMAT_DATE_DDMMYYYY,
76
+ 'Q' => NumberFormat::FORMAT_DATE_DDMMYYYY,
56
77
  ];
57
78
  }
58
79
 
80
+ protected function upper($value): ?string
81
+ {
82
+ return $value ? strtoupper($value) : null;
83
+ }
84
+
59
85
  /**
60
86
  * @return \Illuminate\Support\Collection
61
87
  */
62
88
  public function collection()
63
89
  {
64
90
  if ($this->selections) {
65
- return Place::where('company_uuid', session('company'))->whereIn('uuid', $this->selections)->get();
91
+ return Place::where('company_uuid', session('company'))->whereIn('uuid', $this->selections)->with(['owner'])->get();
66
92
  }
67
93
 
68
- return Place::where('company_uuid', session('company'))->get();
94
+ return Place::where('company_uuid', session('company'))->with(['owner'])->get();
69
95
  }
70
96
  }
@@ -0,0 +1,94 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Exports;
4
+
5
+ use Fleetbase\FleetOps\Models\Sensor;
6
+ use Maatwebsite\Excel\Concerns\FromCollection;
7
+ use Maatwebsite\Excel\Concerns\ShouldAutoSize;
8
+ use Maatwebsite\Excel\Concerns\WithColumnFormatting;
9
+ use Maatwebsite\Excel\Concerns\WithHeadings;
10
+ use Maatwebsite\Excel\Concerns\WithMapping;
11
+ use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
12
+
13
+ class SensorExport implements FromCollection, WithHeadings, WithMapping, WithColumnFormatting, ShouldAutoSize
14
+ {
15
+ protected array $selections = [];
16
+
17
+ public function __construct(array $selections = [])
18
+ {
19
+ $this->selections = $selections;
20
+ }
21
+
22
+ public function map($sensor): array
23
+ {
24
+ return [
25
+ $sensor->public_id,
26
+ $sensor->name,
27
+ data_get($sensor, 'telematic.name') ?? $sensor->telematic_uuid,
28
+ $sensor->device_name,
29
+ $sensor->type,
30
+ $sensor->last_value,
31
+ $sensor->unit,
32
+ $sensor->status,
33
+ $sensor->threshold_status,
34
+ $sensor->min_threshold,
35
+ $sensor->max_threshold,
36
+ $sensor->serial_number,
37
+ $sensor->imei,
38
+ $sensor->last_reading_at,
39
+ $sensor->attached_to_name,
40
+ $this->yesNo($sensor->is_active),
41
+ $sensor->created_at,
42
+ $sensor->updated_at,
43
+ ];
44
+ }
45
+
46
+ public function headings(): array
47
+ {
48
+ return [
49
+ 'ID',
50
+ 'Name',
51
+ 'Telematic',
52
+ 'Device',
53
+ 'Type',
54
+ 'Last Value',
55
+ 'Unit',
56
+ 'Status',
57
+ 'Threshold Status',
58
+ 'Min Threshold',
59
+ 'Max Threshold',
60
+ 'Serial Number',
61
+ 'IMEI',
62
+ 'Last Reading',
63
+ 'Attached To',
64
+ 'Active',
65
+ 'Date Created',
66
+ 'Date Updated',
67
+ ];
68
+ }
69
+
70
+ public function columnFormats(): array
71
+ {
72
+ return [
73
+ 'N' => NumberFormat::FORMAT_DATE_DDMMYYYY,
74
+ 'Q' => NumberFormat::FORMAT_DATE_DDMMYYYY,
75
+ 'R' => NumberFormat::FORMAT_DATE_DDMMYYYY,
76
+ ];
77
+ }
78
+
79
+ public function collection()
80
+ {
81
+ $query = Sensor::where('company_uuid', session('company'))->with(['telematic', 'device', 'sensorable']);
82
+
83
+ if ($this->selections) {
84
+ $query->whereIn('uuid', $this->selections);
85
+ }
86
+
87
+ return $query->get();
88
+ }
89
+
90
+ protected function yesNo($value): string
91
+ {
92
+ return $value ? 'Yes' : 'No';
93
+ }
94
+ }
@@ -20,16 +20,25 @@ class ServiceAreaExport implements FromCollection, WithHeadings, WithMapping, Wi
20
20
  $this->selections = $selections;
21
21
  }
22
22
 
23
- public function map($servicArea): array
23
+ public function map($serviceArea): array
24
24
  {
25
25
  return [
26
- $servicArea->public_id,
27
- $servicArea->name,
28
- $servicArea->zones instanceof Collection ? $servicArea->zones->map(function ($zone) {
26
+ $serviceArea->public_id,
27
+ $serviceArea->name,
28
+ $serviceArea->type,
29
+ $serviceArea->zones instanceof Collection ? $serviceArea->zones->map(function ($zone) {
29
30
  return $zone->name;
30
31
  })->join(', ') : null,
31
- $servicArea->status,
32
- $servicArea->created_at,
32
+ $serviceArea->country,
33
+ $serviceArea->color,
34
+ $serviceArea->stroke_color,
35
+ $this->yesNo($serviceArea->trigger_on_entry),
36
+ $this->yesNo($serviceArea->trigger_on_exit),
37
+ $serviceArea->dwell_threshold_minutes,
38
+ $serviceArea->speed_limit_kmh,
39
+ $serviceArea->status,
40
+ $serviceArea->created_at,
41
+ $serviceArea->updated_at,
33
42
  ];
34
43
  }
35
44
 
@@ -38,19 +47,34 @@ class ServiceAreaExport implements FromCollection, WithHeadings, WithMapping, Wi
38
47
  return [
39
48
  'ID',
40
49
  'Name',
50
+ 'Type',
41
51
  'Zones',
52
+ 'Country',
53
+ 'Color',
54
+ 'Stroke Color',
55
+ 'Trigger On Entry',
56
+ 'Trigger On Exit',
57
+ 'Dwell Threshold Minutes',
58
+ 'Speed Limit KMH',
42
59
  'Status',
43
60
  'Date Created',
61
+ 'Date Updated',
44
62
  ];
45
63
  }
46
64
 
47
65
  public function columnFormats(): array
48
66
  {
49
67
  return [
50
- 'E' => NumberFormat::FORMAT_DATE_DDMMYYYY,
68
+ 'M' => NumberFormat::FORMAT_DATE_DDMMYYYY,
69
+ 'N' => NumberFormat::FORMAT_DATE_DDMMYYYY,
51
70
  ];
52
71
  }
53
72
 
73
+ protected function yesNo($value): string
74
+ {
75
+ return $value ? 'Yes' : 'No';
76
+ }
77
+
54
78
  /**
55
79
  * @return Collection
56
80
  */
@@ -31,8 +31,25 @@ class ServiceRateExport implements FromCollection, WithHeadings, WithMapping, Wi
31
31
  $serviceRate->rate_calculation_method,
32
32
  $serviceRate->service_area_name,
33
33
  $serviceRate->zone_name,
34
+ $serviceRate->per_meter_flat_rate_fee,
35
+ $serviceRate->per_meter_unit,
36
+ $serviceRate->max_distance,
37
+ $serviceRate->max_distance_unit,
38
+ $this->yesNo($serviceRate->has_cod_fee),
39
+ $serviceRate->cod_calculation_method,
40
+ $serviceRate->cod_flat_fee,
41
+ $serviceRate->cod_percent,
42
+ $this->yesNo($serviceRate->has_peak_hours_fee),
43
+ $serviceRate->peak_hours_calculation_method,
44
+ $serviceRate->peak_hours_flat_fee,
45
+ $serviceRate->peak_hours_percent,
46
+ $serviceRate->peak_hours_start,
47
+ $serviceRate->peak_hours_end,
34
48
  $serviceRate->currency,
49
+ $serviceRate->duration_terms,
50
+ $serviceRate->estimated_days,
35
51
  $serviceRate->created_at,
52
+ $serviceRate->updated_at,
36
53
  ];
37
54
  }
38
55
 
@@ -46,18 +63,41 @@ class ServiceRateExport implements FromCollection, WithHeadings, WithMapping, Wi
46
63
  'Calculation Method',
47
64
  'Service Area',
48
65
  'Zone',
66
+ 'Per Meter Flat Rate Fee',
67
+ 'Per Meter Unit',
68
+ 'Max Distance',
69
+ 'Max Distance Unit',
70
+ 'Has COD Fee',
71
+ 'COD Calculation Method',
72
+ 'COD Flat Fee',
73
+ 'COD Percent',
74
+ 'Has Peak Hours Fee',
75
+ 'Peak Hours Calculation Method',
76
+ 'Peak Hours Flat Fee',
77
+ 'Peak Hours Percent',
78
+ 'Peak Hours Start',
79
+ 'Peak Hours End',
49
80
  'Currency',
81
+ 'Duration Terms',
82
+ 'Estimated Days',
50
83
  'Date Created',
84
+ 'Date Updated',
51
85
  ];
52
86
  }
53
87
 
54
88
  public function columnFormats(): array
55
89
  {
56
90
  return [
57
- 'I' => NumberFormat::FORMAT_DATE_DDMMYYYY,
91
+ 'Y' => NumberFormat::FORMAT_DATE_DDMMYYYY,
92
+ 'Z' => NumberFormat::FORMAT_DATE_DDMMYYYY,
58
93
  ];
59
94
  }
60
95
 
96
+ protected function yesNo($value): string
97
+ {
98
+ return $value ? 'Yes' : 'No';
99
+ }
100
+
61
101
  /**
62
102
  * @return \Illuminate\Support\Collection
63
103
  */
@@ -0,0 +1,90 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Exports;
4
+
5
+ use Fleetbase\FleetOps\Models\Telematic;
6
+ use Maatwebsite\Excel\Concerns\FromCollection;
7
+ use Maatwebsite\Excel\Concerns\ShouldAutoSize;
8
+ use Maatwebsite\Excel\Concerns\WithColumnFormatting;
9
+ use Maatwebsite\Excel\Concerns\WithHeadings;
10
+ use Maatwebsite\Excel\Concerns\WithMapping;
11
+ use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
12
+
13
+ class TelematicExport implements FromCollection, WithHeadings, WithMapping, WithColumnFormatting, ShouldAutoSize
14
+ {
15
+ protected array $selections = [];
16
+
17
+ public function __construct(array $selections = [])
18
+ {
19
+ $this->selections = $selections;
20
+ }
21
+
22
+ public function map($telematic): array
23
+ {
24
+ return [
25
+ $telematic->public_id,
26
+ $telematic->name,
27
+ $telematic->provider,
28
+ $telematic->status,
29
+ $telematic->model,
30
+ $telematic->serial_number,
31
+ $telematic->imei,
32
+ $telematic->iccid,
33
+ $telematic->imsi,
34
+ $telematic->msisdn,
35
+ $telematic->last_seen_at,
36
+ $telematic->warranty_name,
37
+ $this->yesNo($telematic->is_online),
38
+ $telematic->signal_strength,
39
+ $telematic->created_at,
40
+ $telematic->updated_at,
41
+ ];
42
+ }
43
+
44
+ public function headings(): array
45
+ {
46
+ return [
47
+ 'ID',
48
+ 'Name',
49
+ 'Provider',
50
+ 'Status',
51
+ 'Model',
52
+ 'Serial Number',
53
+ 'IMEI',
54
+ 'ICCID',
55
+ 'IMSI',
56
+ 'MSISDN',
57
+ 'Last Seen',
58
+ 'Warranty',
59
+ 'Online',
60
+ 'Signal Strength',
61
+ 'Date Created',
62
+ 'Date Updated',
63
+ ];
64
+ }
65
+
66
+ public function columnFormats(): array
67
+ {
68
+ return [
69
+ 'K' => NumberFormat::FORMAT_DATE_DDMMYYYY,
70
+ 'O' => NumberFormat::FORMAT_DATE_DDMMYYYY,
71
+ 'P' => NumberFormat::FORMAT_DATE_DDMMYYYY,
72
+ ];
73
+ }
74
+
75
+ public function collection()
76
+ {
77
+ $query = Telematic::where('company_uuid', session('company'))->with(['warranty']);
78
+
79
+ if ($this->selections) {
80
+ $query->whereIn('uuid', $this->selections);
81
+ }
82
+
83
+ return $query->get();
84
+ }
85
+
86
+ protected function yesNo($value): string
87
+ {
88
+ return $value ? 'Yes' : 'No';
89
+ }
90
+ }