@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
@@ -18,6 +18,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
18
18
  get columns() {
19
19
  return [
20
20
  {
21
+ id: 'name',
21
22
  sticky: true,
22
23
  label: this.intl.t('column.name'),
23
24
  valuePath: 'name',
@@ -31,6 +32,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
31
32
  filterComponent: 'filter/string',
32
33
  },
33
34
  {
35
+ id: 'public-id',
34
36
  label: this.intl.t('column.id'),
35
37
  valuePath: 'public_id',
36
38
  cellComponent: 'click-to-copy',
@@ -41,6 +43,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
41
43
  filterComponent: 'filter/string',
42
44
  },
43
45
  {
46
+ id: 'internal-id',
44
47
  label: this.intl.t('column.internal-id'),
45
48
  valuePath: 'internal_id',
46
49
  cellComponent: 'click-to-copy',
@@ -51,6 +54,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
51
54
  filterComponent: 'filter/string',
52
55
  },
53
56
  {
57
+ id: 'title',
54
58
  label: this.intl.t('column.title'),
55
59
  valuePath: 'title',
56
60
  cellComponent: 'click-to-copy',
@@ -62,6 +66,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
62
66
  filterComponent: 'filter/string',
63
67
  },
64
68
  {
69
+ id: 'email',
65
70
  label: this.intl.t('column.email'),
66
71
  valuePath: 'email',
67
72
  cellComponent: 'click-to-copy',
@@ -72,6 +77,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
72
77
  filterComponent: 'filter/string',
73
78
  },
74
79
  {
80
+ id: 'phone',
75
81
  label: this.intl.t('column.phone'),
76
82
  valuePath: 'phone',
77
83
  cellComponent: 'click-to-copy',
@@ -82,6 +88,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
82
88
  filterComponent: 'filter/string',
83
89
  },
84
90
  {
91
+ id: 'address',
85
92
  label: this.intl.t('column.address'),
86
93
  valuePath: 'address',
87
94
  cellComponent: 'cell/place-identity',
@@ -94,6 +101,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
94
101
  filterComponent: 'filter/string',
95
102
  },
96
103
  {
104
+ id: 'created-at',
97
105
  label: this.intl.t('column.created'),
98
106
  valuePath: 'createdAt',
99
107
  sortParam: 'created_at',
@@ -104,6 +112,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
104
112
  filterComponent: 'filter/date',
105
113
  },
106
114
  {
115
+ id: 'updated-at',
107
116
  label: this.intl.t('column.updated'),
108
117
  valuePath: 'updatedAt',
109
118
  sortParam: 'updated_at',
@@ -115,6 +124,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
115
124
  filterComponent: 'filter/date',
116
125
  },
117
126
  {
127
+ id: 'row-actions',
118
128
  label: '',
119
129
  cellComponent: 'table/cell/dropdown',
120
130
  ddButtonText: false,
@@ -127,12 +137,14 @@ export default class ManagementContactsCustomersController extends ManagementCon
127
137
  width: 60,
128
138
  actions: [
129
139
  {
140
+ id: 'view',
130
141
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.customer') }),
131
142
  icon: 'eye',
132
143
  fn: this.customerActions.transition.view,
133
144
  permission: 'fleet-ops view contact',
134
145
  },
135
146
  {
147
+ id: 'edit',
136
148
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.customer') }),
137
149
  icon: 'pencil',
138
150
  fn: this.customerActions.transition.edit,
@@ -146,6 +158,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
146
158
  separator: true,
147
159
  },
148
160
  {
161
+ id: 'delete',
149
162
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.customer') }),
150
163
  icon: 'trash',
151
164
  fn: this.customerActions.delete,
@@ -12,7 +12,28 @@ export default class ManagementContactsIndexController extends Controller {
12
12
  @service appCache;
13
13
 
14
14
  /** query params */
15
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'created_by', 'updated_by', 'status', 'title', 'email', 'phone'];
15
+ /**
16
+ * This tab's table registry, e.g. `fleet-ops:contact:table`. The contacts
17
+ * header (`management/contacts.hbs`) renders for whichever tab is open.
18
+ */
19
+ get tableRegistry() {
20
+ return this.contactActions.tableRegistry;
21
+ }
22
+
23
+ @tracked queryParams = this.contactActions.queryParamsFor([
24
+ 'page',
25
+ 'limit',
26
+ 'sort',
27
+ 'query',
28
+ 'public_id',
29
+ 'internal_id',
30
+ 'created_by',
31
+ 'updated_by',
32
+ 'status',
33
+ 'title',
34
+ 'email',
35
+ 'phone',
36
+ ]);
16
37
  @tracked page = 1;
17
38
  @tracked limit;
18
39
  @tracked sort = '-created_at';
@@ -34,16 +55,19 @@ export default class ManagementContactsIndexController extends Controller {
34
55
  get actionButtons() {
35
56
  return [
36
57
  {
58
+ id: 'more',
37
59
  component: 'dropdown-button',
38
60
  icon: 'display',
39
61
  size: 'xs',
40
62
  items: [
41
63
  {
64
+ id: 'table-view',
42
65
  label: this.intl.t('common.table-view'),
43
66
  icon: 'table-list',
44
67
  onClick: () => this.setLayout('table'),
45
68
  },
46
69
  {
70
+ id: 'grid-view',
47
71
  label: this.intl.t('common.grid-view'),
48
72
  icon: 'grip',
49
73
  onClick: () => this.setLayout('grid'),
@@ -53,11 +77,13 @@ export default class ManagementContactsIndexController extends Controller {
53
77
  helpText: this.intl.t('common.change-layout'),
54
78
  },
55
79
  {
80
+ id: 'refresh',
56
81
  icon: 'refresh',
57
82
  onClick: this.contactActions.refresh,
58
83
  helpText: this.intl.t('common.refresh'),
59
84
  },
60
85
  {
86
+ id: 'create',
61
87
  text: this.intl.t('common.new'),
62
88
  type: 'primary',
63
89
  icon: 'plus',
@@ -65,6 +91,7 @@ export default class ManagementContactsIndexController extends Controller {
65
91
  permission: 'fleet-ops create contact',
66
92
  },
67
93
  {
94
+ id: 'import',
68
95
  text: this.intl.t('common.import'),
69
96
  type: 'magic',
70
97
  icon: 'upload',
@@ -72,6 +99,7 @@ export default class ManagementContactsIndexController extends Controller {
72
99
  permission: 'fleet-ops import contact',
73
100
  },
74
101
  {
102
+ id: 'export',
75
103
  text: this.intl.t('common.export'),
76
104
  icon: 'long-arrow-up',
77
105
  iconClass: 'rotate-icon-45',
@@ -88,6 +116,7 @@ export default class ManagementContactsIndexController extends Controller {
88
116
 
89
117
  return [
90
118
  {
119
+ id: 'bulk-delete',
91
120
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
92
121
  class: 'text-red-500',
93
122
  fn: this.contactActions.bulkDelete,
@@ -100,6 +129,7 @@ export default class ManagementContactsIndexController extends Controller {
100
129
  get columns() {
101
130
  return [
102
131
  {
132
+ id: 'name',
103
133
  sticky: true,
104
134
  label: this.intl.t('column.name'),
105
135
  valuePath: 'name',
@@ -112,6 +142,7 @@ export default class ManagementContactsIndexController extends Controller {
112
142
  filterComponent: 'filter/string',
113
143
  },
114
144
  {
145
+ id: 'public-id',
115
146
  label: this.intl.t('column.id'),
116
147
  valuePath: 'public_id',
117
148
  cellComponent: 'click-to-copy',
@@ -121,6 +152,7 @@ export default class ManagementContactsIndexController extends Controller {
121
152
  filterComponent: 'filter/string',
122
153
  },
123
154
  {
155
+ id: 'internal-id',
124
156
  label: this.intl.t('column.internal-id'),
125
157
  valuePath: 'internal_id',
126
158
  cellComponent: 'click-to-copy',
@@ -130,6 +162,7 @@ export default class ManagementContactsIndexController extends Controller {
130
162
  filterComponent: 'filter/string',
131
163
  },
132
164
  {
165
+ id: 'title',
133
166
  label: this.intl.t('column.title'),
134
167
  valuePath: 'title',
135
168
  cellComponent: 'click-to-copy',
@@ -140,6 +173,7 @@ export default class ManagementContactsIndexController extends Controller {
140
173
  filterComponent: 'filter/string',
141
174
  },
142
175
  {
176
+ id: 'email',
143
177
  label: this.intl.t('column.email'),
144
178
  valuePath: 'email',
145
179
  cellComponent: 'click-to-copy',
@@ -149,6 +183,7 @@ export default class ManagementContactsIndexController extends Controller {
149
183
  filterComponent: 'filter/string',
150
184
  },
151
185
  {
186
+ id: 'phone',
152
187
  label: this.intl.t('column.phone'),
153
188
  valuePath: 'phone',
154
189
  cellComponent: 'click-to-copy',
@@ -158,6 +193,7 @@ export default class ManagementContactsIndexController extends Controller {
158
193
  filterComponent: 'filter/string',
159
194
  },
160
195
  {
196
+ id: 'address',
161
197
  label: this.intl.t('column.address'),
162
198
  valuePath: 'address',
163
199
  cellComponent: 'cell/place-identity',
@@ -170,6 +206,7 @@ export default class ManagementContactsIndexController extends Controller {
170
206
  filterComponent: 'filter/string',
171
207
  },
172
208
  {
209
+ id: 'created-at',
173
210
  label: this.intl.t('column.created'),
174
211
  valuePath: 'createdAt',
175
212
  sortParam: 'created_at',
@@ -179,6 +216,7 @@ export default class ManagementContactsIndexController extends Controller {
179
216
  filterComponent: 'filter/date',
180
217
  },
181
218
  {
219
+ id: 'updated-at',
182
220
  label: this.intl.t('column.updated'),
183
221
  valuePath: 'updatedAt',
184
222
  sortParam: 'updated_at',
@@ -189,6 +227,7 @@ export default class ManagementContactsIndexController extends Controller {
189
227
  filterComponent: 'filter/date',
190
228
  },
191
229
  {
230
+ id: 'row-actions',
192
231
  label: '',
193
232
  cellComponent: 'table/cell/dropdown',
194
233
  ddButtonText: false,
@@ -201,12 +240,14 @@ export default class ManagementContactsIndexController extends Controller {
201
240
  width: 60,
202
241
  actions: [
203
242
  {
243
+ id: 'view',
204
244
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.contact') }),
205
245
  icon: 'eye',
206
246
  fn: this.contactActions.transition.view,
207
247
  permission: 'fleet-ops view contact',
208
248
  },
209
249
  {
250
+ id: 'edit',
210
251
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.contact') }),
211
252
  icon: 'pencil',
212
253
  fn: this.contactActions.transition.edit,
@@ -220,6 +261,7 @@ export default class ManagementContactsIndexController extends Controller {
220
261
  separator: true,
221
262
  },
222
263
  {
264
+ id: 'delete',
223
265
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.contact') }),
224
266
  icon: 'trash',
225
267
  fn: this.contactActions.delete,
@@ -39,6 +39,7 @@ export default class ManagementDriverIndexDetailsController extends Controller {
39
39
  permission: 'fleet-ops update driver',
40
40
  },
41
41
  {
42
+ id: 'more',
42
43
  icon: 'ellipsis-h',
43
44
  iconPrefix: 'fas',
44
45
  renderInPlace: true,
@@ -17,7 +17,7 @@ export default class ManagementDriversIndexController extends Controller {
17
17
  @service appCache;
18
18
 
19
19
  /** query params */
20
- @tracked queryParams = [
20
+ @tracked queryParams = this.driverActions.queryParamsFor([
21
21
  'page',
22
22
  'limit',
23
23
  'sort',
@@ -34,7 +34,7 @@ export default class ManagementDriversIndexController extends Controller {
34
34
  'created_at',
35
35
  'updated_at',
36
36
  'status',
37
- ];
37
+ ]);
38
38
  @tracked page = 1;
39
39
  @tracked limit;
40
40
  @tracked sort = '-created_at';
@@ -75,16 +75,19 @@ export default class ManagementDriversIndexController 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.changeLayout('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.changeLayout('grid'),
@@ -94,11 +97,13 @@ export default class ManagementDriversIndexController extends Controller {
94
97
  helpText: 'Change the layout',
95
98
  },
96
99
  {
100
+ id: 'refresh',
97
101
  icon: 'refresh',
98
102
  onClick: this.driverActions.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 ManagementDriversIndexController extends Controller {
106
111
  permission: 'fleet-ops create driver',
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 ManagementDriversIndexController extends Controller {
113
119
  permission: 'fleet-ops import driver',
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 ManagementDriversIndexController 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.driverActions.bulkDelete,
@@ -141,6 +149,7 @@ export default class ManagementDriversIndexController extends Controller {
141
149
  get columns() {
142
150
  return [
143
151
  {
152
+ id: 'name',
144
153
  sticky: true,
145
154
  label: this.intl.t('column.name'),
146
155
  valuePath: 'name',
@@ -153,6 +162,7 @@ export default class ManagementDriversIndexController extends Controller {
153
162
  filterComponent: 'filter/string',
154
163
  },
155
164
  {
165
+ id: 'public-id',
156
166
  label: this.intl.t('column.id'),
157
167
  valuePath: 'public_id',
158
168
  cellComponent: 'click-to-copy',
@@ -163,6 +173,7 @@ export default class ManagementDriversIndexController extends Controller {
163
173
  filterComponent: 'filter/string',
164
174
  },
165
175
  {
176
+ id: 'phone',
166
177
  label: this.intl.t('column.phone'),
167
178
  valuePath: 'phone',
168
179
  cellComponent: 'table/cell/base',
@@ -173,6 +184,7 @@ export default class ManagementDriversIndexController extends Controller {
173
184
  filterComponent: 'filter/string',
174
185
  },
175
186
  {
187
+ id: 'drivers-license-number',
176
188
  label: this.intl.t('column.license'),
177
189
  valuePath: 'drivers_license_number',
178
190
  cellComponent: 'table/cell/base',
@@ -182,6 +194,7 @@ export default class ManagementDriversIndexController extends Controller {
182
194
  filterComponent: 'filter/string',
183
195
  },
184
196
  {
197
+ id: 'vehicle-display-name',
185
198
  label: this.intl.t('column.vehicle'),
186
199
  cellComponent: 'cell/vehicle-identity',
187
200
  permission: 'fleet-ops view vehicle',
@@ -206,6 +219,7 @@ export default class ManagementDriversIndexController extends Controller {
206
219
  model: 'vehicle',
207
220
  },
208
221
  {
222
+ id: 'internal-id',
209
223
  label: this.intl.t('column.internal-id'),
210
224
  valuePath: 'internal_id',
211
225
  cellComponent: 'click-to-copy',
@@ -215,6 +229,7 @@ export default class ManagementDriversIndexController extends Controller {
215
229
  filterComponent: 'filter/string',
216
230
  },
217
231
  {
232
+ id: 'vendor-name',
218
233
  label: this.intl.t('column.vendor'),
219
234
  cellComponent: 'cell/vendor-identity',
220
235
  permission: 'fleet-ops view vendor',
@@ -233,6 +248,7 @@ export default class ManagementDriversIndexController extends Controller {
233
248
  model: 'vendor',
234
249
  },
235
250
  {
251
+ id: 'fleets',
236
252
  label: this.intl.t('column.fleet'),
237
253
  cellComponent: 'table/cell/link-list',
238
254
  cellComponentLabelPath: 'name',
@@ -247,6 +263,7 @@ export default class ManagementDriversIndexController extends Controller {
247
263
  model: 'fleet',
248
264
  },
249
265
  {
266
+ id: 'country',
250
267
  label: this.intl.t('column.country'),
251
268
  valuePath: 'country',
252
269
  cellComponent: 'table/cell/country',
@@ -264,6 +281,7 @@ export default class ManagementDriversIndexController extends Controller {
264
281
  multiOptionSearchPlaceholder: this.intl.t('common.search-countries'),
265
282
  },
266
283
  {
284
+ id: 'status',
267
285
  label: this.intl.t('column.status'),
268
286
  valuePath: 'status',
269
287
  cellComponent: 'table/cell/status',
@@ -274,6 +292,7 @@ export default class ManagementDriversIndexController extends Controller {
274
292
  filterFetchOptions: 'drivers/statuses',
275
293
  },
276
294
  {
295
+ id: 'created-at',
277
296
  label: this.intl.t('column.created-at'),
278
297
  valuePath: 'createdAt',
279
298
  sortParam: 'created_at',
@@ -284,6 +303,7 @@ export default class ManagementDriversIndexController extends Controller {
284
303
  filterComponent: 'filter/date',
285
304
  },
286
305
  {
306
+ id: 'updated-at',
287
307
  label: this.intl.t('column.updated-at'),
288
308
  valuePath: 'updatedAt',
289
309
  sortParam: 'updated_at',
@@ -295,6 +315,7 @@ export default class ManagementDriversIndexController extends Controller {
295
315
  filterComponent: 'filter/date',
296
316
  },
297
317
  {
318
+ id: 'row-actions',
298
319
  label: '',
299
320
  cellComponent: 'table/cell/dropdown',
300
321
  ddButtonText: false,
@@ -307,12 +328,14 @@ export default class ManagementDriversIndexController extends Controller {
307
328
  width: 60,
308
329
  actions: [
309
330
  {
331
+ id: 'view',
310
332
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.driver') }),
311
333
  icon: 'eye',
312
334
  fn: this.driverActions.transition.view,
313
335
  permission: 'fleet-ops view driver',
314
336
  },
315
337
  {
338
+ id: 'edit',
316
339
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.driver') }),
317
340
  icon: 'pencil',
318
341
  fn: this.driverActions.transition.edit,
@@ -322,18 +345,21 @@ export default class ManagementDriversIndexController extends Controller {
322
345
  separator: true,
323
346
  },
324
347
  {
348
+ id: 'assign-order',
325
349
  label: this.intl.t('driver.actions.assign-order'),
326
350
  icon: 'clipboard-list',
327
351
  fn: this.driverActions.assignOrder,
328
352
  permission: 'fleet-ops assign-order-for driver',
329
353
  },
330
354
  {
355
+ id: 'assign-vehicle',
331
356
  label: this.intl.t('driver.actions.assign-vehicle'),
332
357
  icon: 'car',
333
358
  fn: this.driverActions.assignVehicle,
334
359
  permission: 'fleet-ops assign-vehicle-for driver',
335
360
  },
336
361
  {
362
+ id: 'unassign-orders',
337
363
  label: this.intl.t('driver.actions.unassign-orders'),
338
364
  icon: 'user-minus',
339
365
  fn: this.driverActions.unassignOrders,
@@ -341,6 +367,7 @@ export default class ManagementDriversIndexController extends Controller {
341
367
  isVisible: (driver) => Number(driver.assigned_orders_count) > 0,
342
368
  },
343
369
  {
370
+ id: 'unassign-vehicle',
344
371
  label: this.intl.t('driver.actions.unassign-vehicle'),
345
372
  icon: 'link-slash',
346
373
  fn: this.driverActions.unassignVehicle,
@@ -348,12 +375,14 @@ export default class ManagementDriversIndexController extends Controller {
348
375
  isVisible: (driver) => this.hasAssignedVehicle(driver),
349
376
  },
350
377
  {
378
+ id: 'locate',
351
379
  label: this.intl.t('driver.actions.locate-driver'),
352
380
  icon: 'location-dot',
353
381
  fn: this.driverActions.locate,
354
382
  permission: 'fleet-ops view driver',
355
383
  },
356
384
  {
385
+ id: 'create-issue',
357
386
  label: this.intl.t('driver.actions.create-issue'),
358
387
  icon: 'triangle-exclamation',
359
388
  fn: this.createIssue,
@@ -367,6 +396,7 @@ export default class ManagementDriversIndexController extends Controller {
367
396
  separator: true,
368
397
  },
369
398
  {
399
+ id: 'delete',
370
400
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.driver') }),
371
401
  icon: 'trash',
372
402
  fn: this.driverActions.delete,
@@ -35,6 +35,7 @@ export default class ManagementFleetsIndexDetailsController extends Controller {
35
35
  permission: 'fleet-ops update fleet',
36
36
  },
37
37
  {
38
+ id: 'more',
38
39
  icon: 'ellipsis-h',
39
40
  iconPrefix: 'fas',
40
41
  renderInPlace: true,