@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
|
@@ -1,3 +1,42 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Orders are the FleetOps landing route (`console.fleet-ops` resolves here), so a user
|
|
6
|
+
* without `fleet-ops list order` cannot be sent back to `console.fleet-ops` - that would
|
|
7
|
+
* loop. Instead they are forwarded to the first FleetOps area they are permitted to list,
|
|
8
|
+
* falling back to the console when there is none.
|
|
9
|
+
*/
|
|
10
|
+
const FALLBACK_ROUTES = [
|
|
11
|
+
['fleet-ops list driver', 'console.fleet-ops.management.drivers'],
|
|
12
|
+
['fleet-ops list vehicle', 'console.fleet-ops.management.vehicles'],
|
|
13
|
+
['fleet-ops list trailer', 'console.fleet-ops.management.trailers'],
|
|
14
|
+
['fleet-ops list fleet', 'console.fleet-ops.management.fleets'],
|
|
15
|
+
['fleet-ops list place', 'console.fleet-ops.management.places'],
|
|
16
|
+
['fleet-ops list contact', 'console.fleet-ops.management.contacts'],
|
|
17
|
+
['fleet-ops list vendor', 'console.fleet-ops.management.vendors'],
|
|
18
|
+
['fleet-ops list fuel-report', 'console.fleet-ops.management.fuel-reports'],
|
|
19
|
+
['fleet-ops list issue', 'console.fleet-ops.management.issues'],
|
|
20
|
+
['fleet-ops list work-order', 'console.fleet-ops.maintenance.work-orders'],
|
|
21
|
+
['fleet-ops list device', 'console.fleet-ops.connectivity.devices'],
|
|
22
|
+
['iam list report', 'console.fleet-ops.analytics.reports'],
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
export default class OperationsOrdersRoute extends Route {
|
|
26
|
+
@service notifications;
|
|
27
|
+
@service hostRouter;
|
|
28
|
+
@service abilities;
|
|
29
|
+
@service intl;
|
|
30
|
+
|
|
31
|
+
beforeModel() {
|
|
32
|
+
if (this.abilities.cannot('fleet-ops list order')) {
|
|
33
|
+
const fallback = FALLBACK_ROUTES.find(([permission]) => this.abilities.can(permission));
|
|
34
|
+
if (fallback) {
|
|
35
|
+
return this.hostRouter.transitionTo(fallback[1]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
39
|
+
return this.hostRouter.transitionTo('console');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class OperationsRoutesIndexDetailsRoute extends Route {
|
|
4
|
+
export default class OperationsRoutesIndexDetailsRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops view route')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops.operations.routes.index');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
4
|
export default class OperationsRoutesIndexNewRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops create route')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops.operations.routes.index');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
4
17
|
queryParams = {
|
|
5
18
|
selectedOrders: {
|
|
6
19
|
refreshModel: false,
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class OperationsRoutesRoute extends Route {
|
|
4
|
+
export default class OperationsRoutesRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops list route')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -3,6 +3,17 @@ import { inject as service } from '@ember/service';
|
|
|
3
3
|
|
|
4
4
|
export default class OperationsServiceRatesIndexNewRoute extends Route {
|
|
5
5
|
@service store;
|
|
6
|
+
@service notifications;
|
|
7
|
+
@service hostRouter;
|
|
8
|
+
@service abilities;
|
|
9
|
+
@service intl;
|
|
10
|
+
|
|
11
|
+
beforeModel() {
|
|
12
|
+
if (this.abilities.cannot('fleet-ops create service-rate')) {
|
|
13
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
14
|
+
return this.hostRouter.transitionTo('console.fleet-ops.operations.service-rates.index');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
6
17
|
|
|
7
18
|
async setupController(controller) {
|
|
8
19
|
super.setupController(...arguments);
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class OperationsServiceRatesRoute extends Route {
|
|
4
|
+
export default class OperationsServiceRatesRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops list service-rate')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class SettingsAvatarsRoute extends Route {
|
|
4
|
+
export default class SettingsAvatarsRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops list avatar')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class SettingsCustomFieldsRoute extends Route {
|
|
4
|
+
export default class SettingsCustomFieldsRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops list custom-field')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class SettingsMapRoute extends Route {
|
|
4
|
+
export default class SettingsMapRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops view map-settings')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -4,6 +4,17 @@ import { hash } from 'rsvp';
|
|
|
4
4
|
|
|
5
5
|
export default class SettingsNotificationsRoute extends Route {
|
|
6
6
|
@service fetch;
|
|
7
|
+
@service notifications;
|
|
8
|
+
@service hostRouter;
|
|
9
|
+
@service abilities;
|
|
10
|
+
@service intl;
|
|
11
|
+
|
|
12
|
+
beforeModel() {
|
|
13
|
+
if (this.abilities.cannot('fleet-ops view notification-settings')) {
|
|
14
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
15
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
7
18
|
|
|
8
19
|
model() {
|
|
9
20
|
return hash({
|
|
@@ -14,7 +14,7 @@ export default class SettingsOrchestratorRoute extends Route {
|
|
|
14
14
|
@service hostRouter;
|
|
15
15
|
|
|
16
16
|
beforeModel() {
|
|
17
|
-
if (this.abilities.cannot('fleet-ops
|
|
17
|
+
if (this.abilities.cannot('fleet-ops view routing-settings')) {
|
|
18
18
|
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
19
19
|
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
20
20
|
}
|
|
@@ -16,7 +16,7 @@ export default class SettingsPaymentsIndexRoute extends Route {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
beforeModel() {
|
|
19
|
-
if (this.abilities.cannot('fleet-ops
|
|
19
|
+
if (this.abilities.cannot('fleet-ops view payments')) {
|
|
20
20
|
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
21
21
|
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
22
22
|
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class SettingsRoutingRoute extends Route {
|
|
4
|
+
export default class SettingsRoutingRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops view routing-settings')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class SettingsSchedulingRoute extends Route {
|
|
4
|
+
export default class SettingsSchedulingRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops view scheduling-settings')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
|
|
4
|
+
export default class SettingsTelematicsRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops view telematics-settings')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
setupController(controller) {
|
|
18
|
+
super.setupController(...arguments);
|
|
19
|
+
controller.getSettings.perform();
|
|
20
|
+
}
|
|
21
|
+
}
|
package/addon/routes/virtual.js
CHANGED
|
@@ -4,6 +4,10 @@ import { inject as service } from '@ember/service';
|
|
|
4
4
|
export default class VirtualRoute extends Route {
|
|
5
5
|
@service universe;
|
|
6
6
|
@service('universe/menu-service') menuService;
|
|
7
|
+
@service notifications;
|
|
8
|
+
@service hostRouter;
|
|
9
|
+
@service abilities;
|
|
10
|
+
@service intl;
|
|
7
11
|
|
|
8
12
|
queryParams = {
|
|
9
13
|
view: {
|
|
@@ -15,4 +19,11 @@ export default class VirtualRoute extends Route {
|
|
|
15
19
|
const view = this.universe.getViewFromTransition(transition);
|
|
16
20
|
return this.menuService.lookupMenuItem('engine:fleet-ops', slug, view, section);
|
|
17
21
|
}
|
|
22
|
+
|
|
23
|
+
afterModel(menuItem) {
|
|
24
|
+
if (menuItem?.permission && this.abilities.cannot(menuItem.permission)) {
|
|
25
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
26
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
18
29
|
}
|
package/addon/routes.js
CHANGED
|
@@ -323,6 +323,7 @@ export default buildRoutes(function () {
|
|
|
323
323
|
this.route('map');
|
|
324
324
|
this.route('orchestrator');
|
|
325
325
|
this.route('scheduling');
|
|
326
|
+
this.route('telematics');
|
|
326
327
|
this.route('payments', function () {
|
|
327
328
|
this.route('index', { path: '/' });
|
|
328
329
|
this.route('onboard');
|
|
@@ -48,6 +48,7 @@ export default class ContactActionsService extends ResourceActionService {
|
|
|
48
48
|
},
|
|
49
49
|
view: (contact, options = {}) => {
|
|
50
50
|
return this.resourceContextPanel.open({
|
|
51
|
+
registry: this.detailsRegistry,
|
|
51
52
|
contact,
|
|
52
53
|
title: contact?.name,
|
|
53
54
|
header: 'contact/panel-header',
|
|
@@ -4,7 +4,7 @@ import { PANEL_DEFAULTS, registeredPanelTabs } from '../utils/context-panel';
|
|
|
4
4
|
export default class CustomerActionsService extends ContactActionsService {
|
|
5
5
|
constructor() {
|
|
6
6
|
super(...arguments);
|
|
7
|
-
this.initialize('contact', { defaultAttributes: { type: 'customer', status: 'active' } });
|
|
7
|
+
this.initialize('contact', { defaultAttributes: { type: 'customer', status: 'active' }, registryResource: 'customer' });
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
transition = {
|
|
@@ -38,6 +38,7 @@ export default class CustomerActionsService extends ContactActionsService {
|
|
|
38
38
|
},
|
|
39
39
|
view: (customer, options = {}) => {
|
|
40
40
|
return this.resourceContextPanel.open({
|
|
41
|
+
registry: this.detailsRegistry,
|
|
41
42
|
customer,
|
|
42
43
|
title: customer?.name,
|
|
43
44
|
header: 'contact/panel-header',
|
|
@@ -48,6 +48,7 @@ export default class DeviceActionsService extends ResourceActionService {
|
|
|
48
48
|
const service = this;
|
|
49
49
|
|
|
50
50
|
return this.resourceContextPanel.open({
|
|
51
|
+
registry: this.detailsRegistry,
|
|
51
52
|
device,
|
|
52
53
|
header: 'device/panel-header',
|
|
53
54
|
title: device.name ?? device.serial_number,
|
|
@@ -2,9 +2,7 @@ import ResourceActionService, { inject as service } from '@fleetbase/ember-core/
|
|
|
2
2
|
import leafletIcon from '@fleetbase/ember-core/utils/leaflet-icon';
|
|
3
3
|
import config from 'ember-get-config';
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
|
-
import {
|
|
6
|
-
import { dasherize } from '@ember/string';
|
|
7
|
-
import { PANEL_DEFAULTS, closePanelsThen } from '../utils/context-panel';
|
|
5
|
+
import { PANEL_DEFAULTS, closePanelsThen, registeredPanelTabs } from '../utils/context-panel';
|
|
8
6
|
import { confirmLoginAction, hasInactiveLogin, hasManagedLogin } from '../utils/profile-login-actions';
|
|
9
7
|
|
|
10
8
|
export default class DriverActionsService extends ResourceActionService {
|
|
@@ -13,16 +11,8 @@ export default class DriverActionsService extends ResourceActionService {
|
|
|
13
11
|
@service issueActions;
|
|
14
12
|
|
|
15
13
|
get registeredTabs() {
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
.map((tab) => {
|
|
19
|
-
delete tab.route;
|
|
20
|
-
if (!tab.key) {
|
|
21
|
-
tab.key = tab.id ?? dasherize(tab.label ?? tab.title);
|
|
22
|
-
}
|
|
23
|
-
return tab;
|
|
24
|
-
})
|
|
25
|
-
.filter((tab) => !tab.component);
|
|
14
|
+
// Copies, so the shared registry items keep the \`route\` their routed details view needs.
|
|
15
|
+
return registeredPanelTabs(this.menuService, 'fleet-ops:component:driver:details');
|
|
26
16
|
}
|
|
27
17
|
|
|
28
18
|
get panelTabs() {
|
|
@@ -125,6 +115,7 @@ export default class DriverActionsService extends ResourceActionService {
|
|
|
125
115
|
const service = this;
|
|
126
116
|
|
|
127
117
|
return this.resourceContextPanel.open({
|
|
118
|
+
registry: this.detailsRegistry,
|
|
128
119
|
driver,
|
|
129
120
|
header: 'driver/panel-header',
|
|
130
121
|
actionButtons: [
|
|
@@ -47,6 +47,7 @@ export default class EquipmentActionsService extends ResourceActionService {
|
|
|
47
47
|
},
|
|
48
48
|
view: (equipment, options = {}) => {
|
|
49
49
|
return this.resourceContextPanel.open({
|
|
50
|
+
registry: this.detailsRegistry,
|
|
50
51
|
equipment,
|
|
51
52
|
title: equipment?.name,
|
|
52
53
|
header: 'equipment/panel-header',
|
|
@@ -43,6 +43,7 @@ export default class FuelReportActionsService extends ResourceActionService {
|
|
|
43
43
|
},
|
|
44
44
|
view: (fuelReport, options = {}) => {
|
|
45
45
|
return this.resourceContextPanel.open({
|
|
46
|
+
registry: this.detailsRegistry,
|
|
46
47
|
fuelReport,
|
|
47
48
|
title: fuelReport?.name ?? `Fuel reported on ${fuelReport?.createdAt ?? ''}`.trim(),
|
|
48
49
|
actionButtons: [{ icon: 'pencil', permission: 'fleet-ops update fuel-report', fn: () => closePanelsThen(this.resourceContextPanel, () => this.panel.edit(fuelReport)) }],
|
|
@@ -44,6 +44,7 @@ export default class MaintenanceActionsService extends ResourceActionService {
|
|
|
44
44
|
},
|
|
45
45
|
view: (maintenance, options = {}) => {
|
|
46
46
|
return this.resourceContextPanel.open({
|
|
47
|
+
registry: this.detailsRegistry,
|
|
47
48
|
maintenance,
|
|
48
49
|
title: maintenance?.summary,
|
|
49
50
|
header: 'maintenance/panel-header',
|
|
@@ -11,7 +11,7 @@ export default class MaintenanceScheduleActionsService extends ResourceActionSer
|
|
|
11
11
|
|
|
12
12
|
constructor() {
|
|
13
13
|
super(...arguments);
|
|
14
|
-
this.initialize('maintenance-schedule');
|
|
14
|
+
this.initialize('maintenance-schedule', { registryResource: 'schedule' });
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
transition = {
|
|
@@ -43,6 +43,7 @@ export default class MaintenanceScheduleActionsService extends ResourceActionSer
|
|
|
43
43
|
},
|
|
44
44
|
view: (schedule, options = {}) => {
|
|
45
45
|
return this.resourceContextPanel.open({
|
|
46
|
+
registry: this.detailsRegistry,
|
|
46
47
|
schedule,
|
|
47
48
|
title: schedule?.name,
|
|
48
49
|
actionButtons: this.panelActionButtons(schedule, { onDeleted: () => this.resourceContextPanel.closeAll() }),
|
|
@@ -6,6 +6,7 @@ import { task } from 'ember-concurrency';
|
|
|
6
6
|
|
|
7
7
|
export default class OrderActionsService extends ResourceActionService {
|
|
8
8
|
@service store;
|
|
9
|
+
@service orderPresentation;
|
|
9
10
|
modelNamePath = 'tracking';
|
|
10
11
|
|
|
11
12
|
constructor() {
|
|
@@ -54,6 +55,7 @@ export default class OrderActionsService extends ResourceActionService {
|
|
|
54
55
|
},
|
|
55
56
|
view: (order, options = {}) => {
|
|
56
57
|
return this.resourceContextPanel.open({
|
|
58
|
+
registry: this.detailsRegistry,
|
|
57
59
|
order,
|
|
58
60
|
tabs: [
|
|
59
61
|
{
|
|
@@ -313,6 +315,11 @@ export default class OrderActionsService extends ResourceActionService {
|
|
|
313
315
|
@action editOrderDetails(order, options = {}) {
|
|
314
316
|
options = options === null ? {} : options;
|
|
315
317
|
|
|
318
|
+
// Orders with a presentation profile are edited in the profiled order form, not the fixed modal.
|
|
319
|
+
if (this.orderPresentation.profileFor(order)) {
|
|
320
|
+
return this.panel.edit(order, options);
|
|
321
|
+
}
|
|
322
|
+
|
|
316
323
|
this.modalsManager.show('modals/order-form', {
|
|
317
324
|
title: this.intl.t('order.actions.edit-order-details'),
|
|
318
325
|
acceptButtonText: this.intl.t('common.save-changes'),
|