@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
@@ -15,7 +15,22 @@ export default class ManagementFleetsIndexController extends Controller {
15
15
  @service intl;
16
16
 
17
17
  /** query params */
18
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'zone', 'service_area', 'parent_fleet', 'vendor', 'created_by', 'updated_by', 'status', 'task', 'name'];
18
+ @tracked queryParams = this.fleetActions.queryParamsFor([
19
+ 'page',
20
+ 'limit',
21
+ 'sort',
22
+ 'query',
23
+ 'public_id',
24
+ 'zone',
25
+ 'service_area',
26
+ 'parent_fleet',
27
+ 'vendor',
28
+ 'created_by',
29
+ 'updated_by',
30
+ 'status',
31
+ 'task',
32
+ 'name',
33
+ ]);
19
34
  @tracked page = 1;
20
35
  @tracked limit;
21
36
  @tracked sort = '-created_at';
@@ -33,11 +48,13 @@ export default class ManagementFleetsIndexController extends Controller {
33
48
  get actionButtons() {
34
49
  return [
35
50
  {
51
+ id: 'refresh',
36
52
  icon: 'refresh',
37
53
  onClick: this.fleetActions.refresh,
38
54
  helpText: this.intl.t('common.refresh'),
39
55
  },
40
56
  {
57
+ id: 'create',
41
58
  text: this.intl.t('common.new'),
42
59
  type: 'primary',
43
60
  icon: 'plus',
@@ -45,6 +62,7 @@ export default class ManagementFleetsIndexController extends Controller {
45
62
  permission: 'fleet-ops create fleet',
46
63
  },
47
64
  {
65
+ id: 'import',
48
66
  text: this.intl.t('common.import'),
49
67
  type: 'magic',
50
68
  icon: 'upload',
@@ -52,6 +70,7 @@ export default class ManagementFleetsIndexController extends Controller {
52
70
  permission: 'fleet-ops import fleet',
53
71
  },
54
72
  {
73
+ id: 'export',
55
74
  text: this.intl.t('common.export'),
56
75
  icon: 'long-arrow-up',
57
76
  iconClass: 'rotate-icon-45',
@@ -68,6 +87,7 @@ export default class ManagementFleetsIndexController extends Controller {
68
87
 
69
88
  return [
70
89
  {
90
+ id: 'bulk-delete',
71
91
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
72
92
  class: 'text-red-500',
73
93
  fn: this.fleetActions.bulkDelete,
@@ -80,6 +100,7 @@ export default class ManagementFleetsIndexController extends Controller {
80
100
  get columns() {
81
101
  return [
82
102
  {
103
+ id: 'name',
83
104
  sticky: true,
84
105
  label: this.intl.t('column.name'),
85
106
  valuePath: 'name',
@@ -93,6 +114,7 @@ export default class ManagementFleetsIndexController extends Controller {
93
114
  filterComponent: 'filter/string',
94
115
  },
95
116
  {
117
+ id: 'service-area-name',
96
118
  label: this.intl.t('column.service-area'),
97
119
  cellComponent: 'cell/service-area-identity',
98
120
  permission: 'fleet-ops view service-area',
@@ -107,6 +129,7 @@ export default class ManagementFleetsIndexController extends Controller {
107
129
  model: 'service-area',
108
130
  },
109
131
  {
132
+ id: 'parent-fleet-name',
110
133
  label: this.intl.t('column.parent-fleet'),
111
134
  cellComponent: 'cell/fleet-identity',
112
135
  permission: 'fleet-ops view fleet',
@@ -120,6 +143,7 @@ export default class ManagementFleetsIndexController extends Controller {
120
143
  model: 'fleet',
121
144
  },
122
145
  {
146
+ id: 'vendor-name',
123
147
  label: this.intl.t('column.vendor'),
124
148
  cellComponent: 'cell/vendor-identity',
125
149
  permission: 'fleet-ops view vendor',
@@ -134,6 +158,7 @@ export default class ManagementFleetsIndexController extends Controller {
134
158
  model: 'vendor',
135
159
  },
136
160
  {
161
+ id: 'zone-name',
137
162
  label: this.intl.t('column.zone'),
138
163
  cellComponent: 'cell/zone-identity',
139
164
  permission: 'fleet-ops view zone',
@@ -147,6 +172,7 @@ export default class ManagementFleetsIndexController extends Controller {
147
172
  model: 'zone',
148
173
  },
149
174
  {
175
+ id: 'public-id',
150
176
  label: this.intl.t('column.id'),
151
177
  valuePath: 'public_id',
152
178
  cellComponent: 'click-to-copy',
@@ -158,6 +184,7 @@ export default class ManagementFleetsIndexController extends Controller {
158
184
  filterComponent: 'filter/string',
159
185
  },
160
186
  {
187
+ id: 'drivers-count',
161
188
  label: this.intl.t('column.manpower'),
162
189
  valuePath: 'drivers_count',
163
190
  resizable: true,
@@ -165,6 +192,7 @@ export default class ManagementFleetsIndexController extends Controller {
165
192
  filterable: false,
166
193
  },
167
194
  {
195
+ id: 'drivers-online-count',
168
196
  label: this.intl.t('column.active-manpower'),
169
197
  valuePath: 'drivers_online_count',
170
198
  hidden: true,
@@ -173,6 +201,7 @@ export default class ManagementFleetsIndexController extends Controller {
173
201
  filterable: false,
174
202
  },
175
203
  {
204
+ id: 'task',
176
205
  label: this.intl.t('column.task'),
177
206
  valuePath: 'task',
178
207
  cellComponent: 'table/cell/base',
@@ -182,6 +211,7 @@ export default class ManagementFleetsIndexController extends Controller {
182
211
  filterComponent: 'filter/string',
183
212
  },
184
213
  {
214
+ id: 'status',
185
215
  label: this.intl.t('column.status'),
186
216
  valuePath: 'status',
187
217
  cellComponent: 'table/cell/status',
@@ -194,6 +224,7 @@ export default class ManagementFleetsIndexController extends Controller {
194
224
  filterOptions: fleetOpsOptions('fleetStatuses'),
195
225
  },
196
226
  {
227
+ id: 'created-at',
197
228
  label: this.intl.t('column.created-at'),
198
229
  valuePath: 'createdAt',
199
230
  sortParam: 'created_at',
@@ -203,6 +234,7 @@ export default class ManagementFleetsIndexController extends Controller {
203
234
  filterComponent: 'filter/date',
204
235
  },
205
236
  {
237
+ id: 'updated-at',
206
238
  label: this.intl.t('column.updated-at'),
207
239
  valuePath: 'updatedAt',
208
240
  sortParam: 'updated_at',
@@ -213,6 +245,7 @@ export default class ManagementFleetsIndexController extends Controller {
213
245
  filterComponent: 'filter/date',
214
246
  },
215
247
  {
248
+ id: 'row-actions',
216
249
  label: '',
217
250
  cellComponent: 'table/cell/dropdown',
218
251
  ddButtonText: false,
@@ -225,21 +258,25 @@ export default class ManagementFleetsIndexController extends Controller {
225
258
  width: 60,
226
259
  actions: [
227
260
  {
261
+ id: 'view',
228
262
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.fleet') }),
229
263
  fn: this.fleetActions.transition.view,
230
264
  permission: 'fleet-ops view fleet',
231
265
  },
232
266
  {
267
+ id: 'edit',
233
268
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.fleet') }),
234
269
  fn: this.fleetActions.transition.edit,
235
270
  permission: 'fleet-ops update fleet',
236
271
  },
237
272
  {
273
+ id: 'assign-driver',
238
274
  label: this.intl.t('fleet.actions.assign-driver'),
239
275
  permission: 'fleet-ops assign-driver-for fleet',
240
276
  fn: this.fleetActions.assignDriver,
241
277
  },
242
278
  {
279
+ id: 'assign-vehicle',
243
280
  label: this.intl.t('fleet.actions.assign-vehicle'),
244
281
  permission: 'fleet-ops assign-vehicle-for fleet',
245
282
  fn: this.fleetActions.assignVehicle,
@@ -248,6 +285,7 @@ export default class ManagementFleetsIndexController extends Controller {
248
285
  separator: true,
249
286
  },
250
287
  {
288
+ id: 'delete',
251
289
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.fleet') }),
252
290
  fn: this.fleetActions.delete,
253
291
  permission: 'fleet-ops delete fleet',
@@ -10,7 +10,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
10
10
  @service intl;
11
11
 
12
12
  /** query params */
13
- @tracked queryParams = [
13
+ @tracked queryParams = this.fuelReportActions.queryParamsFor([
14
14
  'page',
15
15
  'limit',
16
16
  'sort',
@@ -27,7 +27,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
27
27
  'country',
28
28
  'volume',
29
29
  'odometer',
30
- ];
30
+ ]);
31
31
  @tracked page = 1;
32
32
  @tracked limit;
33
33
  @tracked sort = '-created_at';
@@ -47,11 +47,13 @@ export default class ManagementFuelReportsIndexController extends Controller {
47
47
  get actionButtons() {
48
48
  return [
49
49
  {
50
+ id: 'refresh',
50
51
  icon: 'refresh',
51
52
  onClick: this.fuelReportActions.refresh,
52
53
  helpText: this.intl.t('common.refresh'),
53
54
  },
54
55
  {
56
+ id: 'create',
55
57
  text: this.intl.t('common.new'),
56
58
  type: 'primary',
57
59
  icon: 'plus',
@@ -59,6 +61,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
59
61
  permission: 'fleet-ops create fuel-report',
60
62
  },
61
63
  {
64
+ id: 'import',
62
65
  text: this.intl.t('common.import'),
63
66
  type: 'magic',
64
67
  icon: 'upload',
@@ -66,6 +69,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
66
69
  permission: 'fleet-ops import fuel-report',
67
70
  },
68
71
  {
72
+ id: 'export',
69
73
  text: this.intl.t('common.export'),
70
74
  icon: 'long-arrow-up',
71
75
  iconClass: 'rotate-icon-45',
@@ -82,6 +86,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
82
86
 
83
87
  return [
84
88
  {
89
+ id: 'bulk-delete',
85
90
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
86
91
  class: 'text-red-500',
87
92
  fn: this.fuelReportActions.bulkDelete,
@@ -94,6 +99,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
94
99
  get columns() {
95
100
  return [
96
101
  {
102
+ id: 'public-id',
97
103
  sticky: true,
98
104
  label: this.intl.t('column.id'),
99
105
  valuePath: 'public_id',
@@ -106,6 +112,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
106
112
  filterComponent: 'filter/string',
107
113
  },
108
114
  {
115
+ id: 'reporter-name',
109
116
  label: this.intl.t('column.reporter'),
110
117
  valuePath: 'reporter_name',
111
118
  cellComponent: 'table/cell/user-identity',
@@ -120,6 +127,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
120
127
  model: 'user',
121
128
  },
122
129
  {
130
+ id: 'driver-name',
123
131
  label: this.intl.t('column.driver'),
124
132
  valuePath: 'driver_name',
125
133
  cellComponent: 'cell/driver-identity',
@@ -136,6 +144,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
136
144
  model: 'driver',
137
145
  },
138
146
  {
147
+ id: 'vehicle-name',
139
148
  label: this.intl.t('column.vehicle'),
140
149
  valuePath: 'vehicle_name',
141
150
  cellComponent: 'cell/vehicle-identity',
@@ -153,6 +162,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
153
162
  modelNamePath: 'displayName',
154
163
  },
155
164
  {
165
+ id: 'status',
156
166
  label: this.intl.t('column.status'),
157
167
  valuePath: 'status',
158
168
  cellComponent: 'table/cell/status',
@@ -163,6 +173,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
163
173
  filterOptions: ['draft', 'pending-approval', 'approved', 'rejected', 'revised', 'submitted', 'in-review', 'confirmed', 'processed', 'archived', 'cancelled'],
164
174
  },
165
175
  {
176
+ id: 'source',
166
177
  label: 'Source',
167
178
  valuePath: 'source',
168
179
  resizable: true,
@@ -172,6 +183,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
172
183
  filterOptions: ['manual', 'import', 'fuel_provider'],
173
184
  },
174
185
  {
186
+ id: 'provider',
175
187
  label: 'Provider',
176
188
  valuePath: 'provider',
177
189
  resizable: true,
@@ -180,6 +192,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
180
192
  filterComponent: 'filter/string',
181
193
  },
182
194
  {
195
+ id: 'volume',
183
196
  label: this.intl.t('column.volume'),
184
197
  valuePath: 'volume',
185
198
  cellComponent: 'click-to-copy',
@@ -190,6 +203,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
190
203
  filterComponent: 'filter/string',
191
204
  },
192
205
  {
206
+ id: 'odometer',
193
207
  label: this.intl.t('column.odometer'),
194
208
  valuePath: 'odometer',
195
209
  cellComponent: 'click-to-copy',
@@ -200,6 +214,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
200
214
  filterComponent: 'filter/string',
201
215
  },
202
216
  {
217
+ id: 'created-at',
203
218
  label: this.intl.t('column.created-at'),
204
219
  valuePath: 'createdAt',
205
220
  sortParam: 'created_at',
@@ -209,6 +224,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
209
224
  filterComponent: 'filter/date',
210
225
  },
211
226
  {
227
+ id: 'updated-at',
212
228
  label: this.intl.t('column.updated-at'),
213
229
  valuePath: 'updatedAt',
214
230
  sortParam: 'updated_at',
@@ -219,6 +235,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
219
235
  filterComponent: 'filter/date',
220
236
  },
221
237
  {
238
+ id: 'row-actions',
222
239
  label: '',
223
240
  cellComponent: 'table/cell/dropdown',
224
241
  ddButtonText: false,
@@ -231,11 +248,13 @@ export default class ManagementFuelReportsIndexController extends Controller {
231
248
  width: 60,
232
249
  actions: [
233
250
  {
251
+ id: 'view',
234
252
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.fuel-report') }),
235
253
  fn: this.fuelReportActions.transition.view,
236
254
  permission: 'fleet-ops view fuel-report',
237
255
  },
238
256
  {
257
+ id: 'edit',
239
258
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.fuel-report') }),
240
259
  fn: this.fuelReportActions.transition.edit,
241
260
  permission: 'fleet-ops update fuel-report',
@@ -244,6 +263,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
244
263
  separator: true,
245
264
  },
246
265
  {
266
+ id: 'delete',
247
267
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.fuel-report') }),
248
268
  fn: this.fuelReportActions.delete,
249
269
  permission: 'fleet-ops delete fuel-report',
@@ -63,11 +63,13 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
63
63
  get actionButtons() {
64
64
  return [
65
65
  {
66
+ id: 'refresh',
66
67
  icon: 'refresh',
67
68
  onClick: this.refresh,
68
69
  helpText: 'Refresh',
69
70
  },
70
71
  {
72
+ id: 'fuel-integrations',
71
73
  icon: 'gas-pump',
72
74
  text: 'Fuel Integrations',
73
75
  onClick: () => this.hostRouter.transitionTo('console.fleet-ops.connectivity.fuel-providers.index'),
@@ -85,6 +87,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
85
87
 
86
88
  return [
87
89
  {
90
+ id: 'bulk-reprocess',
88
91
  label: `Reprocess ${selected.length} selected`,
89
92
  fn: () => this.confirmAction('reprocess', selected),
90
93
  permission: 'fleet-ops update fuel-provider-transaction',
@@ -95,6 +98,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
95
98
  get columns() {
96
99
  return [
97
100
  {
101
+ id: 'provider-transaction-id',
98
102
  sticky: true,
99
103
  label: 'Transaction',
100
104
  valuePath: 'provider_transaction_id',
@@ -107,6 +111,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
107
111
  filterComponent: 'filter/string',
108
112
  },
109
113
  {
114
+ id: 'provider',
110
115
  label: 'Provider',
111
116
  valuePath: 'provider',
112
117
  resizable: true,
@@ -115,6 +120,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
115
120
  filterComponent: 'filter/string',
116
121
  },
117
122
  {
123
+ id: 'sync-status',
118
124
  label: 'Status',
119
125
  valuePath: 'sync_status',
120
126
  cellComponent: 'fuel-transaction-status',
@@ -125,6 +131,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
125
131
  filterOptions: ['imported', 'matched', 'unmatched', 'reviewed', 'ignored', 'duplicate', 'error'],
126
132
  },
127
133
  {
134
+ id: 'vehicle-name',
128
135
  label: 'Vehicle',
129
136
  valuePath: 'vehicle_name',
130
137
  cellComponent: 'cell/vehicle-identity',
@@ -139,28 +146,33 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
139
146
  modelNamePath: 'displayName',
140
147
  },
141
148
  {
149
+ id: 'vehicle-card-id',
142
150
  label: 'Card / Internal',
143
151
  valuePath: 'vehicle_card_id',
144
152
  resizable: true,
145
153
  },
146
154
  {
155
+ id: 'trip-number',
147
156
  label: 'Trip',
148
157
  valuePath: 'trip_number',
149
158
  resizable: true,
150
159
  hidden: true,
151
160
  },
152
161
  {
162
+ id: 'station-name',
153
163
  label: 'Station',
154
164
  valuePath: 'station_name',
155
165
  resizable: true,
156
166
  },
157
167
  {
168
+ id: 'volume',
158
169
  label: 'Liters',
159
170
  valuePath: 'volume',
160
171
  resizable: true,
161
172
  sortable: true,
162
173
  },
163
174
  {
175
+ id: 'amount',
164
176
  label: 'Amount',
165
177
  valuePath: 'amount',
166
178
  cellComponent: 'table/cell/currency',
@@ -168,6 +180,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
168
180
  sortable: true,
169
181
  },
170
182
  {
183
+ id: 'fuel-report-id',
171
184
  label: 'Fuel Report',
172
185
  valuePath: 'fuel_report_id',
173
186
  cellComponent: 'cell/fuel-report-identity',
@@ -177,6 +190,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
177
190
  resizable: true,
178
191
  },
179
192
  {
193
+ id: 'transaction-at',
180
194
  label: 'Date',
181
195
  valuePath: 'transactionAt',
182
196
  sortParam: 'transaction_at',
@@ -187,6 +201,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
187
201
  filterComponent: 'filter/date',
188
202
  },
189
203
  {
204
+ id: 'row-actions',
190
205
  label: '',
191
206
  cellComponent: 'table/cell/dropdown',
192
207
  ddButtonText: false,
@@ -198,14 +213,35 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
198
213
  sticky: 'right',
199
214
  width: 60,
200
215
  actions: [
201
- { label: 'Review Details', fn: this.openDetails, permission: 'fleet-ops view fuel-provider-transaction' },
202
- { label: 'Open Fuel Report', fn: this.openFuelReport, isVisible: (transaction) => Boolean(transaction.fuel_report_id), permission: 'fleet-ops view fuel-report' },
216
+ { id: 'open-details', label: 'Review Details', fn: this.openDetails, permission: 'fleet-ops view fuel-provider-transaction' },
217
+ {
218
+ id: 'open-fuel-report',
219
+ label: 'Open Fuel Report',
220
+ fn: this.openFuelReport,
221
+ isVisible: (transaction) => Boolean(transaction.fuel_report_id),
222
+ permission: 'fleet-ops view fuel-report',
223
+ },
203
224
  { separator: true },
204
- { label: 'Match to Vehicle', fn: this.matchVehicle, permission: 'fleet-ops update fuel-provider-transaction' },
205
- { label: 'Match to Order', fn: this.matchOrder, permission: 'fleet-ops update fuel-provider-transaction' },
206
- { label: 'Reprocess / Rematch', fn: (transaction) => this.confirmAction('reprocess', transaction), permission: 'fleet-ops update fuel-provider-transaction' },
207
- { label: 'Ignore Transaction', fn: (transaction) => this.confirmAction('ignored', transaction), permission: 'fleet-ops review fuel-provider-transaction' },
208
- { label: 'Mark Reviewed', fn: (transaction) => this.confirmAction('reviewed', transaction), permission: 'fleet-ops review fuel-provider-transaction' },
225
+ { id: 'match-vehicle', label: 'Match to Vehicle', fn: this.matchVehicle, permission: 'fleet-ops update fuel-provider-transaction' },
226
+ { id: 'match-order', label: 'Match to Order', fn: this.matchOrder, permission: 'fleet-ops update fuel-provider-transaction' },
227
+ {
228
+ id: 'reprocess',
229
+ label: 'Reprocess / Rematch',
230
+ fn: (transaction) => this.confirmAction('reprocess', transaction),
231
+ permission: 'fleet-ops update fuel-provider-transaction',
232
+ },
233
+ {
234
+ id: 'ignore',
235
+ label: 'Ignore Transaction',
236
+ fn: (transaction) => this.confirmAction('ignored', transaction),
237
+ permission: 'fleet-ops review fuel-provider-transaction',
238
+ },
239
+ {
240
+ id: 'mark-reviewed',
241
+ label: 'Mark Reviewed',
242
+ fn: (transaction) => this.confirmAction('reviewed', transaction),
243
+ permission: 'fleet-ops review fuel-provider-transaction',
244
+ },
209
245
  ],
210
246
  sortable: false,
211
247
  filterable: false,
@@ -20,6 +20,7 @@ export default class ManagementIssuesIndexDetailsController extends Controller {
20
20
  fn: () => this.hostRouter.transitionTo('console.fleet-ops.management.issues.index.edit', this.model),
21
21
  },
22
22
  {
23
+ id: 'more',
23
24
  icon: 'ellipsis',
24
25
  type: 'default',
25
26
  items: this.issueActions.workflowItems(this.model, () => this.refreshIssue()),