@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.
- package/addon/components/admin/map-settings.hbs +1 -1
- 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/layout/fleet-ops-sidebar.js +15 -9
- 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/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 +15 -0
- package/addon/instance-initializers/register-vroom-allocation.js +1 -1
- package/addon/routes/connectivity/events/details.js +26 -1
- package/addon/routes/management/vehicles/index/details.js +3 -1
- package/addon/services/map-adapter/google.js +25 -0
- package/addon/services/map-adapter/leaflet.js +1 -1
- package/addon/services/map-adapter-interface.js +1 -1
- package/addon/services/map-manager.js +4 -1
- package/addon/services/map-settings.js +15 -0
- package/addon/styles/fleetops-engine.css +1 -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/route-colors.js +1 -1
- package/app/components/device-event/details.hbs +192 -0
- package/app/components/device-event/details.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +2 -2
- 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/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/Order.php +2 -1
- package/server/src/Observers/PurchaseRateObserver.php +2 -1
- 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/routes.php +67 -14
- package/server/tests/ExportCoverageTest.php +79 -0
- package/server/tests/MetricsRegistryTest.php +45 -5
- package/server/tests/PublicFleetOpsRestEndpointsTest.php +191 -0
- package/server/tests/TelematicsHardeningTest.php +636 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Controllers\Api\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Http\Controllers\Api\v1\Concerns\ResolvesFleetOpsApiResources;
|
|
6
|
+
use Fleetbase\FleetOps\Http\Requests\CreateSensorRequest;
|
|
7
|
+
use Fleetbase\FleetOps\Http\Requests\UpdateSensorRequest;
|
|
8
|
+
use Fleetbase\FleetOps\Http\Resources\v1\DeletedResource;
|
|
9
|
+
use Fleetbase\FleetOps\Http\Resources\v1\Sensor as SensorResource;
|
|
10
|
+
use Fleetbase\FleetOps\Models\Device;
|
|
11
|
+
use Fleetbase\FleetOps\Models\Sensor;
|
|
12
|
+
use Fleetbase\FleetOps\Models\Telematic;
|
|
13
|
+
use Fleetbase\FleetOps\Models\Warranty;
|
|
14
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
15
|
+
use Fleetbase\Http\Controllers\Controller;
|
|
16
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
17
|
+
use Fleetbase\Models\File;
|
|
18
|
+
use Illuminate\Http\Request;
|
|
19
|
+
|
|
20
|
+
class SensorController extends Controller
|
|
21
|
+
{
|
|
22
|
+
use ResolvesFleetOpsApiResources;
|
|
23
|
+
|
|
24
|
+
public function create(CreateSensorRequest $request)
|
|
25
|
+
{
|
|
26
|
+
$this->rejectUuidIdentifiers($request);
|
|
27
|
+
|
|
28
|
+
$input = $this->input($request);
|
|
29
|
+
$input['company_uuid'] = session('company');
|
|
30
|
+
|
|
31
|
+
$sensor = Sensor::create($input)->load(['telematic', 'device', 'warranty', 'photo', 'sensorable']);
|
|
32
|
+
|
|
33
|
+
return new SensorResource($sensor);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public function update(string $id, UpdateSensorRequest $request)
|
|
37
|
+
{
|
|
38
|
+
$this->rejectUuidIdentifiers($request);
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
$sensor = $this->resolveModel(Sensor::class, $id);
|
|
42
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
43
|
+
return response()->json(['error' => 'Sensor resource not found.'], 404);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
$sensor->update($this->input($request));
|
|
47
|
+
|
|
48
|
+
return new SensorResource($sensor->refresh()->load(['telematic', 'device', 'warranty', 'photo', 'sensorable']));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public function query(Request $request)
|
|
52
|
+
{
|
|
53
|
+
$this->rejectUuidIdentifiers($request);
|
|
54
|
+
|
|
55
|
+
$results = Sensor::queryWithRequest($request, function (&$query) {
|
|
56
|
+
$query->with(['telematic', 'device', 'warranty', 'photo', 'sensorable']);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
return SensorResource::collection($results);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public function find(string $id)
|
|
63
|
+
{
|
|
64
|
+
try {
|
|
65
|
+
$sensor = $this->resolveModel(Sensor::class, $id)->load(['telematic', 'device', 'warranty', 'photo', 'sensorable']);
|
|
66
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
67
|
+
return response()->json(['error' => 'Sensor resource not found.'], 404);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return new SensorResource($sensor);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public function delete(string $id)
|
|
74
|
+
{
|
|
75
|
+
try {
|
|
76
|
+
$sensor = $this->resolveModel(Sensor::class, $id);
|
|
77
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
78
|
+
return response()->json(['error' => 'Sensor resource not found.'], 404);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
$sensor->delete();
|
|
82
|
+
|
|
83
|
+
return new DeletedResource($sensor);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
protected function input(Request $request): array
|
|
87
|
+
{
|
|
88
|
+
$input = $request->only([
|
|
89
|
+
'name',
|
|
90
|
+
'type',
|
|
91
|
+
'internal_id',
|
|
92
|
+
'imei',
|
|
93
|
+
'imsi',
|
|
94
|
+
'firmware_version',
|
|
95
|
+
'serial_number',
|
|
96
|
+
'unit',
|
|
97
|
+
'min_threshold',
|
|
98
|
+
'max_threshold',
|
|
99
|
+
'threshold_inclusive',
|
|
100
|
+
'last_reading_at',
|
|
101
|
+
'last_value',
|
|
102
|
+
'calibration',
|
|
103
|
+
'report_frequency_sec',
|
|
104
|
+
'status',
|
|
105
|
+
'meta',
|
|
106
|
+
]);
|
|
107
|
+
|
|
108
|
+
if ($request->filled(['latitude', 'longitude'])) {
|
|
109
|
+
$input['last_position'] = new Point($request->input('latitude'), $request->input('longitude'));
|
|
110
|
+
} elseif ($request->filled('last_position')) {
|
|
111
|
+
$input['last_position'] = Utils::getPointFromCoordinates($request->input('last_position'));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
$this->applyPublicIdRelation($input, 'device', 'device_uuid', Device::class, $request);
|
|
115
|
+
$this->applyPublicIdRelation($input, 'telematic', 'telematic_uuid', Telematic::class, $request);
|
|
116
|
+
$this->applyPublicIdRelation($input, 'warranty', 'warranty_uuid', Warranty::class, $request);
|
|
117
|
+
$this->applyPublicIdRelation($input, 'photo', 'photo_uuid', File::class, $request);
|
|
118
|
+
|
|
119
|
+
if ($request->exists('sensorable')) {
|
|
120
|
+
if (blank($request->input('sensorable'))) {
|
|
121
|
+
$input['sensorable_type'] = null;
|
|
122
|
+
$input['sensorable_uuid'] = null;
|
|
123
|
+
} else {
|
|
124
|
+
[$type, $uuid] = $this->resolveMorph($request->input('sensorable_type'), $request->input('sensorable'));
|
|
125
|
+
$input['sensorable_type'] = $type;
|
|
126
|
+
$input['sensorable_uuid'] = $uuid;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return $input;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Http\Controllers\Api\v1;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Http\Controllers\Api\v1\Concerns\ResolvesFleetOpsApiResources;
|
|
6
|
+
use Fleetbase\FleetOps\Http\Requests\CreateWorkOrderRequest;
|
|
7
|
+
use Fleetbase\FleetOps\Http\Requests\UpdateWorkOrderRequest;
|
|
8
|
+
use Fleetbase\FleetOps\Http\Resources\v1\DeletedResource;
|
|
9
|
+
use Fleetbase\FleetOps\Http\Resources\v1\WorkOrder as WorkOrderResource;
|
|
10
|
+
use Fleetbase\FleetOps\Mail\WorkOrderDispatched;
|
|
11
|
+
use Fleetbase\FleetOps\Models\WorkOrder;
|
|
12
|
+
use Fleetbase\Http\Controllers\Controller;
|
|
13
|
+
use Illuminate\Http\JsonResponse;
|
|
14
|
+
use Illuminate\Http\Request;
|
|
15
|
+
use Illuminate\Support\Facades\Mail;
|
|
16
|
+
|
|
17
|
+
class WorkOrderController extends Controller
|
|
18
|
+
{
|
|
19
|
+
use ResolvesFleetOpsApiResources;
|
|
20
|
+
|
|
21
|
+
public function create(CreateWorkOrderRequest $request)
|
|
22
|
+
{
|
|
23
|
+
$this->rejectUuidIdentifiers($request);
|
|
24
|
+
|
|
25
|
+
$input = $this->input($request);
|
|
26
|
+
$input['company_uuid'] = session('company');
|
|
27
|
+
|
|
28
|
+
$workOrder = WorkOrder::create($input)->load(['target', 'assignee']);
|
|
29
|
+
|
|
30
|
+
return new WorkOrderResource($workOrder);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public function update(string $id, UpdateWorkOrderRequest $request)
|
|
34
|
+
{
|
|
35
|
+
$this->rejectUuidIdentifiers($request);
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
$workOrder = $this->resolveModel(WorkOrder::class, $id);
|
|
39
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
40
|
+
return response()->json(['error' => 'WorkOrder resource not found.'], 404);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
$workOrder->update($this->input($request));
|
|
44
|
+
|
|
45
|
+
return new WorkOrderResource($workOrder->refresh()->load(['target', 'assignee']));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public function query(Request $request)
|
|
49
|
+
{
|
|
50
|
+
$this->rejectUuidIdentifiers($request);
|
|
51
|
+
|
|
52
|
+
$results = WorkOrder::queryWithRequest($request, function (&$query) {
|
|
53
|
+
$query->with(['target', 'assignee']);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
return WorkOrderResource::collection($results);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public function find(string $id)
|
|
60
|
+
{
|
|
61
|
+
try {
|
|
62
|
+
$workOrder = $this->resolveModel(WorkOrder::class, $id)->load(['target', 'assignee']);
|
|
63
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
64
|
+
return response()->json(['error' => 'WorkOrder resource not found.'], 404);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return new WorkOrderResource($workOrder);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public function delete(string $id)
|
|
71
|
+
{
|
|
72
|
+
try {
|
|
73
|
+
$workOrder = $this->resolveModel(WorkOrder::class, $id);
|
|
74
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
75
|
+
return response()->json(['error' => 'WorkOrder resource not found.'], 404);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
$workOrder->delete();
|
|
79
|
+
|
|
80
|
+
return new DeletedResource($workOrder);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public function send(string $id): JsonResponse
|
|
84
|
+
{
|
|
85
|
+
try {
|
|
86
|
+
$workOrder = $this->resolveModel(WorkOrder::class, $id)->load(['target', 'assignee']);
|
|
87
|
+
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
|
|
88
|
+
return response()->json(['error' => 'WorkOrder resource not found.'], 404);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
$assignee = $workOrder->assignee;
|
|
92
|
+
if (!$assignee) {
|
|
93
|
+
return response()->json(['error' => 'This work order has no assigned vendor.'], 422);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
$email = $assignee->email ?? null;
|
|
97
|
+
if (!$email) {
|
|
98
|
+
return response()->json(['error' => 'The assigned vendor has no email address on file.'], 422);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
Mail::to($email)->send(new WorkOrderDispatched($workOrder));
|
|
102
|
+
|
|
103
|
+
activity('work_order_sent')
|
|
104
|
+
->performedOn($workOrder)
|
|
105
|
+
->withProperties(['sent_to' => $email])
|
|
106
|
+
->log('Work order emailed to vendor');
|
|
107
|
+
|
|
108
|
+
return response()->json([
|
|
109
|
+
'status' => 'ok',
|
|
110
|
+
'message' => 'Work order successfully sent to ' . $email,
|
|
111
|
+
]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected function input(Request $request): array
|
|
115
|
+
{
|
|
116
|
+
$input = $request->only([
|
|
117
|
+
'code',
|
|
118
|
+
'subject',
|
|
119
|
+
'category',
|
|
120
|
+
'status',
|
|
121
|
+
'priority',
|
|
122
|
+
'opened_at',
|
|
123
|
+
'due_at',
|
|
124
|
+
'closed_at',
|
|
125
|
+
'instructions',
|
|
126
|
+
'checklist',
|
|
127
|
+
'estimated_cost',
|
|
128
|
+
'approved_budget',
|
|
129
|
+
'actual_cost',
|
|
130
|
+
'currency',
|
|
131
|
+
'cost_breakdown',
|
|
132
|
+
'cost_center',
|
|
133
|
+
'budget_code',
|
|
134
|
+
'meta',
|
|
135
|
+
]);
|
|
136
|
+
|
|
137
|
+
if ($request->exists('target')) {
|
|
138
|
+
if (blank($request->input('target'))) {
|
|
139
|
+
$input['target_type'] = null;
|
|
140
|
+
$input['target_uuid'] = null;
|
|
141
|
+
} else {
|
|
142
|
+
[$type, $uuid] = $this->resolveMorph($request->input('target_type'), $request->input('target'));
|
|
143
|
+
$input['target_type'] = $type;
|
|
144
|
+
$input['target_uuid'] = $uuid;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if ($request->exists('assignee')) {
|
|
149
|
+
if (blank($request->input('assignee'))) {
|
|
150
|
+
$input['assignee_type'] = null;
|
|
151
|
+
$input['assignee_uuid'] = null;
|
|
152
|
+
} else {
|
|
153
|
+
[$type, $uuid] = $this->resolveMorph($request->input('assignee_type'), $request->input('assignee'));
|
|
154
|
+
$input['assignee_type'] = $type;
|
|
155
|
+
$input['assignee_uuid'] = $uuid;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return $input;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\DeviceExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Models\Device;
|
|
7
8
|
use Fleetbase\FleetOps\Models\Vehicle;
|
|
8
9
|
use Fleetbase\FleetOps\Support\Utils;
|
|
10
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
9
11
|
use Illuminate\Http\JsonResponse;
|
|
10
12
|
use Illuminate\Http\Request;
|
|
11
13
|
use Illuminate\Support\Facades\Log;
|
|
14
|
+
use Illuminate\Support\Str;
|
|
15
|
+
use Maatwebsite\Excel\Facades\Excel;
|
|
12
16
|
|
|
13
17
|
class DeviceController extends FleetOpsController
|
|
14
18
|
{
|
|
@@ -19,6 +23,20 @@ class DeviceController extends FleetOpsController
|
|
|
19
23
|
*/
|
|
20
24
|
public $resource = 'device';
|
|
21
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Export devices to excel or csv.
|
|
28
|
+
*
|
|
29
|
+
* @return \Illuminate\Http\Response
|
|
30
|
+
*/
|
|
31
|
+
public function export(ExportRequest $request)
|
|
32
|
+
{
|
|
33
|
+
$format = $request->input('format', 'xlsx');
|
|
34
|
+
$selections = $request->array('selections');
|
|
35
|
+
$fileName = trim(Str::slug('devices-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
36
|
+
|
|
37
|
+
return Excel::download(new DeviceExport($selections), $fileName);
|
|
38
|
+
}
|
|
39
|
+
|
|
22
40
|
/**
|
|
23
41
|
* Query callback when querying record.
|
|
24
42
|
*
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\EquipmentExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Imports\EquipmentImport;
|
|
8
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
7
9
|
use Fleetbase\Http\Requests\ImportRequest;
|
|
10
|
+
use Illuminate\Support\Str;
|
|
8
11
|
use Maatwebsite\Excel\Facades\Excel;
|
|
9
12
|
|
|
10
13
|
class EquipmentController extends FleetOpsController
|
|
@@ -16,6 +19,20 @@ class EquipmentController extends FleetOpsController
|
|
|
16
19
|
*/
|
|
17
20
|
public $resource = 'equipment';
|
|
18
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Export equipment to excel or csv.
|
|
24
|
+
*
|
|
25
|
+
* @return \Illuminate\Http\Response
|
|
26
|
+
*/
|
|
27
|
+
public function export(ExportRequest $request)
|
|
28
|
+
{
|
|
29
|
+
$format = $request->input('format', 'xlsx');
|
|
30
|
+
$selections = $request->array('selections');
|
|
31
|
+
$fileName = trim(Str::slug('equipment-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
32
|
+
|
|
33
|
+
return Excel::download(new EquipmentExport($selections), $fileName);
|
|
34
|
+
}
|
|
35
|
+
|
|
19
36
|
/**
|
|
20
37
|
* Process import files (excel, csv) into Equipment records.
|
|
21
38
|
*
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\MaintenanceExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Imports\MaintenanceImport;
|
|
7
8
|
use Fleetbase\FleetOps\Models\Maintenance;
|
|
9
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
8
10
|
use Fleetbase\Http\Requests\ImportRequest;
|
|
9
11
|
use Illuminate\Http\JsonResponse;
|
|
10
12
|
use Illuminate\Http\Request;
|
|
13
|
+
use Illuminate\Support\Str;
|
|
11
14
|
use Maatwebsite\Excel\Facades\Excel;
|
|
12
15
|
|
|
13
16
|
class MaintenanceController extends FleetOpsController
|
|
@@ -19,6 +22,20 @@ class MaintenanceController extends FleetOpsController
|
|
|
19
22
|
*/
|
|
20
23
|
public $resource = 'maintenance';
|
|
21
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Export maintenances to excel or csv.
|
|
27
|
+
*
|
|
28
|
+
* @return \Illuminate\Http\Response
|
|
29
|
+
*/
|
|
30
|
+
public function export(ExportRequest $request)
|
|
31
|
+
{
|
|
32
|
+
$format = $request->input('format', 'xlsx');
|
|
33
|
+
$selections = $request->array('selections');
|
|
34
|
+
$fileName = trim(Str::slug('maintenances-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
35
|
+
|
|
36
|
+
return Excel::download(new MaintenanceExport($selections), $fileName);
|
|
37
|
+
}
|
|
38
|
+
|
|
22
39
|
/**
|
|
23
40
|
* Eager-load polymorphic relationships after create so they appear in the API response.
|
|
24
41
|
* Called automatically by HasApiControllerBehavior::createRecord() via getControllerCallback.
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\MaintenanceScheduleExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Imports\MaintenanceScheduleImport;
|
|
7
8
|
use Fleetbase\FleetOps\Models\MaintenanceSchedule;
|
|
8
9
|
use Fleetbase\FleetOps\Models\WorkOrder;
|
|
10
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
9
11
|
use Fleetbase\Http\Requests\ImportRequest;
|
|
10
12
|
use Illuminate\Http\JsonResponse;
|
|
11
13
|
use Illuminate\Http\Request;
|
|
12
14
|
use Illuminate\Http\Response;
|
|
13
15
|
use Illuminate\Support\Carbon;
|
|
16
|
+
use Illuminate\Support\Str;
|
|
14
17
|
use Maatwebsite\Excel\Facades\Excel;
|
|
15
18
|
use Spatie\IcalendarGenerator\Components\Calendar;
|
|
16
19
|
use Spatie\IcalendarGenerator\Components\Event;
|
|
@@ -26,6 +29,20 @@ class MaintenanceScheduleController extends FleetOpsController
|
|
|
26
29
|
*/
|
|
27
30
|
public $resource = 'maintenance-schedule';
|
|
28
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Export maintenance schedules to excel or csv.
|
|
34
|
+
*
|
|
35
|
+
* @return Response
|
|
36
|
+
*/
|
|
37
|
+
public function export(ExportRequest $request)
|
|
38
|
+
{
|
|
39
|
+
$format = $request->input('format', 'xlsx');
|
|
40
|
+
$selections = $request->array('selections');
|
|
41
|
+
$fileName = trim(Str::slug('maintenance-schedules-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
42
|
+
|
|
43
|
+
return Excel::download(new MaintenanceScheduleExport($selections), $fileName);
|
|
44
|
+
}
|
|
45
|
+
|
|
29
46
|
/**
|
|
30
47
|
* Process import files (excel, csv) into MaintenanceSchedule records.
|
|
31
48
|
*
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\PartExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Imports\PartImport;
|
|
8
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
7
9
|
use Fleetbase\Http\Requests\ImportRequest;
|
|
10
|
+
use Illuminate\Support\Str;
|
|
8
11
|
use Maatwebsite\Excel\Facades\Excel;
|
|
9
12
|
|
|
10
13
|
class PartController extends FleetOpsController
|
|
@@ -16,6 +19,20 @@ class PartController extends FleetOpsController
|
|
|
16
19
|
*/
|
|
17
20
|
public $resource = 'part';
|
|
18
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Export parts to excel or csv.
|
|
24
|
+
*
|
|
25
|
+
* @return \Illuminate\Http\Response
|
|
26
|
+
*/
|
|
27
|
+
public function export(ExportRequest $request)
|
|
28
|
+
{
|
|
29
|
+
$format = $request->input('format', 'xlsx');
|
|
30
|
+
$selections = $request->array('selections');
|
|
31
|
+
$fileName = trim(Str::slug('parts-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
32
|
+
|
|
33
|
+
return Excel::download(new PartExport($selections), $fileName);
|
|
34
|
+
}
|
|
35
|
+
|
|
19
36
|
/**
|
|
20
37
|
* Process import files (excel, csv) into Part records.
|
|
21
38
|
*
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\SensorExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
7
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
use Maatwebsite\Excel\Facades\Excel;
|
|
6
10
|
|
|
7
11
|
class SensorController extends FleetOpsController
|
|
8
12
|
{
|
|
@@ -13,6 +17,20 @@ class SensorController extends FleetOpsController
|
|
|
13
17
|
*/
|
|
14
18
|
public $resource = 'sensor';
|
|
15
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Export sensors to excel or csv.
|
|
22
|
+
*
|
|
23
|
+
* @return \Illuminate\Http\Response
|
|
24
|
+
*/
|
|
25
|
+
public function export(ExportRequest $request)
|
|
26
|
+
{
|
|
27
|
+
$format = $request->input('format', 'xlsx');
|
|
28
|
+
$selections = $request->array('selections');
|
|
29
|
+
$fileName = trim(Str::slug('sensors-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
30
|
+
|
|
31
|
+
return Excel::download(new SensorExport($selections), $fileName);
|
|
32
|
+
}
|
|
33
|
+
|
|
16
34
|
/**
|
|
17
35
|
* Query callback when querying record.
|
|
18
36
|
*
|
|
@@ -327,12 +327,16 @@ class SettingController extends Controller
|
|
|
327
327
|
public function getMapSettings()
|
|
328
328
|
{
|
|
329
329
|
$defaults = [
|
|
330
|
-
'mapProvider'
|
|
330
|
+
'mapProvider' => 'leaflet',
|
|
331
|
+
'googleMapsMapType' => 'roadmap',
|
|
332
|
+
'showGoogleMapsTrafficLayer' => false,
|
|
333
|
+
'showGoogleMapsTransitLayer' => false,
|
|
331
334
|
];
|
|
332
335
|
|
|
333
336
|
$systemMapSettings = Setting::lookup('fleet-ops.map-settings', []);
|
|
334
337
|
$mapSettings = Setting::lookupFromCompany('fleet-ops.map-settings', $defaults);
|
|
335
338
|
$mapSettings['mapProvider'] = data_get($mapSettings, 'mapProvider') ?: data_get($systemMapSettings, 'mapProvider', 'leaflet');
|
|
339
|
+
$mapSettings = $this->normalizeCompanyMapSettings($mapSettings);
|
|
336
340
|
|
|
337
341
|
// Source the Google Maps API key from the system-level services config
|
|
338
342
|
// that is managed by the core-api admin settings panel. This ensures a
|
|
@@ -362,10 +366,7 @@ class SettingController extends Controller
|
|
|
362
366
|
unset($settings['googleMapsApiKey']);
|
|
363
367
|
|
|
364
368
|
// Validate provider value
|
|
365
|
-
$
|
|
366
|
-
if (isset($settings['mapProvider']) && !in_array($settings['mapProvider'], $allowedProviders)) {
|
|
367
|
-
$settings['mapProvider'] = 'leaflet';
|
|
368
|
-
}
|
|
369
|
+
$settings = $this->normalizeCompanyMapSettings($settings);
|
|
369
370
|
|
|
370
371
|
Setting::configureCompany('fleet-ops.map-settings', $settings);
|
|
371
372
|
|
|
@@ -400,6 +401,29 @@ class SettingController extends Controller
|
|
|
400
401
|
return response()->json($this->getAdminMapSettings()->getData(true));
|
|
401
402
|
}
|
|
402
403
|
|
|
404
|
+
protected function normalizeCompanyMapSettings(array $settings): array
|
|
405
|
+
{
|
|
406
|
+
$allowedProviders = ['leaflet', 'google'];
|
|
407
|
+
$mapProvider = data_get($settings, 'mapProvider', 'leaflet');
|
|
408
|
+
if (!in_array($mapProvider, $allowedProviders)) {
|
|
409
|
+
$mapProvider = 'leaflet';
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
$allowedGoogleMapTypes = ['roadmap', 'satellite', 'hybrid', 'terrain'];
|
|
413
|
+
$googleMapsMapType = data_get($settings, 'googleMapsMapType', 'roadmap');
|
|
414
|
+
if (!in_array($googleMapsMapType, $allowedGoogleMapTypes)) {
|
|
415
|
+
$googleMapsMapType = 'roadmap';
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return [
|
|
419
|
+
...$settings,
|
|
420
|
+
'mapProvider' => $mapProvider,
|
|
421
|
+
'googleMapsMapType' => $googleMapsMapType,
|
|
422
|
+
'showGoogleMapsTrafficLayer' => filter_var(data_get($settings, 'showGoogleMapsTrafficLayer', false), FILTER_VALIDATE_BOOLEAN),
|
|
423
|
+
'showGoogleMapsTransitLayer' => filter_var(data_get($settings, 'showGoogleMapsTransitLayer', false), FILTER_VALIDATE_BOOLEAN),
|
|
424
|
+
];
|
|
425
|
+
}
|
|
426
|
+
|
|
403
427
|
/**
|
|
404
428
|
* Retrieve driver scheduling settings for the current company.
|
|
405
429
|
*
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\TelematicExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Models\Telematic;
|
|
7
8
|
use Fleetbase\FleetOps\Support\Telematics\TelematicProviderRegistry;
|
|
8
9
|
use Fleetbase\FleetOps\Support\Telematics\TelematicService;
|
|
10
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
9
11
|
use Fleetbase\Models\Activity;
|
|
10
12
|
use Illuminate\Http\JsonResponse;
|
|
11
13
|
use Illuminate\Http\Request;
|
|
14
|
+
use Illuminate\Support\Str;
|
|
15
|
+
use Maatwebsite\Excel\Facades\Excel;
|
|
12
16
|
|
|
13
17
|
class TelematicController extends FleetOpsController
|
|
14
18
|
{
|
|
@@ -29,6 +33,20 @@ class TelematicController extends FleetOpsController
|
|
|
29
33
|
$this->registry = $registry;
|
|
30
34
|
}
|
|
31
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Export telematics to excel or csv.
|
|
38
|
+
*
|
|
39
|
+
* @return \Illuminate\Http\Response
|
|
40
|
+
*/
|
|
41
|
+
public function export(ExportRequest $request)
|
|
42
|
+
{
|
|
43
|
+
$format = $request->input('format', 'xlsx');
|
|
44
|
+
$selections = $request->array('selections');
|
|
45
|
+
$fileName = trim(Str::slug('telematics-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
46
|
+
|
|
47
|
+
return Excel::download(new TelematicExport($selections), $fileName);
|
|
48
|
+
}
|
|
49
|
+
|
|
32
50
|
/**
|
|
33
51
|
* Query callback when querying record.
|
|
34
52
|
*
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\FleetOps\Exports\WorkOrderExport;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Imports\WorkOrderImport;
|
|
7
8
|
use Fleetbase\FleetOps\Mail\WorkOrderDispatched;
|
|
8
9
|
use Fleetbase\FleetOps\Models\WorkOrder;
|
|
10
|
+
use Fleetbase\Http\Requests\ExportRequest;
|
|
9
11
|
use Fleetbase\Http\Requests\ImportRequest;
|
|
10
12
|
use Illuminate\Http\JsonResponse;
|
|
11
13
|
use Illuminate\Support\Facades\Mail;
|
|
14
|
+
use Illuminate\Support\Str;
|
|
12
15
|
use Maatwebsite\Excel\Facades\Excel;
|
|
13
16
|
|
|
14
17
|
class WorkOrderController extends FleetOpsController
|
|
@@ -20,6 +23,20 @@ class WorkOrderController extends FleetOpsController
|
|
|
20
23
|
*/
|
|
21
24
|
public $resource = 'work-order';
|
|
22
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Export work orders to excel or csv.
|
|
28
|
+
*
|
|
29
|
+
* @return \Illuminate\Http\Response
|
|
30
|
+
*/
|
|
31
|
+
public function export(ExportRequest $request)
|
|
32
|
+
{
|
|
33
|
+
$format = $request->input('format', 'xlsx');
|
|
34
|
+
$selections = $request->array('selections');
|
|
35
|
+
$fileName = trim(Str::slug('work-orders-' . date('Y-m-d-H:i')) . '.' . $format);
|
|
36
|
+
|
|
37
|
+
return Excel::download(new WorkOrderExport($selections), $fileName);
|
|
38
|
+
}
|
|
39
|
+
|
|
23
40
|
/**
|
|
24
41
|
* Process import files (excel, csv) into WorkOrder records.
|
|
25
42
|
*
|