@fleetbase/fleetops-engine 0.6.57 → 0.6.59

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 (693) hide show
  1. package/README.md +3 -0
  2. package/addon/components/customer/form.hbs +0 -49
  3. package/addon/components/entity/card.hbs +1 -0
  4. package/addon/components/modals/order-label.hbs +1 -1
  5. package/addon/components/place/form.hbs +1 -1
  6. package/addon/services/entity-actions.js +32 -0
  7. package/addon/styles/fleetops-engine.css +0 -1
  8. package/composer.json +15 -3
  9. package/extension.json +1 -1
  10. package/index.js +7 -1
  11. package/package.json +3 -2
  12. package/phpunit.xml.dist +4 -4
  13. package/pnpm-workspace.yaml +2 -1
  14. package/scripts/coverage-file-runner.php +240 -0
  15. package/scripts/coverage-runner.php +52 -0
  16. package/scripts/coverage-summary.php +149 -0
  17. package/scripts/pest-bootstrap.php +411 -0
  18. package/scripts/pest-file-runner.php +94 -0
  19. package/scripts/pest-runner.php +119 -0
  20. package/server/resources/views/labels/entity-label.php +4 -4
  21. package/server/src/Casts/MultiPolygon.php +8 -3
  22. package/server/src/Casts/OrderConfigEntities.php +10 -3
  23. package/server/src/Casts/Point.php +10 -6
  24. package/server/src/Casts/Polygon.php +5 -2
  25. package/server/src/Console/Commands/AssignCustomerRoles.php +28 -6
  26. package/server/src/Console/Commands/AssignDriverRoles.php +36 -6
  27. package/server/src/Console/Commands/AuditCustomerUserConflicts.php +6 -1
  28. package/server/src/Console/Commands/DispatchAdhocOrders.php +12 -2
  29. package/server/src/Console/Commands/FixCustomerCompanies.php +46 -11
  30. package/server/src/Console/Commands/FixDriverCompanies.php +18 -3
  31. package/server/src/Console/Commands/FixLegacyOrderConfigs.php +31 -6
  32. package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +94 -42
  33. package/server/src/Console/Commands/PurgeUnpurchasedServiceQuotes.php +42 -12
  34. package/server/src/Console/Commands/ReplayVehicleLocations.php +120 -55
  35. package/server/src/Console/Commands/SendDriverNotification.php +25 -4
  36. package/server/src/Console/Commands/SendMaintenanceReminders.php +43 -23
  37. package/server/src/Console/Commands/SimulateOrderRouteNavigation.php +36 -6
  38. package/server/src/Console/Commands/TrackOrderDistanceAndTime.php +6 -1
  39. package/server/src/Events/DriverLocationChanged.php +1 -1
  40. package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
  41. package/server/src/Events/EntityActivityChanged.php +1 -1
  42. package/server/src/Events/EntityCompleted.php +1 -1
  43. package/server/src/Events/EntityDriverAssigned.php +1 -1
  44. package/server/src/Events/FuelProviderTransactionImported.php +1 -1
  45. package/server/src/Events/FuelProviderTransactionMatched.php +1 -1
  46. package/server/src/Events/FuelProviderTransactionUnmatched.php +1 -1
  47. package/server/src/Events/FuelReportCreatedFromProvider.php +1 -1
  48. package/server/src/Events/GeofenceDwelled.php +1 -1
  49. package/server/src/Events/GeofenceEntered.php +1 -1
  50. package/server/src/Events/GeofenceExited.php +1 -1
  51. package/server/src/Events/VehicleLocationChanged.php +1 -1
  52. package/server/src/Events/WaypointActivityChanged.php +1 -1
  53. package/server/src/Events/WaypointCompleted.php +1 -1
  54. package/server/src/Exceptions/IntegratedVendorException.php +2 -2
  55. package/server/src/Exceptions/TelematicRateLimitExceededException.php +1 -1
  56. package/server/src/Http/Controllers/Api/v1/ContactController.php +89 -22
  57. package/server/src/Http/Controllers/Api/v1/CustomerController.php +296 -97
  58. package/server/src/Http/Controllers/Api/v1/DeviceController.php +48 -14
  59. package/server/src/Http/Controllers/Api/v1/DriverController.php +168 -63
  60. package/server/src/Http/Controllers/Api/v1/EntityController.php +112 -66
  61. package/server/src/Http/Controllers/Api/v1/EquipmentController.php +40 -10
  62. package/server/src/Http/Controllers/Api/v1/FleetController.php +54 -14
  63. package/server/src/Http/Controllers/Api/v1/FuelReportController.php +54 -14
  64. package/server/src/Http/Controllers/Api/v1/FuelTransactionController.php +36 -11
  65. package/server/src/Http/Controllers/Api/v1/GeofenceController.php +39 -21
  66. package/server/src/Http/Controllers/Api/v1/IssueController.php +54 -14
  67. package/server/src/Http/Controllers/Api/v1/LabelController.php +61 -22
  68. package/server/src/Http/Controllers/Api/v1/NavigatorController.php +21 -5
  69. package/server/src/Http/Controllers/Api/v1/OrderConfigController.php +35 -5
  70. package/server/src/Http/Controllers/Api/v1/OrderController.php +388 -203
  71. package/server/src/Http/Controllers/Api/v1/PartController.php +40 -10
  72. package/server/src/Http/Controllers/Api/v1/PayloadController.php +90 -30
  73. package/server/src/Http/Controllers/Api/v1/PlaceController.php +188 -91
  74. package/server/src/Http/Controllers/Api/v1/PurchaseRateController.php +100 -36
  75. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +96 -26
  76. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +169 -81
  77. package/server/src/Http/Controllers/Api/v1/ServiceRateController.php +104 -75
  78. package/server/src/Http/Controllers/Api/v1/TrackingNumberController.php +83 -14
  79. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +66 -16
  80. package/server/src/Http/Controllers/Api/v1/VehicleController.php +121 -67
  81. package/server/src/Http/Controllers/Api/v1/VendorController.php +54 -14
  82. package/server/src/Http/Controllers/Api/v1/WorkOrderController.php +47 -12
  83. package/server/src/Http/Controllers/Api/v1/ZoneController.php +84 -24
  84. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +15 -5
  85. package/server/src/Http/Controllers/Internal/v1/ContactController.php +113 -28
  86. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +36 -11
  87. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +9 -4
  88. package/server/src/Http/Controllers/Internal/v1/DriverController.php +167 -69
  89. package/server/src/Http/Controllers/Internal/v1/EquipmentController.php +18 -3
  90. package/server/src/Http/Controllers/Internal/v1/FleetController.php +137 -60
  91. package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +24 -9
  92. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +18 -3
  93. package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +26 -8
  94. package/server/src/Http/Controllers/Internal/v1/GettingStartedController.php +12 -2
  95. package/server/src/Http/Controllers/Internal/v1/IntegratedVendorController.php +27 -6
  96. package/server/src/Http/Controllers/Internal/v1/IssueController.php +82 -29
  97. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +34 -26
  98. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +141 -97
  99. package/server/src/Http/Controllers/Internal/v1/ManifestController.php +28 -8
  100. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +21 -12
  101. package/server/src/Http/Controllers/Internal/v1/MorphController.php +90 -18
  102. package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +88 -35
  103. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +149 -39
  104. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +54 -18
  105. package/server/src/Http/Controllers/Internal/v1/OrderController.php +298 -86
  106. package/server/src/Http/Controllers/Internal/v1/PartController.php +18 -3
  107. package/server/src/Http/Controllers/Internal/v1/PaymentController.php +46 -14
  108. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +31 -5
  109. package/server/src/Http/Controllers/Internal/v1/ProofController.php +88 -48
  110. package/server/src/Http/Controllers/Internal/v1/SearchController.php +1 -1
  111. package/server/src/Http/Controllers/Internal/v1/SensorController.php +6 -1
  112. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +6 -1
  113. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +255 -105
  114. package/server/src/Http/Controllers/Internal/v1/SettingController.php +88 -35
  115. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +1 -4
  116. package/server/src/Http/Controllers/Internal/v1/Traits/DriverSchedulingTrait.php +42 -14
  117. package/server/src/Http/Controllers/Internal/v1/VendorController.php +103 -33
  118. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +42 -12
  119. package/server/src/Http/Filter/DriverFilter.php +2 -2
  120. package/server/src/Http/Filter/OrderFilter.php +1 -1
  121. package/server/src/Http/Filter/VehicleFilter.php +21 -7
  122. package/server/src/Http/Middleware/AuthenticateCustomerToken.php +12 -2
  123. package/server/src/Http/Requests/BulkDispatchRequest.php +3 -9
  124. package/server/src/Http/Requests/CancelOrderRequest.php +2 -6
  125. package/server/src/Http/Requests/CreateContactRequest.php +2 -6
  126. package/server/src/Http/Requests/CreateDeviceRequest.php +2 -2
  127. package/server/src/Http/Requests/CreateDriverRequest.php +3 -9
  128. package/server/src/Http/Requests/CreateEntityRequest.php +2 -6
  129. package/server/src/Http/Requests/CreateEquipmentRequest.php +2 -2
  130. package/server/src/Http/Requests/CreateFleetRequest.php +2 -6
  131. package/server/src/Http/Requests/CreateFuelReportRequest.php +2 -6
  132. package/server/src/Http/Requests/CreateFuelTransactionRequest.php +2 -2
  133. package/server/src/Http/Requests/CreateIssueRequest.php +2 -6
  134. package/server/src/Http/Requests/CreateOrderRequest.php +7 -8
  135. package/server/src/Http/Requests/CreatePartRequest.php +2 -2
  136. package/server/src/Http/Requests/CreatePayloadRequest.php +7 -9
  137. package/server/src/Http/Requests/CreatePlaceRequest.php +2 -6
  138. package/server/src/Http/Requests/CreatePurchaseRateRequest.php +2 -6
  139. package/server/src/Http/Requests/CreateSensorRequest.php +2 -2
  140. package/server/src/Http/Requests/CreateServiceAreaRequest.php +2 -6
  141. package/server/src/Http/Requests/CreateServiceQuoteRequest.php +2 -6
  142. package/server/src/Http/Requests/CreateServiceRateRequest.php +2 -6
  143. package/server/src/Http/Requests/CreateTrackingNumberRequest.php +2 -6
  144. package/server/src/Http/Requests/CreateTrackingStatusRequest.php +2 -6
  145. package/server/src/Http/Requests/CreateVehicleRequest.php +2 -6
  146. package/server/src/Http/Requests/CreateVendorRequest.php +2 -6
  147. package/server/src/Http/Requests/CreateWorkOrderRequest.php +2 -2
  148. package/server/src/Http/Requests/CreateZoneRequest.php +2 -6
  149. package/server/src/Http/Requests/DecodeTrackingNumberQR.php +2 -6
  150. package/server/src/Http/Requests/DriverSimulationRequest.php +2 -6
  151. package/server/src/Http/Requests/Internal/AssignOrderRequest.php +3 -7
  152. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +4 -12
  153. package/server/src/Http/Requests/Internal/CreateOrderConfigRequest.php +2 -6
  154. package/server/src/Http/Requests/Internal/CreateOrderRequest.php +7 -8
  155. package/server/src/Http/Requests/Internal/FleetActionRequest.php +18 -12
  156. package/server/src/Http/Requests/Internal/UpdateDriverRequest.php +6 -3
  157. package/server/src/Http/Requests/QueryServiceQuotesRequest.php +2 -6
  158. package/server/src/Http/Requests/ScheduleOrderRequest.php +2 -6
  159. package/server/src/Http/Requests/UpdateIssueRequest.php +1 -3
  160. package/server/src/Http/Resources/v1/Customer.php +2 -2
  161. package/server/src/Http/Resources/v1/Maintenance.php +3 -4
  162. package/server/src/Http/Resources/v1/MaintenanceSchedule.php +3 -4
  163. package/server/src/Http/Resources/v1/Order.php +3 -7
  164. package/server/src/Http/Resources/v1/PurchaseRate.php +4 -6
  165. package/server/src/Http/Resources/v1/TrackingStatus.php +4 -6
  166. package/server/src/Http/Resources/v1/WorkOrder.php +3 -4
  167. package/server/src/Imports/ContactImport.php +10 -1
  168. package/server/src/Imports/DriverImport.php +10 -1
  169. package/server/src/Imports/EquipmentImport.php +6 -1
  170. package/server/src/Imports/FleetImport.php +10 -1
  171. package/server/src/Imports/FuelReportImport.php +10 -1
  172. package/server/src/Imports/IssueImport.php +10 -1
  173. package/server/src/Imports/MaintenanceImport.php +6 -1
  174. package/server/src/Imports/MaintenanceScheduleImport.php +6 -1
  175. package/server/src/Imports/PartImport.php +6 -1
  176. package/server/src/Imports/PlaceImport.php +10 -1
  177. package/server/src/Imports/VehicleImport.php +10 -1
  178. package/server/src/Imports/VendorImport.php +10 -1
  179. package/server/src/Imports/WorkOrderImport.php +6 -1
  180. package/server/src/Integrations/Lalamove/Lalamove.php +3 -7
  181. package/server/src/Integrations/Lalamove/LalamoveServiceType.php +5 -8
  182. package/server/src/Jobs/CheckGeofenceDwell.php +41 -16
  183. package/server/src/Jobs/FinalizeApiOrderCreation.php +17 -2
  184. package/server/src/Jobs/FinalizeInternalOrderCreation.php +11 -1
  185. package/server/src/Jobs/NotifyBulkAssignedDriver.php +29 -16
  186. package/server/src/Jobs/ProcessAllocationJob.php +59 -25
  187. package/server/src/Jobs/ReplayPositions.php +17 -10
  188. package/server/src/Jobs/SendPositionReplay.php +18 -7
  189. package/server/src/Jobs/SimulateDrivingRoute.php +14 -3
  190. package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +12 -2
  191. package/server/src/Listeners/HandleDeliveryCompletion.php +11 -1
  192. package/server/src/Listeners/HandleGeofenceDwelled.php +6 -1
  193. package/server/src/Listeners/HandleGeofenceEntered.php +4 -2
  194. package/server/src/Listeners/HandleGeofenceExited.php +6 -1
  195. package/server/src/Listeners/HandleOrderCanceled.php +18 -3
  196. package/server/src/Listeners/HandleOrderDispatchFailed.php +12 -2
  197. package/server/src/Listeners/HandleOrderDispatched.php +61 -26
  198. package/server/src/Listeners/HandleOrderDriverAssigned.php +12 -2
  199. package/server/src/Listeners/HandleUserRemovedFromCompany.php +19 -6
  200. package/server/src/Listeners/NotifyDriverOnShiftChange.php +24 -4
  201. package/server/src/Listeners/NotifyOrderEvent.php +11 -6
  202. package/server/src/Models/Contact.php +6 -7
  203. package/server/src/Models/Device.php +26 -3
  204. package/server/src/Models/Driver.php +0 -6
  205. package/server/src/Models/Entity.php +4 -4
  206. package/server/src/Models/Equipment.php +1 -1
  207. package/server/src/Models/FuelReport.php +5 -1
  208. package/server/src/Models/IntegratedVendor.php +2 -2
  209. package/server/src/Models/Issue.php +5 -1
  210. package/server/src/Models/MaintenanceSchedule.php +25 -10
  211. package/server/src/Models/Order.php +18 -15
  212. package/server/src/Models/OrderConfig.php +1 -1
  213. package/server/src/Models/Payload.php +9 -16
  214. package/server/src/Models/Place.php +20 -13
  215. package/server/src/Models/ServiceArea.php +3 -6
  216. package/server/src/Models/ServiceQuote.php +5 -0
  217. package/server/src/Models/ServiceRate.php +13 -6
  218. package/server/src/Models/Telematic.php +2 -2
  219. package/server/src/Models/TrackingNumber.php +55 -10
  220. package/server/src/Models/TrackingStatus.php +24 -4
  221. package/server/src/Models/Waypoint.php +44 -10
  222. package/server/src/Models/Zone.php +3 -6
  223. package/server/src/Notifications/DriverArrivedAtGeofence.php +1 -1
  224. package/server/src/Notifications/OrderDispatched.php +3 -9
  225. package/server/src/Notifications/OrderPing.php +3 -9
  226. package/server/src/Observers/CategoryObserver.php +6 -1
  227. package/server/src/Observers/CompanyObserver.php +5 -0
  228. package/server/src/Observers/CompanyUserObserver.php +12 -2
  229. package/server/src/Observers/DriverObserver.php +19 -4
  230. package/server/src/Observers/FleetObserver.php +6 -1
  231. package/server/src/Observers/PurchaseRateObserver.php +66 -11
  232. package/server/src/Observers/ServiceAreaObserver.php +12 -2
  233. package/server/src/Observers/ServiceRateObserver.php +21 -6
  234. package/server/src/Observers/TrackingNumberObserver.php +19 -4
  235. package/server/src/Observers/UserObserver.php +6 -1
  236. package/server/src/Observers/VehicleObserver.php +27 -7
  237. package/server/src/Observers/WorkOrderObserver.php +27 -7
  238. package/server/src/Orchestration/Engines/DriverAssignmentEngine.php +8 -3
  239. package/server/src/Orchestration/Support/OrchestrationPayloadBuilder.php +5 -3
  240. package/server/src/Providers/FleetOpsServiceProvider.php +12 -0
  241. package/server/src/Providers/NotificationServiceProvider.php +6 -0
  242. package/server/src/Support/Ai/Capabilities/AssetStatusCapability.php +36 -26
  243. package/server/src/Support/Ai/Capabilities/CreateOrderPreviewCapability.php +18 -5
  244. package/server/src/Support/Ai/Capabilities/OrderInsightsCapability.php +6 -1
  245. package/server/src/Support/Ai/Capabilities/SearchResourcesCapability.php +26 -6
  246. package/server/src/Support/Analytics/FuelEfficiency.php +9 -3
  247. package/server/src/Support/Analytics/FuelProviderSummary.php +14 -5
  248. package/server/src/Support/Analytics/GeofenceViolations.php +40 -20
  249. package/server/src/Support/Analytics/IssuesInsights.php +38 -18
  250. package/server/src/Support/Analytics/MaintenanceOverview.php +51 -21
  251. package/server/src/Support/Analytics/OnTimeDelivery.php +3 -2
  252. package/server/src/Support/Analytics/OperationsPulse.php +59 -35
  253. package/server/src/Support/Analytics/OrdersByStatus.php +12 -7
  254. package/server/src/Support/Analytics/RevenueTrend.php +16 -6
  255. package/server/src/Support/Analytics/TopDrivers.php +3 -2
  256. package/server/src/Support/FleetOps.php +109 -104
  257. package/server/src/Support/Geocoding.php +52 -14
  258. package/server/src/Support/GeofenceIntersectionService.php +47 -27
  259. package/server/src/Support/LiveOrderQuery.php +6 -1
  260. package/server/src/Support/Metrics/ActiveRevenueQuery.php +3 -2
  261. package/server/src/Support/Metrics/FuelCostsMetric.php +6 -1
  262. package/server/src/Support/ResolvesOrderServiceStops.php +10 -0
  263. package/server/src/Support/Telematics/Providers/GeotabProvider.php +9 -4
  264. package/server/src/Support/Utils.php +122 -16
  265. package/server/src/Tracking/Providers/GoogleRoutesTrackingProvider.php +6 -1
  266. package/server/src/Tracking/Providers/OsrmTrackingProvider.php +11 -6
  267. package/server/src/Tracking/TrackingOptions.php +6 -1
  268. package/server/src/Tracking/TrackingProviderManager.php +2 -3
  269. package/server/src/Tracking/TrackingProviderRegistry.php +8 -4
  270. package/server/src/Traits/PayloadAccessors.php +6 -1
  271. package/server/src/routes.php +23 -27
  272. package/server/tests/AiOperationalQueryCapabilityTest.php +457 -1
  273. package/server/tests/AiPreviewCapabilityContractsTest.php +180 -0
  274. package/server/tests/AnalyticsRoutesTest.php +384 -3
  275. package/server/tests/AnalyticsWidgetContractsTest.php +740 -0
  276. package/server/tests/ApiContactControllerContractsTest.php +284 -0
  277. package/server/tests/ApiCustomerControllerContractsTest.php +962 -0
  278. package/server/tests/ApiDriverControllerContractsTest.php +571 -0
  279. package/server/tests/ApiEntityControllerContractsTest.php +329 -0
  280. package/server/tests/ApiEquipmentControllerContractsTest.php +239 -0
  281. package/server/tests/ApiFleetControllerContractsTest.php +176 -0
  282. package/server/tests/ApiFuelReportControllerContractsTest.php +217 -0
  283. package/server/tests/ApiIssueControllerContractsTest.php +217 -0
  284. package/server/tests/ApiOrderControllerContractsTest.php +1030 -0
  285. package/server/tests/ApiPartControllerContractsTest.php +251 -0
  286. package/server/tests/ApiPayloadControllerContractsTest.php +314 -0
  287. package/server/tests/ApiPlaceControllerContractsTest.php +541 -0
  288. package/server/tests/ApiPurchaseRateControllerContractsTest.php +283 -0
  289. package/server/tests/ApiServiceAreaZoneControllerContractsTest.php +442 -0
  290. package/server/tests/ApiServiceQuoteControllerContractsTest.php +322 -0
  291. package/server/tests/ApiTrackingNumberControllerContractsTest.php +225 -0
  292. package/server/tests/ApiTrackingStatusControllerContractsTest.php +254 -0
  293. package/server/tests/ApiVehicleControllerContractsTest.php +368 -0
  294. package/server/tests/ApiVendorControllerContractsTest.php +199 -0
  295. package/server/tests/AssetAndPlaceSearchContractsTest.php +220 -0
  296. package/server/tests/BackendSmallModelContractsTest.php +354 -0
  297. package/server/tests/CapacityAllocationEngineTest.php +56 -0
  298. package/server/tests/CommandContractsTest.php +2695 -0
  299. package/server/tests/CompactResourceSerializationTest.php +2745 -0
  300. package/server/tests/ControllerFilterContractsTest.php +1273 -0
  301. package/server/tests/ControllerHelperContractsTest.php +1740 -0
  302. package/server/tests/ControllerSerializationContractsTest.php +141 -0
  303. package/server/tests/CoverageSummaryScriptTest.php +93 -0
  304. package/server/tests/CustomerContactIdentitySafetyTest.php +1 -6
  305. package/server/tests/CustomerEndpointTest.php +166 -1
  306. package/server/tests/DriverFilterExecutionTest.php +263 -0
  307. package/server/tests/DriverGeofenceProcessingTest.php +153 -0
  308. package/server/tests/DriverResourceSerializationTest.php +245 -0
  309. package/server/tests/DriverSchedulingTraitContractsTest.php +259 -0
  310. package/server/tests/EventContractsTest.php +1259 -0
  311. package/server/tests/ExceptionContractsTest.php +81 -0
  312. package/server/tests/ExpansionContractsTest.php +242 -0
  313. package/server/tests/ExportCoverageTest.php +116 -0
  314. package/server/tests/Feature/Http/Api/ContactControllerPhotoAndDeleteTest.php +199 -0
  315. package/server/tests/Feature/Http/Api/CustomerControllerHelperSeamsTest.php +831 -0
  316. package/server/tests/Feature/Http/Api/DeviceControllerContractsTest.php +347 -0
  317. package/server/tests/Feature/Http/Api/DeviceControllerCrudTest.php +176 -0
  318. package/server/tests/Feature/Http/Api/DriverControllerAuthFlowsTest.php +451 -0
  319. package/server/tests/Feature/Http/Api/DriverControllerHelpersTest.php +240 -0
  320. package/server/tests/Feature/Http/Api/DriverControllerLookupTest.php +186 -0
  321. package/server/tests/Feature/Http/Api/DriverControllerOrganizationsTest.php +112 -0
  322. package/server/tests/Feature/Http/Api/DriverControllerSessionHelpersTest.php +207 -0
  323. package/server/tests/Feature/Http/Api/DriverControllerSwitchOrgAndGeofenceTest.php +329 -0
  324. package/server/tests/Feature/Http/Api/DriverControllerTrackTest.php +383 -0
  325. package/server/tests/Feature/Http/Api/EntityControllerHelpersTest.php +150 -0
  326. package/server/tests/Feature/Http/Api/FuelTransactionControllerContractsTest.php +352 -0
  327. package/server/tests/Feature/Http/Api/GeofenceControllerContractsTest.php +364 -0
  328. package/server/tests/Feature/Http/Api/LabelControllerSubjectsTest.php +148 -0
  329. package/server/tests/Feature/Http/Api/OrderConfigControllerTest.php +112 -0
  330. package/server/tests/Feature/Http/Api/OrderControllerCreateTest.php +279 -0
  331. package/server/tests/Feature/Http/Api/OrderControllerIntegratedVendorTest.php +295 -0
  332. package/server/tests/Feature/Http/Api/OrderControllerLifecycleActionsTest.php +279 -0
  333. package/server/tests/Feature/Http/Api/OrderControllerLookupHelpersTest.php +207 -0
  334. package/server/tests/Feature/Http/Api/OrderControllerNearbyFiltersTest.php +282 -0
  335. package/server/tests/Feature/Http/Api/OrderControllerPersistenceHelpersTest.php +216 -0
  336. package/server/tests/Feature/Http/Api/OrderControllerQueryFiltersTest.php +184 -0
  337. package/server/tests/Feature/Http/Api/OrderControllerStartActivityTest.php +663 -0
  338. package/server/tests/Feature/Http/Api/PayloadControllerHelpersTest.php +134 -0
  339. package/server/tests/Feature/Http/Api/PlaceAndServiceQuoteSeamsTest.php +479 -0
  340. package/server/tests/Feature/Http/Api/PurchaseRateControllerHelpersTest.php +176 -0
  341. package/server/tests/Feature/Http/Api/PurchaseRateControllerOrderCreationTest.php +268 -0
  342. package/server/tests/Feature/Http/Api/SensorControllerCrudTest.php +239 -0
  343. package/server/tests/Feature/Http/Api/ServiceAreaControllerBorderAndSeamsTest.php +187 -0
  344. package/server/tests/Feature/Http/Api/ServiceQuoteControllerQueryTest.php +405 -0
  345. package/server/tests/Feature/Http/Api/ServiceQuoteControllerVendorBridgeTest.php +212 -0
  346. package/server/tests/Feature/Http/Api/ServiceRateControllerContractsTest.php +263 -0
  347. package/server/tests/Feature/Http/Api/SmallApiControllerHelpersTest.php +272 -0
  348. package/server/tests/Feature/Http/Api/TrackingNumberControllerHelpersTest.php +154 -0
  349. package/server/tests/Feature/Http/Api/TrackingStatusControllerHelpersTest.php +165 -0
  350. package/server/tests/Feature/Http/Api/VehicleControllerTrackingTest.php +483 -0
  351. package/server/tests/Feature/Http/Api/WorkOrderControllerContractsTest.php +326 -0
  352. package/server/tests/Feature/Http/Api/WorkOrderControllerHelpersTest.php +130 -0
  353. package/server/tests/Feature/Http/Api/ZoneControllerBordersAndSeamsTest.php +294 -0
  354. package/server/tests/Feature/Http/FleetOpsRouteRegistrationTest.php +189 -0
  355. package/server/tests/Feature/Http/Internal/AnalyticsControllerSeamsTest.php +53 -0
  356. package/server/tests/Feature/Http/Internal/ContactControllerContractsTest.php +240 -0
  357. package/server/tests/Feature/Http/Internal/ContactControllerCustomerGuardsTest.php +128 -0
  358. package/server/tests/Feature/Http/Internal/ContactControllerEndpointsTest.php +294 -0
  359. package/server/tests/Feature/Http/Internal/CustomerControllerCredentialsTest.php +196 -0
  360. package/server/tests/Feature/Http/Internal/DeviceControllerContractsTest.php +370 -0
  361. package/server/tests/Feature/Http/Internal/DeviceControllerExportAndFiltersTest.php +151 -0
  362. package/server/tests/Feature/Http/Internal/DriverControllerContractsTest.php +1109 -0
  363. package/server/tests/Feature/Http/Internal/DriverControllerCreateRecordTest.php +233 -0
  364. package/server/tests/Feature/Http/Internal/DriverControllerExistingUserAdoptionTest.php +710 -0
  365. package/server/tests/Feature/Http/Internal/DriverControllerHelpersTest.php +218 -0
  366. package/server/tests/Feature/Http/Internal/FleetAssignmentsAndTriggersTest.php +198 -0
  367. package/server/tests/Feature/Http/Internal/FleetOpsLookupControllerDbTest.php +90 -0
  368. package/server/tests/Feature/Http/Internal/HubControllerTest.php +206 -0
  369. package/server/tests/Feature/Http/Internal/IssueControllerContractsTest.php +404 -0
  370. package/server/tests/Feature/Http/Internal/IssueControllerExportImportTest.php +118 -0
  371. package/server/tests/Feature/Http/Internal/LiveControllerEndpointsTest.php +246 -0
  372. package/server/tests/Feature/Http/Internal/LiveControllerTest.php +778 -0
  373. package/server/tests/Feature/Http/Internal/MaintenanceScheduleControllerContractsTest.php +263 -0
  374. package/server/tests/Feature/Http/Internal/MaintenanceScheduleControllerSurfacesTest.php +214 -0
  375. package/server/tests/Feature/Http/Internal/MetricsControllerContractsTest.php +249 -0
  376. package/server/tests/Feature/Http/Internal/MetricsControllerHelpersTest.php +66 -0
  377. package/server/tests/Feature/Http/Internal/MorphControllerHelpersTest.php +125 -0
  378. package/server/tests/Feature/Http/Internal/NavigatorControllerHelpersTest.php +201 -0
  379. package/server/tests/Feature/Http/Internal/OrchestrationControllerContractsTest.php +928 -0
  380. package/server/tests/Feature/Http/Internal/OrchestrationControllerHelpersTest.php +214 -0
  381. package/server/tests/Feature/Http/Internal/OrchestrationControllerImportOrdersTest.php +340 -0
  382. package/server/tests/Feature/Http/Internal/OrderConfigControllerContractsTest.php +314 -0
  383. package/server/tests/Feature/Http/Internal/OrderControllerActivityFlowsTest.php +663 -0
  384. package/server/tests/Feature/Http/Internal/OrderControllerCapturePhotoTest.php +507 -0
  385. package/server/tests/Feature/Http/Internal/OrderControllerContractsTest.php +1742 -0
  386. package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +488 -0
  387. package/server/tests/Feature/Http/Internal/OrderControllerHelperSeamsTest.php +298 -0
  388. package/server/tests/Feature/Http/Internal/OrderControllerHelpersTest.php +267 -0
  389. package/server/tests/Feature/Http/Internal/OrderControllerImportFromFilesTest.php +179 -0
  390. package/server/tests/Feature/Http/Internal/OrderControllerUpstreamNotFoundTest.php +80 -0
  391. package/server/tests/Feature/Http/Internal/PaymentControllerPaymentsTest.php +154 -0
  392. package/server/tests/Feature/Http/Internal/PlaceControllerTest.php +252 -0
  393. package/server/tests/Feature/Http/Internal/PositionControllerReplayMetricsTest.php +163 -0
  394. package/server/tests/Feature/Http/Internal/ProofControllerContractsTest.php +219 -0
  395. package/server/tests/Feature/Http/Internal/SearchControllerEndpointTest.php +151 -0
  396. package/server/tests/Feature/Http/Internal/ServiceQuoteControllerHelpersTest.php +208 -0
  397. package/server/tests/Feature/Http/Internal/ServiceQuoteControllerQueryRecordTest.php +217 -0
  398. package/server/tests/Feature/Http/Internal/ServiceQuoteControllerVendorBridgeTest.php +239 -0
  399. package/server/tests/Feature/Http/Internal/ServiceQuotePreliminaryQueryTest.php +271 -0
  400. package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +133 -0
  401. package/server/tests/Feature/Http/Internal/SmallInternalControllersTest.php +180 -0
  402. package/server/tests/Feature/Http/Internal/TelematicControllerEndpointsTest.php +417 -0
  403. package/server/tests/Feature/Http/Internal/VehicleControllerEndpointsTest.php +361 -0
  404. package/server/tests/Feature/Http/Internal/VendorControllerEndpointsTest.php +203 -0
  405. package/server/tests/Feature/Http/Internal/WorkOrderAndConfigSurfacesTest.php +289 -0
  406. package/server/tests/Feature/Http/Internal/WorkOrderControllerContractsTest.php +199 -0
  407. package/server/tests/Feature/Http/TelematicWebhookIngestTest.php +343 -0
  408. package/server/tests/Feature/Http/Telematics/TelematicWebhookControllerProcessingTest.php +254 -0
  409. package/server/tests/FleetOpsSupportContractsTest.php +187 -0
  410. package/server/tests/FlespiProviderContractsTest.php +244 -0
  411. package/server/tests/FlowResourceTest.php +295 -0
  412. package/server/tests/FuelProviderConnectionControllerContractsTest.php +303 -0
  413. package/server/tests/FuelProviderImplementationTest.php +753 -0
  414. package/server/tests/FuelProviderRegistryTest.php +7 -9
  415. package/server/tests/FuelProviderResourceContractsTest.php +171 -0
  416. package/server/tests/FuelProviderTransactionControllerContractsTest.php +181 -0
  417. package/server/tests/GeofenceIntersectionServiceContractsTest.php +164 -0
  418. package/server/tests/HOSConstraintContractsTest.php +128 -0
  419. package/server/tests/HubAndGettingStartedContractsTest.php +158 -0
  420. package/server/tests/ImportContractsTest.php +191 -0
  421. package/server/tests/InternalCustomerControllerContractsTest.php +238 -0
  422. package/server/tests/InternalFleetControllerContractsTest.php +389 -0
  423. package/server/tests/InternalImportExportControllerContractsTest.php +289 -0
  424. package/server/tests/InternalMetricsControllerContractsTest.php +69 -0
  425. package/server/tests/InternalPlaceWorkOrderControllerContractsTest.php +207 -0
  426. package/server/tests/InternalServiceQuoteCheckoutControllerContractsTest.php +470 -0
  427. package/server/tests/InternalVendorControllerContractsTest.php +331 -0
  428. package/server/tests/InventoryTelemetryModelContractsTest.php +516 -0
  429. package/server/tests/IssueTimelineContractsTest.php +191 -0
  430. package/server/tests/LabelPdfRenderingTest.php +57 -0
  431. package/server/tests/LalamoveIntegrationContractsTest.php +167 -0
  432. package/server/tests/LiveOrderQueryTest.php +140 -19
  433. package/server/tests/LookupAndGeocoderControllerContractsTest.php +357 -0
  434. package/server/tests/MaintainableTraitContractsTest.php +245 -0
  435. package/server/tests/MaintenanceScheduleControllerContractsTest.php +101 -0
  436. package/server/tests/MaintenanceWarrantyContractsTest.php +237 -0
  437. package/server/tests/ManifestControllerContractsTest.php +310 -0
  438. package/server/tests/MetricsRegistryTest.php +596 -10
  439. package/server/tests/MiddlewareContractsTest.php +150 -0
  440. package/server/tests/ModelAccessorContractsTest.php +3201 -0
  441. package/server/tests/MorphControllerContractsTest.php +410 -0
  442. package/server/tests/NavigatorControllerContractsTest.php +206 -0
  443. package/server/tests/NotificationAndMailContractsTest.php +677 -0
  444. package/server/tests/ObserverContractsTest.php +1414 -0
  445. package/server/tests/OperationalAlgorithmContractsTest.php +852 -0
  446. package/server/tests/OperationsMonitorEndpointTest.php +2 -1
  447. package/server/tests/OrchestrationPayloadBuilderTest.php +87 -0
  448. package/server/tests/OrderActivityFlowRegressionTest.php +354 -7
  449. package/server/tests/OrderDispatchListenerContractsTest.php +577 -0
  450. package/server/tests/OrderFilterExecutionTest.php +244 -0
  451. package/server/tests/OrderQueuedClosureRegressionTest.php +2 -1
  452. package/server/tests/PaymentControllerContractsTest.php +199 -0
  453. package/server/tests/PointResolutionTest.php +54 -0
  454. package/server/tests/ProcessAllocationJobContractsTest.php +224 -0
  455. package/server/tests/ProofAndSensorControllerContractsTest.php +44 -0
  456. package/server/tests/ProviderContractsTest.php +409 -0
  457. package/server/tests/PublicApiControllerInputContractsTest.php +294 -0
  458. package/server/tests/QueueJobContractsTest.php +764 -0
  459. package/server/tests/ReportSchemaContractsTest.php +271 -0
  460. package/server/tests/RequestContractsTest.php +966 -0
  461. package/server/tests/RouteRegistrationExecutionTest.php +178 -0
  462. package/server/tests/RouteSequencingEngineTest.php +179 -0
  463. package/server/tests/RulesAndCastsTest.php +246 -0
  464. package/server/tests/SamsaraProviderContractsTest.php +272 -0
  465. package/server/tests/SearchControllerContractsTest.php +311 -0
  466. package/server/tests/ServiceAreaZoneApiShapeTest.php +8 -9
  467. package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +1 -1
  468. package/server/tests/ServiceRateRouteValidationTest.php +76 -0
  469. package/server/tests/SettingControllerContractsTest.php +410 -0
  470. package/server/tests/SmallControllerContractsTest.php +456 -0
  471. package/server/tests/SupportAnalyticsCustomerAuthContractsTest.php +221 -0
  472. package/server/tests/SupportJobAndAiCoverageTest.php +812 -0
  473. package/server/tests/SupportServiceContractsTest.php +287 -0
  474. package/server/tests/SupportValueObjectsTest.php +155 -0
  475. package/server/tests/TelematicControllerContractsTest.php +185 -0
  476. package/server/tests/TelematicProviderRegistryTest.php +167 -0
  477. package/server/tests/TelematicServiceHelperContractsTest.php +315 -0
  478. package/server/tests/TelematicWebhookControllerContractsTest.php +253 -0
  479. package/server/tests/TelematicsHardeningTest.php +666 -105
  480. package/server/tests/TrackingIntelligenceTest.php +709 -26
  481. package/server/tests/TrackingNumberTraitContractsTest.php +106 -0
  482. package/server/tests/Unit/Casts/SpatialCastBranchesTest.php +75 -0
  483. package/server/tests/Unit/Console/AssignCustomerRolesCommandTest.php +102 -0
  484. package/server/tests/Unit/Console/AssignDriverRolesCommandTest.php +113 -0
  485. package/server/tests/Unit/Console/Commands/FixLegacyOrderConfigsHelpersTest.php +108 -0
  486. package/server/tests/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +265 -0
  487. package/server/tests/Unit/Console/Commands/ReplayVehicleLocationsCommandTest.php +320 -0
  488. package/server/tests/Unit/Console/Commands/SimulateGeofenceEventsCommandTest.php +207 -0
  489. package/server/tests/Unit/Console/FixCommandsAndMaintenanceControllerTest.php +256 -0
  490. package/server/tests/Unit/Console/FleetOpsCommandsTest.php +198 -0
  491. package/server/tests/Unit/Console/ReplayVehicleLocationsCommandTest.php +252 -0
  492. package/server/tests/Unit/Console/SendMaintenanceRemindersTest.php +212 -0
  493. package/server/tests/Unit/Console/SimulateGeofenceEventsCommandTest.php +232 -0
  494. package/server/tests/Unit/Console/SyncTelematicsCommandTest.php +136 -0
  495. package/server/tests/Unit/Constraints/HOSConstraintTest.php +158 -0
  496. package/server/tests/Unit/Events/EventModelRecordTest.php +93 -0
  497. package/server/tests/Unit/Events/OrderDispatchFailedTest.php +34 -0
  498. package/server/tests/Unit/Exports/ExportCollectionsTest.php +142 -0
  499. package/server/tests/Unit/Exports/OperationalExportMappingTest.php +651 -0
  500. package/server/tests/Unit/Exports/VehicleExportTest.php +284 -0
  501. package/server/tests/Unit/Flow/EventFiringTest.php +95 -0
  502. package/server/tests/Unit/Http/Api/QueryWithRequestSeamsTest.php +198 -0
  503. package/server/tests/Unit/Http/Api/SensorInputTest.php +95 -0
  504. package/server/tests/Unit/Http/Filter/DeviceFilterTest.php +199 -0
  505. package/server/tests/Unit/Http/Filter/EmptyValueGuardsTest.php +66 -0
  506. package/server/tests/Unit/Http/Filter/FilterDateRangesTest.php +72 -0
  507. package/server/tests/Unit/Http/Filter/FuelProviderTransactionFilterTest.php +172 -0
  508. package/server/tests/Unit/Http/Filter/InternalRelationUuidLookupTest.php +135 -0
  509. package/server/tests/Unit/Http/Filter/IssueFilterTest.php +129 -0
  510. package/server/tests/Unit/Http/Filter/PartFilterTest.php +173 -0
  511. package/server/tests/Unit/Http/Internal/ControllerDelegationSeamsTest.php +136 -0
  512. package/server/tests/Unit/Http/Internal/ControllerExcelSeamsTest.php +89 -0
  513. package/server/tests/Unit/Http/Middleware/SetupDriverSessionTest.php +32 -0
  514. package/server/tests/Unit/Http/Requests/CreateFuelReportRequestTest.php +47 -0
  515. package/server/tests/Unit/Http/Requests/FleetActionRequestTest.php +80 -0
  516. package/server/tests/Unit/Http/Requests/RequestAuthorizationTest.php +50 -0
  517. package/server/tests/Unit/Http/Resources/CustomerResourceTest.php +108 -0
  518. package/server/tests/Unit/Http/Resources/EntityCustomerTypeTest.php +35 -0
  519. package/server/tests/Unit/Http/Resources/FleetResourceTest.php +102 -0
  520. package/server/tests/Unit/Http/Resources/IndexOrderResourceTest.php +210 -0
  521. package/server/tests/Unit/Http/Resources/IndexVehicleResourceTest.php +194 -0
  522. package/server/tests/Unit/Http/Resources/MaintenanceResourcesTest.php +182 -0
  523. package/server/tests/Unit/Http/Resources/OrderAndDriverResourceTest.php +121 -0
  524. package/server/tests/Unit/Http/Resources/OrderConfigResourceTest.php +47 -0
  525. package/server/tests/Unit/Http/Resources/PayloadResourceTest.php +111 -0
  526. package/server/tests/Unit/Http/Resources/RelationResourceFallbacksTest.php +32 -0
  527. package/server/tests/Unit/Http/Resources/ResourceRelationResolutionTest.php +55 -0
  528. package/server/tests/Unit/Http/Resources/TrackingNumberResourceTest.php +174 -0
  529. package/server/tests/Unit/Http/Resources/WaypointResourceTest.php +295 -0
  530. package/server/tests/Unit/Http/Resources/WorkOrderResourceTest.php +164 -0
  531. package/server/tests/Unit/Imports/ImportDelegationTest.php +151 -0
  532. package/server/tests/Unit/Integrations/Lalamove/LalamoveDeliveryStopTest.php +79 -0
  533. package/server/tests/Unit/Integrations/Lalamove/LalamoveLifecycleTest.php +211 -0
  534. package/server/tests/Unit/Integrations/Lalamove/LalamoveQuoteAndServiceOrderTest.php +381 -0
  535. package/server/tests/Unit/Integrations/Lalamove/LalamoveServiceTypeTest.php +51 -0
  536. package/server/tests/Unit/Integrations/LalamoveQuotationTest.php +194 -0
  537. package/server/tests/Unit/Integrations/LalamoveResponseHandlingTest.php +58 -0
  538. package/server/tests/Unit/Jobs/GeofenceDwellAndBulkNotifyTest.php +183 -0
  539. package/server/tests/Unit/Jobs/ReplayPositionsTest.php +57 -0
  540. package/server/tests/Unit/Jobs/SimulateWaypointReachedTest.php +92 -0
  541. package/server/tests/Unit/Listeners/HandleGeofenceEnteredTest.php +256 -0
  542. package/server/tests/Unit/Listeners/HandleOrderDispatchFailedListenerTest.php +101 -0
  543. package/server/tests/Unit/Listeners/HandleOrderDispatchedConcreteTest.php +203 -0
  544. package/server/tests/Unit/Listeners/HandleOrderDispatchedHelpersTest.php +186 -0
  545. package/server/tests/Unit/Listeners/HandleUserRemovedFromCompanyTest.php +65 -0
  546. package/server/tests/Unit/Listeners/ListenerDelegationSeamsTest.php +83 -0
  547. package/server/tests/Unit/Models/AssetTest.php +469 -0
  548. package/server/tests/Unit/Models/ContactCustomerUserTest.php +370 -0
  549. package/server/tests/Unit/Models/ContactTest.php +577 -0
  550. package/server/tests/Unit/Models/DeviceEventTest.php +481 -0
  551. package/server/tests/Unit/Models/DeviceLastPositionDefaultTest.php +128 -0
  552. package/server/tests/Unit/Models/DriverModelHelpersTest.php +268 -0
  553. package/server/tests/Unit/Models/DriverTest.php +401 -0
  554. package/server/tests/Unit/Models/EntityTest.php +171 -0
  555. package/server/tests/Unit/Models/EquipmentTest.php +434 -0
  556. package/server/tests/Unit/Models/FleetTest.php +153 -0
  557. package/server/tests/Unit/Models/FuelProviderTransactionTest.php +82 -0
  558. package/server/tests/Unit/Models/FuelReportImportAndLabelsTest.php +193 -0
  559. package/server/tests/Unit/Models/ImportRowFallbackSeamsTest.php +100 -0
  560. package/server/tests/Unit/Models/IntegratedVendorLifecycleTest.php +203 -0
  561. package/server/tests/Unit/Models/IntegratedVendorTest.php +135 -0
  562. package/server/tests/Unit/Models/IssueTest.php +160 -0
  563. package/server/tests/Unit/Models/MaintenanceScheduleTest.php +319 -0
  564. package/server/tests/Unit/Models/MaintenanceTest.php +277 -0
  565. package/server/tests/Unit/Models/MaintenanceWorkOrderImportTest.php +161 -0
  566. package/server/tests/Unit/Models/ManifestStopTest.php +121 -0
  567. package/server/tests/Unit/Models/ManifestTest.php +163 -0
  568. package/server/tests/Unit/Models/ModelLookupFallbackSeamsTest.php +149 -0
  569. package/server/tests/Unit/Models/OrderConfigTest.php +341 -0
  570. package/server/tests/Unit/Models/OrderDynamicContractsTest.php +190 -0
  571. package/server/tests/Unit/Models/OrderPayloadConfigAndDistanceTest.php +426 -0
  572. package/server/tests/Unit/Models/OrderPayloadRouteTest.php +227 -0
  573. package/server/tests/Unit/Models/OrderPurchaseAndDriversTest.php +188 -0
  574. package/server/tests/Unit/Models/OrderTest.php +917 -0
  575. package/server/tests/Unit/Models/PartTest.php +399 -0
  576. package/server/tests/Unit/Models/PayloadTest.php +710 -0
  577. package/server/tests/Unit/Models/PayloadWaypointsAndEntitiesTest.php +317 -0
  578. package/server/tests/Unit/Models/PlaceCreationAndImportTest.php +384 -0
  579. package/server/tests/Unit/Models/PlaceGeocodingResultsTest.php +253 -0
  580. package/server/tests/Unit/Models/PlaceSharedAndGeocodingTest.php +271 -0
  581. package/server/tests/Unit/Models/PlaceTest.php +589 -0
  582. package/server/tests/Unit/Models/PositionTest.php +49 -0
  583. package/server/tests/Unit/Models/RouteTest.php +55 -0
  584. package/server/tests/Unit/Models/SensorReadingsTest.php +168 -0
  585. package/server/tests/Unit/Models/SensorTest.php +284 -0
  586. package/server/tests/Unit/Models/ServiceAreaGeometryTest.php +129 -0
  587. package/server/tests/Unit/Models/ServiceAreaTest.php +125 -0
  588. package/server/tests/Unit/Models/ServiceQuoteTest.php +617 -0
  589. package/server/tests/Unit/Models/ServiceRateFeeTest.php +73 -0
  590. package/server/tests/Unit/Models/ServiceRatePersistenceAndServicabilityTest.php +428 -0
  591. package/server/tests/Unit/Models/ServiceRateTest.php +533 -0
  592. package/server/tests/Unit/Models/SmallModelSurfacesTest.php +294 -0
  593. package/server/tests/Unit/Models/TrackingNumberTest.php +199 -0
  594. package/server/tests/Unit/Models/TrackingStatusTest.php +131 -0
  595. package/server/tests/Unit/Models/VehicleDeviceTest.php +115 -0
  596. package/server/tests/Unit/Models/VehiclePositionsAndImportTest.php +220 -0
  597. package/server/tests/Unit/Models/VehicleTest.php +266 -0
  598. package/server/tests/Unit/Models/VendorRelationsAndImportTest.php +107 -0
  599. package/server/tests/Unit/Models/WarrantyTest.php +187 -0
  600. package/server/tests/Unit/Models/WaypointTest.php +366 -0
  601. package/server/tests/Unit/Models/WorkOrderTest.php +272 -0
  602. package/server/tests/Unit/Models/ZoneTest.php +83 -0
  603. package/server/tests/Unit/Notifications/MonitoringNotificationsTest.php +136 -0
  604. package/server/tests/Unit/Notifications/OrderAssignedChannelsTest.php +53 -0
  605. package/server/tests/Unit/Notifications/OrderDispatchedChannelsTest.php +81 -0
  606. package/server/tests/Unit/Notifications/OrderFailedChannelsTest.php +73 -0
  607. package/server/tests/Unit/Notifications/OrderPingChannelsTest.php +69 -0
  608. package/server/tests/Unit/Notifications/TerminalOrderNotificationsTest.php +185 -0
  609. package/server/tests/Unit/Observers/FleetOpsCompanyUserAndServiceAreaObserversTest.php +133 -0
  610. package/server/tests/Unit/Observers/ObserverHelperExecutionTest.php +135 -0
  611. package/server/tests/Unit/Observers/ObserverListenerSeamsTest.php +267 -0
  612. package/server/tests/Unit/Observers/PurchaseRateObserverAndOrderJobsTest.php +169 -0
  613. package/server/tests/Unit/Orchestration/Engines/DriverAssignmentEngineTest.php +393 -0
  614. package/server/tests/Unit/Orchestration/Engines/VroomOrchestrationEngineLifecycleTest.php +397 -0
  615. package/server/tests/Unit/Orchestration/OrchestrationEngineRegistryTest.php +45 -0
  616. package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +253 -0
  617. package/server/tests/Unit/Providers/FleetOpsAiRegistrationTest.php +59 -0
  618. package/server/tests/Unit/Rules/ResolvableVehicleTest.php +85 -0
  619. package/server/tests/Unit/Support/Ai/AssetStatusCapabilityQueriesTest.php +120 -0
  620. package/server/tests/Unit/Support/Ai/Capabilities/CreateOrderPreviewCapabilityTest.php +385 -0
  621. package/server/tests/Unit/Support/Ai/Capabilities/OrderInsightsCapabilityTest.php +226 -0
  622. package/server/tests/Unit/Support/Ai/Capabilities/SearchResourcesCapabilityTest.php +237 -0
  623. package/server/tests/Unit/Support/AiCapabilityPermissionsTest.php +124 -0
  624. package/server/tests/Unit/Support/AlgoEdgeBranchesTest.php +24 -0
  625. package/server/tests/Unit/Support/Analytics/GeofenceViolationsTest.php +109 -0
  626. package/server/tests/Unit/Support/Analytics/LiveFleetTest.php +205 -0
  627. package/server/tests/Unit/Support/Analytics/MaintenanceOverviewTest.php +236 -0
  628. package/server/tests/Unit/Support/Analytics/OnTimeDeliveryAndTopDriversTest.php +250 -0
  629. package/server/tests/Unit/Support/CreateOrderPreviewDraftingTest.php +235 -0
  630. package/server/tests/Unit/Support/CustomerAuthTest.php +132 -0
  631. package/server/tests/Unit/Support/FuelEfficiencyAndCanceledHandlersTest.php +164 -0
  632. package/server/tests/Unit/Support/FuelProviderRegistryResolutionTest.php +51 -0
  633. package/server/tests/Unit/Support/FuelProviderServiceMatchingTest.php +280 -0
  634. package/server/tests/Unit/Support/GeocodingInjectedClientTest.php +268 -0
  635. package/server/tests/Unit/Support/GeocodingLocateTest.php +32 -0
  636. package/server/tests/Unit/Support/GeofenceIntersectionServiceTest.php +188 -0
  637. package/server/tests/Unit/Support/GettingStartedTest.php +164 -0
  638. package/server/tests/Unit/Support/GuardReturnSeamsTest.php +172 -0
  639. package/server/tests/Unit/Support/IntegratedVendorsResolverTest.php +250 -0
  640. package/server/tests/Unit/Support/IssuesInsightsAndAllocationJobTest.php +156 -0
  641. package/server/tests/Unit/Support/MagicAccessorSeamsTest.php +54 -0
  642. package/server/tests/Unit/Support/MaintainableAndOperationalAlertsTest.php +215 -0
  643. package/server/tests/Unit/Support/Metrics/AvgOrderValueMetricTest.php +308 -0
  644. package/server/tests/Unit/Support/Metrics/CountMetricsTest.php +280 -0
  645. package/server/tests/Unit/Support/Metrics/FuelCostsMetricTest.php +102 -0
  646. package/server/tests/Unit/Support/Metrics/MetricQuerySeamsTest.php +129 -0
  647. package/server/tests/Unit/Support/Metrics/OrdersScheduledMetricTest.php +146 -0
  648. package/server/tests/Unit/Support/MoreQuerySeamsTest.php +410 -0
  649. package/server/tests/Unit/Support/OperationalQueryDistributionTest.php +152 -0
  650. package/server/tests/Unit/Support/OperationsPulseTest.php +130 -0
  651. package/server/tests/Unit/Support/OptimizeOrderRouteCapabilityTest.php +147 -0
  652. package/server/tests/Unit/Support/OrchestrationPayloadBuilderTest.php +135 -0
  653. package/server/tests/Unit/Support/OrchestrationRouteAndVehicleTasksTest.php +254 -0
  654. package/server/tests/Unit/Support/OsrmProofAndIssueFilterTest.php +247 -0
  655. package/server/tests/Unit/Support/PetroAppFuelProviderTest.php +165 -0
  656. package/server/tests/Unit/Support/PlaceSearchRankingTest.php +191 -0
  657. package/server/tests/Unit/Support/QuerySeamsTest.php +309 -0
  658. package/server/tests/Unit/Support/ResolvesOrderServiceStopsDbTest.php +303 -0
  659. package/server/tests/Unit/Support/ResolvesOrderServiceStopsTest.php +382 -0
  660. package/server/tests/Unit/Support/SkipAndFallbackGuardsTest.php +70 -0
  661. package/server/tests/Unit/Support/TelematicCredentialResolutionTest.php +31 -0
  662. package/server/tests/Unit/Support/TelematicServiceTest.php +256 -0
  663. package/server/tests/Unit/Support/Telematics/Providers/AbstractProviderTest.php +154 -0
  664. package/server/tests/Unit/Support/Telematics/Providers/AfaqyProviderTest.php +191 -0
  665. package/server/tests/Unit/Support/Telematics/Providers/AfaqyProviderTransportTest.php +138 -0
  666. package/server/tests/Unit/Support/Telematics/Providers/GeotabProviderTest.php +329 -0
  667. package/server/tests/Unit/Support/Telematics/Providers/ProviderTransportSeamsTest.php +133 -0
  668. package/server/tests/Unit/Support/Telematics/Providers/SafeeProviderTest.php +487 -0
  669. package/server/tests/Unit/Support/Telematics/TelematicProviderRegistryTest.php +39 -0
  670. package/server/tests/Unit/Support/Telematics/TelematicServiceLifecycleTest.php +711 -0
  671. package/server/tests/Unit/Support/Telematics/TelematicServiceTelemetryTest.php +364 -0
  672. package/server/tests/Unit/Support/UtilsAdditionalTest.php +256 -0
  673. package/server/tests/Unit/Support/UtilsGeoMatrixAndVendorTest.php +382 -0
  674. package/server/tests/Unit/Tracking/TrackingContextTest.php +114 -0
  675. package/server/tests/Unit/Tracking/TrackingIntelligenceAndContextTest.php +477 -0
  676. package/server/tests/Unit/Tracking/TrackingProviderManagerFallbacksTest.php +208 -0
  677. package/server/tests/Unit/Traits/HasTrackingNumberTest.php +303 -0
  678. package/server/tests/Unit/Traits/PayloadAccessorsTest.php +150 -0
  679. package/server/tests/UtilsContractsTest.php +244 -0
  680. package/server/tests/VehicleControllerHelperContractsTest.php +488 -0
  681. package/server/tests/VehicleDataParsingTest.php +45 -0
  682. package/server/tests/VehicleDriverAssignmentTest.php +8 -9
  683. package/server/tests/VehicleResourceContractsTest.php +313 -0
  684. package/translations/bg-bg.yaml +2 -0
  685. package/translations/en-us.yaml +2 -0
  686. package/translations/es-pa.yaml +2 -0
  687. package/translations/fr-fr.yaml +2 -0
  688. package/translations/mn-mn.yaml +2 -0
  689. package/translations/pt-br.yaml +2 -0
  690. package/translations/ru-ru.yaml +2 -0
  691. package/server/src/Http/Controllers/Api/v1/OrganizationController.php +0 -45
  692. package/server/tests/DeviceFilterTest.php +0 -45
  693. package/server/tests/LiveControllerViewportTest.php +0 -60
@@ -25,30 +25,11 @@ class EntityController extends Controller
25
25
  public function create(CreateEntityRequest $request)
26
26
  {
27
27
  // get request input
28
- $input = $request->only([
29
- 'name',
30
- 'type',
31
- 'internal_id',
32
- 'description',
33
- 'meta',
34
- 'length',
35
- 'width',
36
- 'height',
37
- 'weight',
38
- 'weight_unit',
39
- 'dimensions_unit',
40
- 'declared_value',
41
- 'price',
42
- 'sales_price',
43
- 'sku',
44
- 'currency',
45
- 'meta',
46
- 'supplier_uuid',
47
- ]);
28
+ $input = $this->entityInputFromRequest($request);
48
29
 
49
30
  // payload assignment
50
31
  if ($request->has('payload')) {
51
- $input['payload_uuid'] = Utils::getUuid('payloads', [
32
+ $input['payload_uuid'] = $this->getUuid('payloads', [
52
33
  'public_id' => $request->input('payload'),
53
34
  'company_uuid' => session('company'),
54
35
  ]);
@@ -56,7 +37,7 @@ class EntityController extends Controller
56
37
 
57
38
  // customer assignment
58
39
  if ($request->has('customer')) {
59
- $customer = Utils::getUuid(
40
+ $customer = $this->getUuid(
60
41
  ['contacts', 'vendors'],
61
42
  [
62
43
  'public_id' => $request->input('customer'),
@@ -65,14 +46,14 @@ class EntityController extends Controller
65
46
  );
66
47
 
67
48
  if (is_array($customer)) {
68
- $input['customer_uuid'] = Utils::get($customer, 'uuid');
69
- $input['customer_type'] = Utils::getModelClassName(Utils::get($customer, 'table'));
49
+ $input['customer_uuid'] = $this->getValue($customer, 'uuid');
50
+ $input['customer_type'] = $this->getModelClassName($this->getValue($customer, 'table'));
70
51
  }
71
52
  }
72
53
 
73
54
  // driver assignment
74
55
  if ($request->has('driver')) {
75
- $input['driver_uuid'] = Utils::getUuid('drivers', [
56
+ $input['driver_uuid'] = $this->getUuid('drivers', [
76
57
  'public_id' => $request->input('driver'),
77
58
  'company_uuid' => session('company'),
78
59
  ]);
@@ -83,7 +64,7 @@ class EntityController extends Controller
83
64
  $destinationKey = $request->or(['destination', 'waypoint']);
84
65
 
85
66
  if ($request->has('payload')) {
86
- $payload = Payload::where('public_id', $request->input('payload'))->first();
67
+ $payload = $this->findPayloadByPublicId($request->input('payload'));
87
68
 
88
69
  if ($payload) {
89
70
  // if a destination or waypoint is explicitly set
@@ -99,10 +80,10 @@ class EntityController extends Controller
99
80
  $input['company_uuid'] = session('company');
100
81
 
101
82
  // create the entity
102
- $entity = Entity::create($input);
83
+ $entity = $this->createEntity($input);
103
84
 
104
85
  // response the driver resource
105
- return new EntityResource($entity);
86
+ return $this->entityResource($entity);
106
87
  }
107
88
 
108
89
  /**
@@ -117,9 +98,9 @@ class EntityController extends Controller
117
98
  {
118
99
  // find for the entity
119
100
  try {
120
- $entity = Entity::findRecordOrFail($id);
101
+ $entity = $this->findEntityOrFail($id);
121
102
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
122
- return response()->json(
103
+ return $this->jsonResponse(
123
104
  [
124
105
  'error' => 'Entity resource not found.',
125
106
  ],
@@ -128,30 +109,11 @@ class EntityController extends Controller
128
109
  }
129
110
 
130
111
  // get request input
131
- $input = $request->only([
132
- 'name',
133
- 'type',
134
- 'internal_id',
135
- 'description',
136
- 'meta',
137
- 'length',
138
- 'width',
139
- 'height',
140
- 'weight',
141
- 'weight_unit',
142
- 'dimensions_unit',
143
- 'declared_value',
144
- 'price',
145
- 'sales_price',
146
- 'sku',
147
- 'currency',
148
- 'meta',
149
- 'supplier_uuid',
150
- ]);
112
+ $input = $this->entityInputFromRequest($request);
151
113
 
152
114
  // payload assignment
153
115
  if ($request->has('payload')) {
154
- $input['payload_uuid'] = Utils::getUuid('payloads', [
116
+ $input['payload_uuid'] = $this->getUuid('payloads', [
155
117
  'public_id' => $request->input('payload'),
156
118
  'company_uuid' => session('company'),
157
119
  ]);
@@ -159,22 +121,22 @@ class EntityController extends Controller
159
121
 
160
122
  // customer assignment
161
123
  if ($request->has('customer')) {
162
- $customer = Utils::getUuid(
124
+ $customer = $this->getUuid(
163
125
  ['contacts', 'vendors'],
164
126
  [
165
- 'public_id' => $request->input('payload'),
127
+ 'public_id' => $request->input('customer'),
166
128
  'company_uuid' => session('company'),
167
129
  ]
168
130
  );
169
131
  if (is_array($customer)) {
170
- $input['customer_uuid'] = Utils::get($customer, 'uuid');
171
- $input['customer_object'] = Utils::singularize(Utils::get($customer, 'table'));
132
+ $input['customer_uuid'] = $this->getValue($customer, 'uuid');
133
+ $input['customer_object'] = $this->singularize($this->getValue($customer, 'table'));
172
134
  }
173
135
  }
174
136
 
175
137
  // driver assignment
176
138
  if ($request->has('driver')) {
177
- $input['driver_uuid'] = Utils::getUuid('drivers', [
139
+ $input['driver_uuid'] = $this->getUuid('drivers', [
178
140
  'public_id' => $request->input('driver'),
179
141
  'company_uuid' => session('company'),
180
142
  ]);
@@ -185,13 +147,13 @@ class EntityController extends Controller
185
147
  $destinationKey = $request->or(['destination', 'waypoint']);
186
148
 
187
149
  if ($request->has('payload')) {
188
- $payload = Payload::where('public_id', $request->input('payload'))->first();
150
+ $payload = $this->findPayloadByPublicId($request->input('payload'));
189
151
 
190
152
  if ($payload) {
191
153
  // if a destination or waypoint is explicitly set
192
154
  $destination = $payload->findDestinationFromKey($destinationKey);
193
155
  if ($destination instanceof Place) {
194
- $attributes['destination_uuid'] = $destination->uuid;
156
+ $input['destination_uuid'] = $destination->uuid;
195
157
  }
196
158
  }
197
159
  }
@@ -201,7 +163,7 @@ class EntityController extends Controller
201
163
  $entity->update($input);
202
164
 
203
165
  // response the entity resource
204
- return new EntityResource($entity);
166
+ return $this->entityResource($entity);
205
167
  }
206
168
 
207
169
  /**
@@ -211,9 +173,9 @@ class EntityController extends Controller
211
173
  */
212
174
  public function query(Request $request)
213
175
  {
214
- $results = Entity::queryWithRequest($request);
176
+ $results = $this->queryEntities($request);
215
177
 
216
- return EntityResource::collection($results);
178
+ return $this->entityResourceCollection($results);
217
179
  }
218
180
 
219
181
  /**
@@ -225,9 +187,9 @@ class EntityController extends Controller
225
187
  {
226
188
  // find for the entity
227
189
  try {
228
- $entity = Entity::findRecordOrFail($id);
190
+ $entity = $this->findEntityOrFail($id);
229
191
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
230
- return response()->json(
192
+ return $this->jsonResponse(
231
193
  [
232
194
  'error' => 'Entity resource not found.',
233
195
  ],
@@ -236,7 +198,7 @@ class EntityController extends Controller
236
198
  }
237
199
 
238
200
  // response the entity resource
239
- return new EntityResource($entity);
201
+ return $this->entityResource($entity);
240
202
  }
241
203
 
242
204
  /**
@@ -248,9 +210,9 @@ class EntityController extends Controller
248
210
  {
249
211
  // find for the driver
250
212
  try {
251
- $entity = Entity::findRecordOrFail($id);
213
+ $entity = $this->findEntityOrFail($id);
252
214
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
253
- return response()->json(
215
+ return $this->jsonResponse(
254
216
  [
255
217
  'error' => 'Entity resource not found.',
256
218
  ],
@@ -262,6 +224,90 @@ class EntityController extends Controller
262
224
  $entity->delete();
263
225
 
264
226
  // response the entity resource
227
+ return $this->deletedEntityResource($entity);
228
+ }
229
+
230
+ protected function entityInputFromRequest(Request $request): array
231
+ {
232
+ return $request->only([
233
+ 'name',
234
+ 'type',
235
+ 'internal_id',
236
+ 'description',
237
+ 'meta',
238
+ 'length',
239
+ 'width',
240
+ 'height',
241
+ 'weight',
242
+ 'weight_unit',
243
+ 'dimensions_unit',
244
+ 'declared_value',
245
+ 'price',
246
+ 'sales_price',
247
+ 'sku',
248
+ 'currency',
249
+ 'meta',
250
+ 'supplier_uuid',
251
+ ]);
252
+ }
253
+
254
+ protected function getUuid(array|string $table, array $where): mixed
255
+ {
256
+ return Utils::getUuid($table, $where);
257
+ }
258
+
259
+ protected function getValue(array|object $data, string $key): mixed
260
+ {
261
+ return Utils::get($data, $key);
262
+ }
263
+
264
+ protected function getModelClassName(?string $table): ?string
265
+ {
266
+ return $table ? Utils::getModelClassName($table) : null;
267
+ }
268
+
269
+ protected function singularize(?string $value): ?string
270
+ {
271
+ return $value ? Utils::singularize($value) : null;
272
+ }
273
+
274
+ protected function findPayloadByPublicId(string $publicId): ?Payload
275
+ {
276
+ return Payload::where('public_id', $publicId)->first();
277
+ }
278
+
279
+ protected function createEntity(array $input): Entity
280
+ {
281
+ return Entity::create($input);
282
+ }
283
+
284
+ protected function findEntityOrFail(string $id): Entity
285
+ {
286
+ return Entity::findRecordOrFail($id);
287
+ }
288
+
289
+ protected function queryEntities(Request $request): mixed
290
+ {
291
+ return Entity::queryWithRequest($request);
292
+ }
293
+
294
+ protected function entityResource(Entity $entity)
295
+ {
296
+ return new EntityResource($entity);
297
+ }
298
+
299
+ protected function entityResourceCollection(mixed $results): mixed
300
+ {
301
+ return EntityResource::collection($results);
302
+ }
303
+
304
+ protected function deletedEntityResource(Entity $entity)
305
+ {
265
306
  return new DeletedResource($entity);
266
307
  }
308
+
309
+ protected function jsonResponse(array $payload, int $status)
310
+ {
311
+ return response()->json($payload, $status);
312
+ }
267
313
  }
@@ -24,9 +24,9 @@ class EquipmentController extends Controller
24
24
  $input = $this->input($request);
25
25
  $input['company_uuid'] = session('company');
26
26
 
27
- $equipment = Equipment::create($input)->load(['warranty', 'photo', 'equipable']);
27
+ $equipment = $this->createEquipment($input)->load(['warranty', 'photo', 'equipable']);
28
28
 
29
- return new EquipmentResource($equipment);
29
+ return $this->equipmentResource($equipment);
30
30
  }
31
31
 
32
32
  public function update(string $id, UpdateEquipmentRequest $request)
@@ -36,23 +36,23 @@ class EquipmentController extends Controller
36
36
  try {
37
37
  $equipment = $this->resolveModel(Equipment::class, $id);
38
38
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
39
- return response()->json(['error' => 'Equipment resource not found.'], 404);
39
+ return $this->jsonResponse(['error' => 'Equipment resource not found.'], 404);
40
40
  }
41
41
 
42
42
  $equipment->update($this->input($request));
43
43
 
44
- return new EquipmentResource($equipment->refresh()->load(['warranty', 'photo', 'equipable']));
44
+ return $this->equipmentResource($equipment->refresh()->load(['warranty', 'photo', 'equipable']));
45
45
  }
46
46
 
47
47
  public function query(Request $request)
48
48
  {
49
49
  $this->rejectUuidIdentifiers($request);
50
50
 
51
- $results = Equipment::queryWithRequest($request, function (&$query) {
51
+ $results = $this->queryEquipment($request, function (&$query) {
52
52
  $query->with(['warranty', 'photo', 'equipable']);
53
53
  });
54
54
 
55
- return EquipmentResource::collection($results);
55
+ return $this->equipmentResourceCollection($results);
56
56
  }
57
57
 
58
58
  public function find(string $id)
@@ -60,10 +60,10 @@ class EquipmentController extends Controller
60
60
  try {
61
61
  $equipment = $this->resolveModel(Equipment::class, $id)->load(['warranty', 'photo', 'equipable']);
62
62
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
63
- return response()->json(['error' => 'Equipment resource not found.'], 404);
63
+ return $this->jsonResponse(['error' => 'Equipment resource not found.'], 404);
64
64
  }
65
65
 
66
- return new EquipmentResource($equipment);
66
+ return $this->equipmentResource($equipment);
67
67
  }
68
68
 
69
69
  public function delete(string $id)
@@ -71,12 +71,12 @@ class EquipmentController extends Controller
71
71
  try {
72
72
  $equipment = $this->resolveModel(Equipment::class, $id);
73
73
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
74
- return response()->json(['error' => 'Equipment resource not found.'], 404);
74
+ return $this->jsonResponse(['error' => 'Equipment resource not found.'], 404);
75
75
  }
76
76
 
77
77
  $equipment->delete();
78
78
 
79
- return new DeletedResource($equipment);
79
+ return $this->deletedEquipmentResource($equipment);
80
80
  }
81
81
 
82
82
  protected function input(Request $request): array
@@ -111,4 +111,34 @@ class EquipmentController extends Controller
111
111
 
112
112
  return $input;
113
113
  }
114
+
115
+ protected function createEquipment(array $input): Equipment
116
+ {
117
+ return Equipment::create($input);
118
+ }
119
+
120
+ protected function queryEquipment(Request $request, callable $callback)
121
+ {
122
+ return Equipment::queryWithRequest($request, $callback);
123
+ }
124
+
125
+ protected function equipmentResource(Equipment $equipment)
126
+ {
127
+ return new EquipmentResource($equipment);
128
+ }
129
+
130
+ protected function equipmentResourceCollection($results)
131
+ {
132
+ return EquipmentResource::collection($results);
133
+ }
134
+
135
+ protected function deletedEquipmentResource(Equipment $equipment)
136
+ {
137
+ return new DeletedResource($equipment);
138
+ }
139
+
140
+ protected function jsonResponse(array $payload, int $status)
141
+ {
142
+ return response()->json($payload, $status);
143
+ }
114
144
  }
@@ -30,17 +30,17 @@ class FleetController extends Controller
30
30
 
31
31
  // service area assignment
32
32
  if ($request->has('service_area')) {
33
- $input['service_area_uuid'] = Utils::getUuid('service_areas', [
33
+ $input['service_area_uuid'] = $this->getServiceAreaUuid('service_areas', [
34
34
  'public_id' => $request->input('service_area'),
35
35
  'company_uuid' => session('company'),
36
36
  ]);
37
37
  }
38
38
 
39
39
  // create the fleet
40
- $fleet = Fleet::create($input);
40
+ $fleet = $this->createFleet($input);
41
41
 
42
42
  // response the driver resource
43
- return new FleetResource($fleet);
43
+ return $this->fleetResource($fleet);
44
44
  }
45
45
 
46
46
  /**
@@ -55,9 +55,9 @@ class FleetController extends Controller
55
55
  {
56
56
  // find for the fleet
57
57
  try {
58
- $fleet = Fleet::findRecordOrFail($id);
58
+ $fleet = $this->findFleet($id);
59
59
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
60
- return response()->json(
60
+ return $this->jsonResponse(
61
61
  [
62
62
  'error' => 'Fleet resource not found.',
63
63
  ],
@@ -70,7 +70,7 @@ class FleetController extends Controller
70
70
 
71
71
  // service area assignment
72
72
  if ($request->has('service_area')) {
73
- $input['service_area_uuid'] = Utils::getUuid('service_areas', [
73
+ $input['service_area_uuid'] = $this->getServiceAreaUuid('service_areas', [
74
74
  'public_id' => $request->input('service_area'),
75
75
  'company_uuid' => session('company'),
76
76
  ]);
@@ -80,7 +80,7 @@ class FleetController extends Controller
80
80
  $fleet->update($input);
81
81
 
82
82
  // response the fleet resource
83
- return new FleetResource($fleet);
83
+ return $this->fleetResource($fleet);
84
84
  }
85
85
 
86
86
  /**
@@ -90,9 +90,9 @@ class FleetController extends Controller
90
90
  */
91
91
  public function query(Request $request)
92
92
  {
93
- $results = Fleet::queryWithRequest($request);
93
+ $results = $this->queryFleets($request);
94
94
 
95
- return FleetResource::collection($results);
95
+ return $this->fleetResourceCollection($results);
96
96
  }
97
97
 
98
98
  /**
@@ -104,9 +104,9 @@ class FleetController extends Controller
104
104
  {
105
105
  // find for the fleet
106
106
  try {
107
- $fleet = Fleet::findRecordOrFail($id);
107
+ $fleet = $this->findFleet($id);
108
108
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
109
- return response()->json(
109
+ return $this->jsonResponse(
110
110
  [
111
111
  'error' => 'Fleet resource not found.',
112
112
  ],
@@ -115,7 +115,7 @@ class FleetController extends Controller
115
115
  }
116
116
 
117
117
  // response the fleet resource
118
- return new FleetResource($fleet);
118
+ return $this->fleetResource($fleet);
119
119
  }
120
120
 
121
121
  /**
@@ -127,9 +127,9 @@ class FleetController extends Controller
127
127
  {
128
128
  // find for the driver
129
129
  try {
130
- $fleet = Fleet::findRecordOrFail($id);
130
+ $fleet = $this->findFleet($id);
131
131
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
132
- return response()->json(
132
+ return $this->jsonResponse(
133
133
  [
134
134
  'error' => 'Fleet resource not found.',
135
135
  ],
@@ -141,6 +141,46 @@ class FleetController extends Controller
141
141
  $fleet->delete();
142
142
 
143
143
  // response the fleet resource
144
+ return $this->deletedFleetResource($fleet);
145
+ }
146
+
147
+ protected function getServiceAreaUuid(string $table, array $where): ?string
148
+ {
149
+ return Utils::getUuid($table, $where);
150
+ }
151
+
152
+ protected function createFleet(array $input): Fleet
153
+ {
154
+ return Fleet::create($input);
155
+ }
156
+
157
+ protected function findFleet(string $id): Fleet
158
+ {
159
+ return Fleet::findRecordOrFail($id);
160
+ }
161
+
162
+ protected function queryFleets(Request $request)
163
+ {
164
+ return Fleet::queryWithRequest($request);
165
+ }
166
+
167
+ protected function fleetResource(Fleet $fleet)
168
+ {
169
+ return new FleetResource($fleet);
170
+ }
171
+
172
+ protected function fleetResourceCollection($results)
173
+ {
174
+ return FleetResource::collection($results);
175
+ }
176
+
177
+ protected function deletedFleetResource(Fleet $fleet)
178
+ {
144
179
  return new DeletedResource($fleet);
145
180
  }
181
+
182
+ protected function jsonResponse(array $payload, int $status)
183
+ {
184
+ return response()->json($payload, $status);
185
+ }
146
186
  }
@@ -35,9 +35,9 @@ class FuelReportController extends Controller
35
35
 
36
36
  // Find driver who is reporting
37
37
  try {
38
- $driver = Driver::findRecordOrFail($request->input('driver'));
38
+ $driver = $this->findDriverRecord($request->input('driver'));
39
39
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
40
- return response()->json(
40
+ return $this->jsonResponse(
41
41
  [
42
42
  'error' => 'Driver reporting fuel report not found.',
43
43
  ],
@@ -52,10 +52,10 @@ class FuelReportController extends Controller
52
52
  $input['vehicle_uuid'] = $driver->vehicle_uuid;
53
53
 
54
54
  // create the fuel report
55
- $fuelReport = FuelReport::create($input);
55
+ $fuelReport = $this->createFuelReport($input);
56
56
 
57
57
  // response the driver resource
58
- return new FuelReportResource($fuelReport);
58
+ return $this->fuelReportResource($fuelReport);
59
59
  }
60
60
 
61
61
  /**
@@ -70,9 +70,9 @@ class FuelReportController extends Controller
70
70
  {
71
71
  // find for the fuel report
72
72
  try {
73
- $fuelReport = FuelReport::findRecordOrFail($id);
73
+ $fuelReport = $this->findFuelReportRecord($id);
74
74
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
75
- return response()->json(
75
+ return $this->jsonResponse(
76
76
  [
77
77
  'error' => 'FuelReport resource not found.',
78
78
  ],
@@ -93,7 +93,7 @@ class FuelReportController extends Controller
93
93
  $fuelReport->update($input);
94
94
 
95
95
  // response the fuel report resource
96
- return new FuelReportResource($fuelReport);
96
+ return $this->fuelReportResource($fuelReport);
97
97
  }
98
98
 
99
99
  /**
@@ -103,9 +103,9 @@ class FuelReportController extends Controller
103
103
  */
104
104
  public function query(Request $request)
105
105
  {
106
- $results = FuelReport::queryWithRequest($request);
106
+ $results = $this->queryFuelReports($request);
107
107
 
108
- return FuelReportResource::collection($results);
108
+ return $this->fuelReportResourceCollection($results);
109
109
  }
110
110
 
111
111
  /**
@@ -117,9 +117,9 @@ class FuelReportController extends Controller
117
117
  {
118
118
  // find for the fuel report
119
119
  try {
120
- $fuelReport = FuelReport::findRecordOrFail($id);
120
+ $fuelReport = $this->findFuelReportRecord($id);
121
121
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
122
- return response()->json(
122
+ return $this->jsonResponse(
123
123
  [
124
124
  'error' => 'FuelReport resource not found.',
125
125
  ],
@@ -128,7 +128,7 @@ class FuelReportController extends Controller
128
128
  }
129
129
 
130
130
  // response the fuel report resource
131
- return new FuelReportResource($fuelReport);
131
+ return $this->fuelReportResource($fuelReport);
132
132
  }
133
133
 
134
134
  /**
@@ -140,9 +140,9 @@ class FuelReportController extends Controller
140
140
  {
141
141
  // find for the driver
142
142
  try {
143
- $fuelReport = FuelReport::findRecordOrFail($id);
143
+ $fuelReport = $this->findFuelReportRecord($id);
144
144
  } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
145
- return response()->json(
145
+ return $this->jsonResponse(
146
146
  [
147
147
  'error' => 'FuelReport resource not found.',
148
148
  ],
@@ -154,6 +154,46 @@ class FuelReportController extends Controller
154
154
  $fuelReport->delete();
155
155
 
156
156
  // response the fuel report resource
157
+ return $this->deletedFuelReportResource($fuelReport);
158
+ }
159
+
160
+ protected function findDriverRecord(string $id): Driver
161
+ {
162
+ return Driver::findRecordOrFail($id);
163
+ }
164
+
165
+ protected function createFuelReport(array $input): FuelReport
166
+ {
167
+ return FuelReport::create($input);
168
+ }
169
+
170
+ protected function findFuelReportRecord(string $id): FuelReport
171
+ {
172
+ return FuelReport::findRecordOrFail($id);
173
+ }
174
+
175
+ protected function queryFuelReports(Request $request)
176
+ {
177
+ return FuelReport::queryWithRequest($request);
178
+ }
179
+
180
+ protected function fuelReportResource(FuelReport $fuelReport)
181
+ {
182
+ return new FuelReportResource($fuelReport);
183
+ }
184
+
185
+ protected function fuelReportResourceCollection($results)
186
+ {
187
+ return FuelReportResource::collection($results);
188
+ }
189
+
190
+ protected function deletedFuelReportResource(FuelReport $fuelReport)
191
+ {
157
192
  return new DeletedFuelReport($fuelReport);
158
193
  }
194
+
195
+ protected function jsonResponse(array $payload, int $status)
196
+ {
197
+ return response()->json($payload, $status);
198
+ }
159
199
  }