@fleetbase/fleetops-engine 0.6.51 → 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 (360) hide show
  1. package/README.md +0 -2
  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/device/manager.hbs +5 -6
  7. package/addon/components/device/manager.js +12 -15
  8. package/addon/components/driver/details.hbs +1 -1
  9. package/addon/components/fleet/vehicle-listing.js +1 -0
  10. package/addon/components/fuel-integration/form.hbs +200 -0
  11. package/addon/components/fuel-integration/form.js +242 -0
  12. package/addon/components/fuel-integration/hub.hbs +154 -0
  13. package/addon/components/fuel-integration/hub.js +165 -0
  14. package/addon/components/fuel-integration/matching-priority.hbs +76 -0
  15. package/addon/components/fuel-integration/matching-priority.js +145 -0
  16. package/addon/components/fuel-report/details.hbs +13 -1
  17. package/addon/components/issue/details.hbs +3 -57
  18. package/addon/components/issue/details.js +0 -96
  19. package/addon/components/layout/fleet-ops-sidebar.js +20 -2
  20. package/addon/components/map/drawer/device-event-listing.hbs +12 -2
  21. package/addon/components/map/drawer/driver-listing.hbs +14 -1
  22. package/addon/components/map/drawer/place-listing.hbs +14 -1
  23. package/addon/components/map/drawer/position-listing.hbs +12 -2
  24. package/addon/components/map/drawer/vehicle-listing.hbs +14 -1
  25. package/addon/components/modals/assigned-orders.hbs +40 -0
  26. package/addon/components/modals/attach-device.hbs +4 -3
  27. package/addon/components/modals/attach-telematic-device.hbs +25 -0
  28. package/addon/components/modals/attach-telematic-device.js +3 -0
  29. package/addon/components/modals/driver-assign-order.hbs +7 -58
  30. package/addon/components/modals/driver-assign-vehicle.hbs +10 -2
  31. package/addon/components/modals/fleet-assign-driver.hbs +18 -0
  32. package/addon/components/modals/fleet-assign-driver.js +3 -0
  33. package/addon/components/modals/fleet-assign-vehicle.hbs +18 -0
  34. package/addon/components/modals/fleet-assign-vehicle.js +3 -0
  35. package/addon/components/modals/telematic-connection-diagnostics.hbs +75 -0
  36. package/addon/components/modals/telematic-connection-diagnostics.js +287 -0
  37. package/addon/components/modals/vehicle-details.hbs +6 -1
  38. package/addon/components/modals/vehicle-form.hbs +8 -1
  39. package/addon/components/order/card.hbs +106 -0
  40. package/addon/components/order/card.js +257 -0
  41. package/addon/components/order/form/service-rate.hbs +2 -0
  42. package/addon/components/service-rate/form.hbs +3 -2
  43. package/addon/components/telematic/details.hbs +98 -87
  44. package/addon/components/telematic/details.js +230 -1
  45. package/addon/components/telematic/form.hbs +303 -72
  46. package/addon/components/telematic/form.js +519 -3
  47. package/addon/components/telematic/hub.hbs +149 -0
  48. package/addon/components/telematic/hub.js +142 -0
  49. package/addon/components/telematic/settings.hbs +152 -0
  50. package/addon/components/telematic/settings.js +45 -0
  51. package/addon/components/telematic/tab-empty-state.hbs +29 -0
  52. package/addon/components/telematic/tab-empty-state.js +33 -0
  53. package/addon/components/vehicle/details.hbs +6 -1
  54. package/addon/components/vehicle/form.hbs +2 -1
  55. package/addon/components/widget/fuel-providers.hbs +43 -0
  56. package/addon/components/widget/fuel-providers.js +27 -0
  57. package/addon/controllers/connectivity/devices/index/details.js +27 -1
  58. package/addon/controllers/connectivity/devices/index.js +14 -0
  59. package/addon/controllers/connectivity/fuel-providers/details/sync.js +18 -0
  60. package/addon/controllers/connectivity/fuel-providers/details/transactions.js +24 -0
  61. package/addon/controllers/connectivity/fuel-providers/details.js +69 -0
  62. package/addon/controllers/connectivity/fuel-providers/edit.js +24 -0
  63. package/addon/controllers/connectivity/fuel-providers/index.js +177 -0
  64. package/addon/controllers/connectivity/fuel-providers/new.js +37 -0
  65. package/addon/controllers/connectivity/telematics/details/attachments.js +247 -0
  66. package/addon/controllers/connectivity/telematics/details/devices.js +368 -0
  67. package/addon/controllers/connectivity/telematics/details/events.js +244 -0
  68. package/addon/controllers/connectivity/telematics/details/index.js +3 -0
  69. package/addon/controllers/connectivity/telematics/details/logs.js +43 -0
  70. package/addon/controllers/connectivity/telematics/details/sensors.js +270 -0
  71. package/addon/controllers/connectivity/telematics/details.js +149 -0
  72. package/addon/controllers/connectivity/telematics/{index/edit.js → edit.js} +15 -4
  73. package/addon/controllers/connectivity/telematics/index.js +25 -5
  74. package/addon/controllers/connectivity/telematics/{index/new.js → new.js} +8 -2
  75. package/addon/controllers/management/drivers/index/details.js +78 -1
  76. package/addon/controllers/management/drivers/index.js +39 -0
  77. package/addon/controllers/management/fleets/index/details.js +23 -1
  78. package/addon/controllers/management/fleets/index.js +6 -1
  79. package/addon/controllers/management/fuel-reports/index.js +37 -1
  80. package/addon/controllers/management/fuel-transactions/index/details.js +70 -0
  81. package/addon/controllers/management/fuel-transactions/index.js +240 -0
  82. package/addon/controllers/management/vehicles/index/details.js +32 -0
  83. package/addon/controllers/management/vehicles/index.js +26 -0
  84. package/addon/controllers/operations/orders/index.js +4 -0
  85. package/addon/controllers/settings/payments/index.js +5 -0
  86. package/addon/extension.js +10 -0
  87. package/addon/routes/connectivity/fuel-providers/details/index.js +7 -0
  88. package/addon/routes/connectivity/fuel-providers/details/matching.js +7 -0
  89. package/addon/routes/connectivity/fuel-providers/details/settings.js +7 -0
  90. package/addon/routes/connectivity/fuel-providers/details/sync.js +18 -0
  91. package/addon/routes/connectivity/fuel-providers/details/transactions.js +14 -0
  92. package/addon/routes/connectivity/fuel-providers/details.js +18 -0
  93. package/addon/routes/connectivity/fuel-providers/edit.js +18 -0
  94. package/addon/routes/connectivity/fuel-providers/index.js +20 -0
  95. package/addon/routes/connectivity/fuel-providers/new.js +3 -0
  96. package/addon/routes/connectivity/fuel-providers.js +3 -0
  97. package/addon/routes/connectivity/telematics/details/attachments.js +28 -0
  98. package/addon/routes/connectivity/telematics/details/devices.js +30 -0
  99. package/addon/routes/connectivity/telematics/details/events.js +33 -0
  100. package/addon/routes/connectivity/telematics/details/index.js +3 -0
  101. package/addon/routes/connectivity/telematics/details/logs.js +17 -0
  102. package/addon/routes/connectivity/telematics/details/sensors.js +29 -0
  103. package/addon/routes/connectivity/telematics/{index/details.js → details.js} +1 -1
  104. package/addon/routes/connectivity/telematics/{index/edit.js → edit.js} +1 -1
  105. package/addon/routes/connectivity/telematics/new.js +3 -0
  106. package/addon/routes/management/drivers/index/details/activity.js +3 -0
  107. package/addon/routes/management/fuel-reports/index.js +2 -0
  108. package/addon/routes/management/fuel-transactions/index/details.js +18 -0
  109. package/addon/routes/management/fuel-transactions/index.js +21 -0
  110. package/addon/routes/management/fuel-transactions.js +3 -0
  111. package/addon/routes.js +28 -9
  112. package/addon/services/device-actions.js +64 -1
  113. package/addon/services/device-event-actions.js +12 -1
  114. package/addon/services/driver-actions.js +147 -11
  115. package/addon/services/fleet-actions.js +66 -1
  116. package/addon/services/fuel-integration-actions.js +31 -0
  117. package/addon/services/issue-actions.js +1 -1
  118. package/addon/services/telematic-actions.js +9 -3
  119. package/addon/services/vehicle-actions.js +125 -0
  120. package/addon/styles/fleetops-engine.css +310 -34
  121. package/addon/templates/analytics/reports/index.hbs +19 -1
  122. package/addon/templates/connectivity/devices/index.hbs +19 -1
  123. package/addon/templates/connectivity/events/index.hbs +16 -1
  124. package/addon/templates/connectivity/fuel-providers/details/index.hbs +38 -0
  125. package/addon/templates/connectivity/fuel-providers/details/matching.hbs +13 -0
  126. package/addon/templates/connectivity/fuel-providers/details/settings.hbs +11 -0
  127. package/addon/templates/connectivity/fuel-providers/details/sync.hbs +48 -0
  128. package/addon/templates/connectivity/fuel-providers/details/transactions.hbs +21 -0
  129. package/addon/templates/connectivity/fuel-providers/details.hbs +51 -0
  130. package/addon/templates/connectivity/fuel-providers/edit.hbs +24 -0
  131. package/addon/templates/connectivity/fuel-providers/index.hbs +12 -0
  132. package/addon/templates/connectivity/fuel-providers/new.hbs +22 -0
  133. package/addon/templates/connectivity/fuel-providers.hbs +1 -0
  134. package/addon/templates/connectivity/sensors/index.hbs +19 -1
  135. package/addon/templates/connectivity/telematics/details/attachments.hbs +163 -0
  136. package/addon/templates/connectivity/telematics/details/devices.hbs +88 -0
  137. package/addon/templates/connectivity/telematics/details/events.hbs +101 -0
  138. package/addon/templates/connectivity/telematics/{index/details → details}/index.hbs +0 -1
  139. package/addon/templates/connectivity/telematics/details/logs.hbs +69 -0
  140. package/addon/templates/connectivity/telematics/details/sensors.hbs +88 -0
  141. package/addon/templates/connectivity/telematics/details.hbs +53 -0
  142. package/addon/templates/connectivity/telematics/edit.hbs +27 -0
  143. package/addon/templates/connectivity/telematics/index.hbs +6 -8
  144. package/addon/templates/connectivity/telematics/new.hbs +24 -0
  145. package/addon/templates/maintenance/equipment/index.hbs +19 -1
  146. package/addon/templates/maintenance/maintenances/index.hbs +15 -1
  147. package/addon/templates/maintenance/parts/index.hbs +19 -1
  148. package/addon/templates/maintenance/schedules/index.hbs +19 -1
  149. package/addon/templates/maintenance/work-orders/index.hbs +19 -1
  150. package/addon/templates/management/contacts/customers.hbs +15 -1
  151. package/addon/templates/management/contacts/index.hbs +19 -1
  152. package/addon/templates/management/drivers/index/details/activity.hbs +1 -0
  153. package/addon/templates/management/drivers/index.hbs +19 -1
  154. package/addon/templates/management/fleets/index.hbs +19 -1
  155. package/addon/templates/management/fuel-reports/index.hbs +19 -1
  156. package/addon/templates/management/fuel-transactions/index/details.hbs +73 -0
  157. package/addon/templates/management/fuel-transactions/index.hbs +58 -0
  158. package/addon/templates/management/fuel-transactions.hbs +1 -0
  159. package/addon/templates/management/issues/index.hbs +19 -1
  160. package/addon/templates/management/places/index.hbs +19 -1
  161. package/addon/templates/management/vehicles/index.hbs +19 -1
  162. package/addon/templates/management/vendors/index.hbs +19 -1
  163. package/addon/templates/management/vendors/integrated.hbs +13 -1
  164. package/addon/templates/operations/orders/index.hbs +19 -1
  165. package/addon/templates/operations/service-rates/index.hbs +19 -1
  166. package/addon/templates/settings/payments/index.hbs +15 -1
  167. package/addon/utils/fleet-ops-options.js +3 -0
  168. package/app/components/cell/telematic-provider.js +1 -0
  169. package/app/components/cell/telematic-status.js +1 -0
  170. package/app/components/fuel-integration/form.js +1 -0
  171. package/app/components/fuel-integration/hub.js +1 -0
  172. package/app/components/fuel-integration/matching-priority.js +1 -0
  173. package/app/components/modals/assigned-orders.js +1 -0
  174. package/app/components/modals/attach-telematic-device.js +1 -0
  175. package/app/components/modals/fleet-assign-driver.js +1 -0
  176. package/app/components/modals/fleet-assign-vehicle.js +1 -0
  177. package/app/components/modals/telematic-connection-diagnostics.js +1 -0
  178. package/app/components/order/card.js +1 -0
  179. package/app/components/telematic/hub.js +1 -0
  180. package/app/components/telematic/settings.js +1 -0
  181. package/app/components/telematic/tab-empty-state.js +1 -0
  182. package/app/components/widget/fuel-providers.js +1 -0
  183. package/app/controllers/connectivity/fuel-providers/details/sync.js +1 -0
  184. package/app/controllers/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  185. package/app/controllers/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  186. package/app/controllers/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  187. package/app/controllers/connectivity/{telematics/index/details → fuel-providers}/index.js +1 -1
  188. package/app/controllers/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  189. package/app/controllers/connectivity/telematics/details/attachments.js +1 -0
  190. package/app/controllers/connectivity/telematics/details/devices.js +1 -0
  191. package/app/controllers/connectivity/telematics/details/events.js +1 -0
  192. package/app/controllers/connectivity/telematics/details/index.js +1 -0
  193. package/app/controllers/connectivity/telematics/details/logs.js +1 -0
  194. package/app/controllers/connectivity/telematics/details/sensors.js +1 -0
  195. package/app/controllers/connectivity/telematics/details.js +1 -0
  196. package/app/controllers/connectivity/telematics/edit.js +1 -0
  197. package/app/controllers/connectivity/telematics/new.js +1 -0
  198. package/app/controllers/management/fuel-transactions/index/details.js +1 -0
  199. package/app/controllers/management/fuel-transactions/index.js +1 -0
  200. package/app/routes/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  201. package/app/routes/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  202. package/app/routes/connectivity/fuel-providers/details/settings.js +1 -0
  203. package/app/routes/connectivity/fuel-providers/details/sync.js +1 -0
  204. package/app/routes/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  205. package/app/routes/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  206. package/app/routes/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  207. package/app/routes/connectivity/fuel-providers/index.js +1 -0
  208. package/app/routes/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  209. package/app/routes/connectivity/fuel-providers.js +1 -0
  210. package/app/routes/connectivity/telematics/details/attachments.js +1 -0
  211. package/app/routes/connectivity/telematics/details/devices.js +1 -0
  212. package/app/routes/connectivity/telematics/details/events.js +1 -0
  213. package/app/routes/connectivity/telematics/details/index.js +1 -0
  214. package/app/routes/connectivity/telematics/details/logs.js +1 -0
  215. package/app/routes/connectivity/telematics/details/sensors.js +1 -0
  216. package/app/routes/connectivity/telematics/details.js +1 -0
  217. package/app/routes/connectivity/telematics/edit.js +1 -0
  218. package/app/routes/connectivity/telematics/new.js +1 -0
  219. package/app/routes/management/drivers/index/details/activity.js +1 -0
  220. package/app/routes/management/fuel-transactions/index/details.js +1 -0
  221. package/app/routes/management/fuel-transactions/index.js +1 -0
  222. package/app/routes/management/fuel-transactions.js +1 -0
  223. package/app/services/fuel-integration-actions.js +1 -0
  224. package/app/templates/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
  225. package/app/templates/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
  226. package/app/templates/connectivity/fuel-providers/details/settings.js +1 -0
  227. package/app/templates/connectivity/fuel-providers/details/sync.js +1 -0
  228. package/app/templates/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
  229. package/app/templates/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
  230. package/app/templates/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
  231. package/app/templates/connectivity/fuel-providers/index.js +1 -0
  232. package/app/templates/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
  233. package/app/templates/connectivity/fuel-providers.js +1 -0
  234. package/app/templates/connectivity/telematics/details/attachments.js +1 -0
  235. package/app/templates/connectivity/telematics/details/devices.js +1 -0
  236. package/app/templates/connectivity/telematics/details/events.js +1 -0
  237. package/app/templates/connectivity/telematics/details/index.js +1 -0
  238. package/app/templates/connectivity/telematics/details/logs.js +1 -0
  239. package/app/templates/connectivity/telematics/details/sensors.js +1 -0
  240. package/app/templates/connectivity/telematics/details.js +1 -0
  241. package/app/templates/connectivity/telematics/edit.js +1 -0
  242. package/app/templates/connectivity/telematics/new.js +1 -0
  243. package/app/templates/management/drivers/index/details/activity.js +1 -0
  244. package/app/templates/management/fuel-transactions/index/details.js +1 -0
  245. package/app/templates/management/fuel-transactions/index.js +1 -0
  246. package/app/templates/management/fuel-transactions.js +1 -0
  247. package/assets/images/telematics/providers/afaqy.webp +0 -0
  248. package/assets/images/telematics/providers/default.webp +0 -0
  249. package/assets/images/telematics/providers/flespi.webp +0 -0
  250. package/assets/images/telematics/providers/geotab.webp +0 -0
  251. package/assets/images/telematics/providers/safee.webp +0 -0
  252. package/assets/images/telematics/providers/samsara.webp +0 -0
  253. package/composer.json +1 -1
  254. package/extension.json +1 -1
  255. package/package.json +4 -4
  256. package/server/config/fuel-providers.php +42 -0
  257. package/server/config/telematics.php +139 -130
  258. package/server/migrations/2026_06_06_000001_harden_device_events_telematics_contract.php +59 -0
  259. package/server/migrations/2026_06_08_000001_create_fuel_provider_connections_table.php +37 -0
  260. package/server/migrations/2026_06_08_000002_create_fuel_provider_transactions_table.php +53 -0
  261. package/server/migrations/2026_06_08_000003_create_fuel_provider_sync_runs_table.php +40 -0
  262. package/server/migrations/2026_06_10_000001_add_fuel_card_number_to_vehicles_table.php +25 -0
  263. package/server/migrations/2026_06_10_000002_add_vehicle_identity_columns_to_fuel_provider_transactions_table.php +39 -0
  264. package/server/src/Contracts/FuelProvider.php +30 -0
  265. package/server/src/Contracts/TelematicProviderDescriptor.php +3 -1
  266. package/server/src/Events/FuelProviderTransactionImported.php +17 -0
  267. package/server/src/Events/FuelProviderTransactionMatched.php +17 -0
  268. package/server/src/Events/FuelProviderTransactionUnmatched.php +17 -0
  269. package/server/src/Events/FuelReportCreatedFromProvider.php +18 -0
  270. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +6 -0
  271. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +76 -2
  272. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +44 -0
  273. package/server/src/Http/Controllers/Internal/v1/DriverController.php +158 -7
  274. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +124 -0
  275. package/server/src/Http/Controllers/Internal/v1/FuelProviderSyncRunController.php +10 -0
  276. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +76 -0
  277. package/server/src/Http/Controllers/Internal/v1/SensorController.php +1 -1
  278. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +178 -15
  279. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +165 -0
  280. package/server/src/Http/Controllers/TelematicWebhookController.php +103 -19
  281. package/server/src/Http/Filter/FuelProviderConnectionFilter.php +33 -0
  282. package/server/src/Http/Filter/FuelProviderSyncRunFilter.php +28 -0
  283. package/server/src/Http/Filter/FuelProviderTransactionFilter.php +59 -0
  284. package/server/src/Http/Filter/FuelReportFilter.php +10 -0
  285. package/server/src/Http/Resources/v1/Driver.php +15 -0
  286. package/server/src/Http/Resources/v1/FuelProviderConnection.php +30 -0
  287. package/server/src/Http/Resources/v1/FuelProviderSyncRun.php +36 -0
  288. package/server/src/Http/Resources/v1/FuelProviderTransaction.php +54 -0
  289. package/server/src/Http/Resources/v1/FuelReport.php +28 -22
  290. package/server/src/Http/Resources/v1/Index/Driver.php +26 -20
  291. package/server/src/Http/Resources/v1/Index/Vehicle.php +29 -22
  292. package/server/src/Http/Resources/v1/Vehicle.php +17 -0
  293. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +2 -0
  294. package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +57 -0
  295. package/server/src/Jobs/SyncTelematicDevicesJob.php +36 -6
  296. package/server/src/Jobs/TestTelematicConnectionJob.php +9 -22
  297. package/server/src/Models/Asset.php +2 -1
  298. package/server/src/Models/Contact.php +2 -1
  299. package/server/src/Models/Device.php +27 -4
  300. package/server/src/Models/DeviceEvent.php +40 -3
  301. package/server/src/Models/Driver.php +2 -1
  302. package/server/src/Models/Equipment.php +2 -1
  303. package/server/src/Models/Fleet.php +2 -1
  304. package/server/src/Models/FuelProviderConnection.php +60 -0
  305. package/server/src/Models/FuelProviderSyncRun.php +58 -0
  306. package/server/src/Models/FuelProviderTransaction.php +119 -0
  307. package/server/src/Models/FuelReport.php +16 -1
  308. package/server/src/Models/Part.php +2 -1
  309. package/server/src/Models/Sensor.php +21 -4
  310. package/server/src/Models/ServiceRate.php +39 -2
  311. package/server/src/Models/Vehicle.php +14 -2
  312. package/server/src/Models/Vendor.php +2 -1
  313. package/server/src/Providers/FleetOpsServiceProvider.php +10 -0
  314. package/server/src/Support/Analytics/FuelProviderSummary.php +42 -0
  315. package/server/src/Support/FuelProviders/FuelProviderDescriptor.php +55 -0
  316. package/server/src/Support/FuelProviders/FuelProviderRegistry.php +75 -0
  317. package/server/src/Support/FuelProviders/FuelProviderService.php +447 -0
  318. package/server/src/Support/FuelProviders/Providers/AbstractFuelProvider.php +98 -0
  319. package/server/src/Support/FuelProviders/Providers/PetroAppFuelProvider.php +167 -0
  320. package/server/src/Support/Telematics/Providers/AbstractProvider.php +27 -6
  321. package/server/src/Support/Telematics/Providers/AfaqyProvider.php +55 -26
  322. package/server/src/Support/Telematics/Providers/FlespiProvider.php +1 -0
  323. package/server/src/Support/Telematics/Providers/GeotabProvider.php +1 -0
  324. package/server/src/Support/Telematics/Providers/SafeeProvider.php +32 -22
  325. package/server/src/Support/Telematics/Providers/SamsaraProvider.php +3 -1
  326. package/server/src/Support/Telematics/TelematicService.php +340 -21
  327. package/server/src/routes.php +41 -4
  328. package/server/tests/FuelProviderRegistryTest.php +416 -0
  329. package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +44 -0
  330. package/server/tests/TelematicsHardeningTest.php +268 -0
  331. package/server/tests/VehicleDriverAssignmentTest.php +51 -0
  332. package/translations/ar-ae.yml +22 -0
  333. package/translations/bg-bg.yaml +72 -0
  334. package/translations/en-us.yaml +83 -0
  335. package/translations/es-pa.yaml +72 -0
  336. package/translations/fr-fr.yaml +72 -0
  337. package/translations/mn-mn.yaml +72 -0
  338. package/translations/pt-br.yaml +72 -0
  339. package/translations/ru-ru.yaml +72 -0
  340. package/translations/vi-vn.yaml +97 -0
  341. package/addon/controllers/connectivity/telematics/index/details/devices.js +0 -3
  342. package/addon/controllers/connectivity/telematics/index/details/events.js +0 -3
  343. package/addon/controllers/connectivity/telematics/index/details/index.js +0 -3
  344. package/addon/controllers/connectivity/telematics/index/details/sensors.js +0 -3
  345. package/addon/controllers/connectivity/telematics/index/details.js +0 -24
  346. package/addon/routes/connectivity/telematics/index/details/devices.js +0 -3
  347. package/addon/routes/connectivity/telematics/index/details/events.js +0 -3
  348. package/addon/routes/connectivity/telematics/index/details/index.js +0 -3
  349. package/addon/routes/connectivity/telematics/index/details/sensors.js +0 -3
  350. package/addon/routes/connectivity/telematics/index/new.js +0 -3
  351. package/addon/templates/connectivity/telematics/index/details/devices.hbs +0 -1
  352. package/addon/templates/connectivity/telematics/index/details/events.hbs +0 -1
  353. package/addon/templates/connectivity/telematics/index/details/sensors.hbs +0 -1
  354. package/addon/templates/connectivity/telematics/index/details.hbs +0 -14
  355. package/addon/templates/connectivity/telematics/index/edit.hbs +0 -12
  356. package/addon/templates/connectivity/telematics/index/new.hbs +0 -12
  357. package/app/controllers/connectivity/telematics/index/details/events.js +0 -1
  358. package/app/controllers/connectivity/telematics/index/details/sensors.js +0 -1
  359. package/app/routes/connectivity/telematics/index/details/sensors.js +0 -1
  360. package/app/templates/connectivity/telematics/index/details/sensors.js +0 -1
@@ -3,12 +3,13 @@
3
3
  namespace Fleetbase\FleetOps\Jobs;
4
4
 
5
5
  use Fleetbase\FleetOps\Models\Telematic;
6
+ use Fleetbase\FleetOps\Support\Telematics\TelematicProviderRegistry;
7
+ use Fleetbase\FleetOps\Support\Telematics\TelematicService;
6
8
  use Illuminate\Bus\Queueable;
7
9
  use Illuminate\Contracts\Queue\ShouldQueue;
8
10
  use Illuminate\Foundation\Bus\Dispatchable;
9
11
  use Illuminate\Queue\InteractsWithQueue;
10
12
  use Illuminate\Queue\SerializesModels;
11
- use Illuminate\Support\Facades\Crypt;
12
13
  use Illuminate\Support\Facades\Log;
13
14
  use Illuminate\Support\Str;
14
15
 
@@ -25,22 +26,23 @@ class TestTelematicConnectionJob implements ShouldQueue
25
26
  use SerializesModels;
26
27
 
27
28
  public Telematic $telematic;
29
+ public string $jobId;
28
30
  public int $tries = 1;
29
31
  public int $timeout = 30;
30
32
 
31
33
  /**
32
34
  * Create a new job instance.
33
35
  */
34
- public function __construct(Telematic $telematic)
36
+ public function __construct(Telematic $telematic, ?string $jobId = null)
35
37
  {
36
38
  $this->telematic = $telematic;
37
- $this->queue = 'telematics-priority';
39
+ $this->jobId = $jobId ?? Str::uuid()->toString();
38
40
  }
39
41
 
40
42
  /**
41
43
  * Execute the job.
42
44
  */
43
- public function handle(ProviderRegistry $registry): void
45
+ public function handle(TelematicProviderRegistry $registry, TelematicService $service): void
44
46
  {
45
47
  $correlationId = Str::uuid()->toString();
46
48
 
@@ -52,26 +54,11 @@ class TestTelematicConnectionJob implements ShouldQueue
52
54
 
53
55
  try {
54
56
  $provider = $registry->resolve($this->telematic->provider);
55
- $credentials = json_decode(Crypt::decryptString($this->telematic->credentials), true);
57
+ $credentials = $service->getCredentials($this->telematic);
56
58
 
57
59
  $result = $provider->testConnection($credentials);
58
60
 
59
- if ($result['success']) {
60
- $this->telematic->status = 'active';
61
- $this->telematic->meta = array_merge($this->telematic->meta ?? [], [
62
- 'last_connection_test' => now()->toDateTimeString(),
63
- 'last_test_result' => 'success',
64
- ]);
65
- } else {
66
- $this->telematic->status = 'error';
67
- $this->telematic->meta = array_merge($this->telematic->meta ?? [], [
68
- 'last_connection_test' => now()->toDateTimeString(),
69
- 'last_test_result' => 'failed',
70
- 'last_error' => $result['message'],
71
- ]);
72
- }
73
-
74
- $this->telematic->save();
61
+ $service->recordConnectionTest($this->telematic, $result);
75
62
 
76
63
  Log::info('Connection test completed', [
77
64
  'correlation_id' => $correlationId,
@@ -97,6 +84,6 @@ class TestTelematicConnectionJob implements ShouldQueue
97
84
  */
98
85
  public function getJobId(): string
99
86
  {
100
- return $this->job->getJobId() ?? Str::uuid()->toString();
87
+ return $this->jobId;
101
88
  }
102
89
  }
@@ -197,7 +197,8 @@ class Asset extends Model
197
197
  {
198
198
  return SlugOptions::create()
199
199
  ->generateSlugsFrom(['name', 'code'])
200
- ->saveSlugsTo('slug');
200
+ ->saveSlugsTo('slug')
201
+ ->doNotGenerateSlugsOnUpdate();
201
202
  }
202
203
 
203
204
  /**
@@ -143,7 +143,8 @@ class Contact extends Model
143
143
  {
144
144
  return SlugOptions::create()
145
145
  ->generateSlugsFrom('name')
146
- ->saveSlugsTo('slug');
146
+ ->saveSlugsTo('slug')
147
+ ->doNotGenerateSlugsOnUpdate();
147
148
  }
148
149
 
149
150
  public function company(): BelongsTo
@@ -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
@@ -165,7 +165,8 @@ class Part extends Model
165
165
  {
166
166
  return SlugOptions::create()
167
167
  ->generateSlugsFrom(['name', 'sku'])
168
- ->saveSlugsTo('slug');
168
+ ->saveSlugsTo('slug')
169
+ ->doNotGenerateSlugsOnUpdate();
169
170
  }
170
171
 
171
172
  /**
@@ -66,14 +66,14 @@ class Sensor extends Model
66
66
  *
67
67
  * @var array
68
68
  */
69
- protected $searchableColumns = ['name', 'sensor_type', 'unit', 'public_id'];
69
+ protected $searchableColumns = ['name', 'type', 'internal_id', 'unit', 'public_id'];
70
70
 
71
71
  /**
72
72
  * The attributes that can be used for filtering.
73
73
  *
74
74
  * @var array
75
75
  */
76
- protected $filterParams = ['sensor_type', 'status', 'device_uuid', 'warranty_uuid', 'sensorable_type'];
76
+ protected $filterParams = ['type', 'sensor_type', 'status', 'device_uuid', 'warranty_uuid', 'sensorable_type', 'telematic_uuid'];
77
77
 
78
78
  /**
79
79
  * The attributes that are mass assignable.
@@ -178,7 +178,8 @@ class Sensor extends Model
178
178
  {
179
179
  return SlugOptions::create()
180
180
  ->generateSlugsFrom(['name', 'sensor_type'])
181
- ->saveSlugsTo('slug');
181
+ ->saveSlugsTo('slug')
182
+ ->doNotGenerateSlugsOnUpdate();
182
183
  }
183
184
 
184
185
  /**
@@ -186,7 +187,23 @@ class Sensor extends Model
186
187
  */
187
188
  public function getActivitylogOptions(): LogOptions
188
189
  {
189
- return LogOptions::defaults()->logAll();
190
+ return LogOptions::defaults()
191
+ ->logOnly([
192
+ 'company_uuid',
193
+ 'telematic_uuid',
194
+ 'device_uuid',
195
+ 'sensorable_uuid',
196
+ 'sensorable_type',
197
+ 'type',
198
+ 'sensor_type',
199
+ 'internal_id',
200
+ 'name',
201
+ 'unit',
202
+ 'last_value',
203
+ 'last_reading_at',
204
+ 'status',
205
+ ])
206
+ ->logOnlyDirty();
190
207
  }
191
208
 
192
209
  public function telematic(): BelongsTo