@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,416 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Barryvdh\DomPDF\Facade\Pdf;
6
+ use Fleetbase\Casts\Json;
7
+ use Fleetbase\Casts\PolymorphicType;
8
+ use Fleetbase\FleetOps\Support\Utils;
9
+ use Fleetbase\FleetOps\Traits\HasTrackingNumber;
10
+ use Fleetbase\Models\Model;
11
+ use Fleetbase\Traits\HasApiModelBehavior;
12
+ use Fleetbase\Traits\HasInternalId;
13
+ use Fleetbase\Traits\HasMetaAttributes;
14
+ use Fleetbase\Traits\HasPublicId;
15
+ use Fleetbase\Traits\HasUuid;
16
+ use Fleetbase\Traits\SendsWebhooks;
17
+ use Fleetbase\Traits\TracksApiCredential;
18
+ use Illuminate\Support\Carbon;
19
+ use Illuminate\Support\Str;
20
+ use Milon\Barcode\Facades\DNS2DFacade as DNS2D;
21
+ use PhpUnitsOfMeasure\PhysicalQuantity\Length;
22
+ use PhpUnitsOfMeasure\PhysicalQuantity\Mass;
23
+
24
+ class Entity extends Model
25
+ {
26
+ use HasUuid;
27
+ use HasPublicId;
28
+ use HasInternalId;
29
+ use TracksApiCredential;
30
+ use SendsWebhooks;
31
+ use HasTrackingNumber;
32
+ use HasApiModelBehavior;
33
+ use HasMetaAttributes;
34
+
35
+ /**
36
+ * The database table used by the model.
37
+ *
38
+ * @var string
39
+ */
40
+ protected $table = 'entities';
41
+
42
+ /**
43
+ * The type of public Id to generate.
44
+ *
45
+ * @var string
46
+ */
47
+ protected $publicIdType = 'entity';
48
+
49
+ /**
50
+ * These attributes that can be queried.
51
+ *
52
+ * @var array
53
+ */
54
+ protected $searchableColumns = [];
55
+
56
+ /**
57
+ * The attributes that are mass assignable.
58
+ *
59
+ * @var array
60
+ */
61
+ protected $fillable = [
62
+ '_key',
63
+ 'public_id',
64
+ 'payload_uuid',
65
+ 'company_uuid',
66
+ 'driver_assigned_uuid',
67
+ 'customer_uuid',
68
+ 'customer_type',
69
+ 'tracking_number_uuid',
70
+ 'destination_uuid',
71
+ 'photo_uuid',
72
+ '_import_id',
73
+ 'internal_id',
74
+ 'name',
75
+ 'type',
76
+ 'description',
77
+ 'currency',
78
+ 'barcode',
79
+ 'qr_code',
80
+ 'weight',
81
+ 'weight_unit',
82
+ 'length',
83
+ 'width',
84
+ 'height',
85
+ 'dimensions_unit',
86
+ 'declared_value',
87
+ 'sku',
88
+ 'price',
89
+ 'sale_price',
90
+ 'meta',
91
+ 'slug',
92
+ ];
93
+
94
+ /**
95
+ * Dynamic attributes that are appended to object.
96
+ *
97
+ * @var array
98
+ */
99
+ protected $appends = ['customer_is_vendor', 'customer_is_contact', 'tracking', 'status', 'photo_url'];
100
+
101
+ /**
102
+ * The attributes excluded from the model's JSON form.
103
+ *
104
+ * @var array
105
+ */
106
+ protected $hidden = ['trackingNumber'];
107
+
108
+ /**
109
+ * The attributes that should be cast to native types.
110
+ *
111
+ * @var array
112
+ */
113
+ protected $casts = [
114
+ 'meta' => Json::class,
115
+ 'customer_type' => PolymorphicType::class,
116
+ ];
117
+
118
+ /**
119
+ * Generates QR Code & Barcode on creation.
120
+ *
121
+ * @return void
122
+ */
123
+ public static function boot()
124
+ {
125
+ parent::boot();
126
+ static::creating(function ($model) {
127
+ $model->qr_code = DNS2D::getBarcodePNG($model->uuid, 'QRCODE');
128
+ $model->barcode = DNS2D::getBarcodePNG($model->uuid, 'PDF417');
129
+ });
130
+ }
131
+
132
+ /**
133
+ * The pdf source stream for label.
134
+ */
135
+ public function pdfLabel()
136
+ {
137
+ return Pdf::loadHTML($this->label());
138
+ }
139
+
140
+ /**
141
+ * The pdf source stream for label.
142
+ */
143
+ public function pdfLabelStream()
144
+ {
145
+ return $this->pdfLabel()->stream();
146
+ }
147
+
148
+ /**
149
+ * The html for the shipment label.
150
+ */
151
+ public function label()
152
+ {
153
+ $this->load(['trackingNumber', 'company', 'destination']);
154
+
155
+ return view('labels/default', [
156
+ 'dropoff' => $this->destination,
157
+ 'trackingNumber' => $this->trackingNumber,
158
+ 'company' => $this->company,
159
+ ])->render();
160
+ }
161
+
162
+ /**
163
+ * Photo of entity belongs to.
164
+ *
165
+ * @var Model
166
+ */
167
+ public function photo()
168
+ {
169
+ return $this->belongsTo(\Fleetbase\Models\File::class);
170
+ }
171
+
172
+ /**
173
+ * Files assosciated with entity.
174
+ *
175
+ * @var Model
176
+ */
177
+ public function files()
178
+ {
179
+ return $this->hasMany(\Fleetbase\Models\File::class);
180
+ }
181
+
182
+ /**
183
+ * The proofs for this order.
184
+ */
185
+ public function proofs()
186
+ {
187
+ return $this->hasMany(Proof::class, 'subject_uuid');
188
+ }
189
+
190
+ /**
191
+ * The entity destination.
192
+ *
193
+ * @var Model
194
+ */
195
+ public function destination()
196
+ {
197
+ return $this->belongsTo(Place::class);
198
+ }
199
+
200
+ /**
201
+ * Payload entity belongs to.
202
+ *
203
+ * @var Model
204
+ */
205
+ public function payload()
206
+ {
207
+ return $this->belongsTo(Payload::class);
208
+ }
209
+
210
+ /**
211
+ * Driver assigned to order.
212
+ *
213
+ * @var Model
214
+ */
215
+ public function driver()
216
+ {
217
+ return $this->belongsTo(Driver::class, 'driver_assigned_uuid');
218
+ }
219
+
220
+ /**
221
+ * The company who manages this order.
222
+ *
223
+ * @var Model
224
+ */
225
+ public function company()
226
+ {
227
+ return $this->belongsTo(\Fleetbase\Models\Company::class);
228
+ }
229
+
230
+ /**
231
+ * The tracking number assosicated to the entity.
232
+ */
233
+ public function trackingNumber()
234
+ {
235
+ return $this->belongsTo(TrackingNumber::class);
236
+ }
237
+
238
+ /**
239
+ * The customer of this order.
240
+ *
241
+ * @var Model
242
+ */
243
+ public function customer()
244
+ {
245
+ return $this->morphTo(__FUNCTION__, 'customer_type', 'customer_uuid')->withoutGlobalScopes();
246
+ }
247
+
248
+ /**
249
+ * Get avatar URL attribute.
250
+ *
251
+ * @return string
252
+ */
253
+ public function getPhotoUrlAttribute()
254
+ {
255
+ return data_get($this, 'photo.s3url', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/parcels/medium.png');
256
+ }
257
+
258
+ /**
259
+ * True of the customer is a vendor `customer_is_vendor`.
260
+ *
261
+ * @var bool
262
+ */
263
+ public function getCustomerIsVendorAttribute()
264
+ {
265
+ return Str::contains(strtolower($this->customer_type), 'vendor');
266
+ }
267
+
268
+ /**
269
+ * True of the customer is a contact `customer_is_contact`.
270
+ *
271
+ * @var bool
272
+ */
273
+ public function getCustomerIsContactAttribute()
274
+ {
275
+ return Str::contains(strtolower($this->customer_type), 'contact');
276
+ }
277
+
278
+ /**
279
+ * The length the entity belongs to.
280
+ *
281
+ * @var PhpUnitsOfMeasure\PhysicalQuantity\Length
282
+ */
283
+ public function getLengthUnitAttribute()
284
+ {
285
+ return new Length($this->length, $this->dimensions_unit);
286
+ }
287
+
288
+ /**
289
+ * The width the entity belongs to.
290
+ *
291
+ * @var PhpUnitsOfMeasure\PhysicalQuantity\Length
292
+ */
293
+ public function getWidthUnitAttribute()
294
+ {
295
+ return new Length($this->width, $this->dimensions_unit);
296
+ }
297
+
298
+ /**
299
+ * The height the entity belongs to.
300
+ *
301
+ * @var PhpUnitsOfMeasure\PhysicalQuantity\Length
302
+ */
303
+ public function getHeightUnitAttribute()
304
+ {
305
+ return new Length($this->height, $this->dimensions_unit);
306
+ }
307
+
308
+ /**
309
+ * The weight the entity belongs to.
310
+ *
311
+ * @var PhpUnitsOfMeasure\PhysicalQuantity\Mass
312
+ */
313
+ public function getMassUnitAttribute()
314
+ {
315
+ return new Mass($this->weight, $this->weight_unit);
316
+ }
317
+
318
+ /**
319
+ * Always convert price to integer.
320
+ */
321
+ public function setPriceAttribute($value)
322
+ {
323
+ $this->attributes['price'] = Utils::numbersOnly($value);
324
+ }
325
+
326
+ /**
327
+ * Always convert sale price to integer.
328
+ */
329
+ public function setSalePriceAttribute($value)
330
+ {
331
+ $this->attributes['sale_price'] = Utils::numbersOnly($value);
332
+ }
333
+
334
+ /**
335
+ * Always convert declared value to integer.
336
+ */
337
+ public function setDeclaredValueAttribute($value)
338
+ {
339
+ $this->attributes['declared_value'] = Utils::numbersOnly($value);
340
+ }
341
+
342
+ /**
343
+ * The tracking number for the entity.
344
+ */
345
+ public function getTrackingAttribute()
346
+ {
347
+ return data_get($this, 'trackingNumber.tracking_number');
348
+ }
349
+
350
+ /**
351
+ * The latest tracking status for entity.
352
+ */
353
+ public function getStatusAttribute()
354
+ {
355
+ return data_get($this, 'trackingNumber.last_status');
356
+ }
357
+
358
+ public static function insertGetUuid($values = [], Payload $payload = null)
359
+ {
360
+ if (is_array($values) && isset($values['uuid'])) {
361
+ Entity::where('uuid', $values['uuid'])->update([
362
+ 'payload_uuid' => $payload->uuid,
363
+ ]);
364
+
365
+ return $values['uuid'];
366
+ }
367
+
368
+ $instance = new static();
369
+ $fillable = $instance->getFillable();
370
+ $insertKeys = array_keys($values);
371
+ // clean insert data
372
+ foreach ($insertKeys as $key) {
373
+ if (!in_array($key, $fillable)) {
374
+ unset($values[$key]);
375
+ }
376
+ }
377
+
378
+ $values['uuid'] = $uuid = static::generateUuid();
379
+ $values['public_id'] = static::generatePublicId('entity');
380
+ $values['internal_id'] = static::generateInternalId();
381
+ $values['_key'] = session('api_key', 'console');
382
+ $values['created_at'] = Carbon::now()->toDateTimeString();
383
+ $values['company_uuid'] = session('company');
384
+
385
+ if ($payload) {
386
+ $values['payload_uuid'] = $payload->uuid;
387
+ }
388
+
389
+ if (isset($values['meta']) && (is_object($values['meta']) || is_array($values['meta']))) {
390
+ $values['meta'] = json_encode($values['meta']);
391
+ }
392
+
393
+ $result = static::insert($values);
394
+
395
+ if ($result && $payload) {
396
+ // create tracking number for entity
397
+ $trackingNumberId = TrackingNumber::insertGetUuid([
398
+ 'owner_uuid' => $uuid,
399
+ 'owner_type' => Utils::getModelClassName('entity'),
400
+ 'region' => $payload->getPickupRegion(),
401
+ 'location' => Utils::parsePointToWkt($payload->getPickupLocation()),
402
+ ]);
403
+
404
+ // set tracking number
405
+ static::where('uuid', $uuid)->update(['tracking_number_uuid' => $trackingNumberId]);
406
+ }
407
+
408
+ return $result ? $uuid : false;
409
+ }
410
+
411
+ public function setCustomer($model)
412
+ {
413
+ $this->customer_uuid = $model->uuid;
414
+ $this->customer_type = Utils::getMutationType($model);
415
+ }
416
+ }
@@ -0,0 +1,203 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Models\Model;
6
+ use Fleetbase\Traits\HasApiModelBehavior;
7
+ use Fleetbase\Traits\HasPublicId;
8
+ use Fleetbase\Traits\HasUuid;
9
+ use Fleetbase\Traits\Searchable;
10
+ use Fleetbase\Traits\SendsWebhooks;
11
+ use Fleetbase\Traits\TracksApiCredential;
12
+ use Spatie\Activitylog\Traits\LogsActivity;
13
+ use Spatie\Sluggable\HasSlug;
14
+ use Spatie\Sluggable\SlugOptions;
15
+
16
+ class Fleet extends Model
17
+ {
18
+ use HasUuid;
19
+ use HasPublicId;
20
+ use HasApiModelBehavior;
21
+ use TracksApiCredential;
22
+ use SendsWebhooks;
23
+ use Searchable;
24
+ use HasSlug;
25
+ use LogsActivity;
26
+
27
+ /**
28
+ * The database table used by the model.
29
+ *
30
+ * @var string
31
+ */
32
+ protected $table = 'fleets';
33
+
34
+ /**
35
+ * The type of public Id to generate.
36
+ *
37
+ * @var string
38
+ */
39
+ protected $publicIdType = 'fleet';
40
+
41
+ /**
42
+ * These attributes that can be queried.
43
+ *
44
+ * @var array
45
+ */
46
+ protected $searchableColumns = ['name'];
47
+
48
+ /**
49
+ * Properties which activity needs to be logged.
50
+ *
51
+ * @var array
52
+ */
53
+ protected static $logAttributes = ['name', 'task', 'service_area_uuid', 'zone_uuid'];
54
+
55
+ /**
56
+ * Do not log empty changed.
57
+ *
58
+ * @var bool
59
+ */
60
+ protected static $submitEmptyLogs = false;
61
+
62
+ /**
63
+ * We only want to log changed attributes.
64
+ *
65
+ * @var bool
66
+ */
67
+ protected static $logOnlyDirty = true;
68
+
69
+ /**
70
+ * The name of the subject to log.
71
+ *
72
+ * @var string
73
+ */
74
+ protected static $logName = 'fleet';
75
+
76
+ public function getSlugOptions(): SlugOptions
77
+ {
78
+ return SlugOptions::create()
79
+ ->generateSlugsFrom('name')
80
+ ->saveSlugsTo('slug');
81
+ }
82
+
83
+ /**
84
+ * The attributes that are mass assignable.
85
+ *
86
+ * @var array
87
+ */
88
+ protected $fillable = [
89
+ '_key',
90
+ 'public_id',
91
+ 'company_uuid',
92
+ 'service_area_uuid',
93
+ 'zone_uuid',
94
+ 'vendor_uuid',
95
+ 'parent_fleet_uuid',
96
+ 'image_uuid',
97
+ 'name',
98
+ 'color',
99
+ 'task',
100
+ 'status',
101
+ 'slug',
102
+ ];
103
+
104
+ /**
105
+ * Dynamic attributes that are appended to object.
106
+ *
107
+ * @var array
108
+ */
109
+ protected $appends = ['photo_url', 'drivers_count', 'drivers_online_count'];
110
+
111
+ /**
112
+ * The attributes excluded from the model's JSON form.
113
+ *
114
+ * @var array
115
+ */
116
+ protected $hidden = [];
117
+
118
+ /**
119
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
120
+ */
121
+ public function photo()
122
+ {
123
+ return $this->belongsTo(\Fleetbase\Models\File::class, 'image_uuid', 'uuid');
124
+ }
125
+
126
+ /**
127
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
128
+ */
129
+ public function serviceArea()
130
+ {
131
+ return $this->belongsTo(ServiceArea::class)->select(['uuid', 'public_id', 'name', 'type', 'border']);
132
+ }
133
+
134
+ /**
135
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
136
+ */
137
+ public function zone()
138
+ {
139
+ return $this->belongsTo(Zone::class)->select(['uuid', 'public_id', 'name', 'border']);
140
+ }
141
+
142
+ /**
143
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
144
+ */
145
+ public function vendor()
146
+ {
147
+ return $this->belongsTo(Vendor::class)->select(['uuid', 'public_id', 'name']);
148
+ }
149
+
150
+ /**
151
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
152
+ */
153
+ public function parentFleet()
154
+ {
155
+ return $this->belongsTo(Fleet::class)->select(['uuid', 'public_id', 'name']);
156
+ }
157
+
158
+ /**
159
+ * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
160
+ */
161
+ public function drivers()
162
+ {
163
+ return $this->hasManyThrough(Driver::class, FleetDriver::class, 'fleet_uuid', 'uuid', 'uuid', 'driver_uuid');
164
+ }
165
+
166
+ /**
167
+ * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
168
+ */
169
+ public function vehicles()
170
+ {
171
+ return $this->hasManyThrough(Vehicle::class, FleetVehicle::class, 'fleet_uuid', 'uuid', 'uuid', 'vehicle_uuid');
172
+ }
173
+
174
+ /**
175
+ * Get avatar URL attribute.
176
+ *
177
+ * @return string
178
+ */
179
+ public function getPhotoUrlAttribute()
180
+ {
181
+ return data_get($this, 'photo.s3url', 'https://s3.ap-northeast-2.amazonaws.com/fleetbase/public/default-fleet.png');
182
+ }
183
+
184
+ /**
185
+ * Get the number of drivers in fleet.
186
+ *
187
+ * @return int
188
+ */
189
+ public function getDriversCountAttribute()
190
+ {
191
+ return $this->drivers()->count();
192
+ }
193
+
194
+ /**
195
+ * Get the number of drivers in fleet.
196
+ *
197
+ * @return int
198
+ */
199
+ public function getDriversOnlineCountAttribute()
200
+ {
201
+ return $this->drivers()->where('online', 1)->count();
202
+ }
203
+ }
@@ -0,0 +1,73 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Models;
4
+
5
+ use Fleetbase\Models\Model;
6
+ use Fleetbase\Traits\HasUuid;
7
+
8
+ class FleetDriver extends Model
9
+ {
10
+ use HasUuid;
11
+
12
+ /**
13
+ * The database table used by the model.
14
+ *
15
+ * @var string
16
+ */
17
+ protected $table = 'fleet_drivers';
18
+
19
+ /**
20
+ * The attributes that are mass assignable.
21
+ *
22
+ * @var array
23
+ */
24
+ protected $fillable = ['fleet_uuid', 'driver_uuid'];
25
+
26
+ /**
27
+ * These attributes that can be queried.
28
+ *
29
+ * @var array
30
+ */
31
+ protected $searchableColumns = [];
32
+
33
+ /**
34
+ * also search joined properties.
35
+ *
36
+ * @var array
37
+ */
38
+ protected $alsoSearch = [['driver' => ['user' => 'name']]];
39
+
40
+ /**
41
+ * Dynamic attributes that are appended to object.
42
+ *
43
+ * @var array
44
+ */
45
+ protected $appends = [];
46
+
47
+ /**
48
+ * The attributes excluded from the model's JSON form.
49
+ *
50
+ * @var array
51
+ */
52
+ protected $hidden = [];
53
+
54
+ /**
55
+ * The group of the membership.
56
+ *
57
+ * @var Model
58
+ */
59
+ public function fleet()
60
+ {
61
+ return $this->belongsTo(Fleet::class);
62
+ }
63
+
64
+ /**
65
+ * The driver.
66
+ *
67
+ * @var Model
68
+ */
69
+ public function driver()
70
+ {
71
+ return $this->belongsTo(Driver::class);
72
+ }
73
+ }