@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,119 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Models\Model;
|
|
6
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
7
|
+
use Fleetbase\Traits\HasUuid;
|
|
8
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
9
|
+
use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
|
|
10
|
+
|
|
11
|
+
class Position extends Model
|
|
12
|
+
{
|
|
13
|
+
use HasUuid;
|
|
14
|
+
use TracksApiCredential;
|
|
15
|
+
use HasApiModelBehavior;
|
|
16
|
+
use SpatialTrait;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The database connection to use.
|
|
20
|
+
*
|
|
21
|
+
* @var string
|
|
22
|
+
*/
|
|
23
|
+
protected $connection = 'mysql';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The attributes that are mass assignable.
|
|
27
|
+
*
|
|
28
|
+
* @var array
|
|
29
|
+
*/
|
|
30
|
+
protected $fillable = ['uuid', 'company_uuid', 'order_uuid', 'destination_uuid', 'subject_uuid', 'subject_type', 'coordinates', 'heading', 'bearing', 'speed', 'altitude'];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The attributes that are spatial fields.
|
|
34
|
+
*
|
|
35
|
+
* @var array
|
|
36
|
+
*/
|
|
37
|
+
protected $spatialFields = ['coordinates'];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The attributes that are mass assignable.
|
|
41
|
+
*
|
|
42
|
+
* @var array
|
|
43
|
+
*/
|
|
44
|
+
protected $with = [];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Dynamic attributes.
|
|
48
|
+
*
|
|
49
|
+
* @var array
|
|
50
|
+
*/
|
|
51
|
+
protected $appends = [];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Get filter parameters for this model.
|
|
55
|
+
*
|
|
56
|
+
* @var array
|
|
57
|
+
*/
|
|
58
|
+
protected $filterParams = [];
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Properties which activity needs to be logged.
|
|
62
|
+
*
|
|
63
|
+
* @var array
|
|
64
|
+
*/
|
|
65
|
+
protected static $logAttributes = ['coordinates', 'heading', 'bearing', 'speed', 'altitude'];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* We only want to log changed attributes.
|
|
69
|
+
*
|
|
70
|
+
* @var bool
|
|
71
|
+
*/
|
|
72
|
+
protected static $logOnlyDirty = true;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Do not log empty changed.
|
|
76
|
+
*
|
|
77
|
+
* @var bool
|
|
78
|
+
*/
|
|
79
|
+
protected static $submitEmptyLogs = false;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The name of the subject to log.
|
|
83
|
+
*
|
|
84
|
+
* @var string
|
|
85
|
+
*/
|
|
86
|
+
protected static $logName = 'position';
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
90
|
+
*/
|
|
91
|
+
public function company()
|
|
92
|
+
{
|
|
93
|
+
return $this->belongsTo(\Fleetbase\Models\Company::class);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
98
|
+
*/
|
|
99
|
+
public function order()
|
|
100
|
+
{
|
|
101
|
+
return $this->belongsTo(Order::class);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
106
|
+
*/
|
|
107
|
+
public function destination()
|
|
108
|
+
{
|
|
109
|
+
return $this->belongsTo(Place::class);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
|
114
|
+
*/
|
|
115
|
+
public function subject()
|
|
116
|
+
{
|
|
117
|
+
return $this->morphTo(__FUNCTION__, 'subject_type', 'subject_uuid')->withoutGlobalScopes();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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\HasPublicId;
|
|
9
|
+
use Fleetbase\Traits\HasUuid;
|
|
10
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
11
|
+
|
|
12
|
+
class Proof extends Model
|
|
13
|
+
{
|
|
14
|
+
use HasUuid;
|
|
15
|
+
use HasPublicId;
|
|
16
|
+
use HasApiModelBehavior;
|
|
17
|
+
use TracksApiCredential;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The database table used by the model.
|
|
21
|
+
*
|
|
22
|
+
* @var string
|
|
23
|
+
*/
|
|
24
|
+
protected $table = 'proofs';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The type of public Id to generate.
|
|
28
|
+
*
|
|
29
|
+
* @var string
|
|
30
|
+
*/
|
|
31
|
+
protected $publicIdType = 'proof';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The attributes that are mass assignable.
|
|
35
|
+
*
|
|
36
|
+
* @var array
|
|
37
|
+
*/
|
|
38
|
+
protected $fillable = ['company_uuid', 'file_uuid', 'order_uuid', 'subject_uuid', 'subject_type', 'remarks', 'raw_data', 'data'];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The attributes that should be cast to native types.
|
|
42
|
+
*
|
|
43
|
+
* @var array
|
|
44
|
+
*/
|
|
45
|
+
protected $casts = [
|
|
46
|
+
'data' => Json::class,
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Dynamic attributes that are appended to object.
|
|
51
|
+
*
|
|
52
|
+
* @var array
|
|
53
|
+
*/
|
|
54
|
+
protected $appends = ['file_url'];
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The attributes excluded from the model's JSON form.
|
|
58
|
+
*
|
|
59
|
+
* @var array
|
|
60
|
+
*/
|
|
61
|
+
protected $hidden = [];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The image file assosciated with the proof.
|
|
65
|
+
*/
|
|
66
|
+
public function file()
|
|
67
|
+
{
|
|
68
|
+
return $this->belongsTo(\Fleetbase\Models\File::class);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The order proof was added to.
|
|
73
|
+
*/
|
|
74
|
+
public function order()
|
|
75
|
+
{
|
|
76
|
+
return $this->belongsTo(Order::class);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Get avatar URL attribute.
|
|
81
|
+
*/
|
|
82
|
+
public function getFileUrlAttribute()
|
|
83
|
+
{
|
|
84
|
+
return $this->fromCache('file.s3url', null);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Subject proof is for.
|
|
89
|
+
*/
|
|
90
|
+
public function subject()
|
|
91
|
+
{
|
|
92
|
+
return $this->morphTo(__FUNCTION__, 'subject_type', 'subject_uuid')->withoutGlobalScopes();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
7
|
+
use Fleetbase\Models\Model;
|
|
8
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
9
|
+
use Fleetbase\Traits\HasMetaAttributes;
|
|
10
|
+
use Fleetbase\Traits\HasPublicId;
|
|
11
|
+
use Fleetbase\Traits\HasUuid;
|
|
12
|
+
use Fleetbase\Traits\SendsWebhooks;
|
|
13
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
14
|
+
use Illuminate\Http\Request;
|
|
15
|
+
use Illuminate\Support\Str;
|
|
16
|
+
|
|
17
|
+
class PurchaseRate extends Model
|
|
18
|
+
{
|
|
19
|
+
use HasUuid;
|
|
20
|
+
use HasPublicId;
|
|
21
|
+
use SendsWebhooks;
|
|
22
|
+
use TracksApiCredential;
|
|
23
|
+
use HasMetaAttributes;
|
|
24
|
+
use HasApiModelBehavior;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The database table used by the model.
|
|
28
|
+
*
|
|
29
|
+
* @var string
|
|
30
|
+
*/
|
|
31
|
+
protected $table = 'purchase_rates';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The type of public Id to generate.
|
|
35
|
+
*
|
|
36
|
+
* @var string
|
|
37
|
+
*/
|
|
38
|
+
protected $publicIdType = 'rate';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* These attributes that can be queried.
|
|
42
|
+
*
|
|
43
|
+
* @var array
|
|
44
|
+
*/
|
|
45
|
+
protected $searchableColumns = [];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The attributes that are mass assignable.
|
|
49
|
+
*
|
|
50
|
+
* @var array
|
|
51
|
+
*/
|
|
52
|
+
protected $fillable = ['_key', 'customer_uuid', 'customer_type', 'company_uuid', 'service_quote_uuid', 'transaction_uuid', 'payload_uuid', 'status', 'meta'];
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The attributes that should be cast to native types.
|
|
56
|
+
*
|
|
57
|
+
* @var array
|
|
58
|
+
*/
|
|
59
|
+
protected $casts = [
|
|
60
|
+
'meta' => Json::class,
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Dynamic attributes that are appended to object.
|
|
65
|
+
*
|
|
66
|
+
* @var array
|
|
67
|
+
*/
|
|
68
|
+
protected $appends = ['customer_is_vendor', 'customer_is_contact', 'amount', 'currency', 'service_quote_id', 'order_id', 'transaction_id', 'customer_id'];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The attributes excluded from the model's JSON form.
|
|
72
|
+
*
|
|
73
|
+
* @var array
|
|
74
|
+
*/
|
|
75
|
+
protected $hidden = [];
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Order rate was purchased for.
|
|
79
|
+
*
|
|
80
|
+
* @var Model
|
|
81
|
+
*/
|
|
82
|
+
public function order()
|
|
83
|
+
{
|
|
84
|
+
return $this->hasOne(Order::class);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Service quote for purchased rate.
|
|
89
|
+
*
|
|
90
|
+
* @var Model
|
|
91
|
+
*/
|
|
92
|
+
public function serviceQuote()
|
|
93
|
+
{
|
|
94
|
+
return $this->belongsTo(ServiceQuote::class);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Transaction for purchased rate.
|
|
99
|
+
*
|
|
100
|
+
* @var Model
|
|
101
|
+
*/
|
|
102
|
+
public function transaction()
|
|
103
|
+
{
|
|
104
|
+
return $this->belongsTo(\Fleetbase\Models\Transaction::class);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Payload for the order.
|
|
109
|
+
*
|
|
110
|
+
* @var Model
|
|
111
|
+
*/
|
|
112
|
+
public function payload()
|
|
113
|
+
{
|
|
114
|
+
return $this->belongsTo(Payload::class);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Company who owns the order.
|
|
119
|
+
*
|
|
120
|
+
* @var Model
|
|
121
|
+
*/
|
|
122
|
+
public function company()
|
|
123
|
+
{
|
|
124
|
+
return $this->belongsTo(\Fleetbase\Models\Company::class);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* The customer if any for this place.
|
|
129
|
+
*
|
|
130
|
+
* @var Model
|
|
131
|
+
*/
|
|
132
|
+
public function customer()
|
|
133
|
+
{
|
|
134
|
+
return $this->morphTo(__FUNCTION__, 'customer_type', 'customer_uuid');
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* True of the customer is a vendor `customer_is_vendor`.
|
|
139
|
+
*
|
|
140
|
+
* @var bool
|
|
141
|
+
*/
|
|
142
|
+
public function getCustomerIsVendorAttribute()
|
|
143
|
+
{
|
|
144
|
+
return Str::contains(strtolower($this->customer_type), 'vendor');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* True of the customer is a contact `customer_is_contact`.
|
|
149
|
+
*
|
|
150
|
+
* @var bool
|
|
151
|
+
*/
|
|
152
|
+
public function getCustomerIsContactAttribute()
|
|
153
|
+
{
|
|
154
|
+
return Str::contains(strtolower($this->customer_type), 'contact');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public function getAmountAttribute()
|
|
158
|
+
{
|
|
159
|
+
return data_get($this, 'serviceQuote.amount');
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
public function getCurrencyAttribute()
|
|
163
|
+
{
|
|
164
|
+
return data_get($this, 'serviceQuote.currency');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
public function getServiceQuoteIdAttribute()
|
|
168
|
+
{
|
|
169
|
+
return data_get($this, 'serviceQuote.public_id');
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public function getOrderIdAttribute()
|
|
173
|
+
{
|
|
174
|
+
return data_get($this, 'order.public_id');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
public function getCustomerIdAttribute()
|
|
178
|
+
{
|
|
179
|
+
return data_get($this, 'customer.public_id');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
public function getTransactionIdAttribute()
|
|
183
|
+
{
|
|
184
|
+
return data_get($this, 'transaction.public_id');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @return \Fleetbase\Models\PurchaseRate|null
|
|
189
|
+
*/
|
|
190
|
+
public static function resolveFromRequest(Request $request): ?PurchaseRate
|
|
191
|
+
{
|
|
192
|
+
$purchaseRate = $request->or(['order.purchase_rate_uuid', 'purchase_rate', 'purchase_rate_id', 'order.purchase_rate']);
|
|
193
|
+
|
|
194
|
+
if (empty($purchaseRate)) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (Utils::isUuid($purchaseRate)) {
|
|
199
|
+
$purchaseRate = static::where('uuid', $purchaseRate)->first();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (Utils::isPublicId($purchaseRate)) {
|
|
203
|
+
$purchaseRate = static::where('public_id', $purchaseRate)->first();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return $purchaseRate;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\Models\Model;
|
|
7
|
+
use Fleetbase\Traits\HasUuid;
|
|
8
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
9
|
+
|
|
10
|
+
class Route extends Model
|
|
11
|
+
{
|
|
12
|
+
use HasUuid;
|
|
13
|
+
use TracksApiCredential;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The database table used by the model.
|
|
17
|
+
*
|
|
18
|
+
* @var string
|
|
19
|
+
*/
|
|
20
|
+
protected $table = 'routes';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* These attributes that can be queried.
|
|
24
|
+
*
|
|
25
|
+
* @var array
|
|
26
|
+
*/
|
|
27
|
+
protected $searchableColumns = [];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The attributes that are mass assignable.
|
|
31
|
+
*
|
|
32
|
+
* @var array
|
|
33
|
+
*/
|
|
34
|
+
protected $fillable = ['_key', 'company_uuid', 'order_uuid', 'details', 'total_time', 'total_distance'];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The attributes that should be cast to native types.
|
|
38
|
+
*
|
|
39
|
+
* @var array
|
|
40
|
+
*/
|
|
41
|
+
protected $casts = [
|
|
42
|
+
'details' => Json::class,
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Dynamic attributes that are appended to object.
|
|
47
|
+
*
|
|
48
|
+
* @var array
|
|
49
|
+
*/
|
|
50
|
+
protected $appends = ['payload', 'driver', 'order_status', 'order_public_id', 'order_internal_id', 'order_dispatched_at'];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The attributes excluded from the model's JSON form.
|
|
54
|
+
*
|
|
55
|
+
* @var array
|
|
56
|
+
*/
|
|
57
|
+
protected $hidden = ['order'];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Order for this Route.
|
|
61
|
+
*
|
|
62
|
+
* @var Model
|
|
63
|
+
*/
|
|
64
|
+
public function order()
|
|
65
|
+
{
|
|
66
|
+
return $this->belongsTo(Order::class);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Payload for this routes order.
|
|
71
|
+
*
|
|
72
|
+
* @var Model
|
|
73
|
+
*/
|
|
74
|
+
public function getPayloadAttribute()
|
|
75
|
+
{
|
|
76
|
+
return data_get($this, 'order.payload');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Driver for this routes order.
|
|
81
|
+
*
|
|
82
|
+
* @var Model
|
|
83
|
+
*/
|
|
84
|
+
public function getDriverAttribute()
|
|
85
|
+
{
|
|
86
|
+
return data_get($this, 'order.driverAssigned');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Order status for this route.
|
|
91
|
+
*
|
|
92
|
+
* @var string
|
|
93
|
+
*/
|
|
94
|
+
public function getOrderStatusAttribute()
|
|
95
|
+
{
|
|
96
|
+
return data_get($this, 'order.status');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Order id for this route.
|
|
101
|
+
*
|
|
102
|
+
* @var string
|
|
103
|
+
*/
|
|
104
|
+
public function getOrderPublicIdAttribute()
|
|
105
|
+
{
|
|
106
|
+
return data_get($this, 'order.public_id');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Order internal id for this route.
|
|
111
|
+
*
|
|
112
|
+
* @var string
|
|
113
|
+
*/
|
|
114
|
+
public function getOrderInternalIdAttribute()
|
|
115
|
+
{
|
|
116
|
+
return data_get($this, 'order.internal_id');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Order internal id for this route.
|
|
121
|
+
*
|
|
122
|
+
* @var string
|
|
123
|
+
*/
|
|
124
|
+
public function getOrderDispatchedAtAttribute()
|
|
125
|
+
{
|
|
126
|
+
return data_get($this, 'order.dispatched_at');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Casts\MultiPolygon;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
7
|
+
use Fleetbase\Models\Model;
|
|
8
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
9
|
+
use Fleetbase\Traits\HasPublicId;
|
|
10
|
+
use Fleetbase\Traits\HasUuid;
|
|
11
|
+
use Fleetbase\Traits\SendsWebhooks;
|
|
12
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
13
|
+
use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
|
|
14
|
+
|
|
15
|
+
class ServiceArea extends Model
|
|
16
|
+
{
|
|
17
|
+
use HasUuid;
|
|
18
|
+
use HasPublicId;
|
|
19
|
+
use SendsWebhooks;
|
|
20
|
+
use TracksApiCredential;
|
|
21
|
+
use SpatialTrait;
|
|
22
|
+
use HasApiModelBehavior;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The database table used by the model.
|
|
26
|
+
*
|
|
27
|
+
* @var string
|
|
28
|
+
*/
|
|
29
|
+
protected $table = 'service_areas';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The type of public Id to generate.
|
|
33
|
+
*
|
|
34
|
+
* @var string
|
|
35
|
+
*/
|
|
36
|
+
protected $publicIdType = 'sa';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* These attributes that can be queried.
|
|
40
|
+
*
|
|
41
|
+
* @var array
|
|
42
|
+
*/
|
|
43
|
+
protected $searchableColumns = [];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The attributes that are mass assignable.
|
|
47
|
+
*
|
|
48
|
+
* @var array
|
|
49
|
+
*/
|
|
50
|
+
protected $fillable = ['_key', 'company_uuid', 'name', 'type', 'parent_uuid', 'border', 'color', 'stroke_color', 'status'];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The attributes that are spatial columns.
|
|
54
|
+
*
|
|
55
|
+
* @var array
|
|
56
|
+
*/
|
|
57
|
+
protected $spatialFields = ['border'];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Relationships to load with model.
|
|
61
|
+
*
|
|
62
|
+
* @var array
|
|
63
|
+
*/
|
|
64
|
+
protected $with = ['zones'];
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Dynamic attributes that are appended to object.
|
|
68
|
+
*
|
|
69
|
+
* @var array
|
|
70
|
+
*/
|
|
71
|
+
protected $appends = [];
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The attributes excluded from the model's JSON form.
|
|
75
|
+
*
|
|
76
|
+
* @var array
|
|
77
|
+
*/
|
|
78
|
+
protected $hidden = [];
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The attributes that should be cast to native types.
|
|
82
|
+
*
|
|
83
|
+
* @var array
|
|
84
|
+
*/
|
|
85
|
+
protected $casts = [
|
|
86
|
+
'border' => MultiPolygon::class,
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
91
|
+
*/
|
|
92
|
+
public function zones()
|
|
93
|
+
{
|
|
94
|
+
return $this->hasMany(Zone::class)->without(['serviceArea']);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Sets the status attribute for the model.
|
|
99
|
+
*
|
|
100
|
+
* @param string|null $status the status value, defaults to 'active' if not provided
|
|
101
|
+
*
|
|
102
|
+
* @return void
|
|
103
|
+
*/
|
|
104
|
+
public function setStatusAttribute(?string $status = 'active')
|
|
105
|
+
{
|
|
106
|
+
$this->attributes['status'] = $status;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Sets the type attribute for the model.
|
|
111
|
+
*
|
|
112
|
+
* @param string|null $type the type value, defaults to 'country' if not provided
|
|
113
|
+
*
|
|
114
|
+
* @return void
|
|
115
|
+
*/
|
|
116
|
+
public function setTypeAttribute(?string $type = 'country')
|
|
117
|
+
{
|
|
118
|
+
$this->attributes['type'] = $type;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Creates a 100m polygon from the coorddinates.
|
|
123
|
+
*
|
|
124
|
+
* @var Polygon
|
|
125
|
+
*/
|
|
126
|
+
public function polygon($meters = 100)
|
|
127
|
+
{
|
|
128
|
+
return new \League\Geotools\Polygon\Polygon(Utils::coordsToCircle($this->latitude, $this->longitude, $meters));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Determines if coordinates fall within zone.
|
|
133
|
+
*
|
|
134
|
+
* @param int $latitude
|
|
135
|
+
* @param int $longitude
|
|
136
|
+
*
|
|
137
|
+
* @return bool
|
|
138
|
+
*/
|
|
139
|
+
public function inZone($latitude, $longitude)
|
|
140
|
+
{
|
|
141
|
+
return $this->polygon()->pointInPolygon(new \League\Geotools\Coordinate\Coordinate([$latitude, $longitude]));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Determines if multiple coordinates fall within zone.
|
|
146
|
+
*
|
|
147
|
+
* @param array $coords
|
|
148
|
+
*
|
|
149
|
+
* @return bool
|
|
150
|
+
*/
|
|
151
|
+
public function pointsInZone($coords)
|
|
152
|
+
{
|
|
153
|
+
foreach ($coords as $coord) {
|
|
154
|
+
if (!$this->polygon()->pointInPolygon(new \League\Geotools\Coordinate\Coordinate([$coord[0], $coord[1]]))) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
}
|