@fleetbase/fleetops-engine 0.6.68 → 0.6.70
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/RELEASE.md +44 -9
- package/addon/components/admin/telematics-settings.hbs +143 -0
- package/addon/components/admin/telematics-settings.js +145 -0
- package/addon/components/contact/form.hbs +13 -2
- package/addon/components/customer/details.hbs +17 -17
- package/addon/components/customer/form.hbs +13 -2
- package/addon/components/customer/form.js +0 -56
- package/addon/components/driver/details.hbs +13 -19
- package/addon/components/driver/form.hbs +20 -35
- package/addon/components/driver/form.js +0 -58
- package/addon/components/fuel-integration/hub.hbs +1 -1
- package/addon/components/layout/fleet-ops-sidebar.js +37 -17
- package/addon/components/map/leaflet-live-map.hbs +4 -242
- package/addon/components/map/leaflet-live-map.js +2 -1
- package/addon/components/map/marker-card/driver.hbs +57 -0
- package/addon/components/map/marker-card/driver.js +3 -0
- package/addon/components/map/marker-card/vehicle.hbs +78 -0
- package/addon/components/map/marker-card/vehicle.js +3 -0
- package/addon/components/modals/driver-form.hbs +2 -2
- package/addon/components/modals/reset-profile-credentials.hbs +23 -0
- package/addon/components/modals/reset-profile-credentials.js +70 -0
- package/addon/components/profile-identity-hint.hbs +13 -0
- package/addon/components/profile-identity-hint.js +49 -0
- package/addon/components/telematic/hub.hbs +1 -1
- package/addon/components/widget/live-fleet.hbs +8 -40
- package/addon/controllers/analytics/reports/index.js +5 -0
- package/addon/controllers/connectivity/devices/index.js +4 -0
- package/addon/controllers/connectivity/fuel-providers/index.js +6 -4
- package/addon/controllers/connectivity/sensors/index.js +4 -0
- package/addon/controllers/connectivity/telematics/index.js +4 -0
- package/addon/controllers/maintenance/equipment/index.js +11 -4
- package/addon/controllers/maintenance/inspection-forms/index.js +2 -2
- package/addon/controllers/maintenance/inspection-submissions/index.js +8 -2
- package/addon/controllers/maintenance/maintenances/index.js +4 -0
- package/addon/controllers/maintenance/parts/index.js +11 -4
- package/addon/controllers/maintenance/schedules/index.js +17 -4
- package/addon/controllers/maintenance/work-orders/index.js +11 -4
- package/addon/controllers/management/contacts/index.js +4 -0
- package/addon/controllers/management/drivers/index.js +8 -0
- package/addon/controllers/management/fleets/index.js +4 -0
- package/addon/controllers/management/fuel-reports/index.js +4 -0
- package/addon/controllers/management/fuel-transactions/index.js +9 -7
- package/addon/controllers/management/issues/index.js +4 -0
- package/addon/controllers/management/places/index.js +4 -0
- package/addon/controllers/management/vehicles/index.js +4 -0
- package/addon/controllers/management/vendors/index.js +4 -0
- package/addon/controllers/operations/orders/index/details.js +30 -1
- package/addon/controllers/operations/orders/index.js +7 -0
- package/addon/controllers/operations/service-rates/index.js +3 -0
- package/addon/controllers/settings/index.js +13 -0
- package/addon/controllers/settings/telematics.js +113 -0
- package/addon/extension.js +42 -8
- package/addon/routes/analytics/index.js +14 -1
- package/addon/routes/analytics/reports/index/details.js +1 -1
- package/addon/routes/analytics/reports/index/edit.js +1 -1
- package/addon/routes/analytics/reports/index/new.js +14 -1
- package/addon/routes/analytics/reports.js +14 -1
- package/addon/routes/connectivity/devices/index/new.js +14 -1
- package/addon/routes/connectivity/devices.js +14 -1
- package/addon/routes/connectivity/events.js +14 -1
- package/addon/routes/connectivity/fuel-providers/details/transactions.js +12 -0
- package/addon/routes/connectivity/fuel-providers/details.js +9 -0
- package/addon/routes/connectivity/fuel-providers/edit.js +9 -0
- package/addon/routes/connectivity/fuel-providers/new.js +14 -1
- package/addon/routes/connectivity/fuel-providers.js +14 -1
- package/addon/routes/connectivity/sensors/index/new.js +14 -1
- package/addon/routes/connectivity/sensors.js +14 -1
- package/addon/routes/connectivity/telematics/new.js +14 -1
- package/addon/routes/connectivity/telematics.js +14 -1
- package/addon/routes/connectivity/tracking.js +14 -1
- package/addon/routes/maintenance/equipment/index/details.js +2 -2
- package/addon/routes/maintenance/equipment/index/edit.js +2 -2
- package/addon/routes/maintenance/equipment/index/new.js +14 -1
- package/addon/routes/maintenance/equipment.js +14 -1
- package/addon/routes/maintenance/index.js +14 -1
- package/addon/routes/maintenance/inspection-forms/index/details.js +10 -1
- package/addon/routes/maintenance/inspection-forms/index/edit.js +10 -1
- package/addon/routes/maintenance/inspection-forms/index/new.js +14 -1
- package/addon/routes/maintenance/inspection-forms.js +14 -1
- package/addon/routes/maintenance/inspection-submissions/index/details.js +10 -1
- package/addon/routes/maintenance/inspection-submissions/index/edit.js +10 -1
- package/addon/routes/maintenance/inspection-submissions/index/new.js +14 -1
- package/addon/routes/maintenance/inspection-submissions.js +14 -1
- package/addon/routes/maintenance/maintenances/index/details.js +2 -2
- package/addon/routes/maintenance/maintenances/index/edit.js +2 -2
- package/addon/routes/maintenance/maintenances/index/new.js +14 -1
- package/addon/routes/maintenance/maintenances.js +14 -1
- package/addon/routes/maintenance/parts/index/details.js +2 -2
- package/addon/routes/maintenance/parts/index/edit.js +2 -2
- package/addon/routes/maintenance/parts/index/new.js +14 -1
- package/addon/routes/maintenance/parts.js +14 -1
- package/addon/routes/maintenance/schedules/index/details.js +2 -2
- package/addon/routes/maintenance/schedules/index/edit.js +2 -2
- package/addon/routes/maintenance/schedules/index/new.js +15 -1
- package/addon/routes/maintenance/schedules.js +15 -1
- package/addon/routes/maintenance/work-orders/index/details.js +2 -2
- package/addon/routes/maintenance/work-orders/index/edit.js +2 -2
- package/addon/routes/maintenance/work-orders/index/new.js +14 -1
- package/addon/routes/maintenance/work-orders.js +14 -1
- package/addon/routes/management/fuel-transactions/index/details.js +9 -0
- package/addon/routes/management/fuel-transactions.js +14 -1
- package/addon/routes/management/index.js +13 -0
- package/addon/routes/management/trailers.js +16 -0
- package/addon/routes/management/vendors/integrated/details.js +14 -1
- package/addon/routes/management/vendors/integrated/edit.js +14 -1
- package/addon/routes/management/vendors/integrated/new.js +14 -1
- package/addon/routes/management/vendors/integrated.js +14 -1
- package/addon/routes/operations/orders.js +40 -1
- package/addon/routes/operations/routes/index/details.js +14 -1
- package/addon/routes/operations/routes/index/new.js +13 -0
- package/addon/routes/operations/routes.js +14 -1
- package/addon/routes/operations/service-rates/index/new.js +11 -0
- package/addon/routes/operations/service-rates.js +14 -1
- package/addon/routes/settings/avatars.js +14 -1
- package/addon/routes/settings/custom-fields.js +14 -1
- package/addon/routes/settings/map.js +14 -1
- package/addon/routes/settings/notifications.js +11 -0
- package/addon/routes/settings/orchestrator.js +1 -1
- package/addon/routes/settings/payments/index.js +1 -1
- package/addon/routes/settings/routing.js +14 -1
- package/addon/routes/settings/scheduling.js +14 -1
- package/addon/routes/settings/telematics.js +21 -0
- package/addon/routes/virtual.js +11 -0
- package/addon/routes.js +1 -0
- package/addon/services/contact-actions.js +50 -89
- package/addon/services/driver-actions.js +98 -0
- package/addon/templates/settings/telematics.hbs +70 -0
- package/addon/utils/profile-login-actions.js +172 -0
- package/app/components/admin/telematics-settings.js +1 -0
- package/app/components/{modals/reset-customer-credentials.js → map/marker-card/driver.js} +1 -1
- package/app/components/map/marker-card/vehicle.js +1 -0
- package/app/components/modals/reset-profile-credentials.js +1 -0
- package/app/components/profile-identity-hint.js +1 -0
- package/app/controllers/settings/telematics.js +1 -0
- package/app/routes/settings/telematics.js +1 -0
- package/app/templates/settings/telematics.js +1 -0
- package/composer.json +2 -2
- package/docs/AFAQY.md +1 -1
- package/docs/TELEMATICS_QUEUES.md +1 -1
- package/docs/TELEMETRY_ARCHITECTURE.md +72 -1
- package/extension.json +1 -1
- package/package.json +3 -3
- package/scripts/pest-bootstrap.php +12 -0
- package/server/config/telemetry.php +12 -0
- package/server/migrations/2026_09_21_000001_convert_profile_only_users_to_managed_accounts.php +132 -0
- package/server/migrations/2026_09_23_000001_add_retention_index_to_device_events.php +40 -0
- package/server/migrations/2026_09_23_000002_add_retention_index_to_positions.php +40 -0
- package/server/migrations/2026_09_23_000003_add_retention_index_to_telematic_sync_runs.php +40 -0
- package/server/resources/views/mail/driver-credentials.blade.php +21 -0
- package/server/src/Auth/Schemas/FleetOps.php +104 -5
- package/server/src/Console/Commands/DrainTelematicInbox.php +3 -13
- package/server/src/Console/Commands/FixCustomerCompanies.php +1 -1
- package/server/src/Console/Commands/FixDriverCompanies.php +1 -1
- package/server/src/Console/Commands/ProcessOperationalAlerts.php +3 -3
- package/server/src/Console/Commands/PruneTelematicsData.php +318 -0
- package/server/src/Exceptions/ProfileIdentityConflictException.php +34 -0
- package/server/src/Http/Controllers/Api/v1/CustomerController.php +14 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +56 -39
- package/server/src/Http/Controllers/Api/v1/OrchestrationController.php +9 -0
- package/server/src/Http/Controllers/FleetOpsController.php +21 -0
- package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +11 -0
- package/server/src/Http/Controllers/Internal/v1/ContactController.php +16 -17
- package/server/src/Http/Controllers/Internal/v1/CustomerController.php +54 -4
- package/server/src/Http/Controllers/Internal/v1/DeviceController.php +13 -0
- package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +11 -0
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +204 -162
- package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +47 -0
- package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +13 -0
- package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +15 -0
- package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +9 -3
- package/server/src/Http/Controllers/Internal/v1/InspectionFormController.php +15 -0
- package/server/src/Http/Controllers/Internal/v1/LiveController.php +16 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +15 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +15 -0
- package/server/src/Http/Controllers/Internal/v1/ManifestController.php +15 -0
- package/server/src/Http/Controllers/Internal/v1/MetricsController.php +11 -0
- package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +42 -1
- package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +12 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +178 -27
- package/server/src/Http/Controllers/Internal/v1/PaymentController.php +13 -0
- package/server/src/Http/Controllers/Internal/v1/RadarController.php +19 -0
- package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +9 -3
- package/server/src/Http/Controllers/Internal/v1/SettingController.php +465 -14
- package/server/src/Http/Controllers/Internal/v1/TelematicController.php +21 -0
- package/server/src/Http/Controllers/Internal/v1/TrailerController.php +21 -0
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +21 -0
- package/server/src/Http/Controllers/Internal/v1/VendorController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +11 -0
- package/server/src/Http/Requests/CreateDriverRequest.php +6 -2
- package/server/src/Http/Requests/Internal/CreateDriverRequest.php +9 -18
- package/server/src/Http/Resources/v1/Contact.php +3 -0
- package/server/src/Http/Resources/v1/Driver.php +3 -0
- package/server/src/Jobs/DispatchTelematicsRetentionJobs.php +70 -0
- package/server/src/Jobs/PruneTelematicsDataJob.php +74 -0
- package/server/src/Listeners/NotifyDriverOnShiftChange.php +3 -3
- package/server/src/Mail/CustomerCredentialsMail.php +1 -1
- package/server/src/Mail/DriverCredentialsMail.php +55 -0
- package/server/src/Models/Contact.php +55 -90
- package/server/src/Models/Sensor.php +3 -5
- package/server/src/Observers/ContactObserver.php +2 -22
- package/server/src/Observers/DriverObserver.php +5 -6
- package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +9 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +18 -0
- package/server/src/Support/Ai/Capabilities/AbstractFleetOpsAICapability.php +62 -5
- package/server/src/Support/Ai/Capabilities/AssetStatusCapability.php +24 -5
- package/server/src/Support/Ai/Capabilities/CreateOrderPreviewCapability.php +6 -2
- package/server/src/Support/Ai/Capabilities/OrderInsightsCapability.php +40 -7
- package/server/src/Support/Ai/Capabilities/SearchResourcesCapability.php +86 -24
- package/server/src/Support/Ai/FleetOpsAiConsoleCommands.php +122 -0
- package/server/src/Support/Ai/Tools/CreateOrderTool.php +86 -0
- package/server/src/Support/Ai/Tools/ImportOrdersTool.php +53 -0
- package/server/src/Support/Ai/Tools/OptimizeOrderRouteTool.php +70 -0
- package/server/src/Support/Ai/Tools/SearchResourcesTool.php +73 -0
- package/server/src/Support/Analytics/LiveFleet.php +18 -2
- package/server/src/Support/Authorization.php +103 -0
- package/server/src/Support/Database/TableIndexes.php +66 -0
- package/server/src/Support/OrderTracker.php +2 -2
- package/server/src/Support/ProfileAccountManager.php +405 -0
- package/server/src/Support/Reporting/FleetOpsReportSchema.php +476 -116
- package/server/src/Support/Telematics/Retention/RetentionPolicy.php +300 -0
- package/server/src/Support/Telematics/Retention/TelemetryActivity.php +40 -0
- package/server/src/Support/Telematics/TelematicService.php +12 -2
- package/server/src/Support/Telematics/Telemetry/Ingestor.php +4 -2
- package/server/src/Tracking/TrackingIntelligenceService.php +1 -1
- package/server/src/Tracking/TrackingOptions.php +2 -2
- package/server/src/Traits/AuthorizesMethods.php +37 -0
- package/server/src/routes.php +14 -1
- package/server/tests/AiOperationalQueryCapabilityTest.php +1 -0
- package/server/tests/AnalyticsRoutesTest.php +29 -2
- package/server/tests/ApiCustomerControllerContractsTest.php +21 -0
- package/server/tests/ApiDriverControllerContractsTest.php +102 -20
- package/server/tests/CommandContractsTest.php +4 -4
- package/server/tests/ControllerHelperContractsTest.php +3 -11
- package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +21 -1
- package/server/tests/Feature/Http/Api/DriverControllerAuthFlowsTest.php +36 -0
- package/server/tests/Feature/Http/Api/DriverControllerSessionHelpersTest.php +19 -6
- package/server/tests/Feature/Http/Api/ProfileOnlyUserConversionMigrationTest.php +201 -0
- package/server/tests/Feature/Http/Api/TelematicsRetentionIndexMigrationTest.php +115 -0
- package/server/tests/Feature/Http/Internal/ContactControllerEndpointsTest.php +6 -4
- package/server/tests/Feature/Http/Internal/CustomerControllerCredentialsTest.php +6 -2
- package/server/tests/Feature/Http/Internal/DriverControllerContractsTest.php +23 -0
- package/server/tests/Feature/Http/Internal/DriverControllerCreateRecordTest.php +42 -17
- package/server/tests/Feature/Http/Internal/DriverControllerExistingUserAdoptionTest.php +168 -277
- package/server/tests/Feature/Http/Internal/DriverControllerLoginManagementTest.php +716 -0
- package/server/tests/Feature/Http/Internal/OrderControllerContractsTest.php +10 -3
- package/server/tests/Feature/Http/Internal/OrderControllerImportFromFilesTest.php +18 -0
- package/server/tests/Feature/Http/Internal/OrderControllerTenantScopingTest.php +411 -0
- package/server/tests/Feature/Http/Internal/OrderControllerUpstreamNotFoundTest.php +8 -20
- package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +71 -0
- package/server/tests/Feature/Http/Internal/TelematicsStorageDeadlinesTest.php +119 -0
- package/server/tests/InternalCustomerControllerContractsTest.php +32 -1
- package/server/tests/InternalImportExportControllerContractsTest.php +5 -8
- package/server/tests/ModelAccessorContractsTest.php +82 -20
- package/server/tests/NavigatorControllerContractsTest.php +36 -4
- package/server/tests/NotificationAndMailContractsTest.php +31 -0
- package/server/tests/ObserverContractsTest.php +28 -3
- package/server/tests/OrchestratorConsumableApiTest.php +42 -0
- package/server/tests/ProviderContractsTest.php +10 -0
- package/server/tests/ReportSchemaContractsTest.php +120 -6
- package/server/tests/RequestContractsTest.php +19 -11
- package/server/tests/SettingControllerContractsTest.php +429 -18
- package/server/tests/SmallControllerContractsTest.php +8 -5
- package/server/tests/Support/PruneTelematicsDataProbe.php +55 -0
- package/server/tests/SupportJobAndAiCoverageTest.php +3 -3
- package/server/tests/TelematicControllerContractsTest.php +22 -4
- package/server/tests/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +2 -2
- package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +353 -0
- package/server/tests/Unit/Jobs/DispatchTelematicsRetentionJobsTest.php +114 -0
- package/server/tests/Unit/Jobs/PruneTelematicsDataJobTest.php +60 -0
- package/server/tests/Unit/Models/ContactCustomerUserTest.php +90 -14
- package/server/tests/Unit/Models/ContactTest.php +48 -5
- package/server/tests/Unit/Models/SensorTest.php +2 -2
- package/server/tests/Unit/Models/SmallModelSurfacesTest.php +31 -32
- package/server/tests/Unit/Observers/ObserverListenerSeamsTest.php +7 -2
- package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +20 -0
- package/server/tests/Unit/Providers/FleetOpsAiRegistrationTest.php +15 -2
- package/server/tests/Unit/Support/Ai/AssetStatusCapabilityQueriesTest.php +42 -0
- package/server/tests/Unit/Support/Ai/Capabilities/OrderInsightsCapabilityTest.php +19 -1
- package/server/tests/Unit/Support/Ai/Capabilities/SearchResourcesCapabilityTest.php +85 -1
- package/server/tests/Unit/Support/Ai/FleetOpsAiConsoleCommandsTest.php +31 -0
- package/server/tests/Unit/Support/Ai/Tools/FleetOpsAiToolsTest.php +246 -0
- package/server/tests/Unit/Support/AiCapabilityPermissionsTest.php +3 -3
- package/server/tests/Unit/Support/Analytics/LiveFleetTest.php +6 -0
- package/server/tests/Unit/Support/AuthorizationTest.php +142 -0
- package/server/tests/Unit/Support/MaintainableAndOperationalAlertsTest.php +12 -1
- package/server/tests/Unit/Support/MoreQuerySeamsTest.php +11 -2
- package/server/tests/Unit/Support/ProfileAccountManagerTest.php +643 -0
- package/server/tests/Unit/Support/Telematics/Retention/RetentionPolicyTest.php +190 -0
- package/server/tests/Unit/Support/Telematics/Retention/TelemetryActivityTest.php +68 -0
- package/server/tests/Unit/Tracking/TrackingOptionsCompanySettingsTest.php +109 -0
- package/translations/en-us.yaml +85 -2
- package/translations/uk-ua.yaml +3475 -0
- package/addon/components/modals/reset-customer-credentials.hbs +0 -18
- package/addon/components/modals/reset-customer-credentials.js +0 -55
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\Attributes\SkipAuthorizationCheck;
|
|
5
6
|
use Fleetbase\FleetOps\Exports\ContactExport;
|
|
6
7
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
7
8
|
use Fleetbase\FleetOps\Http\Resources\v1\Vendor as VendorResource;
|
|
@@ -26,6 +27,15 @@ use Maatwebsite\Excel\Facades\Excel;
|
|
|
26
27
|
|
|
27
28
|
class ContactController extends FleetOpsController
|
|
28
29
|
{
|
|
30
|
+
/**
|
|
31
|
+
* Permissions for methods AuthorizationGuard cannot map to a schema action (see FleetOpsController).
|
|
32
|
+
*
|
|
33
|
+
* @var array<string, string|string[]>
|
|
34
|
+
*/
|
|
35
|
+
protected array $methodPermissions = [
|
|
36
|
+
'convertToVendor' => 'create vendor',
|
|
37
|
+
];
|
|
38
|
+
|
|
29
39
|
/**
|
|
30
40
|
* The resource to query.
|
|
31
41
|
*
|
|
@@ -108,6 +118,7 @@ class ContactController extends FleetOpsController
|
|
|
108
118
|
]);
|
|
109
119
|
}
|
|
110
120
|
|
|
121
|
+
#[SkipAuthorizationCheck]
|
|
111
122
|
public function convertToVendor(Request $request, string $id)
|
|
112
123
|
{
|
|
113
124
|
$contact = $this->contactForVendorConversion($id);
|
|
@@ -265,25 +276,13 @@ class ContactController extends FleetOpsController
|
|
|
265
276
|
->get();
|
|
266
277
|
}
|
|
267
278
|
|
|
279
|
+
/**
|
|
280
|
+
* The login account is managed by the contact profile, so a user can't be
|
|
281
|
+
* picked or swapped from the console.
|
|
282
|
+
*/
|
|
268
283
|
private function resolveUserInput(Request $request, array &$input): void
|
|
269
284
|
{
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
if (is_array($user)) {
|
|
273
|
-
$user = data_get($user, 'uuid') ?? data_get($user, 'id');
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
if (!$user) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
$input['user_uuid'] = $this->resolveUserUuid($user);
|
|
281
|
-
unset($input['user']);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
protected function resolveUserUuid(string $user): string
|
|
285
|
-
{
|
|
286
|
-
return User::where('uuid', $user)->orWhere('public_id', $user)->value('uuid') ?? $user;
|
|
285
|
+
unset($input['user_uuid'], $input['user']);
|
|
287
286
|
}
|
|
288
287
|
|
|
289
288
|
protected function assertCustomerPortalCanSendWelcomeEmail(array $input): void
|
|
@@ -4,6 +4,8 @@ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Mail\CustomerCredentialsMail;
|
|
6
6
|
use Fleetbase\FleetOps\Models\Contact;
|
|
7
|
+
use Fleetbase\FleetOps\Support\ProfileAccountManager;
|
|
8
|
+
use Fleetbase\FleetOps\Traits\AuthorizesMethods;
|
|
7
9
|
use Fleetbase\Http\Controllers\Controller;
|
|
8
10
|
use Fleetbase\Models\User;
|
|
9
11
|
use Illuminate\Http\Request;
|
|
@@ -12,6 +14,19 @@ use Illuminate\Support\Str;
|
|
|
12
14
|
|
|
13
15
|
class CustomerController extends Controller
|
|
14
16
|
{
|
|
17
|
+
use AuthorizesMethods;
|
|
18
|
+
|
|
19
|
+
public function __construct()
|
|
20
|
+
{
|
|
21
|
+
$this->authorizeMethods([
|
|
22
|
+
'createPortalLogin' => 'reset-credentials-for customer',
|
|
23
|
+
'sendCredentials' => 'reset-credentials-for customer',
|
|
24
|
+
'deactivatePortalLogin' => 'reset-credentials-for customer',
|
|
25
|
+
'reactivatePortalLogin' => 'reset-credentials-for customer',
|
|
26
|
+
'resetCredentials' => 'reset-credentials-for customer',
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
public function createPortalLogin(Request $request)
|
|
16
31
|
{
|
|
17
32
|
$customer = $this->resolveCustomer($request);
|
|
@@ -21,6 +36,10 @@ class CustomerController extends Controller
|
|
|
21
36
|
return response()->error('Unable to create customer portal login.');
|
|
22
37
|
}
|
|
23
38
|
|
|
39
|
+
if ($error = $this->staffLinkedError($user)) {
|
|
40
|
+
return $error;
|
|
41
|
+
}
|
|
42
|
+
|
|
24
43
|
if ($user->status !== 'active') {
|
|
25
44
|
$user->activate();
|
|
26
45
|
}
|
|
@@ -39,6 +58,10 @@ class CustomerController extends Controller
|
|
|
39
58
|
return response()->error('Unable to send customer portal credentials.');
|
|
40
59
|
}
|
|
41
60
|
|
|
61
|
+
if ($error = $this->staffLinkedError($user)) {
|
|
62
|
+
return $error;
|
|
63
|
+
}
|
|
64
|
+
|
|
42
65
|
$password = $this->randomPassword();
|
|
43
66
|
$user->changePassword($password);
|
|
44
67
|
$this->sendCustomerCredentials($user, $password, $customer);
|
|
@@ -57,6 +80,10 @@ class CustomerController extends Controller
|
|
|
57
80
|
return response()->error('Customer portal login not found.');
|
|
58
81
|
}
|
|
59
82
|
|
|
83
|
+
if ($error = $this->staffLinkedError($user)) {
|
|
84
|
+
return $error;
|
|
85
|
+
}
|
|
86
|
+
|
|
60
87
|
$user->deactivate();
|
|
61
88
|
|
|
62
89
|
return response()->json([
|
|
@@ -73,6 +100,10 @@ class CustomerController extends Controller
|
|
|
73
100
|
return response()->error('Customer portal login not found.');
|
|
74
101
|
}
|
|
75
102
|
|
|
103
|
+
if ($error = $this->staffLinkedError($user)) {
|
|
104
|
+
return $error;
|
|
105
|
+
}
|
|
106
|
+
|
|
76
107
|
$user->activate();
|
|
77
108
|
|
|
78
109
|
return response()->json([
|
|
@@ -149,6 +180,10 @@ class CustomerController extends Controller
|
|
|
149
180
|
return response()->error('Unable to reset customer credentials');
|
|
150
181
|
}
|
|
151
182
|
|
|
183
|
+
if ($error = $this->staffLinkedError($user)) {
|
|
184
|
+
return $error;
|
|
185
|
+
}
|
|
186
|
+
|
|
152
187
|
// Change password
|
|
153
188
|
$user->changePassword($password);
|
|
154
189
|
|
|
@@ -163,6 +198,19 @@ class CustomerController extends Controller
|
|
|
163
198
|
]);
|
|
164
199
|
}
|
|
165
200
|
|
|
201
|
+
/**
|
|
202
|
+
* A customer linked to a team member's account signs in with that account,
|
|
203
|
+
* which is managed in IAM.
|
|
204
|
+
*/
|
|
205
|
+
protected function staffLinkedError(User $user): ?\Illuminate\Http\JsonResponse
|
|
206
|
+
{
|
|
207
|
+
if (ProfileAccountManager::isStaffAccount($user)) {
|
|
208
|
+
return response()->error('This customer signs in with a team member account. Manage this login in IAM.', 422);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
|
|
166
214
|
protected function resolveCustomer(Request $request): Contact
|
|
167
215
|
{
|
|
168
216
|
$customerId = $request->input('customer');
|
|
@@ -213,10 +261,12 @@ class CustomerController extends Controller
|
|
|
213
261
|
$customer->loadMissing('user');
|
|
214
262
|
|
|
215
263
|
return [
|
|
216
|
-
'id'
|
|
217
|
-
'uuid'
|
|
218
|
-
'user_uuid'
|
|
219
|
-
'
|
|
264
|
+
'id' => $customer->public_id,
|
|
265
|
+
'uuid' => $customer->uuid,
|
|
266
|
+
'user_uuid' => $customer->user_uuid,
|
|
267
|
+
'is_staff_linked' => ProfileAccountManager::isStaffAccount($customer->user),
|
|
268
|
+
'login_status' => $customer->user?->status,
|
|
269
|
+
'user' => $customer->user ? [
|
|
220
270
|
'id' => $customer->user->public_id,
|
|
221
271
|
'uuid' => $customer->user->uuid,
|
|
222
272
|
'name' => $customer->user->name,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\Attributes\SkipAuthorizationCheck;
|
|
5
6
|
use Fleetbase\FleetOps\Exceptions\DeviceAlreadyAttachedException;
|
|
6
7
|
use Fleetbase\FleetOps\Exports\DeviceExport;
|
|
7
8
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
@@ -17,6 +18,16 @@ use Maatwebsite\Excel\Facades\Excel;
|
|
|
17
18
|
|
|
18
19
|
class DeviceController extends FleetOpsController
|
|
19
20
|
{
|
|
21
|
+
/**
|
|
22
|
+
* Permissions for methods AuthorizationGuard cannot map to a schema action (see FleetOpsController).
|
|
23
|
+
*
|
|
24
|
+
* @var array<string, string|string[]>
|
|
25
|
+
*/
|
|
26
|
+
protected array $methodPermissions = [
|
|
27
|
+
'attach' => 'update device',
|
|
28
|
+
'detach' => 'update device',
|
|
29
|
+
];
|
|
30
|
+
|
|
20
31
|
/**
|
|
21
32
|
* The resource to query.
|
|
22
33
|
*
|
|
@@ -110,6 +121,7 @@ class DeviceController extends FleetOpsController
|
|
|
110
121
|
/**
|
|
111
122
|
* Attach a device to a supported FleetOps resource.
|
|
112
123
|
*/
|
|
124
|
+
#[SkipAuthorizationCheck]
|
|
113
125
|
public function attach(Request $request, string $id): JsonResponse
|
|
114
126
|
{
|
|
115
127
|
$request->validate([
|
|
@@ -152,6 +164,7 @@ class DeviceController extends FleetOpsController
|
|
|
152
164
|
/**
|
|
153
165
|
* Detach a device from its current FleetOps resource.
|
|
154
166
|
*/
|
|
167
|
+
#[SkipAuthorizationCheck]
|
|
155
168
|
public function detach(string $id): JsonResponse
|
|
156
169
|
{
|
|
157
170
|
$device = $this->resolveDevice($id);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
4
4
|
|
|
5
|
+
use Fleetbase\Attributes\SkipAuthorizationCheck;
|
|
5
6
|
use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
6
7
|
use Fleetbase\FleetOps\Models\DeviceEvent;
|
|
7
8
|
use Fleetbase\FleetOps\Support\Utils;
|
|
@@ -9,6 +10,15 @@ use Illuminate\Http\JsonResponse;
|
|
|
9
10
|
|
|
10
11
|
class DeviceEventController extends FleetOpsController
|
|
11
12
|
{
|
|
13
|
+
/**
|
|
14
|
+
* Permissions for methods AuthorizationGuard cannot map to a schema action (see FleetOpsController).
|
|
15
|
+
*
|
|
16
|
+
* @var array<string, string|string[]>
|
|
17
|
+
*/
|
|
18
|
+
protected array $methodPermissions = [
|
|
19
|
+
'markProcessed' => 'update device-event',
|
|
20
|
+
];
|
|
21
|
+
|
|
12
22
|
/**
|
|
13
23
|
* The resource to query.
|
|
14
24
|
*
|
|
@@ -51,6 +61,7 @@ class DeviceEventController extends FleetOpsController
|
|
|
51
61
|
}
|
|
52
62
|
}
|
|
53
63
|
|
|
64
|
+
#[SkipAuthorizationCheck]
|
|
54
65
|
public function markProcessed(string $id): JsonResponse
|
|
55
66
|
{
|
|
56
67
|
$deviceEvent = DeviceEvent::where('company_uuid', session('company'))
|