@fleetbase/fleetops-engine 0.6.65 → 0.6.66

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 (1051) hide show
  1. package/RELEASE.md +11 -6
  2. package/addon/components/ai/create-order-preview.hbs +10 -5
  3. package/addon/components/asset/pill.hbs +24 -0
  4. package/addon/components/asset/summary.hbs +1 -0
  5. package/addon/components/asset-connection/pill.hbs +24 -0
  6. package/addon/components/asset-connection/summary.hbs +1 -0
  7. package/addon/components/attachable/pill.hbs +24 -0
  8. package/addon/components/attachable/summary.hbs +1 -0
  9. package/addon/components/cell/asset-connection-identity.hbs +1 -0
  10. package/addon/components/cell/asset-identity.hbs +1 -0
  11. package/addon/components/cell/attachable-identity.hbs +1 -0
  12. package/addon/components/cell/contact-identity.hbs +1 -0
  13. package/addon/components/cell/customer-identity.hbs +1 -0
  14. package/addon/components/cell/device-event-identity.hbs +1 -0
  15. package/addon/components/cell/device-identity.hbs +1 -24
  16. package/addon/components/cell/driver-identity.hbs +1 -33
  17. package/addon/components/cell/entity-identity.hbs +1 -0
  18. package/addon/components/cell/equipment-identity.hbs +1 -5
  19. package/addon/components/cell/facilitator-identity.hbs +1 -0
  20. package/addon/components/cell/fleet-driver-identity.hbs +1 -0
  21. package/addon/components/cell/fleet-identity.hbs +1 -0
  22. package/addon/components/cell/fuel-provider-connection-identity.hbs +1 -0
  23. package/addon/components/cell/fuel-provider-transaction-identity.hbs +1 -0
  24. package/addon/components/cell/fuel-report-identity.hbs +1 -0
  25. package/addon/components/cell/inspection-form-identity.hbs +1 -0
  26. package/addon/components/cell/inspection-item-result-identity.hbs +1 -0
  27. package/addon/components/cell/inspection-submission-identity.hbs +1 -0
  28. package/addon/components/cell/integrated-vendor-identity.hbs +1 -0
  29. package/addon/components/cell/issue-identity.hbs +1 -0
  30. package/addon/components/cell/maintenance-identity.hbs +1 -0
  31. package/addon/components/cell/maintenance-schedule-identity.hbs +1 -0
  32. package/addon/components/cell/maintenance-subject-identity.hbs +1 -0
  33. package/addon/components/cell/manifest-identity.hbs +1 -0
  34. package/addon/components/cell/manifest-stop-identity.hbs +1 -0
  35. package/addon/components/cell/order-config-identity.hbs +1 -0
  36. package/addon/components/cell/order-identity.hbs +1 -0
  37. package/addon/components/cell/part-identity.hbs +1 -5
  38. package/addon/components/cell/payload-identity.hbs +1 -0
  39. package/addon/components/cell/place-identity.hbs +1 -0
  40. package/addon/components/cell/position-identity.hbs +1 -0
  41. package/addon/components/cell/purchase-rate-identity.hbs +1 -0
  42. package/addon/components/cell/recurring-order-schedule-identity.hbs +1 -0
  43. package/addon/components/cell/resource-list.hbs +10 -0
  44. package/addon/components/cell/resource-list.js +28 -0
  45. package/addon/components/cell/route-identity.hbs +1 -0
  46. package/addon/components/cell/sensor-identity.hbs +1 -0
  47. package/addon/components/cell/service-area-identity.hbs +1 -0
  48. package/addon/components/cell/service-quote-identity.hbs +1 -0
  49. package/addon/components/cell/service-quote-item-identity.hbs +1 -0
  50. package/addon/components/cell/service-rate-fee-identity.hbs +1 -0
  51. package/addon/components/cell/service-rate-identity.hbs +1 -0
  52. package/addon/components/cell/service-rate-parcel-fee-identity.hbs +1 -0
  53. package/addon/components/cell/telematic-identity.hbs +1 -0
  54. package/addon/components/cell/tracking-number-identity.hbs +1 -0
  55. package/addon/components/cell/tracking-status-identity.hbs +1 -0
  56. package/addon/components/cell/trailer-identity.hbs +1 -0
  57. package/addon/components/cell/vehicle-device-identity.hbs +1 -0
  58. package/addon/components/cell/vehicle-identity.hbs +1 -33
  59. package/addon/components/cell/vendor-identity.hbs +1 -0
  60. package/addon/components/cell/warranty-identity.hbs +1 -0
  61. package/addon/components/cell/waypoint-identity.hbs +1 -0
  62. package/addon/components/cell/work-order-identity.hbs +1 -0
  63. package/addon/components/cell/zone-identity.hbs +1 -0
  64. package/addon/components/contact/form.hbs +2 -4
  65. package/addon/components/contact/pill.hbs +24 -0
  66. package/addon/components/contact/summary.hbs +1 -0
  67. package/addon/components/customer/create-order-form.hbs +8 -4
  68. package/addon/components/customer/form.hbs +2 -4
  69. package/addon/components/customer/order-form.hbs +10 -8
  70. package/addon/components/customer/pill.hbs +24 -0
  71. package/addon/components/customer/summary.hbs +1 -0
  72. package/addon/components/device/details.hbs +3 -1
  73. package/addon/components/device/form.hbs +4 -13
  74. package/addon/components/device/panel-header.hbs +3 -2
  75. package/addon/components/device/panel-header.js +1 -5
  76. package/addon/components/device/panel-tabs/vehicle.hbs +2 -2
  77. package/addon/components/device/pill.hbs +24 -16
  78. package/addon/components/device/summary.hbs +1 -0
  79. package/addon/components/device/telemetry.hbs +17 -0
  80. package/addon/components/device/telemetry.js +117 -0
  81. package/addon/components/device-event/details.hbs +6 -24
  82. package/addon/components/device-event/pill.hbs +24 -0
  83. package/addon/components/device-event/summary.hbs +1 -0
  84. package/addon/components/driver/details.hbs +9 -1
  85. package/addon/components/driver/form.hbs +6 -18
  86. package/addon/components/driver/panel-header.hbs +3 -4
  87. package/addon/components/driver/panel-header.js +8 -1
  88. package/addon/components/driver/pill.hbs +16 -8
  89. package/addon/components/driver/summary.hbs +1 -0
  90. package/addon/components/entity/pill.hbs +24 -0
  91. package/addon/components/entity/summary.hbs +1 -0
  92. package/addon/components/equipment/details.hbs +6 -2
  93. package/addon/components/equipment/form.hbs +10 -4
  94. package/addon/components/equipment/pill.hbs +24 -20
  95. package/addon/components/equipment/summary.hbs +1 -0
  96. package/addon/components/facilitator/pill.hbs +24 -0
  97. package/addon/components/facilitator/summary.hbs +1 -0
  98. package/addon/components/fleet/details.hbs +6 -2
  99. package/addon/components/fleet/driver-listing.hbs +3 -12
  100. package/addon/components/fleet/form.hbs +8 -4
  101. package/addon/components/fleet/pill.hbs +24 -0
  102. package/addon/components/fleet/summary.hbs +1 -0
  103. package/addon/components/fleet/vehicle-listing.hbs +3 -12
  104. package/addon/components/fleet-driver/pill.hbs +24 -0
  105. package/addon/components/fleet-driver/summary.hbs +1 -0
  106. package/addon/components/fleet-driver-listing.hbs +2 -1
  107. package/addon/components/fleet-panel/details.hbs +6 -2
  108. package/addon/components/fleet-panel/driver-listing.hbs +2 -1
  109. package/addon/components/fleet-panel/vehicle-listing.hbs +2 -1
  110. package/addon/components/fleet-vehicle-listing.hbs +2 -1
  111. package/addon/components/fuel-integration/form.hbs +125 -25
  112. package/addon/components/fuel-integration/form.js +74 -19
  113. package/addon/components/fuel-integration/hub.hbs +68 -65
  114. package/addon/components/fuel-integration/hub.js +15 -19
  115. package/addon/components/fuel-provider-connection/pill.hbs +24 -0
  116. package/addon/components/fuel-provider-connection/summary.hbs +1 -0
  117. package/addon/components/fuel-provider-transaction/pill.hbs +24 -0
  118. package/addon/components/fuel-provider-transaction/summary.hbs +1 -0
  119. package/addon/components/fuel-report/details.hbs +9 -3
  120. package/addon/components/fuel-report/form.hbs +6 -3
  121. package/addon/components/fuel-report/pill.hbs +24 -0
  122. package/addon/components/fuel-report/summary.hbs +1 -0
  123. package/addon/components/fuel-transaction-status.hbs +1 -0
  124. package/addon/components/fuel-transaction-status.js +8 -0
  125. package/addon/components/geofence-map.hbs +19 -0
  126. package/addon/components/geofence-map.js +83 -0
  127. package/addon/components/inspection-field/form.hbs +103 -0
  128. package/addon/components/inspection-field/form.js +211 -0
  129. package/addon/components/inspection-field/input.hbs +270 -0
  130. package/addon/components/inspection-field/input.js +472 -0
  131. package/addon/components/inspection-field/value.hbs +90 -0
  132. package/addon/components/inspection-field/value.js +158 -0
  133. package/addon/components/inspection-flyout.hbs +34 -0
  134. package/addon/components/inspection-flyout.js +66 -0
  135. package/addon/components/inspection-form/builder.hbs +88 -0
  136. package/addon/components/inspection-form/builder.js +211 -0
  137. package/addon/components/inspection-form/details/submissions.hbs +48 -0
  138. package/addon/components/inspection-form/details/submissions.js +42 -0
  139. package/addon/components/inspection-form/details.hbs +97 -0
  140. package/addon/components/inspection-form/details.js +57 -0
  141. package/addon/components/inspection-form/form.hbs +93 -0
  142. package/addon/components/inspection-form/form.js +79 -0
  143. package/addon/components/inspection-form/pill.hbs +24 -0
  144. package/addon/components/inspection-form/summary.hbs +1 -0
  145. package/addon/components/inspection-item-result/pill.hbs +24 -0
  146. package/addon/components/inspection-item-result/summary.hbs +1 -0
  147. package/addon/components/inspection-link/list.hbs +94 -0
  148. package/addon/components/inspection-link/list.js +129 -0
  149. package/addon/components/inspection-sheet/group.hbs +45 -0
  150. package/addon/components/inspection-sheet/group.js +75 -0
  151. package/addon/components/inspection-sheet.hbs +77 -0
  152. package/addon/components/inspection-sheet.js +152 -0
  153. package/addon/components/inspection-submission/details.hbs +149 -0
  154. package/addon/components/inspection-submission/details.js +130 -0
  155. package/addon/components/inspection-submission/form.hbs +114 -0
  156. package/addon/components/inspection-submission/form.js +129 -0
  157. package/addon/components/inspection-submission/photos.hbs +20 -0
  158. package/addon/components/inspection-submission/photos.js +57 -0
  159. package/addon/components/inspection-submission/pill.hbs +24 -0
  160. package/addon/components/inspection-submission/summary.hbs +1 -0
  161. package/addon/components/integrated-vendor/pill.hbs +24 -0
  162. package/addon/components/integrated-vendor/summary.hbs +1 -0
  163. package/addon/components/issue/details.hbs +12 -0
  164. package/addon/components/issue/details.js +36 -0
  165. package/addon/components/issue/form.hbs +10 -5
  166. package/addon/components/issue/pill.hbs +24 -0
  167. package/addon/components/issue/summary.hbs +1 -0
  168. package/addon/components/layout/fleet-ops-sidebar.js +14 -3
  169. package/addon/components/maintenance/details.hbs +9 -3
  170. package/addon/components/maintenance/form.hbs +22 -3
  171. package/addon/components/maintenance/form.js +4 -4
  172. package/addon/components/maintenance/panel-header.hbs +14 -12
  173. package/addon/components/maintenance/pill.hbs +24 -0
  174. package/addon/components/maintenance/summary.hbs +1 -0
  175. package/addon/components/maintenance-schedule/details.hbs +7 -3
  176. package/addon/components/maintenance-schedule/form.hbs +20 -2
  177. package/addon/components/maintenance-schedule/form.js +6 -6
  178. package/addon/components/maintenance-schedule/pill.hbs +24 -0
  179. package/addon/components/maintenance-schedule/summary.hbs +1 -0
  180. package/addon/components/maintenance-schedule/work-orders.hbs +39 -0
  181. package/addon/components/maintenance-schedule/work-orders.js +37 -0
  182. package/addon/components/maintenance-subject/pill.hbs +24 -0
  183. package/addon/components/maintenance-subject/summary.hbs +1 -0
  184. package/addon/components/manifest/pill.hbs +24 -0
  185. package/addon/components/manifest/summary.hbs +1 -0
  186. package/addon/components/manifest-stop/pill.hbs +24 -0
  187. package/addon/components/manifest-stop/summary.hbs +1 -0
  188. package/addon/components/map/drawer/device-event-listing.hbs +4 -14
  189. package/addon/components/map/drawer/device-event-listing.js +3 -1
  190. package/addon/components/map/drawer/driver-listing.js +6 -2
  191. package/addon/components/map/drawer/position-listing.hbs +2 -16
  192. package/addon/components/map/drawer/vehicle-listing.js +1 -2
  193. package/addon/components/modals/add-driver-shift.hbs +2 -1
  194. package/addon/components/modals/assign-driver.hbs +2 -16
  195. package/addon/components/modals/attach-device.hbs +2 -1
  196. package/addon/components/modals/attach-equipment.hbs +2 -4
  197. package/addon/components/modals/attach-telematic-device.hbs +8 -1
  198. package/addon/components/modals/attach-trailer.hbs +2 -1
  199. package/addon/components/modals/bulk-assign-driver.hbs +2 -9
  200. package/addon/components/modals/bulk-assign-orders.hbs +2 -9
  201. package/addon/components/modals/driver-assign-order.hbs +2 -6
  202. package/addon/components/modals/driver-assign-vehicle.hbs +4 -12
  203. package/addon/components/modals/driver-assign-vehicle.js +30 -0
  204. package/addon/components/modals/driver-assign-vendor.hbs +2 -1
  205. package/addon/components/modals/driver-form.hbs +4 -2
  206. package/addon/components/modals/fleet-assign-driver.hbs +2 -1
  207. package/addon/components/modals/fleet-assign-vehicle.hbs +2 -1
  208. package/addon/components/modals/fleet-form.hbs +4 -2
  209. package/addon/components/modals/fuel-connection-diagnostics.hbs +35 -0
  210. package/addon/components/modals/fuel-connection-diagnostics.js +87 -0
  211. package/addon/components/modals/fuel-report-form.hbs +4 -2
  212. package/addon/components/modals/fuel-transaction-action.hbs +48 -0
  213. package/addon/components/modals/fuel-transaction-action.js +98 -0
  214. package/addon/components/modals/group-form.hbs +2 -1
  215. package/addon/components/modals/inspection-follow-up.hbs +31 -0
  216. package/addon/components/modals/inspection-follow-up.js +39 -0
  217. package/addon/components/modals/inspection-link.hbs +100 -0
  218. package/addon/components/modals/inspection-link.js +83 -0
  219. package/addon/components/modals/issue-assign.hbs +2 -1
  220. package/addon/components/modals/issue-from.hbs +8 -4
  221. package/addon/components/modals/map-layer-form.hbs +2 -1
  222. package/addon/components/modals/order-assign-driver.hbs +2 -16
  223. package/addon/components/modals/order-form.hbs +8 -46
  224. package/addon/components/modals/order-route-form.hbs +8 -4
  225. package/addon/components/modals/place-assign-vendor.hbs +3 -2
  226. package/addon/components/modals/place-details.hbs +1 -1
  227. package/addon/components/modals/point-map.hbs +1 -1
  228. package/addon/components/modals/radar-notice.hbs +24 -0
  229. package/addon/components/modals/radar-notice.js +8 -0
  230. package/addon/components/modals/radar-save-view.hbs +7 -0
  231. package/addon/components/modals/radar-select-resource.hbs +35 -0
  232. package/addon/components/modals/radar-send-pin.hbs +20 -0
  233. package/addon/components/modals/radar-send-pin.js +8 -0
  234. package/addon/components/modals/select-trailer.hbs +2 -4
  235. package/addon/components/modals/vehicle-form.hbs +2 -1
  236. package/addon/components/modals/vendor-form.hbs +2 -3
  237. package/addon/components/order/details/activity.js +9 -0
  238. package/addon/components/order/details/detail.hbs +2 -32
  239. package/addon/components/order/form/details.hbs +10 -48
  240. package/addon/components/order/form/route.hbs +10 -12
  241. package/addon/components/order/form/service-rate.hbs +2 -3
  242. package/addon/components/order/pill.hbs +24 -34
  243. package/addon/components/order/route-editor.hbs +8 -4
  244. package/addon/components/order/schedule-card.hbs +2 -1
  245. package/addon/components/order/summary.hbs +1 -0
  246. package/addon/components/order-config/pill.hbs +24 -0
  247. package/addon/components/order-config/summary.hbs +1 -0
  248. package/addon/components/part/details.hbs +15 -3
  249. package/addon/components/part/details.js +37 -1
  250. package/addon/components/part/form.hbs +12 -5
  251. package/addon/components/part/pill.hbs +24 -0
  252. package/addon/components/part/summary.hbs +1 -0
  253. package/addon/components/payload/pill.hbs +24 -0
  254. package/addon/components/payload/summary.hbs +1 -0
  255. package/addon/components/place/details.hbs +1 -1
  256. package/addon/components/place/pill.hbs +24 -0
  257. package/addon/components/place/summary.hbs +1 -0
  258. package/addon/components/position/pill.hbs +24 -0
  259. package/addon/components/position/summary.hbs +1 -0
  260. package/addon/components/positions-replay.hbs +2 -4
  261. package/addon/components/public-inspection.hbs +174 -0
  262. package/addon/components/public-inspection.js +279 -0
  263. package/addon/components/purchase-rate/pill.hbs +24 -0
  264. package/addon/components/purchase-rate/summary.hbs +1 -0
  265. package/addon/components/radar/agenda/entry.hbs +17 -0
  266. package/addon/components/radar/agenda/entry.js +26 -0
  267. package/addon/components/radar/agenda/lane.hbs +33 -0
  268. package/addon/components/radar/agenda/lane.js +80 -0
  269. package/addon/components/radar/agenda.hbs +69 -0
  270. package/addon/components/radar/agenda.js +29 -0
  271. package/addon/components/radar/briefing.hbs +108 -0
  272. package/addon/components/radar/briefing.js +43 -0
  273. package/addon/components/radar/bulk-bar.hbs +41 -0
  274. package/addon/components/radar/bulk-bar.js +32 -0
  275. package/addon/components/radar/decision-card.hbs +28 -0
  276. package/addon/components/radar/decision-card.js +7 -0
  277. package/addon/components/radar/empty-state.hbs +30 -0
  278. package/addon/components/radar/empty-state.js +27 -0
  279. package/addon/components/radar/filter-pills.hbs +22 -0
  280. package/addon/components/radar/filter-pills.js +3 -0
  281. package/addon/components/radar/handover-card.hbs +62 -0
  282. package/addon/components/radar/handover-card.js +14 -0
  283. package/addon/components/radar/header.hbs +28 -0
  284. package/addon/components/radar/header.js +12 -0
  285. package/addon/components/radar/item-drawer.hbs +92 -0
  286. package/addon/components/radar/item-drawer.js +37 -0
  287. package/addon/components/radar/item-list.hbs +20 -0
  288. package/addon/components/radar/item-list.js +3 -0
  289. package/addon/components/radar/item-row.hbs +90 -0
  290. package/addon/components/radar/item-row.js +43 -0
  291. package/addon/components/radar/keyboard-hints.hbs +8 -0
  292. package/addon/components/radar/keyboard-hints.js +3 -0
  293. package/addon/components/radar/subject.hbs +14 -0
  294. package/addon/components/radar/subject.js +26 -0
  295. package/addon/components/radar/view-bar.hbs +27 -0
  296. package/addon/components/radar/view-bar.js +16 -0
  297. package/addon/components/recurring-order-schedule/pill.hbs +24 -0
  298. package/addon/components/recurring-order-schedule/summary.hbs +1 -0
  299. package/addon/components/resource-activity.hbs +1 -0
  300. package/addon/components/resource-activity.js +4 -0
  301. package/addon/components/route/pill.hbs +24 -0
  302. package/addon/components/route/summary.hbs +1 -0
  303. package/addon/components/select-option/asset-connection.hbs +12 -0
  304. package/addon/components/select-option/asset.hbs +12 -0
  305. package/addon/components/select-option/attachable.hbs +12 -0
  306. package/addon/components/select-option/contact.hbs +12 -0
  307. package/addon/components/select-option/customer.hbs +12 -0
  308. package/addon/components/select-option/device-event.hbs +12 -0
  309. package/addon/components/select-option/device.hbs +12 -0
  310. package/addon/components/select-option/driver.hbs +12 -0
  311. package/addon/components/select-option/entity.hbs +12 -0
  312. package/addon/components/select-option/equipment.hbs +12 -0
  313. package/addon/components/select-option/facilitator.hbs +12 -0
  314. package/addon/components/select-option/fleet-driver.hbs +12 -0
  315. package/addon/components/select-option/fleet.hbs +12 -0
  316. package/addon/components/select-option/fuel-provider-connection.hbs +12 -0
  317. package/addon/components/select-option/fuel-provider-transaction.hbs +12 -0
  318. package/addon/components/select-option/fuel-report.hbs +12 -0
  319. package/addon/components/select-option/inspection-form.hbs +12 -0
  320. package/addon/components/select-option/inspection-item-result.hbs +12 -0
  321. package/addon/components/select-option/inspection-submission.hbs +12 -0
  322. package/addon/components/select-option/integrated-vendor.hbs +12 -0
  323. package/addon/components/select-option/issue.hbs +12 -0
  324. package/addon/components/select-option/maintenance-schedule.hbs +12 -0
  325. package/addon/components/select-option/maintenance-subject.hbs +12 -0
  326. package/addon/components/select-option/maintenance.hbs +12 -0
  327. package/addon/components/select-option/manifest-stop.hbs +12 -0
  328. package/addon/components/select-option/manifest.hbs +12 -0
  329. package/addon/components/select-option/order-config.hbs +12 -0
  330. package/addon/components/select-option/order.hbs +12 -0
  331. package/addon/components/select-option/part.hbs +12 -0
  332. package/addon/components/select-option/payload.hbs +12 -0
  333. package/addon/components/select-option/place.hbs +12 -0
  334. package/addon/components/select-option/position.hbs +12 -0
  335. package/addon/components/select-option/purchase-rate.hbs +12 -0
  336. package/addon/components/select-option/recurring-order-schedule.hbs +12 -0
  337. package/addon/components/select-option/route.hbs +12 -0
  338. package/addon/components/select-option/sensor.hbs +12 -0
  339. package/addon/components/select-option/service-area.hbs +12 -0
  340. package/addon/components/select-option/service-quote-item.hbs +12 -0
  341. package/addon/components/select-option/service-quote.hbs +12 -0
  342. package/addon/components/select-option/service-rate-fee.hbs +12 -0
  343. package/addon/components/select-option/service-rate-parcel-fee.hbs +12 -0
  344. package/addon/components/select-option/service-rate.hbs +12 -0
  345. package/addon/components/select-option/telematic.hbs +12 -0
  346. package/addon/components/select-option/trackable.hbs +8 -0
  347. package/addon/components/select-option/tracking-number.hbs +12 -0
  348. package/addon/components/select-option/tracking-status.hbs +12 -0
  349. package/addon/components/select-option/trailer.hbs +12 -0
  350. package/addon/components/select-option/vehicle-device.hbs +12 -0
  351. package/addon/components/select-option/vehicle.hbs +12 -0
  352. package/addon/components/select-option/vendor.hbs +12 -0
  353. package/addon/components/select-option/warranty.hbs +12 -0
  354. package/addon/components/select-option/waypoint.hbs +12 -0
  355. package/addon/components/select-option/work-order.hbs +12 -0
  356. package/addon/components/select-option/zone.hbs +12 -0
  357. package/addon/components/sensor/details.hbs +6 -2
  358. package/addon/components/sensor/form.hbs +6 -17
  359. package/addon/components/sensor/panel-header.hbs +1 -1
  360. package/addon/components/sensor/pill.hbs +24 -0
  361. package/addon/components/sensor/summary.hbs +1 -0
  362. package/addon/components/service-area/details.hbs +1 -20
  363. package/addon/components/service-area/pill.hbs +24 -0
  364. package/addon/components/service-area/summary.hbs +1 -0
  365. package/addon/components/service-quote/pill.hbs +24 -0
  366. package/addon/components/service-quote/summary.hbs +1 -0
  367. package/addon/components/service-quote-item/pill.hbs +24 -0
  368. package/addon/components/service-quote-item/summary.hbs +1 -0
  369. package/addon/components/service-rate/details.hbs +12 -6
  370. package/addon/components/service-rate/form.hbs +10 -8
  371. package/addon/components/service-rate/pill.hbs +24 -0
  372. package/addon/components/service-rate/summary.hbs +1 -0
  373. package/addon/components/service-rate-fee/pill.hbs +24 -0
  374. package/addon/components/service-rate-fee/summary.hbs +1 -0
  375. package/addon/components/service-rate-parcel-fee/pill.hbs +24 -0
  376. package/addon/components/service-rate-parcel-fee/summary.hbs +1 -0
  377. package/addon/components/table/cell/fleet-ops-option.hbs +20 -0
  378. package/addon/components/telematic/details.hbs +4 -1
  379. package/addon/components/telematic/details.js +1 -0
  380. package/addon/components/telematic/form.hbs +6 -1
  381. package/addon/components/telematic/form.js +1 -0
  382. package/addon/components/telematic/pill.hbs +24 -0
  383. package/addon/components/telematic/settings.hbs +6 -1
  384. package/addon/components/telematic/settings.js +1 -0
  385. package/addon/components/telematic/summary.hbs +1 -0
  386. package/addon/components/telematic/telemetry-status.hbs +43 -0
  387. package/addon/components/telematic/telemetry-status.js +95 -0
  388. package/addon/components/tracking-number/pill.hbs +24 -0
  389. package/addon/components/tracking-number/summary.hbs +1 -0
  390. package/addon/components/tracking-status/pill.hbs +24 -0
  391. package/addon/components/tracking-status/summary.hbs +1 -0
  392. package/addon/components/trailer/card.hbs +2 -5
  393. package/addon/components/trailer/details.hbs +11 -5
  394. package/addon/components/trailer/details.js +4 -0
  395. package/addon/components/trailer/form.hbs +6 -3
  396. package/addon/components/trailer/pill.hbs +24 -21
  397. package/addon/components/trailer/summary.hbs +1 -0
  398. package/addon/components/vehicle/card.hbs +4 -8
  399. package/addon/components/vehicle/details/inspections.hbs +49 -0
  400. package/addon/components/vehicle/details/inspections.js +44 -0
  401. package/addon/components/vehicle/details/maintenance-history.hbs +1 -1
  402. package/addon/components/vehicle/details/schedules.hbs +2 -2
  403. package/addon/components/vehicle/details/work-orders.hbs +1 -1
  404. package/addon/components/vehicle/details.hbs +18 -1
  405. package/addon/components/vehicle/form.hbs +2 -1
  406. package/addon/components/vehicle/panel-header.hbs +3 -4
  407. package/addon/components/vehicle/panel-header.js +8 -1
  408. package/addon/components/vehicle/pill.hbs +15 -24
  409. package/addon/components/vehicle/summary.hbs +1 -0
  410. package/addon/components/vehicle-device/pill.hbs +24 -0
  411. package/addon/components/vehicle-device/summary.hbs +1 -0
  412. package/addon/components/vendor/form.hbs +2 -4
  413. package/addon/components/vendor/personnel-manager.hbs +2 -9
  414. package/addon/components/vendor/personnel-tab.hbs +1 -0
  415. package/addon/components/vendor/personnel-tab.js +4 -0
  416. package/addon/components/vendor/pill.hbs +24 -0
  417. package/addon/components/vendor/summary.hbs +1 -0
  418. package/addon/components/warranty/details.hbs +3 -1
  419. package/addon/components/warranty/form.hbs +2 -1
  420. package/addon/components/warranty/pill.hbs +24 -0
  421. package/addon/components/warranty/summary.hbs +1 -0
  422. package/addon/components/waypoint/pill.hbs +24 -0
  423. package/addon/components/waypoint/summary.hbs +1 -0
  424. package/addon/components/widget/radar.hbs +28 -0
  425. package/addon/components/widget/radar.js +44 -0
  426. package/addon/components/work-order/details.hbs +20 -4
  427. package/addon/components/work-order/details.js +64 -1
  428. package/addon/components/work-order/form.hbs +20 -2
  429. package/addon/components/work-order/form.js +10 -10
  430. package/addon/components/work-order/panel-header.hbs +15 -13
  431. package/addon/components/work-order/pill.hbs +24 -0
  432. package/addon/components/work-order/summary.hbs +1 -0
  433. package/addon/components/zone/details.hbs +2 -21
  434. package/addon/components/zone/pill.hbs +24 -0
  435. package/addon/components/zone/summary.hbs +1 -0
  436. package/addon/controllers/connectivity/devices/index/details/sensors.js +4 -0
  437. package/addon/controllers/connectivity/devices/index/details.js +1 -18
  438. package/addon/controllers/connectivity/events/index.js +1 -4
  439. package/addon/controllers/connectivity/fuel-providers/details/index.js +6 -0
  440. package/addon/controllers/connectivity/fuel-providers/details/matching.js +13 -0
  441. package/addon/controllers/connectivity/fuel-providers/details/sync.js +21 -10
  442. package/addon/controllers/connectivity/fuel-providers/details/transactions.js +5 -16
  443. package/addon/controllers/connectivity/fuel-providers/details.js +76 -13
  444. package/addon/controllers/connectivity/fuel-providers/index.js +22 -17
  445. package/addon/controllers/connectivity/sensors/index.js +1 -3
  446. package/addon/controllers/connectivity/telematics/details/events.js +8 -0
  447. package/addon/controllers/connectivity/telematics/details/sensors.js +3 -2
  448. package/addon/controllers/connectivity/telematics/index.js +3 -1
  449. package/addon/controllers/maintenance/inspection-forms/index/details.js +29 -0
  450. package/addon/controllers/maintenance/inspection-forms/index/edit.js +39 -0
  451. package/addon/controllers/maintenance/inspection-forms/index/new.js +48 -0
  452. package/addon/controllers/maintenance/inspection-forms/index.js +90 -0
  453. package/addon/controllers/maintenance/inspection-submissions/index/details.js +53 -0
  454. package/addon/controllers/maintenance/inspection-submissions/index/edit.js +39 -0
  455. package/addon/controllers/maintenance/inspection-submissions/index/new.js +48 -0
  456. package/addon/controllers/maintenance/inspection-submissions/index.js +142 -0
  457. package/addon/controllers/maintenance/maintenances/index.js +6 -2
  458. package/addon/controllers/maintenance/schedules/index/details.js +4 -86
  459. package/addon/controllers/maintenance/schedules/index.js +15 -0
  460. package/addon/controllers/maintenance/work-orders/index.js +19 -1
  461. package/addon/controllers/management/contacts/customers.js +6 -4
  462. package/addon/controllers/management/contacts/index.js +6 -3
  463. package/addon/controllers/management/drivers/index/details.js +1 -66
  464. package/addon/controllers/management/drivers/index.js +9 -34
  465. package/addon/controllers/management/fleets/index/details.js +2 -15
  466. package/addon/controllers/management/fleets/index.js +12 -20
  467. package/addon/controllers/management/fuel-reports/index.js +9 -59
  468. package/addon/controllers/management/fuel-transactions/index/details.js +51 -48
  469. package/addon/controllers/management/fuel-transactions/index.js +32 -32
  470. package/addon/controllers/management/index.js +1367 -49
  471. package/addon/controllers/management/issues/index/details.js +1 -33
  472. package/addon/controllers/management/issues/index.js +10 -59
  473. package/addon/controllers/management/trailers/index/details.js +4 -78
  474. package/addon/controllers/management/trailers/index.js +20 -22
  475. package/addon/controllers/management/vehicles/index/details.js +9 -77
  476. package/addon/controllers/management/vehicles/index.js +50 -72
  477. package/addon/controllers/management/vendors/index.js +6 -3
  478. package/addon/controllers/operations/orders/index.js +38 -11
  479. package/addon/controllers/operations/service-rates/index.js +10 -2
  480. package/addon/controllers/settings/payments/index.js +11 -2
  481. package/addon/extension.js +36 -0
  482. package/addon/helpers/initials.js +6 -0
  483. package/addon/helpers/leaflet-tile-url.js +6 -1
  484. package/addon/instance-initializers/register-fleetops-resource-descriptors.js +29 -0
  485. package/addon/modifiers/inspection-flyout.js +237 -0
  486. package/addon/modifiers/radar-keyboard.js +78 -0
  487. package/addon/modifiers/sync-value.js +26 -0
  488. package/addon/modifiers/when-changed.js +25 -0
  489. package/addon/routes/connectivity/fuel-providers/details/settings.js +5 -2
  490. package/addon/routes/connectivity/fuel-providers/details/sync.js +6 -13
  491. package/addon/routes/connectivity/fuel-providers/details/transactions.js +8 -7
  492. package/addon/routes/connectivity/fuel-providers/details.js +15 -2
  493. package/addon/routes/connectivity/fuel-providers/edit.js +2 -1
  494. package/addon/routes/connectivity/fuel-providers/index.js +5 -0
  495. package/addon/routes/maintenance/inspection-forms/index/details/index.js +3 -0
  496. package/addon/routes/maintenance/inspection-forms/index/details/submissions.js +3 -0
  497. package/addon/routes/maintenance/inspection-forms/index/details.js +18 -0
  498. package/addon/routes/maintenance/inspection-forms/index/edit.js +18 -0
  499. package/addon/routes/maintenance/inspection-forms/index/new.js +3 -0
  500. package/addon/routes/maintenance/inspection-forms/index.js +22 -0
  501. package/addon/routes/maintenance/inspection-forms.js +3 -0
  502. package/addon/routes/maintenance/inspection-submissions/index/details/audit.js +8 -0
  503. package/addon/routes/maintenance/inspection-submissions/index/details/index.js +3 -0
  504. package/addon/routes/maintenance/inspection-submissions/index/details/photos.js +8 -0
  505. package/addon/routes/maintenance/inspection-submissions/index/details.js +18 -0
  506. package/addon/routes/maintenance/inspection-submissions/index/edit.js +18 -0
  507. package/addon/routes/maintenance/inspection-submissions/index/new.js +3 -0
  508. package/addon/routes/maintenance/inspection-submissions/index.js +25 -0
  509. package/addon/routes/maintenance/inspection-submissions.js +3 -0
  510. package/addon/routes/management/fuel-transactions/index/details.js +12 -2
  511. package/addon/routes/management/fuel-transactions/index.js +6 -0
  512. package/addon/routes/management/index.js +17 -1
  513. package/addon/routes/management/vehicles/index/details/inspections.js +3 -0
  514. package/addon/routes/management/vehicles/index.js +2 -2
  515. package/addon/routes.js +24 -0
  516. package/addon/services/contact-actions.js +22 -4
  517. package/addon/services/customer-actions.js +7 -4
  518. package/addon/services/device-actions.js +28 -0
  519. package/addon/services/driver-actions.js +79 -16
  520. package/addon/services/equipment-actions.js +15 -6
  521. package/addon/services/fleet-actions.js +20 -4
  522. package/addon/services/fuel-report-actions.js +7 -7
  523. package/addon/services/inspection-form-actions.js +236 -0
  524. package/addon/services/inspection-submission-actions.js +273 -0
  525. package/addon/services/issue-actions.js +58 -7
  526. package/addon/services/maintenance-actions.js +22 -3
  527. package/addon/services/maintenance-schedule-actions.js +70 -5
  528. package/addon/services/movement-tracker.js +52 -1
  529. package/addon/services/part-actions.js +13 -7
  530. package/addon/services/place-actions.js +8 -7
  531. package/addon/services/service-area-actions.js +27 -4
  532. package/addon/services/trailer-actions.js +60 -7
  533. package/addon/services/vehicle-actions.js +58 -3
  534. package/addon/services/vendor-actions.js +8 -7
  535. package/addon/services/work-order-actions.js +14 -5
  536. package/addon/services/zone-actions.js +27 -4
  537. package/addon/styles/fleetops-engine.css +3621 -75
  538. package/addon/templates/connectivity/devices/index/details/vehicle.hbs +2 -2
  539. package/addon/templates/connectivity/events/details.hbs +2 -2
  540. package/addon/templates/connectivity/fuel-providers/details/index.hbs +65 -35
  541. package/addon/templates/connectivity/fuel-providers/details/matching.hbs +2 -2
  542. package/addon/templates/connectivity/fuel-providers/details/sync.hbs +54 -43
  543. package/addon/templates/connectivity/fuel-providers/details/transactions.hbs +10 -5
  544. package/addon/templates/connectivity/fuel-providers/details.hbs +38 -13
  545. package/addon/templates/connectivity/fuel-providers/edit.hbs +1 -0
  546. package/addon/templates/connectivity/fuel-providers/index.hbs +2 -1
  547. package/addon/templates/connectivity/fuel-providers/new.hbs +1 -1
  548. package/addon/templates/connectivity/telematics/details/attachments.hbs +2 -1
  549. package/addon/templates/maintenance/inspection-forms/index/details/index.hbs +1 -0
  550. package/addon/templates/maintenance/inspection-forms/index/details/submissions.hbs +2 -0
  551. package/addon/templates/maintenance/inspection-forms/index/details.hbs +14 -0
  552. package/addon/templates/maintenance/inspection-forms/index/edit.hbs +11 -0
  553. package/addon/templates/maintenance/inspection-forms/index/new.hbs +11 -0
  554. package/addon/templates/maintenance/inspection-forms/index.hbs +28 -0
  555. package/addon/templates/maintenance/inspection-forms.hbs +1 -0
  556. package/addon/templates/maintenance/inspection-submissions/index/details/audit.hbs +1 -0
  557. package/addon/templates/maintenance/inspection-submissions/index/details/index.hbs +1 -0
  558. package/addon/templates/maintenance/inspection-submissions/index/details/photos.hbs +1 -0
  559. package/addon/templates/maintenance/inspection-submissions/index/details.hbs +14 -0
  560. package/addon/templates/maintenance/inspection-submissions/index/edit.hbs +11 -0
  561. package/addon/templates/maintenance/inspection-submissions/index/new.hbs +11 -0
  562. package/addon/templates/maintenance/inspection-submissions/index.hbs +28 -0
  563. package/addon/templates/maintenance/inspection-submissions.hbs +1 -0
  564. package/addon/templates/management/fuel-transactions/index/details.hbs +64 -62
  565. package/addon/templates/management/fuel-transactions/index.hbs +9 -31
  566. package/addon/templates/management/index.hbs +110 -102
  567. package/addon/templates/management/vehicles/index/details/inspections.hbs +2 -0
  568. package/addon/templates/operations/orders/index.hbs +2 -4
  569. package/addon/utils/context-panel.js +34 -0
  570. package/addon/utils/device-table-columns.js +18 -27
  571. package/addon/utils/fleet-ops-options.js +40 -0
  572. package/addon/utils/fuel-integration-format.js +43 -0
  573. package/addon/utils/fuel-transaction.js +115 -0
  574. package/addon/utils/identity-cell-resource.js +56 -0
  575. package/addon/utils/inspection-answers.js +283 -0
  576. package/addon/utils/inspection-field-types.js +74 -0
  577. package/addon/utils/inspection-form-structure.js +161 -0
  578. package/addon/utils/radar.js +212 -0
  579. package/addon/utils/relation-value.js +37 -0
  580. package/addon/utils/resource-descriptors/assets.js +246 -0
  581. package/addon/utils/resource-descriptors/connectivity.js +146 -0
  582. package/addon/utils/resource-descriptors/fuel.js +75 -0
  583. package/addon/utils/resource-descriptors/helpers.js +191 -0
  584. package/addon/utils/resource-descriptors/index.js +35 -0
  585. package/addon/utils/resource-descriptors/maintenance.js +175 -0
  586. package/addon/utils/resource-descriptors/operations.js +215 -0
  587. package/addon/utils/resource-descriptors/people.js +173 -0
  588. package/addon/utils/resource-descriptors/polymorphic.js +123 -0
  589. package/addon/utils/resource-descriptors/sub-records.js +297 -0
  590. package/addon/utils/telemetry-timestamp.js +6 -0
  591. package/app/components/asset/pill.js +1 -0
  592. package/app/components/asset/summary.js +1 -0
  593. package/app/components/asset-connection/pill.js +1 -0
  594. package/app/components/asset-connection/summary.js +1 -0
  595. package/app/components/attachable/pill.js +1 -0
  596. package/app/components/attachable/summary.js +1 -0
  597. package/app/components/cell/asset-connection-identity.js +1 -0
  598. package/app/components/cell/{attached-vehicle.js → asset-identity.js} +1 -1
  599. package/app/components/cell/attachable-identity.js +1 -0
  600. package/app/components/cell/{telematic-device.js → contact-identity.js} +1 -1
  601. package/app/components/cell/customer-identity.js +1 -0
  602. package/app/components/cell/device-event-identity.js +1 -0
  603. package/app/components/cell/entity-identity.js +1 -0
  604. package/app/components/cell/facilitator-identity.js +1 -0
  605. package/app/components/cell/fleet-driver-identity.js +1 -0
  606. package/app/components/cell/fleet-identity.js +1 -0
  607. package/app/components/cell/fuel-provider-connection-identity.js +1 -0
  608. package/app/components/cell/fuel-provider-transaction-identity.js +1 -0
  609. package/app/components/cell/fuel-report-identity.js +1 -0
  610. package/app/components/cell/inspection-form-identity.js +1 -0
  611. package/app/components/cell/inspection-item-result-identity.js +1 -0
  612. package/app/components/cell/inspection-submission-identity.js +1 -0
  613. package/app/components/cell/integrated-vendor-identity.js +1 -0
  614. package/app/components/cell/issue-identity.js +1 -0
  615. package/app/components/cell/maintenance-identity.js +1 -0
  616. package/app/components/cell/maintenance-schedule-identity.js +1 -0
  617. package/app/components/cell/maintenance-subject-identity.js +1 -0
  618. package/app/components/cell/manifest-identity.js +1 -0
  619. package/app/components/cell/manifest-stop-identity.js +1 -0
  620. package/app/components/cell/order-config-identity.js +1 -0
  621. package/app/components/cell/order-identity.js +1 -0
  622. package/app/components/cell/payload-identity.js +1 -0
  623. package/app/components/cell/place-identity.js +1 -0
  624. package/app/components/cell/position-identity.js +1 -0
  625. package/app/components/cell/purchase-rate-identity.js +1 -0
  626. package/app/components/cell/recurring-order-schedule-identity.js +1 -0
  627. package/app/components/cell/resource-list.js +1 -0
  628. package/app/components/cell/route-identity.js +1 -0
  629. package/app/components/cell/sensor-identity.js +1 -0
  630. package/app/components/cell/service-area-identity.js +1 -0
  631. package/app/components/cell/service-quote-identity.js +1 -0
  632. package/app/components/cell/service-quote-item-identity.js +1 -0
  633. package/app/components/cell/service-rate-fee-identity.js +1 -0
  634. package/app/components/cell/service-rate-identity.js +1 -0
  635. package/app/components/cell/service-rate-parcel-fee-identity.js +1 -0
  636. package/app/components/cell/{telematic-provider.js → telematic-identity.js} +1 -1
  637. package/app/components/cell/tracking-number-identity.js +1 -0
  638. package/app/components/cell/tracking-status-identity.js +1 -0
  639. package/app/components/cell/trailer-identity.js +1 -0
  640. package/app/components/cell/vehicle-device-identity.js +1 -0
  641. package/app/components/cell/vendor-identity.js +1 -0
  642. package/app/components/cell/warranty-identity.js +1 -0
  643. package/app/components/cell/waypoint-identity.js +1 -0
  644. package/app/components/cell/work-order-identity.js +1 -0
  645. package/app/components/cell/zone-identity.js +1 -0
  646. package/app/components/{cell/driver-name.js → contact/pill.js} +1 -1
  647. package/app/components/{cell/vehicle-name.js → contact/summary.js} +1 -1
  648. package/app/components/customer/pill.js +1 -0
  649. package/app/components/customer/summary.js +1 -0
  650. package/app/components/device/summary.js +1 -0
  651. package/app/components/device/telemetry.js +1 -0
  652. package/app/components/device-event/pill.js +1 -0
  653. package/app/components/device-event/summary.js +1 -0
  654. package/app/components/driver/summary.js +1 -0
  655. package/app/components/entity/pill.js +1 -0
  656. package/app/components/entity/summary.js +1 -0
  657. package/app/components/equipment/card.js +1 -0
  658. package/app/components/equipment/panel-header.js +1 -0
  659. package/app/components/equipment/summary.js +1 -0
  660. package/app/components/{filter/multi-model.js → facilitator/pill.js} +1 -1
  661. package/app/components/facilitator/summary.js +1 -0
  662. package/app/components/fleet/pill.js +1 -0
  663. package/app/components/fleet/summary.js +1 -0
  664. package/app/components/fleet-driver/pill.js +1 -0
  665. package/app/components/fleet-driver/summary.js +1 -0
  666. package/app/components/fuel-provider-connection/pill.js +1 -0
  667. package/app/components/fuel-provider-connection/summary.js +1 -0
  668. package/app/components/fuel-provider-transaction/pill.js +1 -0
  669. package/app/components/fuel-provider-transaction/summary.js +1 -0
  670. package/app/components/fuel-report/pill.js +1 -0
  671. package/app/components/fuel-report/summary.js +1 -0
  672. package/app/components/fuel-transaction-status.js +1 -0
  673. package/app/components/geofence-map.js +1 -0
  674. package/app/components/inspection-field/form.js +1 -0
  675. package/app/components/inspection-field/input.js +1 -0
  676. package/app/components/inspection-field/value.js +1 -0
  677. package/app/components/inspection-flyout.js +1 -0
  678. package/app/components/inspection-form/builder.js +1 -0
  679. package/app/components/inspection-form/details/submissions.js +1 -0
  680. package/app/components/inspection-form/details.js +1 -0
  681. package/app/components/inspection-form/form.js +1 -0
  682. package/app/components/inspection-form/pill.js +1 -0
  683. package/app/components/inspection-form/summary.js +1 -0
  684. package/app/components/inspection-item-result/pill.js +1 -0
  685. package/app/components/inspection-item-result/summary.js +1 -0
  686. package/app/components/inspection-link/list.js +1 -0
  687. package/app/components/inspection-sheet/group.js +1 -0
  688. package/app/components/inspection-sheet.js +1 -0
  689. package/app/components/inspection-submission/details.js +1 -0
  690. package/app/components/inspection-submission/form.js +1 -0
  691. package/app/components/inspection-submission/photos.js +1 -0
  692. package/app/components/inspection-submission/pill.js +1 -0
  693. package/app/components/inspection-submission/summary.js +1 -0
  694. package/app/components/integrated-vendor/pill.js +1 -0
  695. package/app/components/integrated-vendor/summary.js +1 -0
  696. package/app/components/issue/pill.js +1 -0
  697. package/app/components/issue/summary.js +1 -0
  698. package/app/components/issue/timeline.js +1 -0
  699. package/app/components/layout/fleet-ops-sidebar/operations-monitor.js +1 -0
  700. package/app/components/maintenance/pill.js +1 -0
  701. package/app/components/maintenance/summary.js +1 -0
  702. package/app/components/maintenance-schedule/pill.js +1 -0
  703. package/app/components/maintenance-schedule/summary.js +1 -0
  704. package/app/components/maintenance-schedule/work-orders.js +1 -0
  705. package/app/components/maintenance-subject/pill.js +1 -0
  706. package/app/components/maintenance-subject/summary.js +1 -0
  707. package/app/components/manifest/pill.js +1 -0
  708. package/app/components/manifest/summary.js +1 -0
  709. package/app/components/manifest-stop/pill.js +1 -0
  710. package/app/components/manifest-stop/summary.js +1 -0
  711. package/app/components/modals/fuel-connection-diagnostics.js +1 -0
  712. package/app/components/modals/fuel-transaction-action.js +1 -0
  713. package/app/components/modals/inspection-follow-up.js +1 -0
  714. package/app/components/modals/inspection-link.js +1 -0
  715. package/app/components/modals/radar-notice.js +1 -0
  716. package/app/components/modals/radar-save-view.js +1 -0
  717. package/app/components/modals/radar-select-resource.js +1 -0
  718. package/app/components/modals/radar-send-pin.js +1 -0
  719. package/app/components/order/summary.js +1 -0
  720. package/app/components/order-config/pill.js +1 -0
  721. package/app/components/order-config/summary.js +1 -0
  722. package/app/components/part/card.js +1 -0
  723. package/app/components/part/panel-header.js +1 -0
  724. package/app/components/part/pill.js +1 -0
  725. package/app/components/part/summary.js +1 -0
  726. package/app/components/payload/pill.js +1 -0
  727. package/app/components/payload/summary.js +1 -0
  728. package/app/components/place/pill.js +1 -0
  729. package/app/components/place/summary.js +1 -0
  730. package/app/components/position/pill.js +1 -0
  731. package/app/components/position/summary.js +1 -0
  732. package/app/components/public-inspection.js +1 -0
  733. package/app/components/purchase-rate/pill.js +1 -0
  734. package/app/components/purchase-rate/summary.js +1 -0
  735. package/app/components/radar/agenda/entry.js +1 -0
  736. package/app/components/radar/agenda/lane.js +1 -0
  737. package/app/components/radar/agenda.js +1 -0
  738. package/app/components/radar/briefing.js +1 -0
  739. package/app/components/radar/bulk-bar.js +1 -0
  740. package/app/components/radar/decision-card.js +1 -0
  741. package/app/components/radar/empty-state.js +1 -0
  742. package/app/components/radar/filter-pills.js +1 -0
  743. package/app/components/radar/handover-card.js +1 -0
  744. package/app/components/radar/header.js +1 -0
  745. package/app/components/radar/item-drawer.js +1 -0
  746. package/app/components/radar/item-list.js +1 -0
  747. package/app/components/radar/item-row.js +1 -0
  748. package/app/components/radar/keyboard-hints.js +1 -0
  749. package/app/components/radar/subject.js +1 -0
  750. package/app/components/radar/view-bar.js +1 -0
  751. package/app/components/recurring-order-schedule/pill.js +1 -0
  752. package/app/components/recurring-order-schedule/summary.js +1 -0
  753. package/app/components/resource-activity.js +1 -0
  754. package/app/components/route/pill.js +1 -0
  755. package/app/components/route/summary.js +1 -0
  756. package/app/components/select-option/asset-connection.js +1 -0
  757. package/app/components/select-option/asset.js +1 -0
  758. package/app/components/select-option/attachable.js +1 -0
  759. package/app/components/select-option/contact.js +1 -0
  760. package/app/components/select-option/customer.js +1 -0
  761. package/app/components/select-option/device-event.js +1 -0
  762. package/app/components/select-option/device.js +1 -0
  763. package/app/components/select-option/driver.js +1 -0
  764. package/app/components/select-option/entity.js +1 -0
  765. package/app/components/select-option/equipment.js +1 -0
  766. package/app/components/select-option/facilitator.js +1 -0
  767. package/app/components/select-option/fleet-driver.js +1 -0
  768. package/app/components/select-option/fleet.js +1 -0
  769. package/app/components/select-option/fuel-provider-connection.js +1 -0
  770. package/app/components/select-option/fuel-provider-transaction.js +1 -0
  771. package/app/components/select-option/fuel-report.js +1 -0
  772. package/app/components/select-option/inspection-form.js +1 -0
  773. package/app/components/select-option/inspection-item-result.js +1 -0
  774. package/app/components/select-option/inspection-submission.js +1 -0
  775. package/app/components/select-option/integrated-vendor.js +1 -0
  776. package/app/components/select-option/issue.js +1 -0
  777. package/app/components/select-option/maintenance-schedule.js +1 -0
  778. package/app/components/select-option/maintenance-subject.js +1 -0
  779. package/app/components/select-option/maintenance.js +1 -0
  780. package/app/components/select-option/manifest-stop.js +1 -0
  781. package/app/components/select-option/manifest.js +1 -0
  782. package/app/components/select-option/order-config.js +1 -0
  783. package/app/components/select-option/order.js +1 -0
  784. package/app/components/select-option/part.js +1 -0
  785. package/app/components/select-option/payload.js +1 -0
  786. package/app/components/select-option/place.js +1 -0
  787. package/app/components/select-option/position.js +1 -0
  788. package/app/components/select-option/purchase-rate.js +1 -0
  789. package/app/components/select-option/recurring-order-schedule.js +1 -0
  790. package/app/components/select-option/route.js +1 -0
  791. package/app/components/select-option/sensor.js +1 -0
  792. package/app/components/select-option/service-area.js +1 -0
  793. package/app/components/select-option/service-quote-item.js +1 -0
  794. package/app/components/select-option/service-quote.js +1 -0
  795. package/app/components/select-option/service-rate-fee.js +1 -0
  796. package/app/components/select-option/service-rate-parcel-fee.js +1 -0
  797. package/app/components/select-option/service-rate.js +1 -0
  798. package/app/components/select-option/telematic.js +1 -0
  799. package/app/components/select-option/trackable.js +1 -0
  800. package/app/components/select-option/tracking-number.js +1 -0
  801. package/app/components/select-option/tracking-status.js +1 -0
  802. package/app/components/select-option/trailer.js +1 -0
  803. package/app/components/select-option/vehicle-device.js +1 -0
  804. package/app/components/select-option/vehicle.js +1 -0
  805. package/app/components/select-option/vendor.js +1 -0
  806. package/app/components/select-option/warranty.js +1 -0
  807. package/app/components/select-option/waypoint.js +1 -0
  808. package/app/components/select-option/work-order.js +1 -0
  809. package/app/components/select-option/zone.js +1 -0
  810. package/app/components/sensor/pill.js +1 -0
  811. package/app/components/sensor/summary.js +1 -0
  812. package/app/components/service-area/pill.js +1 -0
  813. package/app/components/service-area/summary.js +1 -0
  814. package/app/components/service-quote/pill.js +1 -0
  815. package/app/components/service-quote/summary.js +1 -0
  816. package/app/components/service-quote-item/pill.js +1 -0
  817. package/app/components/service-quote-item/summary.js +1 -0
  818. package/app/components/service-rate/pill.js +1 -0
  819. package/app/components/service-rate/summary.js +1 -0
  820. package/app/components/service-rate-fee/pill.js +1 -0
  821. package/app/components/service-rate-fee/summary.js +1 -0
  822. package/app/components/service-rate-parcel-fee/pill.js +1 -0
  823. package/app/components/service-rate-parcel-fee/summary.js +1 -0
  824. package/app/components/table/cell/fleet-ops-option.js +1 -0
  825. package/app/components/telematic/pill.js +1 -0
  826. package/app/components/telematic/summary.js +1 -0
  827. package/app/components/telematic/telemetry-status.js +1 -0
  828. package/app/components/tracking-number/pill.js +1 -0
  829. package/app/components/tracking-number/summary.js +1 -0
  830. package/app/components/tracking-status/pill.js +1 -0
  831. package/app/components/tracking-status/summary.js +1 -0
  832. package/app/components/trailer/summary.js +1 -0
  833. package/app/components/vehicle/details/inspections.js +1 -0
  834. package/app/components/vehicle/summary.js +1 -0
  835. package/app/components/vehicle-device/pill.js +1 -0
  836. package/app/components/vehicle-device/summary.js +1 -0
  837. package/app/components/vendor/personnel-tab.js +1 -0
  838. package/app/components/vendor/pill.js +1 -0
  839. package/app/components/vendor/summary.js +1 -0
  840. package/app/components/warranty/pill.js +1 -0
  841. package/app/components/warranty/summary.js +1 -0
  842. package/app/components/waypoint/pill.js +1 -0
  843. package/app/components/waypoint/summary.js +1 -0
  844. package/app/components/widget/radar.js +1 -0
  845. package/app/components/work-order/panel-header.js +1 -0
  846. package/app/components/work-order/pill.js +1 -0
  847. package/app/components/work-order/summary.js +1 -0
  848. package/app/components/zone/pill.js +1 -0
  849. package/app/components/zone/summary.js +1 -0
  850. package/app/controllers/maintenance/inspection-forms/index/details.js +1 -0
  851. package/app/controllers/maintenance/inspection-forms/index/edit.js +1 -0
  852. package/app/controllers/maintenance/inspection-forms/index/new.js +1 -0
  853. package/app/controllers/maintenance/inspection-forms/index.js +1 -0
  854. package/app/controllers/maintenance/inspection-submissions/index/details.js +1 -0
  855. package/app/controllers/maintenance/inspection-submissions/index/edit.js +1 -0
  856. package/app/controllers/maintenance/inspection-submissions/index/new.js +1 -0
  857. package/app/controllers/maintenance/inspection-submissions/index.js +1 -0
  858. package/app/helpers/initials.js +1 -0
  859. package/app/modifiers/inspection-flyout.js +1 -0
  860. package/app/modifiers/radar-keyboard.js +1 -0
  861. package/app/modifiers/sync-value.js +1 -0
  862. package/app/modifiers/when-changed.js +1 -0
  863. package/app/routes/maintenance/inspection-forms/index/details/index.js +1 -0
  864. package/app/routes/maintenance/inspection-forms/index/details/submissions.js +1 -0
  865. package/app/routes/maintenance/inspection-forms/index/details.js +1 -0
  866. package/app/routes/maintenance/inspection-forms/index/edit.js +1 -0
  867. package/app/routes/maintenance/inspection-forms/index/new.js +1 -0
  868. package/app/routes/maintenance/inspection-forms/index.js +1 -0
  869. package/app/routes/maintenance/inspection-forms.js +1 -0
  870. package/app/routes/maintenance/inspection-submissions/index/details/audit.js +1 -0
  871. package/app/routes/maintenance/inspection-submissions/index/details/index.js +1 -0
  872. package/app/routes/maintenance/inspection-submissions/index/details/photos.js +1 -0
  873. package/app/routes/maintenance/inspection-submissions/index/details.js +1 -0
  874. package/app/routes/maintenance/inspection-submissions/index/edit.js +1 -0
  875. package/app/routes/maintenance/inspection-submissions/index/new.js +1 -0
  876. package/app/routes/maintenance/inspection-submissions/index.js +1 -0
  877. package/app/routes/maintenance/inspection-submissions.js +1 -0
  878. package/app/routes/management/vehicles/index/details/inspections.js +1 -0
  879. package/app/services/inspection-form-actions.js +1 -0
  880. package/app/services/inspection-submission-actions.js +1 -0
  881. package/app/templates/maintenance/inspection-forms/index/details/index.js +1 -0
  882. package/app/templates/maintenance/inspection-forms/index/details/submissions.js +1 -0
  883. package/app/templates/maintenance/inspection-forms/index/details.js +1 -0
  884. package/app/templates/maintenance/inspection-forms/index/edit.js +1 -0
  885. package/app/templates/maintenance/inspection-forms/index/new.js +1 -0
  886. package/app/templates/maintenance/inspection-forms/index.js +1 -0
  887. package/app/templates/maintenance/inspection-forms.js +1 -0
  888. package/app/templates/maintenance/inspection-submissions/index/details/audit.js +1 -0
  889. package/app/templates/maintenance/inspection-submissions/index/details/index.js +1 -0
  890. package/app/templates/maintenance/inspection-submissions/index/details/photos.js +1 -0
  891. package/app/templates/maintenance/inspection-submissions/index/details.js +1 -0
  892. package/app/templates/maintenance/inspection-submissions/index/edit.js +1 -0
  893. package/app/templates/maintenance/inspection-submissions/index/new.js +1 -0
  894. package/app/templates/maintenance/inspection-submissions/index.js +1 -0
  895. package/app/templates/maintenance/inspection-submissions.js +1 -0
  896. package/app/templates/management/vehicles/index/details/inspections.js +1 -0
  897. package/app/utils/inspection-field-types.js +2 -0
  898. package/app/utils/inspection-form-structure.js +1 -0
  899. package/app/utils/radar.js +1 -0
  900. package/composer.json +1 -1
  901. package/docs/AFAQY.md +91 -0
  902. package/docs/TELEMETRY_ARCHITECTURE.md +115 -0
  903. package/extension.json +1 -1
  904. package/package.json +3 -3
  905. package/scripts/coverage-summary.php +11 -0
  906. package/scripts/pest-bootstrap.php +1 -1
  907. package/server/config/afaqy.php +8 -0
  908. package/server/config/fuel-providers.php +28 -7
  909. package/server/config/telematics.php +8 -1
  910. package/server/config/telemetry.php +17 -0
  911. package/server/migrations/2026_09_09_000001_create_inspection_tables.php +152 -0
  912. package/server/migrations/2026_09_10_000001_convert_inspection_form_items_to_field_groups.php +44 -0
  913. package/server/migrations/2026_09_10_000002_add_token_to_inspection_links.php +39 -0
  914. package/server/migrations/2026_09_11_000001_add_assignee_and_pin_to_inspection_links.php +39 -0
  915. package/server/migrations/2026_09_15_000001_create_telematic_telemetry_tables.php +62 -0
  916. package/server/migrations/2026_09_15_000002_scope_fuel_transactions_to_connection.php +25 -0
  917. package/server/migrations/2026_09_16_000001_add_public_id_to_alerts_table.php +45 -0
  918. package/server/resources/views/mail/inspection-link-pin.blade.php +34 -0
  919. package/server/src/Auth/Schemas/FleetOps.php +12 -0
  920. package/server/src/Console/Commands/DrainTelematicInbox.php +82 -0
  921. package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +4 -1
  922. package/server/src/Console/Commands/SyncTelematics.php +32 -2
  923. package/server/src/Contracts/TelemetryProviderInterface.php +27 -0
  924. package/server/src/Events/DeviceTelemetryUpdated.php +37 -0
  925. package/server/src/Events/VehicleLocationChanged.php +8 -4
  926. package/server/src/Exports/InspectionExport.php +125 -0
  927. package/server/src/Http/Controllers/Api/v1/GeofenceController.php +1 -1
  928. package/server/src/Http/Controllers/Api/v1/InspectionController.php +300 -0
  929. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +40 -8
  930. package/server/src/Http/Controllers/Internal/v1/HubController.php +36 -11
  931. package/server/src/Http/Controllers/Internal/v1/InspectionFormController.php +326 -0
  932. package/server/src/Http/Controllers/Internal/v1/InspectionSubmissionController.php +229 -0
  933. package/server/src/Http/Controllers/Internal/v1/RadarController.php +1117 -0
  934. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +67 -0
  935. package/server/src/Http/Controllers/Public/PublicInspectionController.php +243 -0
  936. package/server/src/Http/Controllers/TelematicPositionWebhookController.php +60 -0
  937. package/server/src/Http/Controllers/TelematicWebhookController.php +3 -0
  938. package/server/src/Http/Filter/FuelProviderConnectionFilter.php +1 -1
  939. package/server/src/Http/Middleware/ForceJsonResponse.php +25 -0
  940. package/server/src/Http/Resources/v1/InspectionForm.php +153 -0
  941. package/server/src/Http/Resources/v1/InspectionItemResult.php +77 -0
  942. package/server/src/Http/Resources/v1/InspectionLink.php +84 -0
  943. package/server/src/Http/Resources/v1/InspectionSubmission.php +173 -0
  944. package/server/src/Jobs/PollTelematicTelemetry.php +118 -0
  945. package/server/src/Jobs/ProcessTelematicDelivery.php +122 -0
  946. package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +21 -4
  947. package/server/src/Mail/InspectionLinkPinMail.php +57 -0
  948. package/server/src/Models/Driver.php +8 -2
  949. package/server/src/Models/FuelProviderTransaction.php +1 -0
  950. package/server/src/Models/InspectionForm.php +240 -0
  951. package/server/src/Models/InspectionItemResult.php +90 -0
  952. package/server/src/Models/InspectionLink.php +284 -0
  953. package/server/src/Models/InspectionSubmission.php +440 -0
  954. package/server/src/Models/Part.php +9 -2
  955. package/server/src/Models/WorkOrder.php +3 -0
  956. package/server/src/Observers/WorkOrderObserver.php +1 -1
  957. package/server/src/Providers/FleetOpsServiceProvider.php +9 -0
  958. package/server/src/Rules/Base64OrUrl.php +54 -0
  959. package/server/src/Support/FuelProviders/FuelProviderService.php +64 -27
  960. package/server/src/Support/FuelProviders/Providers/PetroAppFuelProvider.php +81 -15
  961. package/server/src/Support/InspectionFileStore.php +268 -0
  962. package/server/src/Support/InspectionFormSync.php +231 -0
  963. package/server/src/Support/InspectionLinkPin.php +150 -0
  964. package/server/src/Support/InspectionSubmitter.php +297 -0
  965. package/server/src/Support/Radar/RadarAgenda.php +375 -0
  966. package/server/src/Support/Radar/RadarBriefing.php +504 -0
  967. package/server/src/Support/Radar/RadarItemState.php +435 -0
  968. package/server/src/Support/Radar/RadarRules.php +1424 -0
  969. package/server/src/Support/Reporting/FleetOpsReportSchema.php +178 -0
  970. package/server/src/Support/Telematics/Afaqy/Payload.php +49 -0
  971. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +179 -61
  972. package/server/src/Support/Telematics/TelematicService.php +37 -6
  973. package/server/src/Support/Telematics/Telemetry/Configuration.php +30 -0
  974. package/server/src/Support/Telematics/Telemetry/Inbox.php +61 -0
  975. package/server/src/Support/Telematics/Telemetry/Ingestor.php +112 -0
  976. package/server/src/Support/Telematics/Telemetry/Queue.php +28 -0
  977. package/server/src/Support/Telematics/Telemetry/Sample.php +54 -0
  978. package/server/src/routes.php +76 -0
  979. package/server/tests/ApiManifestControllerContractsTest.php +9 -9
  980. package/server/tests/ControllerFilterContractsTest.php +1 -1
  981. package/server/tests/EventContractsTest.php +2 -1
  982. package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +792 -0
  983. package/server/tests/Feature/Http/Api/GeofenceControllerContractsTest.php +4 -4
  984. package/server/tests/Feature/Http/Api/TrailerControllerLifecycleTest.php +1 -1
  985. package/server/tests/Feature/Http/Internal/DriverControllerCreateRecordTest.php +1 -1
  986. package/server/tests/Feature/Http/Internal/DriverControllerExistingUserAdoptionTest.php +1 -1
  987. package/server/tests/Feature/Http/Internal/HubControllerTest.php +28 -2
  988. package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +1 -1
  989. package/server/tests/Feature/Http/Internal/RadarControllerDatabaseTest.php +415 -0
  990. package/server/tests/Feature/Http/Internal/RadarControllerTest.php +594 -0
  991. package/server/tests/FuelProviderConnectionControllerContractsTest.php +83 -3
  992. package/server/tests/FuelProviderImplementationTest.php +10 -2
  993. package/server/tests/HubAndGettingStartedContractsTest.php +26 -3
  994. package/server/tests/InspectionControllerContractsTest.php +1329 -0
  995. package/server/tests/InspectionFieldContractsTest.php +1019 -0
  996. package/server/tests/InspectionModelContractsTest.php +728 -0
  997. package/server/tests/InspectionSubmitterRulesTest.php +47 -0
  998. package/server/tests/ObserverContractsTest.php +1 -1
  999. package/server/tests/QueueJobContractsTest.php +3 -4
  1000. package/server/tests/RadarRoutesTest.php +35 -0
  1001. package/server/tests/ReportSchemaContractsTest.php +15 -1
  1002. package/server/tests/RouteRegistrationExecutionTest.php +109 -18
  1003. package/server/tests/Support/AfaqyTestCrypto.php +27 -0
  1004. package/server/tests/Support/ExampleTelemetryProvider.php +82 -0
  1005. package/server/tests/Support/TelemetryTestEnvironment.php +53 -0
  1006. package/server/tests/TelematicsHardeningTest.php +17 -17
  1007. package/server/tests/TrailerSupportCoverageTest.php +1 -1
  1008. package/server/tests/Unit/Http/Resources/ManifestResourceTest.php +3 -3
  1009. package/server/tests/Unit/Support/FuelProviderServiceMatchingTest.php +127 -0
  1010. package/server/tests/Unit/Support/PetroAppFuelProviderTest.php +126 -1
  1011. package/server/tests/Unit/Support/RadarAgendaTest.php +200 -0
  1012. package/server/tests/Unit/Support/RadarBriefingTest.php +214 -0
  1013. package/server/tests/Unit/Support/RadarItemStateTest.php +260 -0
  1014. package/server/tests/Unit/Support/RadarRulesTest.php +523 -0
  1015. package/server/tests/Unit/Support/Telematics/Providers/AfaqyProviderTest.php +9 -1
  1016. package/server/tests/Unit/Support/Telematics/Providers/AfaqyProviderTransportTest.php +8 -0
  1017. package/server/tests/Unit/Support/Telematics/Providers/AfaqyRealtimeContractTest.php +188 -0
  1018. package/server/tests/Unit/Support/Telematics/TelematicServiceTelemetryTest.php +1 -0
  1019. package/translations/ar-ae.yml +3 -1
  1020. package/translations/bg-bg.yaml +3 -1
  1021. package/translations/en-us.yaml +738 -15
  1022. package/translations/es-pa.yaml +3 -1
  1023. package/translations/fr-fr.yaml +3 -1
  1024. package/translations/mn-mn.yaml +3 -1
  1025. package/translations/pt-br.yaml +3 -1
  1026. package/translations/ru-ru.yaml +3 -1
  1027. package/translations/vi-vn.yaml +3 -1
  1028. package/addon/components/cell/attached-vehicle.hbs +0 -10
  1029. package/addon/components/cell/attached-vehicle.js +0 -58
  1030. package/addon/components/cell/device-identity.js +0 -129
  1031. package/addon/components/cell/driver-identity.js +0 -143
  1032. package/addon/components/cell/driver-name.hbs +0 -26
  1033. package/addon/components/cell/driver-name.js +0 -30
  1034. package/addon/components/cell/equipment-identity.js +0 -48
  1035. package/addon/components/cell/part-identity.js +0 -63
  1036. package/addon/components/cell/telematic-device.hbs +0 -38
  1037. package/addon/components/cell/telematic-device.js +0 -44
  1038. package/addon/components/cell/telematic-provider.hbs +0 -33
  1039. package/addon/components/cell/telematic-provider.js +0 -78
  1040. package/addon/components/cell/vehicle-identity.js +0 -138
  1041. package/addon/components/cell/vehicle-name.hbs +0 -23
  1042. package/addon/components/cell/vehicle-name.js +0 -3
  1043. package/addon/components/device/pill.js +0 -3
  1044. package/addon/components/driver/pill.js +0 -7
  1045. package/addon/components/equipment/pill.js +0 -3
  1046. package/addon/components/filter/multi-model.hbs +0 -19
  1047. package/addon/components/filter/multi-model.js +0 -90
  1048. package/addon/components/order/pill.js +0 -3
  1049. package/addon/components/trailer/pill.js +0 -3
  1050. package/addon/components/vehicle/pill.js +0 -7
  1051. package/addon/templates/connectivity/fuel-providers/details/settings.hbs +0 -11
@@ -2,11 +2,31 @@
2
2
  <div class="min-h-0 flex-1 overflow-y-auto px-4 py-4 md:px-6">
3
3
  <div class="mx-auto flex w-full max-w-6xl flex-col gap-4">
4
4
  <section class="rounded-md border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800">
5
- <div class="grid grid-cols-1 gap-2 md:grid-cols-5">
5
+ <div class="grid grid-cols-1 gap-2 {{if this.isEditing 'md:grid-cols-4' 'md:grid-cols-5'}}">
6
6
  {{#each this.setupSteps as |step index|}}
7
- <button type="button" class="rounded-md border p-2 text-left transition {{if step.active 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-500/10' 'border-gray-200 bg-white hover:border-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-gray-600'}}" {{on "click" (fn this.goToStep index)}}>
7
+ <button
8
+ type="button"
9
+ class="rounded-md border p-2 text-left transition
10
+ {{if
11
+ step.active
12
+ 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-500/10'
13
+ 'border-gray-200 bg-white hover:border-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-gray-600'
14
+ }}"
15
+ {{on "click" (fn this.goToStep index)}}
16
+ >
8
17
  <div class="flex items-center gap-2">
9
- <div class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md text-xs {{if step.active 'bg-blue-600 text-white dark:bg-blue-500' (if step.complete 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300' 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300')}}">
18
+ <div
19
+ class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md text-xs
20
+ {{if
21
+ step.active
22
+ 'bg-blue-600 text-white dark:bg-blue-500'
23
+ (if
24
+ step.complete
25
+ 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300'
26
+ 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300'
27
+ )
28
+ }}"
29
+ >
10
30
  <FaIcon @icon={{if step.complete "check" step.icon}} />
11
31
  </div>
12
32
  <div class="min-w-0">
@@ -19,11 +39,12 @@
19
39
  </div>
20
40
  </section>
21
41
 
22
- {{#if (eq this.activeStep 0)}}
42
+ {{#if (eq this.activeStepKey "provider")}}
23
43
  <section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
24
44
  <div class="mb-3">
25
45
  <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Choose Fuel Integration</h2>
26
- <p class="text-xs text-gray-500 dark:text-gray-300">Select the system to connect for fuel card bills, purchase transactions, station locations, or vehicle fuel identifiers.</p>
46
+ <p class="text-xs text-gray-500 dark:text-gray-300">Select the system to connect for fuel card bills, purchase transactions, station locations, or vehicle fuel
47
+ identifiers.</p>
27
48
  </div>
28
49
 
29
50
  {{#if this.loadProviders.isRunning}}
@@ -31,7 +52,16 @@
31
52
  {{else}}
32
53
  <div class="grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-4">
33
54
  {{#each this.providerCards as |provider|}}
34
- <button type="button" class="flex min-h-[148px] flex-col rounded-md border p-3 text-left transition {{if provider.selected 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-gray-800' 'border-gray-200 bg-white hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400'}}" {{on "click" (fn this.selectProvider provider)}}>
55
+ <button
56
+ type="button"
57
+ class="flex min-h-[148px] flex-col rounded-md border p-3 text-left transition
58
+ {{if
59
+ provider.selected
60
+ 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-gray-800'
61
+ 'border-gray-200 bg-white hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400'
62
+ }}"
63
+ {{on "click" (fn this.selectProvider provider)}}
64
+ >
35
65
  <div class="flex items-start justify-between gap-3">
36
66
  <div class="flex min-w-0 items-center gap-2">
37
67
  <div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md bg-blue-50 text-blue-600 dark:bg-blue-900/20 dark:text-blue-300">
@@ -57,7 +87,7 @@
57
87
  </div>
58
88
  {{/if}}
59
89
  </section>
60
- {{else if (eq this.activeStep 1)}}
90
+ {{else if (eq this.activeStepKey "credentials")}}
61
91
  <section class="grid grid-cols-1 gap-4 lg:grid-cols-3">
62
92
  <div class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 lg:col-span-2">
63
93
  <div class="mb-3">
@@ -67,10 +97,36 @@
67
97
 
68
98
  {{#if this.selectedProvider}}
69
99
  <div class="grid grid-cols-1 gap-2 lg:grid-cols-2 no-input-group-padding text-xs">
70
- {{#each this.selectedProvider.required_fields as |field|}}
71
- <InputGroup @name={{field.label}} @value={{get @resource.credentials field.name}} @required={{field.required}} @type={{field.type}} @helpText={{field.help_text}} {{on "input" (fn this.setCredential field)}} />
100
+ <InputGroup @name="Environment">
101
+ <select class="form-select w-full" data-test-fuel-environment {{on "change" this.setEnvironment}}>
102
+ <option value="sandbox" selected={{eq this.environment "sandbox"}}>Sandbox (PetroApp staging)</option>
103
+ <option value="production" selected={{eq this.environment "production"}}>Production</option>
104
+ </select>
105
+ </InputGroup>
106
+ {{#each this.credentialFields as |field|}}
107
+ {{#if (eq field.type "select")}}
108
+ <InputGroup @name={{field.label}} @helpText={{field.help_text}}>
109
+ <select class="form-select w-full" data-test-fuel-credential={{field.name}} {{on "change" (fn this.setCredential field)}}>
110
+ {{#each field.options as |choice|}}
111
+ <option value={{choice.value}} selected={{choice.selected}}>{{choice.label}}</option>
112
+ {{/each}}
113
+ </select>
114
+ </InputGroup>
115
+ {{else}}
116
+ <InputGroup
117
+ @name={{field.label}}
118
+ @value={{get @resource.credentials field.name}}
119
+ @required={{field.required}}
120
+ @type={{field.type}}
121
+ @helpText={{field.help_text}}
122
+ {{on "input" (fn this.setCredential field)}}
123
+ />
124
+ {{/if}}
72
125
  {{/each}}
73
126
  </div>
127
+ {{#if this.baseUrl}}
128
+ <p class="mt-3 break-all text-xs text-gray-500 dark:text-gray-300" data-test-fuel-base-url>Web Service URL: {{this.baseUrl}}</p>
129
+ {{/if}}
74
130
  {{else}}
75
131
  <div class="rounded-md border border-dashed border-gray-300 p-6 text-center text-xs text-gray-500 dark:border-gray-700 dark:text-gray-300">
76
132
  Choose a fuel integration before entering credentials.
@@ -97,26 +153,42 @@
97
153
  </aside>
98
154
  {{/if}}
99
155
  </section>
100
- {{else if (eq this.activeStep 2)}}
156
+ {{else if (eq this.activeStepKey "test")}}
101
157
  <section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
102
158
  <div class="mb-3">
103
159
  <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Test Connection</h2>
104
160
  <p class="text-xs text-gray-500 dark:text-gray-300">Confirm the provider accepts the credentials before saving this fuel integration.</p>
105
161
  </div>
106
162
 
107
- <div class="rounded-md border p-4 text-xs transition {{if (eq this.connectionState 'success') 'border-green-200 bg-green-50 dark:border-green-800 dark:bg-green-900/10'}} {{if (eq this.connectionState 'failed') 'border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-900/10'}} {{if (eq this.connectionState 'testing') 'border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-900/10'}} {{if (eq this.connectionState 'idle') 'border-dashed border-gray-300 bg-white dark:border-gray-700 dark:bg-gray-800'}}">
163
+ <div
164
+ class="rounded-md border p-4 text-xs transition
165
+ {{if (eq this.connectionState 'success') 'border-green-200 bg-green-50 dark:border-green-800 dark:bg-green-900/10'}}
166
+ {{if (eq this.connectionState 'failed') 'border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-900/10'}}
167
+ {{if (eq this.connectionState 'testing') 'border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-900/10'}}
168
+ {{if (eq this.connectionState 'idle') 'border-dashed border-gray-300 bg-white dark:border-gray-700 dark:bg-gray-800'}}"
169
+ >
108
170
  <div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
109
171
  <div class="flex min-w-0 items-start gap-3">
110
- <div class="flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-md {{if (eq this.connectionState 'success') 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'}} {{if (eq this.connectionState 'failed') 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300'}} {{if (eq this.connectionState 'testing') 'bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300 animate-pulse'}} {{if (eq this.connectionState 'idle') 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300'}}">
111
- {{#if (eq this.connectionState "testing")}}<Spinner />{{else if (eq this.connectionState "success")}}<FaIcon @icon="check" />{{else if (eq this.connectionState "failed")}}<FaIcon @icon="triangle-exclamation" />{{else}}<FaIcon @icon="plug" />{{/if}}
172
+ <div
173
+ class="flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-md
174
+ {{if (eq this.connectionState 'success') 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'}}
175
+ {{if (eq this.connectionState 'failed') 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300'}}
176
+ {{if (eq this.connectionState 'testing') 'bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300 animate-pulse'}}
177
+ {{if (eq this.connectionState 'idle') 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300'}}"
178
+ >
179
+ {{#if (eq this.connectionState "testing")}}<Spinner />{{else if (eq this.connectionState "success")}}<FaIcon @icon="check" />{{else if
180
+ (eq this.connectionState "failed")
181
+ }}<FaIcon @icon="triangle-exclamation" />{{else}}<FaIcon @icon="plug" />{{/if}}
112
182
  </div>
113
183
  <div class="min-w-0">
114
- <div class="text-sm font-bold text-gray-900 dark:text-gray-100">{{this.connectionStateTitle}}</div>
184
+ <div data-test-fuel-state class="text-sm font-bold text-gray-900 dark:text-gray-100">{{this.connectionStateTitle}}</div>
115
185
  <p class="mt-1 max-w-3xl text-xs leading-5 text-gray-600 dark:text-gray-300">{{this.connectionStateMessage}}</p>
116
186
  {{#if this.connectionMetadataEntries.length}}
117
187
  <div class="mt-3 flex flex-wrap gap-2">
118
188
  {{#each this.connectionMetadataEntries as |item|}}
119
- <span class="inline-flex items-center rounded-md border border-gray-200 bg-white px-2 py-1 text-[11px] text-gray-600 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300">
189
+ <span
190
+ class="inline-flex items-center rounded-md border border-gray-200 bg-white px-2 py-1 text-[11px] text-gray-600 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300"
191
+ >
120
192
  <span class="mr-1 font-semibold text-gray-900 dark:text-gray-100">{{item.label}}</span>
121
193
  {{item.value}}
122
194
  </span>
@@ -126,12 +198,25 @@
126
198
  </div>
127
199
  </div>
128
200
 
129
- <Button @icon="plug" @text={{if (eq this.connectionState "success") "Test Again" "Test Connection"}} @size="xs" @isLoading={{this.testConnection.isRunning}} @disabled={{this.testConnection.isRunning}} @onClick={{perform this.testConnection}} />
201
+ <Button
202
+ data-test-fuel-test
203
+ @icon="plug"
204
+ @text={{if (eq this.connectionState "success") "Test Again" "Test Connection"}}
205
+ @size="xs"
206
+ @isLoading={{this.testConnection.isRunning}}
207
+ @disabled={{this.testConnection.isRunning}}
208
+ @onClick={{perform this.testConnection}}
209
+ />
130
210
  </div>
131
211
 
132
212
  <div class="mt-4 border-t border-gray-200 pt-3 dark:border-gray-700">
133
213
  <div class="flex flex-col gap-2 md:flex-row md:items-center md:justify-between">
134
- <button type="button" class="inline-flex items-center gap-2 text-xs font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-300 dark:hover:text-blue-200" {{on "click" (fn (mut this.showDiagnostics) (not this.showDiagnostics))}}>
214
+ <button
215
+ data-test-fuel-diagnostics-toggle
216
+ type="button"
217
+ class="inline-flex items-center gap-2 text-xs font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-300 dark:hover:text-blue-200"
218
+ {{on "click" (fn (mut this.showDiagnostics) (not this.showDiagnostics))}}
219
+ >
135
220
  <FaIcon @icon={{if this.showDiagnostics "chevron-up" "chevron-down"}} class="text-[10px]" />
136
221
  <span>{{if this.showDiagnostics "Hide diagnostics" "Show diagnostics"}}</span>
137
222
  </button>
@@ -142,10 +227,17 @@
142
227
  </div>
143
228
 
144
229
  {{#if this.showDiagnostics}}
145
- <div class="mt-3 max-h-56 overflow-y-auto rounded-md border border-gray-800 bg-gray-900 p-3 font-mono text-[11px] leading-5 shadow-inner dark:border-gray-700 dark:bg-gray-900">
230
+ <div
231
+ class="mt-3 max-h-56 overflow-y-auto rounded-md border border-gray-800 bg-gray-900 p-3 font-mono text-[11px] leading-5 shadow-inner dark:border-gray-700 dark:bg-gray-900"
232
+ >
146
233
  {{#each this.diagnosticEntries as |entry|}}
147
- <div class="flex gap-3 {{if (eq entry.tone 'success') 'text-green-300'}} {{if (eq entry.tone 'danger') 'text-red-300'}} {{if (eq entry.tone 'info') 'text-blue-300'}}">
148
- <span class="flex-shrink-0 text-gray-500">[{{entry.time}}]</span>
234
+ <div
235
+ class="flex gap-3
236
+ {{if (eq entry.tone 'success') 'text-green-300'}}
237
+ {{if (eq entry.tone 'danger') 'text-red-300'}}
238
+ {{if (eq entry.tone 'info') 'text-blue-300'}}"
239
+ >
240
+ <span data-test-fuel-log-time dir="ltr" class="flex-shrink-0 text-gray-500">[{{entry.time}}]</span>
149
241
  <span class="min-w-0 break-words">{{entry.text}}</span>
150
242
  </div>
151
243
  {{/each}}
@@ -154,7 +246,7 @@
154
246
  </div>
155
247
  </div>
156
248
  </section>
157
- {{else if (eq this.activeStep 3)}}
249
+ {{else if (eq this.activeStepKey "sync")}}
158
250
  <section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
159
251
  <div class="mb-3">
160
252
  <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Sync Settings</h2>
@@ -167,8 +259,15 @@
167
259
  <Input @type="number" min="1" max="90" class="form-input w-full" @value={{this.syncSettings.window_days}} {{on "input" (fn this.setSyncSetting "window_days")}} />
168
260
  </InputGroup>
169
261
  <div class="rounded-md border border-gray-200 p-3 dark:border-gray-700 lg:col-span-2">
170
- <Checkbox @value={{this.syncSettings.auto_create_fuel_reports}} @label="Create Fuel Reports after vehicle match" @onToggle={{fn this.setSyncSetting "auto_create_fuel_reports"}} @alignItems="center" @labelClass="mb-0i" />
171
- <p class="mt-2 text-xs leading-5 text-gray-500 dark:text-gray-300">Provider bills remain in Fuel Transactions. Fuel Reports are created only when a transaction is matched to a vehicle.</p>
262
+ <Checkbox
263
+ @value={{this.syncSettings.auto_create_fuel_reports}}
264
+ @label="Create Fuel Reports after vehicle match"
265
+ @onToggle={{fn this.setSyncSetting "auto_create_fuel_reports"}}
266
+ @alignItems="center"
267
+ @labelClass="mb-0i"
268
+ />
269
+ <p class="mt-2 text-xs leading-5 text-gray-500 dark:text-gray-300">Provider bills remain in Fuel Transactions. Fuel Reports are created only when a transaction is
270
+ matched to a vehicle.</p>
172
271
  </div>
173
272
  </div>
174
273
  </section>
@@ -176,7 +275,8 @@
176
275
  <section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
177
276
  <div class="mb-3">
178
277
  <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Vehicle Matching Priority</h2>
179
- <p class="text-xs leading-5 text-gray-500 dark:text-gray-300">Choose which provider identifiers should be used for automatic matching and put the most reliable identifier first.</p>
278
+ <p class="text-xs leading-5 text-gray-500 dark:text-gray-300">Choose which provider identifiers should be used for automatic matching and put the most reliable
279
+ identifier first.</p>
180
280
  </div>
181
281
 
182
282
  <FuelIntegration::MatchingPriority @order={{this.matchingOrder}} @onChange={{this.setMatchingOrder}} @editable={{true}} />
@@ -189,7 +289,7 @@
189
289
  <div class="text-xs text-gray-500 dark:text-gray-300">{{@footerHelp}}</div>
190
290
  <div class="flex items-center gap-2">
191
291
  <Button @icon="arrow-left" @text="Back" @size="sm" @disabled={{eq this.activeStep 0}} @onClick={{this.previousStep}} />
192
- {{#if (eq this.activeStep 4)}}
292
+ {{#if this.isLastStep}}
193
293
  <Button @icon="save" @text={{@saveLabel}} @type="primary" @size="sm" @isLoading={{@isSaving}} @disabled={{@isSaving}} @onClick={{@onSave}} />
194
294
  {{else}}
195
295
  <Button @icon="arrow-right" @text="Next" @type="primary" @size="sm" @onClick={{this.nextStep}} />
@@ -13,24 +13,40 @@ export default class FuelIntegrationFormComponent extends Component {
13
13
  @tracked activeStep = 0;
14
14
  @tracked connectionTestResult;
15
15
  @tracked showDiagnostics = false;
16
+ @tracked selectedAt = new Date().toISOString();
17
+ @tracked testedAt;
16
18
 
17
19
  constructor() {
18
20
  super(...arguments);
19
21
  this.loadProviders.perform();
20
22
  }
21
23
 
24
+ get isEditing() {
25
+ return this.args.isEditing === true || this.args.resource?.isNew === false;
26
+ }
27
+
22
28
  get setupSteps() {
23
29
  return [
24
- { icon: 'gas-pump', label: 'Provider', complete: Boolean(this.selectedProvider) },
25
- { icon: 'key', label: 'Credentials', complete: this.hasRequiredCredentials },
26
- { icon: 'plug', label: 'Test', complete: this.connectionTestResult?.success === true },
27
- { icon: 'clock-rotate-left', label: 'Sync', complete: Boolean(this.syncSettings.window_days) },
28
- { icon: 'route', label: 'Matching', complete: this.matchingOrder.length > 0 },
29
- ].map((step, index) => ({
30
- ...step,
31
- active: this.activeStep === index,
32
- complete: index < this.activeStep && step.complete,
33
- }));
30
+ { key: 'provider', icon: 'gas-pump', label: 'Provider', complete: Boolean(this.selectedProvider) },
31
+ { key: 'credentials', icon: 'key', label: 'Credentials', complete: this.hasRequiredCredentials },
32
+ { key: 'test', icon: 'plug', label: 'Test', complete: this.connectionTestResult?.success === true },
33
+ { key: 'sync', icon: 'clock-rotate-left', label: 'Sync', complete: Boolean(this.syncSettings.window_days) },
34
+ { key: 'matching', icon: 'route', label: 'Matching', complete: this.matchingOrder.length > 0 },
35
+ ]
36
+ .filter((step) => !this.isEditing || step.key !== 'provider')
37
+ .map((step, index) => ({
38
+ ...step,
39
+ active: this.activeStep === index,
40
+ complete: index < this.activeStep && step.complete,
41
+ }));
42
+ }
43
+
44
+ get activeStepKey() {
45
+ return this.setupSteps[this.activeStep]?.key;
46
+ }
47
+
48
+ get isLastStep() {
49
+ return this.activeStep === this.setupSteps.length - 1;
34
50
  }
35
51
 
36
52
  get selectedProvider() {
@@ -49,6 +65,24 @@ export default class FuelIntegrationFormComponent extends Component {
49
65
  return this.args.resource?.credentials ?? {};
50
66
  }
51
67
 
68
+ get environment() {
69
+ return this.args.resource?.environment ?? 'production';
70
+ }
71
+
72
+ get baseUrl() {
73
+ return this.credentials.base_url?.trim() || this.selectedProvider?.metadata?.base_urls?.[this.environment];
74
+ }
75
+
76
+ get credentialFields() {
77
+ return (this.selectedProvider?.required_fields ?? []).map((field) => ({
78
+ ...field,
79
+ options: field.options?.map((option) => ({
80
+ ...option,
81
+ selected: option.value === (this.credentials[field.name] ?? (field.name === 'auth_type' ? 'bearer_token' : field.default)),
82
+ })),
83
+ }));
84
+ }
85
+
52
86
  get syncSettings() {
53
87
  return this.args.resource?.sync_settings ?? {};
54
88
  }
@@ -113,7 +147,7 @@ export default class FuelIntegrationFormComponent extends Component {
113
147
  get diagnosticEntries() {
114
148
  const entries = [
115
149
  {
116
- time: new Date().toLocaleTimeString(),
150
+ time: this.selectedAt,
117
151
  tone: 'info',
118
152
  text: this.selectedProvider ? `Provider selected: ${this.selectedProvider.label}` : 'No provider selected',
119
153
  },
@@ -121,7 +155,7 @@ export default class FuelIntegrationFormComponent extends Component {
121
155
 
122
156
  if (this.connectionTestResult) {
123
157
  entries.push({
124
- time: new Date().toLocaleTimeString(),
158
+ time: this.testedAt,
125
159
  tone: this.connectionTestResult.success ? 'success' : 'danger',
126
160
  text: this.connectionTestResult.message ?? 'Connection test returned without a message',
127
161
  });
@@ -139,7 +173,7 @@ export default class FuelIntegrationFormComponent extends Component {
139
173
  const providers = yield this.fetch.get('fuel-provider-connections/providers');
140
174
  this.providers = providers;
141
175
 
142
- if (!this.args.resource?.provider) {
176
+ if (!this.isEditing && !this.args.resource?.provider) {
143
177
  const initialProvider = this.args.initialProviderKey ? providers.find((provider) => provider.key === this.args.initialProviderKey) : providers[0];
144
178
  if (initialProvider) {
145
179
  this.selectProvider(initialProvider);
@@ -161,34 +195,55 @@ export default class FuelIntegrationFormComponent extends Component {
161
195
  return;
162
196
  }
163
197
 
198
+ this.connectionTestResult = null;
164
199
  try {
165
- this.connectionTestResult = yield this.fetch.post(`fuel-provider-connections/providers/${this.selectedProvider.key}/test-credentials`, {
166
- credentials: this.credentials,
167
- connection_id: this.args.resource?.id,
168
- });
200
+ this.connectionTestResult = yield this.fetch.post(
201
+ `fuel-provider-connections/providers/${this.selectedProvider.key}/test-credentials`,
202
+ {
203
+ credentials: this.credentials,
204
+ connection_id: this.args.resource?.id,
205
+ environment: this.environment,
206
+ },
207
+ { rawError: true }
208
+ );
169
209
  } catch (error) {
170
210
  this.connectionTestResult = {
171
211
  success: false,
172
212
  message: error.message ?? 'Connection test failed.',
173
- metadata: {},
213
+ metadata: error.metadata ?? {},
174
214
  };
175
215
  this.notifications.serverError(error);
216
+ } finally {
217
+ this.testedAt = new Date().toISOString();
176
218
  }
177
219
  }
178
220
 
179
221
  @action selectProvider(provider) {
222
+ if (this.isEditing) {
223
+ return;
224
+ }
225
+
226
+ this.testConnection.cancelAll();
180
227
  this.args.resource?.setProperties?.({
181
228
  provider: provider.key,
182
229
  name: this.args.resource?.name || provider.label,
183
230
  credentials: (provider.required_fields ?? []).reduce((credentials, field) => {
184
- credentials[field.name] = this.credentials[field.name] ?? field.default ?? null;
231
+ credentials[field.name] = this.credentials[field.name] ?? (field.name === 'auth_type' && this.args.resource?.provider ? 'bearer_token' : field.default) ?? null;
185
232
  return credentials;
186
233
  }, {}),
187
234
  });
235
+ this.selectedAt = new Date().toISOString();
236
+ this.connectionTestResult = null;
237
+ }
238
+
239
+ @action setEnvironment(event) {
240
+ this.testConnection.cancelAll();
241
+ this.args.resource?.set('environment', event.target.value);
188
242
  this.connectionTestResult = null;
189
243
  }
190
244
 
191
245
  @action setCredential(field, event) {
246
+ this.testConnection.cancelAll();
192
247
  this.args.resource?.set('credentials', {
193
248
  ...this.credentials,
194
249
  [field.name]: event.target.value,
@@ -6,11 +6,13 @@
6
6
  <div class="flex flex-wrap items-center gap-2">
7
7
  <h1 class="text-lg font-bold text-gray-900 dark:text-gray-100">Fuel Integrations</h1>
8
8
  <Badge @status={{if this.syncErrorCount "warning" "success"}} @hideStatusDot={{true}}>
9
- {{this.syncErrorCount}} sync issues
9
+ {{this.syncErrorCount}}
10
+ sync issues
10
11
  </Badge>
11
12
  </div>
12
13
  <p class="mt-1 max-w-3xl text-sm leading-5 text-gray-500 dark:text-gray-300">
13
- Connect fuel card providers or fuel management systems, import provider bills as fuel transactions, match them to vehicles and trips, then create linked fuel reports for operations.
14
+ Connect fuel card providers or fuel management systems, import provider bills as fuel transactions, match them to vehicles and trips, then create linked fuel reports
15
+ for operations.
14
16
  </p>
15
17
  </div>
16
18
  <div class="flex flex-shrink-0 items-center gap-2 whitespace-nowrap">
@@ -23,12 +25,16 @@
23
25
  <div class="mx-auto flex w-full max-w-7xl flex-col gap-4 px-4 py-4 md:px-6">
24
26
  <section class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4">
25
27
  {{#each this.kpiWidgets as |widget|}}
26
- <div class="fleet-ops-widget fleet-ops-kpi-tile fleetops-connectivity-kpi-tile {{widget.accentClass}} relative flex min-h-[118px] flex-col overflow-hidden rounded-md border bg-white shadow-sm transition hover:-translate-y-px hover:shadow-lg dark:bg-gray-800">
28
+ <div
29
+ class="fleet-ops-widget fleet-ops-kpi-tile fleetops-connectivity-kpi-tile
30
+ {{widget.accentClass}}
31
+ relative flex min-h-[118px] flex-col overflow-hidden rounded-md border bg-white shadow-sm transition hover:-translate-y-px hover:shadow-lg dark:bg-gray-800"
32
+ >
27
33
  <div class="flex h-full flex-col justify-between p-3">
28
34
  <div class="flex items-start justify-between gap-2">
29
35
  <div class="min-w-0">
30
36
  <div class="truncate text-[10px] font-bold uppercase text-gray-500 dark:text-gray-400">{{widget.label}}</div>
31
- <div class="mt-2 truncate text-[1.35rem] font-extrabold leading-none text-gray-900 dark:text-gray-50">{{widget.value}}</div>
37
+ <div class="mt-2 break-words text-lg font-extrabold leading-none text-gray-900 dark:text-gray-50">{{widget.value}}</div>
32
38
  </div>
33
39
  <div class="fleetops-connectivity-kpi-icon flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md text-[13px]">
34
40
  <FaIcon @icon={{widget.icon}} />
@@ -37,7 +43,11 @@
37
43
 
38
44
  <div class="mt-3 flex items-center justify-between gap-2 text-[11px]">
39
45
  <span class="min-w-0 truncate text-gray-500 dark:text-gray-400">{{widget.help}}</span>
40
- <button type="button" class="inline-flex flex-shrink-0 items-center gap-1 font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-300 dark:hover:text-blue-200" {{on "click" (fn this.runKpiAction widget)}}>
46
+ <button
47
+ type="button"
48
+ class="inline-flex flex-shrink-0 items-center gap-1 font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-300 dark:hover:text-blue-200"
49
+ {{on "click" (fn this.runKpiAction widget)}}
50
+ >
41
51
  <span>{{widget.action}}</span>
42
52
  <FaIcon @icon="arrow-right" class="text-[9px]" />
43
53
  </button>
@@ -47,71 +57,60 @@
47
57
  {{/each}}
48
58
  </section>
49
59
 
50
- {{#if this.hasConnections}}
51
- <section class="fleetops-provider-connections-panel min-w-0 overflow-hidden rounded-md border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-800">
52
- <div class="fleetops-provider-connections-header border-b border-gray-200 px-4 py-3 dark:border-gray-700">
53
- <div class="min-w-0 max-w-md">
54
- <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Connected Fuel Systems</h2>
55
- <p class="mt-1 text-xs leading-5 text-gray-500 dark:text-gray-300">Manage credentials, connection health, sync windows, and imported transaction status for each fuel integration.</p>
56
- </div>
57
- <div class="fleetops-provider-connections-actions flex min-w-0 flex-wrap items-center gap-2 lg:ml-auto lg:flex-nowrap lg:justify-end">
58
- <Layout::Resource::TabularActions
59
- @title="Connected Fuel Systems"
60
- @searchQuery={{@searchQuery}}
61
- @onSearch={{@onSearch}}
62
- @columns={{this.columns}}
63
- @bulkActions={{@bulkActions}}
64
- @controller={{@controller}}
65
- @table={{this.table}}
66
- @searchInputClass="fleetops-provider-connections-search"
67
- @filterPickerButtonClass="fleetops-provider-connections-action-button"
68
- @columnPickerButtonClass="fleetops-provider-connections-action-button"
69
- />
70
- </div>
60
+ <section class="fleetops-provider-connections-panel min-w-0 overflow-hidden rounded-md border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-800">
61
+ <div class="fleetops-provider-connections-header border-b border-gray-200 px-4 py-3 dark:border-gray-700">
62
+ <div class="min-w-0 max-w-md">
63
+ <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Connected Fuel Systems</h2>
64
+ <p class="mt-1 text-xs leading-5 text-gray-500 dark:text-gray-300">Manage credentials, connection health, sync windows, and imported transaction status for each fuel
65
+ integration.</p>
71
66
  </div>
72
- <Layout::Resource::Tabular
73
- @resource="fuel-provider-connection"
74
- @title=""
75
- @withoutHeader={{true}}
76
- @searchQuery={{@searchQuery}}
77
- @onSearch={{@onSearch}}
78
- @data={{@connections}}
79
- @columns={{this.columns}}
80
- @page={{@page}}
81
- @onPageChange={{@onPageChange}}
82
- @bulkActions={{@bulkActions}}
83
- @controller={{@controller}}
84
- @setupTable={{this.setupTable}}
85
- @emptyStateComponent={{component
86
- "table/empty-state"
87
- variant="compact"
88
- icon="gas-pump"
89
- title="No fuel connections"
90
- description="Connect a fuel provider to import transactions and match them to reports."
91
- primaryText="Connect provider"
92
- primaryIcon="plus"
93
- primaryAction=this.createIntegration
94
- }}
95
- />
96
- </section>
97
- {{else}}
98
- <section class="rounded-md border border-dashed border-gray-300 bg-white p-6 text-center shadow-sm dark:border-gray-700 dark:bg-gray-800">
99
- <div class="mx-auto flex h-11 w-11 items-center justify-center rounded-md bg-blue-50 text-blue-600 dark:bg-blue-900/20 dark:text-blue-300">
100
- <FaIcon @icon="gas-pump" />
67
+ <div class="fleetops-provider-connections-actions flex min-w-0 flex-wrap items-center gap-2 lg:ml-auto lg:flex-nowrap lg:justify-end">
68
+ <Layout::Resource::TabularActions
69
+ @title="Connected Fuel Systems"
70
+ @searchQuery={{@searchQuery}}
71
+ @onSearch={{@onSearch}}
72
+ @columns={{this.columns}}
73
+ @bulkActions={{@bulkActions}}
74
+ @controller={{@controller}}
75
+ @table={{this.table}}
76
+ @searchInputClass="fleetops-provider-connections-search"
77
+ @filterPickerButtonClass="fleetops-provider-connections-action-button"
78
+ @columnPickerButtonClass="fleetops-provider-connections-action-button"
79
+ />
101
80
  </div>
102
- <h2 class="mt-3 text-sm font-bold text-gray-900 dark:text-gray-100">No fuel integrations connected yet</h2>
103
- <p class="mx-auto mt-1 max-w-2xl text-xs leading-5 text-gray-500 dark:text-gray-300">
104
- Start by connecting PetroApp or another fuel card/fuel management system. Provider bills import into Fuel Transactions, match to vehicles and trips, and create linked Fuel Reports once matched.
105
- </p>
106
- <Button class="mt-4" @icon="plus" @text="Connect Integration" @type="primary" @size="sm" @onClick={{this.createIntegration}} />
107
- </section>
108
- {{/if}}
81
+ </div>
82
+ <Layout::Resource::Tabular
83
+ @resource="fuel-provider-connection"
84
+ @title=""
85
+ @withoutHeader={{true}}
86
+ @searchQuery={{@searchQuery}}
87
+ @onSearch={{@onSearch}}
88
+ @data={{@connections}}
89
+ @columns={{this.columns}}
90
+ @page={{@page}}
91
+ @onPageChange={{@onPageChange}}
92
+ @bulkActions={{@bulkActions}}
93
+ @controller={{@controller}}
94
+ @setupTable={{this.setupTable}}
95
+ @emptyStateComponent={{component
96
+ "table/empty-state"
97
+ variant="compact"
98
+ icon="gas-pump"
99
+ title="No fuel connections found"
100
+ description="Adjust your filters or connect a fuel provider to import transactions."
101
+ primaryText="Connect provider"
102
+ primaryIcon="plus"
103
+ primaryAction=this.createIntegration
104
+ }}
105
+ />
106
+ </section>
109
107
 
110
108
  <section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
111
109
  <div class="mb-3 flex flex-col gap-1 md:flex-row md:items-end md:justify-between">
112
110
  <div>
113
111
  <h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Available Fuel Integrations</h2>
114
- <p class="text-xs leading-5 text-gray-500 dark:text-gray-300">Connect providers that supply fuel card bills, purchase transactions, vehicle identifiers, station locations, or trip references.</p>
112
+ <p class="text-xs leading-5 text-gray-500 dark:text-gray-300">Connect providers that supply fuel card bills, purchase transactions, vehicle identifiers, station
113
+ locations, or trip references.</p>
115
114
  </div>
116
115
  {{#if @providersLoading}}
117
116
  <div class="flex items-center gap-2 text-xs text-gray-500 dark:text-gray-300"><Spinner /> Loading integrations</div>
@@ -120,7 +119,11 @@
120
119
 
121
120
  <div class="grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-4">
122
121
  {{#each this.providerCards as |provider|}}
123
- <button type="button" class="group flex min-h-[166px] flex-col rounded-md border border-gray-200 bg-white p-3 text-left transition hover:border-blue-300 hover:shadow-sm dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400" {{on "click" (fn this.openProvider provider)}}>
122
+ <button
123
+ type="button"
124
+ class="group flex min-h-[166px] flex-col rounded-md border border-gray-200 bg-white p-3 text-left transition hover:border-blue-300 hover:shadow-sm dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400"
125
+ {{on "click" (fn this.openProvider provider)}}
126
+ >
124
127
  <div class="flex items-start justify-between gap-3">
125
128
  <div class="flex min-w-0 items-start gap-3">
126
129
  <div class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md bg-blue-50 text-blue-600 dark:bg-blue-900/20 dark:text-blue-300">
@@ -151,4 +154,4 @@
151
154
  </section>
152
155
  </div>
153
156
  </div>
154
- </div>
157
+ </div>