Skip to content

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 Supply
  • Inventory Network And Canonical Availability
  • Product Inventory Location

Primary implementation paths:

  • packages/framework/src/Models/ProductInventoryLocation.php
  • packages/framework/src/Actions/ProductInventoryLocation
  • packages/framework/src/Http/Controllers/Api/Admin/ProductInventoryLocationsController.php
  • packages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.php
  • packages/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

ChannelRoleNotes
Admin Settings > LocationsDirectMain packaged create and edit dialogs
Vendor detail > LocationsParent-ownedVendor pages embed the same location edit flow
Admin APIDirectProductInventoryLocationsController exposes CRUD
Storefront inventory-location APIDirect read-onlyLists active locations for storefront consumption
Shipping and fulfillment setupIndirectPickup services and fulfillment services depend on the location
ERP bridgeIndirect upstream inputERP can upsert location data

Sources:

  • packages/admin/src/Livewire/Admin/Settings/Locations/DataTable/CreateDialog.php
  • packages/admin/src/Livewire/Admin/Settings/Locations/DataTable/EditDialog.php
  • packages/admin/src/Livewire/Admin/Vendor/Locations/DataTable.php
  • packages/framework/src/Http/Controllers/Api/Admin/ProductInventoryLocationsController.php
  • packages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.php
  • packages/framework/src/Actions/ErpBridge/ProductInventoryLocation/UpdateOrCreateModelFromDTO.php

Channel-Level Field Coverage

Admin create dialog

The create dialog exposes:

  • name
  • product_vendor_id
  • vendor_location_code
  • phone
  • address1
  • address2
  • city
  • zip
  • contact_name
  • contact_email
  • country_id
  • state_id
  • accepts_pickup
  • auto_send_pickup_details_on_confirmation
  • active

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:

  • id
  • code
  • product_vendor_id
  • vendor_location_code
  • name
  • accepts_pickup
  • active
  • contact_name
  • emails

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.php
  • packages/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_id
  • region
  • emails
  • pickup_note
  • pickup_display_address
  • latitude
  • longitude
  • processing_delay_days

The update action can also accept:

  • api_fulfillment_service_enabled

Sources:

  • packages/framework/src/Models/ProductInventoryLocation.php
  • packages/framework/src/Actions/ProductInventoryLocation/UpdateProductInventoryLocation.php

Storefront field filtering

The storefront controller allows querying active locations, but the storefront resource narrows the payload to:

  • id
  • uuid
  • name
  • vendor_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.php
  • packages/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:

FieldPurpose
product_vendor_idowning vendor
vendor_location_codevendor-facing location identifier
accepts_pickupenables pickup-capable storefront behavior
activecontrols availability across admin and storefront
processing_delay_daysused when pickup services are created or refreshed
opening_hoursstored 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.php
  • packages/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.php
  • packages/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.php
  • packages/framework/src/Actions/ProductInventoryLocation/UpdateOrCreatePickupServices.php

Deactivation and deletion behavior

If a location is deactivated:

  • DeactivateProductInventoryLocation is 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.php
  • packages/framework/src/Actions/ProductInventoryLocation/DeleteProductInventoryLocation.php
  • packages/framework/src/Actions/ProductInventoryLocation/DeactivateProductInventoryLocation.php
  • packages/framework/config/config.php
  • packages/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.php
  • packages/framework/src/Actions/FulfillmentService/CreateFulfillmentService.php
  • packages/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.php
  • packages/framework/src/Actions/ErpBridge/ProductInventoryLocation/UpdateOrCreateModelFromDTO.php
  • packages/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.php
  • packages/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.php
  • packages/framework/src/Http/Controllers/Api/Storefront/InventoryLocationController.php
  • packages/framework/src/Http/Resources/Storefront/ProductInventoryLocationResource.php

Current Documentation Takeaways

  1. ProductInventoryLocation is both an admin configuration record and a storefront-facing pickup/location record.
  2. Pickup and fulfillment side effects are automatic, not optional follow-up steps.
  3. 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.