@fleetbase/fleetops-engine 0.6.55 → 0.6.57
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/addon/components/admin/map-settings.hbs +1 -1
- package/addon/components/ai/create-order-preview.hbs +297 -0
- package/addon/components/ai/create-order-preview.js +362 -0
- package/addon/components/ai/route-preview-map.hbs +79 -0
- package/addon/components/ai/route-preview-map.js +527 -0
- package/addon/components/device/details.js +1 -1
- package/addon/components/device-event/details.hbs +192 -0
- package/addon/components/device-event/details.js +151 -0
- package/addon/components/driver/schedule.js +1 -1
- package/addon/components/fleet/details.hbs +21 -8
- package/addon/components/fleet/details.js +55 -1
- package/addon/components/fleet/hierarchy-tree.hbs +137 -0
- package/addon/components/fleet/hierarchy-tree.js +528 -0
- package/addon/components/layout/fleet-ops-sidebar.js +15 -9
- package/addon/components/map/drawer/device-event-listing.js +1 -0
- package/addon/components/map/drawer/driver-listing.js +1 -0
- package/addon/components/map/drawer/place-listing.js +1 -0
- package/addon/components/map/drawer/vehicle-listing.js +1 -0
- package/addon/components/order/details.hbs +34 -1
- package/addon/components/order/form/details.hbs +4 -0
- package/addon/components/order/form.hbs +9 -1
- package/addon/components/telematic/details.hbs +1 -1
- package/addon/components/telematic/form.hbs +2 -2
- package/addon/components/telematic/settings.hbs +1 -1
- package/addon/components/vehicle/card.hbs +14 -2
- package/addon/components/vehicle/form.hbs +13 -1
- package/addon/controllers/connectivity/devices/index/details/events.js +1 -1
- package/addon/controllers/connectivity/devices/index/details/vehicle.js +2 -2
- package/addon/controllers/connectivity/events/details.js +68 -1
- package/addon/controllers/connectivity/sensors/index.js +4 -0
- package/addon/controllers/connectivity/telematics/details/events.js +1 -1
- package/addon/controllers/connectivity/telematics/details/sensors.js +4 -0
- package/addon/controllers/settings/map.js +19 -0
- package/addon/extension.js +14 -0
- package/addon/instance-initializers/register-vroom-allocation.js +1 -1
- package/addon/routes/connectivity/events/details.js +26 -1
- package/addon/routes/management/fleets/index/details.js +1 -1
- package/addon/routes/management/vehicles/index/details.js +3 -1
- package/addon/services/map-adapter/google.js +66 -1
- package/addon/services/map-adapter/leaflet.js +1 -1
- package/addon/services/map-adapter-interface.js +1 -1
- package/addon/services/map-manager.js +16 -1
- package/addon/services/map-settings.js +15 -0
- package/addon/styles/fleetops-engine.css +487 -1
- package/addon/templates/connectivity/devices/index/details/vehicle.hbs +2 -1
- package/addon/templates/connectivity/events/details.hbs +40 -1
- package/addon/templates/settings/map.hbs +38 -9
- package/addon/utils/leaflet-plugin-loader.js +5 -5
- package/addon/utils/map-drawer-dropdown-position.js +11 -13
- package/addon/utils/route-colors.js +1 -1
- package/app/components/ai/create-order-preview.js +1 -0
- package/app/components/ai/route-preview-map.js +1 -0
- package/app/components/device-event/details.hbs +192 -0
- package/app/components/device-event/details.js +1 -0
- package/app/components/fleet/hierarchy-tree.js +1 -0
- package/app/services/route-engine.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +6 -4
- package/scripts/normalize-rgba-alpha.js +90 -0
- package/server/migrations/2026_06_23_000001_delete_bad_afaqy_telematics_sensors.php +34 -0
- package/server/src/Exports/ContactExport.php +12 -5
- package/server/src/Exports/DeviceExport.php +92 -0
- package/server/src/Exports/DriverExport.php +28 -3
- package/server/src/Exports/EquipmentExport.php +94 -0
- package/server/src/Exports/FleetExport.php +22 -7
- package/server/src/Exports/FuelReportExport.php +16 -1
- package/server/src/Exports/IssueExport.php +25 -3
- package/server/src/Exports/MaintenanceExport.php +106 -0
- package/server/src/Exports/MaintenanceScheduleExport.php +99 -0
- package/server/src/Exports/OrderExport.php +24 -5
- package/server/src/Exports/PartExport.php +99 -0
- package/server/src/Exports/PlaceExport.php +33 -7
- package/server/src/Exports/SensorExport.php +94 -0
- package/server/src/Exports/ServiceAreaExport.php +31 -7
- package/server/src/Exports/ServiceRateExport.php +41 -1
- package/server/src/Exports/TelematicExport.php +90 -0
- package/server/src/Exports/VehicleExport.php +274 -8
- package/server/src/Exports/VendorExport.php +15 -2
- package/server/src/Exports/WorkOrderExport.php +92 -0
- package/server/src/Http/Controllers/Api/v1/Concerns/ResolvesFleetOpsApiResources.php +176 -0
- package/server/src/Http/Controllers/Api/v1/DeviceController.php +225 -0
- package/server/src/Http/Controllers/Api/v1/EquipmentController.php +114 -0
- package/server/src/Http/Controllers/Api/v1/FuelTransactionController.php +185 -0
- package/server/src/Http/Controllers/Api/v1/PartController.php +120 -0
- package/server/src/Http/Controllers/Api/v1/SensorController.php +132 -0
- package/server/src/Http/Controllers/Api/v1/WorkOrderController.php +161 -0
- package/server/src/Http/Controllers/Internal/v1/DeviceController.php +18 -0
- package/server/src/Http/Controllers/Internal/v1/EquipmentController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/PartController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/SensorController.php +18 -0
- package/server/src/Http/Controllers/Internal/v1/SettingController.php +29 -5
- package/server/src/Http/Controllers/Internal/v1/TelematicController.php +18 -0
- package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +17 -0
- package/server/src/Http/Filter/DeviceFilter.php +33 -10
- package/server/src/Http/Filter/EquipmentFilter.php +23 -0
- package/server/src/Http/Filter/FuelProviderTransactionFilter.php +57 -2
- package/server/src/Http/Filter/PartFilter.php +47 -0
- package/server/src/Http/Filter/SensorFilter.php +34 -6
- package/server/src/Http/Filter/WorkOrderFilter.php +23 -0
- package/server/src/Http/Requests/CreateDeviceRequest.php +51 -0
- package/server/src/Http/Requests/CreateEquipmentRequest.php +35 -0
- package/server/src/Http/Requests/CreateFuelTransactionRequest.php +50 -0
- package/server/src/Http/Requests/CreatePartRequest.php +40 -0
- package/server/src/Http/Requests/CreateSensorRequest.php +47 -0
- package/server/src/Http/Requests/CreateWorkOrderRequest.php +42 -0
- package/server/src/Http/Requests/UpdateDeviceRequest.php +7 -0
- package/server/src/Http/Requests/UpdateEquipmentRequest.php +7 -0
- package/server/src/Http/Requests/UpdateFuelTransactionRequest.php +7 -0
- package/server/src/Http/Requests/UpdatePartRequest.php +7 -0
- package/server/src/Http/Requests/UpdateSensorRequest.php +7 -0
- package/server/src/Http/Requests/UpdateWorkOrderRequest.php +7 -0
- package/server/src/Http/Resources/v1/Device.php +72 -0
- package/server/src/Http/Resources/v1/Equipment.php +57 -0
- package/server/src/Http/Resources/v1/Fleet.php +8 -2
- package/server/src/Http/Resources/v1/FuelTransaction.php +69 -0
- package/server/src/Http/Resources/v1/Part.php +64 -0
- package/server/src/Http/Resources/v1/Sensor.php +68 -0
- package/server/src/Jobs/SyncTelematicDevicesJob.php +194 -38
- package/server/src/Models/Driver.php +6 -0
- package/server/src/Models/Order.php +20 -7
- package/server/src/Models/Place.php +11 -3
- package/server/src/Observers/PurchaseRateObserver.php +2 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +26 -0
- package/server/src/Support/Ai/Capabilities/AbstractFleetOpsAICapability.php +88 -0
- package/server/src/Support/Ai/Capabilities/AssetStatusCapability.php +108 -0
- package/server/src/Support/Ai/Capabilities/ConsoleNavigationCapability.php +55 -0
- package/server/src/Support/Ai/Capabilities/CreateOrderPreviewCapability.php +508 -0
- package/server/src/Support/Ai/Capabilities/DocsHelpCapability.php +49 -0
- package/server/src/Support/Ai/Capabilities/ImportOrdersPreviewCapability.php +66 -0
- package/server/src/Support/Ai/Capabilities/OperationalQueryCapability.php +319 -0
- package/server/src/Support/Ai/Capabilities/OptimizeOrderRouteCapability.php +240 -0
- package/server/src/Support/Ai/Capabilities/OrderInsightsCapability.php +95 -0
- package/server/src/Support/Ai/Capabilities/SearchResourcesCapability.php +195 -0
- package/server/src/Support/Ai/FleetOpsAiQueryResources.php +150 -0
- package/server/src/Support/Analytics/RevenueTrend.php +3 -8
- package/server/src/Support/Metrics/ActiveRevenueQuery.php +121 -0
- package/server/src/Support/Metrics/AvgOrderValueMetric.php +1 -7
- package/server/src/Support/Metrics/EarningsMetric.php +1 -10
- package/server/src/Support/Telematics/Providers/AfaqyProvider.php +104 -5
- package/server/src/Support/Telematics/Providers/SafeeProvider.php +550 -54
- package/server/src/Support/Telematics/TelematicService.php +28 -9
- package/server/src/Support/Utils.php +52 -0
- package/server/src/routes.php +67 -14
- package/server/tests/AiCreateOrderPreviewCapabilityTest.php +131 -0
- package/server/tests/AiOperationalQueryCapabilityTest.php +75 -0
- package/server/tests/ExportCoverageTest.php +79 -0
- package/server/tests/FleetHierarchyResourceTest.php +12 -0
- package/server/tests/MetricsRegistryTest.php +45 -5
- package/server/tests/OrderPayloadPlaceResolutionTest.php +53 -0
- package/server/tests/PointResolutionTest.php +63 -0
- package/server/tests/PublicFleetOpsRestEndpointsTest.php +191 -0
- package/server/tests/TelematicsHardeningTest.php +636 -1
- package/addon/components/table/cell/dropdown/action-item.hbs +0 -31
- package/addon/components/table/cell/dropdown/action-item.js +0 -62
- package/addon/components/table/cell/dropdown.hbs +0 -28
- package/addon/components/table/cell/dropdown.js +0 -91
- package/app/components/table/cell/dropdown/action-item.js +0 -1
- package/app/components/table/cell/dropdown.js +0 -1
|
@@ -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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
'
|
|
55
|
-
'
|
|
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($
|
|
23
|
+
public function map($serviceArea): array
|
|
24
24
|
{
|
|
25
25
|
return [
|
|
26
|
-
$
|
|
27
|
-
$
|
|
28
|
-
$
|
|
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
|
-
$
|
|
32
|
-
$
|
|
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
|
-
'
|
|
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
|
-
'
|
|
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
|
+
}
|