@fleetbase/fleetops-engine 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/addon/components/admin/visibility-controls.hbs +12 -0
- package/addon/components/admin/visibility-controls.js +82 -0
- package/addon/components/fleet-panel.js +13 -4
- package/addon/components/fleet-vehicle-listing.hbs +1 -1
- package/addon/components/layout/fleet-ops-sidebar.hbs +26 -0
- package/addon/components/layout/fleet-ops-sidebar.js +129 -0
- package/addon/engine.js +19 -0
- package/addon/helpers/is-section-visible.js +5 -0
- package/addon/routes/application.js +6 -2
- package/addon/routes/virtual.js +10 -0
- package/addon/routes.js +1 -0
- package/addon/templates/application.hbs +1 -19
- package/addon/templates/virtual.hbs +9 -0
- package/app/components/admin/visibility-controls.js +1 -0
- package/app/components/layout/fleet-ops-sidebar.js +1 -0
- package/app/helpers/is-section-visible.js +1 -0
- package/app/routes/virtual.js +1 -0
- package/app/templates/virtual.js +1 -0
- package/composer.json +85 -0
- package/extension.json +10 -0
- package/package.json +6 -6
- 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,26 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\Place;
|
|
6
|
+
|
|
7
|
+
class PlaceObserver
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* Handle the Place "creating" event.
|
|
11
|
+
*
|
|
12
|
+
* @return void
|
|
13
|
+
*/
|
|
14
|
+
public function creating(Place $place)
|
|
15
|
+
{
|
|
16
|
+
// uppercase all address attributes
|
|
17
|
+
$toUppercase = ['name', 'street1', 'street2', 'city', 'province', 'postal_code', 'neighborhood', 'district', 'building', 'country'];
|
|
18
|
+
|
|
19
|
+
// uppercase all attributes above
|
|
20
|
+
foreach ($toUppercase as $attribute) {
|
|
21
|
+
if (isset($place->{$attribute}) && is_string($place->{$attribute})) {
|
|
22
|
+
$place->{$attribute} = strtoupper($place->{$attribute});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\Order;
|
|
6
|
+
use Fleetbase\FleetOps\Models\PurchaseRate;
|
|
7
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
8
|
+
use Fleetbase\Models\Company;
|
|
9
|
+
use Fleetbase\Models\Transaction;
|
|
10
|
+
use Fleetbase\Models\TransactionItem;
|
|
11
|
+
|
|
12
|
+
class PurchaseRateObserver
|
|
13
|
+
{
|
|
14
|
+
/**
|
|
15
|
+
* Handle the PurchaseRate "creating" event.
|
|
16
|
+
* Create transactions accordingly.
|
|
17
|
+
*
|
|
18
|
+
* @return void
|
|
19
|
+
*/
|
|
20
|
+
public function creating(PurchaseRate $purchaseRate)
|
|
21
|
+
{
|
|
22
|
+
$purchaseRate->load(['serviceQuote.items', 'serviceQuote.serviceRate']);
|
|
23
|
+
|
|
24
|
+
// get company
|
|
25
|
+
$company = Company::where('uuid', session('company', $purchaseRate->company_uuid))->first();
|
|
26
|
+
|
|
27
|
+
// get currency to use
|
|
28
|
+
$currency = data_get($purchaseRate, 'serviceQuote.currency', $company->country ? Utils::getCurrenyFromCountryCode($company->country) : 'SGD');
|
|
29
|
+
|
|
30
|
+
// create transaction and transaction items
|
|
31
|
+
$transaction = Transaction::create([
|
|
32
|
+
'company_uuid' => session('company', $purchaseRate->company_uuid),
|
|
33
|
+
'customer_uuid' => $purchaseRate->customer_uuid,
|
|
34
|
+
'customer_type' => $purchaseRate->customer_type,
|
|
35
|
+
'gateway_transaction_id' => $purchaseRate->getMeta('transaction_id', Transaction::generateNumber()),
|
|
36
|
+
'gateway' => 'internal',
|
|
37
|
+
'amount' => data_get($purchaseRate, 'serviceQuote.amount', 0),
|
|
38
|
+
'currency' => $currency,
|
|
39
|
+
'description' => 'Dispatch order',
|
|
40
|
+
'type' => 'dispatch',
|
|
41
|
+
'status' => 'success',
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
// Update order with transaction id
|
|
45
|
+
Order::where('payload_uuid', $purchaseRate->payload_uuid)->update(['transaction_uuid' => $transaction->uuid]);
|
|
46
|
+
|
|
47
|
+
if (isset($purchaseRate->serviceQuote)) {
|
|
48
|
+
$purchaseRate->serviceQuote->items->each(function ($serviceQuoteItem) use ($transaction, $currency) {
|
|
49
|
+
TransactionItem::create([
|
|
50
|
+
'transaction_uuid' => $transaction->uuid,
|
|
51
|
+
'amount' => $serviceQuoteItem->amount ?? 0,
|
|
52
|
+
'currency' => $currency,
|
|
53
|
+
'details' => data_get($serviceQuoteItem, 'details', 'Internal dispatch'),
|
|
54
|
+
'code' => data_get($serviceQuoteItem, 'code', 'internal'),
|
|
55
|
+
]);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
$purchaseRate->transaction_uuid = $transaction->uuid;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\ServiceArea;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
7
|
+
use Fleetbase\FleetOps\Support\Utils as FleetOpsUtils;
|
|
8
|
+
|
|
9
|
+
class ServiceAreaObserver
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* Handle the ServiceArea "creating" event.
|
|
13
|
+
*
|
|
14
|
+
* @return void
|
|
15
|
+
*/
|
|
16
|
+
public function creating(ServiceArea $serviceArea)
|
|
17
|
+
{
|
|
18
|
+
// if no border is set but country is, create the border from the country
|
|
19
|
+
if (empty($serviceArea->border) && isset($serviceArea->country)) {
|
|
20
|
+
$serviceArea->border = FleetOpsUtils::createPolygonFromCountry($serviceArea->country);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Handle the ServiceArea "deleted" event.
|
|
26
|
+
*
|
|
27
|
+
* @return void
|
|
28
|
+
*/
|
|
29
|
+
public function deleted(ServiceArea $serviceArea)
|
|
30
|
+
{
|
|
31
|
+
$serviceArea->load(['zones']);
|
|
32
|
+
|
|
33
|
+
Utils::deleteModels($serviceArea->zones);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\ServiceRate;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
7
|
+
|
|
8
|
+
class ServiceRateObserver
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Handle the ServiceRate "creating" event.
|
|
12
|
+
*
|
|
13
|
+
* @return void
|
|
14
|
+
*/
|
|
15
|
+
public function creating(ServiceRate $serviceRate)
|
|
16
|
+
{
|
|
17
|
+
// convert these attributes to numbers only
|
|
18
|
+
$toNumbers = ['base_fee', 'per_km_flat_rate_fee', 'peak_hours_flat_fee', 'peak_hours_percent', 'cod_flat_fee', 'cod_percent'];
|
|
19
|
+
|
|
20
|
+
// convert to numbers for all attributes above
|
|
21
|
+
foreach ($toNumbers as $attribute) {
|
|
22
|
+
if (isset($serviceRate->{$attribute})) {
|
|
23
|
+
$serviceRate->{$attribute} = Utils::numbersOnly($serviceRate->{$attribute});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Handle the ServiceRate "created" event.
|
|
30
|
+
*
|
|
31
|
+
* @return void
|
|
32
|
+
*/
|
|
33
|
+
public function created(ServiceRate $serviceRate)
|
|
34
|
+
{
|
|
35
|
+
$serviceRateFees = request()->input('serviceRate.rate_fees');
|
|
36
|
+
$serviceRateParcelFees = request()->input('serviceRate.parcel_fees');
|
|
37
|
+
|
|
38
|
+
if ($serviceRate->isFixedMeter() || $serviceRate->isPerDrop()) {
|
|
39
|
+
$serviceRate->setServiceRateFees($serviceRateFees);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if ($serviceRate->isParcelService()) {
|
|
43
|
+
$serviceRate->setServiceRateParcelFees($serviceRateParcelFees);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Handle the ServiceRate "updated" event.
|
|
49
|
+
*
|
|
50
|
+
* @return void
|
|
51
|
+
*/
|
|
52
|
+
public function updated(ServiceRate $serviceRate)
|
|
53
|
+
{
|
|
54
|
+
$serviceRateFees = request()->input('serviceRate.rate_fees');
|
|
55
|
+
$serviceRateParcelFees = request()->input('serviceRate.parcel_fees');
|
|
56
|
+
|
|
57
|
+
if ($serviceRate->isFixedMeter() || $serviceRate->isPerDrop()) {
|
|
58
|
+
$serviceRate->setServiceRateFees($serviceRateFees);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if ($serviceRate->isParcelService()) {
|
|
62
|
+
$serviceRate->setServiceRateParcelFees($serviceRateParcelFees);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Handle the ServiceRate "creating" event.
|
|
68
|
+
*
|
|
69
|
+
* @return void
|
|
70
|
+
*/
|
|
71
|
+
public function deleted(ServiceRate $serviceRate)
|
|
72
|
+
{
|
|
73
|
+
$serviceRate->load(['parcelFees', 'rateFees']);
|
|
74
|
+
|
|
75
|
+
Utils::deleteModels($serviceRate->parcelFees);
|
|
76
|
+
Utils::deleteModels($serviceRate->rateFees);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\TrackingNumber;
|
|
6
|
+
use Fleetbase\FleetOps\Models\TrackingStatus;
|
|
7
|
+
use Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
8
|
+
use Illuminate\Support\Str;
|
|
9
|
+
use Milon\Barcode\Facades\DNS2DFacade as DNS2D;
|
|
10
|
+
|
|
11
|
+
class TrackingNumberObserver
|
|
12
|
+
{
|
|
13
|
+
/**
|
|
14
|
+
* Listen to the TrackingNumber creating event.
|
|
15
|
+
*
|
|
16
|
+
* @return void
|
|
17
|
+
*/
|
|
18
|
+
public function creating(TrackingNumber $trackingNumber)
|
|
19
|
+
{
|
|
20
|
+
// generate a barcode annd qr code
|
|
21
|
+
$trackingNumber->tracking_number = TrackingNumber::generateNumber($trackingNumber->region);
|
|
22
|
+
$trackingNumber->qr_code = DNS2D::getBarcodePNG($trackingNumber->owner_uuid, 'QRCODE');
|
|
23
|
+
$trackingNumber->barcode = DNS2D::getBarcodePNG($trackingNumber->owner_uuid, 'PDF417');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Listen to the TrackingNumber created event.
|
|
28
|
+
*
|
|
29
|
+
* @return void
|
|
30
|
+
*/
|
|
31
|
+
public function created(TrackingNumber $trackingNumber)
|
|
32
|
+
{
|
|
33
|
+
$trackingStatus = TrackingStatus::create([
|
|
34
|
+
'company_uuid' => session('company'),
|
|
35
|
+
'tracking_number_uuid' => $trackingNumber->uuid,
|
|
36
|
+
'status' => Str::title($trackingNumber->type . ' created'),
|
|
37
|
+
'details' => 'New ' . Str::lower($trackingNumber->type) . ' created.',
|
|
38
|
+
'location' => new Point(0.0, 0.0, 4326),
|
|
39
|
+
'code' => 'CREATED',
|
|
40
|
+
]);
|
|
41
|
+
|
|
42
|
+
$trackingNumber->updateOwnerStatus($trackingStatus);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\Driver;
|
|
6
|
+
use Fleetbase\Models\User;
|
|
7
|
+
|
|
8
|
+
class UserObserver
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Handle the User "deleted" event.
|
|
12
|
+
*
|
|
13
|
+
* @return void
|
|
14
|
+
*/
|
|
15
|
+
public function deleted(User $user)
|
|
16
|
+
{
|
|
17
|
+
// if the user deleted is a driver, delete their driver record to
|
|
18
|
+
Driver::where('user_uuid', $user->uuid)->delete();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Observers;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Models\Driver;
|
|
6
|
+
use Fleetbase\FleetOps\Models\Vehicle;
|
|
7
|
+
|
|
8
|
+
class VehicleObserver
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Handle the Vehicle "created" event.
|
|
12
|
+
*
|
|
13
|
+
* @return void
|
|
14
|
+
*/
|
|
15
|
+
public function created(Vehicle $vehicle)
|
|
16
|
+
{
|
|
17
|
+
// assign this vehicle to a driver if the driver has been set
|
|
18
|
+
$identifier = request()->or(['driver_uuid', 'vehicle.driver_uuid', 'vehicle.driver.uuid']);
|
|
19
|
+
|
|
20
|
+
if ($identifier) {
|
|
21
|
+
$driver = Driver::where('uuid', $identifier)->whereNull('deleted_at')->withoutGlobalScopes()->first();
|
|
22
|
+
|
|
23
|
+
if ($driver) {
|
|
24
|
+
// assign this vehicle to driver
|
|
25
|
+
$driver->assignVehicle($vehicle);
|
|
26
|
+
|
|
27
|
+
// set driver to vehicle
|
|
28
|
+
$vehicle->setRelation('driver', $driver);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Handle the Vehicle "updated" event.
|
|
35
|
+
*
|
|
36
|
+
* @return void
|
|
37
|
+
*/
|
|
38
|
+
public function updated(Vehicle $vehicle)
|
|
39
|
+
{
|
|
40
|
+
// assign this vehicle to a driver if the driver has been set
|
|
41
|
+
$identifier = request()->or(['driver_uuid', 'vehicle.driver_uuid', 'vehicle.driver.uuid']);
|
|
42
|
+
|
|
43
|
+
if ($identifier) {
|
|
44
|
+
$driver = Driver::where('uuid', $identifier)->whereNull('deleted_at')->withoutGlobalScopes()->first();
|
|
45
|
+
|
|
46
|
+
if ($driver) {
|
|
47
|
+
// assign this vehicle to driver
|
|
48
|
+
$driver->assignVehicle($vehicle);
|
|
49
|
+
|
|
50
|
+
// set driver to vehicle
|
|
51
|
+
$vehicle->setRelation('driver', $driver);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Handle the Vehicle "deleted" event.
|
|
58
|
+
*
|
|
59
|
+
* @return void
|
|
60
|
+
*/
|
|
61
|
+
public function deleted(Vehicle $vehicle)
|
|
62
|
+
{
|
|
63
|
+
// Unassign the deleted vehicle from matching driver/(s)
|
|
64
|
+
Driver::where(['vehicle_uuid' => $vehicle->uuid])->delete();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Providers;
|
|
4
|
+
|
|
5
|
+
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
|
6
|
+
|
|
7
|
+
class EventServiceProvider extends ServiceProvider
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* The event listener mappings for the application.
|
|
11
|
+
*
|
|
12
|
+
* @var array
|
|
13
|
+
*/
|
|
14
|
+
protected $listen = [
|
|
15
|
+
/*
|
|
16
|
+
* Order Events
|
|
17
|
+
*/
|
|
18
|
+
\Fleetbase\FleetOps\Events\OrderCanceled::class => [\Fleetbase\FleetOps\Listeners\HandleOrderCanceled::class, \Fleetbase\Listeners\SendResourceLifecycleWebhook::class],
|
|
19
|
+
\Fleetbase\FleetOps\Events\OrderDispatched::class => [\Fleetbase\FleetOps\Listeners\HandleOrderDispatched::class, \Fleetbase\Listeners\SendResourceLifecycleWebhook::class],
|
|
20
|
+
\Fleetbase\FleetOps\Events\OrderDispatchFailed::class => [\Fleetbase\FleetOps\Listeners\HandleOrderDispatchFailed::class, \Fleetbase\Listeners\SendResourceLifecycleWebhook::class],
|
|
21
|
+
\Fleetbase\FleetOps\Events\OrderDriverAssigned::class => [\Fleetbase\FleetOps\Listeners\HandleOrderDriverAssigned::class, \Fleetbase\Listeners\SendResourceLifecycleWebhook::class],
|
|
22
|
+
\Fleetbase\FleetOps\Events\OrderCompleted::class => [\Fleetbase\Listeners\SendResourceLifecycleWebhook::class],
|
|
23
|
+
\Fleetbase\FleetOps\Events\OrderReady::class => [\Fleetbase\FleetOps\Listeners\HandleOrderReady::class],
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* Core Events
|
|
27
|
+
*/
|
|
28
|
+
\Fleetbase\Events\UserRemovedFromCompany::class => [\Fleetbase\FleetOps\Listeners\HandleUserRemovedFromCompany::class],
|
|
29
|
+
];
|
|
30
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Providers;
|
|
4
|
+
|
|
5
|
+
use Brick\Geo\Engine\GeometryEngineRegistry;
|
|
6
|
+
use Brick\Geo\Engine\GEOSEngine;
|
|
7
|
+
use Fleetbase\Providers\CoreServiceProvider;
|
|
8
|
+
|
|
9
|
+
if (!class_exists(CoreServiceProvider::class)) {
|
|
10
|
+
throw new \Exception('FleetOps cannot be loaded without `fleetbase/core-api` installed!');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* FleetOps service provider.
|
|
15
|
+
*/
|
|
16
|
+
class FleetOpsServiceProvider extends CoreServiceProvider
|
|
17
|
+
{
|
|
18
|
+
/**
|
|
19
|
+
* The observers registered with the service provider.
|
|
20
|
+
*
|
|
21
|
+
* @var array
|
|
22
|
+
*/
|
|
23
|
+
public $observers = [
|
|
24
|
+
\Fleetbase\FleetOps\Models\Order::class => \Fleetbase\FleetOps\Observers\OrderObserver::class,
|
|
25
|
+
\Fleetbase\FleetOps\Models\Payload::class => \Fleetbase\FleetOps\Observers\PayloadObserver::class,
|
|
26
|
+
\Fleetbase\FleetOps\Models\Place::class => \Fleetbase\FleetOps\Observers\PlaceObserver::class,
|
|
27
|
+
\Fleetbase\FleetOps\Models\ServiceRate::class => \Fleetbase\FleetOps\Observers\ServiceRateObserver::class,
|
|
28
|
+
\Fleetbase\FleetOps\Models\PurchaseRate::class => \Fleetbase\FleetOps\Observers\PurchaseRateObserver::class,
|
|
29
|
+
\Fleetbase\FleetOps\Models\ServiceArea::class => \Fleetbase\FleetOps\Observers\ServiceAreaObserver::class,
|
|
30
|
+
\Fleetbase\FleetOps\Models\TrackingNumber::class => \Fleetbase\FleetOps\Observers\TrackingNumberObserver::class,
|
|
31
|
+
\Fleetbase\FleetOps\Models\Driver::class => \Fleetbase\FleetOps\Observers\DriverObserver::class,
|
|
32
|
+
\Fleetbase\FleetOps\Models\Vehicle::class => \Fleetbase\FleetOps\Observers\VehicleObserver::class,
|
|
33
|
+
\Fleetbase\Models\User::class => \Fleetbase\FleetOps\Observers\UserObserver::class,
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The console commands registered with the service provider.
|
|
38
|
+
*
|
|
39
|
+
* @var array
|
|
40
|
+
*/
|
|
41
|
+
public $commands = [
|
|
42
|
+
\Fleetbase\FleetOps\Console\Commands\DispatchAdhocOrders::class,
|
|
43
|
+
\Fleetbase\FleetOps\Console\Commands\DispatchOrders::class,
|
|
44
|
+
\Fleetbase\FleetOps\Console\Commands\TrackOrderDistanceAndTime::class,
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Register any application services.
|
|
49
|
+
*
|
|
50
|
+
* Within the register method, you should only bind things into the
|
|
51
|
+
* service container. You should never attempt to register any event
|
|
52
|
+
* listeners, routes, or any other piece of functionality within the
|
|
53
|
+
* register method.
|
|
54
|
+
*
|
|
55
|
+
* More information on this can be found in the Laravel documentation:
|
|
56
|
+
* https://laravel.com/docs/8.x/providers
|
|
57
|
+
*
|
|
58
|
+
* @return void
|
|
59
|
+
*/
|
|
60
|
+
public function register()
|
|
61
|
+
{
|
|
62
|
+
$this->app->register(CoreServiceProvider::class);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Bootstrap any package services.
|
|
67
|
+
*
|
|
68
|
+
* @return void
|
|
69
|
+
*
|
|
70
|
+
* @throws \Exception if the `fleetbase/core-api` package is not installed
|
|
71
|
+
*/
|
|
72
|
+
public function boot()
|
|
73
|
+
{
|
|
74
|
+
$this->registerObservers();
|
|
75
|
+
$this->registerCommands();
|
|
76
|
+
$this->scheduleCommands(function ($schedule) {
|
|
77
|
+
$schedule->command('fleetops:dispatch-orders')->everyMinute();
|
|
78
|
+
$schedule->command('fleetops:dispatch-adhoc')->everyMinute();
|
|
79
|
+
$schedule->command('fleetops:update-estimations')->everyFifteenMinutes();
|
|
80
|
+
});
|
|
81
|
+
$this->registerExpansionsFrom(__DIR__ . '/../Expansions');
|
|
82
|
+
$this->loadRoutesFrom(__DIR__ . '/../routes.php');
|
|
83
|
+
$this->loadMigrationsFrom(__DIR__ . '/../../migrations');
|
|
84
|
+
$this->loadViewsFrom(__DIR__ . '/../../resources/views', 'fleetops');
|
|
85
|
+
$this->mergeConfigFrom(__DIR__ . '/../../config/fleetops.php', 'fleetops');
|
|
86
|
+
$this->mergeConfigFrom(__DIR__ . '/../../config/api.php', 'api');
|
|
87
|
+
$this->mergeConfigFrom(__DIR__ . '/../../config/cache.stores.php', 'cache.stores');
|
|
88
|
+
$this->mergeConfigFrom(__DIR__ . '/../../config/geocoder.php', 'geocoder');
|
|
89
|
+
$this->mergeConfigFrom(__DIR__ . '/../../config/dompdf.php', 'dompdf');
|
|
90
|
+
|
|
91
|
+
// Register the GeometryEngine for GEOSEngine
|
|
92
|
+
GeometryEngineRegistry::set(new GEOSEngine());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Rules;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
6
|
+
use Illuminate\Contracts\Validation\Rule;
|
|
7
|
+
|
|
8
|
+
class ResolvablePoint implements Rule
|
|
9
|
+
{
|
|
10
|
+
/**
|
|
11
|
+
* Determine if the validation rule passes.
|
|
12
|
+
*
|
|
13
|
+
* @param string $attribute
|
|
14
|
+
*
|
|
15
|
+
* @return bool
|
|
16
|
+
*/
|
|
17
|
+
public function passes($attribute, $value)
|
|
18
|
+
{
|
|
19
|
+
try {
|
|
20
|
+
$point = Utils::getPointFromMixed($value);
|
|
21
|
+
|
|
22
|
+
return $point instanceof \Grimzy\LaravelMysqlSpatial\Types\Point;
|
|
23
|
+
} catch (\Exception $e) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Get the validation error message.
|
|
30
|
+
*
|
|
31
|
+
* @return string
|
|
32
|
+
*/
|
|
33
|
+
public function message()
|
|
34
|
+
{
|
|
35
|
+
return 'The :attribute must be a valid GeoJSON Point or a type (Place ID) that can be resolved to a Point.';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Scopes;
|
|
4
|
+
|
|
5
|
+
use Illuminate\Database\Eloquent\Builder;
|
|
6
|
+
use Illuminate\Database\Eloquent\Model;
|
|
7
|
+
use Illuminate\Database\Eloquent\Scope;
|
|
8
|
+
|
|
9
|
+
class DriverScope implements Scope
|
|
10
|
+
{
|
|
11
|
+
/**
|
|
12
|
+
* Apply the scope to a given Eloquent query builder.
|
|
13
|
+
*
|
|
14
|
+
* @return void
|
|
15
|
+
*/
|
|
16
|
+
public function apply(Builder $builder, Model $model)
|
|
17
|
+
{
|
|
18
|
+
// make sure the user of the driver isn't deleted
|
|
19
|
+
$builder->whereHas('user');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Support;
|
|
4
|
+
|
|
5
|
+
use Webit\Util\EvalMath\EvalMath;
|
|
6
|
+
|
|
7
|
+
class Algo
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* Execute an algorithm strig.
|
|
11
|
+
*
|
|
12
|
+
* @return int
|
|
13
|
+
*/
|
|
14
|
+
public static function exec($algorithm, $variables = [], $round = false)
|
|
15
|
+
{
|
|
16
|
+
$m = new EvalMath();
|
|
17
|
+
$m->suppress_errors = true;
|
|
18
|
+
|
|
19
|
+
foreach ($variables as $key => $value) {
|
|
20
|
+
$algorithm = str_replace('{' . $key . '}', $value, $algorithm);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
$result = $m->evaluate($algorithm);
|
|
24
|
+
|
|
25
|
+
if ($round) {
|
|
26
|
+
return round($result, 2); // precision 2 cuz most likely dealing with $
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return $result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Calculates driving distance and time using Google distance matric.
|
|
34
|
+
*
|
|
35
|
+
* @return array
|
|
36
|
+
*/
|
|
37
|
+
public static function calculateDrivingDistanceAndTime($lat1, $long1, $lat2, $long2)
|
|
38
|
+
{
|
|
39
|
+
$url =
|
|
40
|
+
'https://maps.googleapis.com/maps/api/distancematrix/json?origins=' . $lat1 . ',' . $long1 . '&destinations=' . $lat2 . ',' . $long2 . '&mode=driving&key=' . config('services.google.key');
|
|
41
|
+
$ch = curl_init();
|
|
42
|
+
curl_setopt($ch, CURLOPT_URL, $url);
|
|
43
|
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
44
|
+
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
|
|
45
|
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
|
46
|
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
|
47
|
+
$response = curl_exec($ch);
|
|
48
|
+
curl_close($ch);
|
|
49
|
+
$response_a = json_decode($response, true);
|
|
50
|
+
$dist = $response_a['rows'][0]['elements'][0]['distance']['value'];
|
|
51
|
+
$time = $response_a['rows'][0]['elements'][0]['duration']['value'];
|
|
52
|
+
|
|
53
|
+
return ['distance' => $dist, 'time' => $time];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Support;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A utility class for calculating driving distances and times using the Google Distance Matrix API.
|
|
7
|
+
*
|
|
8
|
+
* This class provides methods for calculating the driving distance and time between two points, as well
|
|
9
|
+
* as between multiple points using the Google Distance Matrix API. The results are returned in meters
|
|
10
|
+
* for distance and seconds for time.
|
|
11
|
+
*
|
|
12
|
+
* @category Utility
|
|
13
|
+
*
|
|
14
|
+
* @license https://opensource.org/licenses/MIT MIT License
|
|
15
|
+
* @author Ronald A. Richardson
|
|
16
|
+
*/
|
|
17
|
+
class DistanceMatrix
|
|
18
|
+
{
|
|
19
|
+
public ?float $distance;
|
|
20
|
+
public ?int $time;
|
|
21
|
+
|
|
22
|
+
public function __construct(?float $distance, ?int $time)
|
|
23
|
+
{
|
|
24
|
+
$this->distance = $distance;
|
|
25
|
+
$this->time = $time;
|
|
26
|
+
}
|
|
27
|
+
}
|