@fleetbase/fleetops-engine 0.2.6 → 0.2.8

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 (306) hide show
  1. package/.gitattributes +14 -0
  2. package/.php-cs-fixer.php +29 -0
  3. package/LICENSE.md +16 -4
  4. package/README.md +103 -13
  5. package/composer.json +85 -0
  6. package/extension.json +10 -0
  7. package/package.json +3 -3
  8. package/phpstan.neon.dist +8 -0
  9. package/phpunit.xml.dist +16 -0
  10. package/server/config/api.php +765 -0
  11. package/server/config/cache.stores.php +18 -0
  12. package/server/config/dompdf.php +242 -0
  13. package/server/config/fleetops.php +19 -0
  14. package/server/config/geocoder.php +108 -0
  15. package/server/data/globe.json +261 -0
  16. package/server/migrations/2023_04_27_053456_create_contacts_table.php +49 -0
  17. package/server/migrations/2023_04_27_053456_create_drivers_table.php +62 -0
  18. package/server/migrations/2023_04_27_053456_create_entities_table.php +67 -0
  19. package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +39 -0
  20. package/server/migrations/2023_04_27_053456_create_fleets_table.php +47 -0
  21. package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +50 -0
  22. package/server/migrations/2023_04_27_053456_create_integrated_vendors_table.php +44 -0
  23. package/server/migrations/2023_04_27_053456_create_issues_table.php +53 -0
  24. package/server/migrations/2023_04_27_053456_create_orders_table.php +70 -0
  25. package/server/migrations/2023_04_27_053456_create_payloads_table.php +51 -0
  26. package/server/migrations/2023_04_27_053456_create_places_table.php +62 -0
  27. package/server/migrations/2023_04_27_053456_create_positions_table.php +46 -0
  28. package/server/migrations/2023_04_27_053456_create_proofs_table.php +44 -0
  29. package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +46 -0
  30. package/server/migrations/2023_04_27_053456_create_routes_table.php +40 -0
  31. package/server/migrations/2023_04_27_053456_create_service_areas_table.php +47 -0
  32. package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +42 -0
  33. package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +47 -0
  34. package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +45 -0
  35. package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +47 -0
  36. package/server/migrations/2023_04_27_053456_create_service_rates_table.php +61 -0
  37. package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +46 -0
  38. package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +54 -0
  39. package/server/migrations/2023_04_27_053456_create_vehicles_table.php +84 -0
  40. package/server/migrations/2023_04_27_053456_create_vendors_table.php +56 -0
  41. package/server/migrations/2023_04_27_053456_create_waypoints_table.php +45 -0
  42. package/server/migrations/2023_04_27_053456_create_zones_table.php +46 -0
  43. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_companies_table.php +32 -0
  44. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_contacts_table.php +34 -0
  45. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_drivers_table.php +40 -0
  46. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_entities_table.php +40 -0
  47. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleet_drivers_table.php +34 -0
  48. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleets_table.php +36 -0
  49. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fuel_reports_table.php +36 -0
  50. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_integrated_vendors_table.php +34 -0
  51. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_issues_table.php +38 -0
  52. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_orders_table.php +48 -0
  53. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_payloads_table.php +40 -0
  54. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_places_table.php +32 -0
  55. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_positions_table.php +36 -0
  56. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_proofs_table.php +34 -0
  57. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_purchase_rates_table.php +38 -0
  58. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_routes_table.php +34 -0
  59. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_areas_table.php +34 -0
  60. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quote_items_table.php +32 -0
  61. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quotes_table.php +38 -0
  62. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_fees_table.php +32 -0
  63. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_parcel_fees_table.php +32 -0
  64. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rates_table.php +36 -0
  65. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_numbers_table.php +34 -0
  66. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_statuses_table.php +34 -0
  67. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vehicles_table.php +36 -0
  68. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vendors_table.php +40 -0
  69. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_waypoints_table.php +38 -0
  70. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_zones_table.php +34 -0
  71. package/server/migrations/2023_09_14_074512_update_vehicles_table.php +100 -0
  72. package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +44 -0
  73. package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +32 -0
  74. package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +45 -0
  75. package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +46 -0
  76. package/server/migrations/2023_10_05_074811_update_vehicle.php +42 -0
  77. package/server/resources/views/labels/default.php +165 -0
  78. package/server/src/Auth/Schemas/FleetOps.php +75 -0
  79. package/server/src/Casts/MultiPolygon.php +50 -0
  80. package/server/src/Casts/Point.php +109 -0
  81. package/server/src/Casts/Polygon.php +46 -0
  82. package/server/src/Console/Commands/DispatchAdhocOrders.php +137 -0
  83. package/server/src/Console/Commands/DispatchOrders.php +71 -0
  84. package/server/src/Console/Commands/TrackOrderDistanceAndTime.php +62 -0
  85. package/server/src/Events/DriverLocationChanged.php +174 -0
  86. package/server/src/Events/DriverSimulatedLocationChanged.php +183 -0
  87. package/server/src/Events/EntityDriverAssigned.php +36 -0
  88. package/server/src/Events/OrderCanceled.php +15 -0
  89. package/server/src/Events/OrderCompleted.php +15 -0
  90. package/server/src/Events/OrderDispatchFailed.php +42 -0
  91. package/server/src/Events/OrderDispatched.php +15 -0
  92. package/server/src/Events/OrderDriverAssigned.php +15 -0
  93. package/server/src/Events/OrderReady.php +15 -0
  94. package/server/src/Events/OrderStarted.php +15 -0
  95. package/server/src/Exceptions/IntegratedVendorException.php +18 -0
  96. package/server/src/Expansions/UserExpansion.php +63 -0
  97. package/server/src/Exports/ContactExport.php +56 -0
  98. package/server/src/Exports/DriverExport.php +61 -0
  99. package/server/src/Exports/FleetExport.php +53 -0
  100. package/server/src/Exports/PlaceExport.php +55 -0
  101. package/server/src/Exports/ServiceAreaExport.php +58 -0
  102. package/server/src/Exports/VehicleExport.php +57 -0
  103. package/server/src/Exports/VendorExport.php +57 -0
  104. package/server/src/Http/Controllers/Api/v1/ContactController.php +133 -0
  105. package/server/src/Http/Controllers/Api/v1/DriverController.php +691 -0
  106. package/server/src/Http/Controllers/Api/v1/EntityController.php +230 -0
  107. package/server/src/Http/Controllers/Api/v1/FleetController.php +146 -0
  108. package/server/src/Http/Controllers/Api/v1/LabelController.php +63 -0
  109. package/server/src/Http/Controllers/Api/v1/OrderController.php +1114 -0
  110. package/server/src/Http/Controllers/Api/v1/PayloadController.php +195 -0
  111. package/server/src/Http/Controllers/Api/v1/PlaceController.php +333 -0
  112. package/server/src/Http/Controllers/Api/v1/PurchaseRateController.php +199 -0
  113. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +133 -0
  114. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +381 -0
  115. package/server/src/Http/Controllers/Api/v1/ServiceRateController.php +223 -0
  116. package/server/src/Http/Controllers/Api/v1/TrackingNumberController.php +146 -0
  117. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +138 -0
  118. package/server/src/Http/Controllers/Api/v1/VehicleController.php +191 -0
  119. package/server/src/Http/Controllers/Api/v1/VendorController.php +159 -0
  120. package/server/src/Http/Controllers/Api/v1/ZoneController.php +146 -0
  121. package/server/src/Http/Controllers/FleetOpsController.php +13 -0
  122. package/server/src/Http/Controllers/Internal/v1/ContactController.php +69 -0
  123. package/server/src/Http/Controllers/Internal/v1/DriverController.php +261 -0
  124. package/server/src/Http/Controllers/Internal/v1/EntityController.php +15 -0
  125. package/server/src/Http/Controllers/Internal/v1/FleetController.php +152 -0
  126. package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +80 -0
  127. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +15 -0
  128. package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +96 -0
  129. package/server/src/Http/Controllers/Internal/v1/IntegratedVendorController.php +63 -0
  130. package/server/src/Http/Controllers/Internal/v1/IssueController.php +15 -0
  131. package/server/src/Http/Controllers/Internal/v1/LiveController.php +127 -0
  132. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +75 -0
  133. package/server/src/Http/Controllers/Internal/v1/MorphController.php +77 -0
  134. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +269 -0
  135. package/server/src/Http/Controllers/Internal/v1/OrderController.php +564 -0
  136. package/server/src/Http/Controllers/Internal/v1/PayloadController.php +15 -0
  137. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +163 -0
  138. package/server/src/Http/Controllers/Internal/v1/ProofController.php +139 -0
  139. package/server/src/Http/Controllers/Internal/v1/PurchaseRateController.php +15 -0
  140. package/server/src/Http/Controllers/Internal/v1/RouteController.php +15 -0
  141. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +32 -0
  142. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +345 -0
  143. package/server/src/Http/Controllers/Internal/v1/ServiceRateController.php +47 -0
  144. package/server/src/Http/Controllers/Internal/v1/SettingController.php +30 -0
  145. package/server/src/Http/Controllers/Internal/v1/TrackingNumberController.php +15 -0
  146. package/server/src/Http/Controllers/Internal/v1/TrackingStatusController.php +15 -0
  147. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +65 -0
  148. package/server/src/Http/Controllers/Internal/v1/VehicleDeviceController.php +15 -0
  149. package/server/src/Http/Controllers/Internal/v1/VendorController.php +120 -0
  150. package/server/src/Http/Controllers/Internal/v1/ZoneController.php +15 -0
  151. package/server/src/Http/Filter/ContactFilter.php +86 -0
  152. package/server/src/Http/Filter/DriverFilter.php +148 -0
  153. package/server/src/Http/Filter/FleetFilter.php +108 -0
  154. package/server/src/Http/Filter/IntegratedVendorFilter.php +13 -0
  155. package/server/src/Http/Filter/OrderFilter.php +242 -0
  156. package/server/src/Http/Filter/PlaceFilter.php +111 -0
  157. package/server/src/Http/Filter/ServiceAreaFilter.php +13 -0
  158. package/server/src/Http/Filter/ServiceQuoteFilter.php +13 -0
  159. package/server/src/Http/Filter/ServiceRateFilter.php +33 -0
  160. package/server/src/Http/Filter/TrackingStatusFilter.php +43 -0
  161. package/server/src/Http/Filter/VehicleFilter.php +91 -0
  162. package/server/src/Http/Filter/VendorFilter.php +83 -0
  163. package/server/src/Http/Filter/ZoneFilter.php +13 -0
  164. package/server/src/Http/Requests/CancelOrderRequest.php +31 -0
  165. package/server/src/Http/Requests/CreateContactRequest.php +33 -0
  166. package/server/src/Http/Requests/CreateDriverRequest.php +55 -0
  167. package/server/src/Http/Requests/CreateEntityRequest.php +43 -0
  168. package/server/src/Http/Requests/CreateFleetRequest.php +32 -0
  169. package/server/src/Http/Requests/CreateOrderRequest.php +66 -0
  170. package/server/src/Http/Requests/CreatePayloadRequest.php +37 -0
  171. package/server/src/Http/Requests/CreatePlaceRequest.php +38 -0
  172. package/server/src/Http/Requests/CreatePurchaseRateRequest.php +33 -0
  173. package/server/src/Http/Requests/CreateServiceAreaRequest.php +35 -0
  174. package/server/src/Http/Requests/CreateServiceQuoteRequest.php +29 -0
  175. package/server/src/Http/Requests/CreateServiceRateRequest.php +56 -0
  176. package/server/src/Http/Requests/CreateTrackingNumberRequest.php +34 -0
  177. package/server/src/Http/Requests/CreateTrackingStatusRequest.php +42 -0
  178. package/server/src/Http/Requests/CreateVehicleRequest.php +32 -0
  179. package/server/src/Http/Requests/CreateVendorRequest.php +35 -0
  180. package/server/src/Http/Requests/CreateZoneRequest.php +35 -0
  181. package/server/src/Http/Requests/DecodeTrackingNumberQR.php +30 -0
  182. package/server/src/Http/Requests/DriverSimulationRequest.php +46 -0
  183. package/server/src/Http/Requests/Internal/AssignOrderRequest.php +31 -0
  184. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +42 -0
  185. package/server/src/Http/Requests/Internal/FleetActionRequest.php +32 -0
  186. package/server/src/Http/Requests/Internal/UpdateDriverRequest.php +7 -0
  187. package/server/src/Http/Requests/QueryServiceQuotesRequest.php +41 -0
  188. package/server/src/Http/Requests/UpdateContactRequest.php +20 -0
  189. package/server/src/Http/Requests/UpdateDriverRequest.php +7 -0
  190. package/server/src/Http/Requests/UpdateEntityRequest.php +7 -0
  191. package/server/src/Http/Requests/UpdateFleetRequest.php +7 -0
  192. package/server/src/Http/Requests/UpdateOrderRequest.php +7 -0
  193. package/server/src/Http/Requests/UpdatePayloadRequest.php +7 -0
  194. package/server/src/Http/Requests/UpdatePlaceRequest.php +7 -0
  195. package/server/src/Http/Requests/UpdatePurchaseRateRequest.php +7 -0
  196. package/server/src/Http/Requests/UpdateServiceAreaRequest.php +29 -0
  197. package/server/src/Http/Requests/UpdateServiceQuoteRequest.php +29 -0
  198. package/server/src/Http/Requests/UpdateServiceRateRequest.php +29 -0
  199. package/server/src/Http/Requests/UpdateTrackingNumberRequest.php +7 -0
  200. package/server/src/Http/Requests/UpdateTrackingStatusRequest.php +32 -0
  201. package/server/src/Http/Requests/UpdateVehicleRequest.php +7 -0
  202. package/server/src/Http/Requests/UpdateVendorRequest.php +7 -0
  203. package/server/src/Http/Requests/UpdateZoneRequest.php +7 -0
  204. package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +37 -0
  205. package/server/src/Http/Resources/Internal/v1/Vehicle.php +33 -0
  206. package/server/src/Http/Resources/Internal/v1/Waypoint.php +34 -0
  207. package/server/src/Http/Resources/v1/Contact.php +62 -0
  208. package/server/src/Http/Resources/v1/CurrentJob.php +36 -0
  209. package/server/src/Http/Resources/v1/DeletedResource.php +61 -0
  210. package/server/src/Http/Resources/v1/Driver.php +89 -0
  211. package/server/src/Http/Resources/v1/Entity.php +107 -0
  212. package/server/src/Http/Resources/v1/Fleet.php +60 -0
  213. package/server/src/Http/Resources/v1/FuelReport.php +67 -0
  214. package/server/src/Http/Resources/v1/Order.php +131 -0
  215. package/server/src/Http/Resources/v1/Payload.php +94 -0
  216. package/server/src/Http/Resources/v1/Place.php +84 -0
  217. package/server/src/Http/Resources/v1/Proof.php +36 -0
  218. package/server/src/Http/Resources/v1/PurchaseRate.php +77 -0
  219. package/server/src/Http/Resources/v1/ServiceArea.php +55 -0
  220. package/server/src/Http/Resources/v1/ServiceQuote.php +57 -0
  221. package/server/src/Http/Resources/v1/ServiceRate.php +94 -0
  222. package/server/src/Http/Resources/v1/ServiceRateFee.php +58 -0
  223. package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +48 -0
  224. package/server/src/Http/Resources/v1/TrackingNumber.php +62 -0
  225. package/server/src/Http/Resources/v1/TrackingStatus.php +84 -0
  226. package/server/src/Http/Resources/v1/Vehicle.php +75 -0
  227. package/server/src/Http/Resources/v1/VehicleDevice.php +44 -0
  228. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +72 -0
  229. package/server/src/Http/Resources/v1/Vendor.php +72 -0
  230. package/server/src/Http/Resources/v1/Zone.php +60 -0
  231. package/server/src/Imports/OrdersImport.php +18 -0
  232. package/server/src/Integrations/Lalamove/Lalamove.php +678 -0
  233. package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +97 -0
  234. package/server/src/Integrations/Lalamove/LalamoveMarket.php +123 -0
  235. package/server/src/Integrations/Lalamove/LalamoveServiceType.php +161 -0
  236. package/server/src/Jobs/SimulateDrivingRoute.php +81 -0
  237. package/server/src/Jobs/SimulateWaypointReached.php +79 -0
  238. package/server/src/Listeners/HandleOrderCanceled.php +46 -0
  239. package/server/src/Listeners/HandleOrderCreated.php +23 -0
  240. package/server/src/Listeners/HandleOrderDispatchFailed.php +35 -0
  241. package/server/src/Listeners/HandleOrderDispatched.php +108 -0
  242. package/server/src/Listeners/HandleOrderDriverAssigned.php +42 -0
  243. package/server/src/Listeners/HandleOrderReady.php +27 -0
  244. package/server/src/Listeners/HandleUserRemovedFromCompany.php +31 -0
  245. package/server/src/Models/Contact.php +239 -0
  246. package/server/src/Models/Driver.php +543 -0
  247. package/server/src/Models/Entity.php +416 -0
  248. package/server/src/Models/Fleet.php +203 -0
  249. package/server/src/Models/FleetDriver.php +73 -0
  250. package/server/src/Models/FleetVehicle.php +73 -0
  251. package/server/src/Models/FuelReport.php +125 -0
  252. package/server/src/Models/IntegratedVendor.php +219 -0
  253. package/server/src/Models/Issue.php +111 -0
  254. package/server/src/Models/Order.php +1132 -0
  255. package/server/src/Models/Payload.php +699 -0
  256. package/server/src/Models/Place.php +656 -0
  257. package/server/src/Models/Position.php +119 -0
  258. package/server/src/Models/Proof.php +94 -0
  259. package/server/src/Models/PurchaseRate.php +208 -0
  260. package/server/src/Models/Route.php +128 -0
  261. package/server/src/Models/ServiceArea.php +161 -0
  262. package/server/src/Models/ServiceQuote.php +207 -0
  263. package/server/src/Models/ServiceQuoteItem.php +46 -0
  264. package/server/src/Models/ServiceRate.php +953 -0
  265. package/server/src/Models/ServiceRateFee.php +96 -0
  266. package/server/src/Models/ServiceRateParcelFee.php +116 -0
  267. package/server/src/Models/TrackingNumber.php +310 -0
  268. package/server/src/Models/TrackingStatus.php +177 -0
  269. package/server/src/Models/Vehicle.php +452 -0
  270. package/server/src/Models/VehicleDevice.php +79 -0
  271. package/server/src/Models/Vendor.php +244 -0
  272. package/server/src/Models/Waypoint.php +226 -0
  273. package/server/src/Models/Zone.php +95 -0
  274. package/server/src/Notifications/OrderAssigned.php +140 -0
  275. package/server/src/Notifications/OrderCanceled.php +129 -0
  276. package/server/src/Notifications/OrderDispatchFailed.php +81 -0
  277. package/server/src/Notifications/OrderDispatched.php +173 -0
  278. package/server/src/Notifications/OrderPing.php +162 -0
  279. package/server/src/Notifications/OrderSplit.php +56 -0
  280. package/server/src/Observers/DriverObserver.php +34 -0
  281. package/server/src/Observers/OrderObserver.php +34 -0
  282. package/server/src/Observers/PayloadObserver.php +30 -0
  283. package/server/src/Observers/PlaceObserver.php +26 -0
  284. package/server/src/Observers/PurchaseRateObserver.php +61 -0
  285. package/server/src/Observers/ServiceAreaObserver.php +35 -0
  286. package/server/src/Observers/ServiceRateObserver.php +78 -0
  287. package/server/src/Observers/TrackingNumberObserver.php +44 -0
  288. package/server/src/Observers/UserObserver.php +20 -0
  289. package/server/src/Observers/VehicleObserver.php +66 -0
  290. package/server/src/Providers/EventServiceProvider.php +30 -0
  291. package/server/src/Providers/FleetOpsServiceProvider.php +94 -0
  292. package/server/src/Rules/ResolvablePoint.php +37 -0
  293. package/server/src/Scopes/DriverScope.php +21 -0
  294. package/server/src/Support/Algo.php +55 -0
  295. package/server/src/Support/DistanceMatrix.php +27 -0
  296. package/server/src/Support/Encoding/Polyline.php +168 -0
  297. package/server/src/Support/Flow.php +622 -0
  298. package/server/src/Support/Geocoding.php +216 -0
  299. package/server/src/Support/IntegratedVendors.php +287 -0
  300. package/server/src/Support/Metrics.php +305 -0
  301. package/server/src/Support/OSRM.php +191 -0
  302. package/server/src/Support/ParsePhone.php +21 -0
  303. package/server/src/Support/Utils.php +1145 -0
  304. package/server/src/Traits/HasTrackingNumber.php +185 -0
  305. package/server/src/routes.php +381 -0
  306. package/server/tests/Feature.php +5 -0
@@ -0,0 +1,80 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Models\Contact;
6
+ use Fleetbase\FleetOps\Models\IntegratedVendor;
7
+ use Fleetbase\FleetOps\Models\Vendor;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Fleetbase\Http\Controllers\Controller;
10
+ use Illuminate\Http\Request;
11
+ use Illuminate\Support\Arr;
12
+ use Illuminate\Support\Str;
13
+
14
+ class FleetOpsLookupController extends Controller
15
+ {
16
+ /**
17
+ * Returns a collection of polymorphic resources as JSON.
18
+ *
19
+ * @param \Illuminate\Http\Request $request the HTTP request object
20
+ *
21
+ * @return \Illuminate\Http\Response the JSON response with the polymorphic resources
22
+ */
23
+ public function polymorphs(Request $request)
24
+ {
25
+ $query = $request->or(['query', 'q']);
26
+ $limit = $request->input('limit', 16);
27
+ $type = Str::lower(Arr::last($request->segments()));
28
+ $resourceType = Str::lower(Str::singular($type));
29
+
30
+ $contacts = Contact::where('name', 'like', '%' . $query . '%')
31
+ ->where('company_uuid', session('company'))
32
+ ->limit($limit)
33
+ ->get();
34
+
35
+ $vendors = Vendor::where('name', 'like', '%' . $query . '%')
36
+ ->where('company_uuid', session('company'))
37
+ ->limit($limit)
38
+ ->get();
39
+
40
+ $results = collect([...$contacts, ...$vendors])
41
+ ->sortBy('name')
42
+ ->map(
43
+ function ($resource) use ($type) {
44
+ $resource->setAttribute(Str::singular($type) . '_type', Str::lower(Utils::classBasename($resource)));
45
+
46
+ return $resource->toArray();
47
+ }
48
+ )
49
+ ->values();
50
+
51
+ // insert integrated vendors if user has any
52
+ if ($resourceType === 'facilitator') {
53
+ $integratedVendors = IntegratedVendor::where('company_uuid', session('company'))->get();
54
+
55
+ if ($integratedVendors->count()) {
56
+ $integratedVendors->each(
57
+ function ($integratedVendor) use ($results) {
58
+ $integratedVendor->setAttribute('facilitator_type', 'integrated-vendor');
59
+ $results->prepend($integratedVendor);
60
+ }
61
+ );
62
+ }
63
+ }
64
+
65
+ // convert to array
66
+ $results = $results->toArray();
67
+
68
+ // set resource type
69
+ $results = array_map(
70
+ function ($attributes) use ($resourceType) {
71
+ $attributes['type'] = $resourceType;
72
+
73
+ return $attributes;
74
+ },
75
+ $results
76
+ );
77
+
78
+ return response()->json([$type => $results]);
79
+ }
80
+ }
@@ -0,0 +1,15 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
6
+
7
+ class FuelReportController extends FleetOpsController
8
+ {
9
+ /**
10
+ * The resource to query.
11
+ *
12
+ * @var string
13
+ */
14
+ public $resource = 'fuel_report';
15
+ }
@@ -0,0 +1,96 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Models\Place;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\Http\Controllers\Controller;
8
+ use Geocoder\Laravel\Facades\Geocoder;
9
+ use Illuminate\Http\Request;
10
+
11
+ class GeocoderController extends Controller
12
+ {
13
+ /**
14
+ * Reverse geocodes the given coordinates and returns the results as JSON.
15
+ *
16
+ * @param \Illuminate\Http\Request $request the HTTP request object
17
+ *
18
+ * @return \Illuminate\Http\Response the JSON response with the geocoded results
19
+ */
20
+ public function reverse(Request $request)
21
+ {
22
+ $query = $request->or(['coordinates', 'query']);
23
+ $single = $request->boolean('single');
24
+
25
+ /** @var \Grimzy\LaravelMysqlSpatial\Types\Point $coordinates */
26
+ $coordinates = Utils::getPointFromCoordinates($query);
27
+
28
+ // if not a valid point error
29
+ if (!$coordinates instanceof \Grimzy\LaravelMysqlSpatial\Types\Point) {
30
+ return response()->error('Invalid coordinates provided.');
31
+ }
32
+
33
+ // get results
34
+ $results = Geocoder::reverse($coordinates->getLat(), $coordinates->getLng())->get();
35
+
36
+ if ($results->count()) {
37
+ if ($single) {
38
+ $googleAddress = $results->first();
39
+
40
+ return response()->json(Place::createFromGoogleAddress($googleAddress));
41
+ }
42
+
43
+ return response()->json(
44
+ $results->map(
45
+ function ($googleAddress) {
46
+ return Place::createFromGoogleAddress($googleAddress);
47
+ }
48
+ )
49
+ ->values()
50
+ ->toArray()
51
+ );
52
+ }
53
+
54
+ return response()->json([]);
55
+ }
56
+
57
+ /**
58
+ * Geocodes the given query and returns the results as JSON.
59
+ *
60
+ * @param \Illuminate\Http\Request $request the HTTP request object
61
+ *
62
+ * @return \Illuminate\Http\Response the JSON response with the geocoded results
63
+ */
64
+ public function geocode(Request $request)
65
+ {
66
+ $query = $request->input('query');
67
+ $single = $request->boolean('single');
68
+
69
+ if (is_array($query)) {
70
+ return $this->reverse($request);
71
+ }
72
+
73
+ // lookup
74
+ $results = Geocoder::geocode($query)->get();
75
+
76
+ if ($results->count()) {
77
+ if ($single) {
78
+ $googleAddress = $results->first();
79
+
80
+ return response()->json(Place::createFromGoogleAddress($googleAddress));
81
+ }
82
+
83
+ return response()->json(
84
+ $results->map(
85
+ function ($googleAddress) {
86
+ return Place::createFromGoogleAddress($googleAddress);
87
+ }
88
+ )
89
+ ->values()
90
+ ->toArray()
91
+ );
92
+ }
93
+
94
+ return response()->json([]);
95
+ }
96
+ }
@@ -0,0 +1,63 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
6
+ use Fleetbase\FleetOps\Models\IntegratedVendor;
7
+ use Fleetbase\FleetOps\Support\IntegratedVendors;
8
+ use Fleetbase\Http\Requests\Internal\BulkDeleteRequest;
9
+ use Illuminate\Http\Request;
10
+
11
+ class IntegratedVendorController extends FleetOpsController
12
+ {
13
+ /**
14
+ * The resource to query.
15
+ *
16
+ * @var string
17
+ */
18
+ public $resource = 'integrated_vendor';
19
+
20
+ /**
21
+ * Get available integrated vendors.
22
+ *
23
+ * @return \Illuminate\Http\Response
24
+ */
25
+ public function getSupported(Request $request)
26
+ {
27
+ $supported = IntegratedVendors::all()->map(function ($vendor) {
28
+ return $vendor->toArray();
29
+ });
30
+
31
+ return response()->json($supported);
32
+ }
33
+
34
+ /**
35
+ * Bulk delete resources.
36
+ *
37
+ * @return \Illuminate\Http\Response
38
+ */
39
+ public function bulkDelete(BulkDeleteRequest $request)
40
+ {
41
+ $ids = $request->input('ids', []);
42
+
43
+ if (!$ids) {
44
+ return response()->error('Nothing to delete.');
45
+ }
46
+
47
+ /** @var \Fleetbase\Models\IntegratedVendor */
48
+ $count = IntegratedVendor::whereIn('uuid', $ids)->count();
49
+ $deleted = IntegratedVendor::whereIn('uuid', $ids)->delete();
50
+
51
+ if (!$deleted) {
52
+ return response()->error('Failed to bulk delete vendors.');
53
+ }
54
+
55
+ return response()->json(
56
+ [
57
+ 'status' => 'OK',
58
+ 'message' => 'Deleted ' . $count . ' integrated vendors',
59
+ ],
60
+ 200
61
+ );
62
+ }
63
+ }
@@ -0,0 +1,15 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
6
+
7
+ class IssueController extends FleetOpsController
8
+ {
9
+ /**
10
+ * The resource to query.
11
+ *
12
+ * @var string
13
+ */
14
+ public $resource = 'issue';
15
+ }
@@ -0,0 +1,127 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Http\Filter\PlaceFilter;
6
+ use Fleetbase\FleetOps\Http\Resources\v1\Order as OrderResource;
7
+ use Fleetbase\FleetOps\Models\Driver;
8
+ use Fleetbase\FleetOps\Models\Order;
9
+ use Fleetbase\FleetOps\Models\Place;
10
+ use Fleetbase\FleetOps\Models\Route;
11
+ use Fleetbase\FleetOps\Models\Vehicle;
12
+ use Fleetbase\Http\Controllers\Controller;
13
+ use Illuminate\Http\Request;
14
+
15
+ /**
16
+ * Class LiveController.
17
+ */
18
+ class LiveController extends Controller
19
+ {
20
+ /**
21
+ * Get coordinates for active orders.
22
+ *
23
+ * @return \Illuminate\Http\JsonResponse
24
+ */
25
+ public function coordinates()
26
+ {
27
+ $coordinates = [];
28
+
29
+ // Fetch active orders for the current company
30
+ $orders = Order::where('company_uuid', session('company'))
31
+ ->whereNotIn('status', ['canceled', 'completed'])
32
+ ->get();
33
+
34
+ // Loop through each order to get its current destination location
35
+ foreach ($orders as $order) {
36
+ $coordinates[] = $order->getCurrentDestinationLocation();
37
+ }
38
+
39
+ return response()->json($coordinates);
40
+ }
41
+
42
+ /**
43
+ * Get active routes for the current company.
44
+ *
45
+ * @return \Illuminate\Http\JsonResponse
46
+ */
47
+ public function routes()
48
+ {
49
+ // Fetch routes that are not canceled or completed and have an assigned driver
50
+ $routes = Route::where('company_uuid', session('company'))
51
+ ->whereHas(
52
+ 'order',
53
+ function ($q) {
54
+ $q->whereNotIn('status', ['canceled', 'completed']);
55
+ $q->whereNotNull('driver_assigned_uuid');
56
+ $q->whereNull('deleted_at');
57
+ }
58
+ )
59
+ ->get();
60
+
61
+ return response()->json($routes);
62
+ }
63
+
64
+ /**
65
+ * Get active orders with payload for the current company.
66
+ *
67
+ * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
68
+ */
69
+ public function orders()
70
+ {
71
+ $orders = Order::where('company_uuid', session('company'))
72
+ ->whereHas('payload')
73
+ ->whereNotIn('status', ['canceled', 'completed'])
74
+ ->whereNotNull('driver_assigned_uuid')
75
+ ->whereNull('deleted_at')
76
+ ->get();
77
+
78
+ return OrderResource::collection($orders);
79
+ }
80
+
81
+ /**
82
+ * Get online drivers with active jobs for the current company.
83
+ *
84
+ * @return \Illuminate\Http\JsonResponse
85
+ */
86
+ public function drivers()
87
+ {
88
+ $drivers = Driver::where(['company_uuid' => session('company'), 'online' => 1])
89
+ ->whereHas(
90
+ 'currentJob',
91
+ function ($q) {
92
+ $q->whereNotIn('status', ['canceled', 'completed']);
93
+ }
94
+ )
95
+ ->get();
96
+
97
+ return response()->json($drivers);
98
+ }
99
+
100
+ /**
101
+ * Get online vehicles for the current company.
102
+ *
103
+ * @return \Illuminate\Http\JsonResponse
104
+ */
105
+ public function vehicles()
106
+ {
107
+ // Fetch vehicles that are online
108
+ $vehicles = Vehicle::where(['company_uuid' => session('company'), 'online' => 1])->get();
109
+
110
+ return response()->json($vehicles);
111
+ }
112
+
113
+ /**
114
+ * Get places based on filters for the current company.
115
+ *
116
+ * @return \Illuminate\Http\JsonResponse
117
+ */
118
+ public function places(Request $request)
119
+ {
120
+ // Query places based on filters
121
+ $places = Place::where(['company_uuid' => session('company')])
122
+ ->filter(new PlaceFilter($request))
123
+ ->get();
124
+
125
+ return response()->json($places);
126
+ }
127
+ }
@@ -0,0 +1,75 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Support\Metrics;
6
+ use Fleetbase\Http\Controllers\Controller;
7
+ use Illuminate\Http\Request;
8
+
9
+ class MetricsController extends Controller
10
+ {
11
+ public function all(Request $request)
12
+ {
13
+ $start = $request->date('start');
14
+ $end = $request->date('end');
15
+ $discover = $request->array('discover', []);
16
+
17
+ try {
18
+ $data = Metrics::forCompany($request->user()->company, $start, $end)->with($discover)->get();
19
+ } catch (\Exception $e) {
20
+ return response()->error($e->getMessage());
21
+ }
22
+
23
+ return response()->json($data);
24
+ }
25
+
26
+ public function dashboard(Request $request)
27
+ {
28
+ $start = $request->date('start');
29
+ $end = $request->date('end');
30
+ $discover = $request->array('discover', []);
31
+ $metrics = [];
32
+
33
+ try {
34
+ $metrics = Metrics::forCompany($request->user()->company, $start, $end)->with($discover)->get();
35
+ } catch (\Exception $e) {
36
+ return response()->error($e->getMessage());
37
+ }
38
+
39
+ // metrics format map
40
+ $metricsFormats = [
41
+ 'earnings' => 'money',
42
+ 'fuel_costs' => 'money',
43
+ 'total_distance_traveled' => 'meters',
44
+ ];
45
+
46
+ // dashboard config
47
+ $dashboardConfig = [
48
+ [
49
+ 'size' => 12,
50
+ 'title' => 'Fleet-Ops Metrics',
51
+ 'classList' => [],
52
+ 'component' => null,
53
+ 'queryParams' => [
54
+ 'start' => ['component' => 'date-picker'],
55
+ 'end' => ['component' => 'date-picker'],
56
+ ],
57
+ 'widgets' => collect($metrics)
58
+ ->map(function ($value, $key) use ($metricsFormats) {
59
+ return [
60
+ 'component' => 'count',
61
+ 'options' => [
62
+ 'format' => $metricsFormats[$key] ?? null,
63
+ 'title' => str_replace('_', ' ', \Illuminate\Support\Str::title($key)),
64
+ 'value' => $value,
65
+ ],
66
+ ];
67
+ })
68
+ ->values()
69
+ ->toArray(),
70
+ ],
71
+ ];
72
+
73
+ return response()->json(array_values($dashboardConfig));
74
+ }
75
+ }
@@ -0,0 +1,77 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Controllers\Internal\v1;
4
+
5
+ use Fleetbase\FleetOps\Models\Contact;
6
+ use Fleetbase\FleetOps\Models\IntegratedVendor;
7
+ use Fleetbase\FleetOps\Models\Vendor;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Fleetbase\Http\Controllers\Controller;
10
+ use Illuminate\Http\Request;
11
+ use Illuminate\Support\Str;
12
+
13
+ class MorphController extends Controller
14
+ {
15
+ /**
16
+ * Search facilitators or customers which is a comibined query on contacts or vendor resources.
17
+ *
18
+ * @return \Illuminate\Http\Response
19
+ */
20
+ public function queryCustomersOrFacilitators(Request $request)
21
+ {
22
+ $query = $request->input('query');
23
+ $limit = $request->input('limit', 12);
24
+ $type = Str::lower($request->segment(4));
25
+ $resourceType = Str::lower(Utils::singularize($type));
26
+
27
+ $contacts = Contact::searchWhere('name', $query)
28
+ ->where('company_uuid', session('company'))
29
+ ->limit($limit)
30
+ ->get();
31
+
32
+ $vendors = Vendor::searchWhere('name', $query)
33
+ ->where('company_uuid', session('company'))
34
+ ->limit($limit)
35
+ ->get();
36
+
37
+ $results = collect([...$contacts, ...$vendors])
38
+ ->sortBy('name')
39
+ ->map(
40
+ function ($resource) use ($type) {
41
+ $resource->setAttribute(Utils::singularize($type) . '_type', Str::lower(Utils::classBasename($resource)));
42
+
43
+ return $resource->toArray();
44
+ }
45
+ )
46
+ ->values();
47
+
48
+ // insert integrated vendors if user has any
49
+ if ($resourceType === 'facilitator') {
50
+ $integratedVendors = IntegratedVendor::where('company_uuid', session('company'))->get();
51
+
52
+ if ($integratedVendors->count()) {
53
+ $integratedVendors->each(
54
+ function ($integratedVendor) use ($results) {
55
+ $integratedVendor->setAttribute('facilitator_type', 'integrated-vendor');
56
+ $results->prepend($integratedVendor);
57
+ }
58
+ );
59
+ }
60
+ }
61
+
62
+ // convert to array
63
+ $results = $results->toArray();
64
+
65
+ // set resource type
66
+ $results = array_map(
67
+ function ($attributes) use ($resourceType) {
68
+ $attributes['type'] = $resourceType;
69
+
70
+ return $attributes;
71
+ },
72
+ $results
73
+ );
74
+
75
+ return response()->json([$type => $results]);
76
+ }
77
+ }