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