@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,185 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Traits;
4
+
5
+ use Fleetbase\FleetOps\Models\Proof;
6
+ use Fleetbase\FleetOps\Models\TrackingNumber;
7
+ use Fleetbase\FleetOps\Models\TrackingStatus;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Grimzy\LaravelMysqlSpatial\Types\Point;
10
+ use Illuminate\Database\Eloquent\Model;
11
+ use Illuminate\Support\Facades\DB;
12
+
13
+ trait HasTrackingNumber
14
+ {
15
+ public static function bootHasTrackingNumber(): void
16
+ {
17
+ static::created(function (Model $model): void {
18
+ $trackingNumberId = TrackingNumber::insertGetUuid([
19
+ 'company_uuid' => data_get($model, 'company_uuid', session('company')),
20
+ 'owner_uuid' => $model->uuid,
21
+ 'owner_type' => Utils::getModelClassName($model),
22
+ 'region' => $model->getPickupRegion(),
23
+ 'location' => $model->getPickupLocation(),
24
+ ], $model);
25
+
26
+ DB::table($model->getTable())->where('uuid', $model->uuid)->update(['tracking_number_uuid' => $trackingNumberId]);
27
+
28
+ if ($model->isFillable('tracking_number_uuid')) {
29
+ $model->tracking_number_uuid = $trackingNumberId;
30
+ }
31
+ });
32
+ }
33
+
34
+ public function setTrackingNumber(TrackingNumber $trackingNumber)
35
+ {
36
+ if (!$this->isFillable('tracking_number_uuid') || Utils::notEmpty($this->tracking_number_uuid)) {
37
+ return $this;
38
+ }
39
+
40
+ $this->tracking_number_uuid = $trackingNumber->uuid;
41
+ $this->setRelation('trackingNumber', $trackingNumber);
42
+ $this->save();
43
+
44
+ return $this;
45
+ }
46
+
47
+ /**
48
+ * Creates activity for this resource tracking number.
49
+ *
50
+ * @param string $status the short status update
51
+ * @param string $details the detailed update
52
+ * @param array|Point $location the location of the update, can be either [lat, lng] or a \Grimzy\LaravelMysqlSpatial\Types\Point instance
53
+ * @param string $code the onew word status code
54
+ * @param \Fleetbase\Models\Proof|string|null $proof resolvable proof of delivery/activity
55
+ *
56
+ * @return \Fleetbase\Models\TrackingStatus
57
+ */
58
+ public function createActivity(string $status, string $details = '', $location = [], string $code = '', $proof = null): TrackingStatus
59
+ {
60
+ $proof = static::resolveProof($proof);
61
+ $activity = TrackingStatus::create([
62
+ 'company_uuid' => data_get($this, 'company_uuid', session('company')),
63
+ 'tracking_number_uuid' => $this->tracking_number_uuid,
64
+ 'proof_uuid' => data_get($proof, 'uuid'),
65
+ 'status' => $status,
66
+ 'details' => $details,
67
+ 'location' => $this->getLocationAsPoint($location),
68
+ 'code' => TrackingStatus::prepareCode($code),
69
+ ]);
70
+
71
+ if (isset($this->trackingNumber)) {
72
+ $this->trackingNumber->flushAttributesCache();
73
+ }
74
+
75
+ if (method_exists($this, 'flushAttributesCache')) {
76
+ $this->flushAttributesCache();
77
+ }
78
+
79
+ return $activity;
80
+ }
81
+
82
+ /**
83
+ * Inserts activity for this resource tracking number.
84
+ *
85
+ * @param string $status the short status update
86
+ * @param string $details the detailed update
87
+ * @param array|Point $location the location of the update, can be either [lat, lng] or a \Grimzy\LaravelMysqlSpatial\Types\Point instance
88
+ * @param \Fleetbase\Models\Proof|string|null $proof resolvable proof of delivery/activity
89
+ * @param string $code the onew word status code
90
+ */
91
+ public function insertActivity(string $status, string $details = '', $location = [], string $code = '', $proof = null): string
92
+ {
93
+ $proof = static::resolveProof($proof);
94
+ $activityId = TrackingStatus::insertGetUuid([
95
+ 'company_uuid' => data_get($this, 'company_uuid', session('company')),
96
+ 'tracking_number_uuid' => $this->tracking_number_uuid,
97
+ 'proof_uuid' => data_get($proof, 'uuid'),
98
+ 'status' => $status,
99
+ 'details' => $details,
100
+ 'location' => $this->getLocationAsPoint($location),
101
+ 'code' => TrackingStatus::prepareCode($code),
102
+ ]);
103
+
104
+ if (isset($this->trackingNumber)) {
105
+ $this->trackingNumber->flushAttributesCache();
106
+ }
107
+
108
+ if (method_exists($this, 'flushAttributesCache')) {
109
+ $this->flushAttributesCache();
110
+ }
111
+
112
+ return $activityId;
113
+ }
114
+
115
+ public function getLocationAsPoint($location)
116
+ {
117
+ $point = null;
118
+
119
+ if ($location instanceof Point) {
120
+ $point = $location;
121
+ }
122
+
123
+ if (is_array($location)) {
124
+ $point = new Point(...$location);
125
+ }
126
+
127
+ if ($location === null || empty($location) || !$location) {
128
+ $point = new Point(0, 0);
129
+ }
130
+
131
+ return Utils::parsePointToWkt($point);
132
+ }
133
+
134
+ public function getPickupRegion()
135
+ {
136
+ $this->load(['payload']);
137
+
138
+ if ($this->payload) {
139
+ return $this->payload->getPickupRegion();
140
+ }
141
+
142
+ return 'SG';
143
+ }
144
+
145
+ public function getPickupLocation()
146
+ {
147
+ $this->load(['payload']);
148
+
149
+ if ($this->payload) {
150
+ return $this->payload->getPickupLocation();
151
+ }
152
+
153
+ return new Point(0, 0);
154
+ }
155
+
156
+ public function setStatus(?string $status, $andSave = true)
157
+ {
158
+ $this->status = $status;
159
+
160
+ if ($andSave) {
161
+ // static::where('uuid', $this->uuid)->update(['status' => $status]);
162
+ $this->save();
163
+ }
164
+
165
+ return $this;
166
+ }
167
+
168
+ /**
169
+ * Resolves proof to model instance.
170
+ *
171
+ * @return \Fleetbase\Models\Proof|null
172
+ */
173
+ public static function resolveProof($proof)
174
+ {
175
+ if (is_string($proof)) {
176
+ return Proof::where('public_id', $proof)->orWhere('uuid', $proof)->first();
177
+ }
178
+
179
+ if ($proof instanceof Proof) {
180
+ return $proof;
181
+ }
182
+
183
+ return null;
184
+ }
185
+ }
@@ -0,0 +1,381 @@
1
+ <?php
2
+
3
+ use Illuminate\Support\Facades\Route;
4
+
5
+ /*
6
+ |--------------------------------------------------------------------------
7
+ | API Routes
8
+ |--------------------------------------------------------------------------
9
+ |
10
+ | Here is where you can register API routes for your application. These
11
+ | routes are loaded by the RouteServiceProvider within a group which
12
+ | is assigned the "api" middleware group. Enjoy building your API!
13
+ |
14
+ */
15
+
16
+ Route::prefix(config('fleetops.api.routing.prefix', null))->namespace('Fleetbase\FleetOps\Http\Controllers')->group(
17
+ function ($router) {
18
+ /*
19
+ |--------------------------------------------------------------------------
20
+ | Consumable FleetOps API Routes
21
+ |--------------------------------------------------------------------------
22
+ |
23
+ | End-user API routes, these are routes that the SDK and applications will interface with, and require API credentials.
24
+ */
25
+ Route::prefix('v1')
26
+ ->middleware('fleetbase.api')
27
+ ->namespace('Api\v1')
28
+ ->group(function ($router) {
29
+ // drivers routes
30
+ $router->group(['prefix' => 'drivers'], function () use ($router) {
31
+ $router->post('register-device', 'DriverController@registerDevice');
32
+ $router->post('login-with-sms', 'DriverController@loginWithPhone');
33
+ $router->post('verify-code', 'DriverController@verifyCode');
34
+ $router->post('login', 'DriverController@login');
35
+ $router->post('{id}/simulate', 'DriverController@simulate');
36
+ $router->post('{id}/track', 'DriverController@track');
37
+ $router->post('{id}/register-device', 'DriverController@registerDevice');
38
+ $router->post('{id}/switch-organization', 'DriverController@switchOrganization');
39
+ $router->post('/', 'DriverController@create');
40
+ $router->get('/', 'DriverController@query');
41
+ $router->get('{id}', 'DriverController@find');
42
+ $router->get('{id}/organizations', 'DriverController@listOrganizations');
43
+ $router->put('{id}', 'DriverController@update');
44
+ $router->delete('{id}', 'DriverController@delete');
45
+ });
46
+ // contacts routes
47
+ $router->group(['prefix' => 'contacts'], function () use ($router) {
48
+ $router->post('/', 'ContactController@create');
49
+ $router->get('/', 'ContactController@query');
50
+ $router->get('{id}', 'ContactController@find');
51
+ $router->put('{id}', 'ContactController@update');
52
+ $router->delete('{id}', 'ContactController@delete');
53
+ });
54
+ // vendors routes
55
+ $router->group(['prefix' => 'vendors'], function () use ($router) {
56
+ $router->post('/', 'VendorController@create');
57
+ $router->get('/', 'VendorController@query');
58
+ $router->get('{id}', 'VendorController@find');
59
+ $router->put('{id}', 'VendorController@update');
60
+ $router->delete('{id}', 'VendorController@delete');
61
+ });
62
+ // orders routes
63
+ $router->group(['prefix' => 'orders'], function () use ($router) {
64
+ $router->post('/', 'OrderController@create');
65
+ $router->get('/', 'OrderController@query');
66
+ $router->get('{id}', 'OrderController@find');
67
+ $router->get('{id}/distance-and-time', 'OrderController@getDistanceMatrix');
68
+ $router->post('{id}/dispatch', 'OrderController@dispatchOrder');
69
+ $router->post('{id}/start', 'OrderController@startOrder');
70
+ $router->delete('{id}/cancel', 'OrderController@cancelOrder');
71
+ $router->post('{id}/update-activity', 'OrderController@updateActivity');
72
+ $router->post('{id}/complete', 'OrderController@completeOrder');
73
+ $router->get('{id}/next-activity', 'OrderController@getNextActivity');
74
+ $router->post('{id}/set-destination/{placeId}', 'OrderController@setDestination');
75
+ $router->post('{id}/capture-signature/{subjectId?}', 'OrderController@captureSignature');
76
+ $router->post('{id}/capture-qr/{subjectId?}', 'OrderController@captureQrScan');
77
+ $router->put('{id}', 'OrderController@update');
78
+ $router->delete('{id}', 'OrderController@delete');
79
+ });
80
+ // entities routes
81
+ $router->group(['prefix' => 'entities'], function () use ($router) {
82
+ $router->post('/', 'EntityController@create');
83
+ $router->get('/', 'EntityController@query');
84
+ $router->get('{id}', 'EntityController@find');
85
+ $router->put('{id}', 'EntityController@update');
86
+ $router->delete('{id}', 'EntityController@delete');
87
+ });
88
+ // payloads routes
89
+ $router->group(['prefix' => 'payloads'], function () use ($router) {
90
+ $router->post('/', 'PayloadController@create');
91
+ $router->get('/', 'PayloadController@query');
92
+ $router->get('{id}', 'PayloadController@find');
93
+ $router->put('{id}', 'PayloadController@update');
94
+ $router->delete('{id}', 'PayloadController@delete');
95
+ });
96
+ // purchase-rates routes
97
+ $router->group(['prefix' => 'purchase-rates'], function () use ($router) {
98
+ $router->post('/', 'PurchaseRateController@create');
99
+ $router->get('/', 'PurchaseRateController@query');
100
+ $router->get('{id}', 'PurchaseRateController@find');
101
+ });
102
+ // places routes
103
+ $router->group(['prefix' => 'places'], function () use ($router) {
104
+ $router->post('/', 'PlaceController@create');
105
+ $router->get('/', 'PlaceController@query');
106
+ $router->get('search', 'PlaceController@search');
107
+ $router->get('{id}', 'PlaceController@find');
108
+ $router->put('{id}', 'PlaceController@update');
109
+ $router->delete('{id}', 'PlaceController@delete');
110
+ });
111
+ // zones routes
112
+ $router->group(['prefix' => 'zones'], function () use ($router) {
113
+ $router->post('/', 'ZoneController@create');
114
+ $router->get('/', 'ZoneController@query');
115
+ $router->get('{id}', 'ZoneController@find');
116
+ $router->put('{id}', 'ZoneController@update');
117
+ $router->delete('{id}', 'ZoneController@delete');
118
+ });
119
+ // service-areas routes
120
+ $router->group(['prefix' => 'service-areas'], function () use ($router) {
121
+ $router->post('/', 'ServiceAreaController@create');
122
+ $router->get('/', 'ServiceAreaController@query');
123
+ $router->get('{id}', 'ServiceAreaController@find');
124
+ $router->put('{id}', 'ServiceAreaController@update');
125
+ $router->delete('{id}', 'ServiceAreaController@delete');
126
+ });
127
+ // service-rates routes
128
+ $router->group(['prefix' => 'service-rates'], function () use ($router) {
129
+ $router->post('/', 'ServiceRateController@create');
130
+ $router->get('/', 'ServiceRateController@query');
131
+ $router->get('{id}', 'ServiceRateController@find');
132
+ $router->put('{id}', 'ServiceRateController@update');
133
+ $router->delete('{id}', 'ServiceRateController@delete');
134
+ });
135
+ // service-quotes routes
136
+ $router->group(['prefix' => 'service-quotes'], function () use ($router) {
137
+ $router->get('/', 'ServiceQuoteController@query');
138
+ $router->get('{id}', 'ServiceQuoteController@find');
139
+ });
140
+ // tracking-numbers routes
141
+ $router->group(['prefix' => 'tracking-numbers'], function () use ($router) {
142
+ $router->post('/', 'TrackingNumberController@create');
143
+ $router->post('from-qr', 'TrackingNumberController@fromQR');
144
+ $router->get('/', 'TrackingNumberController@query');
145
+ $router->get('{id}', 'TrackingNumberController@find');
146
+ $router->delete('{id}', 'TrackingNumberController@delete');
147
+ });
148
+ // tracking-statuses routes
149
+ $router->group(['prefix' => 'tracking-statuses'], function () use ($router) {
150
+ $router->post('/', 'TrackingStatusController@create');
151
+ $router->get('/', 'TrackingStatusController@query');
152
+ $router->get('{id}', 'TrackingStatusController@find');
153
+ $router->put('{id}', 'TrackingStatusController@update');
154
+ $router->delete('{id}', 'TrackingStatusController@delete');
155
+ });
156
+ // vehicle routes
157
+ $router->group(['prefix' => 'vehicles'], function () use ($router) {
158
+ $router->post('/', 'VehicleController@create');
159
+ $router->get('/', 'VehicleController@query');
160
+ $router->get('{id}', 'VehicleController@find');
161
+ $router->put('{id}', 'VehicleController@update');
162
+ $router->delete('{id}', 'VehicleController@delete');
163
+ });
164
+ // fleets routes
165
+ $router->group(['prefix' => 'fleets'], function () use ($router) {
166
+ $router->post('/', 'FleetController@create');
167
+ $router->get('/', 'FleetController@query');
168
+ $router->get('{id}', 'FleetController@find');
169
+ $router->put('{id}', 'FleetController@update');
170
+ $router->delete('{id}', 'FleetController@delete');
171
+ });
172
+ // labels routes
173
+ $router->group(['prefix' => 'labels'], function () use ($router) {
174
+ $router->get('{id}', 'LabelController@getLabel');
175
+ });
176
+ });
177
+
178
+ /*
179
+ |--------------------------------------------------------------------------
180
+ | Internal FleetOps API Routes
181
+ |--------------------------------------------------------------------------
182
+ |
183
+ | Primary internal routes for console.
184
+ */
185
+ $router->prefix(config('fleetops.api.routing.internal_prefix', 'int'))->namespace('Internal')->group(
186
+ function ($router) {
187
+ $router->group(
188
+ ['prefix' => 'v1', 'namespace' => 'v1', 'middleware' => ['fleetbase.protected']],
189
+ function ($router) {
190
+ $router->fleetbaseRoutes(
191
+ 'contacts',
192
+ function ($router, $controller) {
193
+ $router->get('export', $controller('export'));
194
+ $router->get('facilitators/{id}', $controller('getAsFacilitator'));
195
+ $router->get('customers/{id}', $controller('getAsCustomer'));
196
+ $router->delete('bulk-delete', $controller('bulkDelete'));
197
+ }
198
+ );
199
+ $router->fleetbaseRoutes(
200
+ 'drivers',
201
+ function ($router, $controller) {
202
+ $router->get('statuses', $controller('statuses'));
203
+ $router->get('export', $controller('export'));
204
+ $router->delete('bulk-delete', $controller('bulkDelete'));
205
+ }
206
+ );
207
+ $router->fleetbaseRoutes('entities');
208
+ $router->fleetbaseRoutes(
209
+ 'fleets',
210
+ function ($router, $controller) {
211
+ $router->post('assign-driver', $controller('assignDriver'));
212
+ $router->post('remove-driver', $controller('removeDriver'));
213
+ $router->post('assign-vehicle', $controller('assignVehicle'));
214
+ $router->post('remove-vehicle', $controller('removeVehicle'));
215
+ $router->get('export', $controller('export'));
216
+ $router->delete('bulk-delete', $controller('bulkDelete'));
217
+ }
218
+ );
219
+ $router->fleetbaseRoutes(
220
+ 'fuel-reports',
221
+ function ($router, $controller) {
222
+ $router->get('export', $controller('export'));
223
+ $router->delete('bulk-delete', $controller('bulkDelete'));
224
+ }
225
+ );
226
+ $router->fleetbaseRoutes(
227
+ 'issues',
228
+ function ($router, $controller) {
229
+ $router->get('export', $controller('export'));
230
+ $router->delete('bulk-delete', $controller('bulkDelete'));
231
+ }
232
+ );
233
+ $router->fleetbaseRoutes(
234
+ 'integrated-vendors',
235
+ function ($router, $controller) {
236
+ $router->get('supported', $controller('getSupported'));
237
+ $router->delete('bulk-delete', $controller('bulkDelete'));
238
+ }
239
+ );
240
+ $router->fleetbaseRoutes(
241
+ 'orders',
242
+ function ($router, $controller) {
243
+ $router->get('search', $controller('search'));
244
+ $router->get('statuses', $controller('statuses'));
245
+ $router->get('types', $controller('types'));
246
+ $router->get('label/{id}', $controller('label'));
247
+ $router->get('next-activity/{id}', $controller('nextActivity'));
248
+ $router->post('process-imports', $controller('importFromFiles'));
249
+ $router->patch('update-activity/{id}', $controller('updateActivity'));
250
+ $router->patch('bulk-cancel', $controller('bulkCancel'));
251
+ $router->patch('cancel', $controller('cancel'));
252
+ $router->patch('dispatch', $controller('dispatchOrder'));
253
+ $router->patch('start', $controller('start'));
254
+ $router->delete('bulk-delete', $controller('bulkDelete'));
255
+ }
256
+ );
257
+ $router->fleetbaseRoutes('payloads');
258
+ $router->fleetbaseRoutes(
259
+ 'places',
260
+ function ($router, $controller) {
261
+ $router->get('search', $controller('search'))->middleware('cache.headers:private;max_age=3600');
262
+ $router->get('lookup', $controller('geocode'))->middleware('cache.headers:private;max_age=3600');
263
+ $router->get('export', $controller('export'));
264
+ $router->delete('bulk-delete', $controller('bulkDelete'));
265
+ }
266
+ );
267
+ $router->fleetbaseRoutes('proofs');
268
+ $router->fleetbaseRoutes('purchase-rates');
269
+ $router->fleetbaseRoutes('routes');
270
+ $router->fleetbaseRoutes(
271
+ 'service-areas',
272
+ function ($router, $controller) {
273
+ $router->get('export', $controller('export'));
274
+ $router->delete('bulk-delete', $controller('bulkDelete'));
275
+ }
276
+ );
277
+ $router->fleetbaseRoutes('zones');
278
+ $router->fleetbaseRoutes(
279
+ 'service-quotes',
280
+ function ($router, $controller) {
281
+ $router->post('preliminary', $controller('preliminaryQuery'));
282
+ }
283
+ );
284
+ $router->fleetbaseRoutes(
285
+ 'service-rates',
286
+ function ($router, $controller) {
287
+ $router->get('for-route', $controller('getServicesForRoute'));
288
+ }
289
+ );
290
+ $router->fleetbaseRoutes('tracking-numbers');
291
+ $router->fleetbaseRoutes('tracking-statuses');
292
+ $router->fleetbaseRoutes(
293
+ 'vehicles',
294
+ function ($router, $controller) {
295
+ $router->get('statuses', $controller('statuses'));
296
+ $router->get('avatars', $controller('avatars'));
297
+ $router->get('export', $controller('export'));
298
+ $router->delete('bulk-delete', $controller('bulkDelete'));
299
+ }
300
+ );
301
+ $router->fleetbaseRoutes('vehicle-devices');
302
+ $router->fleetbaseRoutes(
303
+ 'vendors',
304
+ function ($router, $controller) {
305
+ $router->get('statuses', $controller('statuses'));
306
+ $router->get('export', $controller('export'));
307
+ $router->get('facilitators/{id}', $controller('getAsFacilitator'));
308
+ $router->get('customers/{id}', $controller('getAsCustomer'));
309
+ $router->delete('bulk-delete', $controller('bulkDelete'));
310
+ }
311
+ );
312
+ $router->group(
313
+ ['prefix' => 'query'],
314
+ function () use ($router) {
315
+ $router->get('customers', 'MorphController@queryCustomersOrFacilitators');
316
+ $router->get('facilitators', 'MorphController@queryCustomersOrFacilitators');
317
+ }
318
+ );
319
+ $router->group(
320
+ ['prefix' => 'geocoder'],
321
+ function ($router) {
322
+ $router->get('reverse', 'GeocoderController@reverse');
323
+ $router->get('query', 'GeocoderController@geocode');
324
+ }
325
+ );
326
+ $router->group(
327
+ ['prefix' => 'fleet-ops'],
328
+ function ($router) {
329
+ /* Dashboard Build */
330
+ $router->get('dashboard', 'MetricsController@dashboard');
331
+
332
+ $router->group(
333
+ ['prefix' => 'order-configs'],
334
+ function () use ($router) {
335
+ $router->get('get-installed', 'OrderConfigController@getInstalled');
336
+ $router->get('dynamic-meta-fields', 'OrderConfigController@getDynamicMetaFields');
337
+ $router->post('save', 'OrderConfigController@save');
338
+ $router->post('new', 'OrderConfigController@new');
339
+ $router->post('clone', 'OrderConfigController@clone');
340
+ $router->delete('{id}', 'OrderConfigController@delete');
341
+ }
342
+ );
343
+ $router->group(
344
+ ['prefix' => 'lookup'],
345
+ function ($router) {
346
+ $router->get('customers', 'FleetOpsLookupController@polymorphs');
347
+ $router->get('facilitators', 'FleetOpsLookupController@polymorphs');
348
+ }
349
+ );
350
+ $router->group(
351
+ ['prefix' => 'live'],
352
+ function ($router) {
353
+ $router->get('coordinates', 'LiveController@coordinates');
354
+ $router->get('routes', 'LiveController@routes');
355
+ $router->get('orders', 'LiveController@orders');
356
+ $router->get('drivers', 'LiveController@drivers');
357
+ $router->get('vehicles', 'LiveController@vehicles');
358
+ $router->get('places', 'LiveController@places');
359
+ }
360
+ );
361
+ $router->group(
362
+ ['prefix' => 'settings'],
363
+ function ($router) {
364
+ $router->get('visibility', 'SettingController@getVisibilitySettings');
365
+ $router->post('visibility', 'SettingController@saveVisibilitySettings');
366
+ }
367
+ );
368
+ $router->group(
369
+ ['prefix' => 'metrics'],
370
+ function ($router) {
371
+ $router->get('all', 'MetricsController@all');
372
+ }
373
+ );
374
+ }
375
+ );
376
+ }
377
+ );
378
+ }
379
+ );
380
+ }
381
+ );
@@ -0,0 +1,5 @@
1
+ <?php
2
+
3
+ test('example', function () {
4
+ expect(true)->toBeTrue();
5
+ });