@fleetbase/fleetops-engine 0.2.6 → 0.2.7

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 (307) hide show
  1. package/.gitattributes +14 -0
  2. package/.php-cs-fixer.cache +1 -0
  3. package/.php-cs-fixer.php +29 -0
  4. package/LICENSE.md +16 -4
  5. package/README.md +103 -13
  6. package/composer.json +85 -0
  7. package/extension.json +10 -0
  8. package/package.json +3 -3
  9. package/phpstan.neon.dist +8 -0
  10. package/phpunit.xml.dist +16 -0
  11. package/server/config/api.php +765 -0
  12. package/server/config/cache.stores.php +18 -0
  13. package/server/config/dompdf.php +242 -0
  14. package/server/config/fleetops.php +19 -0
  15. package/server/config/geocoder.php +108 -0
  16. package/server/data/globe.json +261 -0
  17. package/server/migrations/2023_04_27_053456_create_contacts_table.php +49 -0
  18. package/server/migrations/2023_04_27_053456_create_drivers_table.php +62 -0
  19. package/server/migrations/2023_04_27_053456_create_entities_table.php +67 -0
  20. package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +39 -0
  21. package/server/migrations/2023_04_27_053456_create_fleets_table.php +47 -0
  22. package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +50 -0
  23. package/server/migrations/2023_04_27_053456_create_integrated_vendors_table.php +44 -0
  24. package/server/migrations/2023_04_27_053456_create_issues_table.php +53 -0
  25. package/server/migrations/2023_04_27_053456_create_orders_table.php +70 -0
  26. package/server/migrations/2023_04_27_053456_create_payloads_table.php +51 -0
  27. package/server/migrations/2023_04_27_053456_create_places_table.php +62 -0
  28. package/server/migrations/2023_04_27_053456_create_positions_table.php +46 -0
  29. package/server/migrations/2023_04_27_053456_create_proofs_table.php +44 -0
  30. package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +46 -0
  31. package/server/migrations/2023_04_27_053456_create_routes_table.php +40 -0
  32. package/server/migrations/2023_04_27_053456_create_service_areas_table.php +47 -0
  33. package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +42 -0
  34. package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +47 -0
  35. package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +45 -0
  36. package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +47 -0
  37. package/server/migrations/2023_04_27_053456_create_service_rates_table.php +61 -0
  38. package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +46 -0
  39. package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +54 -0
  40. package/server/migrations/2023_04_27_053456_create_vehicles_table.php +84 -0
  41. package/server/migrations/2023_04_27_053456_create_vendors_table.php +56 -0
  42. package/server/migrations/2023_04_27_053456_create_waypoints_table.php +45 -0
  43. package/server/migrations/2023_04_27_053456_create_zones_table.php +46 -0
  44. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_companies_table.php +32 -0
  45. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_contacts_table.php +34 -0
  46. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_drivers_table.php +40 -0
  47. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_entities_table.php +40 -0
  48. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleet_drivers_table.php +34 -0
  49. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleets_table.php +36 -0
  50. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fuel_reports_table.php +36 -0
  51. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_integrated_vendors_table.php +34 -0
  52. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_issues_table.php +38 -0
  53. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_orders_table.php +48 -0
  54. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_payloads_table.php +40 -0
  55. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_places_table.php +32 -0
  56. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_positions_table.php +36 -0
  57. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_proofs_table.php +34 -0
  58. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_purchase_rates_table.php +38 -0
  59. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_routes_table.php +34 -0
  60. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_areas_table.php +34 -0
  61. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quote_items_table.php +32 -0
  62. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quotes_table.php +38 -0
  63. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_fees_table.php +32 -0
  64. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_parcel_fees_table.php +32 -0
  65. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rates_table.php +36 -0
  66. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_numbers_table.php +34 -0
  67. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_statuses_table.php +34 -0
  68. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vehicles_table.php +36 -0
  69. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vendors_table.php +40 -0
  70. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_waypoints_table.php +38 -0
  71. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_zones_table.php +34 -0
  72. package/server/migrations/2023_09_14_074512_update_vehicles_table.php +100 -0
  73. package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +44 -0
  74. package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +32 -0
  75. package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +45 -0
  76. package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +46 -0
  77. package/server/migrations/2023_10_05_074811_update_vehicle.php +42 -0
  78. package/server/resources/views/labels/default.php +165 -0
  79. package/server/src/Auth/Schemas/FleetOps.php +75 -0
  80. package/server/src/Casts/MultiPolygon.php +50 -0
  81. package/server/src/Casts/Point.php +109 -0
  82. package/server/src/Casts/Polygon.php +46 -0
  83. package/server/src/Console/Commands/DispatchAdhocOrders.php +137 -0
  84. package/server/src/Console/Commands/DispatchOrders.php +71 -0
  85. package/server/src/Console/Commands/TrackOrderDistanceAndTime.php +62 -0
  86. package/server/src/Events/DriverLocationChanged.php +174 -0
  87. package/server/src/Events/DriverSimulatedLocationChanged.php +183 -0
  88. package/server/src/Events/EntityDriverAssigned.php +36 -0
  89. package/server/src/Events/OrderCanceled.php +15 -0
  90. package/server/src/Events/OrderCompleted.php +15 -0
  91. package/server/src/Events/OrderDispatchFailed.php +42 -0
  92. package/server/src/Events/OrderDispatched.php +15 -0
  93. package/server/src/Events/OrderDriverAssigned.php +15 -0
  94. package/server/src/Events/OrderReady.php +15 -0
  95. package/server/src/Events/OrderStarted.php +15 -0
  96. package/server/src/Exceptions/IntegratedVendorException.php +18 -0
  97. package/server/src/Expansions/UserExpansion.php +63 -0
  98. package/server/src/Exports/ContactExport.php +56 -0
  99. package/server/src/Exports/DriverExport.php +61 -0
  100. package/server/src/Exports/FleetExport.php +53 -0
  101. package/server/src/Exports/PlaceExport.php +55 -0
  102. package/server/src/Exports/ServiceAreaExport.php +58 -0
  103. package/server/src/Exports/VehicleExport.php +57 -0
  104. package/server/src/Exports/VendorExport.php +57 -0
  105. package/server/src/Http/Controllers/Api/v1/ContactController.php +133 -0
  106. package/server/src/Http/Controllers/Api/v1/DriverController.php +691 -0
  107. package/server/src/Http/Controllers/Api/v1/EntityController.php +230 -0
  108. package/server/src/Http/Controllers/Api/v1/FleetController.php +146 -0
  109. package/server/src/Http/Controllers/Api/v1/LabelController.php +63 -0
  110. package/server/src/Http/Controllers/Api/v1/OrderController.php +1114 -0
  111. package/server/src/Http/Controllers/Api/v1/PayloadController.php +195 -0
  112. package/server/src/Http/Controllers/Api/v1/PlaceController.php +333 -0
  113. package/server/src/Http/Controllers/Api/v1/PurchaseRateController.php +199 -0
  114. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +133 -0
  115. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +381 -0
  116. package/server/src/Http/Controllers/Api/v1/ServiceRateController.php +223 -0
  117. package/server/src/Http/Controllers/Api/v1/TrackingNumberController.php +146 -0
  118. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +138 -0
  119. package/server/src/Http/Controllers/Api/v1/VehicleController.php +191 -0
  120. package/server/src/Http/Controllers/Api/v1/VendorController.php +159 -0
  121. package/server/src/Http/Controllers/Api/v1/ZoneController.php +146 -0
  122. package/server/src/Http/Controllers/FleetOpsController.php +13 -0
  123. package/server/src/Http/Controllers/Internal/v1/ContactController.php +69 -0
  124. package/server/src/Http/Controllers/Internal/v1/DriverController.php +261 -0
  125. package/server/src/Http/Controllers/Internal/v1/EntityController.php +15 -0
  126. package/server/src/Http/Controllers/Internal/v1/FleetController.php +152 -0
  127. package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +80 -0
  128. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +15 -0
  129. package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +96 -0
  130. package/server/src/Http/Controllers/Internal/v1/IntegratedVendorController.php +63 -0
  131. package/server/src/Http/Controllers/Internal/v1/IssueController.php +15 -0
  132. package/server/src/Http/Controllers/Internal/v1/LiveController.php +127 -0
  133. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +75 -0
  134. package/server/src/Http/Controllers/Internal/v1/MorphController.php +77 -0
  135. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +269 -0
  136. package/server/src/Http/Controllers/Internal/v1/OrderController.php +564 -0
  137. package/server/src/Http/Controllers/Internal/v1/PayloadController.php +15 -0
  138. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +163 -0
  139. package/server/src/Http/Controllers/Internal/v1/ProofController.php +139 -0
  140. package/server/src/Http/Controllers/Internal/v1/PurchaseRateController.php +15 -0
  141. package/server/src/Http/Controllers/Internal/v1/RouteController.php +15 -0
  142. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +32 -0
  143. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +345 -0
  144. package/server/src/Http/Controllers/Internal/v1/ServiceRateController.php +47 -0
  145. package/server/src/Http/Controllers/Internal/v1/SettingController.php +30 -0
  146. package/server/src/Http/Controllers/Internal/v1/TrackingNumberController.php +15 -0
  147. package/server/src/Http/Controllers/Internal/v1/TrackingStatusController.php +15 -0
  148. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +65 -0
  149. package/server/src/Http/Controllers/Internal/v1/VehicleDeviceController.php +15 -0
  150. package/server/src/Http/Controllers/Internal/v1/VendorController.php +120 -0
  151. package/server/src/Http/Controllers/Internal/v1/ZoneController.php +15 -0
  152. package/server/src/Http/Filter/ContactFilter.php +86 -0
  153. package/server/src/Http/Filter/DriverFilter.php +148 -0
  154. package/server/src/Http/Filter/FleetFilter.php +108 -0
  155. package/server/src/Http/Filter/IntegratedVendorFilter.php +13 -0
  156. package/server/src/Http/Filter/OrderFilter.php +242 -0
  157. package/server/src/Http/Filter/PlaceFilter.php +111 -0
  158. package/server/src/Http/Filter/ServiceAreaFilter.php +13 -0
  159. package/server/src/Http/Filter/ServiceQuoteFilter.php +13 -0
  160. package/server/src/Http/Filter/ServiceRateFilter.php +33 -0
  161. package/server/src/Http/Filter/TrackingStatusFilter.php +43 -0
  162. package/server/src/Http/Filter/VehicleFilter.php +91 -0
  163. package/server/src/Http/Filter/VendorFilter.php +83 -0
  164. package/server/src/Http/Filter/ZoneFilter.php +13 -0
  165. package/server/src/Http/Requests/CancelOrderRequest.php +31 -0
  166. package/server/src/Http/Requests/CreateContactRequest.php +33 -0
  167. package/server/src/Http/Requests/CreateDriverRequest.php +55 -0
  168. package/server/src/Http/Requests/CreateEntityRequest.php +43 -0
  169. package/server/src/Http/Requests/CreateFleetRequest.php +32 -0
  170. package/server/src/Http/Requests/CreateOrderRequest.php +66 -0
  171. package/server/src/Http/Requests/CreatePayloadRequest.php +37 -0
  172. package/server/src/Http/Requests/CreatePlaceRequest.php +38 -0
  173. package/server/src/Http/Requests/CreatePurchaseRateRequest.php +33 -0
  174. package/server/src/Http/Requests/CreateServiceAreaRequest.php +35 -0
  175. package/server/src/Http/Requests/CreateServiceQuoteRequest.php +29 -0
  176. package/server/src/Http/Requests/CreateServiceRateRequest.php +56 -0
  177. package/server/src/Http/Requests/CreateTrackingNumberRequest.php +34 -0
  178. package/server/src/Http/Requests/CreateTrackingStatusRequest.php +42 -0
  179. package/server/src/Http/Requests/CreateVehicleRequest.php +32 -0
  180. package/server/src/Http/Requests/CreateVendorRequest.php +35 -0
  181. package/server/src/Http/Requests/CreateZoneRequest.php +35 -0
  182. package/server/src/Http/Requests/DecodeTrackingNumberQR.php +30 -0
  183. package/server/src/Http/Requests/DriverSimulationRequest.php +46 -0
  184. package/server/src/Http/Requests/Internal/AssignOrderRequest.php +31 -0
  185. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +42 -0
  186. package/server/src/Http/Requests/Internal/FleetActionRequest.php +32 -0
  187. package/server/src/Http/Requests/Internal/UpdateDriverRequest.php +7 -0
  188. package/server/src/Http/Requests/QueryServiceQuotesRequest.php +41 -0
  189. package/server/src/Http/Requests/UpdateContactRequest.php +20 -0
  190. package/server/src/Http/Requests/UpdateDriverRequest.php +7 -0
  191. package/server/src/Http/Requests/UpdateEntityRequest.php +7 -0
  192. package/server/src/Http/Requests/UpdateFleetRequest.php +7 -0
  193. package/server/src/Http/Requests/UpdateOrderRequest.php +7 -0
  194. package/server/src/Http/Requests/UpdatePayloadRequest.php +7 -0
  195. package/server/src/Http/Requests/UpdatePlaceRequest.php +7 -0
  196. package/server/src/Http/Requests/UpdatePurchaseRateRequest.php +7 -0
  197. package/server/src/Http/Requests/UpdateServiceAreaRequest.php +29 -0
  198. package/server/src/Http/Requests/UpdateServiceQuoteRequest.php +29 -0
  199. package/server/src/Http/Requests/UpdateServiceRateRequest.php +29 -0
  200. package/server/src/Http/Requests/UpdateTrackingNumberRequest.php +7 -0
  201. package/server/src/Http/Requests/UpdateTrackingStatusRequest.php +32 -0
  202. package/server/src/Http/Requests/UpdateVehicleRequest.php +7 -0
  203. package/server/src/Http/Requests/UpdateVendorRequest.php +7 -0
  204. package/server/src/Http/Requests/UpdateZoneRequest.php +7 -0
  205. package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +37 -0
  206. package/server/src/Http/Resources/Internal/v1/Vehicle.php +33 -0
  207. package/server/src/Http/Resources/Internal/v1/Waypoint.php +34 -0
  208. package/server/src/Http/Resources/v1/Contact.php +62 -0
  209. package/server/src/Http/Resources/v1/CurrentJob.php +36 -0
  210. package/server/src/Http/Resources/v1/DeletedResource.php +61 -0
  211. package/server/src/Http/Resources/v1/Driver.php +89 -0
  212. package/server/src/Http/Resources/v1/Entity.php +107 -0
  213. package/server/src/Http/Resources/v1/Fleet.php +60 -0
  214. package/server/src/Http/Resources/v1/FuelReport.php +67 -0
  215. package/server/src/Http/Resources/v1/Order.php +131 -0
  216. package/server/src/Http/Resources/v1/Payload.php +94 -0
  217. package/server/src/Http/Resources/v1/Place.php +84 -0
  218. package/server/src/Http/Resources/v1/Proof.php +36 -0
  219. package/server/src/Http/Resources/v1/PurchaseRate.php +77 -0
  220. package/server/src/Http/Resources/v1/ServiceArea.php +55 -0
  221. package/server/src/Http/Resources/v1/ServiceQuote.php +57 -0
  222. package/server/src/Http/Resources/v1/ServiceRate.php +94 -0
  223. package/server/src/Http/Resources/v1/ServiceRateFee.php +58 -0
  224. package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +48 -0
  225. package/server/src/Http/Resources/v1/TrackingNumber.php +62 -0
  226. package/server/src/Http/Resources/v1/TrackingStatus.php +84 -0
  227. package/server/src/Http/Resources/v1/Vehicle.php +75 -0
  228. package/server/src/Http/Resources/v1/VehicleDevice.php +44 -0
  229. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +72 -0
  230. package/server/src/Http/Resources/v1/Vendor.php +72 -0
  231. package/server/src/Http/Resources/v1/Zone.php +60 -0
  232. package/server/src/Imports/OrdersImport.php +18 -0
  233. package/server/src/Integrations/Lalamove/Lalamove.php +678 -0
  234. package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +97 -0
  235. package/server/src/Integrations/Lalamove/LalamoveMarket.php +123 -0
  236. package/server/src/Integrations/Lalamove/LalamoveServiceType.php +161 -0
  237. package/server/src/Jobs/SimulateDrivingRoute.php +81 -0
  238. package/server/src/Jobs/SimulateWaypointReached.php +79 -0
  239. package/server/src/Listeners/HandleOrderCanceled.php +46 -0
  240. package/server/src/Listeners/HandleOrderCreated.php +23 -0
  241. package/server/src/Listeners/HandleOrderDispatchFailed.php +35 -0
  242. package/server/src/Listeners/HandleOrderDispatched.php +108 -0
  243. package/server/src/Listeners/HandleOrderDriverAssigned.php +42 -0
  244. package/server/src/Listeners/HandleOrderReady.php +27 -0
  245. package/server/src/Listeners/HandleUserRemovedFromCompany.php +31 -0
  246. package/server/src/Models/Contact.php +239 -0
  247. package/server/src/Models/Driver.php +543 -0
  248. package/server/src/Models/Entity.php +416 -0
  249. package/server/src/Models/Fleet.php +203 -0
  250. package/server/src/Models/FleetDriver.php +73 -0
  251. package/server/src/Models/FleetVehicle.php +73 -0
  252. package/server/src/Models/FuelReport.php +125 -0
  253. package/server/src/Models/IntegratedVendor.php +219 -0
  254. package/server/src/Models/Issue.php +111 -0
  255. package/server/src/Models/Order.php +1132 -0
  256. package/server/src/Models/Payload.php +699 -0
  257. package/server/src/Models/Place.php +656 -0
  258. package/server/src/Models/Position.php +119 -0
  259. package/server/src/Models/Proof.php +94 -0
  260. package/server/src/Models/PurchaseRate.php +208 -0
  261. package/server/src/Models/Route.php +128 -0
  262. package/server/src/Models/ServiceArea.php +161 -0
  263. package/server/src/Models/ServiceQuote.php +207 -0
  264. package/server/src/Models/ServiceQuoteItem.php +46 -0
  265. package/server/src/Models/ServiceRate.php +953 -0
  266. package/server/src/Models/ServiceRateFee.php +96 -0
  267. package/server/src/Models/ServiceRateParcelFee.php +116 -0
  268. package/server/src/Models/TrackingNumber.php +310 -0
  269. package/server/src/Models/TrackingStatus.php +177 -0
  270. package/server/src/Models/Vehicle.php +452 -0
  271. package/server/src/Models/VehicleDevice.php +79 -0
  272. package/server/src/Models/Vendor.php +244 -0
  273. package/server/src/Models/Waypoint.php +226 -0
  274. package/server/src/Models/Zone.php +95 -0
  275. package/server/src/Notifications/OrderAssigned.php +140 -0
  276. package/server/src/Notifications/OrderCanceled.php +129 -0
  277. package/server/src/Notifications/OrderDispatchFailed.php +81 -0
  278. package/server/src/Notifications/OrderDispatched.php +173 -0
  279. package/server/src/Notifications/OrderPing.php +162 -0
  280. package/server/src/Notifications/OrderSplit.php +56 -0
  281. package/server/src/Observers/DriverObserver.php +34 -0
  282. package/server/src/Observers/OrderObserver.php +34 -0
  283. package/server/src/Observers/PayloadObserver.php +30 -0
  284. package/server/src/Observers/PlaceObserver.php +26 -0
  285. package/server/src/Observers/PurchaseRateObserver.php +61 -0
  286. package/server/src/Observers/ServiceAreaObserver.php +35 -0
  287. package/server/src/Observers/ServiceRateObserver.php +78 -0
  288. package/server/src/Observers/TrackingNumberObserver.php +44 -0
  289. package/server/src/Observers/UserObserver.php +20 -0
  290. package/server/src/Observers/VehicleObserver.php +66 -0
  291. package/server/src/Providers/EventServiceProvider.php +30 -0
  292. package/server/src/Providers/FleetOpsServiceProvider.php +94 -0
  293. package/server/src/Rules/ResolvablePoint.php +37 -0
  294. package/server/src/Scopes/DriverScope.php +21 -0
  295. package/server/src/Support/Algo.php +55 -0
  296. package/server/src/Support/DistanceMatrix.php +27 -0
  297. package/server/src/Support/Encoding/Polyline.php +168 -0
  298. package/server/src/Support/Flow.php +622 -0
  299. package/server/src/Support/Geocoding.php +216 -0
  300. package/server/src/Support/IntegratedVendors.php +287 -0
  301. package/server/src/Support/Metrics.php +305 -0
  302. package/server/src/Support/OSRM.php +191 -0
  303. package/server/src/Support/ParsePhone.php +21 -0
  304. package/server/src/Support/Utils.php +1145 -0
  305. package/server/src/Traits/HasTrackingNumber.php +185 -0
  306. package/server/src/routes.php +381 -0
  307. package/server/tests/Feature.php +5 -0
@@ -0,0 +1,119 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Models\Model;
6
+ use Fleetbase\Traits\HasApiModelBehavior;
7
+ use Fleetbase\Traits\HasUuid;
8
+ use Fleetbase\Traits\TracksApiCredential;
9
+ use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
10
+
11
+ class Position extends Model
12
+ {
13
+ use HasUuid;
14
+ use TracksApiCredential;
15
+ use HasApiModelBehavior;
16
+ use SpatialTrait;
17
+
18
+ /**
19
+ * The database connection to use.
20
+ *
21
+ * @var string
22
+ */
23
+ protected $connection = 'mysql';
24
+
25
+ /**
26
+ * The attributes that are mass assignable.
27
+ *
28
+ * @var array
29
+ */
30
+ protected $fillable = ['uuid', 'company_uuid', 'order_uuid', 'destination_uuid', 'subject_uuid', 'subject_type', 'coordinates', 'heading', 'bearing', 'speed', 'altitude'];
31
+
32
+ /**
33
+ * The attributes that are spatial fields.
34
+ *
35
+ * @var array
36
+ */
37
+ protected $spatialFields = ['coordinates'];
38
+
39
+ /**
40
+ * The attributes that are mass assignable.
41
+ *
42
+ * @var array
43
+ */
44
+ protected $with = [];
45
+
46
+ /**
47
+ * Dynamic attributes.
48
+ *
49
+ * @var array
50
+ */
51
+ protected $appends = [];
52
+
53
+ /**
54
+ * Get filter parameters for this model.
55
+ *
56
+ * @var array
57
+ */
58
+ protected $filterParams = [];
59
+
60
+ /**
61
+ * Properties which activity needs to be logged.
62
+ *
63
+ * @var array
64
+ */
65
+ protected static $logAttributes = ['coordinates', 'heading', 'bearing', 'speed', 'altitude'];
66
+
67
+ /**
68
+ * We only want to log changed attributes.
69
+ *
70
+ * @var bool
71
+ */
72
+ protected static $logOnlyDirty = true;
73
+
74
+ /**
75
+ * Do not log empty changed.
76
+ *
77
+ * @var bool
78
+ */
79
+ protected static $submitEmptyLogs = false;
80
+
81
+ /**
82
+ * The name of the subject to log.
83
+ *
84
+ * @var string
85
+ */
86
+ protected static $logName = 'position';
87
+
88
+ /**
89
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
90
+ */
91
+ public function company()
92
+ {
93
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
94
+ }
95
+
96
+ /**
97
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
98
+ */
99
+ public function order()
100
+ {
101
+ return $this->belongsTo(Order::class);
102
+ }
103
+
104
+ /**
105
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
106
+ */
107
+ public function destination()
108
+ {
109
+ return $this->belongsTo(Place::class);
110
+ }
111
+
112
+ /**
113
+ * @return \Illuminate\Database\Eloquent\Relations\MorphTo
114
+ */
115
+ public function subject()
116
+ {
117
+ return $this->morphTo(__FUNCTION__, 'subject_type', 'subject_uuid')->withoutGlobalScopes();
118
+ }
119
+ }
@@ -0,0 +1,94 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\Models\Model;
7
+ use Fleetbase\Traits\HasApiModelBehavior;
8
+ use Fleetbase\Traits\HasPublicId;
9
+ use Fleetbase\Traits\HasUuid;
10
+ use Fleetbase\Traits\TracksApiCredential;
11
+
12
+ class Proof extends Model
13
+ {
14
+ use HasUuid;
15
+ use HasPublicId;
16
+ use HasApiModelBehavior;
17
+ use TracksApiCredential;
18
+
19
+ /**
20
+ * The database table used by the model.
21
+ *
22
+ * @var string
23
+ */
24
+ protected $table = 'proofs';
25
+
26
+ /**
27
+ * The type of public Id to generate.
28
+ *
29
+ * @var string
30
+ */
31
+ protected $publicIdType = 'proof';
32
+
33
+ /**
34
+ * The attributes that are mass assignable.
35
+ *
36
+ * @var array
37
+ */
38
+ protected $fillable = ['company_uuid', 'file_uuid', 'order_uuid', 'subject_uuid', 'subject_type', 'remarks', 'raw_data', 'data'];
39
+
40
+ /**
41
+ * The attributes that should be cast to native types.
42
+ *
43
+ * @var array
44
+ */
45
+ protected $casts = [
46
+ 'data' => Json::class,
47
+ ];
48
+
49
+ /**
50
+ * Dynamic attributes that are appended to object.
51
+ *
52
+ * @var array
53
+ */
54
+ protected $appends = ['file_url'];
55
+
56
+ /**
57
+ * The attributes excluded from the model's JSON form.
58
+ *
59
+ * @var array
60
+ */
61
+ protected $hidden = [];
62
+
63
+ /**
64
+ * The image file assosciated with the proof.
65
+ */
66
+ public function file()
67
+ {
68
+ return $this->belongsTo(\Fleetbase\Models\File::class);
69
+ }
70
+
71
+ /**
72
+ * The order proof was added to.
73
+ */
74
+ public function order()
75
+ {
76
+ return $this->belongsTo(Order::class);
77
+ }
78
+
79
+ /**
80
+ * Get avatar URL attribute.
81
+ */
82
+ public function getFileUrlAttribute()
83
+ {
84
+ return $this->fromCache('file.s3url', null);
85
+ }
86
+
87
+ /**
88
+ * Subject proof is for.
89
+ */
90
+ public function subject()
91
+ {
92
+ return $this->morphTo(__FUNCTION__, 'subject_type', 'subject_uuid')->withoutGlobalScopes();
93
+ }
94
+ }
@@ -0,0 +1,208 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\Models\Model;
8
+ use Fleetbase\Traits\HasApiModelBehavior;
9
+ use Fleetbase\Traits\HasMetaAttributes;
10
+ use Fleetbase\Traits\HasPublicId;
11
+ use Fleetbase\Traits\HasUuid;
12
+ use Fleetbase\Traits\SendsWebhooks;
13
+ use Fleetbase\Traits\TracksApiCredential;
14
+ use Illuminate\Http\Request;
15
+ use Illuminate\Support\Str;
16
+
17
+ class PurchaseRate extends Model
18
+ {
19
+ use HasUuid;
20
+ use HasPublicId;
21
+ use SendsWebhooks;
22
+ use TracksApiCredential;
23
+ use HasMetaAttributes;
24
+ use HasApiModelBehavior;
25
+
26
+ /**
27
+ * The database table used by the model.
28
+ *
29
+ * @var string
30
+ */
31
+ protected $table = 'purchase_rates';
32
+
33
+ /**
34
+ * The type of public Id to generate.
35
+ *
36
+ * @var string
37
+ */
38
+ protected $publicIdType = 'rate';
39
+
40
+ /**
41
+ * These attributes that can be queried.
42
+ *
43
+ * @var array
44
+ */
45
+ protected $searchableColumns = [];
46
+
47
+ /**
48
+ * The attributes that are mass assignable.
49
+ *
50
+ * @var array
51
+ */
52
+ protected $fillable = ['_key', 'customer_uuid', 'customer_type', 'company_uuid', 'service_quote_uuid', 'transaction_uuid', 'payload_uuid', 'status', 'meta'];
53
+
54
+ /**
55
+ * The attributes that should be cast to native types.
56
+ *
57
+ * @var array
58
+ */
59
+ protected $casts = [
60
+ 'meta' => Json::class,
61
+ ];
62
+
63
+ /**
64
+ * Dynamic attributes that are appended to object.
65
+ *
66
+ * @var array
67
+ */
68
+ protected $appends = ['customer_is_vendor', 'customer_is_contact', 'amount', 'currency', 'service_quote_id', 'order_id', 'transaction_id', 'customer_id'];
69
+
70
+ /**
71
+ * The attributes excluded from the model's JSON form.
72
+ *
73
+ * @var array
74
+ */
75
+ protected $hidden = [];
76
+
77
+ /**
78
+ * Order rate was purchased for.
79
+ *
80
+ * @var Model
81
+ */
82
+ public function order()
83
+ {
84
+ return $this->hasOne(Order::class);
85
+ }
86
+
87
+ /**
88
+ * Service quote for purchased rate.
89
+ *
90
+ * @var Model
91
+ */
92
+ public function serviceQuote()
93
+ {
94
+ return $this->belongsTo(ServiceQuote::class);
95
+ }
96
+
97
+ /**
98
+ * Transaction for purchased rate.
99
+ *
100
+ * @var Model
101
+ */
102
+ public function transaction()
103
+ {
104
+ return $this->belongsTo(\Fleetbase\Models\Transaction::class);
105
+ }
106
+
107
+ /**
108
+ * Payload for the order.
109
+ *
110
+ * @var Model
111
+ */
112
+ public function payload()
113
+ {
114
+ return $this->belongsTo(Payload::class);
115
+ }
116
+
117
+ /**
118
+ * Company who owns the order.
119
+ *
120
+ * @var Model
121
+ */
122
+ public function company()
123
+ {
124
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
125
+ }
126
+
127
+ /**
128
+ * The customer if any for this place.
129
+ *
130
+ * @var Model
131
+ */
132
+ public function customer()
133
+ {
134
+ return $this->morphTo(__FUNCTION__, 'customer_type', 'customer_uuid');
135
+ }
136
+
137
+ /**
138
+ * True of the customer is a vendor `customer_is_vendor`.
139
+ *
140
+ * @var bool
141
+ */
142
+ public function getCustomerIsVendorAttribute()
143
+ {
144
+ return Str::contains(strtolower($this->customer_type), 'vendor');
145
+ }
146
+
147
+ /**
148
+ * True of the customer is a contact `customer_is_contact`.
149
+ *
150
+ * @var bool
151
+ */
152
+ public function getCustomerIsContactAttribute()
153
+ {
154
+ return Str::contains(strtolower($this->customer_type), 'contact');
155
+ }
156
+
157
+ public function getAmountAttribute()
158
+ {
159
+ return data_get($this, 'serviceQuote.amount');
160
+ }
161
+
162
+ public function getCurrencyAttribute()
163
+ {
164
+ return data_get($this, 'serviceQuote.currency');
165
+ }
166
+
167
+ public function getServiceQuoteIdAttribute()
168
+ {
169
+ return data_get($this, 'serviceQuote.public_id');
170
+ }
171
+
172
+ public function getOrderIdAttribute()
173
+ {
174
+ return data_get($this, 'order.public_id');
175
+ }
176
+
177
+ public function getCustomerIdAttribute()
178
+ {
179
+ return data_get($this, 'customer.public_id');
180
+ }
181
+
182
+ public function getTransactionIdAttribute()
183
+ {
184
+ return data_get($this, 'transaction.public_id');
185
+ }
186
+
187
+ /**
188
+ * @return \Fleetbase\Models\PurchaseRate|null
189
+ */
190
+ public static function resolveFromRequest(Request $request): ?PurchaseRate
191
+ {
192
+ $purchaseRate = $request->or(['order.purchase_rate_uuid', 'purchase_rate', 'purchase_rate_id', 'order.purchase_rate']);
193
+
194
+ if (empty($purchaseRate)) {
195
+ return null;
196
+ }
197
+
198
+ if (Utils::isUuid($purchaseRate)) {
199
+ $purchaseRate = static::where('uuid', $purchaseRate)->first();
200
+ }
201
+
202
+ if (Utils::isPublicId($purchaseRate)) {
203
+ $purchaseRate = static::where('public_id', $purchaseRate)->first();
204
+ }
205
+
206
+ return $purchaseRate;
207
+ }
208
+ }
@@ -0,0 +1,128 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Casts\Json;
6
+ use Fleetbase\Models\Model;
7
+ use Fleetbase\Traits\HasUuid;
8
+ use Fleetbase\Traits\TracksApiCredential;
9
+
10
+ class Route extends Model
11
+ {
12
+ use HasUuid;
13
+ use TracksApiCredential;
14
+
15
+ /**
16
+ * The database table used by the model.
17
+ *
18
+ * @var string
19
+ */
20
+ protected $table = 'routes';
21
+
22
+ /**
23
+ * These attributes that can be queried.
24
+ *
25
+ * @var array
26
+ */
27
+ protected $searchableColumns = [];
28
+
29
+ /**
30
+ * The attributes that are mass assignable.
31
+ *
32
+ * @var array
33
+ */
34
+ protected $fillable = ['_key', 'company_uuid', 'order_uuid', 'details', 'total_time', 'total_distance'];
35
+
36
+ /**
37
+ * The attributes that should be cast to native types.
38
+ *
39
+ * @var array
40
+ */
41
+ protected $casts = [
42
+ 'details' => Json::class,
43
+ ];
44
+
45
+ /**
46
+ * Dynamic attributes that are appended to object.
47
+ *
48
+ * @var array
49
+ */
50
+ protected $appends = ['payload', 'driver', 'order_status', 'order_public_id', 'order_internal_id', 'order_dispatched_at'];
51
+
52
+ /**
53
+ * The attributes excluded from the model's JSON form.
54
+ *
55
+ * @var array
56
+ */
57
+ protected $hidden = ['order'];
58
+
59
+ /**
60
+ * Order for this Route.
61
+ *
62
+ * @var Model
63
+ */
64
+ public function order()
65
+ {
66
+ return $this->belongsTo(Order::class);
67
+ }
68
+
69
+ /**
70
+ * Payload for this routes order.
71
+ *
72
+ * @var Model
73
+ */
74
+ public function getPayloadAttribute()
75
+ {
76
+ return data_get($this, 'order.payload');
77
+ }
78
+
79
+ /**
80
+ * Driver for this routes order.
81
+ *
82
+ * @var Model
83
+ */
84
+ public function getDriverAttribute()
85
+ {
86
+ return data_get($this, 'order.driverAssigned');
87
+ }
88
+
89
+ /**
90
+ * Order status for this route.
91
+ *
92
+ * @var string
93
+ */
94
+ public function getOrderStatusAttribute()
95
+ {
96
+ return data_get($this, 'order.status');
97
+ }
98
+
99
+ /**
100
+ * Order id for this route.
101
+ *
102
+ * @var string
103
+ */
104
+ public function getOrderPublicIdAttribute()
105
+ {
106
+ return data_get($this, 'order.public_id');
107
+ }
108
+
109
+ /**
110
+ * Order internal id for this route.
111
+ *
112
+ * @var string
113
+ */
114
+ public function getOrderInternalIdAttribute()
115
+ {
116
+ return data_get($this, 'order.internal_id');
117
+ }
118
+
119
+ /**
120
+ * Order internal id for this route.
121
+ *
122
+ * @var string
123
+ */
124
+ public function getOrderDispatchedAtAttribute()
125
+ {
126
+ return data_get($this, 'order.dispatched_at');
127
+ }
128
+ }
@@ -0,0 +1,161 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\FleetOps\Casts\MultiPolygon;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\Models\Model;
8
+ use Fleetbase\Traits\HasApiModelBehavior;
9
+ use Fleetbase\Traits\HasPublicId;
10
+ use Fleetbase\Traits\HasUuid;
11
+ use Fleetbase\Traits\SendsWebhooks;
12
+ use Fleetbase\Traits\TracksApiCredential;
13
+ use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
14
+
15
+ class ServiceArea extends Model
16
+ {
17
+ use HasUuid;
18
+ use HasPublicId;
19
+ use SendsWebhooks;
20
+ use TracksApiCredential;
21
+ use SpatialTrait;
22
+ use HasApiModelBehavior;
23
+
24
+ /**
25
+ * The database table used by the model.
26
+ *
27
+ * @var string
28
+ */
29
+ protected $table = 'service_areas';
30
+
31
+ /**
32
+ * The type of public Id to generate.
33
+ *
34
+ * @var string
35
+ */
36
+ protected $publicIdType = 'sa';
37
+
38
+ /**
39
+ * These attributes that can be queried.
40
+ *
41
+ * @var array
42
+ */
43
+ protected $searchableColumns = [];
44
+
45
+ /**
46
+ * The attributes that are mass assignable.
47
+ *
48
+ * @var array
49
+ */
50
+ protected $fillable = ['_key', 'company_uuid', 'name', 'type', 'parent_uuid', 'border', 'color', 'stroke_color', 'status'];
51
+
52
+ /**
53
+ * The attributes that are spatial columns.
54
+ *
55
+ * @var array
56
+ */
57
+ protected $spatialFields = ['border'];
58
+
59
+ /**
60
+ * Relationships to load with model.
61
+ *
62
+ * @var array
63
+ */
64
+ protected $with = ['zones'];
65
+
66
+ /**
67
+ * Dynamic attributes that are appended to object.
68
+ *
69
+ * @var array
70
+ */
71
+ protected $appends = [];
72
+
73
+ /**
74
+ * The attributes excluded from the model's JSON form.
75
+ *
76
+ * @var array
77
+ */
78
+ protected $hidden = [];
79
+
80
+ /**
81
+ * The attributes that should be cast to native types.
82
+ *
83
+ * @var array
84
+ */
85
+ protected $casts = [
86
+ 'border' => MultiPolygon::class,
87
+ ];
88
+
89
+ /**
90
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
91
+ */
92
+ public function zones()
93
+ {
94
+ return $this->hasMany(Zone::class)->without(['serviceArea']);
95
+ }
96
+
97
+ /**
98
+ * Sets the status attribute for the model.
99
+ *
100
+ * @param string|null $status the status value, defaults to 'active' if not provided
101
+ *
102
+ * @return void
103
+ */
104
+ public function setStatusAttribute(?string $status = 'active')
105
+ {
106
+ $this->attributes['status'] = $status;
107
+ }
108
+
109
+ /**
110
+ * Sets the type attribute for the model.
111
+ *
112
+ * @param string|null $type the type value, defaults to 'country' if not provided
113
+ *
114
+ * @return void
115
+ */
116
+ public function setTypeAttribute(?string $type = 'country')
117
+ {
118
+ $this->attributes['type'] = $type;
119
+ }
120
+
121
+ /**
122
+ * Creates a 100m polygon from the coorddinates.
123
+ *
124
+ * @var Polygon
125
+ */
126
+ public function polygon($meters = 100)
127
+ {
128
+ return new \League\Geotools\Polygon\Polygon(Utils::coordsToCircle($this->latitude, $this->longitude, $meters));
129
+ }
130
+
131
+ /**
132
+ * Determines if coordinates fall within zone.
133
+ *
134
+ * @param int $latitude
135
+ * @param int $longitude
136
+ *
137
+ * @return bool
138
+ */
139
+ public function inZone($latitude, $longitude)
140
+ {
141
+ return $this->polygon()->pointInPolygon(new \League\Geotools\Coordinate\Coordinate([$latitude, $longitude]));
142
+ }
143
+
144
+ /**
145
+ * Determines if multiple coordinates fall within zone.
146
+ *
147
+ * @param array $coords
148
+ *
149
+ * @return bool
150
+ */
151
+ public function pointsInZone($coords)
152
+ {
153
+ foreach ($coords as $coord) {
154
+ if (!$this->polygon()->pointInPolygon(new \League\Geotools\Coordinate\Coordinate([$coord[0], $coord[1]]))) {
155
+ return false;
156
+ }
157
+ }
158
+
159
+ return true;
160
+ }
161
+ }