@fleetbase/fleetops-engine 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +14 -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,96 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
6
|
+
use Fleetbase\Models\Model;
|
|
7
|
+
use Fleetbase\Traits\HasUuid;
|
|
8
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
9
|
+
|
|
10
|
+
class ServiceRateFee 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 = 'service_rate_fees';
|
|
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', 'service_rate_uuid', 'distance', 'distance_unit', 'min', 'max', 'unit', 'fee', 'currency'];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The attributes that should be cast to native types.
|
|
38
|
+
*
|
|
39
|
+
* @var array
|
|
40
|
+
*/
|
|
41
|
+
protected $casts = [
|
|
42
|
+
'min' => 'integer',
|
|
43
|
+
'max' => 'integer',
|
|
44
|
+
'fee' => 'integer',
|
|
45
|
+
'distance' => 'integer',
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Dynamic attributes that are appended to object.
|
|
50
|
+
*
|
|
51
|
+
* @var array
|
|
52
|
+
*/
|
|
53
|
+
protected $appends = [];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The attributes excluded from the model's JSON form.
|
|
57
|
+
*
|
|
58
|
+
* @var array
|
|
59
|
+
*/
|
|
60
|
+
protected $hidden = [];
|
|
61
|
+
|
|
62
|
+
public static function onRowInsert($row)
|
|
63
|
+
{
|
|
64
|
+
$row['fee'] = Utils::numbersOnly($row['fee'] ?? null);
|
|
65
|
+
$row['distance'] = Utils::numbersOnly($row['distance'] ?? null);
|
|
66
|
+
$row['min'] = Utils::numbersOnly($row['min'] ?? null);
|
|
67
|
+
$row['max'] = Utils::numbersOnly($row['max'] ?? null);
|
|
68
|
+
|
|
69
|
+
return $row;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Set the fee as only numbers.
|
|
74
|
+
*
|
|
75
|
+
* @void
|
|
76
|
+
*/
|
|
77
|
+
public function setFeeAttribute($value)
|
|
78
|
+
{
|
|
79
|
+
$this->attributes['fee'] = Utils::numbersOnly($value);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Set the distance as numbers only.
|
|
84
|
+
*
|
|
85
|
+
* @void
|
|
86
|
+
*/
|
|
87
|
+
public function setDistanceAttribute($value)
|
|
88
|
+
{
|
|
89
|
+
$this->attributes['distance'] = Utils::numbersOnly($value);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public function isWithinMinMax(int $number = 0): bool
|
|
93
|
+
{
|
|
94
|
+
return $number >= $this->min && $number <= $this->max;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Money;
|
|
6
|
+
use Fleetbase\FleetOps\Support\Utils;
|
|
7
|
+
use Fleetbase\Models\Model;
|
|
8
|
+
use Fleetbase\Traits\HasUuid;
|
|
9
|
+
use PhpUnitsOfMeasure\PhysicalQuantity\Length;
|
|
10
|
+
use PhpUnitsOfMeasure\PhysicalQuantity\Mass;
|
|
11
|
+
|
|
12
|
+
class ServiceRateParcelFee extends Model
|
|
13
|
+
{
|
|
14
|
+
use HasUuid;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The database table used by the model.
|
|
18
|
+
*
|
|
19
|
+
* @var string
|
|
20
|
+
*/
|
|
21
|
+
protected $table = 'service_rate_parcel_fees';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* These attributes that can be queried.
|
|
25
|
+
*
|
|
26
|
+
* @var array
|
|
27
|
+
*/
|
|
28
|
+
protected $searchableColumns = [];
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The attributes that are mass assignable.
|
|
32
|
+
*
|
|
33
|
+
* @var array
|
|
34
|
+
*/
|
|
35
|
+
protected $fillable = ['_key', 'service_rate_uuid', 'size', 'length', 'width', 'height', 'dimensions_unit', 'weight', 'weight_unit', 'fee', 'currency'];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The attributes that should be cast to native types.
|
|
39
|
+
*
|
|
40
|
+
* @var array
|
|
41
|
+
*/
|
|
42
|
+
protected $casts = [
|
|
43
|
+
'fee' => Money::class,
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Dynamic attributes that are appended to object.
|
|
48
|
+
*
|
|
49
|
+
* @var array
|
|
50
|
+
*/
|
|
51
|
+
protected $appends = [];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The attributes excluded from the model's JSON form.
|
|
55
|
+
*
|
|
56
|
+
* @var array
|
|
57
|
+
*/
|
|
58
|
+
protected $hidden = [];
|
|
59
|
+
|
|
60
|
+
public static function onRowInsert($row)
|
|
61
|
+
{
|
|
62
|
+
$row['fee'] = Utils::numbersOnly($row['fee']);
|
|
63
|
+
|
|
64
|
+
return $row;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Set the fee as only numbers.
|
|
69
|
+
*
|
|
70
|
+
* @void
|
|
71
|
+
*/
|
|
72
|
+
public function setFeeAttribute($value)
|
|
73
|
+
{
|
|
74
|
+
$this->attributes['fee'] = Utils::numbersOnly($value);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The length the entity belongs to.
|
|
79
|
+
*
|
|
80
|
+
* @var PhpUnitsOfMeasure\PhysicalQuantity\Length
|
|
81
|
+
*/
|
|
82
|
+
public function getLengthUnitAttribute()
|
|
83
|
+
{
|
|
84
|
+
return new Length($this->length, $this->dimensions_unit);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The width the entity belongs to.
|
|
89
|
+
*
|
|
90
|
+
* @var PhpUnitsOfMeasure\PhysicalQuantity\Length
|
|
91
|
+
*/
|
|
92
|
+
public function getWidthUnitAttribute()
|
|
93
|
+
{
|
|
94
|
+
return new Length($this->width, $this->dimensions_unit);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The height the entity belongs to.
|
|
99
|
+
*
|
|
100
|
+
* @var PhpUnitsOfMeasure\PhysicalQuantity\Length
|
|
101
|
+
*/
|
|
102
|
+
public function getHeightUnitAttribute()
|
|
103
|
+
{
|
|
104
|
+
return new Length($this->height, $this->dimensions_unit);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The weight the entity belongs to.
|
|
109
|
+
*
|
|
110
|
+
* @var PhpUnitsOfMeasure\PhysicalQuantity\Mass
|
|
111
|
+
*/
|
|
112
|
+
public function getMassUnitAttribute()
|
|
113
|
+
{
|
|
114
|
+
return new Mass($this->weight, $this->weight_unit);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\FleetOps\Casts\Point;
|
|
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
|
+
use Illuminate\Support\Carbon;
|
|
15
|
+
use Illuminate\Support\Facades\DB;
|
|
16
|
+
use Illuminate\Support\Str;
|
|
17
|
+
use Milon\Barcode\Facades\DNS2DFacade as DNS2D;
|
|
18
|
+
|
|
19
|
+
class TrackingNumber extends Model
|
|
20
|
+
{
|
|
21
|
+
use HasUuid;
|
|
22
|
+
use HasPublicId;
|
|
23
|
+
use HasApiModelBehavior;
|
|
24
|
+
use SendsWebhooks;
|
|
25
|
+
use TracksApiCredential;
|
|
26
|
+
use SpatialTrait;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The database table used by the model.
|
|
30
|
+
*
|
|
31
|
+
* @var string
|
|
32
|
+
*/
|
|
33
|
+
protected $table = 'tracking_numbers';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The type of public Id to generate.
|
|
37
|
+
*
|
|
38
|
+
* @var string
|
|
39
|
+
*/
|
|
40
|
+
protected $publicIdType = 'track';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* These attributes that can be queried.
|
|
44
|
+
*
|
|
45
|
+
* @var array
|
|
46
|
+
*/
|
|
47
|
+
protected $searchableColumns = [];
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The attributes that are mass assignable.
|
|
51
|
+
*
|
|
52
|
+
* @var array
|
|
53
|
+
*/
|
|
54
|
+
protected $fillable = ['_key', 'company_uuid', 'tracking_number', 'owner_uuid', 'owner_type', 'region', 'qr_code', 'barcode', 'status_uuid'];
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The attributes that are spatial columns.
|
|
58
|
+
*
|
|
59
|
+
* @var array
|
|
60
|
+
*/
|
|
61
|
+
protected $spatialFields = ['location'];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The attributes that should be cast to native types.
|
|
65
|
+
*
|
|
66
|
+
* @var array
|
|
67
|
+
*/
|
|
68
|
+
protected $casts = [
|
|
69
|
+
'location' => Point::class,
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Dynamic attributes that are appended to object.
|
|
74
|
+
*
|
|
75
|
+
* @var array
|
|
76
|
+
*/
|
|
77
|
+
protected $appends = ['last_status', 'last_status_code', 'last_status_updated_at', 'type'];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The attributes excluded from the model's JSON form.
|
|
81
|
+
*
|
|
82
|
+
* @var array
|
|
83
|
+
*/
|
|
84
|
+
protected $hidden = ['status'];
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Tracking number status.
|
|
88
|
+
*/
|
|
89
|
+
public function getLastStatusAttribute()
|
|
90
|
+
{
|
|
91
|
+
return $this->status->status;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Tracking number status code.
|
|
96
|
+
*/
|
|
97
|
+
public function getLastStatusCodeAttribute()
|
|
98
|
+
{
|
|
99
|
+
return $this->status->code;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Datetime of last status update.
|
|
104
|
+
*/
|
|
105
|
+
public function getLastStatusUpdatedAtAttribute()
|
|
106
|
+
{
|
|
107
|
+
return $this->status->created_at;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Get the service details.
|
|
112
|
+
*
|
|
113
|
+
* @var Model
|
|
114
|
+
*/
|
|
115
|
+
public function status()
|
|
116
|
+
{
|
|
117
|
+
return $this->hasOne(TrackingStatus::class)->latest()->without(['trackingNumber']);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Tracking statuses by this tracking number.
|
|
122
|
+
*
|
|
123
|
+
* @var Model
|
|
124
|
+
*/
|
|
125
|
+
public function statuses()
|
|
126
|
+
{
|
|
127
|
+
return $this->hasMany(TrackingStatus::class)->without(['trackingNumber']);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Get the order status belongss to.
|
|
132
|
+
*
|
|
133
|
+
* @var Model
|
|
134
|
+
*/
|
|
135
|
+
public function order()
|
|
136
|
+
{
|
|
137
|
+
return $this->belongsTo(Order::class, 'owner_uuid');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get the entity tracking number belongss to.
|
|
142
|
+
*
|
|
143
|
+
* @var Model
|
|
144
|
+
*/
|
|
145
|
+
public function entity()
|
|
146
|
+
{
|
|
147
|
+
return $this->belongsTo(Entity::class, 'owner_uuid');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Get the tracking number owner, could be order or entity.
|
|
152
|
+
*
|
|
153
|
+
* @var Model
|
|
154
|
+
*/
|
|
155
|
+
public function owner()
|
|
156
|
+
{
|
|
157
|
+
return $this->morphTo(__FUNCTION__, 'owner_type', 'owner_uuid')->withoutGlobalScopes();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Get the tracking number type.
|
|
162
|
+
*
|
|
163
|
+
* @var Model
|
|
164
|
+
*/
|
|
165
|
+
public function getTypeAttribute()
|
|
166
|
+
{
|
|
167
|
+
return Utils::getTypeFromClassName($this->owner_type);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Generates a fleetbase tracking number.
|
|
172
|
+
*
|
|
173
|
+
* @var array
|
|
174
|
+
*/
|
|
175
|
+
public static function generateTrackingNumber($region = 'SG', $length = 10)
|
|
176
|
+
{
|
|
177
|
+
$company = \Fleetbase\Models\Company::where('uuid', session('company'))->withoutGlobalScopes()->first();
|
|
178
|
+
$companyName = $company ? strtoupper(substr($company->name, 0, 3)) : null;
|
|
179
|
+
$number = $companyName ?? 'FLB';
|
|
180
|
+
|
|
181
|
+
for ($i = 0; $i < $length; $i++) {
|
|
182
|
+
$number .= mt_rand(0, 9);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return $number . strtoupper($region);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Generates a unique fleetbase tracking number.
|
|
190
|
+
*
|
|
191
|
+
* @var array
|
|
192
|
+
*/
|
|
193
|
+
public static function generateNumber($region = 'SG', $length = 10)
|
|
194
|
+
{
|
|
195
|
+
$n = static::generateTrackingNumber($region, $length);
|
|
196
|
+
$tr = static::where('tracking_number', $n)
|
|
197
|
+
->withTrashed()
|
|
198
|
+
->first();
|
|
199
|
+
while (is_object($tr) && $n == $tr->tracking_number) {
|
|
200
|
+
$n = static::generateTrackingNumber($region, $length);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return $n;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Find a model by its public_id key or throw an exception.
|
|
208
|
+
*
|
|
209
|
+
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|static|static[]
|
|
210
|
+
*
|
|
211
|
+
* @throws \Illuminate\Database\Eloquent\ModelNotFoundException
|
|
212
|
+
*/
|
|
213
|
+
public static function findTrackingOrFail($id)
|
|
214
|
+
{
|
|
215
|
+
$result = static::query()
|
|
216
|
+
->select(['*'])
|
|
217
|
+
->with(['status'])
|
|
218
|
+
->where(function ($q) use ($id) {
|
|
219
|
+
$q->where('public_id', $id);
|
|
220
|
+
$q->orWhere('tracking_number', $id);
|
|
221
|
+
$q->orWhere('uuid', $id);
|
|
222
|
+
})
|
|
223
|
+
->first();
|
|
224
|
+
|
|
225
|
+
if (!is_null($result)) {
|
|
226
|
+
return $result;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
throw (new \Illuminate\Database\Eloquent\ModelNotFoundException())->setModel(static::class, $id);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
public function updateOwnerStatus(TrackingStatus $trackingStatus = null)
|
|
233
|
+
{
|
|
234
|
+
$trackingStatus = $trackingStatus ?? $this->load(['status'])->getRelationValue('status');
|
|
235
|
+
// update status on owner
|
|
236
|
+
$status = strtolower($trackingStatus->code);
|
|
237
|
+
$owner = $this->load(['owner'])->getRelationValue('owner');
|
|
238
|
+
|
|
239
|
+
if ($owner && $owner->isFillable('status') && $owner->status !== $status) {
|
|
240
|
+
$this->owner->status = $status;
|
|
241
|
+
|
|
242
|
+
$this->owner->save();
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return $this;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
public static function insertGetUuid($values = [], Model $owner = null)
|
|
249
|
+
{
|
|
250
|
+
$instance = new static();
|
|
251
|
+
$fillable = $instance->getFillable();
|
|
252
|
+
$insertKeys = array_keys($values);
|
|
253
|
+
// clean insert data
|
|
254
|
+
foreach ($insertKeys as $key) {
|
|
255
|
+
if (!in_array($key, $fillable)) {
|
|
256
|
+
unset($values[$key]);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
$values['uuid'] = $uuid = static::generateUuid();
|
|
261
|
+
$values['public_id'] = static::generatePublicId('track');
|
|
262
|
+
$values['_key'] = session('api_key') ?? 'console';
|
|
263
|
+
$values['created_at'] = Carbon::now()->toDateTimeString();
|
|
264
|
+
$values['company_uuid'] = session('company');
|
|
265
|
+
|
|
266
|
+
if ($owner) {
|
|
267
|
+
$values['owner_uuid'] = $owner->uuid;
|
|
268
|
+
$values['owner_type'] = Utils::getMutationType($owner);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
$values['tracking_number'] = TrackingNumber::generateNumber($values['region'] ?? 'SG');
|
|
272
|
+
$values['qr_code'] = DNS2D::getBarcodePNG($values['owner_uuid'], 'QRCODE');
|
|
273
|
+
$values['barcode'] = DNS2D::getBarcodePNG($values['owner_uuid'], 'PDF417');
|
|
274
|
+
|
|
275
|
+
if (isset($values['meta']) && (is_object($values['meta']) || is_array($values['meta']))) {
|
|
276
|
+
$values['meta'] = json_encode($values['meta']);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
$result = static::insert($values);
|
|
280
|
+
|
|
281
|
+
if (!$result) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
$ownerTypeName = class_basename($values['owner_type']);
|
|
286
|
+
|
|
287
|
+
// create initial status
|
|
288
|
+
$trackingStatusId = TrackingStatus::insertGetUuid([
|
|
289
|
+
'tracking_number_uuid' => $uuid,
|
|
290
|
+
'status' => Str::title($ownerTypeName . ' created'),
|
|
291
|
+
'details' => 'New ' . Str::lower($ownerTypeName) . ' created.',
|
|
292
|
+
'location' => $values['location'] ?? Utils::parsePointToWkt(new Point(0, 0)),
|
|
293
|
+
'code' => 'CREATED',
|
|
294
|
+
]);
|
|
295
|
+
|
|
296
|
+
// update status of tracking number
|
|
297
|
+
TrackingNumber::where('uuid', $uuid)->update(['status_uuid' => $trackingStatusId]);
|
|
298
|
+
|
|
299
|
+
// update owner status
|
|
300
|
+
if ($owner && $owner instanceof Model && $owner->isFillable('status')) {
|
|
301
|
+
// runs event cycles
|
|
302
|
+
// $model->update([ 'status' => 'created' ]);
|
|
303
|
+
|
|
304
|
+
// silent update
|
|
305
|
+
DB::table($owner->getTable())->where('uuid', $owner->uuid)->update(['status' => 'created']);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return $uuid;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
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\HasMetaAttributes;
|
|
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
|
+
use Illuminate\Support\Carbon;
|
|
15
|
+
use Illuminate\Support\Str;
|
|
16
|
+
|
|
17
|
+
class TrackingStatus extends Model
|
|
18
|
+
{
|
|
19
|
+
use HasUuid;
|
|
20
|
+
use HasPublicId;
|
|
21
|
+
use HasApiModelBehavior;
|
|
22
|
+
use HasMetaAttributes;
|
|
23
|
+
use SendsWebhooks;
|
|
24
|
+
use TracksApiCredential;
|
|
25
|
+
use SpatialTrait;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The database table used by the model.
|
|
29
|
+
*
|
|
30
|
+
* @var string
|
|
31
|
+
*/
|
|
32
|
+
protected $table = 'tracking_statuses';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The type of public Id to generate.
|
|
36
|
+
*
|
|
37
|
+
* @var string
|
|
38
|
+
*/
|
|
39
|
+
protected $publicIdType = 'status';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* These attributes that can be queried.
|
|
43
|
+
*
|
|
44
|
+
* @var array
|
|
45
|
+
*/
|
|
46
|
+
protected $searchableColumns = [];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The attributes that are mass assignable.
|
|
50
|
+
*
|
|
51
|
+
* @var array
|
|
52
|
+
*/
|
|
53
|
+
protected $fillable = [
|
|
54
|
+
'_key',
|
|
55
|
+
'company_uuid',
|
|
56
|
+
'tracking_number_uuid',
|
|
57
|
+
'proof_uuid',
|
|
58
|
+
'status',
|
|
59
|
+
'details',
|
|
60
|
+
'code',
|
|
61
|
+
'city',
|
|
62
|
+
'province',
|
|
63
|
+
'postal_code',
|
|
64
|
+
'country',
|
|
65
|
+
'location',
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The attributes that are spatial columns.
|
|
70
|
+
*
|
|
71
|
+
* @var array
|
|
72
|
+
*/
|
|
73
|
+
protected $spatialFields = [
|
|
74
|
+
'location',
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The attributes that should be cast to native types.
|
|
79
|
+
*
|
|
80
|
+
* @var array
|
|
81
|
+
*/
|
|
82
|
+
protected $casts = [
|
|
83
|
+
'meta' => Json::class,
|
|
84
|
+
// 'location' => Point::class,
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Attributes that is filterable on this model.
|
|
89
|
+
*
|
|
90
|
+
* @var array
|
|
91
|
+
*/
|
|
92
|
+
protected $filterParams = [
|
|
93
|
+
'order',
|
|
94
|
+
'entity',
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Dynamic attributes that are appended to object.
|
|
99
|
+
*
|
|
100
|
+
* @var array
|
|
101
|
+
*/
|
|
102
|
+
protected $appends = [];
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The attributes excluded from the model's JSON form.
|
|
106
|
+
*
|
|
107
|
+
* @var array
|
|
108
|
+
*/
|
|
109
|
+
protected $hidden = [];
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The tracking number.
|
|
113
|
+
*
|
|
114
|
+
* @var Model
|
|
115
|
+
*/
|
|
116
|
+
public function trackingNumber()
|
|
117
|
+
{
|
|
118
|
+
return $this->belongsTo(TrackingNumber::class);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The proof if any.
|
|
123
|
+
*
|
|
124
|
+
* @var Model
|
|
125
|
+
*/
|
|
126
|
+
public function proof()
|
|
127
|
+
{
|
|
128
|
+
return $this->belongsTo(Proof::class);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public function setCodeAttribute($code)
|
|
132
|
+
{
|
|
133
|
+
$this->attributes['code'] = static::prepareCode($code);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
public static function prepareCode($string)
|
|
137
|
+
{
|
|
138
|
+
$string = str_replace(' ', '_', $string);
|
|
139
|
+
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);
|
|
140
|
+
$string = strtoupper($string);
|
|
141
|
+
|
|
142
|
+
return $string;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
public static function insertGetUuid($values = [], TrackingNumber $trackingNumber = null)
|
|
146
|
+
{
|
|
147
|
+
$instance = new static();
|
|
148
|
+
$fillable = $instance->getFillable();
|
|
149
|
+
$insertKeys = array_keys($values);
|
|
150
|
+
// clean insert data
|
|
151
|
+
foreach ($insertKeys as $key) {
|
|
152
|
+
if (!in_array($key, $fillable)) {
|
|
153
|
+
unset($values[$key]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
$values['uuid'] = $uuid = (string) Str::uuid();
|
|
158
|
+
$values['public_id'] = static::generatePublicId('status');
|
|
159
|
+
$values['_key'] = session('api_key') ?? 'console';
|
|
160
|
+
$values['created_at'] = Carbon::now()->toDateTimeString();
|
|
161
|
+
$values['company_uuid'] = session('company');
|
|
162
|
+
|
|
163
|
+
if ($trackingNumber) {
|
|
164
|
+
$values['tracking_number_uuid'] = $trackingNumber->uuid;
|
|
165
|
+
$values['status'] = Str::title($trackingNumber->type . ' created');
|
|
166
|
+
$values['details'] = 'New ' . Str::lower($trackingNumber->type) . ' created.';
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (isset($values['meta']) && (is_object($values['meta']) || is_array($values['meta']))) {
|
|
170
|
+
$values['meta'] = json_encode($values['meta']);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
$result = static::insert($values);
|
|
174
|
+
|
|
175
|
+
return $result ? $uuid : false;
|
|
176
|
+
}
|
|
177
|
+
}
|