@fleetbase/fleetops-engine 0.6.69 → 0.6.71

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 (324) hide show
  1. package/RELEASE.md +21 -14
  2. package/addon/components/admin/telematics-settings.hbs +143 -0
  3. package/addon/components/admin/telematics-settings.js +145 -0
  4. package/addon/components/fuel-integration/hub.hbs +1 -1
  5. package/addon/components/layout/fleet-ops-sidebar.js +37 -17
  6. package/addon/components/map/leaflet-live-map.hbs +4 -242
  7. package/addon/components/map/leaflet-live-map.js +2 -1
  8. package/addon/components/map/marker-card/driver.hbs +57 -0
  9. package/addon/components/map/marker-card/driver.js +3 -0
  10. package/addon/components/map/marker-card/vehicle.hbs +78 -0
  11. package/addon/components/map/marker-card/vehicle.js +3 -0
  12. package/addon/components/order/details/activity.hbs +8 -6
  13. package/addon/components/order/details/activity.js +9 -0
  14. package/addon/components/order/details.hbs +29 -0
  15. package/addon/components/order/details.js +26 -0
  16. package/addon/components/order/form/details.hbs +30 -4
  17. package/addon/components/order/form/details.js +46 -0
  18. package/addon/components/order/form/route.hbs +4 -2
  19. package/addon/components/order/form/route.js +11 -0
  20. package/addon/components/order/form.hbs +12 -0
  21. package/addon/components/order/form.js +21 -1
  22. package/addon/components/order/kanban.js +72 -0
  23. package/addon/components/order-config-manager/activity-flow.js +45 -10
  24. package/addon/components/order-config-manager/lifecycle.hbs +250 -0
  25. package/addon/components/order-config-manager/lifecycle.js +358 -0
  26. package/addon/components/order-config-manager.js +5 -1
  27. package/addon/components/telematic/hub.hbs +1 -1
  28. package/addon/components/widget/live-fleet.hbs +8 -40
  29. package/addon/controllers/analytics/reports/index.js +15 -1
  30. package/addon/controllers/connectivity/devices/index/details.js +1 -0
  31. package/addon/controllers/connectivity/devices/index.js +12 -2
  32. package/addon/controllers/connectivity/events/index.js +31 -1
  33. package/addon/controllers/connectivity/fuel-providers/index.js +6 -4
  34. package/addon/controllers/connectivity/sensors/index/details.js +1 -1
  35. package/addon/controllers/connectivity/sensors/index.js +41 -1
  36. package/addon/controllers/connectivity/telematics/index.js +4 -0
  37. package/addon/controllers/maintenance/equipment/index/details.js +2 -2
  38. package/addon/controllers/maintenance/equipment/index.js +36 -10
  39. package/addon/controllers/maintenance/inspection-forms/index.js +32 -12
  40. package/addon/controllers/maintenance/inspection-submissions/index/details.js +2 -1
  41. package/addon/controllers/maintenance/inspection-submissions/index.js +56 -10
  42. package/addon/controllers/maintenance/maintenances/index/details.js +2 -0
  43. package/addon/controllers/maintenance/maintenances/index.js +24 -1
  44. package/addon/controllers/maintenance/parts/index/details.js +2 -2
  45. package/addon/controllers/maintenance/parts/index.js +36 -9
  46. package/addon/controllers/maintenance/schedules/index.js +48 -6
  47. package/addon/controllers/maintenance/work-orders/index/details.js +3 -3
  48. package/addon/controllers/maintenance/work-orders/index.js +47 -9
  49. package/addon/controllers/management/contacts/customers.js +13 -0
  50. package/addon/controllers/management/contacts/index.js +47 -1
  51. package/addon/controllers/management/drivers/index/details.js +1 -0
  52. package/addon/controllers/management/drivers/index.js +36 -2
  53. package/addon/controllers/management/fleets/index/details.js +1 -0
  54. package/addon/controllers/management/fleets/index.js +43 -1
  55. package/addon/controllers/management/fuel-reports/index.js +26 -2
  56. package/addon/controllers/management/fuel-transactions/index.js +45 -7
  57. package/addon/controllers/management/issues/index/details.js +1 -0
  58. package/addon/controllers/management/issues/index.js +26 -2
  59. package/addon/controllers/management/places/index.js +40 -1
  60. package/addon/controllers/management/trailers/index/details.js +1 -0
  61. package/addon/controllers/management/trailers/index.js +50 -2
  62. package/addon/controllers/management/vehicles/index/details.js +1 -0
  63. package/addon/controllers/management/vehicles/index.js +37 -2
  64. package/addon/controllers/management/vendors/index.js +30 -2
  65. package/addon/controllers/operations/orders/index/details.js +61 -5
  66. package/addon/controllers/operations/orders/index.js +66 -4
  67. package/addon/controllers/operations/service-rates/index.js +18 -1
  68. package/addon/controllers/settings/index.js +13 -0
  69. package/addon/controllers/settings/telematics.js +113 -0
  70. package/addon/extension.js +70 -6
  71. package/addon/routes/analytics/index.js +14 -1
  72. package/addon/routes/analytics/reports/index/details.js +1 -1
  73. package/addon/routes/analytics/reports/index/edit.js +1 -1
  74. package/addon/routes/analytics/reports/index/new.js +14 -1
  75. package/addon/routes/analytics/reports.js +14 -1
  76. package/addon/routes/connectivity/devices/index/new.js +14 -1
  77. package/addon/routes/connectivity/devices.js +14 -1
  78. package/addon/routes/connectivity/events.js +14 -1
  79. package/addon/routes/connectivity/fuel-providers/details/transactions.js +12 -0
  80. package/addon/routes/connectivity/fuel-providers/details.js +9 -0
  81. package/addon/routes/connectivity/fuel-providers/edit.js +9 -0
  82. package/addon/routes/connectivity/fuel-providers/new.js +14 -1
  83. package/addon/routes/connectivity/fuel-providers.js +14 -1
  84. package/addon/routes/connectivity/sensors/index/new.js +14 -1
  85. package/addon/routes/connectivity/sensors.js +14 -1
  86. package/addon/routes/connectivity/telematics/new.js +14 -1
  87. package/addon/routes/connectivity/telematics.js +14 -1
  88. package/addon/routes/connectivity/tracking.js +14 -1
  89. package/addon/routes/maintenance/equipment/index/details.js +2 -2
  90. package/addon/routes/maintenance/equipment/index/edit.js +2 -2
  91. package/addon/routes/maintenance/equipment/index/new.js +14 -1
  92. package/addon/routes/maintenance/equipment.js +14 -1
  93. package/addon/routes/maintenance/index.js +14 -1
  94. package/addon/routes/maintenance/inspection-forms/index/details.js +10 -1
  95. package/addon/routes/maintenance/inspection-forms/index/edit.js +10 -1
  96. package/addon/routes/maintenance/inspection-forms/index/new.js +14 -1
  97. package/addon/routes/maintenance/inspection-forms.js +14 -1
  98. package/addon/routes/maintenance/inspection-submissions/index/details.js +10 -1
  99. package/addon/routes/maintenance/inspection-submissions/index/edit.js +10 -1
  100. package/addon/routes/maintenance/inspection-submissions/index/new.js +14 -1
  101. package/addon/routes/maintenance/inspection-submissions.js +14 -1
  102. package/addon/routes/maintenance/maintenances/index/details.js +2 -2
  103. package/addon/routes/maintenance/maintenances/index/edit.js +2 -2
  104. package/addon/routes/maintenance/maintenances/index/new.js +14 -1
  105. package/addon/routes/maintenance/maintenances.js +14 -1
  106. package/addon/routes/maintenance/parts/index/details.js +2 -2
  107. package/addon/routes/maintenance/parts/index/edit.js +2 -2
  108. package/addon/routes/maintenance/parts/index/new.js +14 -1
  109. package/addon/routes/maintenance/parts.js +14 -1
  110. package/addon/routes/maintenance/schedules/index/details.js +2 -2
  111. package/addon/routes/maintenance/schedules/index/edit.js +2 -2
  112. package/addon/routes/maintenance/schedules/index/new.js +15 -1
  113. package/addon/routes/maintenance/schedules.js +15 -1
  114. package/addon/routes/maintenance/work-orders/index/details.js +2 -2
  115. package/addon/routes/maintenance/work-orders/index/edit.js +2 -2
  116. package/addon/routes/maintenance/work-orders/index/new.js +14 -1
  117. package/addon/routes/maintenance/work-orders.js +14 -1
  118. package/addon/routes/management/fuel-transactions/index/details.js +9 -0
  119. package/addon/routes/management/fuel-transactions.js +14 -1
  120. package/addon/routes/management/index.js +13 -0
  121. package/addon/routes/management/trailers.js +16 -0
  122. package/addon/routes/management/vendors/integrated/details.js +14 -1
  123. package/addon/routes/management/vendors/integrated/edit.js +14 -1
  124. package/addon/routes/management/vendors/integrated/new.js +14 -1
  125. package/addon/routes/management/vendors/integrated.js +14 -1
  126. package/addon/routes/operations/orders/index/details.js +1 -0
  127. package/addon/routes/operations/orders.js +40 -1
  128. package/addon/routes/operations/routes/index/details.js +14 -1
  129. package/addon/routes/operations/routes/index/new.js +13 -0
  130. package/addon/routes/operations/routes.js +14 -1
  131. package/addon/routes/operations/service-rates/index/new.js +11 -0
  132. package/addon/routes/operations/service-rates.js +14 -1
  133. package/addon/routes/settings/avatars.js +14 -1
  134. package/addon/routes/settings/custom-fields.js +14 -1
  135. package/addon/routes/settings/map.js +14 -1
  136. package/addon/routes/settings/notifications.js +11 -0
  137. package/addon/routes/settings/orchestrator.js +1 -1
  138. package/addon/routes/settings/payments/index.js +1 -1
  139. package/addon/routes/settings/routing.js +14 -1
  140. package/addon/routes/settings/scheduling.js +14 -1
  141. package/addon/routes/settings/telematics.js +21 -0
  142. package/addon/routes/virtual.js +11 -0
  143. package/addon/routes.js +1 -0
  144. package/addon/services/contact-actions.js +1 -0
  145. package/addon/services/customer-actions.js +2 -1
  146. package/addon/services/device-actions.js +1 -0
  147. package/addon/services/device-event-actions.js +1 -0
  148. package/addon/services/driver-actions.js +4 -13
  149. package/addon/services/equipment-actions.js +1 -0
  150. package/addon/services/fleet-actions.js +1 -0
  151. package/addon/services/fuel-report-actions.js +1 -0
  152. package/addon/services/inspection-form-actions.js +1 -0
  153. package/addon/services/inspection-submission-actions.js +1 -0
  154. package/addon/services/integrated-vendor-actions.js +1 -0
  155. package/addon/services/issue-actions.js +1 -0
  156. package/addon/services/maintenance-actions.js +1 -0
  157. package/addon/services/maintenance-schedule-actions.js +2 -1
  158. package/addon/services/order-actions.js +7 -0
  159. package/addon/services/order-presentation.js +129 -0
  160. package/addon/services/part-actions.js +1 -0
  161. package/addon/services/place-actions.js +1 -0
  162. package/addon/services/sensor-actions.js +1 -0
  163. package/addon/services/service-area-actions.js +1 -0
  164. package/addon/services/service-rate-actions.js +1 -0
  165. package/addon/services/telematic-actions.js +1 -0
  166. package/addon/services/trailer-actions.js +4 -14
  167. package/addon/services/vehicle-actions.js +4 -13
  168. package/addon/services/vendor-actions.js +1 -0
  169. package/addon/services/work-order-actions.js +1 -0
  170. package/addon/services/zone-actions.js +1 -0
  171. package/addon/templates/analytics/reports/index/details.hbs +1 -0
  172. package/addon/templates/analytics/reports/index.hbs +1 -0
  173. package/addon/templates/connectivity/devices/index/details.hbs +1 -0
  174. package/addon/templates/connectivity/devices/index.hbs +1 -0
  175. package/addon/templates/connectivity/events/index.hbs +1 -0
  176. package/addon/templates/connectivity/sensors/index/details.hbs +1 -0
  177. package/addon/templates/connectivity/sensors/index.hbs +1 -0
  178. package/addon/templates/maintenance/equipment/index/details.hbs +1 -0
  179. package/addon/templates/maintenance/equipment/index.hbs +2 -0
  180. package/addon/templates/maintenance/inspection-forms/index/details.hbs +1 -0
  181. package/addon/templates/maintenance/inspection-forms/index.hbs +1 -0
  182. package/addon/templates/maintenance/inspection-submissions/index/details.hbs +1 -0
  183. package/addon/templates/maintenance/inspection-submissions/index.hbs +1 -0
  184. package/addon/templates/maintenance/maintenances/index/details.hbs +1 -0
  185. package/addon/templates/maintenance/maintenances/index.hbs +1 -0
  186. package/addon/templates/maintenance/parts/index/details.hbs +1 -0
  187. package/addon/templates/maintenance/parts/index.hbs +2 -0
  188. package/addon/templates/maintenance/schedules/index/details.hbs +1 -0
  189. package/addon/templates/maintenance/schedules/index.hbs +2 -0
  190. package/addon/templates/maintenance/work-orders/index/details.hbs +1 -0
  191. package/addon/templates/maintenance/work-orders/index.hbs +1 -0
  192. package/addon/templates/management/contacts/customers/details.hbs +1 -0
  193. package/addon/templates/management/contacts/customers.hbs +1 -0
  194. package/addon/templates/management/contacts/index/details.hbs +1 -0
  195. package/addon/templates/management/contacts/index.hbs +1 -0
  196. package/addon/templates/management/contacts.hbs +1 -0
  197. package/addon/templates/management/drivers/index/details.hbs +1 -0
  198. package/addon/templates/management/drivers/index.hbs +2 -0
  199. package/addon/templates/management/fleets/index/details.hbs +1 -0
  200. package/addon/templates/management/fleets/index.hbs +1 -0
  201. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  202. package/addon/templates/management/fuel-reports/index.hbs +1 -0
  203. package/addon/templates/management/fuel-transactions/index.hbs +1 -0
  204. package/addon/templates/management/issues/index/details.hbs +1 -0
  205. package/addon/templates/management/issues/index.hbs +1 -0
  206. package/addon/templates/management/places/index/details.hbs +1 -0
  207. package/addon/templates/management/places/index.hbs +1 -0
  208. package/addon/templates/management/trailers/index/details.hbs +1 -0
  209. package/addon/templates/management/trailers/index.hbs +2 -0
  210. package/addon/templates/management/vehicles/index/details.hbs +1 -0
  211. package/addon/templates/management/vehicles/index.hbs +2 -0
  212. package/addon/templates/management/vendors/index/details.hbs +1 -0
  213. package/addon/templates/management/vendors/index.hbs +2 -0
  214. package/addon/templates/management/vendors/integrated.hbs +1 -0
  215. package/addon/templates/operations/orders/index/details.hbs +1 -0
  216. package/addon/templates/operations/orders/index.hbs +1 -0
  217. package/addon/templates/operations/service-rates/index/details.hbs +1 -0
  218. package/addon/templates/operations/service-rates/index.hbs +1 -0
  219. package/addon/templates/settings/telematics.hbs +70 -0
  220. package/addon/utils/normalize-order-config-flow.js +6 -1
  221. package/app/components/admin/telematics-settings.js +1 -0
  222. package/app/components/map/marker-card/driver.js +1 -0
  223. package/app/components/map/marker-card/vehicle.js +1 -0
  224. package/app/controllers/settings/telematics.js +1 -0
  225. package/app/routes/settings/telematics.js +1 -0
  226. package/app/services/order-presentation.js +1 -0
  227. package/app/templates/settings/telematics.js +1 -0
  228. package/composer.json +2 -2
  229. package/docs/AFAQY.md +1 -1
  230. package/docs/TELEMATICS_QUEUES.md +1 -1
  231. package/docs/TELEMETRY_ARCHITECTURE.md +72 -1
  232. package/extension.json +1 -1
  233. package/package.json +3 -3
  234. package/server/config/telemetry.php +12 -0
  235. package/server/migrations/2026_09_23_000001_add_retention_index_to_device_events.php +40 -0
  236. package/server/migrations/2026_09_23_000002_add_retention_index_to_positions.php +40 -0
  237. package/server/migrations/2026_09_23_000003_add_retention_index_to_telematic_sync_runs.php +40 -0
  238. package/server/src/Auth/Schemas/FleetOps.php +104 -5
  239. package/server/src/Console/Commands/DrainTelematicInbox.php +3 -13
  240. package/server/src/Console/Commands/ProcessOperationalAlerts.php +3 -3
  241. package/server/src/Console/Commands/PruneTelematicsData.php +318 -0
  242. package/server/src/Http/Controllers/Api/v1/OrchestrationController.php +9 -0
  243. package/server/src/Http/Controllers/FleetOpsController.php +21 -0
  244. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +11 -0
  245. package/server/src/Http/Controllers/Internal/v1/ContactController.php +11 -0
  246. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +14 -0
  247. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +13 -0
  248. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +11 -0
  249. package/server/src/Http/Controllers/Internal/v1/DriverController.php +22 -0
  250. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +13 -0
  251. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +15 -0
  252. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +9 -3
  253. package/server/src/Http/Controllers/Internal/v1/InspectionFormController.php +15 -0
  254. package/server/src/Http/Controllers/Internal/v1/LiveController.php +16 -0
  255. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +15 -0
  256. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +15 -0
  257. package/server/src/Http/Controllers/Internal/v1/ManifestController.php +15 -0
  258. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +11 -0
  259. package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +42 -1
  260. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +12 -0
  261. package/server/src/Http/Controllers/Internal/v1/OrderController.php +56 -4
  262. package/server/src/Http/Controllers/Internal/v1/PaymentController.php +13 -0
  263. package/server/src/Http/Controllers/Internal/v1/RadarController.php +19 -0
  264. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +9 -3
  265. package/server/src/Http/Controllers/Internal/v1/SettingController.php +465 -14
  266. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +21 -0
  267. package/server/src/Http/Controllers/Internal/v1/TrailerController.php +21 -0
  268. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +21 -0
  269. package/server/src/Http/Controllers/Internal/v1/VendorController.php +17 -0
  270. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +11 -0
  271. package/server/src/Jobs/DispatchTelematicsRetentionJobs.php +70 -0
  272. package/server/src/Jobs/PruneTelematicsDataJob.php +74 -0
  273. package/server/src/Listeners/NotifyDriverOnShiftChange.php +3 -3
  274. package/server/src/Mail/CustomerCredentialsMail.php +1 -1
  275. package/server/src/Models/Order.php +35 -3
  276. package/server/src/Models/OrderConfig.php +129 -0
  277. package/server/src/Models/TrackingNumber.php +8 -4
  278. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +9 -1
  279. package/server/src/Providers/FleetOpsServiceProvider.php +3 -0
  280. package/server/src/Support/Analytics/LiveFleet.php +18 -2
  281. package/server/src/Support/Authorization.php +103 -0
  282. package/server/src/Support/Database/TableIndexes.php +66 -0
  283. package/server/src/Support/OrderTracker.php +2 -2
  284. package/server/src/Support/Reporting/FleetOpsReportSchema.php +476 -116
  285. package/server/src/Support/Telematics/Retention/RetentionPolicy.php +300 -0
  286. package/server/src/Support/Telematics/Retention/TelemetryActivity.php +40 -0
  287. package/server/src/Support/Telematics/TelematicService.php +12 -2
  288. package/server/src/Support/Telematics/Telemetry/Ingestor.php +4 -2
  289. package/server/src/Tracking/TrackingIntelligenceService.php +1 -1
  290. package/server/src/Tracking/TrackingOptions.php +2 -2
  291. package/server/src/Traits/AuthorizesMethods.php +37 -0
  292. package/server/src/routes.php +9 -1
  293. package/server/tests/AnalyticsRoutesTest.php +29 -2
  294. package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +16 -1
  295. package/server/tests/Feature/Http/Api/TelematicsRetentionIndexMigrationTest.php +115 -0
  296. package/server/tests/Feature/Http/Internal/OrderControllerActivityFlowsTest.php +72 -0
  297. package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +26 -0
  298. package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +71 -0
  299. package/server/tests/Feature/Http/Internal/TelematicsStorageDeadlinesTest.php +119 -0
  300. package/server/tests/InternalImportExportControllerContractsTest.php +5 -8
  301. package/server/tests/NavigatorControllerContractsTest.php +36 -4
  302. package/server/tests/NotificationAndMailContractsTest.php +31 -0
  303. package/server/tests/ObserverContractsTest.php +1 -1
  304. package/server/tests/OrchestratorConsumableApiTest.php +42 -0
  305. package/server/tests/OrderConfigLifecycleTest.php +120 -0
  306. package/server/tests/ProviderContractsTest.php +10 -0
  307. package/server/tests/ReportSchemaContractsTest.php +120 -6
  308. package/server/tests/SettingControllerContractsTest.php +429 -18
  309. package/server/tests/SmallControllerContractsTest.php +8 -5
  310. package/server/tests/Support/PruneTelematicsDataProbe.php +55 -0
  311. package/server/tests/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +2 -2
  312. package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +353 -0
  313. package/server/tests/Unit/Events/OrderDispatchFailedTest.php +2 -1
  314. package/server/tests/Unit/Jobs/DispatchTelematicsRetentionJobsTest.php +114 -0
  315. package/server/tests/Unit/Jobs/PruneTelematicsDataJobTest.php +60 -0
  316. package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +20 -0
  317. package/server/tests/Unit/Support/Analytics/LiveFleetTest.php +6 -0
  318. package/server/tests/Unit/Support/AuthorizationTest.php +142 -0
  319. package/server/tests/Unit/Support/MaintainableAndOperationalAlertsTest.php +12 -1
  320. package/server/tests/Unit/Support/MoreQuerySeamsTest.php +11 -2
  321. package/server/tests/Unit/Support/Telematics/Retention/RetentionPolicyTest.php +190 -0
  322. package/server/tests/Unit/Support/Telematics/Retention/TelemetryActivityTest.php +68 -0
  323. package/server/tests/Unit/Tracking/TrackingOptionsCompanySettingsTest.php +109 -0
  324. package/translations/en-us.yaml +108 -0
@@ -8,7 +8,21 @@ export default class ManagementPlacesIndexController extends Controller {
8
8
  @service intl;
9
9
 
10
10
  /** query params */
11
- @tracked queryParams = ['name', 'page', 'limit', 'sort', 'query', 'public_id', 'country', 'phone', 'created_at', 'updated_at', 'city', 'neighborhood', 'state'];
11
+ @tracked queryParams = this.placeActions.queryParamsFor([
12
+ 'name',
13
+ 'page',
14
+ 'limit',
15
+ 'sort',
16
+ 'query',
17
+ 'public_id',
18
+ 'country',
19
+ 'phone',
20
+ 'created_at',
21
+ 'updated_at',
22
+ 'city',
23
+ 'neighborhood',
24
+ 'state',
25
+ ]);
12
26
  @tracked page = 1;
13
27
  @tracked limit;
14
28
  @tracked sort = '-created_at';
@@ -25,28 +39,35 @@ export default class ManagementPlacesIndexController extends Controller {
25
39
  get actionButtons() {
26
40
  return [
27
41
  {
42
+ id: 'refresh',
28
43
  icon: 'refresh',
29
44
  onClick: this.placeActions.refresh,
30
45
  helpText: this.intl.t('common.refresh'),
31
46
  },
32
47
  {
48
+ id: 'create',
33
49
  text: this.intl.t('common.new'),
34
50
  type: 'primary',
35
51
  icon: 'plus',
36
52
  onClick: this.placeActions.transition.create,
53
+ permission: 'fleet-ops create place',
37
54
  },
38
55
  {
56
+ id: 'import',
39
57
  text: this.intl.t('common.import'),
40
58
  type: 'magic',
41
59
  icon: 'upload',
42
60
  onClick: this.placeActions.import,
61
+ permission: 'fleet-ops import place',
43
62
  },
44
63
  {
64
+ id: 'export',
45
65
  text: this.intl.t('common.export'),
46
66
  icon: 'long-arrow-up',
47
67
  iconClass: 'rotate-icon-45',
48
68
  wrapperClass: 'hidden md:flex',
49
69
  onClick: this.placeActions.export,
70
+ permission: 'fleet-ops export place',
50
71
  },
51
72
  ];
52
73
  }
@@ -57,9 +78,11 @@ export default class ManagementPlacesIndexController extends Controller {
57
78
 
58
79
  return [
59
80
  {
81
+ id: 'bulk-delete',
60
82
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
61
83
  class: 'text-red-500',
62
84
  fn: this.placeActions.bulkDelete,
85
+ permission: 'fleet-ops delete place',
63
86
  },
64
87
  ];
65
88
  }
@@ -68,6 +91,7 @@ export default class ManagementPlacesIndexController extends Controller {
68
91
  get columns() {
69
92
  return [
70
93
  {
94
+ id: 'name',
71
95
  sticky: true,
72
96
  label: this.intl.t('column.name'),
73
97
  valuePath: 'name',
@@ -83,6 +107,7 @@ export default class ManagementPlacesIndexController extends Controller {
83
107
  filterComponent: 'filter/string',
84
108
  },
85
109
  {
110
+ id: 'address',
86
111
  sticky: true,
87
112
  label: this.intl.t('column.address'),
88
113
  valuePath: 'address',
@@ -96,6 +121,7 @@ export default class ManagementPlacesIndexController extends Controller {
96
121
  filterComponent: 'filter/string',
97
122
  },
98
123
  {
124
+ id: 'public-id',
99
125
  label: this.intl.t('column.id'),
100
126
  valuePath: 'public_id',
101
127
  cellComponent: 'click-to-copy',
@@ -106,6 +132,7 @@ export default class ManagementPlacesIndexController extends Controller {
106
132
  filterComponent: 'filter/string',
107
133
  },
108
134
  {
135
+ id: 'city',
109
136
  label: this.intl.t('column.city'),
110
137
  valuePath: 'city',
111
138
  cellComponent: 'table/cell/anchor',
@@ -120,6 +147,7 @@ export default class ManagementPlacesIndexController extends Controller {
120
147
  filterComponent: 'filter/string',
121
148
  },
122
149
  {
150
+ id: 'state',
123
151
  label: this.intl.t('column.state'),
124
152
  valuePath: 'state',
125
153
  cellComponent: 'table/cell/anchor',
@@ -134,6 +162,7 @@ export default class ManagementPlacesIndexController extends Controller {
134
162
  filterComponent: 'filter/string',
135
163
  },
136
164
  {
165
+ id: 'postal-code',
137
166
  label: this.intl.t('column.postal-code'),
138
167
  valuePath: 'postal_code',
139
168
  cellComponent: 'table/cell/anchor',
@@ -145,6 +174,7 @@ export default class ManagementPlacesIndexController extends Controller {
145
174
  filterComponent: 'filter/string',
146
175
  },
147
176
  {
177
+ id: 'country-name',
148
178
  label: this.intl.t('column.country'),
149
179
  valuePath: 'country_name',
150
180
  cellComponent: 'table/cell/base',
@@ -156,6 +186,7 @@ export default class ManagementPlacesIndexController extends Controller {
156
186
  filterParam: 'country',
157
187
  },
158
188
  {
189
+ id: 'neighborhood',
159
190
  label: this.intl.t('column.neighborhood'),
160
191
  valuePath: 'neighborhood',
161
192
  cellComponent: 'table/cell/anchor',
@@ -170,6 +201,7 @@ export default class ManagementPlacesIndexController extends Controller {
170
201
  filterComponent: 'filter/string',
171
202
  },
172
203
  {
204
+ id: 'phone',
173
205
  label: this.intl.t('column.phone'),
174
206
  valuePath: 'phone',
175
207
  cellComponent: 'table/cell/base',
@@ -180,6 +212,7 @@ export default class ManagementPlacesIndexController extends Controller {
180
212
  filterComponent: 'filter/string',
181
213
  },
182
214
  {
215
+ id: 'created-at',
183
216
  label: this.intl.t('column.created-at'),
184
217
  valuePath: 'createdAt',
185
218
  sortParam: 'created_at',
@@ -189,6 +222,7 @@ export default class ManagementPlacesIndexController extends Controller {
189
222
  filterComponent: 'filter/date',
190
223
  },
191
224
  {
225
+ id: 'updated-at',
192
226
  label: this.intl.t('column.updated-at'),
193
227
  valuePath: 'updatedAt',
194
228
  sortParam: 'updated_at',
@@ -200,6 +234,7 @@ export default class ManagementPlacesIndexController extends Controller {
200
234
  },
201
235
 
202
236
  {
237
+ id: 'row-actions',
203
238
  label: '',
204
239
  cellComponent: 'table/cell/dropdown',
205
240
  ddButtonText: false,
@@ -212,11 +247,13 @@ export default class ManagementPlacesIndexController extends Controller {
212
247
  width: 60,
213
248
  actions: [
214
249
  {
250
+ id: 'view',
215
251
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.place') }),
216
252
  fn: this.placeActions.transition.view,
217
253
  permission: 'fleet-ops view place',
218
254
  },
219
255
  {
256
+ id: 'edit',
220
257
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.place') }),
221
258
  fn: this.placeActions.transition.edit,
222
259
  permission: 'fleet-ops update place',
@@ -225,6 +262,7 @@ export default class ManagementPlacesIndexController extends Controller {
225
262
  separator: true,
226
263
  },
227
264
  {
265
+ id: 'locate',
228
266
  label: this.intl.t('place.actions.locate-place', { resource: this.intl.t('resource.place') }),
229
267
  fn: this.placeActions.locate,
230
268
  permission: 'fleet-ops view place',
@@ -233,6 +271,7 @@ export default class ManagementPlacesIndexController extends Controller {
233
271
  separator: true,
234
272
  },
235
273
  {
274
+ id: 'delete',
236
275
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.place') }),
237
276
  fn: this.placeActions.delete,
238
277
  permission: 'fleet-ops delete place',
@@ -32,6 +32,7 @@ export default class ManagementTrailersIndexDetailsController extends Controller
32
32
  permission: 'fleet-ops update trailer',
33
33
  },
34
34
  {
35
+ id: 'more',
35
36
  // Actions dropdown — shared with the trailer context panel
36
37
  icon: 'ellipsis-h',
37
38
  iconPrefix: 'fas',
@@ -16,7 +16,7 @@ export default class ManagementTrailersIndexController extends Controller {
16
16
  @service store;
17
17
 
18
18
  /** query params */
19
- @tracked queryParams = [
19
+ @tracked queryParams = this.trailerActions.queryParamsFor([
20
20
  'page',
21
21
  'limit',
22
22
  'sort',
@@ -42,7 +42,7 @@ export default class ManagementTrailersIndexController extends Controller {
42
42
  'last_online_at',
43
43
  'created_at',
44
44
  'updated_at',
45
- ];
45
+ ]);
46
46
  @tracked query = null;
47
47
  @tracked page = 1;
48
48
  @tracked limit;
@@ -75,16 +75,19 @@ export default class ManagementTrailersIndexController extends Controller {
75
75
  get actionButtons() {
76
76
  return [
77
77
  {
78
+ id: 'more',
78
79
  component: 'dropdown-button',
79
80
  icon: 'display',
80
81
  size: 'xs',
81
82
  items: [
82
83
  {
84
+ id: 'table-view',
83
85
  label: this.intl.t('common.table-view'),
84
86
  icon: 'table-list',
85
87
  onClick: () => this.setLayout('table'),
86
88
  },
87
89
  {
90
+ id: 'grid-view',
88
91
  label: this.intl.t('common.grid-view'),
89
92
  icon: 'grip',
90
93
  onClick: () => this.setLayout('grid'),
@@ -94,11 +97,13 @@ export default class ManagementTrailersIndexController extends Controller {
94
97
  helpText: this.intl.t('common.change-layout'),
95
98
  },
96
99
  {
100
+ id: 'refresh',
97
101
  icon: 'refresh',
98
102
  onClick: this.trailerActions.refresh,
99
103
  helpText: this.intl.t('common.refresh'),
100
104
  },
101
105
  {
106
+ id: 'create',
102
107
  text: this.intl.t('common.new'),
103
108
  type: 'primary',
104
109
  icon: 'plus',
@@ -106,6 +111,7 @@ export default class ManagementTrailersIndexController extends Controller {
106
111
  permission: 'fleet-ops create trailer',
107
112
  },
108
113
  {
114
+ id: 'import',
109
115
  text: this.intl.t('common.import'),
110
116
  type: 'magic',
111
117
  icon: 'upload',
@@ -113,6 +119,7 @@ export default class ManagementTrailersIndexController extends Controller {
113
119
  permission: 'fleet-ops import trailer',
114
120
  },
115
121
  {
122
+ id: 'export',
116
123
  text: this.intl.t('common.export'),
117
124
  icon: 'long-arrow-up',
118
125
  iconClass: 'rotate-icon-45',
@@ -129,6 +136,7 @@ export default class ManagementTrailersIndexController extends Controller {
129
136
 
130
137
  return [
131
138
  {
139
+ id: 'bulk-delete',
132
140
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
133
141
  class: 'text-red-500',
134
142
  fn: this.trailerActions.bulkDelete,
@@ -161,6 +169,7 @@ export default class ManagementTrailersIndexController extends Controller {
161
169
  get columns() {
162
170
  return [
163
171
  {
172
+ id: 'display-name',
164
173
  sticky: true,
165
174
  label: this.intl.t('trailer.columns.name'),
166
175
  valuePath: 'displayName',
@@ -175,6 +184,7 @@ export default class ManagementTrailersIndexController extends Controller {
175
184
  filterParam: 'name',
176
185
  },
177
186
  {
187
+ id: 'type',
178
188
  label: this.intl.t('trailer.columns.type'),
179
189
  valuePath: 'type',
180
190
  cellComponent: 'cell/translated-value',
@@ -190,6 +200,7 @@ export default class ManagementTrailersIndexController extends Controller {
190
200
  width: 130,
191
201
  },
192
202
  {
203
+ id: 'plate-number',
193
204
  label: this.intl.t('trailer.columns.plate-number'),
194
205
  valuePath: 'plate_number',
195
206
  cellComponent: 'table/cell/base',
@@ -201,6 +212,7 @@ export default class ManagementTrailersIndexController extends Controller {
201
212
  filterParam: 'plate_number',
202
213
  },
203
214
  {
215
+ id: 'code',
204
216
  label: this.intl.t('trailer.columns.code'),
205
217
  valuePath: 'code',
206
218
  cellComponent: 'table/cell/base',
@@ -211,6 +223,7 @@ export default class ManagementTrailersIndexController extends Controller {
211
223
  filterParam: 'code',
212
224
  },
213
225
  {
226
+ id: 'current-vehicle-name',
214
227
  label: this.intl.t('trailer.columns.vehicle'),
215
228
  valuePath: 'current_vehicle_name',
216
229
  cellComponent: 'cell/vehicle-identity',
@@ -232,6 +245,7 @@ export default class ManagementTrailersIndexController extends Controller {
232
245
  model: 'vehicle',
233
246
  },
234
247
  {
248
+ id: 'attachment-state',
235
249
  label: this.intl.t('trailer.columns.attachment-state'),
236
250
  valuePath: 'attachment_state',
237
251
  cellComponent: 'cell/translated-value',
@@ -248,6 +262,7 @@ export default class ManagementTrailersIndexController extends Controller {
248
262
  width: 120,
249
263
  },
250
264
  {
265
+ id: 'status',
251
266
  label: this.intl.t('trailer.columns.status'),
252
267
  valuePath: 'status',
253
268
  cellComponent: 'cell/translated-value',
@@ -264,6 +279,7 @@ export default class ManagementTrailersIndexController extends Controller {
264
279
  width: 120,
265
280
  },
266
281
  {
282
+ id: 'connectivity-status',
267
283
  label: this.intl.t('trailer.columns.connectivity'),
268
284
  valuePath: 'connectivity_status',
269
285
  cellComponent: 'cell/translated-value',
@@ -279,6 +295,7 @@ export default class ManagementTrailersIndexController extends Controller {
279
295
  width: 140,
280
296
  },
281
297
  {
298
+ id: 'last-online-at',
282
299
  label: this.intl.t('trailer.columns.last-online'),
283
300
  valuePath: 'lastOnlineAt',
284
301
  sortParam: 'last_online_at',
@@ -290,6 +307,7 @@ export default class ManagementTrailersIndexController extends Controller {
290
307
  filterComponent: 'filter/date',
291
308
  },
292
309
  {
310
+ id: 'location',
293
311
  label: this.intl.t('trailer.columns.location'),
294
312
  valuePath: 'location',
295
313
  cellComponent: 'table/cell/point',
@@ -300,6 +318,7 @@ export default class ManagementTrailersIndexController extends Controller {
300
318
  sortable: false,
301
319
  },
302
320
  {
321
+ id: 'devices-count',
303
322
  label: this.intl.t('trailer.columns.devices'),
304
323
  valuePath: 'devices_count',
305
324
  cellComponent: 'table/cell/base',
@@ -309,6 +328,7 @@ export default class ManagementTrailersIndexController extends Controller {
309
328
  width: 90,
310
329
  },
311
330
  {
331
+ id: 'equipment-count',
312
332
  label: this.intl.t('trailer.columns.equipment'),
313
333
  valuePath: 'equipment_count',
314
334
  cellComponent: 'table/cell/base',
@@ -318,6 +338,7 @@ export default class ManagementTrailersIndexController extends Controller {
318
338
  width: 100,
319
339
  },
320
340
  {
341
+ id: 'public-id',
321
342
  label: this.intl.t('trailer.columns.id'),
322
343
  valuePath: 'public_id',
323
344
  cellComponent: 'click-to-copy',
@@ -329,6 +350,7 @@ export default class ManagementTrailersIndexController extends Controller {
329
350
  filterParam: 'public_id',
330
351
  },
331
352
  {
353
+ id: 'vin',
332
354
  label: this.intl.t('trailer.columns.vin'),
333
355
  valuePath: 'vin',
334
356
  cellComponent: 'table/cell/base',
@@ -340,6 +362,7 @@ export default class ManagementTrailersIndexController extends Controller {
340
362
  filterParam: 'vin',
341
363
  },
342
364
  {
365
+ id: 'serial-number',
343
366
  label: this.intl.t('trailer.columns.serial-number'),
344
367
  valuePath: 'serial_number',
345
368
  cellComponent: 'table/cell/base',
@@ -351,6 +374,7 @@ export default class ManagementTrailersIndexController extends Controller {
351
374
  filterParam: 'serial_number',
352
375
  },
353
376
  {
377
+ id: 'make',
354
378
  label: this.intl.t('trailer.columns.make'),
355
379
  valuePath: 'make',
356
380
  cellComponent: 'table/cell/base',
@@ -362,6 +386,7 @@ export default class ManagementTrailersIndexController extends Controller {
362
386
  filterParam: 'trailer_make',
363
387
  },
364
388
  {
389
+ id: 'model',
365
390
  label: this.intl.t('trailer.columns.model'),
366
391
  valuePath: 'model',
367
392
  cellComponent: 'table/cell/base',
@@ -373,6 +398,7 @@ export default class ManagementTrailersIndexController extends Controller {
373
398
  filterParam: 'trailer_model',
374
399
  },
375
400
  {
401
+ id: 'year',
376
402
  label: this.intl.t('trailer.columns.year'),
377
403
  valuePath: 'year',
378
404
  cellComponent: 'table/cell/base',
@@ -384,6 +410,7 @@ export default class ManagementTrailersIndexController extends Controller {
384
410
  filterParam: 'trailer_year',
385
411
  },
386
412
  {
413
+ id: 'vendor-name',
387
414
  label: this.intl.t('trailer.columns.vendor'),
388
415
  valuePath: 'vendor_name',
389
416
  cellComponent: 'cell/vendor-identity',
@@ -401,6 +428,7 @@ export default class ManagementTrailersIndexController extends Controller {
401
428
  model: 'vendor',
402
429
  },
403
430
  {
431
+ id: 'ownership-type',
404
432
  label: this.intl.t('trailer.columns.ownership'),
405
433
  valuePath: 'ownership_type',
406
434
  cellComponent: 'cell/translated-value',
@@ -416,6 +444,7 @@ export default class ManagementTrailersIndexController extends Controller {
416
444
  filterOptionValue: 'value',
417
445
  },
418
446
  {
447
+ id: 'axle-count',
419
448
  label: this.intl.t('trailer.columns.axles'),
420
449
  valuePath: 'axle_count',
421
450
  cellComponent: 'table/cell/base',
@@ -426,6 +455,7 @@ export default class ManagementTrailersIndexController extends Controller {
426
455
  width: 90,
427
456
  },
428
457
  {
458
+ id: 'gvwr',
429
459
  label: this.intl.t('trailer.columns.gvwr'),
430
460
  valuePath: 'gvwr',
431
461
  cellComponent: 'table/cell/base',
@@ -435,6 +465,7 @@ export default class ManagementTrailersIndexController extends Controller {
435
465
  filterable: false,
436
466
  },
437
467
  {
468
+ id: 'payload-capacity',
438
469
  label: this.intl.t('trailer.columns.payload-capacity'),
439
470
  valuePath: 'payload_capacity',
440
471
  cellComponent: 'table/cell/base',
@@ -444,6 +475,7 @@ export default class ManagementTrailersIndexController extends Controller {
444
475
  filterable: false,
445
476
  },
446
477
  {
478
+ id: 'length',
447
479
  label: this.intl.t('trailer.columns.length'),
448
480
  valuePath: 'length',
449
481
  cellComponent: 'table/cell/base',
@@ -453,6 +485,7 @@ export default class ManagementTrailersIndexController extends Controller {
453
485
  filterable: false,
454
486
  },
455
487
  {
488
+ id: 'created-at',
456
489
  label: this.intl.t('trailer.columns.created-at'),
457
490
  valuePath: 'createdAt',
458
491
  sortParam: 'created_at',
@@ -464,6 +497,7 @@ export default class ManagementTrailersIndexController extends Controller {
464
497
  filterComponent: 'filter/date',
465
498
  },
466
499
  {
500
+ id: 'updated-at',
467
501
  label: this.intl.t('trailer.columns.updated-at'),
468
502
  valuePath: 'updatedAt',
469
503
  sortParam: 'updated_at',
@@ -476,6 +510,7 @@ export default class ManagementTrailersIndexController extends Controller {
476
510
  filterComponent: 'filter/date',
477
511
  },
478
512
  {
513
+ id: 'row-actions',
479
514
  label: '',
480
515
  cellComponent: 'table/cell/dropdown',
481
516
  ddButtonText: false,
@@ -488,16 +523,19 @@ export default class ManagementTrailersIndexController extends Controller {
488
523
  width: 60,
489
524
  actions: [
490
525
  {
526
+ id: 'view',
491
527
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.trailer') }),
492
528
  fn: this.trailerActions.transition.view,
493
529
  permission: 'fleet-ops view trailer',
494
530
  },
495
531
  {
532
+ id: 'edit',
496
533
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.trailer') }),
497
534
  fn: this.trailerActions.transition.edit,
498
535
  permission: 'fleet-ops update trailer',
499
536
  },
500
537
  {
538
+ id: 'locate',
501
539
  label: this.intl.t('trailer.actions.locate'),
502
540
  fn: this.trailerActions.locate,
503
541
  permission: 'fleet-ops view trailer',
@@ -507,23 +545,27 @@ export default class ManagementTrailersIndexController extends Controller {
507
545
  separator: true,
508
546
  },
509
547
  {
548
+ id: 'attach-vehicle',
510
549
  label: this.intl.t('trailer.actions.attach-vehicle'),
511
550
  fn: this.trailerActions.attachVehicle,
512
551
  permission: 'fleet-ops attach-vehicle-for trailer',
513
552
  isVisible: (trailer) => trailer.attachment_state !== 'attached',
514
553
  },
515
554
  {
555
+ id: 'detach-vehicle',
516
556
  label: this.intl.t('trailer.actions.detach-vehicle'),
517
557
  fn: this.trailerActions.detachVehicle,
518
558
  permission: 'fleet-ops detach-vehicle-for trailer',
519
559
  isVisible: (trailer) => trailer.attachment_state === 'attached',
520
560
  },
521
561
  {
562
+ id: 'attach-device',
522
563
  label: this.intl.t('trailer.actions.attach-device'),
523
564
  fn: this.trailerActions.attachDevice,
524
565
  permission: 'fleet-ops attach-device-for trailer',
525
566
  },
526
567
  {
568
+ id: 'attach-equipment',
527
569
  label: this.intl.t('trailer.actions.attach-equipment'),
528
570
  fn: this.trailerActions.attachEquipment,
529
571
  permission: 'fleet-ops attach-equipment-for trailer',
@@ -532,16 +574,19 @@ export default class ManagementTrailersIndexController extends Controller {
532
574
  separator: true,
533
575
  },
534
576
  {
577
+ id: 'schedule-maintenance',
535
578
  label: this.intl.t('trailer.actions.schedule-maintenance'),
536
579
  fn: this.trailerActions.scheduleMaintenance,
537
580
  permission: 'fleet-ops create maintenance-schedule',
538
581
  },
539
582
  {
583
+ id: 'create-work-order',
540
584
  label: this.intl.t('trailer.actions.create-work-order'),
541
585
  fn: this.trailerActions.createWorkOrder,
542
586
  permission: 'fleet-ops create work-order',
543
587
  },
544
588
  {
589
+ id: 'log-maintenance',
545
590
  label: this.intl.t('trailer.actions.log-maintenance'),
546
591
  fn: this.trailerActions.logMaintenance,
547
592
  permission: 'fleet-ops create maintenance',
@@ -550,6 +595,7 @@ export default class ManagementTrailersIndexController extends Controller {
550
595
  separator: true,
551
596
  },
552
597
  {
598
+ id: 'delete',
553
599
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.trailer') }),
554
600
  fn: this.trailerActions.delete,
555
601
  permission: 'fleet-ops delete trailer',
@@ -562,6 +608,7 @@ export default class ManagementTrailersIndexController extends Controller {
562
608
  searchable: false,
563
609
  },
564
610
  {
611
+ id: 'devices',
565
612
  label: this.intl.t('resource.devices'),
566
613
  valuePath: 'devices',
567
614
  cellComponent: 'cell/resource-list',
@@ -575,6 +622,7 @@ export default class ManagementTrailersIndexController extends Controller {
575
622
  modelNamePath: 'displayName',
576
623
  },
577
624
  {
625
+ id: 'refrigerated',
578
626
  label: this.intl.t('trailer.columns.refrigerated'),
579
627
  valuePath: 'refrigerated',
580
628
  cellComponent: 'table/cell/checkbox',
@@ -68,6 +68,7 @@ export default class ManagementVehiclesIndexDetailsController extends Controller
68
68
  permission: 'fleet-ops update vehicle',
69
69
  },
70
70
  {
71
+ id: 'more',
71
72
  // Actions dropdown — shared with the vehicle context panel
72
73
  icon: 'ellipsis-h',
73
74
  iconPrefix: 'fas',