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