@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,244 @@
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\HasPublicId;
10
+ use Fleetbase\Traits\HasUuid;
11
+ use Fleetbase\Traits\Searchable;
12
+ use Fleetbase\Traits\TracksApiCredential;
13
+ use Illuminate\Notifications\Notifiable;
14
+ use Spatie\Activitylog\Traits\LogsActivity;
15
+ use Spatie\Sluggable\HasSlug;
16
+ use Spatie\Sluggable\SlugOptions;
17
+
18
+ class Vendor extends Model
19
+ {
20
+ use HasUuid;
21
+ use HasPublicId;
22
+ use HasApiModelBehavior;
23
+ use HasInternalId;
24
+ use TracksApiCredential;
25
+ use Searchable;
26
+ use HasSlug;
27
+ use LogsActivity;
28
+ use Notifiable;
29
+
30
+ /**
31
+ * The database table used by the model.
32
+ *
33
+ * @var string
34
+ */
35
+ protected $table = 'vendors';
36
+
37
+ /**
38
+ * The type of public Id to generate.
39
+ *
40
+ * @var string
41
+ */
42
+ protected $publicIdType = 'vendor';
43
+
44
+ /**
45
+ * The attributes that are mass assignable.
46
+ *
47
+ * @var array
48
+ */
49
+ protected $fillable = [
50
+ '_key',
51
+ 'internal_id',
52
+ 'company_uuid',
53
+ 'logo_uuid',
54
+ 'type_uuid',
55
+ 'connect_company_uuid',
56
+ 'business_id',
57
+ 'name',
58
+ 'email',
59
+ 'website_url',
60
+ 'meta',
61
+ 'callbacks',
62
+ 'phone',
63
+ 'place_uuid',
64
+ 'country',
65
+ 'status',
66
+ 'type',
67
+ 'slug',
68
+ ];
69
+
70
+ /**
71
+ * These attributes that can be queried.
72
+ *
73
+ * @var array
74
+ */
75
+ protected $searchableColumns = ['name', 'email', 'business_id', 'company.name'];
76
+
77
+ /**
78
+ * Dynamic attributes that are appended to object.
79
+ *
80
+ * @var array
81
+ */
82
+ protected $appends = ['address', 'address_street', 'logo_url'];
83
+
84
+ /**
85
+ * Filterable params.
86
+ *
87
+ * @var array
88
+ */
89
+ protected $filterParams = ['customer_type', 'facilitator_type', 'photo_url'];
90
+
91
+ /**
92
+ * The attributes that should be cast to native types.
93
+ *
94
+ * @var array
95
+ */
96
+ protected $casts = [
97
+ 'callbacks' => Json::class,
98
+ 'meta' => Json::class,
99
+ ];
100
+
101
+ /**
102
+ * Relationships to auto load with driver.
103
+ *
104
+ * @var array
105
+ */
106
+ protected $with = ['place'];
107
+
108
+ /**
109
+ * Properties which activity needs to be logged.
110
+ *
111
+ * @var array
112
+ */
113
+ protected static $logAttributes = ['name', 'email', 'website_url', 'phone', 'country', 'status', 'type', 'logo_uuid', 'company_uuid'];
114
+
115
+ /**
116
+ * Do not log empty changed.
117
+ *
118
+ * @var bool
119
+ */
120
+ protected static $submitEmptyLogs = false;
121
+
122
+ /**
123
+ * We only want to log changed attributes.
124
+ *
125
+ * @var bool
126
+ */
127
+ protected static $logOnlyDirty = true;
128
+
129
+ /**
130
+ * The name of the subject to log.
131
+ *
132
+ * @var string
133
+ */
134
+ protected static $logName = 'vendor';
135
+
136
+ /**
137
+ * Get the options for generating the slug.
138
+ */
139
+ public function getSlugOptions(): SlugOptions
140
+ {
141
+ return SlugOptions::create()
142
+ ->generateSlugsFrom('name')
143
+ ->saveSlugsTo('slug');
144
+ }
145
+
146
+ /**
147
+ * The attributes excluded from the model's JSON form.
148
+ *
149
+ * @var array
150
+ */
151
+ protected $hidden = ['place'];
152
+
153
+ /**
154
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
155
+ */
156
+ public function place()
157
+ {
158
+ return $this->belongsTo(Place::class);
159
+ }
160
+
161
+ /**
162
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
163
+ */
164
+ public function connectCompany()
165
+ {
166
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
167
+ }
168
+
169
+ /**
170
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
171
+ */
172
+ public function company()
173
+ {
174
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
175
+ }
176
+
177
+ /**
178
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
179
+ */
180
+ public function logo()
181
+ {
182
+ return $this->belongsTo(\Fleetbase\Models\File::class);
183
+ }
184
+
185
+ /**
186
+ * Get the vendor logo url.
187
+ *
188
+ * @return string
189
+ */
190
+ public function getLogoUrlAttribute()
191
+ {
192
+ return data_get($this, 'logo.url', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png');
193
+ }
194
+
195
+ /**
196
+ * Returns the vendors place address.
197
+ *
198
+ * @return string
199
+ */
200
+ public function getAddressAttribute()
201
+ {
202
+ return data_get($this, 'place.address_html');
203
+ }
204
+
205
+ /**
206
+ * Returns the vendors place address.
207
+ *
208
+ * @return string
209
+ */
210
+ public function getAddressStreetAttribute()
211
+ {
212
+ return data_get($this, 'place.street1');
213
+ }
214
+
215
+ /**
216
+ * Notify vendor using this column.
217
+ *
218
+ * @return mixed|string
219
+ */
220
+ public function routeNotificationForTwilio()
221
+ {
222
+ return $this->phone;
223
+ }
224
+
225
+ /**
226
+ * Set the vendor type or default to `vendor`.
227
+ *
228
+ * @return void
229
+ */
230
+ public function setTypeAttribute(?string $type)
231
+ {
232
+ $this->attributes['type'] = $type ?? 'vendor';
233
+ }
234
+
235
+ /**
236
+ * Set the vendor default status.
237
+ *
238
+ * @return void
239
+ */
240
+ public function setStatusAttribute(?string $status = 'active')
241
+ {
242
+ $this->attributes['status'] = $status ?? 'active';
243
+ }
244
+ }
@@ -0,0 +1,226 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Barryvdh\DomPDF\Facade\Pdf;
6
+ use Fleetbase\FleetOps\Support\Utils;
7
+ use Fleetbase\FleetOps\Traits\HasTrackingNumber;
8
+ use Fleetbase\Models\Model;
9
+ use Fleetbase\Traits\HasPublicId;
10
+ use Fleetbase\Traits\HasUuid;
11
+ use Fleetbase\Traits\TracksApiCredential;
12
+ use Illuminate\Support\Carbon;
13
+
14
+ class Waypoint extends Model
15
+ {
16
+ use HasUuid;
17
+ use HasPublicId;
18
+ use TracksApiCredential;
19
+ use HasTrackingNumber;
20
+
21
+ /**
22
+ * The database table used by the model.
23
+ *
24
+ * @var string
25
+ */
26
+ protected $table = 'waypoints';
27
+
28
+ /**
29
+ * The type of public Id to generate.
30
+ *
31
+ * @var string
32
+ */
33
+ protected $publicIdType = 'waypoint';
34
+
35
+ /**
36
+ * These attributes that can be queried.
37
+ *
38
+ * @var array
39
+ */
40
+ protected $searchableColumns = [];
41
+
42
+ /**
43
+ * The attributes that are mass assignable.
44
+ *
45
+ * @var array
46
+ */
47
+ protected $fillable = ['_key', 'company_uuid', 'place_uuid', 'tracking_number_uuid', '_import_id', 'payload_uuid', 'type', 'order'];
48
+
49
+ /**
50
+ * Dynamic attributes that are appended to object.
51
+ *
52
+ * @var array
53
+ */
54
+ protected $appends = ['status', 'status_code', 'tracking'];
55
+
56
+ /**
57
+ * Relationships to always append to model.
58
+ *
59
+ * @var array
60
+ */
61
+ protected $with = ['place'];
62
+
63
+ /**
64
+ * The attributes excluded from the model's JSON form.
65
+ *
66
+ * @var array
67
+ */
68
+ protected $hidden = [];
69
+
70
+ /**
71
+ * The pdf source stream for label.
72
+ */
73
+ public function pdfLabel()
74
+ {
75
+ return Pdf::loadHTML($this->label());
76
+ }
77
+
78
+ /**
79
+ * The pdf source stream for label.
80
+ */
81
+ public function pdfLabelStream()
82
+ {
83
+ return $this->pdfLabel()->stream();
84
+ }
85
+
86
+ /**
87
+ * The html for the shipment label.
88
+ */
89
+ public function label()
90
+ {
91
+ $this->load(['trackingNumber', 'company', 'place']);
92
+
93
+ return view('labels/default', [
94
+ 'order' => $this,
95
+ 'dropoff' => $this->place,
96
+ 'trackingNumber' => $this->trackingNumber,
97
+ 'company' => $this->company,
98
+ ])->render();
99
+ }
100
+
101
+ /**
102
+ * Place assosciated to order.
103
+ *
104
+ * @var Model
105
+ */
106
+ public function place()
107
+ {
108
+ return $this->belongsTo(Place::class);
109
+ }
110
+
111
+ /**
112
+ * Tracking Number assosciated to waypoint.
113
+ *
114
+ * @var Model
115
+ */
116
+ public function trackingNumber()
117
+ {
118
+ return $this->belongsTo(TrackingNumber::class);
119
+ }
120
+
121
+ /**
122
+ * The proofs for this order.
123
+ */
124
+ public function proofs()
125
+ {
126
+ return $this->hasMany(Proof::class, 'subject_uuid');
127
+ }
128
+
129
+ /**
130
+ * Payload assosciated to waypoint.
131
+ *
132
+ * @var Model
133
+ */
134
+ public function payload()
135
+ {
136
+ return $this->belongsTo(Payload::class);
137
+ }
138
+
139
+ /**
140
+ * The company who manages this waypoint.
141
+ *
142
+ * @var Model
143
+ */
144
+ public function company()
145
+ {
146
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
147
+ }
148
+
149
+ /**
150
+ * Waypoint has completed instance.
151
+ *
152
+ * @var Model
153
+ */
154
+ public function completed()
155
+ {
156
+ return $this->hasOne(WaypointCompleted::class, 'place_uuid', 'place_uuid')->where('payload_uuid', $this->payload_uuid);
157
+ }
158
+
159
+ /**
160
+ * The tracking number for waypoint.
161
+ */
162
+ public function getTrackingAttribute()
163
+ {
164
+ return data_get($this, 'trackingNumber.tracking_number');
165
+ }
166
+
167
+ /**
168
+ * The latest tracking status for waypoint.
169
+ */
170
+ public function getStatusAttribute()
171
+ {
172
+ return data_get($this, 'trackingNumber.last_status');
173
+ }
174
+
175
+ /**
176
+ * The latest tracking status code for waypoint.
177
+ */
178
+ public function getStatusCodeAttribute()
179
+ {
180
+ return data_get($this, 'trackingNumber.last_status_code');
181
+ }
182
+
183
+ public static function insertGetUuid($values = [], Payload $payload = null)
184
+ {
185
+ $instance = new static();
186
+ $fillable = $instance->getFillable();
187
+ $insertKeys = array_keys($values);
188
+ // clean insert data
189
+ foreach ($insertKeys as $key) {
190
+ if (!in_array($key, $fillable)) {
191
+ unset($values[$key]);
192
+ }
193
+ }
194
+
195
+ $values['uuid'] = $uuid = static::generateUuid();
196
+ $values['public_id'] = static::generatePublicId('waypoint');
197
+ $values['_key'] = session('api_key') ?? 'console';
198
+ $values['created_at'] = Carbon::now()->toDateTimeString();
199
+ $values['company_uuid'] = session('company');
200
+
201
+ if ($payload) {
202
+ $values['payload_uuid'] = $payload->uuid;
203
+ }
204
+
205
+ if (isset($values['meta']) && (is_object($values['meta']) || is_array($values['meta']))) {
206
+ $values['meta'] = json_encode($values['meta']);
207
+ }
208
+
209
+ $result = static::insert($values);
210
+
211
+ if ($result && $payload) {
212
+ // create tracking number for entity
213
+ $trackingNumberId = TrackingNumber::insertGetUuid([
214
+ 'owner_uuid' => $uuid,
215
+ 'owner_type' => Utils::getModelClassName('waypoint'),
216
+ 'region' => $payload->getPickupRegion(),
217
+ 'location' => Utils::parsePointToWkt($payload->getPickupLocation()),
218
+ ]);
219
+
220
+ // set tracking number
221
+ static::where('uuid', $uuid)->update(['tracking_number_uuid' => $trackingNumberId]);
222
+ }
223
+
224
+ return $result ? $uuid : false;
225
+ }
226
+ }
@@ -0,0 +1,95 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\FleetOps\Casts\Polygon;
6
+ use Fleetbase\Models\Model;
7
+ use Fleetbase\Traits\HasApiModelBehavior;
8
+ use Fleetbase\Traits\HasPublicId;
9
+ use Fleetbase\Traits\HasUuid;
10
+ use Fleetbase\Traits\SendsWebhooks;
11
+ use Fleetbase\Traits\TracksApiCredential;
12
+ use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
13
+
14
+ class Zone extends Model
15
+ {
16
+ use HasUuid;
17
+ use HasPublicId;
18
+ use SendsWebhooks;
19
+ use TracksApiCredential;
20
+ use SpatialTrait;
21
+ use HasApiModelBehavior;
22
+
23
+ /**
24
+ * The type of public Id to generate.
25
+ *
26
+ * @var string
27
+ */
28
+ protected $publicIdType = 'zone';
29
+
30
+ /**
31
+ * The database table used by the model.
32
+ *
33
+ * @var string
34
+ */
35
+ protected $table = 'zones';
36
+
37
+ /**
38
+ * These attributes that can be queried.
39
+ *
40
+ * @var array
41
+ */
42
+ protected $searchableColumns = [];
43
+
44
+ /**
45
+ * The attributes that are spatial columns.
46
+ *
47
+ * @var array
48
+ */
49
+ protected $spatialFields = ['border'];
50
+
51
+ /**
52
+ * The attributes that are mass assignable.
53
+ *
54
+ * @var array
55
+ */
56
+ protected $fillable = ['_key', 'company_uuid', 'service_area_uuid', 'name', 'description', 'border', 'color', 'stroke_color', 'status'];
57
+
58
+ /**
59
+ * The attributes that should be cast to native types.
60
+ *
61
+ * @var array
62
+ */
63
+ protected $casts = [
64
+ 'border' => Polygon::class,
65
+ ];
66
+
67
+ /**
68
+ * Dynamic attributes that are appended to object.
69
+ *
70
+ * @var array
71
+ */
72
+ protected $appends = ['type'];
73
+
74
+ /**
75
+ * The attributes excluded from the model's JSON form.
76
+ *
77
+ * @var array
78
+ */
79
+ protected $hidden = [];
80
+
81
+ /**
82
+ * Service area for rate.
83
+ *
84
+ * @var Model
85
+ */
86
+ public function serviceArea()
87
+ {
88
+ return $this->belongsTo(ServiceArea::class);
89
+ }
90
+
91
+ public function getTypeAttribute()
92
+ {
93
+ return 'zone';
94
+ }
95
+ }
@@ -0,0 +1,140 @@
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 OrderAssigned 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('New order ' . $this->order->public_id . ' assigned!')
78
+ ->line('New order ' . $this->order->public_id . ' has been assigned to you.');
79
+
80
+ if ($this->order->isScheduled) {
81
+ $message->line('Dispatch is scheduled for ' . $this->order->scheduled_at);
82
+ }
83
+
84
+ $message->action('View Details', Utils::consoleUrl('', ['shift' => 'fleet-ops/orders/view/' . $this->order->public_id]));
85
+
86
+ return $message;
87
+ }
88
+
89
+ /**
90
+ * Get the firebase cloud message representation of the notification.
91
+ *
92
+ * @return array
93
+ */
94
+ public function toFcm($notifiable)
95
+ {
96
+ $notification = \NotificationChannels\Fcm\Resources\Notification::create()
97
+ ->setTitle('New order ' . $this->order->public_id . ' assigned!')
98
+ ->setBody('You have a new order assigned, tap for details.');
99
+
100
+ if ($this->order->isScheduled) {
101
+ $notification->setBody('You have a new order scheduled for ' . $this->order->scheduled_at);
102
+ }
103
+
104
+ $message = FcmMessage::create()
105
+ ->setData(['id' => $this->order->public_id, 'type' => 'order_assigned'])
106
+ ->setNotification($notification)
107
+ ->setAndroid(
108
+ AndroidConfig::create()
109
+ ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
110
+ ->setNotification(AndroidNotification::create()->setColor('#4391EA'))
111
+ )->setApns(
112
+ ApnsConfig::create()
113
+ ->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios'))
114
+ );
115
+
116
+ return $message;
117
+ }
118
+
119
+ /**
120
+ * Get the apns message representation of the notification.
121
+ *
122
+ * @return array
123
+ */
124
+ public function toApn($notifiable)
125
+ {
126
+ $message = ApnMessage::create()
127
+ ->badge(1)
128
+ ->title('New order ' . $this->order->public_id . ' assigned!')
129
+ ->body('You have a new order assigned, tap for details.')
130
+ ->custom('type', 'order_assigned')
131
+ ->custom('id', $this->order->public_id)
132
+ ->action('view_order', ['id' => $this->order->public_id]);
133
+
134
+ if ($this->order->isScheduled) {
135
+ $message->body('You have a new order scheduled for ' . $this->order->scheduled_at);
136
+ }
137
+
138
+ return $message;
139
+ }
140
+ }