@fleetbase/fleetops-engine 0.6.70 → 0.6.72

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 (510) hide show
  1. package/RELEASE.md +18 -47
  2. package/addon/components/admin/tracking-page-settings.hbs +56 -0
  3. package/addon/components/admin/tracking-page-settings.js +67 -0
  4. package/addon/components/device/form.hbs +2 -2
  5. package/addon/components/driver/details.hbs +1 -1
  6. package/addon/components/driver/form.hbs +1 -1
  7. package/addon/components/equipment/form.hbs +1 -1
  8. package/addon/components/layout/fleet-ops-sidebar.js +11 -3
  9. package/addon/components/maintenance/form.hbs +3 -3
  10. package/addon/components/map/google-live-map.js +2 -2
  11. package/addon/components/map/leaflet-live-map.js +45 -32
  12. package/addon/components/orchestrator/phase-builder.js +2 -1
  13. package/addon/components/orchestrator-workbench.hbs +7 -1
  14. package/addon/components/orchestrator-workbench.js +16 -2
  15. package/addon/components/order/details/activity.hbs +8 -6
  16. package/addon/components/order/details/activity.js +9 -0
  17. package/addon/components/order/details.hbs +29 -0
  18. package/addon/components/order/details.js +26 -0
  19. package/addon/components/order/form/details.hbs +30 -4
  20. package/addon/components/order/form/details.js +46 -0
  21. package/addon/components/order/form/route.hbs +5 -3
  22. package/addon/components/order/form/route.js +24 -1
  23. package/addon/components/order/form.hbs +12 -0
  24. package/addon/components/order/form.js +21 -1
  25. package/addon/components/order/kanban.js +72 -0
  26. package/addon/components/order-config-manager/activity-flow.js +45 -10
  27. package/addon/components/order-config-manager/lifecycle.hbs +250 -0
  28. package/addon/components/order-config-manager/lifecycle.js +358 -0
  29. package/addon/components/order-config-manager.js +5 -1
  30. package/addon/components/service-rate/details.hbs +1 -1
  31. package/addon/components/service-rate/form.hbs +1 -1
  32. package/addon/components/tracking-page/full-view.hbs +276 -0
  33. package/addon/components/tracking-page/full-view.js +474 -0
  34. package/addon/components/tracking-page/locale-selector.js +30 -0
  35. package/addon/components/tracking-page/map.hbs +44 -0
  36. package/addon/components/tracking-page/map.js +328 -0
  37. package/addon/components/tracking-page/order-list.hbs +35 -0
  38. package/addon/components/tracking-page/public-view.hbs +60 -0
  39. package/addon/components/tracking-page/settings-preview.hbs +21 -0
  40. package/addon/components/tracking-page/settings-preview.js +23 -0
  41. package/addon/components/tracking-page/verify-panel.hbs +109 -0
  42. package/addon/components/tracking-page.hbs +142 -0
  43. package/addon/components/tracking-page.js +564 -0
  44. package/addon/components/trailer/form.hbs +2 -2
  45. package/addon/components/vehicle/form.hbs +3 -3
  46. package/addon/components/warranty/form.hbs +2 -2
  47. package/addon/components/widget/live-fleet.js +54 -6
  48. package/addon/components/widget/proof-of-delivery.hbs +49 -0
  49. package/addon/components/widget/proof-of-delivery.js +62 -0
  50. package/addon/components/work-order/form.hbs +3 -3
  51. package/addon/controllers/analytics/reports/index.js +10 -1
  52. package/addon/controllers/connectivity/devices/index/details.js +1 -0
  53. package/addon/controllers/connectivity/devices/index.js +8 -2
  54. package/addon/controllers/connectivity/events/index.js +31 -1
  55. package/addon/controllers/connectivity/sensors/index/details.js +1 -1
  56. package/addon/controllers/connectivity/sensors/index.js +37 -1
  57. package/addon/controllers/maintenance/equipment/index/details.js +2 -2
  58. package/addon/controllers/maintenance/equipment/index.js +28 -9
  59. package/addon/controllers/maintenance/inspection-forms/index.js +32 -12
  60. package/addon/controllers/maintenance/inspection-submissions/index/details.js +2 -1
  61. package/addon/controllers/maintenance/inspection-submissions/index.js +49 -9
  62. package/addon/controllers/maintenance/maintenances/index/details.js +2 -0
  63. package/addon/controllers/maintenance/maintenances/index.js +20 -1
  64. package/addon/controllers/maintenance/parts/index/details.js +2 -2
  65. package/addon/controllers/maintenance/parts/index.js +28 -8
  66. package/addon/controllers/maintenance/schedules/index.js +33 -4
  67. package/addon/controllers/maintenance/work-orders/index/details.js +3 -3
  68. package/addon/controllers/maintenance/work-orders/index.js +39 -8
  69. package/addon/controllers/management/contacts/customers.js +13 -0
  70. package/addon/controllers/management/contacts/index.js +43 -1
  71. package/addon/controllers/management/drivers/index/details.js +1 -0
  72. package/addon/controllers/management/drivers/index.js +32 -2
  73. package/addon/controllers/management/fleets/index/details.js +1 -0
  74. package/addon/controllers/management/fleets/index.js +39 -1
  75. package/addon/controllers/management/fuel-reports/index.js +22 -2
  76. package/addon/controllers/management/fuel-transactions/index.js +43 -7
  77. package/addon/controllers/management/issues/index/details.js +1 -0
  78. package/addon/controllers/management/issues/index.js +22 -2
  79. package/addon/controllers/management/places/index.js +36 -1
  80. package/addon/controllers/management/trailers/index/details.js +1 -0
  81. package/addon/controllers/management/trailers/index.js +50 -2
  82. package/addon/controllers/management/vehicles/index/details.js +1 -0
  83. package/addon/controllers/management/vehicles/index.js +33 -2
  84. package/addon/controllers/management/vendors/index.js +26 -2
  85. package/addon/controllers/operations/orders/index/details.js +50 -7
  86. package/addon/controllers/operations/orders/index.js +59 -4
  87. package/addon/controllers/operations/scheduler/index.js +45 -14
  88. package/addon/controllers/operations/service-rates/index.js +15 -1
  89. package/addon/controllers/settings/index.js +6 -0
  90. package/addon/controllers/settings/map.js +75 -0
  91. package/addon/controllers/settings/orchestrator.js +8 -6
  92. package/addon/controllers/settings/tracking-page.js +212 -0
  93. package/addon/extension.js +97 -1
  94. package/addon/helpers/parcel-box-image.js +16 -0
  95. package/addon/routes/operations/orders/index/details.js +1 -0
  96. package/addon/routes/operations/orders/index/new.js +5 -4
  97. package/addon/routes/operations/scheduler/index.js +1 -1
  98. package/addon/routes/settings/tracking-page.js +31 -0
  99. package/addon/routes.js +1 -0
  100. package/addon/services/contact-actions.js +1 -0
  101. package/addon/services/customer-actions.js +2 -1
  102. package/addon/services/device-actions.js +1 -0
  103. package/addon/services/device-event-actions.js +1 -0
  104. package/addon/services/driver-actions.js +4 -13
  105. package/addon/services/equipment-actions.js +1 -0
  106. package/addon/services/fleet-actions.js +1 -0
  107. package/addon/services/fuel-report-actions.js +1 -0
  108. package/addon/services/inspection-form-actions.js +1 -0
  109. package/addon/services/inspection-submission-actions.js +1 -0
  110. package/addon/services/integrated-vendor-actions.js +1 -0
  111. package/addon/services/issue-actions.js +1 -0
  112. package/addon/services/location.js +69 -21
  113. package/addon/services/maintenance-actions.js +1 -0
  114. package/addon/services/maintenance-schedule-actions.js +2 -1
  115. package/addon/services/map-settings.js +28 -0
  116. package/addon/services/order-actions.js +7 -0
  117. package/addon/services/order-allocation.js +1 -1
  118. package/addon/services/order-presentation.js +129 -0
  119. package/addon/services/part-actions.js +1 -0
  120. package/addon/services/place-actions.js +1 -0
  121. package/addon/services/sensor-actions.js +1 -0
  122. package/addon/services/service-area-actions.js +1 -0
  123. package/addon/services/service-rate-actions.js +1 -0
  124. package/addon/services/telematic-actions.js +1 -0
  125. package/addon/services/trailer-actions.js +4 -14
  126. package/addon/services/vehicle-actions.js +4 -13
  127. package/addon/services/vendor-actions.js +1 -0
  128. package/addon/services/work-order-actions.js +1 -0
  129. package/addon/services/zone-actions.js +1 -0
  130. package/addon/styles/fleetops-engine.css +1391 -0
  131. package/addon/templates/analytics/reports/index/details.hbs +1 -0
  132. package/addon/templates/analytics/reports/index.hbs +1 -0
  133. package/addon/templates/connectivity/devices/index/details.hbs +1 -0
  134. package/addon/templates/connectivity/devices/index.hbs +1 -0
  135. package/addon/templates/connectivity/events/index.hbs +1 -0
  136. package/addon/templates/connectivity/sensors/index/details.hbs +1 -0
  137. package/addon/templates/connectivity/sensors/index.hbs +1 -0
  138. package/addon/templates/maintenance/equipment/index/details.hbs +1 -0
  139. package/addon/templates/maintenance/equipment/index.hbs +2 -0
  140. package/addon/templates/maintenance/inspection-forms/index/details.hbs +1 -0
  141. package/addon/templates/maintenance/inspection-forms/index.hbs +1 -0
  142. package/addon/templates/maintenance/inspection-submissions/index/details.hbs +1 -0
  143. package/addon/templates/maintenance/inspection-submissions/index.hbs +1 -0
  144. package/addon/templates/maintenance/maintenances/index/details.hbs +1 -0
  145. package/addon/templates/maintenance/maintenances/index.hbs +1 -0
  146. package/addon/templates/maintenance/parts/index/details.hbs +1 -0
  147. package/addon/templates/maintenance/parts/index.hbs +2 -0
  148. package/addon/templates/maintenance/schedules/index/details.hbs +1 -0
  149. package/addon/templates/maintenance/schedules/index.hbs +2 -0
  150. package/addon/templates/maintenance/work-orders/index/details.hbs +1 -0
  151. package/addon/templates/maintenance/work-orders/index.hbs +1 -0
  152. package/addon/templates/management/contacts/customers/details.hbs +1 -0
  153. package/addon/templates/management/contacts/customers.hbs +1 -0
  154. package/addon/templates/management/contacts/index/details.hbs +1 -0
  155. package/addon/templates/management/contacts/index.hbs +1 -0
  156. package/addon/templates/management/contacts.hbs +1 -0
  157. package/addon/templates/management/drivers/index/details.hbs +1 -0
  158. package/addon/templates/management/drivers/index.hbs +2 -0
  159. package/addon/templates/management/fleets/index/details.hbs +1 -0
  160. package/addon/templates/management/fleets/index.hbs +1 -0
  161. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  162. package/addon/templates/management/fuel-reports/index.hbs +1 -0
  163. package/addon/templates/management/fuel-transactions/index.hbs +1 -0
  164. package/addon/templates/management/issues/index/details.hbs +1 -0
  165. package/addon/templates/management/issues/index.hbs +1 -0
  166. package/addon/templates/management/places/index/details.hbs +1 -0
  167. package/addon/templates/management/places/index.hbs +1 -0
  168. package/addon/templates/management/trailers/index/details.hbs +1 -0
  169. package/addon/templates/management/trailers/index.hbs +2 -0
  170. package/addon/templates/management/vehicles/index/details.hbs +1 -0
  171. package/addon/templates/management/vehicles/index.hbs +2 -0
  172. package/addon/templates/management/vendors/index/details.hbs +1 -0
  173. package/addon/templates/management/vendors/index.hbs +2 -0
  174. package/addon/templates/management/vendors/integrated.hbs +1 -0
  175. package/addon/templates/operations/orders/index/details.hbs +1 -0
  176. package/addon/templates/operations/orders/index.hbs +1 -0
  177. package/addon/templates/operations/service-rates/index/details.hbs +1 -0
  178. package/addon/templates/operations/service-rates/index.hbs +1 -0
  179. package/addon/templates/settings/map.hbs +46 -0
  180. package/addon/templates/settings/tracking-page.hbs +318 -0
  181. package/addon/utils/identity-cell-resource.js +2 -56
  182. package/addon/utils/map-default-view.js +132 -0
  183. package/addon/utils/normalize-order-config-flow.js +6 -1
  184. package/addon/utils/placeholder-images.js +4 -69
  185. package/addon/utils/resource-descriptors/assets.js +2 -57
  186. package/addon/utils/resource-descriptors/helpers.js +23 -122
  187. package/addon/utils/resource-descriptors/operations.js +2 -61
  188. package/addon/utils/resource-descriptors/people.js +3 -142
  189. package/addon/utils/resource-descriptors/shared.js +18 -0
  190. package/addon/utils/tracking-live-source.js +123 -0
  191. package/addon/utils/tracking-page-theme.js +123 -0
  192. package/app/components/admin/tracking-page-settings.js +1 -0
  193. package/app/components/tracking-page/full-view.js +1 -0
  194. package/app/components/tracking-page/locale-selector.js +1 -0
  195. package/app/components/tracking-page/map.js +1 -0
  196. package/app/components/tracking-page/order-list.js +1 -0
  197. package/app/components/tracking-page/public-view.js +1 -0
  198. package/app/components/tracking-page/settings-preview.js +1 -0
  199. package/app/components/tracking-page/verify-panel.js +1 -0
  200. package/app/components/tracking-page.js +1 -0
  201. package/app/components/widget/proof-of-delivery.js +1 -0
  202. package/app/controllers/settings/tracking-page.js +1 -0
  203. package/app/helpers/parcel-box-image.js +1 -0
  204. package/app/routes/settings/tracking-page.js +1 -0
  205. package/app/services/order-presentation.js +1 -0
  206. package/app/templates/settings/tracking-page.js +1 -0
  207. package/app/utils/map-default-view.js +1 -0
  208. package/app/utils/tracking-live-source.js +1 -0
  209. package/app/utils/tracking-page-theme.js +1 -0
  210. package/composer.json +2 -2
  211. package/extension.json +1 -1
  212. package/package.json +4 -4
  213. package/scripts/pest-bootstrap.php +4 -0
  214. package/server/config/fleetops.php +4 -0
  215. package/server/migrations/2026_10_08_000001_create_tracking_sessions_tables.php +51 -0
  216. package/server/migrations/2026_10_10_000001_add_trashed_index_to_device_events.php +40 -0
  217. package/server/migrations/2026_10_10_000002_add_trashed_index_to_positions.php +40 -0
  218. package/server/migrations/2026_10_12_000001_add_deleted_at_to_tracking_sessions_tables.php +32 -0
  219. package/server/resources/views/labels/default.php +2 -2
  220. package/server/resources/views/labels/entity-label.php +2 -2
  221. package/server/resources/views/labels/waypoint-label.php +2 -2
  222. package/server/src/Auth/Schemas/FleetOps.php +5 -0
  223. package/server/src/Console/Commands/ProcessOperationalAlerts.php +1 -0
  224. package/server/src/Console/Commands/PruneTelematicsData.php +101 -26
  225. package/server/src/Events/OrderChanged.php +257 -0
  226. package/server/src/Events/OrderDriverUnassigned.php +68 -0
  227. package/server/src/Exceptions/OrderEditLockedException.php +32 -0
  228. package/server/src/Expansions/CompanyExpansion.php +3 -2
  229. package/server/src/Expansions/UserExpansion.php +12 -10
  230. package/server/src/Http/Controllers/Api/v1/CustomerController.php +108 -18
  231. package/server/src/Http/Controllers/Api/v1/DriverController.php +95 -10
  232. package/server/src/Http/Controllers/Api/v1/EntityController.php +66 -0
  233. package/server/src/Http/Controllers/Api/v1/FleetController.php +10 -4
  234. package/server/src/Http/Controllers/Api/v1/OrderController.php +139 -36
  235. package/server/src/Http/Controllers/Api/v1/PayloadController.php +76 -8
  236. package/server/src/Http/Controllers/Api/v1/PlaceController.php +3 -3
  237. package/server/src/Http/Controllers/Api/v1/TrackingNumberController.php +6 -32
  238. package/server/src/Http/Controllers/Api/v1/VehicleController.php +5 -0
  239. package/server/src/Http/Controllers/Internal/v1/ContactController.php +3 -0
  240. package/server/src/Http/Controllers/Internal/v1/DriverController.php +10 -0
  241. package/server/src/Http/Controllers/Internal/v1/FleetController.php +16 -2
  242. package/server/src/Http/Controllers/Internal/v1/InspectionSubmissionController.php +13 -8
  243. package/server/src/Http/Controllers/Internal/v1/IssueController.php +2 -0
  244. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +4 -2
  245. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +93 -11
  246. package/server/src/Http/Controllers/Internal/v1/OrderController.php +118 -28
  247. package/server/src/Http/Controllers/Internal/v1/PositionController.php +22 -0
  248. package/server/src/Http/Controllers/Internal/v1/ProofController.php +55 -4
  249. package/server/src/Http/Controllers/Internal/v1/SettingController.php +303 -10
  250. package/server/src/Http/Controllers/Internal/v1/TrailerController.php +1 -0
  251. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +1 -0
  252. package/server/src/Http/Controllers/Public/TrackingController.php +518 -0
  253. package/server/src/Http/Filter/ContactFilter.php +1 -1
  254. package/server/src/Http/Filter/InspectionFormFilter.php +23 -0
  255. package/server/src/Http/Filter/InspectionSubmissionFilter.php +23 -0
  256. package/server/src/Http/Filter/MaintenanceFilter.php +23 -0
  257. package/server/src/Http/Filter/OrderFilter.php +39 -4
  258. package/server/src/Http/Filter/ProofFilter.php +18 -0
  259. package/server/src/Http/Filter/RouteFilter.php +18 -0
  260. package/server/src/Http/Filter/TelematicFilter.php +23 -0
  261. package/server/src/Http/Filter/WarrantyFilter.php +23 -0
  262. package/server/src/Http/Requests/CancelOrderRequest.php +2 -1
  263. package/server/src/Http/Resources/v1/Concerns/ResolvesPublicRelationFields.php +14 -1
  264. package/server/src/Http/Resources/v1/Index/Customer.php +18 -0
  265. package/server/src/Http/Resources/v1/Index/Order.php +11 -2
  266. package/server/src/Http/Resources/v1/PublicOrderTracking.php +153 -0
  267. package/server/src/Http/Resources/v1/TrackingNumber.php +8 -34
  268. package/server/src/Http/Resources/v1/Zone.php +31 -23
  269. package/server/src/Jobs/FinalizeApiOrderCreation.php +3 -1
  270. package/server/src/Jobs/ProcessAllocationJob.php +16 -6
  271. package/server/src/Jobs/PublishTrackingUpdate.php +50 -0
  272. package/server/src/Listeners/HandleGeofenceEntered.php +31 -15
  273. package/server/src/Listeners/HandleOrderCanceled.php +9 -1
  274. package/server/src/Listeners/HandleUserRemovedFromCompany.php +2 -1
  275. package/server/src/Listeners/PublishTrackingUpdates.php +27 -0
  276. package/server/src/Mail/CustomerCredentialsMail.php +4 -2
  277. package/server/src/Models/AssetConnection.php +3 -0
  278. package/server/src/Models/Contact.php +3 -0
  279. package/server/src/Models/Device.php +28 -0
  280. package/server/src/Models/DeviceEvent.php +7 -0
  281. package/server/src/Models/Driver.php +20 -7
  282. package/server/src/Models/Entity.php +12 -4
  283. package/server/src/Models/Fleet.php +11 -32
  284. package/server/src/Models/FleetDriver.php +3 -0
  285. package/server/src/Models/FleetVehicle.php +3 -0
  286. package/server/src/Models/FuelReport.php +5 -13
  287. package/server/src/Models/Issue.php +4 -16
  288. package/server/src/Models/Order.php +234 -11
  289. package/server/src/Models/OrderConfig.php +129 -0
  290. package/server/src/Models/Payload.php +227 -35
  291. package/server/src/Models/Place.php +7 -1
  292. package/server/src/Models/ServiceArea.php +7 -0
  293. package/server/src/Models/ServiceRate.php +7 -17
  294. package/server/src/Models/TrackingNumber.php +109 -6
  295. package/server/src/Models/TrackingSession.php +33 -0
  296. package/server/src/Models/TrackingSessionGrant.php +22 -0
  297. package/server/src/Models/TrackingStatus.php +6 -0
  298. package/server/src/Models/Vehicle.php +21 -2
  299. package/server/src/Models/Vendor.php +7 -0
  300. package/server/src/Models/Waypoint.php +13 -4
  301. package/server/src/Notifications/OrderAssigned.php +2 -1
  302. package/server/src/Notifications/OrderCanceled.php +7 -1
  303. package/server/src/Notifications/OrderChanged.php +87 -0
  304. package/server/src/Notifications/OrderCompleted.php +2 -1
  305. package/server/src/Notifications/OrderDispatchFailed.php +2 -1
  306. package/server/src/Notifications/OrderDispatched.php +2 -1
  307. package/server/src/Notifications/OrderFailed.php +2 -1
  308. package/server/src/Notifications/OrderUnassigned.php +66 -0
  309. package/server/src/Notifications/WaypointCompleted.php +2 -1
  310. package/server/src/Observers/CompanyUserObserver.php +8 -7
  311. package/server/src/Observers/DriverObserver.php +6 -1
  312. package/server/src/Observers/OrderObserver.php +141 -1
  313. package/server/src/Observers/TrackingNumberObserver.php +18 -6
  314. package/server/src/Observers/UserObserver.php +2 -1
  315. package/server/src/Observers/VehicleObserver.php +8 -3
  316. package/server/src/Orchestration/Engines/RouteSequencingEngine.php +21 -3
  317. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +38 -8
  318. package/server/src/Orchestration/OrchestrationEngineRegistry.php +61 -1
  319. package/server/src/Orchestration/Support/OrchestratorSettings.php +61 -0
  320. package/server/src/Orchestration/Support/RouteMetrics.php +165 -0
  321. package/server/src/Providers/EventServiceProvider.php +11 -0
  322. package/server/src/Providers/FleetOpsServiceProvider.php +13 -0
  323. package/server/src/Support/ApiCacheThrottle.php +76 -0
  324. package/server/src/Support/LiveOrderQuery.php +3 -1
  325. package/server/src/Support/OrderEdit.php +365 -0
  326. package/server/src/Support/OrderEditPolicy.php +292 -0
  327. package/server/src/Support/ProfileAccountManager.php +54 -1
  328. package/server/src/Support/ResolvesOrderServiceStops.php +5 -0
  329. package/server/src/Support/SocketChannels.php +346 -0
  330. package/server/src/Support/Telematics/TelematicService.php +7 -2
  331. package/server/src/Support/Telematics/Telemetry/Inbox.php +8 -1
  332. package/server/src/Support/TrackingChannel.php +55 -0
  333. package/server/src/Support/TrackingCode.php +242 -0
  334. package/server/src/Support/TrackingPage/TrackingAccess.php +356 -0
  335. package/server/src/Support/TrackingPage/TrackingPageConfig.php +264 -0
  336. package/server/src/Support/TrackingPage/TrackingRecipient.php +111 -0
  337. package/server/src/Support/TrackingPage/TrackingResolver.php +201 -0
  338. package/server/src/Support/TrackingPage/TrackingTarget.php +40 -0
  339. package/server/src/Support/TrackingPage/TrackingView.php +543 -0
  340. package/server/src/Support/TrackingPublisher.php +261 -0
  341. package/server/src/Support/TrackingScope.php +182 -0
  342. package/server/src/Support/TrackingUpdate.php +402 -0
  343. package/server/src/Support/Utils.php +15 -3
  344. package/server/src/Traits/HasTrackingNumber.php +2 -0
  345. package/server/src/routes.php +39 -7
  346. package/server/tests/ApiCustomerControllerContractsTest.php +54 -7
  347. package/server/tests/ApiDriverPasswordContractsTest.php +25 -21
  348. package/server/tests/ApiEntityControllerContractsTest.php +84 -0
  349. package/server/tests/ApiOrderControllerContractsTest.php +245 -0
  350. package/server/tests/ApiPayloadControllerContractsTest.php +121 -0
  351. package/server/tests/ApiPlaceControllerContractsTest.php +1 -1
  352. package/server/tests/ApiTrackingNumberControllerContractsTest.php +6 -9
  353. package/server/tests/CompactResourceSerializationTest.php +23 -59
  354. package/server/tests/ControllerFilterContractsTest.php +1 -1
  355. package/server/tests/CustomerContactIdentitySafetyTest.php +1 -1
  356. package/server/tests/EventContractsTest.php +26 -60
  357. package/server/tests/ExpansionContractsTest.php +15 -2
  358. package/server/tests/Feature/Http/Api/CustomerControllerHelperSeamsTest.php +29 -3
  359. package/server/tests/Feature/Http/Api/DriverControllerAuthFlowsTest.php +23 -0
  360. package/server/tests/Feature/Http/Api/OrderControllerNearbyFiltersTest.php +16 -16
  361. package/server/tests/Feature/Http/Api/OrderControllerQueryFiltersTest.php +41 -14
  362. package/server/tests/Feature/Http/Api/TrackingNumberControllerHelpersTest.php +57 -22
  363. package/server/tests/Feature/Http/Internal/DriverControllerCreateRecordTest.php +23 -9
  364. package/server/tests/Feature/Http/Internal/OrchestrationControllerContractsTest.php +171 -1
  365. package/server/tests/Feature/Http/Internal/OrderControllerActivityFlowsTest.php +72 -0
  366. package/server/tests/Feature/Http/Internal/OrderControllerContractsTest.php +110 -14
  367. package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +26 -0
  368. package/server/tests/Feature/Http/Internal/OrderControllerHelpersTest.php +7 -5
  369. package/server/tests/Feature/Http/Internal/PositionControllerReplayChannelTest.php +135 -0
  370. package/server/tests/Feature/Http/Internal/ProofControllerContractsTest.php +3 -3
  371. package/server/tests/Feature/Http/Internal/ProofControllerRecentTest.php +170 -0
  372. package/server/tests/Feature/Http/Public/TrackingControllerTest.php +495 -0
  373. package/server/tests/IndexCustomerPhotoTest.php +151 -0
  374. package/server/tests/ModelAccessorContractsTest.php +4 -3
  375. package/server/tests/NotificationAndMailContractsTest.php +5 -8
  376. package/server/tests/ObserverContractsTest.php +72 -10
  377. package/server/tests/OrderActivityFlowRegressionTest.php +3 -2
  378. package/server/tests/OrderConfigLifecycleTest.php +120 -0
  379. package/server/tests/OrderFilterExecutionTest.php +167 -2
  380. package/server/tests/ProcessAllocationJobContractsTest.php +20 -0
  381. package/server/tests/PublicOrderTrackingResourceTest.php +221 -0
  382. package/server/tests/QueueJobContractsTest.php +2 -1
  383. package/server/tests/RequestContractsTest.php +1 -1
  384. package/server/tests/RouteRegistrationExecutionTest.php +26 -0
  385. package/server/tests/RouteSequencingEngineTest.php +17 -0
  386. package/server/tests/SettingControllerContractsTest.php +110 -0
  387. package/server/tests/Support/TrackingPageDatabase.php +200 -0
  388. package/server/tests/TenantScopingTest.php +206 -0
  389. package/server/tests/TrackingPageSettingsTest.php +343 -0
  390. package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +51 -0
  391. package/server/tests/Unit/Events/OrderDispatchFailedTest.php +2 -1
  392. package/server/tests/Unit/Http/Filter/ContactFilterAddressTest.php +61 -0
  393. package/server/tests/Unit/Http/Resources/IndexOrderResourceTest.php +30 -0
  394. package/server/tests/Unit/Jobs/FinalizeApiOrderCreationDispatchGuardTest.php +266 -0
  395. package/server/tests/Unit/Listeners/HandleGeofenceEnteredTest.php +182 -22
  396. package/server/tests/Unit/Listeners/HandleUserRemovedFromCompanyTest.php +5 -0
  397. package/server/tests/Unit/Models/DriverAssignVehicleTest.php +81 -0
  398. package/server/tests/Unit/Models/FleetTest.php +4 -3
  399. package/server/tests/Unit/Models/OrderCancelReasonTest.php +143 -0
  400. package/server/tests/Unit/Models/OrderPayloadConfigAndDistanceTest.php +60 -0
  401. package/server/tests/Unit/Models/OrderPayloadRouteTest.php +4 -2
  402. package/server/tests/Unit/Models/PayloadTest.php +18 -4
  403. package/server/tests/Unit/Models/ServiceRatePersistenceAndServicabilityTest.php +2 -2
  404. package/server/tests/Unit/Models/TrackingNumberTest.php +67 -6
  405. package/server/tests/Unit/Models/VehicleTest.php +16 -2
  406. package/server/tests/Unit/Models/WaypointTest.php +4 -3
  407. package/server/tests/Unit/Notifications/OrderChangeNotificationsTest.php +59 -0
  408. package/server/tests/Unit/Notifications/TerminalOrderNotificationsTest.php +3 -3
  409. package/server/tests/Unit/Observers/DriverDeletionCleanupTest.php +158 -0
  410. package/server/tests/Unit/Observers/FleetOpsCompanyUserAndServiceAreaObserversTest.php +20 -0
  411. package/server/tests/Unit/Observers/ObserverListenerSeamsTest.php +3 -3
  412. package/server/tests/Unit/Observers/OrderAssignmentObserverTest.php +100 -0
  413. package/server/tests/Unit/Observers/OrderDeleteCascadeTest.php +213 -0
  414. package/server/tests/Unit/Observers/VehicleObserverDeleteTest.php +67 -0
  415. package/server/tests/Unit/Orchestration/EngineSelectionAndRouteMetricsTest.php +336 -0
  416. package/server/tests/Unit/Orchestration/Engines/VroomOrchestrationEngineLifecycleTest.php +8 -1
  417. package/server/tests/Unit/Support/ApiCacheDependenciesTest.php +347 -0
  418. package/server/tests/Unit/Support/OrderEditPolicyTest.php +156 -0
  419. package/server/tests/Unit/Support/OrderOperationsTest.php +514 -0
  420. package/server/tests/Unit/Support/OsrmProofAndIssueFilterTest.php +4 -3
  421. package/server/tests/Unit/Support/ProfileAccountManagerTest.php +141 -0
  422. package/server/tests/Unit/Support/QuerySeamsTest.php +5 -1
  423. package/server/tests/Unit/Support/SocketChannelsTest.php +396 -0
  424. package/server/tests/Unit/Support/TrackingChannelTest.php +232 -0
  425. package/server/tests/Unit/Support/TrackingCodeTest.php +186 -0
  426. package/server/tests/Unit/Support/TrackingPage/TrackingAccessTest.php +200 -0
  427. package/server/tests/Unit/Support/TrackingPage/TrackingRecipientTest.php +51 -0
  428. package/server/tests/Unit/Support/TrackingPage/TrackingResolverTest.php +181 -0
  429. package/server/tests/Unit/Support/TrackingPage/TrackingViewTest.php +479 -0
  430. package/server/tests/Unit/Support/TrackingPublisherTest.php +425 -0
  431. package/server/tests/Unit/Support/TrackingUpdateTest.php +363 -0
  432. package/server/tests/Unit/Support/UtilsAdditionalTest.php +9 -0
  433. package/server/tests/Unit/Support/UtilsGeoMatrixAndVendorTest.php +25 -0
  434. package/server/tests/VehicleResourceContractsTest.php +46 -0
  435. package/server/tests/VroomOrchestrationEngineTest.php +34 -1
  436. package/server/tests/ZoneGeofenceSettingsResourceTest.php +121 -0
  437. package/translations/ar-ae.yml +274 -0
  438. package/translations/bg-bg.yaml +274 -0
  439. package/translations/en-us.yaml +347 -0
  440. package/translations/es-pa.yaml +274 -0
  441. package/translations/fr-fr.yaml +274 -0
  442. package/translations/mn-mn.yaml +274 -0
  443. package/translations/pt-br.yaml +274 -0
  444. package/translations/ru-ru.yaml +276 -2
  445. package/translations/uk-ua.yaml +275 -1
  446. package/translations/vi-vn.yaml +274 -0
  447. package/addon/components/cell/contact-identity.hbs +0 -1
  448. package/addon/components/cell/customer-identity.hbs +0 -1
  449. package/addon/components/cell/driver-identity.hbs +0 -1
  450. package/addon/components/cell/fleet-identity.hbs +0 -1
  451. package/addon/components/cell/order-identity.hbs +0 -1
  452. package/addon/components/cell/place-identity.hbs +0 -1
  453. package/addon/components/cell/vehicle-identity.hbs +0 -1
  454. package/addon/components/cell/vendor-identity.hbs +0 -1
  455. package/addon/components/contact/pill.hbs +0 -24
  456. package/addon/components/contact/summary.hbs +0 -1
  457. package/addon/components/customer/pill.hbs +0 -24
  458. package/addon/components/customer/summary.hbs +0 -1
  459. package/addon/components/driver/pill.hbs +0 -24
  460. package/addon/components/driver/summary.hbs +0 -1
  461. package/addon/components/fleet/pill.hbs +0 -24
  462. package/addon/components/fleet/summary.hbs +0 -1
  463. package/addon/components/order/pill.hbs +0 -24
  464. package/addon/components/order/summary.hbs +0 -1
  465. package/addon/components/place/pill.hbs +0 -24
  466. package/addon/components/place/summary.hbs +0 -1
  467. package/addon/components/select-option/contact.hbs +0 -12
  468. package/addon/components/select-option/customer.hbs +0 -12
  469. package/addon/components/select-option/driver.hbs +0 -12
  470. package/addon/components/select-option/fleet.hbs +0 -12
  471. package/addon/components/select-option/order.hbs +0 -12
  472. package/addon/components/select-option/place.hbs +0 -12
  473. package/addon/components/select-option/vehicle.hbs +0 -12
  474. package/addon/components/select-option/vendor.hbs +0 -12
  475. package/addon/components/vehicle/pill.hbs +0 -24
  476. package/addon/components/vehicle/summary.hbs +0 -1
  477. package/addon/components/vendor/pill.hbs +0 -24
  478. package/addon/components/vendor/summary.hbs +0 -1
  479. package/app/components/cell/contact-identity.js +0 -1
  480. package/app/components/cell/customer-identity.js +0 -1
  481. package/app/components/cell/driver-identity.js +0 -1
  482. package/app/components/cell/fleet-identity.js +0 -1
  483. package/app/components/cell/order-identity.js +0 -1
  484. package/app/components/cell/place-identity.js +0 -1
  485. package/app/components/cell/vehicle-identity.js +0 -1
  486. package/app/components/cell/vendor-identity.js +0 -1
  487. package/app/components/contact/pill.js +0 -1
  488. package/app/components/contact/summary.js +0 -1
  489. package/app/components/customer/pill.js +0 -1
  490. package/app/components/customer/summary.js +0 -1
  491. package/app/components/driver/pill.js +0 -1
  492. package/app/components/driver/summary.js +0 -1
  493. package/app/components/fleet/pill.js +0 -1
  494. package/app/components/fleet/summary.js +0 -1
  495. package/app/components/order/pill.js +0 -1
  496. package/app/components/order/summary.js +0 -1
  497. package/app/components/place/pill.js +0 -1
  498. package/app/components/place/summary.js +0 -1
  499. package/app/components/select-option/contact.js +0 -1
  500. package/app/components/select-option/customer.js +0 -1
  501. package/app/components/select-option/driver.js +0 -1
  502. package/app/components/select-option/fleet.js +0 -1
  503. package/app/components/select-option/order.js +0 -1
  504. package/app/components/select-option/place.js +0 -1
  505. package/app/components/select-option/vehicle.js +0 -1
  506. package/app/components/select-option/vendor.js +0 -1
  507. package/app/components/vehicle/pill.js +0 -1
  508. package/app/components/vehicle/summary.js +0 -1
  509. package/app/components/vendor/pill.js +0 -1
  510. package/app/components/vendor/summary.js +0 -1
@@ -16,7 +16,7 @@ export default class ManagementTrailersIndexController extends Controller {
16
16
  @service store;
17
17
 
18
18
  /** query params */
19
- @tracked queryParams = [
19
+ @tracked queryParams = this.trailerActions.queryParamsFor([
20
20
  'page',
21
21
  'limit',
22
22
  'sort',
@@ -42,7 +42,7 @@ export default class ManagementTrailersIndexController extends Controller {
42
42
  'last_online_at',
43
43
  'created_at',
44
44
  'updated_at',
45
- ];
45
+ ]);
46
46
  @tracked query = null;
47
47
  @tracked page = 1;
48
48
  @tracked limit;
@@ -75,16 +75,19 @@ export default class ManagementTrailersIndexController extends Controller {
75
75
  get actionButtons() {
76
76
  return [
77
77
  {
78
+ id: 'more',
78
79
  component: 'dropdown-button',
79
80
  icon: 'display',
80
81
  size: 'xs',
81
82
  items: [
82
83
  {
84
+ id: 'table-view',
83
85
  label: this.intl.t('common.table-view'),
84
86
  icon: 'table-list',
85
87
  onClick: () => this.setLayout('table'),
86
88
  },
87
89
  {
90
+ id: 'grid-view',
88
91
  label: this.intl.t('common.grid-view'),
89
92
  icon: 'grip',
90
93
  onClick: () => this.setLayout('grid'),
@@ -94,11 +97,13 @@ export default class ManagementTrailersIndexController extends Controller {
94
97
  helpText: this.intl.t('common.change-layout'),
95
98
  },
96
99
  {
100
+ id: 'refresh',
97
101
  icon: 'refresh',
98
102
  onClick: this.trailerActions.refresh,
99
103
  helpText: this.intl.t('common.refresh'),
100
104
  },
101
105
  {
106
+ id: 'create',
102
107
  text: this.intl.t('common.new'),
103
108
  type: 'primary',
104
109
  icon: 'plus',
@@ -106,6 +111,7 @@ export default class ManagementTrailersIndexController extends Controller {
106
111
  permission: 'fleet-ops create trailer',
107
112
  },
108
113
  {
114
+ id: 'import',
109
115
  text: this.intl.t('common.import'),
110
116
  type: 'magic',
111
117
  icon: 'upload',
@@ -113,6 +119,7 @@ export default class ManagementTrailersIndexController extends Controller {
113
119
  permission: 'fleet-ops import trailer',
114
120
  },
115
121
  {
122
+ id: 'export',
116
123
  text: this.intl.t('common.export'),
117
124
  icon: 'long-arrow-up',
118
125
  iconClass: 'rotate-icon-45',
@@ -129,6 +136,7 @@ export default class ManagementTrailersIndexController extends Controller {
129
136
 
130
137
  return [
131
138
  {
139
+ id: 'bulk-delete',
132
140
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
133
141
  class: 'text-red-500',
134
142
  fn: this.trailerActions.bulkDelete,
@@ -161,6 +169,7 @@ export default class ManagementTrailersIndexController extends Controller {
161
169
  get columns() {
162
170
  return [
163
171
  {
172
+ id: 'display-name',
164
173
  sticky: true,
165
174
  label: this.intl.t('trailer.columns.name'),
166
175
  valuePath: 'displayName',
@@ -175,6 +184,7 @@ export default class ManagementTrailersIndexController extends Controller {
175
184
  filterParam: 'name',
176
185
  },
177
186
  {
187
+ id: 'type',
178
188
  label: this.intl.t('trailer.columns.type'),
179
189
  valuePath: 'type',
180
190
  cellComponent: 'cell/translated-value',
@@ -190,6 +200,7 @@ export default class ManagementTrailersIndexController extends Controller {
190
200
  width: 130,
191
201
  },
192
202
  {
203
+ id: 'plate-number',
193
204
  label: this.intl.t('trailer.columns.plate-number'),
194
205
  valuePath: 'plate_number',
195
206
  cellComponent: 'table/cell/base',
@@ -201,6 +212,7 @@ export default class ManagementTrailersIndexController extends Controller {
201
212
  filterParam: 'plate_number',
202
213
  },
203
214
  {
215
+ id: 'code',
204
216
  label: this.intl.t('trailer.columns.code'),
205
217
  valuePath: 'code',
206
218
  cellComponent: 'table/cell/base',
@@ -211,6 +223,7 @@ export default class ManagementTrailersIndexController extends Controller {
211
223
  filterParam: 'code',
212
224
  },
213
225
  {
226
+ id: 'current-vehicle-name',
214
227
  label: this.intl.t('trailer.columns.vehicle'),
215
228
  valuePath: 'current_vehicle_name',
216
229
  cellComponent: 'cell/vehicle-identity',
@@ -232,6 +245,7 @@ export default class ManagementTrailersIndexController extends Controller {
232
245
  model: 'vehicle',
233
246
  },
234
247
  {
248
+ id: 'attachment-state',
235
249
  label: this.intl.t('trailer.columns.attachment-state'),
236
250
  valuePath: 'attachment_state',
237
251
  cellComponent: 'cell/translated-value',
@@ -248,6 +262,7 @@ export default class ManagementTrailersIndexController extends Controller {
248
262
  width: 120,
249
263
  },
250
264
  {
265
+ id: 'status',
251
266
  label: this.intl.t('trailer.columns.status'),
252
267
  valuePath: 'status',
253
268
  cellComponent: 'cell/translated-value',
@@ -264,6 +279,7 @@ export default class ManagementTrailersIndexController extends Controller {
264
279
  width: 120,
265
280
  },
266
281
  {
282
+ id: 'connectivity-status',
267
283
  label: this.intl.t('trailer.columns.connectivity'),
268
284
  valuePath: 'connectivity_status',
269
285
  cellComponent: 'cell/translated-value',
@@ -279,6 +295,7 @@ export default class ManagementTrailersIndexController extends Controller {
279
295
  width: 140,
280
296
  },
281
297
  {
298
+ id: 'last-online-at',
282
299
  label: this.intl.t('trailer.columns.last-online'),
283
300
  valuePath: 'lastOnlineAt',
284
301
  sortParam: 'last_online_at',
@@ -290,6 +307,7 @@ export default class ManagementTrailersIndexController extends Controller {
290
307
  filterComponent: 'filter/date',
291
308
  },
292
309
  {
310
+ id: 'location',
293
311
  label: this.intl.t('trailer.columns.location'),
294
312
  valuePath: 'location',
295
313
  cellComponent: 'table/cell/point',
@@ -300,6 +318,7 @@ export default class ManagementTrailersIndexController extends Controller {
300
318
  sortable: false,
301
319
  },
302
320
  {
321
+ id: 'devices-count',
303
322
  label: this.intl.t('trailer.columns.devices'),
304
323
  valuePath: 'devices_count',
305
324
  cellComponent: 'table/cell/base',
@@ -309,6 +328,7 @@ export default class ManagementTrailersIndexController extends Controller {
309
328
  width: 90,
310
329
  },
311
330
  {
331
+ id: 'equipment-count',
312
332
  label: this.intl.t('trailer.columns.equipment'),
313
333
  valuePath: 'equipment_count',
314
334
  cellComponent: 'table/cell/base',
@@ -318,6 +338,7 @@ export default class ManagementTrailersIndexController extends Controller {
318
338
  width: 100,
319
339
  },
320
340
  {
341
+ id: 'public-id',
321
342
  label: this.intl.t('trailer.columns.id'),
322
343
  valuePath: 'public_id',
323
344
  cellComponent: 'click-to-copy',
@@ -329,6 +350,7 @@ export default class ManagementTrailersIndexController extends Controller {
329
350
  filterParam: 'public_id',
330
351
  },
331
352
  {
353
+ id: 'vin',
332
354
  label: this.intl.t('trailer.columns.vin'),
333
355
  valuePath: 'vin',
334
356
  cellComponent: 'table/cell/base',
@@ -340,6 +362,7 @@ export default class ManagementTrailersIndexController extends Controller {
340
362
  filterParam: 'vin',
341
363
  },
342
364
  {
365
+ id: 'serial-number',
343
366
  label: this.intl.t('trailer.columns.serial-number'),
344
367
  valuePath: 'serial_number',
345
368
  cellComponent: 'table/cell/base',
@@ -351,6 +374,7 @@ export default class ManagementTrailersIndexController extends Controller {
351
374
  filterParam: 'serial_number',
352
375
  },
353
376
  {
377
+ id: 'make',
354
378
  label: this.intl.t('trailer.columns.make'),
355
379
  valuePath: 'make',
356
380
  cellComponent: 'table/cell/base',
@@ -362,6 +386,7 @@ export default class ManagementTrailersIndexController extends Controller {
362
386
  filterParam: 'trailer_make',
363
387
  },
364
388
  {
389
+ id: 'model',
365
390
  label: this.intl.t('trailer.columns.model'),
366
391
  valuePath: 'model',
367
392
  cellComponent: 'table/cell/base',
@@ -373,6 +398,7 @@ export default class ManagementTrailersIndexController extends Controller {
373
398
  filterParam: 'trailer_model',
374
399
  },
375
400
  {
401
+ id: 'year',
376
402
  label: this.intl.t('trailer.columns.year'),
377
403
  valuePath: 'year',
378
404
  cellComponent: 'table/cell/base',
@@ -384,6 +410,7 @@ export default class ManagementTrailersIndexController extends Controller {
384
410
  filterParam: 'trailer_year',
385
411
  },
386
412
  {
413
+ id: 'vendor-name',
387
414
  label: this.intl.t('trailer.columns.vendor'),
388
415
  valuePath: 'vendor_name',
389
416
  cellComponent: 'cell/vendor-identity',
@@ -401,6 +428,7 @@ export default class ManagementTrailersIndexController extends Controller {
401
428
  model: 'vendor',
402
429
  },
403
430
  {
431
+ id: 'ownership-type',
404
432
  label: this.intl.t('trailer.columns.ownership'),
405
433
  valuePath: 'ownership_type',
406
434
  cellComponent: 'cell/translated-value',
@@ -416,6 +444,7 @@ export default class ManagementTrailersIndexController extends Controller {
416
444
  filterOptionValue: 'value',
417
445
  },
418
446
  {
447
+ id: 'axle-count',
419
448
  label: this.intl.t('trailer.columns.axles'),
420
449
  valuePath: 'axle_count',
421
450
  cellComponent: 'table/cell/base',
@@ -426,6 +455,7 @@ export default class ManagementTrailersIndexController extends Controller {
426
455
  width: 90,
427
456
  },
428
457
  {
458
+ id: 'gvwr',
429
459
  label: this.intl.t('trailer.columns.gvwr'),
430
460
  valuePath: 'gvwr',
431
461
  cellComponent: 'table/cell/base',
@@ -435,6 +465,7 @@ export default class ManagementTrailersIndexController extends Controller {
435
465
  filterable: false,
436
466
  },
437
467
  {
468
+ id: 'payload-capacity',
438
469
  label: this.intl.t('trailer.columns.payload-capacity'),
439
470
  valuePath: 'payload_capacity',
440
471
  cellComponent: 'table/cell/base',
@@ -444,6 +475,7 @@ export default class ManagementTrailersIndexController extends Controller {
444
475
  filterable: false,
445
476
  },
446
477
  {
478
+ id: 'length',
447
479
  label: this.intl.t('trailer.columns.length'),
448
480
  valuePath: 'length',
449
481
  cellComponent: 'table/cell/base',
@@ -453,6 +485,7 @@ export default class ManagementTrailersIndexController extends Controller {
453
485
  filterable: false,
454
486
  },
455
487
  {
488
+ id: 'created-at',
456
489
  label: this.intl.t('trailer.columns.created-at'),
457
490
  valuePath: 'createdAt',
458
491
  sortParam: 'created_at',
@@ -464,6 +497,7 @@ export default class ManagementTrailersIndexController extends Controller {
464
497
  filterComponent: 'filter/date',
465
498
  },
466
499
  {
500
+ id: 'updated-at',
467
501
  label: this.intl.t('trailer.columns.updated-at'),
468
502
  valuePath: 'updatedAt',
469
503
  sortParam: 'updated_at',
@@ -476,6 +510,7 @@ export default class ManagementTrailersIndexController extends Controller {
476
510
  filterComponent: 'filter/date',
477
511
  },
478
512
  {
513
+ id: 'row-actions',
479
514
  label: '',
480
515
  cellComponent: 'table/cell/dropdown',
481
516
  ddButtonText: false,
@@ -488,16 +523,19 @@ export default class ManagementTrailersIndexController extends Controller {
488
523
  width: 60,
489
524
  actions: [
490
525
  {
526
+ id: 'view',
491
527
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.trailer') }),
492
528
  fn: this.trailerActions.transition.view,
493
529
  permission: 'fleet-ops view trailer',
494
530
  },
495
531
  {
532
+ id: 'edit',
496
533
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.trailer') }),
497
534
  fn: this.trailerActions.transition.edit,
498
535
  permission: 'fleet-ops update trailer',
499
536
  },
500
537
  {
538
+ id: 'locate',
501
539
  label: this.intl.t('trailer.actions.locate'),
502
540
  fn: this.trailerActions.locate,
503
541
  permission: 'fleet-ops view trailer',
@@ -507,23 +545,27 @@ export default class ManagementTrailersIndexController extends Controller {
507
545
  separator: true,
508
546
  },
509
547
  {
548
+ id: 'attach-vehicle',
510
549
  label: this.intl.t('trailer.actions.attach-vehicle'),
511
550
  fn: this.trailerActions.attachVehicle,
512
551
  permission: 'fleet-ops attach-vehicle-for trailer',
513
552
  isVisible: (trailer) => trailer.attachment_state !== 'attached',
514
553
  },
515
554
  {
555
+ id: 'detach-vehicle',
516
556
  label: this.intl.t('trailer.actions.detach-vehicle'),
517
557
  fn: this.trailerActions.detachVehicle,
518
558
  permission: 'fleet-ops detach-vehicle-for trailer',
519
559
  isVisible: (trailer) => trailer.attachment_state === 'attached',
520
560
  },
521
561
  {
562
+ id: 'attach-device',
522
563
  label: this.intl.t('trailer.actions.attach-device'),
523
564
  fn: this.trailerActions.attachDevice,
524
565
  permission: 'fleet-ops attach-device-for trailer',
525
566
  },
526
567
  {
568
+ id: 'attach-equipment',
527
569
  label: this.intl.t('trailer.actions.attach-equipment'),
528
570
  fn: this.trailerActions.attachEquipment,
529
571
  permission: 'fleet-ops attach-equipment-for trailer',
@@ -532,16 +574,19 @@ export default class ManagementTrailersIndexController extends Controller {
532
574
  separator: true,
533
575
  },
534
576
  {
577
+ id: 'schedule-maintenance',
535
578
  label: this.intl.t('trailer.actions.schedule-maintenance'),
536
579
  fn: this.trailerActions.scheduleMaintenance,
537
580
  permission: 'fleet-ops create maintenance-schedule',
538
581
  },
539
582
  {
583
+ id: 'create-work-order',
540
584
  label: this.intl.t('trailer.actions.create-work-order'),
541
585
  fn: this.trailerActions.createWorkOrder,
542
586
  permission: 'fleet-ops create work-order',
543
587
  },
544
588
  {
589
+ id: 'log-maintenance',
545
590
  label: this.intl.t('trailer.actions.log-maintenance'),
546
591
  fn: this.trailerActions.logMaintenance,
547
592
  permission: 'fleet-ops create maintenance',
@@ -550,6 +595,7 @@ export default class ManagementTrailersIndexController extends Controller {
550
595
  separator: true,
551
596
  },
552
597
  {
598
+ id: 'delete',
553
599
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.trailer') }),
554
600
  fn: this.trailerActions.delete,
555
601
  permission: 'fleet-ops delete trailer',
@@ -562,6 +608,7 @@ export default class ManagementTrailersIndexController extends Controller {
562
608
  searchable: false,
563
609
  },
564
610
  {
611
+ id: 'devices',
565
612
  label: this.intl.t('resource.devices'),
566
613
  valuePath: 'devices',
567
614
  cellComponent: 'cell/resource-list',
@@ -575,6 +622,7 @@ export default class ManagementTrailersIndexController extends Controller {
575
622
  modelNamePath: 'displayName',
576
623
  },
577
624
  {
625
+ id: 'refrigerated',
578
626
  label: this.intl.t('trailer.columns.refrigerated'),
579
627
  valuePath: 'refrigerated',
580
628
  cellComponent: 'table/cell/checkbox',
@@ -68,6 +68,7 @@ export default class ManagementVehiclesIndexDetailsController extends Controller
68
68
  permission: 'fleet-ops update vehicle',
69
69
  },
70
70
  {
71
+ id: 'more',
71
72
  // Actions dropdown — shared with the vehicle context panel
72
73
  icon: 'ellipsis-h',
73
74
  iconPrefix: 'fas',
@@ -16,7 +16,7 @@ export default class ManagementVehiclesIndexController extends Controller {
16
16
  @service appCache;
17
17
 
18
18
  /** query params */
19
- @tracked queryParams = [
19
+ @tracked queryParams = this.vehicleActions.queryParamsFor([
20
20
  'page',
21
21
  'limit',
22
22
  'sort',
@@ -38,7 +38,7 @@ export default class ManagementVehiclesIndexController extends Controller {
38
38
  'has_trailer',
39
39
  'has_driver',
40
40
  'has_device',
41
- ];
41
+ ]);
42
42
  @tracked query = null;
43
43
  @tracked page = 1;
44
44
  @tracked limit;
@@ -68,6 +68,7 @@ export default class ManagementVehiclesIndexController extends Controller {
68
68
  get actionButtons() {
69
69
  return [
70
70
  {
71
+ id: 'more',
71
72
  component: 'dropdown-button',
72
73
  icon: 'display',
73
74
  size: 'xs',
@@ -93,11 +94,13 @@ export default class ManagementVehiclesIndexController extends Controller {
93
94
  helpText: 'Change the layout',
94
95
  },
95
96
  {
97
+ id: 'refresh',
96
98
  icon: 'refresh',
97
99
  onClick: this.vehicleActions.refresh,
98
100
  helpText: this.intl.t('common.refresh'),
99
101
  },
100
102
  {
103
+ id: 'create',
101
104
  text: this.intl.t('common.new'),
102
105
  type: 'primary',
103
106
  icon: 'plus',
@@ -105,6 +108,7 @@ export default class ManagementVehiclesIndexController extends Controller {
105
108
  permission: 'fleet-ops create vehicle',
106
109
  },
107
110
  {
111
+ id: 'import',
108
112
  text: this.intl.t('common.import'),
109
113
  type: 'magic',
110
114
  icon: 'upload',
@@ -112,6 +116,7 @@ export default class ManagementVehiclesIndexController extends Controller {
112
116
  permission: 'fleet-ops import vehicle',
113
117
  },
114
118
  {
119
+ id: 'export',
115
120
  text: this.intl.t('common.export'),
116
121
  icon: 'long-arrow-up',
117
122
  iconClass: 'rotate-icon-45',
@@ -128,6 +133,7 @@ export default class ManagementVehiclesIndexController extends Controller {
128
133
 
129
134
  return [
130
135
  {
136
+ id: 'bulk-delete',
131
137
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
132
138
  class: 'text-red-500',
133
139
  fn: this.vehicleActions.bulkDelete,
@@ -151,6 +157,7 @@ export default class ManagementVehiclesIndexController extends Controller {
151
157
  get columns() {
152
158
  return [
153
159
  {
160
+ id: 'display-name',
154
161
  sticky: true,
155
162
  label: this.intl.t('column.name'),
156
163
  valuePath: 'displayName',
@@ -165,6 +172,7 @@ export default class ManagementVehiclesIndexController extends Controller {
165
172
  filterParam: 'name',
166
173
  },
167
174
  {
175
+ id: 'plate-number',
168
176
  label: this.intl.t('column.plate-number'),
169
177
  valuePath: 'plate_number',
170
178
  cellComponent: 'table/cell/base',
@@ -176,6 +184,7 @@ export default class ManagementVehiclesIndexController extends Controller {
176
184
  filterParam: 'plate_number',
177
185
  },
178
186
  {
187
+ id: 'internal-id',
179
188
  label: this.intl.t('column.internal-id'),
180
189
  valuePath: 'internal_id',
181
190
  cellComponent: 'table/cell/base',
@@ -188,6 +197,7 @@ export default class ManagementVehiclesIndexController extends Controller {
188
197
  filterParam: 'internal_id',
189
198
  },
190
199
  {
200
+ id: 'driver-name',
191
201
  label: this.intl.t('column.driver-assigned'),
192
202
  cellComponent: 'cell/driver-identity',
193
203
  permission: 'fleet-ops view driver',
@@ -203,6 +213,7 @@ export default class ManagementVehiclesIndexController extends Controller {
203
213
  model: 'driver',
204
214
  },
205
215
  {
216
+ id: 'trailers',
206
217
  label: this.intl.t('resource.trailers'),
207
218
  valuePath: 'trailers',
208
219
  cellComponent: 'cell/resource-list',
@@ -216,6 +227,7 @@ export default class ManagementVehiclesIndexController extends Controller {
216
227
  modelNamePath: 'displayName',
217
228
  },
218
229
  {
230
+ id: 'devices',
219
231
  label: this.intl.t('resource.devices'),
220
232
  valuePath: 'devices',
221
233
  cellComponent: 'cell/resource-list',
@@ -229,6 +241,7 @@ export default class ManagementVehiclesIndexController extends Controller {
229
241
  modelNamePath: 'displayName',
230
242
  },
231
243
  {
244
+ id: 'public-id',
232
245
  label: this.intl.t('column.id'),
233
246
  valuePath: 'public_id',
234
247
  cellComponent: 'click-to-copy',
@@ -238,6 +251,7 @@ export default class ManagementVehiclesIndexController extends Controller {
238
251
  filterComponent: 'filter/string',
239
252
  },
240
253
  {
254
+ id: 'make',
241
255
  label: this.intl.t('column.make'),
242
256
  valuePath: 'make',
243
257
  cellComponent: 'table/cell/base',
@@ -249,6 +263,7 @@ export default class ManagementVehiclesIndexController extends Controller {
249
263
  filterComponent: 'filter/string',
250
264
  },
251
265
  {
266
+ id: 'model',
252
267
  label: this.intl.t('column.model'),
253
268
  valuePath: 'model',
254
269
  cellComponent: 'table/cell/base',
@@ -260,6 +275,7 @@ export default class ManagementVehiclesIndexController extends Controller {
260
275
  filterComponent: 'filter/string',
261
276
  },
262
277
  {
278
+ id: 'year',
263
279
  label: this.intl.t('column.year'),
264
280
  valuePath: 'year',
265
281
  cellComponent: 'table/cell/base',
@@ -270,6 +286,7 @@ export default class ManagementVehiclesIndexController extends Controller {
270
286
  filterComponent: 'filter/string',
271
287
  },
272
288
  {
289
+ id: 'vendor-name',
273
290
  label: this.intl.t('column.vendor'),
274
291
  cellComponent: 'cell/vendor-identity',
275
292
  permission: 'fleet-ops view vendor',
@@ -287,6 +304,7 @@ export default class ManagementVehiclesIndexController extends Controller {
287
304
  model: 'vendor',
288
305
  },
289
306
  {
307
+ id: 'status',
290
308
  label: this.intl.t('column.status'),
291
309
  valuePath: 'status',
292
310
  cellComponent: 'table/cell/status',
@@ -297,6 +315,7 @@ export default class ManagementVehiclesIndexController extends Controller {
297
315
  filterFetchOptions: 'vehicles/statuses',
298
316
  },
299
317
  {
318
+ id: 'created-at',
300
319
  label: this.intl.t('column.created-at'),
301
320
  valuePath: 'createdAt',
302
321
  sortParam: 'created_at',
@@ -308,6 +327,7 @@ export default class ManagementVehiclesIndexController extends Controller {
308
327
  filterComponent: 'filter/date',
309
328
  },
310
329
  {
330
+ id: 'updated-at',
311
331
  label: this.intl.t('column.updated-at'),
312
332
  valuePath: 'updatedAt',
313
333
  sortParam: 'updated_at',
@@ -351,6 +371,7 @@ export default class ManagementVehiclesIndexController extends Controller {
351
371
  filterParam: 'has_device',
352
372
  },
353
373
  {
374
+ id: 'row-actions',
354
375
  label: '',
355
376
  cellComponent: 'table/cell/dropdown',
356
377
  ddButtonText: false,
@@ -363,26 +384,31 @@ export default class ManagementVehiclesIndexController extends Controller {
363
384
  width: 60,
364
385
  actions: [
365
386
  {
387
+ id: 'view',
366
388
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.vehicle') }),
367
389
  fn: this.vehicleActions.transition.view,
368
390
  permission: 'fleet-ops view vehicle',
369
391
  },
370
392
  {
393
+ id: 'edit',
371
394
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.vehicle') }),
372
395
  fn: this.vehicleActions.transition.edit,
373
396
  permission: 'fleet-ops update vehicle',
374
397
  },
375
398
  {
399
+ id: 'locate',
376
400
  label: this.intl.t('vehicle.actions.locate-vehicle'),
377
401
  fn: this.vehicleActions.locate,
378
402
  permission: 'fleet-ops view vehicle',
379
403
  },
380
404
  {
405
+ id: 'attach-device',
381
406
  label: this.intl.t('vehicle.actions.attach-device'),
382
407
  fn: this.vehicleActions.attachDevice,
383
408
  permission: 'fleet-ops update vehicle',
384
409
  },
385
410
  {
411
+ id: 'unassign-orders',
386
412
  label: this.intl.t('vehicle.actions.unassign-orders'),
387
413
  fn: this.vehicleActions.unassignOrders,
388
414
  permission: 'fleet-ops update vehicle',
@@ -392,21 +418,25 @@ export default class ManagementVehiclesIndexController extends Controller {
392
418
  separator: true,
393
419
  },
394
420
  {
421
+ id: 'schedule-maintenance',
395
422
  label: this.intl.t('vehicle.actions.schedule-maintenance'),
396
423
  fn: this.vehicleActions.scheduleMaintenance,
397
424
  permission: 'fleet-ops create maintenance-schedule',
398
425
  },
399
426
  {
427
+ id: 'create-work-order',
400
428
  label: this.intl.t('vehicle.actions.create-work-order'),
401
429
  fn: this.vehicleActions.createWorkOrder,
402
430
  permission: 'fleet-ops create work-order',
403
431
  },
404
432
  {
433
+ id: 'log-maintenance',
405
434
  label: this.intl.t('vehicle.actions.log-maintenance'),
406
435
  fn: this.vehicleActions.logMaintenance,
407
436
  permission: 'fleet-ops create maintenance',
408
437
  },
409
438
  {
439
+ id: 'create-issue',
410
440
  label: this.intl.t('vehicle.actions.create-issue'),
411
441
  fn: this.createIssue,
412
442
  permission: 'fleet-ops create issue',
@@ -415,6 +445,7 @@ export default class ManagementVehiclesIndexController extends Controller {
415
445
  separator: true,
416
446
  },
417
447
  {
448
+ id: 'delete',
418
449
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.vehicle') }),
419
450
  fn: this.vehicleActions.delete,
420
451
  permission: 'fleet-ops delete vehicle',