@fleetbase/fleetops-engine 0.6.69 → 0.6.71
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 +21 -14
- package/addon/components/admin/telematics-settings.hbs +143 -0
- package/addon/components/admin/telematics-settings.js +145 -0
- 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/order/details/activity.hbs +8 -6
- package/addon/components/order/details/activity.js +9 -0
- package/addon/components/order/details.hbs +29 -0
- package/addon/components/order/details.js +26 -0
- package/addon/components/order/form/details.hbs +30 -4
- package/addon/components/order/form/details.js +46 -0
- package/addon/components/order/form/route.hbs +4 -2
- package/addon/components/order/form/route.js +11 -0
- package/addon/components/order/form.hbs +12 -0
- package/addon/components/order/form.js +21 -1
- package/addon/components/order/kanban.js +72 -0
- package/addon/components/order-config-manager/activity-flow.js +45 -10
- package/addon/components/order-config-manager/lifecycle.hbs +250 -0
- package/addon/components/order-config-manager/lifecycle.js +358 -0
- package/addon/components/order-config-manager.js +5 -1
- package/addon/components/telematic/hub.hbs +1 -1
- package/addon/components/widget/live-fleet.hbs +8 -40
- package/addon/controllers/analytics/reports/index.js +15 -1
- package/addon/controllers/connectivity/devices/index/details.js +1 -0
- package/addon/controllers/connectivity/devices/index.js +12 -2
- package/addon/controllers/connectivity/events/index.js +31 -1
- package/addon/controllers/connectivity/fuel-providers/index.js +6 -4
- package/addon/controllers/connectivity/sensors/index/details.js +1 -1
- package/addon/controllers/connectivity/sensors/index.js +41 -1
- package/addon/controllers/connectivity/telematics/index.js +4 -0
- package/addon/controllers/maintenance/equipment/index/details.js +2 -2
- package/addon/controllers/maintenance/equipment/index.js +36 -10
- package/addon/controllers/maintenance/inspection-forms/index.js +32 -12
- package/addon/controllers/maintenance/inspection-submissions/index/details.js +2 -1
- package/addon/controllers/maintenance/inspection-submissions/index.js +56 -10
- package/addon/controllers/maintenance/maintenances/index/details.js +2 -0
- package/addon/controllers/maintenance/maintenances/index.js +24 -1
- package/addon/controllers/maintenance/parts/index/details.js +2 -2
- package/addon/controllers/maintenance/parts/index.js +36 -9
- package/addon/controllers/maintenance/schedules/index.js +48 -6
- package/addon/controllers/maintenance/work-orders/index/details.js +3 -3
- package/addon/controllers/maintenance/work-orders/index.js +47 -9
- package/addon/controllers/management/contacts/customers.js +13 -0
- package/addon/controllers/management/contacts/index.js +47 -1
- package/addon/controllers/management/drivers/index/details.js +1 -0
- package/addon/controllers/management/drivers/index.js +36 -2
- package/addon/controllers/management/fleets/index/details.js +1 -0
- package/addon/controllers/management/fleets/index.js +43 -1
- package/addon/controllers/management/fuel-reports/index.js +26 -2
- package/addon/controllers/management/fuel-transactions/index.js +45 -7
- package/addon/controllers/management/issues/index/details.js +1 -0
- package/addon/controllers/management/issues/index.js +26 -2
- package/addon/controllers/management/places/index.js +40 -1
- package/addon/controllers/management/trailers/index/details.js +1 -0
- package/addon/controllers/management/trailers/index.js +50 -2
- package/addon/controllers/management/vehicles/index/details.js +1 -0
- package/addon/controllers/management/vehicles/index.js +37 -2
- package/addon/controllers/management/vendors/index.js +30 -2
- package/addon/controllers/operations/orders/index/details.js +61 -5
- package/addon/controllers/operations/orders/index.js +66 -4
- package/addon/controllers/operations/service-rates/index.js +18 -1
- package/addon/controllers/settings/index.js +13 -0
- package/addon/controllers/settings/telematics.js +113 -0
- package/addon/extension.js +70 -6
- 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/index/details.js +1 -0
- 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 +1 -0
- package/addon/services/customer-actions.js +2 -1
- package/addon/services/device-actions.js +1 -0
- package/addon/services/device-event-actions.js +1 -0
- package/addon/services/driver-actions.js +4 -13
- package/addon/services/equipment-actions.js +1 -0
- package/addon/services/fleet-actions.js +1 -0
- package/addon/services/fuel-report-actions.js +1 -0
- package/addon/services/inspection-form-actions.js +1 -0
- package/addon/services/inspection-submission-actions.js +1 -0
- package/addon/services/integrated-vendor-actions.js +1 -0
- package/addon/services/issue-actions.js +1 -0
- package/addon/services/maintenance-actions.js +1 -0
- package/addon/services/maintenance-schedule-actions.js +2 -1
- package/addon/services/order-actions.js +7 -0
- package/addon/services/order-presentation.js +129 -0
- package/addon/services/part-actions.js +1 -0
- package/addon/services/place-actions.js +1 -0
- package/addon/services/sensor-actions.js +1 -0
- package/addon/services/service-area-actions.js +1 -0
- package/addon/services/service-rate-actions.js +1 -0
- package/addon/services/telematic-actions.js +1 -0
- package/addon/services/trailer-actions.js +4 -14
- package/addon/services/vehicle-actions.js +4 -13
- package/addon/services/vendor-actions.js +1 -0
- package/addon/services/work-order-actions.js +1 -0
- package/addon/services/zone-actions.js +1 -0
- package/addon/templates/analytics/reports/index/details.hbs +1 -0
- package/addon/templates/analytics/reports/index.hbs +1 -0
- package/addon/templates/connectivity/devices/index/details.hbs +1 -0
- package/addon/templates/connectivity/devices/index.hbs +1 -0
- package/addon/templates/connectivity/events/index.hbs +1 -0
- package/addon/templates/connectivity/sensors/index/details.hbs +1 -0
- package/addon/templates/connectivity/sensors/index.hbs +1 -0
- package/addon/templates/maintenance/equipment/index/details.hbs +1 -0
- package/addon/templates/maintenance/equipment/index.hbs +2 -0
- package/addon/templates/maintenance/inspection-forms/index/details.hbs +1 -0
- package/addon/templates/maintenance/inspection-forms/index.hbs +1 -0
- package/addon/templates/maintenance/inspection-submissions/index/details.hbs +1 -0
- package/addon/templates/maintenance/inspection-submissions/index.hbs +1 -0
- package/addon/templates/maintenance/maintenances/index/details.hbs +1 -0
- package/addon/templates/maintenance/maintenances/index.hbs +1 -0
- package/addon/templates/maintenance/parts/index/details.hbs +1 -0
- package/addon/templates/maintenance/parts/index.hbs +2 -0
- package/addon/templates/maintenance/schedules/index/details.hbs +1 -0
- package/addon/templates/maintenance/schedules/index.hbs +2 -0
- package/addon/templates/maintenance/work-orders/index/details.hbs +1 -0
- package/addon/templates/maintenance/work-orders/index.hbs +1 -0
- package/addon/templates/management/contacts/customers/details.hbs +1 -0
- package/addon/templates/management/contacts/customers.hbs +1 -0
- package/addon/templates/management/contacts/index/details.hbs +1 -0
- package/addon/templates/management/contacts/index.hbs +1 -0
- package/addon/templates/management/contacts.hbs +1 -0
- package/addon/templates/management/drivers/index/details.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +2 -0
- package/addon/templates/management/fleets/index/details.hbs +1 -0
- package/addon/templates/management/fleets/index.hbs +1 -0
- package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
- package/addon/templates/management/fuel-reports/index.hbs +1 -0
- package/addon/templates/management/fuel-transactions/index.hbs +1 -0
- package/addon/templates/management/issues/index/details.hbs +1 -0
- package/addon/templates/management/issues/index.hbs +1 -0
- package/addon/templates/management/places/index/details.hbs +1 -0
- package/addon/templates/management/places/index.hbs +1 -0
- package/addon/templates/management/trailers/index/details.hbs +1 -0
- package/addon/templates/management/trailers/index.hbs +2 -0
- package/addon/templates/management/vehicles/index/details.hbs +1 -0
- package/addon/templates/management/vehicles/index.hbs +2 -0
- package/addon/templates/management/vendors/index/details.hbs +1 -0
- package/addon/templates/management/vendors/index.hbs +2 -0
- package/addon/templates/management/vendors/integrated.hbs +1 -0
- package/addon/templates/operations/orders/index/details.hbs +1 -0
- package/addon/templates/operations/orders/index.hbs +1 -0
- package/addon/templates/operations/service-rates/index/details.hbs +1 -0
- package/addon/templates/operations/service-rates/index.hbs +1 -0
- package/addon/templates/settings/telematics.hbs +70 -0
- package/addon/utils/normalize-order-config-flow.js +6 -1
- package/app/components/admin/telematics-settings.js +1 -0
- package/app/components/map/marker-card/driver.js +1 -0
- package/app/components/map/marker-card/vehicle.js +1 -0
- package/app/controllers/settings/telematics.js +1 -0
- package/app/routes/settings/telematics.js +1 -0
- package/app/services/order-presentation.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/server/config/telemetry.php +12 -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/src/Auth/Schemas/FleetOps.php +104 -5
- package/server/src/Console/Commands/DrainTelematicInbox.php +3 -13
- package/server/src/Console/Commands/ProcessOperationalAlerts.php +3 -3
- package/server/src/Console/Commands/PruneTelematicsData.php +318 -0
- 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 +11 -0
- package/server/src/Http/Controllers/Internal/v1/CustomerController.php +14 -0
- 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 +22 -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 +56 -4
- 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/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/Models/Order.php +35 -3
- package/server/src/Models/OrderConfig.php +129 -0
- package/server/src/Models/TrackingNumber.php +8 -4
- package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +9 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +3 -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/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 +9 -1
- package/server/tests/AnalyticsRoutesTest.php +29 -2
- package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +16 -1
- package/server/tests/Feature/Http/Api/TelematicsRetentionIndexMigrationTest.php +115 -0
- package/server/tests/Feature/Http/Internal/OrderControllerActivityFlowsTest.php +72 -0
- package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +26 -0
- package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +71 -0
- package/server/tests/Feature/Http/Internal/TelematicsStorageDeadlinesTest.php +119 -0
- package/server/tests/InternalImportExportControllerContractsTest.php +5 -8
- package/server/tests/NavigatorControllerContractsTest.php +36 -4
- package/server/tests/NotificationAndMailContractsTest.php +31 -0
- package/server/tests/ObserverContractsTest.php +1 -1
- package/server/tests/OrchestratorConsumableApiTest.php +42 -0
- package/server/tests/OrderConfigLifecycleTest.php +120 -0
- package/server/tests/ProviderContractsTest.php +10 -0
- package/server/tests/ReportSchemaContractsTest.php +120 -6
- 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/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +2 -2
- package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +353 -0
- package/server/tests/Unit/Events/OrderDispatchFailedTest.php +2 -1
- package/server/tests/Unit/Jobs/DispatchTelematicsRetentionJobsTest.php +114 -0
- package/server/tests/Unit/Jobs/PruneTelematicsDataJobTest.php +60 -0
- package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +20 -0
- 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/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 +108 -0
|
@@ -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\Exceptions\FleetbaseRequestValidationException;
|
|
6
7
|
use Fleetbase\FleetOps\Events\EntityActivityChanged;
|
|
7
8
|
use Fleetbase\FleetOps\Events\EntityCompleted;
|
|
@@ -53,6 +54,20 @@ use Maatwebsite\Excel\Facades\Excel;
|
|
|
53
54
|
class OrderController extends FleetOpsController
|
|
54
55
|
{
|
|
55
56
|
use ResolvesOrderServiceStops;
|
|
57
|
+
/**
|
|
58
|
+
* Permissions for methods AuthorizationGuard cannot map to a schema action (see FleetOpsController).
|
|
59
|
+
*
|
|
60
|
+
* @var array<string, string|string[]>
|
|
61
|
+
*/
|
|
62
|
+
protected array $methodPermissions = [
|
|
63
|
+
'editOrderRoute' => 'update-route-for order',
|
|
64
|
+
'importFromFiles' => 'import order',
|
|
65
|
+
'bulkCancel' => 'cancel order',
|
|
66
|
+
'bulkDispatch' => 'dispatch order',
|
|
67
|
+
'bulkAssignDriver' => 'assign-driver-for order',
|
|
68
|
+
'dispatchOrder' => 'dispatch order',
|
|
69
|
+
'scheduleOrder' => 'schedule order',
|
|
70
|
+
];
|
|
56
71
|
|
|
57
72
|
/**
|
|
58
73
|
* The resource to query.
|
|
@@ -148,8 +163,15 @@ class OrderController extends FleetOpsController
|
|
|
148
163
|
$input['type'] = 'transport';
|
|
149
164
|
}
|
|
150
165
|
|
|
166
|
+
// a configured lifecycle always starts at its initial activity; otherwise
|
|
151
167
|
// if no status is set its default to `created`
|
|
152
|
-
if (
|
|
168
|
+
if ($resolvedOrderConfig && $resolvedOrderConfig->hasConfiguredLifecycle()) {
|
|
169
|
+
$input['status'] = $resolvedOrderConfig->getInitialStatusCode();
|
|
170
|
+
if (!$resolvedOrderConfig->allowsDispatch()) {
|
|
171
|
+
$input['dispatched'] = false;
|
|
172
|
+
$input['adhoc'] = false;
|
|
173
|
+
}
|
|
174
|
+
} elseif (!isset($input['status'])) {
|
|
153
175
|
$input['status'] = 'created';
|
|
154
176
|
}
|
|
155
177
|
|
|
@@ -170,11 +192,13 @@ class OrderController extends FleetOpsController
|
|
|
170
192
|
$entities = Utils::get($input, 'payload.entities');
|
|
171
193
|
$uploads = Utils::get($input, 'files', []);
|
|
172
194
|
$customFieldValues = Utils::get($input, 'custom_field_values', []);
|
|
195
|
+
$orderConfig = $order->config();
|
|
196
|
+
$hasLifecycle = $orderConfig && $orderConfig->hasConfiguredLifecycle();
|
|
173
197
|
|
|
174
198
|
// save order route & payload with request input
|
|
175
199
|
$order
|
|
176
200
|
->setRoute($route)
|
|
177
|
-
->setStatus('created', false)
|
|
201
|
+
->setStatus($hasLifecycle ? $orderConfig->getInitialStatusCode() : 'created', false)
|
|
178
202
|
->insertPayload($payload)
|
|
179
203
|
->insertWaypoints($waypoints)
|
|
180
204
|
->insertEntities($entities);
|
|
@@ -197,8 +221,12 @@ class OrderController extends FleetOpsController
|
|
|
197
221
|
);
|
|
198
222
|
}
|
|
199
223
|
|
|
200
|
-
// Check dispatch flag with backward compatibility (default true)
|
|
224
|
+
// Check dispatch flag with backward compatibility (default true).
|
|
225
|
+
// Configs with a lifecycle that disables dispatch are never dispatched.
|
|
201
226
|
$shouldDispatch = isset($input['dispatched']) ? (bool) $input['dispatched'] : true;
|
|
227
|
+
if ($hasLifecycle && !$orderConfig->allowsDispatch()) {
|
|
228
|
+
$shouldDispatch = false;
|
|
229
|
+
}
|
|
202
230
|
|
|
203
231
|
// dispatch if flagged true, otherwise ensure order stays in created state
|
|
204
232
|
if ($shouldDispatch) {
|
|
@@ -267,6 +295,7 @@ class OrderController extends FleetOpsController
|
|
|
267
295
|
*
|
|
268
296
|
* @return Response
|
|
269
297
|
*/
|
|
298
|
+
#[SkipAuthorizationCheck]
|
|
270
299
|
public function editOrderRoute(string $id, Request $request)
|
|
271
300
|
{
|
|
272
301
|
$pickup = $request->input('pickup');
|
|
@@ -337,6 +366,7 @@ class OrderController extends FleetOpsController
|
|
|
337
366
|
*
|
|
338
367
|
* @return \Illuminate\Http\Response
|
|
339
368
|
*/
|
|
369
|
+
#[SkipAuthorizationCheck]
|
|
340
370
|
public function importFromFiles(Request $request)
|
|
341
371
|
{
|
|
342
372
|
$info = Utils::lookupIp();
|
|
@@ -409,6 +439,7 @@ class OrderController extends FleetOpsController
|
|
|
409
439
|
*
|
|
410
440
|
* @return \Illuminate\Http\Response
|
|
411
441
|
*/
|
|
442
|
+
#[SkipAuthorizationCheck]
|
|
412
443
|
public function bulkCancel(Request $request)
|
|
413
444
|
{
|
|
414
445
|
$request->validate([
|
|
@@ -454,6 +485,7 @@ class OrderController extends FleetOpsController
|
|
|
454
485
|
*
|
|
455
486
|
* @return \Illuminate\Http\Response
|
|
456
487
|
*/
|
|
488
|
+
#[SkipAuthorizationCheck]
|
|
457
489
|
public function bulkDispatch(BulkDispatchRequest $request)
|
|
458
490
|
{
|
|
459
491
|
/** @var Order */
|
|
@@ -464,7 +496,7 @@ class OrderController extends FleetOpsController
|
|
|
464
496
|
$successful = [];
|
|
465
497
|
|
|
466
498
|
foreach ($orders as $order) {
|
|
467
|
-
if ($order->status !== 'created') {
|
|
499
|
+
if ($order->status !== 'created' || $order->config()?->allowsDispatch() === false) {
|
|
468
500
|
$failed[] = $order->uuid;
|
|
469
501
|
continue;
|
|
470
502
|
}
|
|
@@ -502,6 +534,7 @@ class OrderController extends FleetOpsController
|
|
|
502
534
|
*
|
|
503
535
|
* @return \Illuminate\Http\Response
|
|
504
536
|
*/
|
|
537
|
+
#[SkipAuthorizationCheck]
|
|
505
538
|
public function bulkAssignDriver(Request $request)
|
|
506
539
|
{
|
|
507
540
|
// Validate Inputs
|
|
@@ -578,6 +611,7 @@ class OrderController extends FleetOpsController
|
|
|
578
611
|
*
|
|
579
612
|
* @return \Illuminate\Http\Response
|
|
580
613
|
*/
|
|
614
|
+
#[SkipAuthorizationCheck]
|
|
581
615
|
public function dispatchOrder(Request $request)
|
|
582
616
|
{
|
|
583
617
|
/**
|
|
@@ -594,6 +628,10 @@ class OrderController extends FleetOpsController
|
|
|
594
628
|
return $this->errorResponse('No order config found for dispatch.');
|
|
595
629
|
}
|
|
596
630
|
|
|
631
|
+
if (!$order->config()->allowsDispatch()) {
|
|
632
|
+
return $this->errorResponse('Orders of this type are not dispatched.');
|
|
633
|
+
}
|
|
634
|
+
|
|
597
635
|
if (!$order->hasDriverAssigned && !$order->adhoc) {
|
|
598
636
|
return $this->errorResponse('No driver assigned to dispatch!');
|
|
599
637
|
}
|
|
@@ -879,6 +917,19 @@ class OrderController extends FleetOpsController
|
|
|
879
917
|
$activity = $request->array('activity');
|
|
880
918
|
$activity = new Activity($activity, $order->getConfigFlow());
|
|
881
919
|
|
|
920
|
+
// Configs with strict transitions only accept a configured child of the current
|
|
921
|
+
// activity, and the server-side activity definition replaces the client payload.
|
|
922
|
+
$orderConfig = $order->config();
|
|
923
|
+
if ($orderConfig && $orderConfig->hasStrictTransitions()) {
|
|
924
|
+
$targetCode = $activity->get('code');
|
|
925
|
+
$configured = $targetCode ? $orderConfig->getActivityByCode($targetCode) : null;
|
|
926
|
+
if (!$configured || !$orderConfig->canTransition($order->status, $targetCode)) {
|
|
927
|
+
return response()->error('This activity is not a permitted next step for the order.', 422);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
$activity = $configured;
|
|
931
|
+
}
|
|
932
|
+
|
|
882
933
|
$requiresProof = Utils::isActivity($activity)
|
|
883
934
|
&& ($activity->get('require_pod') || ($activity->completesOrder() && $order->pod_required));
|
|
884
935
|
if ($requiresProof && !$proof && !$bypassProof) {
|
|
@@ -1906,6 +1957,7 @@ class OrderController extends FleetOpsController
|
|
|
1906
1957
|
*
|
|
1907
1958
|
* @return \Illuminate\Http\Response
|
|
1908
1959
|
*/
|
|
1960
|
+
#[SkipAuthorizationCheck]
|
|
1909
1961
|
public function scheduleOrder(Request $request)
|
|
1910
1962
|
{
|
|
1911
1963
|
$orderId = $request->input('order');
|
|
@@ -4,6 +4,7 @@ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
|
|
|
4
4
|
|
|
5
5
|
use Fleetbase\FleetOps\Models\PurchaseRate;
|
|
6
6
|
use Fleetbase\FleetOps\Support\Payment;
|
|
7
|
+
use Fleetbase\FleetOps\Traits\AuthorizesMethods;
|
|
7
8
|
use Fleetbase\Http\Controllers\Controller;
|
|
8
9
|
use Fleetbase\Http\Resources\FleetbaseResource;
|
|
9
10
|
use Fleetbase\Support\Auth;
|
|
@@ -12,6 +13,18 @@ use Illuminate\Support\Str;
|
|
|
12
13
|
|
|
13
14
|
class PaymentController extends Controller
|
|
14
15
|
{
|
|
16
|
+
use AuthorizesMethods;
|
|
17
|
+
|
|
18
|
+
public function __construct()
|
|
19
|
+
{
|
|
20
|
+
$this->authorizeMethods([
|
|
21
|
+
'hasStripeConnectAccount' => 'view payments',
|
|
22
|
+
'getStripeAccount' => 'onboard payments',
|
|
23
|
+
'getStripeAccountSession' => 'onboard payments',
|
|
24
|
+
'getCompanyReceivedPayments' => 'view payments',
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
|
|
15
28
|
/**
|
|
16
29
|
* Checks if the currently authenticated company has an associated Stripe Connect account.
|
|
17
30
|
*
|
|
@@ -19,6 +19,7 @@ use Fleetbase\FleetOps\Support\Radar\RadarAgenda;
|
|
|
19
19
|
use Fleetbase\FleetOps\Support\Radar\RadarBriefing;
|
|
20
20
|
use Fleetbase\FleetOps\Support\Radar\RadarItemState;
|
|
21
21
|
use Fleetbase\FleetOps\Support\Radar\RadarRules;
|
|
22
|
+
use Fleetbase\FleetOps\Traits\AuthorizesMethods;
|
|
22
23
|
use Fleetbase\Http\Controllers\Controller;
|
|
23
24
|
use Fleetbase\Models\Alert;
|
|
24
25
|
use Fleetbase\Models\CompanyUser;
|
|
@@ -42,6 +43,24 @@ use Illuminate\Support\Carbon;
|
|
|
42
43
|
*/
|
|
43
44
|
class RadarController extends Controller
|
|
44
45
|
{
|
|
46
|
+
use AuthorizesMethods;
|
|
47
|
+
|
|
48
|
+
public function __construct()
|
|
49
|
+
{
|
|
50
|
+
$this->authorizeMethods([
|
|
51
|
+
'extendShift' => ['update driver', 'update vehicle'],
|
|
52
|
+
'acknowledge' => ['update driver', 'update vehicle'],
|
|
53
|
+
'snooze' => ['update driver', 'update vehicle'],
|
|
54
|
+
'wake' => ['update driver', 'update vehicle'],
|
|
55
|
+
'assign' => ['update driver', 'update vehicle'],
|
|
56
|
+
'plan' => ['update driver', 'update vehicle'],
|
|
57
|
+
'resolve' => ['update driver', 'update vehicle'],
|
|
58
|
+
'bulk' => ['update driver', 'update vehicle'],
|
|
59
|
+
'storeNotice' => ['update driver', 'update vehicle'],
|
|
60
|
+
'destroyNotice' => ['update driver', 'update vehicle'],
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
|
|
45
64
|
public const RESOLVED_WINDOW_DAYS = 7;
|
|
46
65
|
public const SNOOZE_MAX_DAYS = 90;
|
|
47
66
|
|
|
@@ -7,6 +7,7 @@ use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
|
|
|
7
7
|
use Fleetbase\FleetOps\Models\ServiceArea;
|
|
8
8
|
use Fleetbase\Http\Requests\ExportRequest;
|
|
9
9
|
use Illuminate\Http\Request;
|
|
10
|
+
use Illuminate\Support\Arr;
|
|
10
11
|
use Illuminate\Support\Str;
|
|
11
12
|
use Maatwebsite\Excel\Facades\Excel;
|
|
12
13
|
|
|
@@ -21,11 +22,16 @@ class ServiceAreaController extends FleetOpsController
|
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Handle post save transactions.
|
|
25
|
+
*
|
|
26
|
+
* Reads the custom field values from the payload the base controller already extracted
|
|
27
|
+
* rather than from the raw request: Ember Data sends the resource under a camelCase root
|
|
28
|
+
* (`serviceArea`), so `$request->array('service_area.custom_field_values')` was always empty and no
|
|
29
|
+
* custom field value was ever persisted for this resource.
|
|
24
30
|
*/
|
|
25
|
-
public function afterSave(Request $request, ServiceArea $serviceArea)
|
|
31
|
+
public function afterSave(Request $request, ServiceArea $serviceArea, array $input = [])
|
|
26
32
|
{
|
|
27
|
-
$customFieldValues = $
|
|
28
|
-
if ($customFieldValues) {
|
|
33
|
+
$customFieldValues = Arr::get($input, 'custom_field_values');
|
|
34
|
+
if (is_array($customFieldValues) && $customFieldValues) {
|
|
29
35
|
$serviceArea->syncCustomFieldValues($customFieldValues);
|
|
30
36
|
}
|
|
31
37
|
}
|