@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
@@ -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,28 +47,35 @@ 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',
58
60
  onClick: this.fuelReportActions.transition.create,
61
+ permission: 'fleet-ops create fuel-report',
59
62
  },
60
63
  {
64
+ id: 'import',
61
65
  text: this.intl.t('common.import'),
62
66
  type: 'magic',
63
67
  icon: 'upload',
64
68
  onClick: this.fuelReportActions.import,
69
+ permission: 'fleet-ops import fuel-report',
65
70
  },
66
71
  {
72
+ id: 'export',
67
73
  text: this.intl.t('common.export'),
68
74
  icon: 'long-arrow-up',
69
75
  iconClass: 'rotate-icon-45',
70
76
  wrapperClass: 'hidden md:flex',
71
77
  onClick: this.fuelReportActions.export,
78
+ permission: 'fleet-ops export fuel-report',
72
79
  },
73
80
  ];
74
81
  }
@@ -79,9 +86,11 @@ export default class ManagementFuelReportsIndexController extends Controller {
79
86
 
80
87
  return [
81
88
  {
89
+ id: 'bulk-delete',
82
90
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
83
91
  class: 'text-red-500',
84
92
  fn: this.fuelReportActions.bulkDelete,
93
+ permission: 'fleet-ops delete fuel-report',
85
94
  },
86
95
  ];
87
96
  }
@@ -90,6 +99,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
90
99
  get columns() {
91
100
  return [
92
101
  {
102
+ id: 'public-id',
93
103
  sticky: true,
94
104
  label: this.intl.t('column.id'),
95
105
  valuePath: 'public_id',
@@ -102,6 +112,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
102
112
  filterComponent: 'filter/string',
103
113
  },
104
114
  {
115
+ id: 'reporter-name',
105
116
  label: this.intl.t('column.reporter'),
106
117
  valuePath: 'reporter_name',
107
118
  cellComponent: 'table/cell/user-identity',
@@ -116,6 +127,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
116
127
  model: 'user',
117
128
  },
118
129
  {
130
+ id: 'driver-name',
119
131
  label: this.intl.t('column.driver'),
120
132
  valuePath: 'driver_name',
121
133
  cellComponent: 'cell/driver-identity',
@@ -132,6 +144,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
132
144
  model: 'driver',
133
145
  },
134
146
  {
147
+ id: 'vehicle-name',
135
148
  label: this.intl.t('column.vehicle'),
136
149
  valuePath: 'vehicle_name',
137
150
  cellComponent: 'cell/vehicle-identity',
@@ -149,6 +162,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
149
162
  modelNamePath: 'displayName',
150
163
  },
151
164
  {
165
+ id: 'status',
152
166
  label: this.intl.t('column.status'),
153
167
  valuePath: 'status',
154
168
  cellComponent: 'table/cell/status',
@@ -159,6 +173,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
159
173
  filterOptions: ['draft', 'pending-approval', 'approved', 'rejected', 'revised', 'submitted', 'in-review', 'confirmed', 'processed', 'archived', 'cancelled'],
160
174
  },
161
175
  {
176
+ id: 'source',
162
177
  label: 'Source',
163
178
  valuePath: 'source',
164
179
  resizable: true,
@@ -168,6 +183,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
168
183
  filterOptions: ['manual', 'import', 'fuel_provider'],
169
184
  },
170
185
  {
186
+ id: 'provider',
171
187
  label: 'Provider',
172
188
  valuePath: 'provider',
173
189
  resizable: true,
@@ -176,6 +192,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
176
192
  filterComponent: 'filter/string',
177
193
  },
178
194
  {
195
+ id: 'volume',
179
196
  label: this.intl.t('column.volume'),
180
197
  valuePath: 'volume',
181
198
  cellComponent: 'click-to-copy',
@@ -186,6 +203,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
186
203
  filterComponent: 'filter/string',
187
204
  },
188
205
  {
206
+ id: 'odometer',
189
207
  label: this.intl.t('column.odometer'),
190
208
  valuePath: 'odometer',
191
209
  cellComponent: 'click-to-copy',
@@ -196,6 +214,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
196
214
  filterComponent: 'filter/string',
197
215
  },
198
216
  {
217
+ id: 'created-at',
199
218
  label: this.intl.t('column.created-at'),
200
219
  valuePath: 'createdAt',
201
220
  sortParam: 'created_at',
@@ -205,6 +224,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
205
224
  filterComponent: 'filter/date',
206
225
  },
207
226
  {
227
+ id: 'updated-at',
208
228
  label: this.intl.t('column.updated-at'),
209
229
  valuePath: 'updatedAt',
210
230
  sortParam: 'updated_at',
@@ -215,6 +235,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
215
235
  filterComponent: 'filter/date',
216
236
  },
217
237
  {
238
+ id: 'row-actions',
218
239
  label: '',
219
240
  cellComponent: 'table/cell/dropdown',
220
241
  ddButtonText: false,
@@ -227,11 +248,13 @@ export default class ManagementFuelReportsIndexController extends Controller {
227
248
  width: 60,
228
249
  actions: [
229
250
  {
251
+ id: 'view',
230
252
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.fuel-report') }),
231
253
  fn: this.fuelReportActions.transition.view,
232
254
  permission: 'fleet-ops view fuel-report',
233
255
  },
234
256
  {
257
+ id: 'edit',
235
258
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.fuel-report') }),
236
259
  fn: this.fuelReportActions.transition.edit,
237
260
  permission: 'fleet-ops update fuel-report',
@@ -240,6 +263,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
240
263
  separator: true,
241
264
  },
242
265
  {
266
+ id: 'delete',
243
267
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.fuel-report') }),
244
268
  fn: this.fuelReportActions.delete,
245
269
  permission: 'fleet-ops delete fuel-report',
@@ -63,14 +63,17 @@ 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'),
76
+ permission: 'fleet-ops list fuel-provider-connection',
74
77
  },
75
78
  ];
76
79
  }
@@ -84,8 +87,10 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
84
87
 
85
88
  return [
86
89
  {
90
+ id: 'bulk-reprocess',
87
91
  label: `Reprocess ${selected.length} selected`,
88
92
  fn: () => this.confirmAction('reprocess', selected),
93
+ permission: 'fleet-ops update fuel-provider-transaction',
89
94
  },
90
95
  ];
91
96
  }
@@ -93,6 +98,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
93
98
  get columns() {
94
99
  return [
95
100
  {
101
+ id: 'provider-transaction-id',
96
102
  sticky: true,
97
103
  label: 'Transaction',
98
104
  valuePath: 'provider_transaction_id',
@@ -105,6 +111,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
105
111
  filterComponent: 'filter/string',
106
112
  },
107
113
  {
114
+ id: 'provider',
108
115
  label: 'Provider',
109
116
  valuePath: 'provider',
110
117
  resizable: true,
@@ -113,6 +120,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
113
120
  filterComponent: 'filter/string',
114
121
  },
115
122
  {
123
+ id: 'sync-status',
116
124
  label: 'Status',
117
125
  valuePath: 'sync_status',
118
126
  cellComponent: 'fuel-transaction-status',
@@ -123,6 +131,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
123
131
  filterOptions: ['imported', 'matched', 'unmatched', 'reviewed', 'ignored', 'duplicate', 'error'],
124
132
  },
125
133
  {
134
+ id: 'vehicle-name',
126
135
  label: 'Vehicle',
127
136
  valuePath: 'vehicle_name',
128
137
  cellComponent: 'cell/vehicle-identity',
@@ -137,28 +146,33 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
137
146
  modelNamePath: 'displayName',
138
147
  },
139
148
  {
149
+ id: 'vehicle-card-id',
140
150
  label: 'Card / Internal',
141
151
  valuePath: 'vehicle_card_id',
142
152
  resizable: true,
143
153
  },
144
154
  {
155
+ id: 'trip-number',
145
156
  label: 'Trip',
146
157
  valuePath: 'trip_number',
147
158
  resizable: true,
148
159
  hidden: true,
149
160
  },
150
161
  {
162
+ id: 'station-name',
151
163
  label: 'Station',
152
164
  valuePath: 'station_name',
153
165
  resizable: true,
154
166
  },
155
167
  {
168
+ id: 'volume',
156
169
  label: 'Liters',
157
170
  valuePath: 'volume',
158
171
  resizable: true,
159
172
  sortable: true,
160
173
  },
161
174
  {
175
+ id: 'amount',
162
176
  label: 'Amount',
163
177
  valuePath: 'amount',
164
178
  cellComponent: 'table/cell/currency',
@@ -166,6 +180,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
166
180
  sortable: true,
167
181
  },
168
182
  {
183
+ id: 'fuel-report-id',
169
184
  label: 'Fuel Report',
170
185
  valuePath: 'fuel_report_id',
171
186
  cellComponent: 'cell/fuel-report-identity',
@@ -175,6 +190,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
175
190
  resizable: true,
176
191
  },
177
192
  {
193
+ id: 'transaction-at',
178
194
  label: 'Date',
179
195
  valuePath: 'transactionAt',
180
196
  sortParam: 'transaction_at',
@@ -185,6 +201,7 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
185
201
  filterComponent: 'filter/date',
186
202
  },
187
203
  {
204
+ id: 'row-actions',
188
205
  label: '',
189
206
  cellComponent: 'table/cell/dropdown',
190
207
  ddButtonText: false,
@@ -196,14 +213,35 @@ export default class ManagementFuelTransactionsIndexController extends Controlle
196
213
  sticky: 'right',
197
214
  width: 60,
198
215
  actions: [
199
- { label: 'Review Details', fn: this.openDetails },
200
- { label: 'Open Fuel Report', fn: this.openFuelReport, isVisible: (transaction) => Boolean(transaction.fuel_report_id) },
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
+ },
201
224
  { separator: true },
202
- { label: 'Match to Vehicle', fn: this.matchVehicle },
203
- { label: 'Match to Order', fn: this.matchOrder },
204
- { label: 'Reprocess / Rematch', fn: (transaction) => this.confirmAction('reprocess', transaction) },
205
- { label: 'Ignore Transaction', fn: (transaction) => this.confirmAction('ignored', transaction) },
206
- { label: 'Mark Reviewed', fn: (transaction) => this.confirmAction('reviewed', 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
+ },
207
245
  ],
208
246
  sortable: false,
209
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()),
@@ -11,7 +11,7 @@ export default class ManagementIssuesIndexController extends Controller {
11
11
  @service intl;
12
12
 
13
13
  /** query params */
14
- @tracked queryParams = [
14
+ @tracked queryParams = this.issueActions.queryParamsFor([
15
15
  'page',
16
16
  'limit',
17
17
  'sort',
@@ -28,7 +28,7 @@ export default class ManagementIssuesIndexController extends Controller {
28
28
  'priority',
29
29
  'cateogry',
30
30
  'type',
31
- ];
31
+ ]);
32
32
  @tracked page = 1;
33
33
  @tracked limit;
34
34
  @tracked sort = '-created_at';
@@ -47,28 +47,35 @@ export default class ManagementIssuesIndexController extends Controller {
47
47
  get actionButtons() {
48
48
  return [
49
49
  {
50
+ id: 'refresh',
50
51
  icon: 'refresh',
51
52
  onClick: this.issueActions.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',
58
60
  onClick: this.issueActions.transition.create,
61
+ permission: 'fleet-ops create issue',
59
62
  },
60
63
  {
64
+ id: 'import',
61
65
  text: this.intl.t('common.import'),
62
66
  type: 'magic',
63
67
  icon: 'upload',
64
68
  onClick: this.issueActions.import,
69
+ permission: 'fleet-ops import issue',
65
70
  },
66
71
  {
72
+ id: 'export',
67
73
  text: this.intl.t('common.export'),
68
74
  icon: 'long-arrow-up',
69
75
  iconClass: 'rotate-icon-45',
70
76
  wrapperClass: 'hidden md:flex',
71
77
  onClick: this.issueActions.export,
78
+ permission: 'fleet-ops export issue',
72
79
  },
73
80
  ];
74
81
  }
@@ -79,9 +86,11 @@ export default class ManagementIssuesIndexController extends Controller {
79
86
 
80
87
  return [
81
88
  {
89
+ id: 'bulk-delete',
82
90
  label: this.intl.t('common.delete-selected-count', { count: selected.length }),
83
91
  class: 'text-red-500',
84
92
  fn: this.issueActions.bulkDelete,
93
+ permission: 'fleet-ops delete issue',
85
94
  },
86
95
  ];
87
96
  }
@@ -90,6 +99,7 @@ export default class ManagementIssuesIndexController extends Controller {
90
99
  get columns() {
91
100
  return [
92
101
  {
102
+ id: 'public-id',
93
103
  sticky: true,
94
104
  label: this.intl.t('column.id'),
95
105
  valuePath: 'public_id',
@@ -100,6 +110,7 @@ export default class ManagementIssuesIndexController extends Controller {
100
110
  sortable: true,
101
111
  },
102
112
  {
113
+ id: 'priority',
103
114
  label: this.intl.t('column.priority'),
104
115
  valuePath: 'priority',
105
116
  cellComponent: 'table/cell/status',
@@ -110,6 +121,7 @@ export default class ManagementIssuesIndexController extends Controller {
110
121
  filterOptions: ['low', 'medium', 'high', 'critical', 'scheduled-maintenance', 'operational-suggestion'],
111
122
  },
112
123
  {
124
+ id: 'type',
113
125
  label: this.intl.t('column.type'),
114
126
  valuePath: 'type',
115
127
  humanize: true,
@@ -123,6 +135,7 @@ export default class ManagementIssuesIndexController extends Controller {
123
135
  placeholder: 'Select issue type',
124
136
  },
125
137
  {
138
+ id: 'category',
126
139
  label: this.intl.t('column.category'),
127
140
  valuePath: 'category',
128
141
  humanize: true,
@@ -136,6 +149,7 @@ export default class ManagementIssuesIndexController extends Controller {
136
149
  placeholder: 'Select issue category',
137
150
  },
138
151
  {
152
+ id: 'reporter-name',
139
153
  label: this.intl.t('column.reporter'),
140
154
  valuePath: 'reporter_name',
141
155
  cellComponent: 'table/cell/user-identity',
@@ -151,6 +165,7 @@ export default class ManagementIssuesIndexController extends Controller {
151
165
  model: 'user',
152
166
  },
153
167
  {
168
+ id: 'assignee-name',
154
169
  label: this.intl.t('column.assignee'),
155
170
  valuePath: 'assignee_name',
156
171
  cellComponent: 'table/cell/user-identity',
@@ -166,6 +181,7 @@ export default class ManagementIssuesIndexController extends Controller {
166
181
  model: 'user',
167
182
  },
168
183
  {
184
+ id: 'driver-name',
169
185
  label: this.intl.t('column.driver'),
170
186
  valuePath: 'driver_name',
171
187
  cellComponent: 'cell/driver-identity',
@@ -182,6 +198,7 @@ export default class ManagementIssuesIndexController extends Controller {
182
198
  model: 'driver',
183
199
  },
184
200
  {
201
+ id: 'vehicle-name',
185
202
  label: this.intl.t('column.vehicle'),
186
203
  valuePath: 'vehicle_name',
187
204
  cellComponent: 'cell/vehicle-identity',
@@ -199,6 +216,7 @@ export default class ManagementIssuesIndexController extends Controller {
199
216
  modelNamePath: 'displayName',
200
217
  },
201
218
  {
219
+ id: 'status',
202
220
  label: this.intl.t('column.status'),
203
221
  valuePath: 'status',
204
222
  cellComponent: 'table/cell/status',
@@ -209,6 +227,7 @@ export default class ManagementIssuesIndexController extends Controller {
209
227
  filterOptions: ['pending', 'in-progress', 'backlogged', 'requires-update', 'in-review', 're-opened', 'duplicate', 'pending-review', 'escalated', 'completed', 'canceled'],
210
228
  },
211
229
  {
230
+ id: 'created-at',
212
231
  label: this.intl.t('column.created-at'),
213
232
  valuePath: 'createdAt',
214
233
  sortParam: 'created_at',
@@ -218,6 +237,7 @@ export default class ManagementIssuesIndexController extends Controller {
218
237
  filterComponent: 'filter/date',
219
238
  },
220
239
  {
240
+ id: 'updated-at',
221
241
  label: this.intl.t('column.updated-at'),
222
242
  valuePath: 'updatedAt',
223
243
  sortParam: 'updated_at',
@@ -228,6 +248,7 @@ export default class ManagementIssuesIndexController extends Controller {
228
248
  filterComponent: 'filter/date',
229
249
  },
230
250
  {
251
+ id: 'row-actions',
231
252
  label: '',
232
253
  cellComponent: 'table/cell/dropdown',
233
254
  ddButtonText: false,
@@ -240,11 +261,13 @@ export default class ManagementIssuesIndexController extends Controller {
240
261
  width: 60,
241
262
  actions: [
242
263
  {
264
+ id: 'view',
243
265
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.issue') }),
244
266
  fn: this.issueActions.transition.view,
245
267
  permission: 'fleet-ops view issue',
246
268
  },
247
269
  {
270
+ id: 'edit',
248
271
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.issue') }),
249
272
  fn: this.issueActions.transition.edit,
250
273
  permission: 'fleet-ops update issue',
@@ -253,6 +276,7 @@ export default class ManagementIssuesIndexController extends Controller {
253
276
  separator: true,
254
277
  },
255
278
  {
279
+ id: 'delete',
256
280
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.issue') }),
257
281
  fn: this.issueActions.delete,
258
282
  permission: 'fleet-ops delete issue',