@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.
Files changed (294) hide show
  1. package/RELEASE.md +44 -9
  2. package/addon/components/admin/telematics-settings.hbs +143 -0
  3. package/addon/components/admin/telematics-settings.js +145 -0
  4. package/addon/components/contact/form.hbs +13 -2
  5. package/addon/components/customer/details.hbs +17 -17
  6. package/addon/components/customer/form.hbs +13 -2
  7. package/addon/components/customer/form.js +0 -56
  8. package/addon/components/driver/details.hbs +13 -19
  9. package/addon/components/driver/form.hbs +20 -35
  10. package/addon/components/driver/form.js +0 -58
  11. package/addon/components/fuel-integration/hub.hbs +1 -1
  12. package/addon/components/layout/fleet-ops-sidebar.js +37 -17
  13. package/addon/components/map/leaflet-live-map.hbs +4 -242
  14. package/addon/components/map/leaflet-live-map.js +2 -1
  15. package/addon/components/map/marker-card/driver.hbs +57 -0
  16. package/addon/components/map/marker-card/driver.js +3 -0
  17. package/addon/components/map/marker-card/vehicle.hbs +78 -0
  18. package/addon/components/map/marker-card/vehicle.js +3 -0
  19. package/addon/components/modals/driver-form.hbs +2 -2
  20. package/addon/components/modals/reset-profile-credentials.hbs +23 -0
  21. package/addon/components/modals/reset-profile-credentials.js +70 -0
  22. package/addon/components/profile-identity-hint.hbs +13 -0
  23. package/addon/components/profile-identity-hint.js +49 -0
  24. package/addon/components/telematic/hub.hbs +1 -1
  25. package/addon/components/widget/live-fleet.hbs +8 -40
  26. package/addon/controllers/analytics/reports/index.js +5 -0
  27. package/addon/controllers/connectivity/devices/index.js +4 -0
  28. package/addon/controllers/connectivity/fuel-providers/index.js +6 -4
  29. package/addon/controllers/connectivity/sensors/index.js +4 -0
  30. package/addon/controllers/connectivity/telematics/index.js +4 -0
  31. package/addon/controllers/maintenance/equipment/index.js +11 -4
  32. package/addon/controllers/maintenance/inspection-forms/index.js +2 -2
  33. package/addon/controllers/maintenance/inspection-submissions/index.js +8 -2
  34. package/addon/controllers/maintenance/maintenances/index.js +4 -0
  35. package/addon/controllers/maintenance/parts/index.js +11 -4
  36. package/addon/controllers/maintenance/schedules/index.js +17 -4
  37. package/addon/controllers/maintenance/work-orders/index.js +11 -4
  38. package/addon/controllers/management/contacts/index.js +4 -0
  39. package/addon/controllers/management/drivers/index.js +8 -0
  40. package/addon/controllers/management/fleets/index.js +4 -0
  41. package/addon/controllers/management/fuel-reports/index.js +4 -0
  42. package/addon/controllers/management/fuel-transactions/index.js +9 -7
  43. package/addon/controllers/management/issues/index.js +4 -0
  44. package/addon/controllers/management/places/index.js +4 -0
  45. package/addon/controllers/management/vehicles/index.js +4 -0
  46. package/addon/controllers/management/vendors/index.js +4 -0
  47. package/addon/controllers/operations/orders/index/details.js +30 -1
  48. package/addon/controllers/operations/orders/index.js +7 -0
  49. package/addon/controllers/operations/service-rates/index.js +3 -0
  50. package/addon/controllers/settings/index.js +13 -0
  51. package/addon/controllers/settings/telematics.js +113 -0
  52. package/addon/extension.js +42 -8
  53. package/addon/routes/analytics/index.js +14 -1
  54. package/addon/routes/analytics/reports/index/details.js +1 -1
  55. package/addon/routes/analytics/reports/index/edit.js +1 -1
  56. package/addon/routes/analytics/reports/index/new.js +14 -1
  57. package/addon/routes/analytics/reports.js +14 -1
  58. package/addon/routes/connectivity/devices/index/new.js +14 -1
  59. package/addon/routes/connectivity/devices.js +14 -1
  60. package/addon/routes/connectivity/events.js +14 -1
  61. package/addon/routes/connectivity/fuel-providers/details/transactions.js +12 -0
  62. package/addon/routes/connectivity/fuel-providers/details.js +9 -0
  63. package/addon/routes/connectivity/fuel-providers/edit.js +9 -0
  64. package/addon/routes/connectivity/fuel-providers/new.js +14 -1
  65. package/addon/routes/connectivity/fuel-providers.js +14 -1
  66. package/addon/routes/connectivity/sensors/index/new.js +14 -1
  67. package/addon/routes/connectivity/sensors.js +14 -1
  68. package/addon/routes/connectivity/telematics/new.js +14 -1
  69. package/addon/routes/connectivity/telematics.js +14 -1
  70. package/addon/routes/connectivity/tracking.js +14 -1
  71. package/addon/routes/maintenance/equipment/index/details.js +2 -2
  72. package/addon/routes/maintenance/equipment/index/edit.js +2 -2
  73. package/addon/routes/maintenance/equipment/index/new.js +14 -1
  74. package/addon/routes/maintenance/equipment.js +14 -1
  75. package/addon/routes/maintenance/index.js +14 -1
  76. package/addon/routes/maintenance/inspection-forms/index/details.js +10 -1
  77. package/addon/routes/maintenance/inspection-forms/index/edit.js +10 -1
  78. package/addon/routes/maintenance/inspection-forms/index/new.js +14 -1
  79. package/addon/routes/maintenance/inspection-forms.js +14 -1
  80. package/addon/routes/maintenance/inspection-submissions/index/details.js +10 -1
  81. package/addon/routes/maintenance/inspection-submissions/index/edit.js +10 -1
  82. package/addon/routes/maintenance/inspection-submissions/index/new.js +14 -1
  83. package/addon/routes/maintenance/inspection-submissions.js +14 -1
  84. package/addon/routes/maintenance/maintenances/index/details.js +2 -2
  85. package/addon/routes/maintenance/maintenances/index/edit.js +2 -2
  86. package/addon/routes/maintenance/maintenances/index/new.js +14 -1
  87. package/addon/routes/maintenance/maintenances.js +14 -1
  88. package/addon/routes/maintenance/parts/index/details.js +2 -2
  89. package/addon/routes/maintenance/parts/index/edit.js +2 -2
  90. package/addon/routes/maintenance/parts/index/new.js +14 -1
  91. package/addon/routes/maintenance/parts.js +14 -1
  92. package/addon/routes/maintenance/schedules/index/details.js +2 -2
  93. package/addon/routes/maintenance/schedules/index/edit.js +2 -2
  94. package/addon/routes/maintenance/schedules/index/new.js +15 -1
  95. package/addon/routes/maintenance/schedules.js +15 -1
  96. package/addon/routes/maintenance/work-orders/index/details.js +2 -2
  97. package/addon/routes/maintenance/work-orders/index/edit.js +2 -2
  98. package/addon/routes/maintenance/work-orders/index/new.js +14 -1
  99. package/addon/routes/maintenance/work-orders.js +14 -1
  100. package/addon/routes/management/fuel-transactions/index/details.js +9 -0
  101. package/addon/routes/management/fuel-transactions.js +14 -1
  102. package/addon/routes/management/index.js +13 -0
  103. package/addon/routes/management/trailers.js +16 -0
  104. package/addon/routes/management/vendors/integrated/details.js +14 -1
  105. package/addon/routes/management/vendors/integrated/edit.js +14 -1
  106. package/addon/routes/management/vendors/integrated/new.js +14 -1
  107. package/addon/routes/management/vendors/integrated.js +14 -1
  108. package/addon/routes/operations/orders.js +40 -1
  109. package/addon/routes/operations/routes/index/details.js +14 -1
  110. package/addon/routes/operations/routes/index/new.js +13 -0
  111. package/addon/routes/operations/routes.js +14 -1
  112. package/addon/routes/operations/service-rates/index/new.js +11 -0
  113. package/addon/routes/operations/service-rates.js +14 -1
  114. package/addon/routes/settings/avatars.js +14 -1
  115. package/addon/routes/settings/custom-fields.js +14 -1
  116. package/addon/routes/settings/map.js +14 -1
  117. package/addon/routes/settings/notifications.js +11 -0
  118. package/addon/routes/settings/orchestrator.js +1 -1
  119. package/addon/routes/settings/payments/index.js +1 -1
  120. package/addon/routes/settings/routing.js +14 -1
  121. package/addon/routes/settings/scheduling.js +14 -1
  122. package/addon/routes/settings/telematics.js +21 -0
  123. package/addon/routes/virtual.js +11 -0
  124. package/addon/routes.js +1 -0
  125. package/addon/services/contact-actions.js +50 -89
  126. package/addon/services/driver-actions.js +98 -0
  127. package/addon/templates/settings/telematics.hbs +70 -0
  128. package/addon/utils/profile-login-actions.js +172 -0
  129. package/app/components/admin/telematics-settings.js +1 -0
  130. package/app/components/{modals/reset-customer-credentials.js → map/marker-card/driver.js} +1 -1
  131. package/app/components/map/marker-card/vehicle.js +1 -0
  132. package/app/components/modals/reset-profile-credentials.js +1 -0
  133. package/app/components/profile-identity-hint.js +1 -0
  134. package/app/controllers/settings/telematics.js +1 -0
  135. package/app/routes/settings/telematics.js +1 -0
  136. package/app/templates/settings/telematics.js +1 -0
  137. package/composer.json +2 -2
  138. package/docs/AFAQY.md +1 -1
  139. package/docs/TELEMATICS_QUEUES.md +1 -1
  140. package/docs/TELEMETRY_ARCHITECTURE.md +72 -1
  141. package/extension.json +1 -1
  142. package/package.json +3 -3
  143. package/scripts/pest-bootstrap.php +12 -0
  144. package/server/config/telemetry.php +12 -0
  145. package/server/migrations/2026_09_21_000001_convert_profile_only_users_to_managed_accounts.php +132 -0
  146. package/server/migrations/2026_09_23_000001_add_retention_index_to_device_events.php +40 -0
  147. package/server/migrations/2026_09_23_000002_add_retention_index_to_positions.php +40 -0
  148. package/server/migrations/2026_09_23_000003_add_retention_index_to_telematic_sync_runs.php +40 -0
  149. package/server/resources/views/mail/driver-credentials.blade.php +21 -0
  150. package/server/src/Auth/Schemas/FleetOps.php +104 -5
  151. package/server/src/Console/Commands/DrainTelematicInbox.php +3 -13
  152. package/server/src/Console/Commands/FixCustomerCompanies.php +1 -1
  153. package/server/src/Console/Commands/FixDriverCompanies.php +1 -1
  154. package/server/src/Console/Commands/ProcessOperationalAlerts.php +3 -3
  155. package/server/src/Console/Commands/PruneTelematicsData.php +318 -0
  156. package/server/src/Exceptions/ProfileIdentityConflictException.php +34 -0
  157. package/server/src/Http/Controllers/Api/v1/CustomerController.php +14 -0
  158. package/server/src/Http/Controllers/Api/v1/DriverController.php +56 -39
  159. package/server/src/Http/Controllers/Api/v1/OrchestrationController.php +9 -0
  160. package/server/src/Http/Controllers/FleetOpsController.php +21 -0
  161. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +11 -0
  162. package/server/src/Http/Controllers/Internal/v1/ContactController.php +16 -17
  163. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +54 -4
  164. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +13 -0
  165. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +11 -0
  166. package/server/src/Http/Controllers/Internal/v1/DriverController.php +204 -162
  167. package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +47 -0
  168. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +13 -0
  169. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +15 -0
  170. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +9 -3
  171. package/server/src/Http/Controllers/Internal/v1/InspectionFormController.php +15 -0
  172. package/server/src/Http/Controllers/Internal/v1/LiveController.php +16 -0
  173. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +15 -0
  174. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +15 -0
  175. package/server/src/Http/Controllers/Internal/v1/ManifestController.php +15 -0
  176. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +11 -0
  177. package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +42 -1
  178. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +12 -0
  179. package/server/src/Http/Controllers/Internal/v1/OrderController.php +178 -27
  180. package/server/src/Http/Controllers/Internal/v1/PaymentController.php +13 -0
  181. package/server/src/Http/Controllers/Internal/v1/RadarController.php +19 -0
  182. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +9 -3
  183. package/server/src/Http/Controllers/Internal/v1/SettingController.php +465 -14
  184. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +21 -0
  185. package/server/src/Http/Controllers/Internal/v1/TrailerController.php +21 -0
  186. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +21 -0
  187. package/server/src/Http/Controllers/Internal/v1/VendorController.php +17 -0
  188. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +11 -0
  189. package/server/src/Http/Requests/CreateDriverRequest.php +6 -2
  190. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +9 -18
  191. package/server/src/Http/Resources/v1/Contact.php +3 -0
  192. package/server/src/Http/Resources/v1/Driver.php +3 -0
  193. package/server/src/Jobs/DispatchTelematicsRetentionJobs.php +70 -0
  194. package/server/src/Jobs/PruneTelematicsDataJob.php +74 -0
  195. package/server/src/Listeners/NotifyDriverOnShiftChange.php +3 -3
  196. package/server/src/Mail/CustomerCredentialsMail.php +1 -1
  197. package/server/src/Mail/DriverCredentialsMail.php +55 -0
  198. package/server/src/Models/Contact.php +55 -90
  199. package/server/src/Models/Sensor.php +3 -5
  200. package/server/src/Observers/ContactObserver.php +2 -22
  201. package/server/src/Observers/DriverObserver.php +5 -6
  202. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +9 -1
  203. package/server/src/Providers/FleetOpsServiceProvider.php +18 -0
  204. package/server/src/Support/Ai/Capabilities/AbstractFleetOpsAICapability.php +62 -5
  205. package/server/src/Support/Ai/Capabilities/AssetStatusCapability.php +24 -5
  206. package/server/src/Support/Ai/Capabilities/CreateOrderPreviewCapability.php +6 -2
  207. package/server/src/Support/Ai/Capabilities/OrderInsightsCapability.php +40 -7
  208. package/server/src/Support/Ai/Capabilities/SearchResourcesCapability.php +86 -24
  209. package/server/src/Support/Ai/FleetOpsAiConsoleCommands.php +122 -0
  210. package/server/src/Support/Ai/Tools/CreateOrderTool.php +86 -0
  211. package/server/src/Support/Ai/Tools/ImportOrdersTool.php +53 -0
  212. package/server/src/Support/Ai/Tools/OptimizeOrderRouteTool.php +70 -0
  213. package/server/src/Support/Ai/Tools/SearchResourcesTool.php +73 -0
  214. package/server/src/Support/Analytics/LiveFleet.php +18 -2
  215. package/server/src/Support/Authorization.php +103 -0
  216. package/server/src/Support/Database/TableIndexes.php +66 -0
  217. package/server/src/Support/OrderTracker.php +2 -2
  218. package/server/src/Support/ProfileAccountManager.php +405 -0
  219. package/server/src/Support/Reporting/FleetOpsReportSchema.php +476 -116
  220. package/server/src/Support/Telematics/Retention/RetentionPolicy.php +300 -0
  221. package/server/src/Support/Telematics/Retention/TelemetryActivity.php +40 -0
  222. package/server/src/Support/Telematics/TelematicService.php +12 -2
  223. package/server/src/Support/Telematics/Telemetry/Ingestor.php +4 -2
  224. package/server/src/Tracking/TrackingIntelligenceService.php +1 -1
  225. package/server/src/Tracking/TrackingOptions.php +2 -2
  226. package/server/src/Traits/AuthorizesMethods.php +37 -0
  227. package/server/src/routes.php +14 -1
  228. package/server/tests/AiOperationalQueryCapabilityTest.php +1 -0
  229. package/server/tests/AnalyticsRoutesTest.php +29 -2
  230. package/server/tests/ApiCustomerControllerContractsTest.php +21 -0
  231. package/server/tests/ApiDriverControllerContractsTest.php +102 -20
  232. package/server/tests/CommandContractsTest.php +4 -4
  233. package/server/tests/ControllerHelperContractsTest.php +3 -11
  234. package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +21 -1
  235. package/server/tests/Feature/Http/Api/DriverControllerAuthFlowsTest.php +36 -0
  236. package/server/tests/Feature/Http/Api/DriverControllerSessionHelpersTest.php +19 -6
  237. package/server/tests/Feature/Http/Api/ProfileOnlyUserConversionMigrationTest.php +201 -0
  238. package/server/tests/Feature/Http/Api/TelematicsRetentionIndexMigrationTest.php +115 -0
  239. package/server/tests/Feature/Http/Internal/ContactControllerEndpointsTest.php +6 -4
  240. package/server/tests/Feature/Http/Internal/CustomerControllerCredentialsTest.php +6 -2
  241. package/server/tests/Feature/Http/Internal/DriverControllerContractsTest.php +23 -0
  242. package/server/tests/Feature/Http/Internal/DriverControllerCreateRecordTest.php +42 -17
  243. package/server/tests/Feature/Http/Internal/DriverControllerExistingUserAdoptionTest.php +168 -277
  244. package/server/tests/Feature/Http/Internal/DriverControllerLoginManagementTest.php +716 -0
  245. package/server/tests/Feature/Http/Internal/OrderControllerContractsTest.php +10 -3
  246. package/server/tests/Feature/Http/Internal/OrderControllerImportFromFilesTest.php +18 -0
  247. package/server/tests/Feature/Http/Internal/OrderControllerTenantScopingTest.php +411 -0
  248. package/server/tests/Feature/Http/Internal/OrderControllerUpstreamNotFoundTest.php +8 -20
  249. package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +71 -0
  250. package/server/tests/Feature/Http/Internal/TelematicsStorageDeadlinesTest.php +119 -0
  251. package/server/tests/InternalCustomerControllerContractsTest.php +32 -1
  252. package/server/tests/InternalImportExportControllerContractsTest.php +5 -8
  253. package/server/tests/ModelAccessorContractsTest.php +82 -20
  254. package/server/tests/NavigatorControllerContractsTest.php +36 -4
  255. package/server/tests/NotificationAndMailContractsTest.php +31 -0
  256. package/server/tests/ObserverContractsTest.php +28 -3
  257. package/server/tests/OrchestratorConsumableApiTest.php +42 -0
  258. package/server/tests/ProviderContractsTest.php +10 -0
  259. package/server/tests/ReportSchemaContractsTest.php +120 -6
  260. package/server/tests/RequestContractsTest.php +19 -11
  261. package/server/tests/SettingControllerContractsTest.php +429 -18
  262. package/server/tests/SmallControllerContractsTest.php +8 -5
  263. package/server/tests/Support/PruneTelematicsDataProbe.php +55 -0
  264. package/server/tests/SupportJobAndAiCoverageTest.php +3 -3
  265. package/server/tests/TelematicControllerContractsTest.php +22 -4
  266. package/server/tests/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +2 -2
  267. package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +353 -0
  268. package/server/tests/Unit/Jobs/DispatchTelematicsRetentionJobsTest.php +114 -0
  269. package/server/tests/Unit/Jobs/PruneTelematicsDataJobTest.php +60 -0
  270. package/server/tests/Unit/Models/ContactCustomerUserTest.php +90 -14
  271. package/server/tests/Unit/Models/ContactTest.php +48 -5
  272. package/server/tests/Unit/Models/SensorTest.php +2 -2
  273. package/server/tests/Unit/Models/SmallModelSurfacesTest.php +31 -32
  274. package/server/tests/Unit/Observers/ObserverListenerSeamsTest.php +7 -2
  275. package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +20 -0
  276. package/server/tests/Unit/Providers/FleetOpsAiRegistrationTest.php +15 -2
  277. package/server/tests/Unit/Support/Ai/AssetStatusCapabilityQueriesTest.php +42 -0
  278. package/server/tests/Unit/Support/Ai/Capabilities/OrderInsightsCapabilityTest.php +19 -1
  279. package/server/tests/Unit/Support/Ai/Capabilities/SearchResourcesCapabilityTest.php +85 -1
  280. package/server/tests/Unit/Support/Ai/FleetOpsAiConsoleCommandsTest.php +31 -0
  281. package/server/tests/Unit/Support/Ai/Tools/FleetOpsAiToolsTest.php +246 -0
  282. package/server/tests/Unit/Support/AiCapabilityPermissionsTest.php +3 -3
  283. package/server/tests/Unit/Support/Analytics/LiveFleetTest.php +6 -0
  284. package/server/tests/Unit/Support/AuthorizationTest.php +142 -0
  285. package/server/tests/Unit/Support/MaintainableAndOperationalAlertsTest.php +12 -1
  286. package/server/tests/Unit/Support/MoreQuerySeamsTest.php +11 -2
  287. package/server/tests/Unit/Support/ProfileAccountManagerTest.php +643 -0
  288. package/server/tests/Unit/Support/Telematics/Retention/RetentionPolicyTest.php +190 -0
  289. package/server/tests/Unit/Support/Telematics/Retention/TelemetryActivityTest.php +68 -0
  290. package/server/tests/Unit/Tracking/TrackingOptionsCompanySettingsTest.php +109 -0
  291. package/translations/en-us.yaml +85 -2
  292. package/translations/uk-ua.yaml +3475 -0
  293. package/addon/components/modals/reset-customer-credentials.hbs +0 -18
  294. package/addon/components/modals/reset-customer-credentials.js +0 -55
@@ -6,6 +6,15 @@ export default class MaintenanceInspectionFormsIndexEditRoute extends Route {
6
6
  @service store;
7
7
  @service hostRouter;
8
8
  @service notifications;
9
+ @service abilities;
10
+ @service intl;
11
+
12
+ beforeModel() {
13
+ if (this.abilities.cannot('fleet-ops update inspection-form')) {
14
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-forms.index');
16
+ }
17
+ }
9
18
 
10
19
  model({ public_id }) {
11
20
  return this.store.findRecord('inspection-form', public_id);
@@ -13,6 +22,6 @@ export default class MaintenanceInspectionFormsIndexEditRoute extends Route {
13
22
 
14
23
  @action error(error) {
15
24
  this.notifications.serverError(error);
16
- return this.hostRouter.transitionTo('maintenance.inspection-forms.index');
25
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-forms.index');
17
26
  }
18
27
  }
@@ -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 MaintenanceInspectionFormsIndexNewRoute extends Route {}
4
+ export default class MaintenanceInspectionFormsIndexNewRoute 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 inspection-form')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-forms.index');
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 MaintenanceInspectionFormsRoute extends Route {}
4
+ export default class MaintenanceInspectionFormsRoute 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 inspection-form')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -6,6 +6,15 @@ export default class MaintenanceInspectionSubmissionsIndexDetailsRoute extends R
6
6
  @service store;
7
7
  @service hostRouter;
8
8
  @service notifications;
9
+ @service abilities;
10
+ @service intl;
11
+
12
+ beforeModel() {
13
+ if (this.abilities.cannot('fleet-ops view inspection-submission')) {
14
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-submissions.index');
16
+ }
17
+ }
9
18
 
10
19
  model({ public_id }) {
11
20
  return this.store.findRecord('inspection-submission', public_id);
@@ -13,6 +22,6 @@ export default class MaintenanceInspectionSubmissionsIndexDetailsRoute extends R
13
22
 
14
23
  @action error(error) {
15
24
  this.notifications.serverError(error);
16
- return this.hostRouter.transitionTo('maintenance.inspection-submissions.index');
25
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-submissions.index');
17
26
  }
18
27
  }
@@ -6,6 +6,15 @@ export default class MaintenanceInspectionSubmissionsIndexEditRoute extends Rout
6
6
  @service store;
7
7
  @service hostRouter;
8
8
  @service notifications;
9
+ @service abilities;
10
+ @service intl;
11
+
12
+ beforeModel() {
13
+ if (this.abilities.cannot('fleet-ops update inspection-submission')) {
14
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-submissions.index');
16
+ }
17
+ }
9
18
 
10
19
  model({ public_id }) {
11
20
  return this.store.findRecord('inspection-submission', public_id);
@@ -13,6 +22,6 @@ export default class MaintenanceInspectionSubmissionsIndexEditRoute extends Rout
13
22
 
14
23
  @action error(error) {
15
24
  this.notifications.serverError(error);
16
- return this.hostRouter.transitionTo('maintenance.inspection-submissions.index');
25
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-submissions.index');
17
26
  }
18
27
  }
@@ -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 MaintenanceInspectionSubmissionsIndexNewRoute extends Route {}
4
+ export default class MaintenanceInspectionSubmissionsIndexNewRoute 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 inspection-submission')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.inspection-submissions.index');
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 MaintenanceInspectionSubmissionsRoute extends Route {}
4
+ export default class MaintenanceInspectionSubmissionsRoute 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 inspection-submission')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -12,14 +12,14 @@ export default class MaintenanceMaintenancesIndexDetailsRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.maintenances.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.maintenances.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops view maintenance')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.maintenances.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.maintenances.index');
23
23
  }
24
24
  }
25
25
 
@@ -12,14 +12,14 @@ export default class MaintenanceMaintenancesIndexEditRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.maintenances.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.maintenances.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops update maintenance')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.maintenances.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.maintenances.index');
23
23
  }
24
24
  }
25
25
 
@@ -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 MaintenanceMaintenancesIndexNewRoute extends Route {}
4
+ export default class MaintenanceMaintenancesIndexNewRoute 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 maintenance')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.maintenances.index');
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 MaintenanceMaintenancesRoute extends Route {}
4
+ export default class MaintenanceMaintenancesRoute 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 maintenance')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -12,14 +12,14 @@ export default class MaintenancePartsIndexDetailsRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.parts.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.parts.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops view part')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.parts.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.parts.index');
23
23
  }
24
24
  }
25
25
 
@@ -12,14 +12,14 @@ export default class MaintenancePartsIndexEditRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.parts.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.parts.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops update part')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.parts.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.parts.index');
23
23
  }
24
24
  }
25
25
 
@@ -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 MaintenancePartsIndexNewRoute extends Route {}
4
+ export default class MaintenancePartsIndexNewRoute 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 part')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.parts.index');
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 MaintenancePartsRoute extends Route {}
4
+ export default class MaintenancePartsRoute 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 part')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -10,13 +10,13 @@ export default class MaintenanceSchedulesIndexDetailsRoute extends Route {
10
10
  @action error(error) {
11
11
  this.notifications.serverError(error);
12
12
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
13
- return this.hostRouter.transitionTo('maintenance.schedules.index');
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.schedules.index');
14
14
  }
15
15
  }
16
16
  beforeModel() {
17
17
  if (this.abilities.cannot('fleet-ops view maintenance-schedule')) {
18
18
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
19
- return this.hostRouter.transitionTo('maintenance.schedules.index');
19
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.schedules.index');
20
20
  }
21
21
  }
22
22
  model({ public_id }) {
@@ -10,13 +10,13 @@ export default class MaintenanceSchedulesIndexEditRoute extends Route {
10
10
  @action error(error) {
11
11
  this.notifications.serverError(error);
12
12
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
13
- return this.hostRouter.transitionTo('maintenance.schedules.index');
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.schedules.index');
14
14
  }
15
15
  }
16
16
  beforeModel() {
17
17
  if (this.abilities.cannot('fleet-ops update maintenance-schedule')) {
18
18
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
19
- return this.hostRouter.transitionTo('maintenance.schedules.index');
19
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.schedules.index');
20
20
  }
21
21
  }
22
22
  model({ public_id }) {
@@ -1,2 +1,16 @@
1
1
  import Route from '@ember/routing/route';
2
- export default class MaintenanceSchedulesIndexNewRoute extends Route {}
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class MaintenanceSchedulesIndexNewRoute 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 maintenance-schedule')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.schedules.index');
14
+ }
15
+ }
16
+ }
@@ -1,2 +1,16 @@
1
1
  import Route from '@ember/routing/route';
2
- export default class MaintenanceSchedulesRoute extends Route {}
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class MaintenanceSchedulesRoute 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 maintenance-schedule')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -12,14 +12,14 @@ export default class MaintenanceWorkOrdersIndexDetailsRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.work-orders.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.work-orders.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops view work-order')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.work-orders.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.work-orders.index');
23
23
  }
24
24
  }
25
25
 
@@ -12,14 +12,14 @@ export default class MaintenanceWorkOrdersIndexEditRoute extends Route {
12
12
  @action error(error) {
13
13
  this.notifications.serverError(error);
14
14
  if (typeof error.message === 'string' && error.message.endsWith('not found')) {
15
- return this.hostRouter.transitionTo('maintenance.work-orders.index');
15
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.work-orders.index');
16
16
  }
17
17
  }
18
18
 
19
19
  beforeModel() {
20
20
  if (this.abilities.cannot('fleet-ops update work-order')) {
21
21
  this.notifications.warning(this.intl.t('common.unauthorized-access'));
22
- return this.hostRouter.transitionTo('maintenance.work-orders.index');
22
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.work-orders.index');
23
23
  }
24
24
  }
25
25
 
@@ -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 MaintenanceWorkOrdersIndexNewRoute extends Route {}
4
+ export default class MaintenanceWorkOrdersIndexNewRoute 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 work-order')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.maintenance.work-orders.index');
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 MaintenanceWorkOrdersRoute extends Route {}
4
+ export default class MaintenanceWorkOrdersRoute 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 work-order')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+ }
@@ -7,6 +7,15 @@ export default class ManagementFuelTransactionsIndexDetailsRoute extends Route {
7
7
  @service store;
8
8
  @service notifications;
9
9
  @service hostRouter;
10
+ @service abilities;
11
+ @service intl;
12
+
13
+ beforeModel() {
14
+ if (this.abilities.cannot('fleet-ops view fuel-provider-transaction')) {
15
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
16
+ return this.hostRouter.transitionTo('console.fleet-ops.management.fuel-transactions.index');
17
+ }
18
+ }
10
19
 
11
20
  @action error(error) {
12
21
  this.notifications.serverError(error);
@@ -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 ManagementFuelTransactionsRoute extends Route {}
4
+ export default class ManagementFuelTransactionsRoute 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 fuel-provider-transaction')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
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 ManagementIndexRoute 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 driver')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops');
14
+ }
15
+ }
16
+
4
17
  queryParams = {
5
18
  view: { refreshModel: false },
6
19
  status: { refreshModel: false },
@@ -0,0 +1,16 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementTrailersRoute 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 trailer')) {
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 ManagementVendorsIntegratedDetailsRoute extends Route {}
4
+ export default class ManagementVendorsIntegratedDetailsRoute 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 integrated-vendor')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index');
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 ManagementVendorsIntegratedEditRoute extends Route {}
4
+ export default class ManagementVendorsIntegratedEditRoute extends Route {
5
+ @service notifications;
6
+ @service hostRouter;
7
+ @service abilities;
8
+ @service intl;
9
+
10
+ beforeModel() {
11
+ if (this.abilities.cannot('fleet-ops update integrated-vendor')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index');
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 ManagementVendorsIntegratedNewRoute extends Route {}
4
+ export default class ManagementVendorsIntegratedNewRoute 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 integrated-vendor')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index');
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 ManagementVendorsIntegratedRoute extends Route {}
4
+ export default class ManagementVendorsIntegratedRoute 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 integrated-vendor')) {
12
+ this.notifications.warning(this.intl.t('common.unauthorized-access'));
13
+ return this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index');
14
+ }
15
+ }
16
+ }
@@ -1,3 +1,42 @@
1
1
  import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
2
3
 
3
- export default class OperationsOrdersRoute extends Route {}
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
+ }