@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,129 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Notifications;
4
+
5
+ use Fleetbase\FleetOps\Models\Order;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Illuminate\Broadcasting\Channel;
8
+ use Illuminate\Bus\Queueable;
9
+ use Illuminate\Contracts\Queue\ShouldQueue;
10
+ use Illuminate\Notifications\Messages\MailMessage;
11
+ use Illuminate\Notifications\Notification;
12
+ use NotificationChannels\Apn\ApnChannel;
13
+ use NotificationChannels\Apn\ApnMessage;
14
+ use NotificationChannels\Fcm\FcmChannel;
15
+ use NotificationChannels\Fcm\FcmMessage;
16
+ use NotificationChannels\Fcm\Resources\AndroidConfig;
17
+ use NotificationChannels\Fcm\Resources\AndroidFcmOptions;
18
+ use NotificationChannels\Fcm\Resources\AndroidNotification;
19
+ use NotificationChannels\Fcm\Resources\ApnsConfig;
20
+ use NotificationChannels\Fcm\Resources\ApnsFcmOptions;
21
+
22
+ class OrderCanceled extends Notification implements ShouldQueue
23
+ {
24
+ use Queueable;
25
+
26
+ /**
27
+ * The order instance this notification is for.
28
+ *
29
+ * @var \Fleetbase\Models\Order
30
+ */
31
+ public $order;
32
+
33
+ /**
34
+ * Create a new notification instance.
35
+ *
36
+ * @return void
37
+ */
38
+ public function __construct(Order $order)
39
+ {
40
+ $this->order = $order->setRelations([]);
41
+ }
42
+
43
+ /**
44
+ * Get the notification's delivery channels.
45
+ *
46
+ * @return array
47
+ */
48
+ public function via($notifiable)
49
+ {
50
+ return ['broadcast', 'mail', FcmChannel::class, ApnChannel::class];
51
+ }
52
+
53
+ /**
54
+ * Get the channels the event should broadcast on.
55
+ *
56
+ * @return \Illuminate\Broadcasting\Channel|array
57
+ */
58
+ public function broadcastOn()
59
+ {
60
+ return [
61
+ new Channel('company.' . session('company', data_get($this->order, 'company.uuid'))),
62
+ new Channel('company.' . data_get($this->order, 'company.public_id')),
63
+ new Channel('api.' . session('api_credential')),
64
+ new Channel('order.' . $this->order->uuid),
65
+ new Channel('order.' . $this->order->public_id),
66
+ ];
67
+ }
68
+
69
+ /**
70
+ * Get the mail representation of the notification.
71
+ *
72
+ * @return \Illuminate\Notifications\Messages\MailMessage
73
+ */
74
+ public function toMail($notifiable)
75
+ {
76
+ $message = (new MailMessage())
77
+ ->subject('Order ' . $this->order->public_id . ' was canceled')
78
+ ->line('Order ' . $this->order->public_id . ' has been canceled.')
79
+ ->line('No further action is necessary.');
80
+
81
+ $message->action('View Details', Utils::consoleUrl('', ['shift' => 'fleet-ops/orders/view/' . $this->order->public_id]));
82
+
83
+ return $message;
84
+ }
85
+
86
+ /**
87
+ * Get the firebase cloud message representation of the notification.
88
+ *
89
+ * @return array
90
+ */
91
+ public function toFcm($notifiable)
92
+ {
93
+ $notification = \NotificationChannels\Fcm\Resources\Notification::create()
94
+ ->setTitle('Order ' . $this->order->public_id . ' was canceled')
95
+ ->setBody('No further action is necessary.');
96
+
97
+ $message = FcmMessage::create()
98
+ ->setData(['id' => $this->order->public_id, 'type' => 'order_canceled'])
99
+ ->setNotification($notification)
100
+ ->setAndroid(
101
+ AndroidConfig::create()
102
+ ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
103
+ ->setNotification(AndroidNotification::create()->setColor('#4391EA'))
104
+ )->setApns(
105
+ ApnsConfig::create()
106
+ ->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios'))
107
+ );
108
+
109
+ return $message;
110
+ }
111
+
112
+ /**
113
+ * Get the apns message representation of the notification.
114
+ *
115
+ * @return array
116
+ */
117
+ public function toApn($notifiable)
118
+ {
119
+ $message = ApnMessage::create()
120
+ ->badge(1)
121
+ ->title('Order ' . $this->order->public_id . ' was canceled')
122
+ ->body('No further action is necessary.')
123
+ ->custom('type', 'order_canceled')
124
+ ->custom('id', $this->order->public_id)
125
+ ->action('view_order', ['id' => $this->order->public_id]);
126
+
127
+ return $message;
128
+ }
129
+ }
@@ -0,0 +1,81 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Notifications;
4
+
5
+ use Fleetbase\FleetOps\Events\OrderDispatchFailed as OrderDispatchFailedEvent;
6
+ use Fleetbase\FleetOps\Models\Order;
7
+ use Fleetbase\FleetOps\Support\Utils;
8
+ use Illuminate\Broadcasting\Channel;
9
+ use Illuminate\Bus\Queueable;
10
+ use Illuminate\Contracts\Queue\ShouldQueue;
11
+ use Illuminate\Notifications\Messages\MailMessage;
12
+ use Illuminate\Notifications\Notification;
13
+
14
+ class OrderDispatchFailed extends Notification implements ShouldQueue
15
+ {
16
+ use Queueable;
17
+
18
+ /**
19
+ * The order instance this notification is for.
20
+ *
21
+ * @var \Fleetbase\Models\Order
22
+ */
23
+ public $order;
24
+
25
+ /**
26
+ * Reason order dispatch failed.
27
+ *
28
+ * @var string
29
+ */
30
+ public $reason;
31
+
32
+ /**
33
+ * Create a new notification instance.
34
+ *
35
+ * @return void
36
+ */
37
+ public function __construct(Order $order, OrderDispatchFailedEvent $event)
38
+ {
39
+ $this->order = $order->setRelations([]);
40
+ $this->reason = $event->getReason();
41
+ }
42
+
43
+ /**
44
+ * Get the channels the event should broadcast on.
45
+ *
46
+ * @return \Illuminate\Broadcasting\Channel|array
47
+ */
48
+ public function broadcastOn()
49
+ {
50
+ return [
51
+ new Channel('company.' . session('company', data_get($this->order, 'company.uuid'))),
52
+ new Channel('company.' . data_get($this->order, 'company.public_id')),
53
+ new Channel('api.' . session('api_credential')),
54
+ new Channel('order.' . $this->order->uuid),
55
+ new Channel('order.' . $this->order->public_id),
56
+ ];
57
+ }
58
+
59
+ /**
60
+ * Get the notification's delivery channels.
61
+ *
62
+ * @return array
63
+ */
64
+ public function via($notifiable)
65
+ {
66
+ return ['mail'];
67
+ }
68
+
69
+ /**
70
+ * Get the mail representation of the notification.
71
+ *
72
+ * @return \Illuminate\Notifications\Messages\MailMessage
73
+ */
74
+ public function toMail($notifiable)
75
+ {
76
+ return (new MailMessage())
77
+ ->subject('Order ' . $this->order->public_id . ' has dispatch has failed!')
78
+ ->line($this->reason)
79
+ ->action('View Details', Utils::consoleUrl('', ['shift' => 'fleet-ops/orders/view/' . $this->order->public_id]));
80
+ }
81
+ }
@@ -0,0 +1,173 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Notifications;
4
+
5
+ use Fleetbase\Events\ResourceLifecycleEvent;
6
+ use Fleetbase\FleetOps\Http\Resources\v1\Order as OrderResource;
7
+ use Fleetbase\FleetOps\Models\Order;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Illuminate\Broadcasting\Channel;
10
+ use Illuminate\Bus\Queueable;
11
+ use Illuminate\Contracts\Queue\ShouldQueue;
12
+ use Illuminate\Notifications\Messages\BroadcastMessage;
13
+ use Illuminate\Notifications\Messages\MailMessage;
14
+ use Illuminate\Notifications\Notification;
15
+ use NotificationChannels\Apn\ApnChannel;
16
+ use NotificationChannels\Apn\ApnMessage;
17
+ use NotificationChannels\Fcm\FcmChannel;
18
+ use NotificationChannels\Fcm\FcmMessage;
19
+ use NotificationChannels\Fcm\Resources\AndroidConfig;
20
+ use NotificationChannels\Fcm\Resources\AndroidFcmOptions;
21
+ use NotificationChannels\Fcm\Resources\AndroidNotification;
22
+ use NotificationChannels\Fcm\Resources\ApnsConfig;
23
+ use NotificationChannels\Fcm\Resources\ApnsFcmOptions;
24
+
25
+ class OrderDispatched extends Notification implements ShouldQueue
26
+ {
27
+ use Queueable;
28
+
29
+ /**
30
+ * The order instance this notification is for.
31
+ *
32
+ * @var \Fleetbase\Models\Order
33
+ */
34
+ public $order;
35
+
36
+ /**
37
+ * Create a new notification instance.
38
+ *
39
+ * @return void
40
+ */
41
+ public function __construct(Order $order)
42
+ {
43
+ $this->order = $order->setRelations([]);
44
+ }
45
+
46
+ /**
47
+ * Get the notification's delivery channels.
48
+ *
49
+ * @return array
50
+ */
51
+ public function via($notifiable)
52
+ {
53
+ return ['broadcast', 'mail', FcmChannel::class, ApnChannel::class];
54
+ }
55
+
56
+ /**
57
+ * Get the type of the notification being broadcast.
58
+ *
59
+ * @return string
60
+ */
61
+ public function broadcastType()
62
+ {
63
+ return 'order.dispatched';
64
+ }
65
+
66
+ /**
67
+ * Get the channels the event should broadcast on.
68
+ *
69
+ * @return \Illuminate\Broadcasting\Channel|array
70
+ */
71
+ public function broadcastOn()
72
+ {
73
+ return [
74
+ new Channel('company.' . session('company', data_get($this->order, 'company.uuid'))),
75
+ new Channel('company.' . data_get($this->order, 'company.public_id')),
76
+ new Channel('api.' . session('api_credential')),
77
+ new Channel('order.' . $this->order->uuid),
78
+ new Channel('order.' . $this->order->public_id),
79
+ ];
80
+ }
81
+
82
+ /**
83
+ * Get the broadcastable representation of the notification.
84
+ *
85
+ * @return BroadcastMessage
86
+ */
87
+ public function toBroadcast($notifiable)
88
+ {
89
+ $model = $this->order;
90
+ $resource = new OrderResource($model);
91
+ $resourceData = [];
92
+
93
+ if ($resource) {
94
+ if (method_exists($resource, 'toWebhookPayload')) {
95
+ $resourceData = $resource->toWebhookPayload();
96
+ } elseif (method_exists($resource, 'toArray')) {
97
+ $resourceData = $resource->toArray(request());
98
+ }
99
+ }
100
+
101
+ $resourceData = ResourceLifecycleEvent::transformResourceChildrenToId($resourceData);
102
+
103
+ $data = [
104
+ 'id' => uniqid('event_'),
105
+ 'api_version' => config('api.version'),
106
+ 'event' => 'order.dispatched',
107
+ 'created_at' => now()->toDateTimeString(),
108
+ 'data' => $resourceData,
109
+ ];
110
+
111
+ return new BroadcastMessage($data);
112
+ }
113
+
114
+ /**
115
+ * Get the mail representation of the notification.
116
+ *
117
+ * @return \Illuminate\Notifications\Messages\MailMessage
118
+ */
119
+ public function toMail($notifiable)
120
+ {
121
+ $message = (new MailMessage())
122
+ ->subject('Order ' . $this->order->public_id . ' has been dispatched!')
123
+ ->line('Order ' . $this->order->public_id . ' has been dispatched to you.');
124
+
125
+ $message->action('View Details', Utils::consoleUrl('', ['shift' => 'fleet-ops/orders/view/' . $this->order->public_id]));
126
+
127
+ return $message;
128
+ }
129
+
130
+ /**
131
+ * Get the firebase cloud message representation of the notification.
132
+ *
133
+ * @return array
134
+ */
135
+ public function toFcm($notifiable)
136
+ {
137
+ $notification = \NotificationChannels\Fcm\Resources\Notification::create()
138
+ ->setTitle('Order ' . $this->order->public_id . ' has been dispatched!')
139
+ ->setBody('An order has just been dispatched to you and is ready to be started.');
140
+
141
+ $message = FcmMessage::create()
142
+ ->setData(['id' => $this->order->public_id, 'type' => 'order_dispatched'])
143
+ ->setNotification($notification)
144
+ ->setAndroid(
145
+ AndroidConfig::create()
146
+ ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
147
+ ->setNotification(AndroidNotification::create()->setColor('#4391EA'))
148
+ )->setApns(
149
+ ApnsConfig::create()
150
+ ->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios'))
151
+ );
152
+
153
+ return $message;
154
+ }
155
+
156
+ /**
157
+ * Get the apns message representation of the notification.
158
+ *
159
+ * @return array
160
+ */
161
+ public function toApn($notifiable)
162
+ {
163
+ $message = ApnMessage::create()
164
+ ->badge(1)
165
+ ->title('Order ' . $this->order->public_id . ' has been dispatched!')
166
+ ->body('An order has just been dispatched to you and is ready to be started..')
167
+ ->custom('type', 'order_dispatched')
168
+ ->custom('id', $this->order->public_id)
169
+ ->action('view_order', ['id' => $this->order->public_id]);
170
+
171
+ return $message;
172
+ }
173
+ }
@@ -0,0 +1,162 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Notifications;
4
+
5
+ use Fleetbase\Events\ResourceLifecycleEvent;
6
+ use Fleetbase\FleetOps\Http\Resources\v1\Order as OrderResource;
7
+ use Fleetbase\FleetOps\Models\Order;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Illuminate\Broadcasting\Channel;
10
+ use Illuminate\Bus\Queueable;
11
+ use Illuminate\Contracts\Queue\ShouldQueue;
12
+ use Illuminate\Notifications\Messages\BroadcastMessage;
13
+ use Illuminate\Notifications\Notification;
14
+ use NotificationChannels\Apn\ApnChannel;
15
+ use NotificationChannels\Apn\ApnMessage;
16
+ use NotificationChannels\Fcm\FcmChannel;
17
+ use NotificationChannels\Fcm\FcmMessage;
18
+ use NotificationChannels\Fcm\Resources\AndroidConfig;
19
+ use NotificationChannels\Fcm\Resources\AndroidFcmOptions;
20
+ use NotificationChannels\Fcm\Resources\AndroidNotification;
21
+ use NotificationChannels\Fcm\Resources\ApnsConfig;
22
+ use NotificationChannels\Fcm\Resources\ApnsFcmOptions;
23
+
24
+ class OrderPing extends Notification implements ShouldQueue
25
+ {
26
+ use Queueable;
27
+
28
+ /**
29
+ * The order instance this notification is for.
30
+ */
31
+ public Order $order;
32
+
33
+ /**
34
+ * Distance of order pickup from driver.
35
+ *
36
+ * @var int
37
+ */
38
+ public $distance;
39
+
40
+ /**
41
+ * Create a new notification instance.
42
+ *
43
+ * @return void
44
+ */
45
+ public function __construct(Order $order, $distance = null)
46
+ {
47
+ $this->order = $order->setRelations([]);
48
+ $this->distance = $distance;
49
+ }
50
+
51
+ /**
52
+ * Get the notification's delivery channels.
53
+ *
54
+ * @return array
55
+ */
56
+ public function via($notifiable)
57
+ {
58
+ return ['broadcast', FcmChannel::class, ApnChannel::class];
59
+ }
60
+
61
+ /**
62
+ * Get the type of the notification being broadcast.
63
+ *
64
+ * @return string
65
+ */
66
+ public function broadcastType()
67
+ {
68
+ return 'order.ping';
69
+ }
70
+
71
+ /**
72
+ * Get the channels the event should broadcast on.
73
+ *
74
+ * @return \Illuminate\Broadcasting\Channel|array
75
+ */
76
+ public function broadcastOn()
77
+ {
78
+ return [
79
+ new Channel('company.' . session('company', data_get($this->order, 'company.uuid'))),
80
+ new Channel('company.' . data_get($this->order, 'company.public_id')),
81
+ new Channel('api.' . session('api_credential')),
82
+ new Channel('order.' . $this->order->uuid),
83
+ new Channel('order.' . $this->order->public_id),
84
+ ];
85
+ }
86
+
87
+ /**
88
+ * Get the broadcastable representation of the notification.
89
+ *
90
+ * @return BroadcastMessage
91
+ */
92
+ public function toBroadcast($notifiable)
93
+ {
94
+ $model = $this->order;
95
+ $resource = new OrderResource($model);
96
+ $resourceData = [];
97
+
98
+ if ($resource) {
99
+ if (method_exists($resource, 'toWebhookPayload')) {
100
+ $resourceData = $resource->toWebhookPayload();
101
+ } elseif (method_exists($resource, 'toArray')) {
102
+ $resourceData = $resource->toArray(request());
103
+ }
104
+ }
105
+
106
+ $resourceData = ResourceLifecycleEvent::transformResourceChildrenToId($resourceData);
107
+
108
+ $data = [
109
+ 'id' => uniqid('event_'),
110
+ 'api_version' => config('api.version'),
111
+ 'event' => 'order.ping',
112
+ 'created_at' => now()->toDateTimeString(),
113
+ 'data' => $resourceData,
114
+ ];
115
+
116
+ return new BroadcastMessage($data);
117
+ }
118
+
119
+ /**
120
+ * Get the firebase cloud message representation of the notification.
121
+ *
122
+ * @return array
123
+ */
124
+ public function toFcm($notifiable)
125
+ {
126
+ $notification = \NotificationChannels\Fcm\Resources\Notification::create()
127
+ ->setTitle('New incoming order!')
128
+ ->setBody($this->distance ? 'New order available for pickup about ' . Utils::formatMeters($this->distance, false) . ' away' : 'New order is available for pickup.');
129
+
130
+ $message = FcmMessage::create()
131
+ ->setData(['id' => $this->order->public_id, 'type' => 'order_ping'])
132
+ ->setNotification($notification)
133
+ ->setAndroid(
134
+ AndroidConfig::create()
135
+ ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
136
+ ->setNotification(AndroidNotification::create()->setColor('#4391EA'))
137
+ )->setApns(
138
+ ApnsConfig::create()
139
+ ->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios'))
140
+ );
141
+
142
+ return $message;
143
+ }
144
+
145
+ /**
146
+ * Get the apns message representation of the notification.
147
+ *
148
+ * @return array
149
+ */
150
+ public function toApn($notifiable)
151
+ {
152
+ $message = ApnMessage::create()
153
+ ->badge(1)
154
+ ->title('New incoming order!')
155
+ ->body($this->distance ? 'New order available for pickup about ' . Utils::formatMeters($this->distance, false) . ' away' : 'New order is available for pickup.')
156
+ ->custom('type', 'order_ping')
157
+ ->custom('id', $this->order->public_id)
158
+ ->action('view_order', ['id' => $this->order->public_id]);
159
+
160
+ return $message;
161
+ }
162
+ }
@@ -0,0 +1,56 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Notifications;
4
+
5
+ use Illuminate\Bus\Queueable;
6
+ // use Illuminate\Contracts\Queue\ShouldQueue;
7
+ use Illuminate\Notifications\Messages\MailMessage;
8
+ use Illuminate\Notifications\Notification;
9
+
10
+ class OrderSplit extends Notification
11
+ {
12
+ use Queueable;
13
+
14
+ /**
15
+ * Create a new notification instance.
16
+ *
17
+ * @return void
18
+ */
19
+ public function __construct()
20
+ {
21
+ }
22
+
23
+ /**
24
+ * Get the notification's delivery channels.
25
+ *
26
+ * @return array
27
+ */
28
+ public function via($notifiable)
29
+ {
30
+ return ['mail'];
31
+ }
32
+
33
+ /**
34
+ * Get the mail representation of the notification.
35
+ *
36
+ * @return \Illuminate\Notifications\Messages\MailMessage
37
+ */
38
+ public function toMail($notifiable)
39
+ {
40
+ return (new MailMessage())
41
+ ->line('The introduction to the notification.')
42
+ ->action('Notification Action', url('/'))
43
+ ->line('Thank you for using our application!');
44
+ }
45
+
46
+ /**
47
+ * Get the array representation of the notification.
48
+ *
49
+ * @return array
50
+ */
51
+ public function toArray($notifiable)
52
+ {
53
+ return [
54
+ ];
55
+ }
56
+ }
@@ -0,0 +1,34 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Observers;
4
+
5
+ use Fleetbase\FleetOps\Models\Driver;
6
+ use Fleetbase\Models\User;
7
+ use Grimzy\LaravelMysqlSpatial\Types\Point;
8
+
9
+ class DriverObserver
10
+ {
11
+ /**
12
+ * Handle the Driver "creating" event.
13
+ *
14
+ * @return void
15
+ */
16
+ public function creating(Driver $driver)
17
+ {
18
+ // if the driver has no default location set one
19
+ if (empty($driver->location)) {
20
+ $driver->location = new Point(0, 0);
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Handle the Driver "deleted" event.
26
+ *
27
+ * @return void
28
+ */
29
+ public function deleted(Driver $driver)
30
+ {
31
+ // if the driver is deleted, delete their user account assosciated as well
32
+ User::where(['uuid' => $driver->user_uuid, 'type' => 'driver'])->delete();
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Observers;
4
+
5
+ use Fleetbase\FleetOps\Models\Order;
6
+
7
+ class OrderObserver
8
+ {
9
+ /**
10
+ * Handle the Order "updated" event.
11
+ *
12
+ * @return void
13
+ */
14
+ public function updated(Order $order)
15
+ {
16
+ $order->setDriverLocationAsPickup();
17
+
18
+ if ($order->wasChanged('driver_assigned_uuid')) {
19
+ $order->notifyDriverAssigned();
20
+ }
21
+ }
22
+
23
+ /**
24
+ * Handle the Order "deleted" event.
25
+ *
26
+ * @return void
27
+ */
28
+ public function deleted(Order $order)
29
+ {
30
+ if ($order->isIntegratedVendorOrder()) {
31
+ $order->facilitator->provider()->callback('onDeleted', $order);
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,30 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Observers;
4
+
5
+ use Fleetbase\FleetOps\Models\Payload;
6
+
7
+ class PayloadObserver
8
+ {
9
+ /**
10
+ * Handle the Payload "creating" event.
11
+ *
12
+ * @return void
13
+ */
14
+ public function created(Payload $payload)
15
+ {
16
+ // load the order
17
+ $payload->updateOrderDistanceAndTime();
18
+ }
19
+
20
+ /**
21
+ * Handle the Payload "updating" event.
22
+ *
23
+ * @return void
24
+ */
25
+ public function updating(Payload $payload)
26
+ {
27
+ $waypoints = request()->array('payload.waypoints');
28
+ $payload->updateWaypoints($waypoints);
29
+ }
30
+ }