@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
@@ -65,7 +65,21 @@ export default class ConnectivitySensorsIndexController extends Controller {
65
65
  @service store;
66
66
 
67
67
  /** query params */
68
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'telematic', 'device', 'type', 'status', 'serial_number', 'imei', 'last_reading_at', 'created_at', 'updated_at'];
68
+ @tracked queryParams = this.sensorActions.queryParamsFor([
69
+ 'page',
70
+ 'limit',
71
+ 'sort',
72
+ 'query',
73
+ 'telematic',
74
+ 'device',
75
+ 'type',
76
+ 'status',
77
+ 'serial_number',
78
+ 'imei',
79
+ 'last_reading_at',
80
+ 'created_at',
81
+ 'updated_at',
82
+ ]);
69
83
  @tracked page = 1;
70
84
  @tracked limit;
71
85
  @tracked sort = '-created_at';
@@ -83,11 +97,13 @@ export default class ConnectivitySensorsIndexController extends Controller {
83
97
  /** action buttons */
84
98
  @tracked actionButtons = [
85
99
  {
100
+ id: 'refresh',
86
101
  icon: 'refresh',
87
102
  onClick: this.sensorActions.refresh,
88
103
  helpText: this.intl.t('common.refresh'),
89
104
  },
90
105
  {
106
+ id: 'create',
91
107
  text: this.intl.t('common.new'),
92
108
  type: 'primary',
93
109
  icon: 'plus',
@@ -95,6 +111,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
95
111
  permission: 'fleet-ops create sensor',
96
112
  },
97
113
  {
114
+ id: 'import',
98
115
  text: this.intl.t('common.import'),
99
116
  type: 'magic',
100
117
  icon: 'upload',
@@ -102,6 +119,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
102
119
  permission: 'fleet-ops import sensor',
103
120
  },
104
121
  {
122
+ id: 'export',
105
123
  text: this.intl.t('common.export'),
106
124
  icon: 'long-arrow-up',
107
125
  iconClass: 'rotate-icon-45',
@@ -114,6 +132,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
114
132
  /** bulk action buttons */
115
133
  @tracked bulkActions = [
116
134
  {
135
+ id: 'bulk-delete',
117
136
  label: 'Delete selected...',
118
137
  class: 'text-red-500',
119
138
  fn: this.sensorActions.bulkDelete,
@@ -124,6 +143,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
124
143
  /** columns */
125
144
  @tracked columns = [
126
145
  {
146
+ id: 'display-name',
127
147
  sticky: true,
128
148
  label: this.intl.t('column.name'),
129
149
  valuePath: 'displayName',
@@ -138,6 +158,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
138
158
  filterComponent: 'filter/string',
139
159
  },
140
160
  {
161
+ id: 'telematic-provider',
141
162
  label: 'Telematic',
142
163
  valuePath: 'telematic.provider',
143
164
  cellComponent: 'cell/telematic-identity',
@@ -153,6 +174,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
153
174
  model: 'telematic',
154
175
  },
155
176
  {
177
+ id: 'device-display-name',
156
178
  label: 'Device',
157
179
  valuePath: 'device.displayName',
158
180
  cellComponent: 'cell/device-identity',
@@ -170,6 +192,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
170
192
  query: this.telematic ? { telematic_uuid: this.telematic } : undefined,
171
193
  },
172
194
  {
195
+ id: 'type',
173
196
  label: 'Type',
174
197
  valuePath: 'type',
175
198
  cellComponent: 'table/cell/base',
@@ -184,18 +207,21 @@ export default class ConnectivitySensorsIndexController extends Controller {
184
207
  filterOptionValue: 'value',
185
208
  },
186
209
  {
210
+ id: 'last-value',
187
211
  label: 'Last Value',
188
212
  valuePath: 'last_value',
189
213
  resizable: true,
190
214
  sortable: true,
191
215
  },
192
216
  {
217
+ id: 'unit',
193
218
  label: 'Unit',
194
219
  valuePath: 'unit',
195
220
  resizable: true,
196
221
  sortable: true,
197
222
  },
198
223
  {
224
+ id: 'status',
199
225
  label: this.intl.t('column.status'),
200
226
  valuePath: 'status',
201
227
  cellComponent: 'table/cell/status',
@@ -208,6 +234,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
208
234
  filterOptionValue: 'value',
209
235
  },
210
236
  {
237
+ id: 'threshold-status',
211
238
  label: 'Threshold',
212
239
  valuePath: 'threshold_status',
213
240
  cellComponent: 'table/cell/status',
@@ -215,6 +242,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
215
242
  sortable: true,
216
243
  },
217
244
  {
245
+ id: 'serial-number',
218
246
  label: 'Serial Number',
219
247
  valuePath: 'serial_number',
220
248
  resizable: true,
@@ -224,6 +252,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
224
252
  filterComponent: 'filter/string',
225
253
  },
226
254
  {
255
+ id: 'imei',
227
256
  label: 'IMEI',
228
257
  valuePath: 'imei',
229
258
  resizable: true,
@@ -233,6 +262,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
233
262
  filterComponent: 'filter/string',
234
263
  },
235
264
  {
265
+ id: 'last-reading-at',
236
266
  label: 'Last Reading',
237
267
  valuePath: 'lastReadingAt',
238
268
  sortParam: 'last_reading_at',
@@ -243,6 +273,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
243
273
  filterComponent: 'filter/date',
244
274
  },
245
275
  {
276
+ id: 'created-at',
246
277
  label: this.intl.t('column.created-at'),
247
278
  valuePath: 'createdAt',
248
279
  sortParam: 'created_at',
@@ -253,6 +284,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
253
284
  filterComponent: 'filter/date',
254
285
  },
255
286
  {
287
+ id: 'updated-at',
256
288
  label: this.intl.t('column.updated-at'),
257
289
  valuePath: 'updatedAt',
258
290
  sortParam: 'updated_at',
@@ -264,6 +296,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
264
296
  filterComponent: 'filter/date',
265
297
  },
266
298
  {
299
+ id: 'row-actions',
267
300
  label: '',
268
301
  cellComponent: 'table/cell/dropdown',
269
302
  ddButtonText: false,
@@ -276,11 +309,13 @@ export default class ConnectivitySensorsIndexController extends Controller {
276
309
  width: 60,
277
310
  actions: [
278
311
  {
312
+ id: 'view',
279
313
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.sensor') }),
280
314
  fn: this.sensorActions.transition.view,
281
315
  permission: 'fleet-ops view sensor',
282
316
  },
283
317
  {
318
+ id: 'edit',
284
319
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.sensor') }),
285
320
  fn: this.sensorActions.transition.edit,
286
321
  permission: 'fleet-ops update sensor',
@@ -289,6 +324,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
289
324
  separator: true,
290
325
  },
291
326
  {
327
+ id: 'delete',
292
328
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.sensor') }),
293
329
  fn: this.sensorActions.delete,
294
330
  permission: 'fleet-ops delete sensor',
@@ -19,8 +19,8 @@ export default class MaintenanceEquipmentIndexDetailsController extends Controll
19
19
 
20
20
  get actionButtons() {
21
21
  return [
22
- { icon: 'edit', fn: this.edit, permission: 'fleet-ops update equipment' },
23
- { icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete equipment' },
22
+ { id: 'edit', icon: 'edit', fn: this.edit, permission: 'fleet-ops update equipment' },
23
+ { id: 'delete', icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete equipment' },
24
24
  ];
25
25
  }
26
26
 
@@ -7,7 +7,7 @@ export default class MaintenanceEquipmentIndexController extends Controller {
7
7
  @service intl;
8
8
  @service appCache;
9
9
 
10
- @tracked queryParams = ['type', 'status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
10
+ @tracked queryParams = this.equipmentActions.queryParamsFor(['type', 'status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
11
11
  @tracked page = 1;
12
12
  @tracked limit;
13
13
  @tracked sort = '-created_at';
@@ -21,6 +21,7 @@ export default class MaintenanceEquipmentIndexController extends Controller {
21
21
  get actionButtons() {
22
22
  return [
23
23
  {
24
+ id: 'more',
24
25
  component: 'dropdown-button',
25
26
  icon: 'display',
26
27
  size: 'xs',
@@ -45,10 +46,11 @@ export default class MaintenanceEquipmentIndexController extends Controller {
45
46
  renderInPlace: true,
46
47
  helpText: 'Change the layout',
47
48
  },
48
- { icon: 'refresh', onClick: this.equipmentActions.refresh, helpText: this.intl.t('common.refresh') },
49
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.equipmentActions.transition.create, permission: 'fleet-ops create equipment' },
50
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.equipmentActions.import, permission: 'fleet-ops import equipment' },
49
+ { id: 'refresh', icon: 'refresh', onClick: this.equipmentActions.refresh, helpText: this.intl.t('common.refresh') },
50
+ { id: 'create', text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.equipmentActions.transition.create, permission: 'fleet-ops create equipment' },
51
+ { id: 'import', text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.equipmentActions.import, permission: 'fleet-ops import equipment' },
51
52
  {
53
+ id: 'export',
52
54
  text: this.intl.t('common.export'),
53
55
  icon: 'long-arrow-up',
54
56
  iconClass: 'rotate-icon-45',
@@ -60,12 +62,13 @@ export default class MaintenanceEquipmentIndexController extends Controller {
60
62
  }
61
63
 
62
64
  get bulkActions() {
63
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.equipmentActions.bulkDelete, permission: 'fleet-ops delete equipment' }];
65
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.equipmentActions.bulkDelete, permission: 'fleet-ops delete equipment' }];
64
66
  }
65
67
 
66
68
  get columns() {
67
69
  return [
68
70
  {
71
+ id: 'name',
69
72
  label: this.intl.t('column.name'),
70
73
  valuePath: 'name',
71
74
  cellComponent: 'cell/equipment-identity',
@@ -77,8 +80,9 @@ export default class MaintenanceEquipmentIndexController extends Controller {
77
80
  filterParam: 'name',
78
81
  filterComponent: 'filter/string',
79
82
  },
80
- { label: this.intl.t('column.code'), valuePath: 'code', resizable: true, sortable: true, filterable: true, filterParam: 'code', filterComponent: 'filter/string' },
83
+ { id: 'code', label: this.intl.t('column.code'), valuePath: 'code', resizable: true, sortable: true, filterable: true, filterParam: 'code', filterComponent: 'filter/string' },
81
84
  {
85
+ id: 'type',
82
86
  label: this.intl.t('column.type'),
83
87
  valuePath: 'type',
84
88
  cellComponent: 'table/cell/base',
@@ -90,6 +94,7 @@ export default class MaintenanceEquipmentIndexController extends Controller {
90
94
  filterComponent: 'filter/string',
91
95
  },
92
96
  {
97
+ id: 'status',
93
98
  label: this.intl.t('column.status'),
94
99
  valuePath: 'status',
95
100
  cellComponent: 'table/cell/status',
@@ -99,10 +104,20 @@ export default class MaintenanceEquipmentIndexController extends Controller {
99
104
  filterParam: 'status',
100
105
  filterComponent: 'filter/string',
101
106
  },
102
- { label: this.intl.t('column.serial-number'), valuePath: 'serial_number', resizable: true, sortable: true },
103
- { label: this.intl.t('column.manufacturer'), valuePath: 'manufacturer', resizable: true, sortable: true },
104
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
107
+ { id: 'serial-number', label: this.intl.t('column.serial-number'), valuePath: 'serial_number', resizable: true, sortable: true },
108
+ { id: 'manufacturer', label: this.intl.t('column.manufacturer'), valuePath: 'manufacturer', resizable: true, sortable: true },
105
109
  {
110
+ id: 'created-at',
111
+ label: this.intl.t('column.created-at'),
112
+ valuePath: 'createdAt',
113
+ sortParam: 'created_at',
114
+ resizable: true,
115
+ sortable: true,
116
+ filterable: true,
117
+ filterComponent: 'filter/date',
118
+ },
119
+ {
120
+ id: 'updated-at',
106
121
  label: this.intl.t('column.updated-at'),
107
122
  valuePath: 'updatedAt',
108
123
  sortParam: 'updated_at',
@@ -113,6 +128,7 @@ export default class MaintenanceEquipmentIndexController extends Controller {
113
128
  filterComponent: 'filter/date',
114
129
  },
115
130
  {
131
+ id: 'row-actions',
116
132
  label: '',
117
133
  cellComponent: 'table/cell/dropdown',
118
134
  ddButtonText: false,
@@ -123,17 +139,20 @@ export default class MaintenanceEquipmentIndexController extends Controller {
123
139
  wrapperClass: 'flex items-center justify-end mx-2',
124
140
  actions: [
125
141
  {
142
+ id: 'view',
126
143
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.equipment') }),
127
144
  fn: this.equipmentActions.transition.view,
128
145
  permission: 'fleet-ops view equipment',
129
146
  },
130
147
  {
148
+ id: 'edit',
131
149
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.equipment') }),
132
150
  fn: this.equipmentActions.transition.edit,
133
151
  permission: 'fleet-ops update equipment',
134
152
  },
135
153
  { separator: true },
136
154
  {
155
+ id: 'delete',
137
156
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.equipment') }),
138
157
  fn: this.equipmentActions.delete,
139
158
  permission: 'fleet-ops delete equipment',
@@ -6,7 +6,7 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
6
6
  @service inspectionFormActions;
7
7
  @service intl;
8
8
 
9
- @tracked queryParams = ['status', 'type', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
9
+ @tracked queryParams = this.inspectionFormActions.queryParamsFor(['status', 'type', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
10
10
  @tracked page = 1;
11
11
  @tracked limit;
12
12
  @tracked sort = '-created_at';
@@ -16,18 +16,26 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
16
16
 
17
17
  get actionButtons() {
18
18
  return [
19
- { icon: 'refresh', onClick: this.inspectionFormActions.refresh, helpText: this.intl.t('common.refresh') },
20
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.inspectionFormActions.transition.create, permission: 'fleet-ops create inspection-form' },
19
+ { id: 'refresh', icon: 'refresh', onClick: this.inspectionFormActions.refresh, helpText: this.intl.t('common.refresh') },
20
+ {
21
+ id: 'create',
22
+ text: this.intl.t('common.new'),
23
+ type: 'primary',
24
+ icon: 'plus',
25
+ onClick: this.inspectionFormActions.transition.create,
26
+ permission: 'fleet-ops create inspection-form',
27
+ },
21
28
  ];
22
29
  }
23
30
 
24
31
  get bulkActions() {
25
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.inspectionFormActions.bulkDelete, permission: 'fleet-ops delete inspection-form' }];
32
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.inspectionFormActions.bulkDelete, permission: 'fleet-ops delete inspection-form' }];
26
33
  }
27
34
 
28
35
  get columns() {
29
36
  return [
30
37
  {
38
+ id: 'name',
31
39
  label: 'Name',
32
40
  valuePath: 'name',
33
41
  cellComponent: 'table/cell/anchor',
@@ -40,6 +48,7 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
40
48
  filterComponent: 'filter/string',
41
49
  },
42
50
  {
51
+ id: 'type',
43
52
  label: 'Type',
44
53
  valuePath: 'type',
45
54
  cellComponent: 'table/cell/fleet-ops-option',
@@ -51,6 +60,7 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
51
60
  filterComponent: 'filter/string',
52
61
  },
53
62
  {
63
+ id: 'status',
54
64
  label: 'Status',
55
65
  valuePath: 'status',
56
66
  cellComponent: 'table/cell/status',
@@ -60,9 +70,19 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
60
70
  filterParam: 'status',
61
71
  filterComponent: 'filter/string',
62
72
  },
63
- { label: 'Items', valuePath: 'item_count', resizable: true, sortable: false },
64
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
73
+ { id: 'item-count', label: 'Items', valuePath: 'item_count', resizable: true, sortable: false },
74
+ {
75
+ id: 'created-at',
76
+ label: this.intl.t('column.created-at'),
77
+ valuePath: 'createdAt',
78
+ sortParam: 'created_at',
79
+ resizable: true,
80
+ sortable: true,
81
+ filterable: true,
82
+ filterComponent: 'filter/date',
83
+ },
65
84
  {
85
+ id: 'row-actions',
66
86
  label: '',
67
87
  cellComponent: 'table/cell/dropdown',
68
88
  ddButtonText: false,
@@ -71,14 +91,14 @@ export default class MaintenanceInspectionFormsIndexController extends Controlle
71
91
  cellClassNames: 'overflow-visible',
72
92
  wrapperClass: 'flex items-center justify-end mx-2',
73
93
  actions: [
74
- { label: 'View form', fn: this.inspectionFormActions.transition.view, permission: 'fleet-ops view inspection-form' },
75
- { label: 'Edit form', fn: this.inspectionFormActions.transition.edit, permission: 'fleet-ops update inspection-form' },
94
+ { id: 'view', label: 'View form', fn: this.inspectionFormActions.transition.view, permission: 'fleet-ops view inspection-form' },
95
+ { id: 'edit', label: 'Edit form', fn: this.inspectionFormActions.transition.edit, permission: 'fleet-ops update inspection-form' },
76
96
  { separator: true },
77
- { label: 'Publish', fn: this.inspectionFormActions.publish, permission: 'fleet-ops publish inspection-form' },
78
- { label: 'Archive', fn: this.inspectionFormActions.archive, permission: 'fleet-ops archive inspection-form' },
79
- { label: 'Generate inspection link', fn: this.inspectionFormActions.generateLink, permission: 'fleet-ops view inspection-form' },
97
+ { id: 'publish', label: 'Publish', fn: this.inspectionFormActions.publish, permission: 'fleet-ops publish inspection-form' },
98
+ { id: 'archive', label: 'Archive', fn: this.inspectionFormActions.archive, permission: 'fleet-ops archive inspection-form' },
99
+ { id: 'generate-link', label: 'Generate inspection link', fn: this.inspectionFormActions.generateLink, permission: 'fleet-ops view inspection-form' },
80
100
  { separator: true },
81
- { label: 'Delete form', fn: this.inspectionFormActions.delete, class: 'text-red-500', permission: 'fleet-ops delete inspection-form' },
101
+ { id: 'delete', label: 'Delete form', fn: this.inspectionFormActions.delete, class: 'text-red-500', permission: 'fleet-ops delete inspection-form' },
82
102
  ],
83
103
  sortable: false,
84
104
  filterable: false,
@@ -24,8 +24,9 @@ export default class MaintenanceInspectionSubmissionsIndexDetailsController exte
24
24
  */
25
25
  get actionButtons() {
26
26
  return [
27
- { icon: 'edit', fn: this.edit, permission: 'fleet-ops update inspection-submission' },
27
+ { id: 'edit', icon: 'edit', fn: this.edit, permission: 'fleet-ops update inspection-submission' },
28
28
  {
29
+ id: 'more',
29
30
  icon: 'ellipsis-h',
30
31
  iconPrefix: 'fas',
31
32
  renderInPlace: true,
@@ -9,7 +9,20 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
9
9
  @service inspectionSubmissionActions;
10
10
  @service intl;
11
11
 
12
- @tracked queryParams = ['status', 'result', 'type', 'page', 'limit', 'sort', 'query', 'public_id', 'vehicle', 'driver', 'created_at', 'updated_at'];
12
+ @tracked queryParams = this.inspectionSubmissionActions.queryParamsFor([
13
+ 'status',
14
+ 'result',
15
+ 'type',
16
+ 'page',
17
+ 'limit',
18
+ 'sort',
19
+ 'query',
20
+ 'public_id',
21
+ 'vehicle',
22
+ 'driver',
23
+ 'created_at',
24
+ 'updated_at',
25
+ ]);
13
26
  @tracked page = 1;
14
27
  @tracked limit;
15
28
  @tracked sort = '-created_at';
@@ -22,8 +35,9 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
22
35
 
23
36
  get actionButtons() {
24
37
  return [
25
- { icon: 'refresh', onClick: this.inspectionSubmissionActions.refresh, helpText: this.intl.t('common.refresh') },
38
+ { id: 'refresh', icon: 'refresh', onClick: this.inspectionSubmissionActions.refresh, helpText: this.intl.t('common.refresh') },
26
39
  {
40
+ id: 'create',
27
41
  text: this.intl.t('common.new'),
28
42
  type: 'primary',
29
43
  icon: 'plus',
@@ -34,12 +48,15 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
34
48
  }
35
49
 
36
50
  get bulkActions() {
37
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.inspectionSubmissionActions.bulkDelete, permission: 'fleet-ops delete inspection-submission' }];
51
+ return [
52
+ { id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.inspectionSubmissionActions.bulkDelete, permission: 'fleet-ops delete inspection-submission' },
53
+ ];
38
54
  }
39
55
 
40
56
  get columns() {
41
57
  return [
42
58
  {
59
+ id: 'public-id',
43
60
  label: 'Inspection',
44
61
  valuePath: 'public_id',
45
62
  cellComponent: 'table/cell/anchor',
@@ -52,6 +69,7 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
52
69
  filterComponent: 'filter/string',
53
70
  },
54
71
  {
72
+ id: 'form-name',
55
73
  label: 'Form',
56
74
  valuePath: 'form_name',
57
75
  cellComponent: 'cell/inspection-form-identity',
@@ -61,6 +79,7 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
61
79
  sortable: false,
62
80
  },
63
81
  {
82
+ id: 'vehicle-name',
64
83
  label: 'Vehicle',
65
84
  valuePath: 'vehicle_name',
66
85
  cellComponent: 'cell/vehicle-identity',
@@ -72,6 +91,7 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
72
91
  sortable: false,
73
92
  },
74
93
  {
94
+ id: 'driver-name',
75
95
  label: 'Driver',
76
96
  valuePath: 'driver_name',
77
97
  cellComponent: 'cell/driver-identity',
@@ -83,6 +103,7 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
83
103
  sortable: false,
84
104
  },
85
105
  {
106
+ id: 'result',
86
107
  label: 'Result',
87
108
  valuePath: 'result',
88
109
  cellComponent: 'table/cell/status',
@@ -92,9 +113,19 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
92
113
  filterParam: 'result',
93
114
  filterComponent: 'filter/string',
94
115
  },
95
- { label: 'Failed', valuePath: 'failed_items', resizable: true, sortable: true },
96
- { label: 'Submitted', valuePath: 'submittedAt', sortParam: 'submitted_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
116
+ { id: 'failed-items', label: 'Failed', valuePath: 'failed_items', resizable: true, sortable: true },
97
117
  {
118
+ id: 'submitted-at',
119
+ label: 'Submitted',
120
+ valuePath: 'submittedAt',
121
+ sortParam: 'submitted_at',
122
+ resizable: true,
123
+ sortable: true,
124
+ filterable: true,
125
+ filterComponent: 'filter/date',
126
+ },
127
+ {
128
+ id: 'row-actions',
98
129
  label: '',
99
130
  cellComponent: 'table/cell/dropdown',
100
131
  ddButtonText: false,
@@ -103,8 +134,8 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
103
134
  cellClassNames: 'overflow-visible',
104
135
  wrapperClass: 'flex items-center justify-end mx-2',
105
136
  actions: [
106
- { label: 'View inspection', fn: this.inspectionSubmissionActions.transition.view, permission: 'fleet-ops view inspection-submission' },
107
- { label: 'Edit inspection', fn: this.inspectionSubmissionActions.transition.edit, permission: 'fleet-ops update inspection-submission' },
137
+ { id: 'view', label: 'View inspection', fn: this.inspectionSubmissionActions.transition.view, permission: 'fleet-ops view inspection-submission' },
138
+ { id: 'edit', label: 'Edit inspection', fn: this.inspectionSubmissionActions.transition.edit, permission: 'fleet-ops update inspection-submission' },
108
139
  {
109
140
  separator: true,
110
141
  // Everything below this rule is conditional. On a row
@@ -114,6 +145,7 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
114
145
  isVisible: (row) => row?.status === 'draft' || row?.status !== 'resolved' || Boolean(row?.has_failures && (!row?.issue_uuid || !row?.work_order_uuid)),
115
146
  },
116
147
  {
148
+ id: 'submit',
117
149
  label: 'Submit',
118
150
  fn: this.inspectionSubmissionActions.submit,
119
151
  permission: 'fleet-ops submit inspection-submission',
@@ -123,20 +155,28 @@ export default class MaintenanceInspectionSubmissionsIndexController extends Con
123
155
  isVisible: (row) => row?.status === 'draft',
124
156
  },
125
157
  {
158
+ id: 'create-issue',
126
159
  label: 'Create issue',
127
160
  fn: this.inspectionSubmissionActions.createIssue,
128
161
  permission: 'fleet-ops create-issue inspection-submission',
129
162
  isVisible: (row) => row?.has_failures && !row?.issue_uuid,
130
163
  },
131
164
  {
165
+ id: 'create-work-order',
132
166
  label: 'Create work order',
133
167
  fn: this.inspectionSubmissionActions.createWorkOrder,
134
168
  permission: 'fleet-ops create-work-order inspection-submission',
135
169
  isVisible: (row) => row?.has_failures && !row?.work_order_uuid,
136
170
  },
137
- { label: 'Resolve', fn: this.inspectionSubmissionActions.resolve, permission: 'fleet-ops resolve inspection-submission', isVisible: (row) => row?.status !== 'resolved' },
171
+ {
172
+ id: 'resolve',
173
+ label: 'Resolve',
174
+ fn: this.inspectionSubmissionActions.resolve,
175
+ permission: 'fleet-ops resolve inspection-submission',
176
+ isVisible: (row) => row?.status !== 'resolved',
177
+ },
138
178
  { separator: true },
139
- { label: 'Delete inspection', fn: this.inspectionSubmissionActions.delete, class: 'text-red-500', permission: 'fleet-ops delete inspection-submission' },
179
+ { id: 'delete', label: 'Delete inspection', fn: this.inspectionSubmissionActions.delete, class: 'text-red-500', permission: 'fleet-ops delete inspection-submission' },
140
180
  ],
141
181
  sortable: false,
142
182
  filterable: false,
@@ -27,11 +27,13 @@ export default class MaintenanceMaintenancesIndexDetailsController extends Contr
27
27
  get actionButtons() {
28
28
  return [
29
29
  {
30
+ id: 'edit',
30
31
  icon: 'edit',
31
32
  fn: this.edit,
32
33
  permission: 'fleet-ops update maintenance',
33
34
  },
34
35
  {
36
+ id: 'delete',
35
37
  icon: 'trash',
36
38
  fn: this.delete,
37
39
  type: 'danger',