Product Inventory Location
First-Pass Node Dossier
This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.
What It Is
ProductInventoryLocation is the location-level supply and pickup record in Pyle. It represents the warehouse or pickup-capable location that owns inventory rows, shipping services, fulfillment services, and storefront location-selection behavior.
Parent hierarchy:
Inventory & Vendor SupplyInventory Network And Canonical AvailabilityProduct Inventory Location
Primary implementation paths:
packages/framework/src/Models/ProductInventoryLocation.phppackages/framework/src/Actions/ProductInventoryLocationpackages/framework/src/Http/Controllers/Api/Admin/ProductInventoryLocationsController.phppackages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.phppackages/admin/src/Livewire/Admin/Settings/Locations
What Users Can Do With It
Direct capabilities
Admin operators can:
- create, edit, and delete inventory locations in Settings > Locations
- review and edit vendor-owned locations from the vendor detail view
- list, search, create, update, show, and delete locations through the admin API
- expose active pickup-capable locations to storefront location selection
Indirect capabilities
Other workflows use the location without making it the primary object:
- canonical inventory rows belong to a location
- pickup shipping services are created or updated from location settings
- fulfillment services can be toggled from the update action
- product offers, shipping, and pickup flows use location availability
Things users cannot do directly
The inspected packaged storefront does not expose direct customer editing of inventory locations. Customers only consume the active location set selected by the system or by storefront session flows.
Where It Is Managed
| Channel | Role | Notes |
|---|---|---|
| Admin Settings > Locations | Direct | Main packaged create and edit dialogs |
| Vendor detail > Locations | Parent-owned | Vendor pages embed the same location edit flow |
| Admin API | Direct | ProductInventoryLocationsController exposes CRUD |
| Storefront inventory-location API | Direct read-only | Lists active locations for storefront consumption |
| Shipping and fulfillment setup | Indirect | Pickup services and fulfillment services depend on the location |
| ERP bridge | Indirect upstream input | ERP can upsert location data |
Sources:
packages/admin/src/Livewire/Admin/Settings/Locations/DataTable/CreateDialog.phppackages/admin/src/Livewire/Admin/Settings/Locations/DataTable/EditDialog.phppackages/admin/src/Livewire/Admin/Vendor/Locations/DataTable.phppackages/framework/src/Http/Controllers/Api/Admin/ProductInventoryLocationsController.phppackages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.phppackages/framework/src/Actions/ErpBridge/ProductInventoryLocation/UpdateOrCreateModelFromDTO.php
Channel-Level Field Coverage
Admin create dialog
The create dialog exposes:
nameproduct_vendor_idvendor_location_codephoneaddress1address2cityzipcontact_namecontact_emailcountry_idstate_idaccepts_pickupauto_send_pickup_details_on_confirmationactive
Source:
packages/admin/src/Livewire/Admin/Settings/Locations/DataTable/CreateDialog.php
Admin edit dialog
The edit dialog keeps the create fields and adds editable opening-hours data for each weekday.
It also persists the location through UpdateProductInventoryLocation, which accepts a broader field set than the dialog visibly exposes.
Source:
packages/admin/src/Livewire/Admin/Settings/Locations/DataTable/EditDialog.php
Admin API
The list endpoint allows these direct list fields:
idcodeproduct_vendor_idvendor_location_codenameaccepts_pickupactivecontact_nameemails
The resource serializer also returns flattened address fields, opening_hours, pickup flags, and fulfillment-service state when loaded.
Sources:
packages/framework/src/Http/Controllers/Api/Admin/ProductInventoryLocationsController.phppackages/framework/src/Http/Resources/Admin/ProductInventoryLocationResource.php
Model fields that exist but are not exposed in the inspected packaged dialogs
The model also contains or derives:
external_idregionemailspickup_notepickup_display_addresslatitudelongitudeprocessing_delay_days
The update action can also accept:
api_fulfillment_service_enabled
Sources:
packages/framework/src/Models/ProductInventoryLocation.phppackages/framework/src/Actions/ProductInventoryLocation/UpdateProductInventoryLocation.php
Storefront field filtering
The storefront controller allows querying active locations, but the storefront resource narrows the payload to:
iduuidnamevendor_location_code- address and contact-style fields
The inspected storefront resource does not directly serialize accepts_pickup, even though pickup capability is important to the selection flow.
Sources:
packages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.phppackages/framework/src/Http/Resources/Storefront/ProductInventoryLocationResource.php
Configuration And Data Model
Key model characteristics:
- ERP-syncable
- soft-deletable
- searchable
- activity-log aware
- translatable for
pickup_note - automatically loads a related morph address
Important fields:
| Field | Purpose |
|---|---|
product_vendor_id | owning vendor |
vendor_location_code | vendor-facing location identifier |
accepts_pickup | enables pickup-capable storefront behavior |
active | controls availability across admin and storefront |
processing_delay_days | used when pickup services are created or refreshed |
opening_hours | stored JSON-like opening-hours payload |
Practical ownership:
- the address is stored as a separate morph record
- the display name changes when the location is inactive
- the model computes API-fulfillment capability through related vendor and fulfillment-service state
Sources:
packages/framework/src/Models/ProductInventoryLocation.phppackages/framework/src/Http/Resources/Admin/ProductInventoryLocationResource.php
Relationships
ProductInventoryLocation directly relates to:
productVendor()productInventoryItems()products()shippingServices()address()fulfillmentServices()
Practical dependents:
- storefront session location selection
- pickup shipping services
- canonical inventory ownership
- product-offer and shipping resolution
Sources:
packages/framework/src/Models/ProductInventoryLocation.phppackages/storefront/src/StorefrontSession.php
Rules And Downstream Effects
Observer and action side effects
Creating, updating, restoring, or deleting a location triggers:
- latitude and longitude recalculation
- pickup-service creation, update, or deletion
Sources:
packages/framework/src/Observers/ProductInventoryLocationObserver.phppackages/framework/src/Actions/ProductInventoryLocation/UpdateOrCreatePickupServices.php
Deactivation and deletion behavior
If a location is deactivated:
DeactivateProductInventoryLocationis dispatched- canonical inventory rows at that location are deleted
- staged vendor catalog inventory rows at that location are deleted, which can trigger further canonical resync or deletion
If a location is deleted:
- delete pipelines remove related shipping services, product offers, and fulfillment services
- the model delete hook deletes related canonical inventory rows
Sources:
packages/framework/src/Actions/ProductInventoryLocation/UpdateProductInventoryLocation.phppackages/framework/src/Actions/ProductInventoryLocation/DeleteProductInventoryLocation.phppackages/framework/src/Actions/ProductInventoryLocation/DeactivateProductInventoryLocation.phppackages/framework/config/config.phppackages/framework/src/Models/ProductInventoryLocation.php
Pickup and fulfillment behavior
If accepts_pickup is enabled and a warehouse-pickup shipping method exists, Pyle creates or refreshes a zero-price pickup shipping service tied to the location.
Sources:
packages/framework/src/Actions/ProductInventoryLocation/UpdateOrCreatePickupServices.phppackages/framework/src/Actions/FulfillmentService/CreateFulfillmentService.phppackages/framework/src/Actions/FulfillmentService/DeleteFulfillmentService.php
Integrations And Automation
ERP bridge
Inventory locations are direct ERP sync records.
Sources:
packages/framework/src/Services/ErpBridge/ProductInventoryLocation/ProductInventoryLocationErpSyncService.phppackages/framework/src/Actions/ErpBridge/ProductInventoryLocation/UpdateOrCreateModelFromDTO.phppackages/erp-bridge/src/Requests/InventoryLocations/GetInventoryLocationsRequest.php
Shipping exports and setup
Inventory locations also appear in shipping-oriented export flows and command-line setup.
Sources:
packages/framework/src/Actions/Exports/Shipping/Sheets/ProductInventoryLocationsSheet.phppackages/framework/src/Actions/CommandLine/Setup/UpsertInitialProjectData.php
Where It Appears To End Users
ProductInventoryLocation is one of the few supply-domain records that becomes visible to shoppers.
It affects:
- storefront pickup-location selection
- default location choice in storefront session
- location-backed address and contact information shown to the customer
Sources:
packages/storefront/src/StorefrontSession.phppackages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.phppackages/framework/src/Http/Resources/Storefront/ProductInventoryLocationResource.php
Current Documentation Takeaways
ProductInventoryLocationis both an admin configuration record and a storefront-facing pickup/location record.- Pickup and fulfillment side effects are automatic, not optional follow-up steps.
- The packaged dialogs expose only part of the model; several operational fields exist only in actions, resources, or sync paths.
Open Questions
- The inspected packaged dialogs did not expose
pickup_note,pickup_display_address, or direct API-fulfillment toggles even though the update action supports them. - The storefront query layer knows about active pickup-capable locations, but the storefront serializer still narrows the public payload more than the query contract suggests.