@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
@@ -9,7 +9,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
9
9
  @service intl;
10
10
 
11
11
  /** query params */
12
- @tracked queryParams = ['type', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
12
+ @tracked queryParams = this.maintenanceActions.queryParamsFor(['type', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
13
13
  @tracked page = 1;
14
14
  @tracked limit;
15
15
  @tracked sort = '-created_at';
@@ -22,11 +22,13 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
22
22
  get actionButtons() {
23
23
  return [
24
24
  {
25
+ id: 'refresh',
25
26
  icon: 'refresh',
26
27
  onClick: this.maintenanceActions.refresh,
27
28
  helpText: this.intl.t('common.refresh'),
28
29
  },
29
30
  {
31
+ id: 'create',
30
32
  text: this.intl.t('common.new'),
31
33
  type: 'primary',
32
34
  icon: 'plus',
@@ -34,6 +36,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
34
36
  permission: 'fleet-ops create maintenance',
35
37
  },
36
38
  {
39
+ id: 'import',
37
40
  text: this.intl.t('common.import'),
38
41
  type: 'magic',
39
42
  icon: 'upload',
@@ -41,6 +44,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
41
44
  permission: 'fleet-ops import maintenance',
42
45
  },
43
46
  {
47
+ id: 'export',
44
48
  text: this.intl.t('common.export'),
45
49
  icon: 'long-arrow-up',
46
50
  iconClass: 'rotate-icon-45',
@@ -55,6 +59,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
55
59
  get bulkActions() {
56
60
  return [
57
61
  {
62
+ id: 'bulk-delete',
58
63
  label: 'Delete selected...',
59
64
  class: 'text-red-500',
60
65
  fn: this.maintenanceActions.bulkDelete,
@@ -67,6 +72,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
67
72
  get columns() {
68
73
  return [
69
74
  {
75
+ id: 'summary',
70
76
  label: this.intl.t('column.summary'),
71
77
  valuePath: 'summary',
72
78
  cellComponent: 'table/cell/anchor',
@@ -80,6 +86,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
80
86
  filterComponent: 'filter/string',
81
87
  },
82
88
  {
89
+ id: 'maintainable-name',
83
90
  label: this.intl.t('column.asset'),
84
91
  valuePath: 'maintainable.name',
85
92
  cellComponent: 'cell/maintenance-subject-identity',
@@ -88,6 +95,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
88
95
  sortable: true,
89
96
  },
90
97
  {
98
+ id: 'performed-by-name',
91
99
  label: this.intl.t('column.performed-by'),
92
100
  valuePath: 'performed_by.name',
93
101
  cellComponent: 'cell/facilitator-identity',
@@ -96,6 +104,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
96
104
  sortable: true,
97
105
  },
98
106
  {
107
+ id: 'type',
99
108
  label: this.intl.t('column.type'),
100
109
  valuePath: 'type',
101
110
  cellComponent: 'table/cell/base',
@@ -107,6 +116,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
107
116
  filterComponent: 'filter/string',
108
117
  },
109
118
  {
119
+ id: 'status',
110
120
  label: this.intl.t('column.status'),
111
121
  valuePath: 'status',
112
122
  cellComponent: 'table/cell/status',
@@ -117,6 +127,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
117
127
  filterComponent: 'filter/string',
118
128
  },
119
129
  {
130
+ id: 'priority',
120
131
  label: this.intl.t('column.priority'),
121
132
  valuePath: 'priority',
122
133
  cellComponent: 'table/cell/base',
@@ -128,6 +139,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
128
139
  filterComponent: 'filter/string',
129
140
  },
130
141
  {
142
+ id: 'scheduled-at',
131
143
  label: this.intl.t('column.scheduled-at'),
132
144
  valuePath: 'scheduledAt',
133
145
  sortParam: 'scheduled_at',
@@ -137,6 +149,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
137
149
  filterComponent: 'filter/date',
138
150
  },
139
151
  {
152
+ id: 'total-cost',
140
153
  label: this.intl.t('column.total-cost'),
141
154
  valuePath: 'total_cost',
142
155
  cellComponent: 'table/cell/currency',
@@ -144,6 +157,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
144
157
  sortable: true,
145
158
  },
146
159
  {
160
+ id: 'created-at',
147
161
  label: this.intl.t('column.created-at'),
148
162
  valuePath: 'createdAt',
149
163
  sortParam: 'created_at',
@@ -153,6 +167,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
153
167
  filterComponent: 'filter/date',
154
168
  },
155
169
  {
170
+ id: 'updated-at',
156
171
  label: this.intl.t('column.updated-at'),
157
172
  valuePath: 'updatedAt',
158
173
  sortParam: 'updated_at',
@@ -163,6 +178,7 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
163
178
  filterComponent: 'filter/date',
164
179
  },
165
180
  {
181
+ id: 'row-actions',
166
182
  label: '',
167
183
  cellComponent: 'table/cell/dropdown',
168
184
  ddButtonText: false,
@@ -173,17 +189,20 @@ export default class MaintenanceMaintenancesIndexController extends Controller {
173
189
  wrapperClass: 'flex items-center justify-end mx-2',
174
190
  actions: [
175
191
  {
192
+ id: 'view',
176
193
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.maintenance') }),
177
194
  fn: this.maintenanceActions.transition.view,
178
195
  permission: 'fleet-ops view maintenance',
179
196
  },
180
197
  {
198
+ id: 'edit',
181
199
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.maintenance') }),
182
200
  fn: this.maintenanceActions.transition.edit,
183
201
  permission: 'fleet-ops update maintenance',
184
202
  },
185
203
  { separator: true },
186
204
  {
205
+ id: 'delete',
187
206
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.maintenance') }),
188
207
  fn: this.maintenanceActions.delete,
189
208
  permission: 'fleet-ops delete maintenance',
@@ -19,8 +19,8 @@ export default class MaintenancePartsIndexDetailsController extends Controller {
19
19
 
20
20
  get actionButtons() {
21
21
  return [
22
- { icon: 'edit', fn: this.edit, permission: 'fleet-ops update part' },
23
- { icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete part' },
22
+ { id: 'edit', icon: 'edit', fn: this.edit, permission: 'fleet-ops update part' },
23
+ { id: 'delete', icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete part' },
24
24
  ];
25
25
  }
26
26
 
@@ -7,7 +7,7 @@ export default class MaintenancePartsIndexController 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.partActions.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 MaintenancePartsIndexController 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 MaintenancePartsIndexController extends Controller {
45
46
  renderInPlace: true,
46
47
  helpText: 'Change the layout',
47
48
  },
48
- { icon: 'refresh', onClick: this.partActions.refresh, helpText: this.intl.t('common.refresh') },
49
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.partActions.transition.create, permission: 'fleet-ops create part' },
50
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.partActions.import, permission: 'fleet-ops import part' },
49
+ { id: 'refresh', icon: 'refresh', onClick: this.partActions.refresh, helpText: this.intl.t('common.refresh') },
50
+ { id: 'create', text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.partActions.transition.create, permission: 'fleet-ops create part' },
51
+ { id: 'import', text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.partActions.import, permission: 'fleet-ops import part' },
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 MaintenancePartsIndexController extends Controller {
60
62
  }
61
63
 
62
64
  get bulkActions() {
63
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.partActions.bulkDelete, permission: 'fleet-ops delete part' }];
65
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.partActions.bulkDelete, permission: 'fleet-ops delete part' }];
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/part-identity',
@@ -78,6 +81,7 @@ export default class MaintenancePartsIndexController extends Controller {
78
81
  filterComponent: 'filter/string',
79
82
  },
80
83
  {
84
+ id: 'sku',
81
85
  label: this.intl.t('column.part-number'),
82
86
  valuePath: 'sku',
83
87
  resizable: true,
@@ -87,6 +91,7 @@ export default class MaintenancePartsIndexController extends Controller {
87
91
  filterComponent: 'filter/string',
88
92
  },
89
93
  {
94
+ id: 'type',
90
95
  label: this.intl.t('column.type'),
91
96
  valuePath: 'type',
92
97
  cellComponent: 'table/cell/base',
@@ -98,6 +103,7 @@ export default class MaintenancePartsIndexController extends Controller {
98
103
  filterComponent: 'filter/string',
99
104
  },
100
105
  {
106
+ id: 'status',
101
107
  label: this.intl.t('column.status'),
102
108
  valuePath: 'status',
103
109
  cellComponent: 'table/cell/status',
@@ -107,10 +113,20 @@ export default class MaintenancePartsIndexController extends Controller {
107
113
  filterParam: 'status',
108
114
  filterComponent: 'filter/string',
109
115
  },
110
- { label: this.intl.t('column.quantity-on-hand'), valuePath: 'quantity_on_hand', resizable: true, sortable: true },
111
- { label: this.intl.t('column.unit-cost'), valuePath: 'unit_cost', cellComponent: 'table/cell/currency', resizable: true, sortable: true },
112
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
116
+ { id: 'quantity-on-hand', label: this.intl.t('column.quantity-on-hand'), valuePath: 'quantity_on_hand', resizable: true, sortable: true },
117
+ { id: 'unit-cost', label: this.intl.t('column.unit-cost'), valuePath: 'unit_cost', cellComponent: 'table/cell/currency', resizable: true, sortable: true },
113
118
  {
119
+ id: 'created-at',
120
+ label: this.intl.t('column.created-at'),
121
+ valuePath: 'createdAt',
122
+ sortParam: 'created_at',
123
+ resizable: true,
124
+ sortable: true,
125
+ filterable: true,
126
+ filterComponent: 'filter/date',
127
+ },
128
+ {
129
+ id: 'updated-at',
114
130
  label: this.intl.t('column.updated-at'),
115
131
  valuePath: 'updatedAt',
116
132
  sortParam: 'updated_at',
@@ -121,6 +137,7 @@ export default class MaintenancePartsIndexController extends Controller {
121
137
  filterComponent: 'filter/date',
122
138
  },
123
139
  {
140
+ id: 'row-actions',
124
141
  label: '',
125
142
  cellComponent: 'table/cell/dropdown',
126
143
  ddButtonText: false,
@@ -131,17 +148,20 @@ export default class MaintenancePartsIndexController extends Controller {
131
148
  wrapperClass: 'flex items-center justify-end mx-2',
132
149
  actions: [
133
150
  {
151
+ id: 'view',
134
152
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.part') }),
135
153
  fn: this.partActions.transition.view,
136
154
  permission: 'fleet-ops view part',
137
155
  },
138
156
  {
157
+ id: 'edit',
139
158
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.part') }),
140
159
  fn: this.partActions.transition.edit,
141
160
  permission: 'fleet-ops update part',
142
161
  },
143
162
  { separator: true },
144
163
  {
164
+ id: 'delete',
145
165
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.part') }),
146
166
  fn: this.partActions.delete,
147
167
  permission: 'fleet-ops delete part',
@@ -33,7 +33,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
33
33
  return this.maintenanceScheduleActions;
34
34
  }
35
35
 
36
- @tracked queryParams = ['status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
36
+ @tracked queryParams = this.maintenanceScheduleActions.queryParamsFor(['status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
37
37
  @tracked page = 1;
38
38
  @tracked limit;
39
39
  @tracked sort = '-created_at';
@@ -132,16 +132,19 @@ export default class MaintenanceSchedulesIndexController extends Controller {
132
132
  get actionButtons() {
133
133
  return [
134
134
  {
135
+ id: 'more',
135
136
  component: 'dropdown-button',
136
137
  icon: 'display',
137
138
  size: 'xs',
138
139
  items: [
139
140
  {
141
+ id: 'list-view',
140
142
  label: this.intl.t('common.table-view'),
141
143
  icon: 'table-list',
142
144
  onClick: this.setLayoutList,
143
145
  },
144
146
  {
147
+ id: 'calendar-view',
145
148
  label: this.intl.t('common.calendar-view'),
146
149
  icon: 'calendar',
147
150
  onClick: this.setLayoutCalendar,
@@ -150,16 +153,25 @@ export default class MaintenanceSchedulesIndexController extends Controller {
150
153
  renderInPlace: true,
151
154
  helpText: this.intl.t('common.change-layout'),
152
155
  },
153
- { icon: 'refresh', onClick: this.maintenanceScheduleActions.refresh, helpText: this.intl.t('common.refresh') },
156
+ { id: 'refresh', icon: 'refresh', onClick: this.maintenanceScheduleActions.refresh, helpText: this.intl.t('common.refresh') },
154
157
  {
158
+ id: 'create',
155
159
  text: this.intl.t('common.new'),
156
160
  type: 'primary',
157
161
  icon: 'plus',
158
162
  onClick: this.maintenanceScheduleActions.transition.create,
159
163
  permission: 'fleet-ops create maintenance-schedule',
160
164
  },
161
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.maintenanceScheduleActions.import, permission: 'fleet-ops import maintenance-schedule' },
162
165
  {
166
+ id: 'import',
167
+ text: this.intl.t('common.import'),
168
+ type: 'magic',
169
+ icon: 'upload',
170
+ onClick: this.maintenanceScheduleActions.import,
171
+ permission: 'fleet-ops import maintenance-schedule',
172
+ },
173
+ {
174
+ id: 'export',
163
175
  text: this.intl.t('common.export'),
164
176
  icon: 'long-arrow-up',
165
177
  iconClass: 'rotate-icon-45',
@@ -171,12 +183,15 @@ export default class MaintenanceSchedulesIndexController extends Controller {
171
183
  }
172
184
 
173
185
  get bulkActions() {
174
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.maintenanceScheduleActions.bulkDelete, permission: 'fleet-ops delete maintenance-schedule' }];
186
+ return [
187
+ { id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.maintenanceScheduleActions.bulkDelete, permission: 'fleet-ops delete maintenance-schedule' },
188
+ ];
175
189
  }
176
190
 
177
191
  get columns() {
178
192
  return [
179
193
  {
194
+ id: 'public-id',
180
195
  label: this.intl.t('column.id'),
181
196
  valuePath: 'public_id',
182
197
  cellComponent: 'table/cell/anchor',
@@ -190,6 +205,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
190
205
  filterComponent: 'filter/string',
191
206
  },
192
207
  {
208
+ id: 'name',
193
209
  label: this.intl.t('column.name'),
194
210
  valuePath: 'name',
195
211
  resizable: true,
@@ -199,6 +215,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
199
215
  filterComponent: 'filter/string',
200
216
  },
201
217
  {
218
+ id: 'subject-name',
202
219
  label: this.intl.t('column.subject'),
203
220
  valuePath: 'subject.name',
204
221
  cellComponent: 'cell/maintenance-subject-identity',
@@ -208,6 +225,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
208
225
  sortable: false,
209
226
  },
210
227
  {
228
+ id: 'default-assignee-name',
211
229
  label: this.intl.t('column.assignee'),
212
230
  valuePath: 'default_assignee_name',
213
231
  cellComponent: 'cell/facilitator-identity',
@@ -218,6 +236,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
218
236
  hidden: true,
219
237
  },
220
238
  {
239
+ id: 'type',
221
240
  label: this.intl.t('column.type'),
222
241
  valuePath: 'type',
223
242
  cellComponent: 'table/cell/base',
@@ -229,6 +248,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
229
248
  filterComponent: 'filter/string',
230
249
  },
231
250
  {
251
+ id: 'status',
232
252
  label: this.intl.t('column.status'),
233
253
  valuePath: 'status',
234
254
  cellComponent: 'table/cell/status',
@@ -239,6 +259,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
239
259
  filterComponent: 'filter/string',
240
260
  },
241
261
  {
262
+ id: 'next-due-at-short',
242
263
  label: this.intl.t('column.next-due'),
243
264
  valuePath: 'nextDueAtShort',
244
265
  sortParam: 'next_due_date',
@@ -248,6 +269,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
248
269
  filterComponent: 'filter/date',
249
270
  },
250
271
  {
272
+ id: 'created-at',
251
273
  label: this.intl.t('column.created-at'),
252
274
  valuePath: 'createdAt',
253
275
  sortParam: 'created_at',
@@ -257,6 +279,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
257
279
  filterComponent: 'filter/date',
258
280
  },
259
281
  {
282
+ id: 'row-actions',
260
283
  label: '',
261
284
  cellComponent: 'table/cell/dropdown',
262
285
  ddButtonText: false,
@@ -267,33 +290,39 @@ export default class MaintenanceSchedulesIndexController extends Controller {
267
290
  wrapperClass: 'flex items-center justify-end mx-2',
268
291
  actions: [
269
292
  {
293
+ id: 'view',
270
294
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
271
295
  fn: this.maintenanceScheduleActions.transition.view,
272
296
  permission: 'fleet-ops view maintenance-schedule',
273
297
  },
274
298
  {
299
+ id: 'edit',
275
300
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
276
301
  fn: this.maintenanceScheduleActions.transition.edit,
277
302
  permission: 'fleet-ops update maintenance-schedule',
278
303
  },
279
304
  {
305
+ id: 'trigger-now',
280
306
  label: this.intl.t('maintenance-schedule.actions.trigger-now'),
281
307
  fn: this.maintenanceScheduleActions.triggerNow,
282
308
  permission: 'fleet-ops update maintenance-schedule',
283
309
  },
284
310
  { separator: true },
285
311
  {
312
+ id: 'pause',
286
313
  label: this.intl.t('maintenance-schedule.actions.pause'),
287
314
  fn: this.maintenanceScheduleActions.pause,
288
315
  permission: 'fleet-ops update maintenance-schedule',
289
316
  },
290
317
  {
318
+ id: 'resume',
291
319
  label: this.intl.t('maintenance-schedule.actions.resume'),
292
320
  fn: this.maintenanceScheduleActions.resume,
293
321
  permission: 'fleet-ops update maintenance-schedule',
294
322
  },
295
323
  { separator: true },
296
324
  {
325
+ id: 'delete',
297
326
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
298
327
  fn: this.maintenanceScheduleActions.delete,
299
328
  permission: 'fleet-ops delete maintenance-schedule',
@@ -19,9 +19,9 @@ export default class MaintenanceWorkOrdersIndexDetailsController extends Control
19
19
 
20
20
  get actionButtons() {
21
21
  return [
22
- { icon: 'paper-plane', fn: this.sendEmail, text: 'Send to Vendor', permission: 'fleet-ops update work-order' },
23
- { icon: 'edit', fn: this.edit, permission: 'fleet-ops update work-order' },
24
- { icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete work-order' },
22
+ { id: 'send-email', icon: 'paper-plane', fn: this.sendEmail, text: 'Send to Vendor', permission: 'fleet-ops update work-order' },
23
+ { id: 'edit', icon: 'edit', fn: this.edit, permission: 'fleet-ops update work-order' },
24
+ { id: 'delete', icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete work-order' },
25
25
  ];
26
26
  }
27
27
 
@@ -9,7 +9,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
9
9
  @service workOrderActions;
10
10
  @service intl;
11
11
 
12
- @tracked queryParams = ['category', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
12
+ @tracked queryParams = this.workOrderActions.queryParamsFor(['category', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
13
13
  @tracked page = 1;
14
14
  @tracked limit;
15
15
  @tracked sort = '-created_at';
@@ -20,10 +20,11 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
20
20
 
21
21
  get actionButtons() {
22
22
  return [
23
- { icon: 'refresh', onClick: this.workOrderActions.refresh, helpText: this.intl.t('common.refresh') },
24
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.workOrderActions.transition.create, permission: 'fleet-ops create work-order' },
25
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.workOrderActions.import, permission: 'fleet-ops import work-order' },
23
+ { id: 'refresh', icon: 'refresh', onClick: this.workOrderActions.refresh, helpText: this.intl.t('common.refresh') },
24
+ { id: 'create', text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.workOrderActions.transition.create, permission: 'fleet-ops create work-order' },
25
+ { id: 'import', text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.workOrderActions.import, permission: 'fleet-ops import work-order' },
26
26
  {
27
+ id: 'export',
27
28
  text: this.intl.t('common.export'),
28
29
  icon: 'long-arrow-up',
29
30
  iconClass: 'rotate-icon-45',
@@ -35,12 +36,13 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
35
36
  }
36
37
 
37
38
  get bulkActions() {
38
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.workOrderActions.bulkDelete, permission: 'fleet-ops delete work-order' }];
39
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.workOrderActions.bulkDelete, permission: 'fleet-ops delete work-order' }];
39
40
  }
40
41
 
41
42
  get columns() {
42
43
  return [
43
44
  {
45
+ id: 'code',
44
46
  label: this.intl.t('column.code'),
45
47
  valuePath: 'code',
46
48
  cellComponent: 'table/cell/anchor',
@@ -53,8 +55,18 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
53
55
  filterParam: 'code',
54
56
  filterComponent: 'filter/string',
55
57
  },
56
- { label: this.intl.t('column.subject'), valuePath: 'subject', resizable: true, sortable: true, filterable: true, filterParam: 'subject', filterComponent: 'filter/string' },
57
58
  {
59
+ id: 'subject',
60
+ label: this.intl.t('column.subject'),
61
+ valuePath: 'subject',
62
+ resizable: true,
63
+ sortable: true,
64
+ filterable: true,
65
+ filterParam: 'subject',
66
+ filterComponent: 'filter/string',
67
+ },
68
+ {
69
+ id: 'category',
58
70
  label: this.intl.t('column.category'),
59
71
  valuePath: 'category',
60
72
  cellComponent: 'table/cell/base',
@@ -70,6 +82,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
70
82
  placeholder: 'Select work order category',
71
83
  },
72
84
  {
85
+ id: 'status',
73
86
  label: this.intl.t('column.status'),
74
87
  valuePath: 'status',
75
88
  cellComponent: 'table/cell/status',
@@ -80,6 +93,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
80
93
  filterComponent: 'filter/string',
81
94
  },
82
95
  {
96
+ id: 'priority',
83
97
  label: this.intl.t('column.priority'),
84
98
  valuePath: 'priority',
85
99
  cellComponent: 'table/cell/base',
@@ -91,6 +105,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
91
105
  filterComponent: 'filter/string',
92
106
  },
93
107
  {
108
+ id: 'target-name',
94
109
  label: this.intl.t('column.target'),
95
110
  valuePath: 'target_name',
96
111
  cellComponent: 'cell/maintenance-subject-identity',
@@ -100,6 +115,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
100
115
  hidden: true,
101
116
  },
102
117
  {
118
+ id: 'assignee-name',
103
119
  label: this.intl.t('column.assignee'),
104
120
  valuePath: 'assignee_name',
105
121
  cellComponent: 'cell/facilitator-identity',
@@ -107,9 +123,19 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
107
123
  resizable: true,
108
124
  sortable: false,
109
125
  },
110
- { label: this.intl.t('column.due-at'), valuePath: 'dueAt', sortParam: 'due_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
111
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
126
+ { id: 'due-at', label: this.intl.t('column.due-at'), valuePath: 'dueAt', sortParam: 'due_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
127
+ {
128
+ id: 'created-at',
129
+ label: this.intl.t('column.created-at'),
130
+ valuePath: 'createdAt',
131
+ sortParam: 'created_at',
132
+ resizable: true,
133
+ sortable: true,
134
+ filterable: true,
135
+ filterComponent: 'filter/date',
136
+ },
112
137
  {
138
+ id: 'updated-at',
113
139
  label: this.intl.t('column.updated-at'),
114
140
  valuePath: 'updatedAt',
115
141
  sortParam: 'updated_at',
@@ -120,6 +146,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
120
146
  filterComponent: 'filter/date',
121
147
  },
122
148
  {
149
+ id: 'row-actions',
123
150
  label: '',
124
151
  cellComponent: 'table/cell/dropdown',
125
152
  ddButtonText: false,
@@ -130,17 +157,20 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
130
157
  wrapperClass: 'flex items-center justify-end mx-2',
131
158
  actions: [
132
159
  {
160
+ id: 'view',
133
161
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.work-order') }),
134
162
  fn: this.workOrderActions.transition.view,
135
163
  permission: 'fleet-ops view work-order',
136
164
  },
137
165
  {
166
+ id: 'edit',
138
167
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.work-order') }),
139
168
  fn: this.workOrderActions.transition.edit,
140
169
  permission: 'fleet-ops update work-order',
141
170
  },
142
171
  { separator: true },
143
172
  {
173
+ id: 'send-email',
144
174
  label: 'Send Work Order to Vendor',
145
175
  fn: this.workOrderActions.sendEmail,
146
176
  icon: 'paper-plane',
@@ -148,6 +178,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
148
178
  },
149
179
  { separator: true },
150
180
  {
181
+ id: 'delete',
151
182
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.work-order') }),
152
183
  fn: this.workOrderActions.delete,
153
184
  permission: 'fleet-ops delete work-order',