@fleetbase/fleetops-engine 0.2.5 → 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 (325) 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/addon/components/admin/visibility-controls.hbs +12 -0
  7. package/addon/components/admin/visibility-controls.js +82 -0
  8. package/addon/components/fleet-panel.js +13 -4
  9. package/addon/components/fleet-vehicle-listing.hbs +1 -1
  10. package/addon/components/layout/fleet-ops-sidebar.hbs +26 -0
  11. package/addon/components/layout/fleet-ops-sidebar.js +129 -0
  12. package/addon/engine.js +19 -0
  13. package/addon/helpers/is-section-visible.js +5 -0
  14. package/addon/routes/application.js +6 -2
  15. package/addon/routes/virtual.js +10 -0
  16. package/addon/routes.js +1 -0
  17. package/addon/templates/application.hbs +1 -19
  18. package/addon/templates/virtual.hbs +9 -0
  19. package/app/components/admin/visibility-controls.js +1 -0
  20. package/app/components/layout/fleet-ops-sidebar.js +1 -0
  21. package/app/helpers/is-section-visible.js +1 -0
  22. package/app/routes/virtual.js +1 -0
  23. package/app/templates/virtual.js +1 -0
  24. package/composer.json +85 -0
  25. package/extension.json +10 -0
  26. package/package.json +6 -6
  27. package/phpstan.neon.dist +8 -0
  28. package/phpunit.xml.dist +16 -0
  29. package/server/config/api.php +765 -0
  30. package/server/config/cache.stores.php +18 -0
  31. package/server/config/dompdf.php +242 -0
  32. package/server/config/fleetops.php +19 -0
  33. package/server/config/geocoder.php +108 -0
  34. package/server/data/globe.json +261 -0
  35. package/server/migrations/2023_04_27_053456_create_contacts_table.php +49 -0
  36. package/server/migrations/2023_04_27_053456_create_drivers_table.php +62 -0
  37. package/server/migrations/2023_04_27_053456_create_entities_table.php +67 -0
  38. package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +39 -0
  39. package/server/migrations/2023_04_27_053456_create_fleets_table.php +47 -0
  40. package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +50 -0
  41. package/server/migrations/2023_04_27_053456_create_integrated_vendors_table.php +44 -0
  42. package/server/migrations/2023_04_27_053456_create_issues_table.php +53 -0
  43. package/server/migrations/2023_04_27_053456_create_orders_table.php +70 -0
  44. package/server/migrations/2023_04_27_053456_create_payloads_table.php +51 -0
  45. package/server/migrations/2023_04_27_053456_create_places_table.php +62 -0
  46. package/server/migrations/2023_04_27_053456_create_positions_table.php +46 -0
  47. package/server/migrations/2023_04_27_053456_create_proofs_table.php +44 -0
  48. package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +46 -0
  49. package/server/migrations/2023_04_27_053456_create_routes_table.php +40 -0
  50. package/server/migrations/2023_04_27_053456_create_service_areas_table.php +47 -0
  51. package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +42 -0
  52. package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +47 -0
  53. package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +45 -0
  54. package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +47 -0
  55. package/server/migrations/2023_04_27_053456_create_service_rates_table.php +61 -0
  56. package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +46 -0
  57. package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +54 -0
  58. package/server/migrations/2023_04_27_053456_create_vehicles_table.php +84 -0
  59. package/server/migrations/2023_04_27_053456_create_vendors_table.php +56 -0
  60. package/server/migrations/2023_04_27_053456_create_waypoints_table.php +45 -0
  61. package/server/migrations/2023_04_27_053456_create_zones_table.php +46 -0
  62. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_companies_table.php +32 -0
  63. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_contacts_table.php +34 -0
  64. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_drivers_table.php +40 -0
  65. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_entities_table.php +40 -0
  66. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleet_drivers_table.php +34 -0
  67. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleets_table.php +36 -0
  68. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fuel_reports_table.php +36 -0
  69. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_integrated_vendors_table.php +34 -0
  70. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_issues_table.php +38 -0
  71. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_orders_table.php +48 -0
  72. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_payloads_table.php +40 -0
  73. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_places_table.php +32 -0
  74. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_positions_table.php +36 -0
  75. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_proofs_table.php +34 -0
  76. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_purchase_rates_table.php +38 -0
  77. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_routes_table.php +34 -0
  78. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_areas_table.php +34 -0
  79. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quote_items_table.php +32 -0
  80. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quotes_table.php +38 -0
  81. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_fees_table.php +32 -0
  82. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_parcel_fees_table.php +32 -0
  83. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rates_table.php +36 -0
  84. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_numbers_table.php +34 -0
  85. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_statuses_table.php +34 -0
  86. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vehicles_table.php +36 -0
  87. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vendors_table.php +40 -0
  88. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_waypoints_table.php +38 -0
  89. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_zones_table.php +34 -0
  90. package/server/migrations/2023_09_14_074512_update_vehicles_table.php +100 -0
  91. package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +44 -0
  92. package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +32 -0
  93. package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +45 -0
  94. package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +46 -0
  95. package/server/migrations/2023_10_05_074811_update_vehicle.php +42 -0
  96. package/server/resources/views/labels/default.php +165 -0
  97. package/server/src/Auth/Schemas/FleetOps.php +75 -0
  98. package/server/src/Casts/MultiPolygon.php +50 -0
  99. package/server/src/Casts/Point.php +109 -0
  100. package/server/src/Casts/Polygon.php +46 -0
  101. package/server/src/Console/Commands/DispatchAdhocOrders.php +137 -0
  102. package/server/src/Console/Commands/DispatchOrders.php +71 -0
  103. package/server/src/Console/Commands/TrackOrderDistanceAndTime.php +62 -0
  104. package/server/src/Events/DriverLocationChanged.php +174 -0
  105. package/server/src/Events/DriverSimulatedLocationChanged.php +183 -0
  106. package/server/src/Events/EntityDriverAssigned.php +36 -0
  107. package/server/src/Events/OrderCanceled.php +15 -0
  108. package/server/src/Events/OrderCompleted.php +15 -0
  109. package/server/src/Events/OrderDispatchFailed.php +42 -0
  110. package/server/src/Events/OrderDispatched.php +15 -0
  111. package/server/src/Events/OrderDriverAssigned.php +15 -0
  112. package/server/src/Events/OrderReady.php +15 -0
  113. package/server/src/Events/OrderStarted.php +15 -0
  114. package/server/src/Exceptions/IntegratedVendorException.php +18 -0
  115. package/server/src/Expansions/UserExpansion.php +63 -0
  116. package/server/src/Exports/ContactExport.php +56 -0
  117. package/server/src/Exports/DriverExport.php +61 -0
  118. package/server/src/Exports/FleetExport.php +53 -0
  119. package/server/src/Exports/PlaceExport.php +55 -0
  120. package/server/src/Exports/ServiceAreaExport.php +58 -0
  121. package/server/src/Exports/VehicleExport.php +57 -0
  122. package/server/src/Exports/VendorExport.php +57 -0
  123. package/server/src/Http/Controllers/Api/v1/ContactController.php +133 -0
  124. package/server/src/Http/Controllers/Api/v1/DriverController.php +691 -0
  125. package/server/src/Http/Controllers/Api/v1/EntityController.php +230 -0
  126. package/server/src/Http/Controllers/Api/v1/FleetController.php +146 -0
  127. package/server/src/Http/Controllers/Api/v1/LabelController.php +63 -0
  128. package/server/src/Http/Controllers/Api/v1/OrderController.php +1114 -0
  129. package/server/src/Http/Controllers/Api/v1/PayloadController.php +195 -0
  130. package/server/src/Http/Controllers/Api/v1/PlaceController.php +333 -0
  131. package/server/src/Http/Controllers/Api/v1/PurchaseRateController.php +199 -0
  132. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +133 -0
  133. package/server/src/Http/Controllers/Api/v1/ServiceQuoteController.php +381 -0
  134. package/server/src/Http/Controllers/Api/v1/ServiceRateController.php +223 -0
  135. package/server/src/Http/Controllers/Api/v1/TrackingNumberController.php +146 -0
  136. package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +138 -0
  137. package/server/src/Http/Controllers/Api/v1/VehicleController.php +191 -0
  138. package/server/src/Http/Controllers/Api/v1/VendorController.php +159 -0
  139. package/server/src/Http/Controllers/Api/v1/ZoneController.php +146 -0
  140. package/server/src/Http/Controllers/FleetOpsController.php +13 -0
  141. package/server/src/Http/Controllers/Internal/v1/ContactController.php +69 -0
  142. package/server/src/Http/Controllers/Internal/v1/DriverController.php +261 -0
  143. package/server/src/Http/Controllers/Internal/v1/EntityController.php +15 -0
  144. package/server/src/Http/Controllers/Internal/v1/FleetController.php +152 -0
  145. package/server/src/Http/Controllers/Internal/v1/FleetOpsLookupController.php +80 -0
  146. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +15 -0
  147. package/server/src/Http/Controllers/Internal/v1/GeocoderController.php +96 -0
  148. package/server/src/Http/Controllers/Internal/v1/IntegratedVendorController.php +63 -0
  149. package/server/src/Http/Controllers/Internal/v1/IssueController.php +15 -0
  150. package/server/src/Http/Controllers/Internal/v1/LiveController.php +127 -0
  151. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +75 -0
  152. package/server/src/Http/Controllers/Internal/v1/MorphController.php +77 -0
  153. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +269 -0
  154. package/server/src/Http/Controllers/Internal/v1/OrderController.php +564 -0
  155. package/server/src/Http/Controllers/Internal/v1/PayloadController.php +15 -0
  156. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +163 -0
  157. package/server/src/Http/Controllers/Internal/v1/ProofController.php +139 -0
  158. package/server/src/Http/Controllers/Internal/v1/PurchaseRateController.php +15 -0
  159. package/server/src/Http/Controllers/Internal/v1/RouteController.php +15 -0
  160. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +32 -0
  161. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +345 -0
  162. package/server/src/Http/Controllers/Internal/v1/ServiceRateController.php +47 -0
  163. package/server/src/Http/Controllers/Internal/v1/SettingController.php +30 -0
  164. package/server/src/Http/Controllers/Internal/v1/TrackingNumberController.php +15 -0
  165. package/server/src/Http/Controllers/Internal/v1/TrackingStatusController.php +15 -0
  166. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +65 -0
  167. package/server/src/Http/Controllers/Internal/v1/VehicleDeviceController.php +15 -0
  168. package/server/src/Http/Controllers/Internal/v1/VendorController.php +120 -0
  169. package/server/src/Http/Controllers/Internal/v1/ZoneController.php +15 -0
  170. package/server/src/Http/Filter/ContactFilter.php +86 -0
  171. package/server/src/Http/Filter/DriverFilter.php +148 -0
  172. package/server/src/Http/Filter/FleetFilter.php +108 -0
  173. package/server/src/Http/Filter/IntegratedVendorFilter.php +13 -0
  174. package/server/src/Http/Filter/OrderFilter.php +242 -0
  175. package/server/src/Http/Filter/PlaceFilter.php +111 -0
  176. package/server/src/Http/Filter/ServiceAreaFilter.php +13 -0
  177. package/server/src/Http/Filter/ServiceQuoteFilter.php +13 -0
  178. package/server/src/Http/Filter/ServiceRateFilter.php +33 -0
  179. package/server/src/Http/Filter/TrackingStatusFilter.php +43 -0
  180. package/server/src/Http/Filter/VehicleFilter.php +91 -0
  181. package/server/src/Http/Filter/VendorFilter.php +83 -0
  182. package/server/src/Http/Filter/ZoneFilter.php +13 -0
  183. package/server/src/Http/Requests/CancelOrderRequest.php +31 -0
  184. package/server/src/Http/Requests/CreateContactRequest.php +33 -0
  185. package/server/src/Http/Requests/CreateDriverRequest.php +55 -0
  186. package/server/src/Http/Requests/CreateEntityRequest.php +43 -0
  187. package/server/src/Http/Requests/CreateFleetRequest.php +32 -0
  188. package/server/src/Http/Requests/CreateOrderRequest.php +66 -0
  189. package/server/src/Http/Requests/CreatePayloadRequest.php +37 -0
  190. package/server/src/Http/Requests/CreatePlaceRequest.php +38 -0
  191. package/server/src/Http/Requests/CreatePurchaseRateRequest.php +33 -0
  192. package/server/src/Http/Requests/CreateServiceAreaRequest.php +35 -0
  193. package/server/src/Http/Requests/CreateServiceQuoteRequest.php +29 -0
  194. package/server/src/Http/Requests/CreateServiceRateRequest.php +56 -0
  195. package/server/src/Http/Requests/CreateTrackingNumberRequest.php +34 -0
  196. package/server/src/Http/Requests/CreateTrackingStatusRequest.php +42 -0
  197. package/server/src/Http/Requests/CreateVehicleRequest.php +32 -0
  198. package/server/src/Http/Requests/CreateVendorRequest.php +35 -0
  199. package/server/src/Http/Requests/CreateZoneRequest.php +35 -0
  200. package/server/src/Http/Requests/DecodeTrackingNumberQR.php +30 -0
  201. package/server/src/Http/Requests/DriverSimulationRequest.php +46 -0
  202. package/server/src/Http/Requests/Internal/AssignOrderRequest.php +31 -0
  203. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +42 -0
  204. package/server/src/Http/Requests/Internal/FleetActionRequest.php +32 -0
  205. package/server/src/Http/Requests/Internal/UpdateDriverRequest.php +7 -0
  206. package/server/src/Http/Requests/QueryServiceQuotesRequest.php +41 -0
  207. package/server/src/Http/Requests/UpdateContactRequest.php +20 -0
  208. package/server/src/Http/Requests/UpdateDriverRequest.php +7 -0
  209. package/server/src/Http/Requests/UpdateEntityRequest.php +7 -0
  210. package/server/src/Http/Requests/UpdateFleetRequest.php +7 -0
  211. package/server/src/Http/Requests/UpdateOrderRequest.php +7 -0
  212. package/server/src/Http/Requests/UpdatePayloadRequest.php +7 -0
  213. package/server/src/Http/Requests/UpdatePlaceRequest.php +7 -0
  214. package/server/src/Http/Requests/UpdatePurchaseRateRequest.php +7 -0
  215. package/server/src/Http/Requests/UpdateServiceAreaRequest.php +29 -0
  216. package/server/src/Http/Requests/UpdateServiceQuoteRequest.php +29 -0
  217. package/server/src/Http/Requests/UpdateServiceRateRequest.php +29 -0
  218. package/server/src/Http/Requests/UpdateTrackingNumberRequest.php +7 -0
  219. package/server/src/Http/Requests/UpdateTrackingStatusRequest.php +32 -0
  220. package/server/src/Http/Requests/UpdateVehicleRequest.php +7 -0
  221. package/server/src/Http/Requests/UpdateVendorRequest.php +7 -0
  222. package/server/src/Http/Requests/UpdateZoneRequest.php +7 -0
  223. package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +37 -0
  224. package/server/src/Http/Resources/Internal/v1/Vehicle.php +33 -0
  225. package/server/src/Http/Resources/Internal/v1/Waypoint.php +34 -0
  226. package/server/src/Http/Resources/v1/Contact.php +62 -0
  227. package/server/src/Http/Resources/v1/CurrentJob.php +36 -0
  228. package/server/src/Http/Resources/v1/DeletedResource.php +61 -0
  229. package/server/src/Http/Resources/v1/Driver.php +89 -0
  230. package/server/src/Http/Resources/v1/Entity.php +107 -0
  231. package/server/src/Http/Resources/v1/Fleet.php +60 -0
  232. package/server/src/Http/Resources/v1/FuelReport.php +67 -0
  233. package/server/src/Http/Resources/v1/Order.php +131 -0
  234. package/server/src/Http/Resources/v1/Payload.php +94 -0
  235. package/server/src/Http/Resources/v1/Place.php +84 -0
  236. package/server/src/Http/Resources/v1/Proof.php +36 -0
  237. package/server/src/Http/Resources/v1/PurchaseRate.php +77 -0
  238. package/server/src/Http/Resources/v1/ServiceArea.php +55 -0
  239. package/server/src/Http/Resources/v1/ServiceQuote.php +57 -0
  240. package/server/src/Http/Resources/v1/ServiceRate.php +94 -0
  241. package/server/src/Http/Resources/v1/ServiceRateFee.php +58 -0
  242. package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +48 -0
  243. package/server/src/Http/Resources/v1/TrackingNumber.php +62 -0
  244. package/server/src/Http/Resources/v1/TrackingStatus.php +84 -0
  245. package/server/src/Http/Resources/v1/Vehicle.php +75 -0
  246. package/server/src/Http/Resources/v1/VehicleDevice.php +44 -0
  247. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +72 -0
  248. package/server/src/Http/Resources/v1/Vendor.php +72 -0
  249. package/server/src/Http/Resources/v1/Zone.php +60 -0
  250. package/server/src/Imports/OrdersImport.php +18 -0
  251. package/server/src/Integrations/Lalamove/Lalamove.php +678 -0
  252. package/server/src/Integrations/Lalamove/LalamoveDeliveryStop.php +97 -0
  253. package/server/src/Integrations/Lalamove/LalamoveMarket.php +123 -0
  254. package/server/src/Integrations/Lalamove/LalamoveServiceType.php +161 -0
  255. package/server/src/Jobs/SimulateDrivingRoute.php +81 -0
  256. package/server/src/Jobs/SimulateWaypointReached.php +79 -0
  257. package/server/src/Listeners/HandleOrderCanceled.php +46 -0
  258. package/server/src/Listeners/HandleOrderCreated.php +23 -0
  259. package/server/src/Listeners/HandleOrderDispatchFailed.php +35 -0
  260. package/server/src/Listeners/HandleOrderDispatched.php +108 -0
  261. package/server/src/Listeners/HandleOrderDriverAssigned.php +42 -0
  262. package/server/src/Listeners/HandleOrderReady.php +27 -0
  263. package/server/src/Listeners/HandleUserRemovedFromCompany.php +31 -0
  264. package/server/src/Models/Contact.php +239 -0
  265. package/server/src/Models/Driver.php +543 -0
  266. package/server/src/Models/Entity.php +416 -0
  267. package/server/src/Models/Fleet.php +203 -0
  268. package/server/src/Models/FleetDriver.php +73 -0
  269. package/server/src/Models/FleetVehicle.php +73 -0
  270. package/server/src/Models/FuelReport.php +125 -0
  271. package/server/src/Models/IntegratedVendor.php +219 -0
  272. package/server/src/Models/Issue.php +111 -0
  273. package/server/src/Models/Order.php +1132 -0
  274. package/server/src/Models/Payload.php +699 -0
  275. package/server/src/Models/Place.php +656 -0
  276. package/server/src/Models/Position.php +119 -0
  277. package/server/src/Models/Proof.php +94 -0
  278. package/server/src/Models/PurchaseRate.php +208 -0
  279. package/server/src/Models/Route.php +128 -0
  280. package/server/src/Models/ServiceArea.php +161 -0
  281. package/server/src/Models/ServiceQuote.php +207 -0
  282. package/server/src/Models/ServiceQuoteItem.php +46 -0
  283. package/server/src/Models/ServiceRate.php +953 -0
  284. package/server/src/Models/ServiceRateFee.php +96 -0
  285. package/server/src/Models/ServiceRateParcelFee.php +116 -0
  286. package/server/src/Models/TrackingNumber.php +310 -0
  287. package/server/src/Models/TrackingStatus.php +177 -0
  288. package/server/src/Models/Vehicle.php +452 -0
  289. package/server/src/Models/VehicleDevice.php +79 -0
  290. package/server/src/Models/Vendor.php +244 -0
  291. package/server/src/Models/Waypoint.php +226 -0
  292. package/server/src/Models/Zone.php +95 -0
  293. package/server/src/Notifications/OrderAssigned.php +140 -0
  294. package/server/src/Notifications/OrderCanceled.php +129 -0
  295. package/server/src/Notifications/OrderDispatchFailed.php +81 -0
  296. package/server/src/Notifications/OrderDispatched.php +173 -0
  297. package/server/src/Notifications/OrderPing.php +162 -0
  298. package/server/src/Notifications/OrderSplit.php +56 -0
  299. package/server/src/Observers/DriverObserver.php +34 -0
  300. package/server/src/Observers/OrderObserver.php +34 -0
  301. package/server/src/Observers/PayloadObserver.php +30 -0
  302. package/server/src/Observers/PlaceObserver.php +26 -0
  303. package/server/src/Observers/PurchaseRateObserver.php +61 -0
  304. package/server/src/Observers/ServiceAreaObserver.php +35 -0
  305. package/server/src/Observers/ServiceRateObserver.php +78 -0
  306. package/server/src/Observers/TrackingNumberObserver.php +44 -0
  307. package/server/src/Observers/UserObserver.php +20 -0
  308. package/server/src/Observers/VehicleObserver.php +66 -0
  309. package/server/src/Providers/EventServiceProvider.php +30 -0
  310. package/server/src/Providers/FleetOpsServiceProvider.php +94 -0
  311. package/server/src/Rules/ResolvablePoint.php +37 -0
  312. package/server/src/Scopes/DriverScope.php +21 -0
  313. package/server/src/Support/Algo.php +55 -0
  314. package/server/src/Support/DistanceMatrix.php +27 -0
  315. package/server/src/Support/Encoding/Polyline.php +168 -0
  316. package/server/src/Support/Flow.php +622 -0
  317. package/server/src/Support/Geocoding.php +216 -0
  318. package/server/src/Support/IntegratedVendors.php +287 -0
  319. package/server/src/Support/Metrics.php +305 -0
  320. package/server/src/Support/OSRM.php +191 -0
  321. package/server/src/Support/ParsePhone.php +21 -0
  322. package/server/src/Support/Utils.php +1145 -0
  323. package/server/src/Traits/HasTrackingNumber.php +185 -0
  324. package/server/src/routes.php +381 -0
  325. package/server/tests/Feature.php +5 -0
@@ -0,0 +1,108 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Listeners;
4
+
5
+ use Fleetbase\FleetOps\Events\OrderDispatched;
6
+ use Fleetbase\FleetOps\Events\OrderDispatchFailed;
7
+ use Fleetbase\FleetOps\Models\Driver;
8
+ use Fleetbase\FleetOps\Notifications\OrderDispatched as OrderDispatchedNotification;
9
+ use Fleetbase\FleetOps\Notifications\OrderPing;
10
+ use Fleetbase\FleetOps\Support\Flow;
11
+ use Fleetbase\FleetOps\Support\Utils;
12
+ use Illuminate\Contracts\Queue\ShouldQueue;
13
+ use Illuminate\Queue\InteractsWithQueue;
14
+ use Illuminate\Support\Carbon;
15
+
16
+ class HandleOrderDispatched implements ShouldQueue
17
+ {
18
+ use InteractsWithQueue;
19
+
20
+ /**
21
+ * Handle the event.
22
+ *
23
+ * @param object $event
24
+ *
25
+ * @return void
26
+ */
27
+ public function handle(OrderDispatched $event)
28
+ {
29
+ /** @var \Fleetbase\FleetOps\Models\Order $order */
30
+ $order = $event->getModelRecord();
31
+
32
+ // set company session
33
+ session([
34
+ 'company' => $order->company_uuid,
35
+ ]);
36
+
37
+ /* make sure driver is assigned if not trigger failed dispatch */
38
+ if (!$order->hasDriverAssigned && !$order->adhoc) {
39
+ return event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
40
+ }
41
+
42
+ /** check for dispatch code in activity options, if there is the correct dispatch code update activity */
43
+ $activity = Flow::getDispatchActivity($order);
44
+
45
+ if ($activity) {
46
+ /** update order activity */
47
+ $location = $order->getLastLocation();
48
+
49
+ $order->setStatus($activity['code']);
50
+ $order->createActivity($activity['status'], $activity['details'], $location, $activity['code']);
51
+ }
52
+
53
+ /* update dispatch attributes */
54
+ $order->dispatched = true;
55
+ $order->dispatched_at = Carbon::now();
56
+ $order->save();
57
+ $order->flushAttributesCache();
58
+
59
+ /* if order is adhoc ping drivers within radius of pickup to accept order * */
60
+ if ($order->adhoc) {
61
+ $order->load(['company']);
62
+
63
+ $pickup = $order->getPickupLocation();
64
+ $distance = $order->getAdhocDistance();
65
+
66
+ if (!Utils::isPoint($pickup)) {
67
+ return;
68
+ }
69
+
70
+ $drivers = Driver::where(['status' => 'active', 'online' => 1])
71
+ ->whereHas('company', function ($q) {
72
+ $q->whereHas('users', function ($q) {
73
+ $q->whereHas('driver', function ($q) {
74
+ $q->where(['status' => 'active', 'online' => 1]);
75
+ $q->whereNull('deleted_at');
76
+ });
77
+ });
78
+ })
79
+ ->whereNull('deleted_at')
80
+ ->distanceSphere('location', $pickup, $distance)
81
+ ->distanceSphereValue('location', $pickup)
82
+ ->withoutGlobalScopes()
83
+ ->get();
84
+
85
+ return $drivers->each(function ($driver) use ($order) {
86
+ try {
87
+ $driver->notify(new OrderPing($order, $driver->distance));
88
+ } catch (\Exception $exception) {
89
+ // failed to notify driver for order dispatch for reason uknown -- exit silently
90
+ }
91
+ });
92
+ }
93
+
94
+ /** @var \Fleetbase\Models\Driver */
95
+ $driver = Driver::where('uuid', $order->driver_assigned_uuid)->withoutGlobalScopes()->first();
96
+
97
+ /* notify driver order has dispatched */
98
+ if (!$driver) {
99
+ return event(new OrderDispatchFailed($order, 'Order was dispatched, but driver was unable to be notified.'));
100
+ }
101
+
102
+ try {
103
+ $driver->notify(new OrderDispatchedNotification($order));
104
+ } catch (\Exception $exception) {
105
+ // silently fail notifying driver for now
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,42 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Listeners;
4
+
5
+ use Fleetbase\FleetOps\Events\OrderDriverAssigned;
6
+ use Fleetbase\FleetOps\Models\Driver;
7
+ use Fleetbase\FleetOps\Models\Order;
8
+ use Fleetbase\FleetOps\Notifications\OrderAssigned;
9
+ use Illuminate\Contracts\Queue\ShouldQueue;
10
+ use Illuminate\Queue\InteractsWithQueue;
11
+
12
+ class HandleOrderDriverAssigned implements ShouldQueue
13
+ {
14
+ use InteractsWithQueue;
15
+
16
+ /**
17
+ * Handle the event.
18
+ *
19
+ * @param object $event
20
+ *
21
+ * @return void
22
+ */
23
+ public function handle(OrderDriverAssigned $event)
24
+ {
25
+ /** @var \Fleetbase\FleetOps\Models\Order $order */
26
+ $order = $event->getModelRecord();
27
+
28
+ // halt if unable to resolve order record from event
29
+ if (!$order instanceof Order) {
30
+ return;
31
+ }
32
+
33
+ /** @var \Fleetbase\FleetOps\Models\Driver */
34
+ $driver = Driver::where('uuid', $order->driver_assigned_uuid)->withoutGlobalScopes()->first();
35
+ $order->setRelation('driverAssigned', $driver);
36
+
37
+ // notify driver order has been assigned - only if order is not adhoc
38
+ if ($driver && $order->adhoc === false) {
39
+ $driver->notify(new OrderAssigned($order));
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,27 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Listeners;
4
+
5
+ use Fleetbase\FleetOps\Events\OrderReady;
6
+ use Illuminate\Contracts\Queue\ShouldQueue;
7
+ use Illuminate\Queue\InteractsWithQueue;
8
+
9
+ class HandleOrderReady implements ShouldQueue
10
+ {
11
+ use InteractsWithQueue;
12
+
13
+ /**
14
+ * Handle the event.
15
+ *
16
+ * @param object $event
17
+ *
18
+ * @return void
19
+ */
20
+ public function handle(OrderReady $event)
21
+ {
22
+ /** @var \Fleetbase\FleetOps\Models\Order $order */
23
+ $order = $event->getModelRecord();
24
+ // set google matrix based distance and time
25
+ $order->setDistanceAndTime();
26
+ }
27
+ }
@@ -0,0 +1,31 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Listeners;
4
+
5
+ use Fleetbase\Events\UserRemovedFromCompany;
6
+ use Fleetbase\FleetOps\Models\Driver;
7
+ use Illuminate\Contracts\Queue\ShouldQueue;
8
+ use Illuminate\Queue\InteractsWithQueue;
9
+
10
+ class HandleUserRemovedFromCompany implements ShouldQueue
11
+ {
12
+ use InteractsWithQueue;
13
+
14
+ /**
15
+ * Handle the event.
16
+ *
17
+ * @param object $event
18
+ *
19
+ * @return void
20
+ */
21
+ public function handle(UserRemovedFromCompany $event)
22
+ {
23
+ // If user has driver record assosciated to the company, remove it
24
+ Driver::where(
25
+ [
26
+ 'company_uuid' => $event->company->uuid,
27
+ 'user_uuid' => $event->user->uuid,
28
+ ]
29
+ )->delete();
30
+ }
31
+ }
@@ -0,0 +1,239 @@
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\HasInternalId;
9
+ use Fleetbase\Traits\HasMetaAttributes;
10
+ use Fleetbase\Traits\HasPublicId;
11
+ use Fleetbase\Traits\HasUuid;
12
+ use Fleetbase\Traits\Searchable;
13
+ use Fleetbase\Traits\SendsWebhooks;
14
+ use Fleetbase\Traits\TracksApiCredential;
15
+ use Illuminate\Notifications\Notifiable;
16
+ use Spatie\Activitylog\Traits\CausesActivity;
17
+ use Spatie\Activitylog\Traits\LogsActivity;
18
+ use Spatie\Sluggable\HasSlug;
19
+ use Spatie\Sluggable\SlugOptions;
20
+
21
+ class Contact extends Model
22
+ {
23
+ use HasUuid;
24
+ use HasPublicId;
25
+ use HasApiModelBehavior;
26
+ use HasMetaAttributes;
27
+ use HasInternalId;
28
+ use TracksApiCredential;
29
+ use Searchable;
30
+ use SendsWebhooks;
31
+ use HasSlug;
32
+ use LogsActivity;
33
+ use CausesActivity;
34
+ use Notifiable;
35
+
36
+ /**
37
+ * The database table used by the model.
38
+ *
39
+ * @var string
40
+ */
41
+ protected $table = 'contacts';
42
+
43
+ /**
44
+ * The type of public Id to generate.
45
+ *
46
+ * @var string
47
+ */
48
+ protected $publicIdType = 'contact';
49
+
50
+ /**
51
+ * The attributes that can be queried.
52
+ *
53
+ * @var array
54
+ */
55
+ protected $searchableColumns = ['name', 'email', 'phone'];
56
+
57
+ /**
58
+ * The attributes that are mass assignable.
59
+ *
60
+ * @var array
61
+ */
62
+ protected $fillable = ['_key', 'public_id', 'internal_id', 'company_uuid', 'user_uuid', 'photo_uuid', 'name', 'title', 'email', 'phone', 'type', 'meta', 'slug'];
63
+
64
+ /**
65
+ * The attributes that should be cast to native types.
66
+ *
67
+ * @var array
68
+ */
69
+ protected $casts = [
70
+ 'meta' => Json::class,
71
+ ];
72
+
73
+ /**
74
+ * Dynamic attributes that are appended to object.
75
+ *
76
+ * @var array
77
+ */
78
+ protected $appends = ['photo_url'];
79
+
80
+ /**
81
+ * The attributes excluded from the model's JSON form.
82
+ *
83
+ * @var array
84
+ */
85
+ protected $hidden = ['photo'];
86
+
87
+ /**
88
+ * Properties which activity needs to be logged.
89
+ *
90
+ * @var array
91
+ */
92
+ protected static $logAttributes = '*';
93
+
94
+ /**
95
+ * Do not log empty changed.
96
+ *
97
+ * @var bool
98
+ */
99
+ protected static $submitEmptyLogs = false;
100
+
101
+ /**
102
+ * The name of the subject to log.
103
+ *
104
+ * @var string
105
+ */
106
+ protected static $logName = 'contact';
107
+
108
+ /**
109
+ * Get the options for generating the slug.
110
+ */
111
+ public function getSlugOptions(): SlugOptions
112
+ {
113
+ return SlugOptions::create()
114
+ ->generateSlugsFrom('name')
115
+ ->saveSlugsTo('slug');
116
+ }
117
+
118
+ /**
119
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
120
+ */
121
+ public function company()
122
+ {
123
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
124
+ }
125
+
126
+ /**
127
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
128
+ */
129
+ public function user()
130
+ {
131
+ return $this->belongsTo(\Fleetbase\Models\User::class);
132
+ }
133
+
134
+ /**
135
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
136
+ */
137
+ public function photo()
138
+ {
139
+ return $this->belongsTo(\Fleetbase\Models\File::class);
140
+ }
141
+
142
+ /**
143
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
144
+ */
145
+ public function devices()
146
+ {
147
+ return $this->hasMany(\Fleetbase\Models\UserDevice::class, 'user_uuid', 'user_uuid');
148
+ }
149
+
150
+ /**
151
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
152
+ */
153
+ public function address()
154
+ {
155
+ return $this->hasOne(Place::class, 'owner_uuid');
156
+ }
157
+
158
+ /**
159
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
160
+ */
161
+ public function addresses()
162
+ {
163
+ return $this->hasMany(Place::class, 'owner_uuid');
164
+ }
165
+
166
+ /**
167
+ * Specifies the user's FCM tokens.
168
+ *
169
+ * @return string|array
170
+ */
171
+ public function routeNotificationForFcm()
172
+ {
173
+ return $this->devices
174
+ ->where('platform', 'android')
175
+ ->map(
176
+ function ($userDevice) {
177
+ return $userDevice->token;
178
+ }
179
+ )->toArray();
180
+ }
181
+
182
+ /**
183
+ * Specifies the user's APNS tokens.
184
+ *
185
+ * @return string|array
186
+ */
187
+ public function routeNotificationForApn()
188
+ {
189
+ return $this->devices
190
+ ->where('platform', 'ios')
191
+ ->map(
192
+ function ($userDevice) {
193
+ return $userDevice->token;
194
+ }
195
+ )->toArray();
196
+ }
197
+
198
+ /**
199
+ * Get avatar URL attribute.
200
+ */
201
+ public function getPhotoUrlAttribute()
202
+ {
203
+ return data_get($this, 'photo.url', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png');
204
+ }
205
+
206
+ /**
207
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
208
+ */
209
+ public function facilitatorOrders()
210
+ {
211
+ return $this->hasMany(Order::class, 'facilitator_uuid', 'uuid');
212
+ }
213
+
214
+ /**
215
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
216
+ */
217
+ public function customerOrders()
218
+ {
219
+ return $this->hasMany(Order::class, 'customer_uuid')->whereNull('deleted_at')->withoutGlobalScopes();
220
+ }
221
+
222
+ /**
223
+ * The number of orders by this user.
224
+ *
225
+ * @return int
226
+ */
227
+ public function getCustomerOrdersCountAttribute()
228
+ {
229
+ return $this->customerOrders()->count();
230
+ }
231
+
232
+ /**
233
+ * The attribute to route notifications to.
234
+ */
235
+ public function routeNotificationForTwilio(): ?string
236
+ {
237
+ return $this->phone;
238
+ }
239
+ }