@fleetbase/fleetops-engine 0.6.50 → 0.6.52

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 (494) hide show
  1. package/README.md +183 -67
  2. package/addon/components/cell/telematic-provider.hbs +16 -0
  3. package/addon/components/cell/telematic-provider.js +36 -0
  4. package/addon/components/cell/telematic-status.hbs +1 -0
  5. package/addon/components/cell/telematic-status.js +39 -0
  6. package/addon/components/contact/panel-header.hbs +11 -48
  7. package/addon/components/customer/details.hbs +1 -2
  8. package/addon/components/customer/form.hbs +63 -51
  9. package/addon/components/customer/form.js +27 -1
  10. package/addon/components/customer/orders.hbs +48 -0
  11. package/addon/components/customer/orders.js +67 -5
  12. package/addon/components/device/manager.hbs +5 -6
  13. package/addon/components/device/manager.js +12 -15
  14. package/addon/components/driver/details.hbs +1 -1
  15. package/addon/components/driver/form.hbs +1 -1
  16. package/addon/components/fleet/vehicle-listing.js +1 -0
  17. package/addon/components/fuel-integration/form.hbs +200 -0
  18. package/addon/components/fuel-integration/form.js +242 -0
  19. package/addon/components/fuel-integration/hub.hbs +154 -0
  20. package/addon/components/fuel-integration/hub.js +165 -0
  21. package/addon/components/fuel-integration/matching-priority.hbs +76 -0
  22. package/addon/components/fuel-integration/matching-priority.js +145 -0
  23. package/addon/components/fuel-report/details.hbs +13 -1
  24. package/addon/components/home/getting-started-guidance.hbs +113 -0
  25. package/addon/components/home/getting-started-guidance.js +107 -0
  26. package/addon/components/issue/details/comments.hbs +3 -0
  27. package/addon/components/issue/details/comments.js +3 -0
  28. package/addon/components/issue/details/correspondence.hbs +9 -0
  29. package/addon/components/issue/details/correspondence.js +83 -0
  30. package/addon/components/issue/details/documents.hbs +69 -0
  31. package/addon/components/issue/details/documents.js +85 -0
  32. package/addon/components/issue/details.hbs +166 -59
  33. package/addon/components/issue/details.js +149 -0
  34. package/addon/components/issue/form.hbs +19 -1
  35. package/addon/components/issue/panel-header.hbs +43 -0
  36. package/addon/components/issue/panel-header.js +22 -0
  37. package/addon/components/issue/timeline.hbs +40 -0
  38. package/addon/components/issue/timeline.js +45 -0
  39. package/addon/components/layout/fleet-ops-sidebar.js +20 -2
  40. package/addon/components/leaflet-tracking-marker.js +3 -0
  41. package/addon/components/map/drawer/device-event-listing.hbs +12 -2
  42. package/addon/components/map/drawer/driver-listing.hbs +14 -1
  43. package/addon/components/map/drawer/place-listing.hbs +14 -1
  44. package/addon/components/map/drawer/position-listing.hbs +12 -2
  45. package/addon/components/map/drawer/position-listing.js +3 -0
  46. package/addon/components/map/drawer/vehicle-listing.hbs +14 -1
  47. package/addon/components/map/leaflet-live-map.hbs +2 -2
  48. package/addon/components/map/leaflet-live-map.js +17 -0
  49. package/addon/components/map/order-list-overlay.hbs +4 -4
  50. package/addon/components/modals/assigned-orders.hbs +40 -0
  51. package/addon/components/modals/attach-device.hbs +4 -3
  52. package/addon/components/modals/attach-telematic-device.hbs +25 -0
  53. package/addon/components/modals/attach-telematic-device.js +3 -0
  54. package/addon/components/modals/convert-customer-to-vendor.hbs +30 -0
  55. package/addon/components/modals/convert-customer-to-vendor.js +55 -0
  56. package/addon/components/modals/driver-assign-order.hbs +7 -58
  57. package/addon/components/modals/driver-assign-vehicle.hbs +10 -2
  58. package/addon/components/modals/fleet-assign-driver.hbs +18 -0
  59. package/addon/components/modals/fleet-assign-driver.js +3 -0
  60. package/addon/components/modals/fleet-assign-vehicle.hbs +18 -0
  61. package/addon/components/modals/fleet-assign-vehicle.js +3 -0
  62. package/addon/components/modals/issue-assign.hbs +20 -0
  63. package/addon/components/modals/issue-assign.js +49 -0
  64. package/addon/components/modals/issue-close.hbs +30 -0
  65. package/addon/components/modals/issue-close.js +73 -0
  66. package/addon/components/modals/issue-status.hbs +20 -0
  67. package/addon/components/modals/issue-status.js +43 -0
  68. package/addon/components/modals/reset-customer-credentials.js +12 -6
  69. package/addon/components/modals/telematic-connection-diagnostics.hbs +75 -0
  70. package/addon/components/modals/telematic-connection-diagnostics.js +287 -0
  71. package/addon/components/modals/update-order-activity.hbs +51 -17
  72. package/addon/components/modals/update-order-activity.js +59 -5
  73. package/addon/components/modals/vehicle-details.hbs +6 -1
  74. package/addon/components/modals/vehicle-form.hbs +8 -1
  75. package/addon/components/order/card.hbs +106 -0
  76. package/addon/components/order/card.js +257 -0
  77. package/addon/components/order/details/activity.js +2 -2
  78. package/addon/components/order/details/proof.hbs +40 -38
  79. package/addon/components/order/details/proof.js +31 -4
  80. package/addon/components/order/details.hbs +5 -5
  81. package/addon/components/order/details.js +19 -1
  82. package/addon/components/order/form/service-rate.hbs +2 -0
  83. package/addon/components/order/header.hbs +1 -1
  84. package/addon/components/route-list.hbs +0 -12
  85. package/addon/components/service-rate/details.hbs +1 -1
  86. package/addon/components/service-rate/form.hbs +4 -3
  87. package/addon/components/service-rate/form.js +4 -0
  88. package/addon/components/telematic/details.hbs +98 -87
  89. package/addon/components/telematic/details.js +230 -1
  90. package/addon/components/telematic/form.hbs +303 -72
  91. package/addon/components/telematic/form.js +519 -3
  92. package/addon/components/telematic/hub.hbs +149 -0
  93. package/addon/components/telematic/hub.js +142 -0
  94. package/addon/components/telematic/settings.hbs +152 -0
  95. package/addon/components/telematic/settings.js +45 -0
  96. package/addon/components/telematic/tab-empty-state.hbs +29 -0
  97. package/addon/components/telematic/tab-empty-state.js +33 -0
  98. package/addon/components/vehicle/details.hbs +6 -1
  99. package/addon/components/vehicle/form.hbs +2 -1
  100. package/addon/components/vendor/personnel-manager.hbs +166 -0
  101. package/addon/components/vendor/personnel-manager.js +143 -0
  102. package/addon/components/widget/fuel-providers.hbs +43 -0
  103. package/addon/components/widget/fuel-providers.js +27 -0
  104. package/addon/components/widget/live-fleet.hbs +1 -0
  105. package/addon/components/widget/live-fleet.js +2 -7
  106. package/addon/components/widget/revenue-trend.hbs +1 -1
  107. package/addon/components/widget/revenue-trend.js +75 -2
  108. package/addon/controllers/connectivity/devices/index/details.js +27 -1
  109. package/addon/controllers/connectivity/devices/index.js +14 -0
  110. package/addon/controllers/connectivity/fuel-providers/details/sync.js +18 -0
  111. package/addon/controllers/connectivity/fuel-providers/details/transactions.js +24 -0
  112. package/addon/controllers/connectivity/fuel-providers/details.js +69 -0
  113. package/addon/controllers/connectivity/fuel-providers/edit.js +24 -0
  114. package/addon/controllers/connectivity/fuel-providers/index.js +177 -0
  115. package/addon/controllers/connectivity/fuel-providers/new.js +37 -0
  116. package/addon/controllers/connectivity/telematics/details/attachments.js +247 -0
  117. package/addon/controllers/connectivity/telematics/details/devices.js +368 -0
  118. package/addon/controllers/connectivity/telematics/details/events.js +244 -0
  119. package/addon/controllers/connectivity/telematics/details/index.js +3 -0
  120. package/addon/controllers/connectivity/telematics/details/logs.js +43 -0
  121. package/addon/controllers/connectivity/telematics/details/sensors.js +270 -0
  122. package/addon/controllers/connectivity/telematics/details.js +149 -0
  123. package/addon/controllers/connectivity/telematics/{index/edit.js → edit.js} +15 -4
  124. package/addon/controllers/connectivity/telematics/index.js +25 -5
  125. package/addon/controllers/connectivity/telematics/{index/new.js → new.js} +8 -2
  126. package/addon/controllers/management/contacts/customers/details.js +31 -13
  127. package/addon/controllers/management/contacts/customers.js +16 -5
  128. package/addon/controllers/management/contacts/index/details.js +31 -13
  129. package/addon/controllers/management/contacts/index.js +7 -0
  130. package/addon/controllers/management/drivers/index/details.js +78 -1
  131. package/addon/controllers/management/drivers/index.js +39 -0
  132. package/addon/controllers/management/fleets/index/details.js +23 -1
  133. package/addon/controllers/management/fleets/index.js +6 -1
  134. package/addon/controllers/management/fuel-reports/index.js +37 -1
  135. package/addon/controllers/management/fuel-transactions/index/details.js +70 -0
  136. package/addon/controllers/management/fuel-transactions/index.js +240 -0
  137. package/addon/controllers/management/issues/index/details.js +52 -6
  138. package/addon/controllers/management/vehicles/index/details.js +32 -0
  139. package/addon/controllers/management/vehicles/index.js +26 -0
  140. package/addon/controllers/management/vendors/index/details.js +4 -0
  141. package/addon/controllers/operations/orders/index/details.js +11 -3
  142. package/addon/controllers/operations/orders/index.js +5 -1
  143. package/addon/controllers/settings/payments/index.js +5 -0
  144. package/addon/extension.js +29 -12
  145. package/addon/helpers/format-duration.js +1 -38
  146. package/addon/initializers/load-leaflet-assets.js +5 -6
  147. package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -0
  148. package/addon/routes/connectivity/fuel-providers/details/index.js +7 -0
  149. package/addon/routes/connectivity/fuel-providers/details/matching.js +7 -0
  150. package/addon/routes/connectivity/fuel-providers/details/settings.js +7 -0
  151. package/addon/routes/connectivity/fuel-providers/details/sync.js +18 -0
  152. package/addon/routes/connectivity/fuel-providers/details/transactions.js +14 -0
  153. package/addon/routes/connectivity/fuel-providers/details.js +18 -0
  154. package/addon/routes/connectivity/fuel-providers/edit.js +18 -0
  155. package/addon/routes/connectivity/fuel-providers/index.js +20 -0
  156. package/addon/routes/connectivity/fuel-providers/new.js +3 -0
  157. package/addon/routes/connectivity/fuel-providers.js +3 -0
  158. package/addon/routes/connectivity/telematics/details/attachments.js +28 -0
  159. package/addon/routes/connectivity/telematics/details/devices.js +30 -0
  160. package/addon/routes/connectivity/telematics/details/events.js +33 -0
  161. package/addon/routes/connectivity/telematics/details/index.js +3 -0
  162. package/addon/routes/connectivity/telematics/details/logs.js +17 -0
  163. package/addon/routes/connectivity/telematics/details/sensors.js +29 -0
  164. package/addon/routes/connectivity/telematics/{index/details.js → details.js} +1 -1
  165. package/addon/routes/connectivity/telematics/{index/edit.js → edit.js} +1 -1
  166. package/addon/routes/connectivity/telematics/new.js +3 -0
  167. package/addon/routes/management/drivers/index/details/activity.js +3 -0
  168. package/addon/routes/management/fuel-reports/index.js +2 -0
  169. package/addon/routes/management/fuel-transactions/index/details.js +18 -0
  170. package/addon/routes/management/fuel-transactions/index.js +21 -0
  171. package/addon/routes/management/fuel-transactions.js +3 -0
  172. package/addon/routes/management/issues/index/details.js +1 -1
  173. package/addon/routes.js +29 -9
  174. package/addon/services/contact-actions.js +231 -1
  175. package/addon/services/device-actions.js +64 -1
  176. package/addon/services/device-event-actions.js +12 -1
  177. package/addon/services/driver-actions.js +147 -11
  178. package/addon/services/fleet-actions.js +66 -1
  179. package/addon/services/fuel-integration-actions.js +31 -0
  180. package/addon/services/getting-started.js +44 -0
  181. package/addon/services/issue-actions.js +72 -1
  182. package/addon/services/leaflet-map-manager.js +2 -0
  183. package/addon/services/map-adapter/leaflet.js +19 -0
  184. package/addon/services/service-areas.js +3 -0
  185. package/addon/services/telematic-actions.js +9 -3
  186. package/addon/services/vehicle-actions.js +125 -0
  187. package/addon/styles/fleetops-engine.css +1313 -1
  188. package/addon/templates/analytics/reports/index.hbs +19 -1
  189. package/addon/templates/connectivity/devices/index.hbs +19 -1
  190. package/addon/templates/connectivity/events/index.hbs +16 -1
  191. package/addon/templates/connectivity/fuel-providers/details/index.hbs +38 -0
  192. package/addon/templates/connectivity/fuel-providers/details/matching.hbs +13 -0
  193. package/addon/templates/connectivity/fuel-providers/details/settings.hbs +11 -0
  194. package/addon/templates/connectivity/fuel-providers/details/sync.hbs +48 -0
  195. package/addon/templates/connectivity/fuel-providers/details/transactions.hbs +21 -0
  196. package/addon/templates/connectivity/fuel-providers/details.hbs +51 -0
  197. package/addon/templates/connectivity/fuel-providers/edit.hbs +24 -0
  198. package/addon/templates/connectivity/fuel-providers/index.hbs +12 -0
  199. package/addon/templates/connectivity/fuel-providers/new.hbs +22 -0
  200. package/addon/templates/connectivity/fuel-providers.hbs +1 -0
  201. package/addon/templates/connectivity/sensors/index.hbs +19 -1
  202. package/addon/templates/connectivity/telematics/details/attachments.hbs +163 -0
  203. package/addon/templates/connectivity/telematics/details/devices.hbs +88 -0
  204. package/addon/templates/connectivity/telematics/details/events.hbs +101 -0
  205. package/addon/templates/connectivity/telematics/{index/details → details}/index.hbs +0 -1
  206. package/addon/templates/connectivity/telematics/details/logs.hbs +69 -0
  207. package/addon/templates/connectivity/telematics/details/sensors.hbs +88 -0
  208. package/addon/templates/connectivity/telematics/details.hbs +53 -0
  209. package/addon/templates/connectivity/telematics/edit.hbs +27 -0
  210. package/addon/templates/connectivity/telematics/index.hbs +6 -8
  211. package/addon/templates/connectivity/telematics/new.hbs +24 -0
  212. package/addon/templates/maintenance/equipment/index.hbs +19 -1
  213. package/addon/templates/maintenance/maintenances/index.hbs +15 -1
  214. package/addon/templates/maintenance/parts/index.hbs +19 -1
  215. package/addon/templates/maintenance/schedules/index.hbs +19 -1
  216. package/addon/templates/maintenance/work-orders/index.hbs +19 -1
  217. package/addon/templates/management/contacts/customers/details.hbs +1 -1
  218. package/addon/templates/management/contacts/customers.hbs +15 -1
  219. package/addon/templates/management/contacts/index/details.hbs +1 -1
  220. package/addon/templates/management/contacts/index.hbs +19 -1
  221. package/addon/templates/management/contacts.hbs +2 -2
  222. package/addon/templates/management/drivers/index/details/activity.hbs +1 -0
  223. package/addon/templates/management/drivers/index.hbs +19 -1
  224. package/addon/templates/management/fleets/index.hbs +19 -1
  225. package/addon/templates/management/fuel-reports/index.hbs +19 -1
  226. package/addon/templates/management/fuel-transactions/index/details.hbs +73 -0
  227. package/addon/templates/management/fuel-transactions/index.hbs +58 -0
  228. package/addon/templates/management/fuel-transactions.hbs +1 -0
  229. package/addon/templates/management/issues/index/details/index.hbs +3 -1
  230. package/addon/templates/management/issues/index/details.hbs +3 -2
  231. package/addon/templates/management/issues/index.hbs +19 -1
  232. package/addon/templates/management/places/index.hbs +19 -1
  233. package/addon/templates/management/vehicles/index.hbs +19 -1
  234. package/addon/templates/management/vendors/index/details/personnel.hbs +1 -2
  235. package/addon/templates/management/vendors/index.hbs +19 -1
  236. package/addon/templates/management/vendors/integrated.hbs +13 -1
  237. package/addon/templates/operations/orders/index/details/index.hbs +2 -2
  238. package/addon/templates/operations/orders/index.hbs +20 -2
  239. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  240. package/addon/templates/operations/service-rates/index/new.hbs +1 -0
  241. package/addon/templates/operations/service-rates/index.hbs +19 -1
  242. package/addon/templates/settings/payments/index.hbs +15 -1
  243. package/addon/templates/settings/payments/onboard.hbs +8 -8
  244. package/addon/utils/fleet-ops-options.js +3 -0
  245. package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
  246. package/addon/utils/leaflet-plugin-loader.js +219 -0
  247. package/addon/utils/setup-customer-portal.js +4 -64
  248. package/app/components/cell/telematic-provider.js +1 -0
  249. package/app/components/cell/telematic-status.js +1 -0
  250. package/app/components/fuel-integration/form.js +1 -0
  251. package/app/components/fuel-integration/hub.js +1 -0
  252. package/app/components/fuel-integration/matching-priority.js +1 -0
  253. package/app/components/home/getting-started-guidance.js +1 -0
  254. package/app/components/issue/details/comments.js +1 -0
  255. package/app/components/issue/details/correspondence.js +1 -0
  256. package/app/components/issue/details/documents.js +1 -0
  257. package/app/components/issue/panel-header.js +1 -0
  258. package/app/components/modals/assigned-orders.js +1 -0
  259. package/app/components/modals/attach-telematic-device.js +1 -0
  260. package/app/components/modals/convert-customer-to-vendor.js +1 -0
  261. package/app/components/modals/fleet-assign-driver.js +1 -0
  262. package/app/components/modals/fleet-assign-vehicle.js +1 -0
  263. package/app/components/modals/issue-assign.js +1 -0
  264. package/app/components/modals/issue-close.js +1 -0
  265. package/app/components/modals/issue-status.js +1 -0
  266. package/app/components/modals/telematic-connection-diagnostics.js +1 -0
  267. package/app/components/order/card.js +1 -0
  268. package/app/components/telematic/hub.js +1 -0
  269. package/app/components/telematic/settings.js +1 -0
  270. package/app/components/telematic/tab-empty-state.js +1 -0
  271. package/app/components/vendor/personnel-manager.js +1 -0
  272. package/app/components/widget/fuel-providers.js +1 -0
  273. package/app/controllers/connectivity/fuel-providers/details/sync.js +1 -0
  274. package/app/controllers/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  275. package/app/controllers/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  276. package/app/controllers/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  277. package/app/controllers/connectivity/{telematics/index/details → fuel-providers}/index.js +1 -1
  278. package/app/controllers/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  279. package/app/controllers/connectivity/telematics/details/attachments.js +1 -0
  280. package/app/controllers/connectivity/telematics/details/devices.js +1 -0
  281. package/app/controllers/connectivity/telematics/details/events.js +1 -0
  282. package/app/controllers/connectivity/telematics/details/index.js +1 -0
  283. package/app/controllers/connectivity/telematics/details/logs.js +1 -0
  284. package/app/controllers/connectivity/telematics/details/sensors.js +1 -0
  285. package/app/controllers/connectivity/telematics/details.js +1 -0
  286. package/app/controllers/connectivity/telematics/edit.js +1 -0
  287. package/app/controllers/connectivity/telematics/new.js +1 -0
  288. package/app/controllers/management/fuel-transactions/index/details.js +1 -0
  289. package/app/controllers/management/fuel-transactions/index.js +1 -0
  290. package/app/helpers/format-duration.js +1 -1
  291. package/app/routes/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  292. package/app/routes/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  293. package/app/routes/connectivity/fuel-providers/details/settings.js +1 -0
  294. package/app/routes/connectivity/fuel-providers/details/sync.js +1 -0
  295. package/app/routes/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  296. package/app/routes/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  297. package/app/routes/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  298. package/app/routes/connectivity/fuel-providers/index.js +1 -0
  299. package/app/routes/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  300. package/app/routes/connectivity/fuel-providers.js +1 -0
  301. package/app/routes/connectivity/telematics/details/attachments.js +1 -0
  302. package/app/routes/connectivity/telematics/details/devices.js +1 -0
  303. package/app/routes/connectivity/telematics/details/events.js +1 -0
  304. package/app/routes/connectivity/telematics/details/index.js +1 -0
  305. package/app/routes/connectivity/telematics/details/logs.js +1 -0
  306. package/app/routes/connectivity/telematics/details/sensors.js +1 -0
  307. package/app/routes/connectivity/telematics/details.js +1 -0
  308. package/app/routes/connectivity/telematics/edit.js +1 -0
  309. package/app/routes/connectivity/telematics/new.js +1 -0
  310. package/app/routes/management/drivers/index/details/activity.js +1 -0
  311. package/app/routes/management/fuel-transactions/index/details.js +1 -0
  312. package/app/routes/management/fuel-transactions/index.js +1 -0
  313. package/app/routes/management/fuel-transactions.js +1 -0
  314. package/app/services/fuel-integration-actions.js +1 -0
  315. package/app/services/getting-started.js +1 -0
  316. package/app/templates/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  317. package/app/templates/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  318. package/app/templates/connectivity/fuel-providers/details/settings.js +1 -0
  319. package/app/templates/connectivity/fuel-providers/details/sync.js +1 -0
  320. package/app/templates/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  321. package/app/templates/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  322. package/app/templates/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  323. package/app/templates/connectivity/fuel-providers/index.js +1 -0
  324. package/app/templates/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  325. package/app/templates/connectivity/fuel-providers.js +1 -0
  326. package/app/templates/connectivity/telematics/details/attachments.js +1 -0
  327. package/app/templates/connectivity/telematics/details/devices.js +1 -0
  328. package/app/templates/connectivity/telematics/details/events.js +1 -0
  329. package/app/templates/connectivity/telematics/details/index.js +1 -0
  330. package/app/templates/connectivity/telematics/details/logs.js +1 -0
  331. package/app/templates/connectivity/telematics/details/sensors.js +1 -0
  332. package/app/templates/connectivity/telematics/details.js +1 -0
  333. package/app/templates/connectivity/telematics/edit.js +1 -0
  334. package/app/templates/connectivity/telematics/new.js +1 -0
  335. package/app/templates/management/drivers/index/details/activity.js +1 -0
  336. package/app/templates/management/fuel-transactions/index/details.js +1 -0
  337. package/app/templates/management/fuel-transactions/index.js +1 -0
  338. package/app/templates/management/fuel-transactions.js +1 -0
  339. package/app/utils/leaflet-draw-namespace-guard.js +1 -0
  340. package/app/utils/leaflet-plugin-loader.js +1 -0
  341. package/assets/images/telematics/providers/afaqy.webp +0 -0
  342. package/assets/images/telematics/providers/default.webp +0 -0
  343. package/assets/images/telematics/providers/flespi.webp +0 -0
  344. package/assets/images/telematics/providers/geotab.webp +0 -0
  345. package/assets/images/telematics/providers/safee.webp +0 -0
  346. package/assets/images/telematics/providers/samsara.webp +0 -0
  347. package/composer.json +1 -1
  348. package/extension.json +1 -1
  349. package/package.json +5 -5
  350. package/server/config/fuel-providers.php +42 -0
  351. package/server/config/telematics.php +139 -130
  352. package/server/migrations/2026_05_31_000001_add_portal_fields_to_vendor_personnels_table.php +30 -0
  353. package/server/migrations/2026_06_03_000000_ensure_tags_column_on_issues_table.php +31 -0
  354. package/server/migrations/2026_06_03_000001_add_order_uuid_to_issues_table.php +25 -0
  355. package/server/migrations/2026_06_04_000001_backfill_order_transaction_subjects.php +39 -0
  356. package/server/migrations/2026_06_04_000002_backfill_order_transaction_directions.php +24 -0
  357. package/server/migrations/2026_06_06_000001_harden_device_events_telematics_contract.php +59 -0
  358. package/server/migrations/2026_06_08_000001_create_fuel_provider_connections_table.php +37 -0
  359. package/server/migrations/2026_06_08_000002_create_fuel_provider_transactions_table.php +53 -0
  360. package/server/migrations/2026_06_08_000003_create_fuel_provider_sync_runs_table.php +40 -0
  361. package/server/migrations/2026_06_10_000001_add_fuel_card_number_to_vehicles_table.php +25 -0
  362. package/server/migrations/2026_06_10_000002_add_vehicle_identity_columns_to_fuel_provider_transactions_table.php +39 -0
  363. package/server/resources/views/mail/customer-credentials.blade.php +16 -13
  364. package/server/src/Contracts/FuelProvider.php +30 -0
  365. package/server/src/Contracts/TelematicProviderDescriptor.php +3 -1
  366. package/server/src/Events/FuelProviderTransactionImported.php +17 -0
  367. package/server/src/Events/FuelProviderTransactionMatched.php +17 -0
  368. package/server/src/Events/FuelProviderTransactionUnmatched.php +17 -0
  369. package/server/src/Events/FuelReportCreatedFromProvider.php +18 -0
  370. package/server/src/Expansions/UserFilterExpansion.php +28 -0
  371. package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
  372. package/server/src/Http/Controllers/Api/v1/OrderController.php +26 -25
  373. package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
  374. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +6 -0
  375. package/server/src/Http/Controllers/Internal/v1/ContactController.php +135 -0
  376. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
  377. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +76 -2
  378. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +44 -0
  379. package/server/src/Http/Controllers/Internal/v1/DriverController.php +158 -7
  380. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +124 -0
  381. package/server/src/Http/Controllers/Internal/v1/FuelProviderSyncRunController.php +10 -0
  382. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +76 -0
  383. package/server/src/Http/Controllers/Internal/v1/GettingStartedController.php +17 -0
  384. package/server/src/Http/Controllers/Internal/v1/IssueController.php +251 -0
  385. package/server/src/Http/Controllers/Internal/v1/OrderController.php +172 -97
  386. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
  387. package/server/src/Http/Controllers/Internal/v1/SensorController.php +1 -1
  388. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +178 -15
  389. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +165 -0
  390. package/server/src/Http/Controllers/Internal/v1/VendorController.php +89 -0
  391. package/server/src/Http/Controllers/TelematicWebhookController.php +103 -19
  392. package/server/src/Http/Filter/FuelProviderConnectionFilter.php +33 -0
  393. package/server/src/Http/Filter/FuelProviderSyncRunFilter.php +28 -0
  394. package/server/src/Http/Filter/FuelProviderTransactionFilter.php +59 -0
  395. package/server/src/Http/Filter/FuelReportFilter.php +10 -0
  396. package/server/src/Http/Requests/CreateIssueRequest.php +4 -0
  397. package/server/src/Http/Requests/UpdateIssueRequest.php +4 -0
  398. package/server/src/Http/Resources/v1/Driver.php +15 -0
  399. package/server/src/Http/Resources/v1/FuelProviderConnection.php +30 -0
  400. package/server/src/Http/Resources/v1/FuelProviderSyncRun.php +36 -0
  401. package/server/src/Http/Resources/v1/FuelProviderTransaction.php +54 -0
  402. package/server/src/Http/Resources/v1/FuelReport.php +28 -22
  403. package/server/src/Http/Resources/v1/Index/Driver.php +26 -20
  404. package/server/src/Http/Resources/v1/Index/Order.php +12 -9
  405. package/server/src/Http/Resources/v1/Index/Vehicle.php +29 -22
  406. package/server/src/Http/Resources/v1/Issue.php +25 -0
  407. package/server/src/Http/Resources/v1/Order.php +20 -18
  408. package/server/src/Http/Resources/v1/Vehicle.php +17 -0
  409. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +2 -0
  410. package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +57 -0
  411. package/server/src/Jobs/SyncTelematicDevicesJob.php +36 -6
  412. package/server/src/Jobs/TestTelematicConnectionJob.php +9 -22
  413. package/server/src/Mail/CustomerCredentialsMail.php +5 -6
  414. package/server/src/Models/Asset.php +2 -1
  415. package/server/src/Models/Contact.php +32 -52
  416. package/server/src/Models/Device.php +27 -4
  417. package/server/src/Models/DeviceEvent.php +40 -3
  418. package/server/src/Models/Driver.php +2 -1
  419. package/server/src/Models/Equipment.php +2 -1
  420. package/server/src/Models/Fleet.php +2 -1
  421. package/server/src/Models/FuelProviderConnection.php +60 -0
  422. package/server/src/Models/FuelProviderSyncRun.php +58 -0
  423. package/server/src/Models/FuelProviderTransaction.php +119 -0
  424. package/server/src/Models/FuelReport.php +16 -1
  425. package/server/src/Models/Issue.php +47 -6
  426. package/server/src/Models/Order.php +33 -6
  427. package/server/src/Models/Part.php +2 -1
  428. package/server/src/Models/Sensor.php +21 -4
  429. package/server/src/Models/ServiceArea.php +1 -1
  430. package/server/src/Models/ServiceRate.php +39 -2
  431. package/server/src/Models/Vehicle.php +14 -2
  432. package/server/src/Models/Vendor.php +2 -1
  433. package/server/src/Models/VendorPersonnel.php +10 -1
  434. package/server/src/Models/Zone.php +1 -1
  435. package/server/src/Observers/PurchaseRateObserver.php +20 -0
  436. package/server/src/Observers/ZoneObserver.php +56 -0
  437. package/server/src/Providers/FleetOpsServiceProvider.php +11 -0
  438. package/server/src/Support/Analytics/FuelProviderSummary.php +42 -0
  439. package/server/src/Support/Analytics/TopDrivers.php +9 -1
  440. package/server/src/Support/FuelProviders/FuelProviderDescriptor.php +55 -0
  441. package/server/src/Support/FuelProviders/FuelProviderRegistry.php +75 -0
  442. package/server/src/Support/FuelProviders/FuelProviderService.php +447 -0
  443. package/server/src/Support/FuelProviders/Providers/AbstractFuelProvider.php +98 -0
  444. package/server/src/Support/FuelProviders/Providers/PetroAppFuelProvider.php +167 -0
  445. package/server/src/Support/GettingStarted.php +144 -0
  446. package/server/src/Support/PlaceSearch.php +282 -0
  447. package/server/src/Support/ResolvesOrderServiceStops.php +22 -12
  448. package/server/src/Support/Telematics/Providers/AbstractProvider.php +27 -6
  449. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +55 -26
  450. package/server/src/Support/Telematics/Providers/FlespiProvider.php +1 -0
  451. package/server/src/Support/Telematics/Providers/GeotabProvider.php +1 -0
  452. package/server/src/Support/Telematics/Providers/SafeeProvider.php +32 -22
  453. package/server/src/Support/Telematics/Providers/SamsaraProvider.php +3 -1
  454. package/server/src/Support/Telematics/TelematicService.php +340 -21
  455. package/server/src/routes.php +74 -5
  456. package/server/tests/AnalyticsRoutesTest.php +8 -0
  457. package/server/tests/CustomerContactIdentitySafetyTest.php +41 -0
  458. package/server/tests/DriverVehicleStatusDefaultTest.php +2 -2
  459. package/server/tests/FuelProviderRegistryTest.php +416 -0
  460. package/server/tests/GettingStartedStatusTest.php +21 -0
  461. package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
  462. package/server/tests/ServiceAreaZoneApiShapeTest.php +44 -0
  463. package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +44 -0
  464. package/server/tests/TelematicsHardeningTest.php +268 -0
  465. package/server/tests/VehicleDriverAssignmentTest.php +51 -0
  466. package/translations/ar-ae.yml +31 -0
  467. package/translations/bg-bg.yaml +81 -0
  468. package/translations/en-us.yaml +94 -0
  469. package/translations/es-pa.yaml +81 -0
  470. package/translations/fr-fr.yaml +81 -0
  471. package/translations/mn-mn.yaml +81 -0
  472. package/translations/pt-br.yaml +81 -0
  473. package/translations/ru-ru.yaml +81 -0
  474. package/translations/vi-vn.yaml +106 -0
  475. package/addon/controllers/connectivity/telematics/index/details/devices.js +0 -3
  476. package/addon/controllers/connectivity/telematics/index/details/events.js +0 -3
  477. package/addon/controllers/connectivity/telematics/index/details/index.js +0 -3
  478. package/addon/controllers/connectivity/telematics/index/details/sensors.js +0 -3
  479. package/addon/controllers/connectivity/telematics/index/details.js +0 -24
  480. package/addon/routes/connectivity/telematics/index/details/devices.js +0 -3
  481. package/addon/routes/connectivity/telematics/index/details/events.js +0 -3
  482. package/addon/routes/connectivity/telematics/index/details/index.js +0 -3
  483. package/addon/routes/connectivity/telematics/index/details/sensors.js +0 -3
  484. package/addon/routes/connectivity/telematics/index/new.js +0 -3
  485. package/addon/templates/connectivity/telematics/index/details/devices.hbs +0 -1
  486. package/addon/templates/connectivity/telematics/index/details/events.hbs +0 -1
  487. package/addon/templates/connectivity/telematics/index/details/sensors.hbs +0 -1
  488. package/addon/templates/connectivity/telematics/index/details.hbs +0 -14
  489. package/addon/templates/connectivity/telematics/index/edit.hbs +0 -12
  490. package/addon/templates/connectivity/telematics/index/new.hbs +0 -12
  491. package/app/controllers/connectivity/telematics/index/details/events.js +0 -1
  492. package/app/controllers/connectivity/telematics/index/details/sensors.js +0 -1
  493. package/app/routes/connectivity/telematics/index/details/sensors.js +0 -1
  494. package/app/templates/connectivity/telematics/index/details/sensors.js +0 -1
@@ -7,10 +7,8 @@ use Fleetbase\FleetOps\Exceptions\CustomerUserConflictException;
7
7
  use Fleetbase\FleetOps\Exceptions\UserAlreadyExistsException;
8
8
  use Fleetbase\FleetOps\Support\Utils;
9
9
  use Fleetbase\Models\CompanyUser;
10
- use Fleetbase\Models\Invite;
11
10
  use Fleetbase\Models\Model;
12
11
  use Fleetbase\Models\User;
13
- use Fleetbase\Notifications\UserInvited;
14
12
  use Fleetbase\Traits\HasApiModelBehavior;
15
13
  use Fleetbase\Traits\HasApiModelCache;
16
14
  use Fleetbase\Traits\HasCustomFields;
@@ -145,7 +143,8 @@ class Contact extends Model
145
143
  {
146
144
  return SlugOptions::create()
147
145
  ->generateSlugsFrom('name')
148
- ->saveSlugsTo('slug');
146
+ ->saveSlugsTo('slug')
147
+ ->doNotGenerateSlugsOnUpdate();
149
148
  }
150
149
 
151
150
  public function company(): BelongsTo
@@ -301,15 +300,15 @@ class Contact extends Model
301
300
  }
302
301
 
303
302
  /**
304
- * Creates a new user from the given contact and optionally sends an invitation.
303
+ * Creates a new user from the given contact without sending an organization invitation.
305
304
  *
306
305
  * This method first checks if a user with the same email or phone number as the contact already exists.
307
306
  * If such a user exists, it throws a UserAlreadyExistsException. Otherwise, it proceeds to create a new
308
307
  * user record using the contact's details, assigns the user to the contact's company, and links the
309
- * user to the contact. Optionally, it sends an invitation to the newly created user via email.
308
+ * user to the contact.
310
309
  *
311
310
  * @param Contact $contact the contact instance from which the user should be created
312
- * @param bool $sendInvite (optional) Whether to send an invitation to the newly created user. Default is false.
311
+ * @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
313
312
  *
314
313
  * @return User the newly created user instance
315
314
  *
@@ -379,8 +378,8 @@ class Contact extends Model
379
378
  // Set user type
380
379
  $user->setType($contact->type);
381
380
 
382
- // Assing to company
383
- $user->assignCompany($contact->company, $contact->isCustomer() ? 'Fleet-Ops Customer' : 'Fleet-Ops Contact');
381
+ // Assign to company without triggering core organization invitations.
382
+ static::assignUserToContactCompany($contact, $user);
384
383
 
385
384
  // Assign customer role
386
385
  if ($contact->isCustomer()) {
@@ -393,23 +392,6 @@ class Contact extends Model
393
392
  $contact->update(['user_uuid' => $user->uuid]);
394
393
  }
395
394
 
396
- // Optionally, send invite
397
- if ($sendInvite) {
398
- // send invitation to user
399
- $invitation = Invite::create([
400
- 'company_uuid' => $user->company_uuid,
401
- 'created_by_uuid' => session('user'),
402
- 'subject_uuid' => $user->company_uuid,
403
- 'subject_type' => Utils::getMutationType('company'),
404
- 'protocol' => 'email',
405
- 'recipients' => [$user->email],
406
- 'reason' => 'join_company',
407
- ]);
408
-
409
- // notify user
410
- $user->notify(new UserInvited($invitation));
411
- }
412
-
413
395
  $contact->setRelation('user', $user);
414
396
 
415
397
  return $user;
@@ -491,21 +473,20 @@ class Contact extends Model
491
473
  }
492
474
 
493
475
  /**
494
- * Assigns a user to the company and optionally sends an invitation email.
476
+ * Assigns a user to the contact's company without sending an organization invitation.
495
477
  *
496
478
  * This method performs the following actions:
497
479
  * 1. Associates the provided user with the current company, assigning them a role based on the
498
480
  * company's type (e.g., 'Fleet-Ops Customer' or 'Fleet-Ops Contact').
499
481
  * 2. If the user is of type 'customer', assigns the 'Fleet-Ops Customer' role specifically.
500
482
  * 3. Updates the current entity's `user_uuid` to reference the assigned user.
501
- * 4. Optionally sends an invitation email to the user, inviting them to join the company.
502
483
  *
503
484
  * @param User $user the user to be assigned to the company
504
- * @param bool $sendInvite Determines whether to send an invitation email to the user. Defaults to false.
485
+ * @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
505
486
  *
506
487
  * @return self returns the current instance to allow method chaining
507
488
  *
508
- * @throws \Exception if an error occurs during user assignment or while sending the invitation
489
+ * @throws \Exception if an error occurs during user assignment
509
490
  */
510
491
  public function assignUser(User $user, bool $sendInvite = false): self
511
492
  {
@@ -525,8 +506,8 @@ class Contact extends Model
525
506
  }
526
507
  }
527
508
 
528
- // Assing to company
529
- $user->assignCompany($this->company, $this->isCustomer() ? 'Fleet-Ops Customer' : 'Fleet-Ops Contact');
509
+ // Assign to company without triggering core organization invitations.
510
+ static::assignUserToContactCompany($this, $user);
530
511
 
531
512
  // Get the company user instance
532
513
  $companyUser = $user->getCompanyUser($this->company);
@@ -538,23 +519,6 @@ class Contact extends Model
538
519
  // Set user to contact
539
520
  $this->update(['user_uuid' => $user->uuid]);
540
521
 
541
- // Optionally, send invite
542
- if ($sendInvite) {
543
- // send invitation to user
544
- $invitation = Invite::create([
545
- 'company_uuid' => $user->company_uuid,
546
- 'created_by_uuid' => session('user'),
547
- 'subject_uuid' => $user->company_uuid,
548
- 'subject_type' => Utils::getMutationType('company'),
549
- 'protocol' => 'email',
550
- 'recipients' => [$user->email],
551
- 'reason' => 'join_company',
552
- ]);
553
-
554
- // notify user
555
- $user->notify(new UserInvited($invitation));
556
- }
557
-
558
522
  $this->setRelation('user', $user);
559
523
 
560
524
  return $this;
@@ -657,12 +621,11 @@ class Contact extends Model
657
621
  }
658
622
 
659
623
  /**
660
- * Creates a new user from the current contact instance and optionally sends an invitation.
624
+ * Creates a new user from the current contact instance without sending an organization invitation.
661
625
  *
662
- * This method is a wrapper around the createUserFromContact method. It allows creating a user directly
663
- * from a contact instance and, optionally, sending an invitation to the newly created user.
626
+ * This method is a wrapper around the createUserFromContact method.
664
627
  *
665
- * @param bool $sendInvite (optional) Whether to send an invitation to the newly created user. Default is false.
628
+ * @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
666
629
  *
667
630
  * @return User the newly created user instance
668
631
  */
@@ -709,4 +672,21 @@ class Contact extends Model
709
672
  {
710
673
  return !$this->hasUser();
711
674
  }
675
+
676
+ private static function assignUserToContactCompany(Contact $contact, User $user): ?CompanyUser
677
+ {
678
+ $contact->loadMissing('company');
679
+
680
+ if (!$contact->company) {
681
+ return null;
682
+ }
683
+
684
+ $role = $contact->isCustomer() ? 'Fleet-Ops Customer' : 'Fleet-Ops Contact';
685
+ $companyUser = $contact->company->addUser($user, $role);
686
+
687
+ $user->forceFill(['company_uuid' => $contact->company->uuid])->saveQuietly();
688
+ $user->setRelation('companyUser', $companyUser);
689
+
690
+ return $companyUser;
691
+ }
712
692
  }
@@ -67,14 +67,14 @@ class Device extends Model
67
67
  *
68
68
  * @var array
69
69
  */
70
- protected $searchableColumns = ['name', 'model', 'serial_number', 'manufacturer', 'public_id'];
70
+ protected $searchableColumns = ['name', 'model', 'serial_number', 'manufacturer', 'device_id', 'internal_id', 'imei', 'public_id'];
71
71
 
72
72
  /**
73
73
  * The attributes that can be used for filtering.
74
74
  *
75
75
  * @var array
76
76
  */
77
- protected $filterParams = ['status', 'warranty_uuid', 'attachable_type'];
77
+ protected $filterParams = ['status', 'warranty_uuid', 'attachable_type', 'attachable_uuid', 'telematic_uuid', 'provider'];
78
78
 
79
79
  /**
80
80
  * The attributes that are mass assignable.
@@ -187,7 +187,8 @@ class Device extends Model
187
187
  {
188
188
  return SlugOptions::create()
189
189
  ->generateSlugsFrom(['name', 'serial_number'])
190
- ->saveSlugsTo('slug');
190
+ ->saveSlugsTo('slug')
191
+ ->doNotGenerateSlugsOnUpdate();
191
192
  }
192
193
 
193
194
  /**
@@ -195,7 +196,29 @@ class Device extends Model
195
196
  */
196
197
  public function getActivitylogOptions(): LogOptions
197
198
  {
198
- return LogOptions::defaults()->logAll();
199
+ return LogOptions::defaults()
200
+ ->logOnly([
201
+ 'company_uuid',
202
+ 'telematic_uuid',
203
+ 'attachable_uuid',
204
+ 'attachable_type',
205
+ 'device_id',
206
+ 'internal_id',
207
+ 'imei',
208
+ 'imsi',
209
+ 'firmware_version',
210
+ 'provider',
211
+ 'name',
212
+ 'model',
213
+ 'manufacturer',
214
+ 'serial_number',
215
+ 'installation_date',
216
+ 'last_maintenance_date',
217
+ 'online',
218
+ 'status',
219
+ 'last_online_at',
220
+ ])
221
+ ->logOnlyDirty();
199
222
  }
200
223
 
201
224
  public function telematic(): BelongsTo
@@ -3,6 +3,8 @@
3
3
  namespace Fleetbase\FleetOps\Models;
4
4
 
5
5
  use Fleetbase\Casts\Json;
6
+ use Fleetbase\FleetOps\Casts\Point;
7
+ use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialTrait;
6
8
  use Fleetbase\Models\Alert;
7
9
  use Fleetbase\Models\Company;
8
10
  use Fleetbase\Models\Model;
@@ -35,6 +37,7 @@ class DeviceEvent extends Model
35
37
  use LogsActivity;
36
38
  use HasMetaAttributes;
37
39
  use Searchable;
40
+ use SpatialTrait;
38
41
 
39
42
  /**
40
43
  * The database table used by the model.
@@ -55,14 +58,14 @@ class DeviceEvent extends Model
55
58
  *
56
59
  * @var array
57
60
  */
58
- protected $searchableColumns = ['event_type', 'message', 'public_id'];
61
+ protected $searchableColumns = ['event_type', 'message', 'ident', 'code', 'provider', 'public_id'];
59
62
 
60
63
  /**
61
64
  * The attributes that can be used for filtering.
62
65
  *
63
66
  * @var array
64
67
  */
65
- protected $filterParams = ['event_type', 'severity', 'device_uuid'];
68
+ protected $filterParams = ['event_type', 'severity', 'device_uuid', 'provider', 'code'];
66
69
 
67
70
  /**
68
71
  * The attributes that are mass assignable.
@@ -73,10 +76,12 @@ class DeviceEvent extends Model
73
76
  'company_uuid',
74
77
  'device_uuid',
75
78
  'payload',
79
+ 'data',
76
80
  'meta',
77
81
  'location',
78
82
  'event_type',
79
83
  'severity',
84
+ 'message',
80
85
  'ident',
81
86
  'protocol',
82
87
  'provider',
@@ -86,6 +91,8 @@ class DeviceEvent extends Model
86
91
  'reason',
87
92
  'comment',
88
93
  'resolved_at',
94
+ 'occurred_at',
95
+ 'processed_at',
89
96
  'slug',
90
97
  ];
91
98
 
@@ -108,6 +115,13 @@ class DeviceEvent extends Model
108
115
  */
109
116
  protected $hidden = ['device'];
110
117
 
118
+ /**
119
+ * The attributes that are spatial columns.
120
+ *
121
+ * @var array
122
+ */
123
+ protected $spatialFields = ['location'];
124
+
111
125
  /**
112
126
  * The attributes that should be cast to native types.
113
127
  *
@@ -115,8 +129,12 @@ class DeviceEvent extends Model
115
129
  */
116
130
  protected $casts = [
117
131
  'payload' => Json::class,
132
+ 'data' => Json::class,
118
133
  'meta' => Json::class,
134
+ 'location' => Point::class,
119
135
  'resolved_at' => 'datetime',
136
+ 'occurred_at' => 'datetime',
137
+ 'processed_at' => 'datetime',
120
138
  ];
121
139
 
122
140
  /**
@@ -145,7 +163,26 @@ class DeviceEvent extends Model
145
163
  */
146
164
  public function getActivitylogOptions(): LogOptions
147
165
  {
148
- return LogOptions::defaults()->logAll();
166
+ return LogOptions::defaults()
167
+ ->logOnly([
168
+ 'company_uuid',
169
+ 'device_uuid',
170
+ 'event_type',
171
+ 'severity',
172
+ 'message',
173
+ 'ident',
174
+ 'protocol',
175
+ 'provider',
176
+ 'mileage',
177
+ 'state',
178
+ 'code',
179
+ 'reason',
180
+ 'comment',
181
+ 'resolved_at',
182
+ 'occurred_at',
183
+ 'processed_at',
184
+ ])
185
+ ->logOnlyDirty();
149
186
  }
150
187
 
151
188
  public function company(): BelongsTo
@@ -220,7 +220,8 @@ class Driver extends Model
220
220
  {
221
221
  return SlugOptions::create()
222
222
  ->generateSlugsFrom('drivers_license_number')
223
- ->saveSlugsTo('slug');
223
+ ->saveSlugsTo('slug')
224
+ ->doNotGenerateSlugsOnUpdate();
224
225
  }
225
226
 
226
227
  /**
@@ -155,7 +155,8 @@ class Equipment extends Model
155
155
  {
156
156
  return SlugOptions::create()
157
157
  ->generateSlugsFrom(['name', 'code'])
158
- ->saveSlugsTo('slug');
158
+ ->saveSlugsTo('slug')
159
+ ->doNotGenerateSlugsOnUpdate();
159
160
  }
160
161
 
161
162
  /**
@@ -66,7 +66,8 @@ class Fleet extends Model
66
66
  {
67
67
  return SlugOptions::create()
68
68
  ->generateSlugsFrom('name')
69
- ->saveSlugsTo('slug');
69
+ ->saveSlugsTo('slug')
70
+ ->doNotGenerateSlugsOnUpdate();
70
71
  }
71
72
 
72
73
  /**
@@ -0,0 +1,60 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\Models\Model;
7
+ use Fleetbase\Traits\HasApiModelBehavior;
8
+ use Fleetbase\Traits\HasPublicId;
9
+ use Fleetbase\Traits\HasUuid;
10
+ use Fleetbase\Traits\Searchable;
11
+ use Fleetbase\Traits\TracksApiCredential;
12
+ use Illuminate\Database\Eloquent\Relations\HasMany;
13
+
14
+ class FuelProviderConnection extends Model
15
+ {
16
+ use HasUuid;
17
+ use HasPublicId;
18
+ use TracksApiCredential;
19
+ use HasApiModelBehavior;
20
+ use Searchable;
21
+
22
+ protected $table = 'fuel_provider_connections';
23
+ protected $publicIdType = 'fuel_provider_connection';
24
+ protected $searchableColumns = ['public_id', 'name', 'provider', 'status', 'environment'];
25
+ protected $filterParams = ['provider', 'status', 'environment'];
26
+
27
+ protected $fillable = [
28
+ 'company_uuid',
29
+ 'provider',
30
+ 'name',
31
+ 'environment',
32
+ 'status',
33
+ 'credentials',
34
+ 'sync_settings',
35
+ 'last_sync_state',
36
+ 'last_synced_at',
37
+ 'last_tested_at',
38
+ 'last_error',
39
+ 'meta',
40
+ ];
41
+
42
+ protected $casts = [
43
+ 'credentials' => Json::class,
44
+ 'sync_settings' => Json::class,
45
+ 'last_sync_state' => Json::class,
46
+ 'last_synced_at' => 'datetime',
47
+ 'last_tested_at' => 'datetime',
48
+ 'meta' => Json::class,
49
+ ];
50
+
51
+ public function transactions(): HasMany
52
+ {
53
+ return $this->hasMany(FuelProviderTransaction::class, 'fuel_provider_connection_uuid', 'uuid');
54
+ }
55
+
56
+ public function syncRuns(): HasMany
57
+ {
58
+ return $this->hasMany(FuelProviderSyncRun::class, 'fuel_provider_connection_uuid', 'uuid');
59
+ }
60
+ }
@@ -0,0 +1,58 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\Models\Model;
7
+ use Fleetbase\Traits\HasApiModelBehavior;
8
+ use Fleetbase\Traits\HasPublicId;
9
+ use Fleetbase\Traits\HasUuid;
10
+ use Fleetbase\Traits\Searchable;
11
+ use Illuminate\Database\Eloquent\Relations\BelongsTo;
12
+
13
+ class FuelProviderSyncRun extends Model
14
+ {
15
+ use HasUuid;
16
+ use HasPublicId;
17
+ use HasApiModelBehavior;
18
+ use Searchable;
19
+
20
+ protected $table = 'fuel_provider_sync_runs';
21
+ protected $publicIdType = 'fuel_provider_sync_run';
22
+ protected $searchableColumns = ['public_id', 'provider', 'status'];
23
+ protected $filterParams = ['provider', 'status', 'connection'];
24
+
25
+ protected $fillable = [
26
+ 'company_uuid',
27
+ 'fuel_provider_connection_uuid',
28
+ 'provider',
29
+ 'status',
30
+ 'from',
31
+ 'to',
32
+ 'imported',
33
+ 'matched',
34
+ 'unmatched',
35
+ 'fuel_reports_created',
36
+ 'liters',
37
+ 'amount',
38
+ 'started_at',
39
+ 'finished_at',
40
+ 'error',
41
+ 'summary',
42
+ 'meta',
43
+ ];
44
+
45
+ protected $casts = [
46
+ 'from' => 'datetime',
47
+ 'to' => 'datetime',
48
+ 'started_at' => 'datetime',
49
+ 'finished_at' => 'datetime',
50
+ 'summary' => Json::class,
51
+ 'meta' => Json::class,
52
+ ];
53
+
54
+ public function connection(): BelongsTo
55
+ {
56
+ return $this->belongsTo(FuelProviderConnection::class, 'fuel_provider_connection_uuid', 'uuid');
57
+ }
58
+ }
@@ -0,0 +1,119 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\LaravelMysqlSpatial\Types\Point;
7
+ use Fleetbase\Models\Model;
8
+ use Fleetbase\Traits\HasApiModelBehavior;
9
+ use Fleetbase\Traits\HasPublicId;
10
+ use Fleetbase\Traits\HasUuid;
11
+ use Fleetbase\Traits\Searchable;
12
+ use Illuminate\Database\Eloquent\Relations\BelongsTo;
13
+
14
+ class FuelProviderTransaction extends Model
15
+ {
16
+ use HasUuid;
17
+ use HasPublicId;
18
+ use HasApiModelBehavior;
19
+ use Searchable;
20
+
21
+ protected $table = 'fuel_provider_transactions';
22
+ protected $publicIdType = 'fuel_provider_transaction';
23
+ protected $searchableColumns = ['public_id', 'provider', 'provider_transaction_id', 'vehicle_card_id', 'internal_number', 'plate_number', 'vin', 'serial_number', 'call_sign', 'station_name', 'trip_number'];
24
+ protected $filterParams = ['provider', 'sync_status', 'vehicle', 'driver', 'order', 'fuel_report', 'connection'];
25
+
26
+ protected $fillable = [
27
+ 'company_uuid',
28
+ 'fuel_provider_connection_uuid',
29
+ 'fuel_report_uuid',
30
+ 'vehicle_uuid',
31
+ 'driver_uuid',
32
+ 'order_uuid',
33
+ 'provider',
34
+ 'provider_transaction_id',
35
+ 'provider_vehicle_id',
36
+ 'vehicle_card_id',
37
+ 'internal_number',
38
+ 'structure_number',
39
+ 'plate_number',
40
+ 'vin',
41
+ 'serial_number',
42
+ 'call_sign',
43
+ 'trip_number',
44
+ 'station_name',
45
+ 'station_latitude',
46
+ 'station_longitude',
47
+ 'transaction_at',
48
+ 'volume',
49
+ 'metric_unit',
50
+ 'amount',
51
+ 'currency',
52
+ 'odometer',
53
+ 'sync_status',
54
+ 'matched_at',
55
+ 'normalized_payload',
56
+ 'raw_payload',
57
+ 'meta',
58
+ ];
59
+
60
+ protected $casts = [
61
+ 'transaction_at' => 'datetime',
62
+ 'matched_at' => 'datetime',
63
+ 'normalized_payload' => Json::class,
64
+ 'raw_payload' => Json::class,
65
+ 'meta' => Json::class,
66
+ ];
67
+
68
+ protected $appends = ['vehicle_name', 'driver_name', 'fuel_report_id', 'station_location'];
69
+ protected $hidden = ['vehicle', 'driver', 'fuelReport'];
70
+
71
+ public function connection(): BelongsTo
72
+ {
73
+ return $this->belongsTo(FuelProviderConnection::class, 'fuel_provider_connection_uuid', 'uuid');
74
+ }
75
+
76
+ public function fuelReport(): BelongsTo
77
+ {
78
+ return $this->belongsTo(FuelReport::class, 'fuel_report_uuid', 'uuid');
79
+ }
80
+
81
+ public function vehicle(): BelongsTo
82
+ {
83
+ return $this->belongsTo(Vehicle::class, 'vehicle_uuid', 'uuid');
84
+ }
85
+
86
+ public function driver(): BelongsTo
87
+ {
88
+ return $this->belongsTo(Driver::class, 'driver_uuid', 'uuid');
89
+ }
90
+
91
+ public function order(): BelongsTo
92
+ {
93
+ return $this->belongsTo(Order::class, 'order_uuid', 'uuid');
94
+ }
95
+
96
+ public function getVehicleNameAttribute(): ?string
97
+ {
98
+ return data_get($this, 'vehicle.display_name');
99
+ }
100
+
101
+ public function getDriverNameAttribute(): ?string
102
+ {
103
+ return data_get($this, 'driver.name');
104
+ }
105
+
106
+ public function getFuelReportIdAttribute(): ?string
107
+ {
108
+ return data_get($this, 'fuelReport.public_id');
109
+ }
110
+
111
+ public function getStationLocationAttribute(): ?Point
112
+ {
113
+ if (!$this->station_latitude || !$this->station_longitude) {
114
+ return null;
115
+ }
116
+
117
+ return new Point($this->station_latitude, $this->station_longitude);
118
+ }
119
+ }
@@ -91,7 +91,7 @@ class FuelReport extends Model
91
91
  *
92
92
  * @var array
93
93
  */
94
- protected $appends = ['vehicle_name', 'driver_name', 'reporter_name'];
94
+ protected $appends = ['vehicle_name', 'driver_name', 'reporter_name', 'source', 'provider', 'fuel_provider_transaction_uuid'];
95
95
 
96
96
  /**
97
97
  * The attributes excluded from the model's JSON form.
@@ -179,6 +179,21 @@ class FuelReport extends Model
179
179
  return data_get($this, 'reportedBy.name');
180
180
  }
181
181
 
182
+ public function getSourceAttribute(): ?string
183
+ {
184
+ return data_get($this, 'meta.source');
185
+ }
186
+
187
+ public function getProviderAttribute(): ?string
188
+ {
189
+ return data_get($this, 'meta.provider');
190
+ }
191
+
192
+ public function getFuelProviderTransactionUuidAttribute(): ?string
193
+ {
194
+ return data_get($this, 'meta.fuel_provider_transaction_uuid');
195
+ }
196
+
182
197
  public static function createFromImport(array $row, bool $saveInstance = false): FuelReport
183
198
  {
184
199
  // Filter array for null key values