Skip to content

Product Vendor

First-Pass Node Dossier

This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.

What It Is

ProductVendor is the vendor or supplier aggregate root in Pyle. It groups inventory locations, staged catalog items, staged inventory, mapping workflows, and vendor data feeds under one operational record.

Parent hierarchy:

  • Inventory & Vendor Supply
  • Vendor Supply Master And Feed Staging
  • Product Vendor

Primary implementation paths:

  • packages/framework/src/Models/ProductVendor.php
  • packages/framework/src/Actions/ProductVendor
  • packages/framework/src/Http/Controllers/Api/Admin/ProductVendorsController.php
  • packages/admin/src/Livewire/Admin/Vendors
  • packages/admin/src/Livewire/Admin/Vendor

What Users Can Do With It

Direct capabilities

Admin operators can:

  • create, rename, and delete vendors
  • review vendor health and active-feed status in the vendors list
  • open a vendor detail area for locations, catalog items, mappings, mapping attempts, manufacturers, data feeds, and reports
  • dispatch vendor inventory sync through the admin API

Indirect capabilities

Vendor-owned workflows also let operators:

  • stage catalog items and staged inventory through feeds
  • configure assignment rules through vendor-manufacturer and related pivots
  • manage vendor mappings and review mapping attempts

Things users cannot do directly

The inspected packaged vendor create and edit dialogs only expose the vendor name. Many model fields exist for deeper integrations, but they are not directly surfaced in the inspected CRUD dialogs.

Where It Is Managed

ChannelRoleNotes
Admin vendors listDirectMain create, edit, delete, search, and health review surface
Vendor detail pagesParent-ownedLocations, catalog items, mappings, mapping attempts, manufacturers, and data feeds live under the vendor
Admin APIDirectCRUD plus dispatchInventorySync
Excel toolsIndirectMany vendor-centric reports require choosing a vendor
StorefrontIndirectVendors do not appear as a direct shopper-facing concept in the inspected base product

Sources:

  • packages/admin/src/Livewire/Admin/Vendors/DataTable.php
  • packages/admin/src/Livewire/Admin/Vendors/DataTable/CreateDialog.php
  • packages/admin/src/Livewire/Admin/Vendors/DataTable/EditDialog.php
  • packages/admin/routes/web.php
  • packages/framework/src/Http/Controllers/Api/Admin/ProductVendorsController.php

Channel-Level Field Coverage

Packaged admin create and edit dialogs

The inspected create and edit dialogs expose only:

  • name

Sources:

  • packages/admin/src/Livewire/Admin/Vendors/DataTable/CreateDialog.php
  • packages/admin/src/Livewire/Admin/Vendors/DataTable/EditDialog.php

Admin API and action layer

The admin API list endpoint allows:

  • id
  • name

with includes for:

  • filesystemDisk
  • productInventoryLocations

The create and update actions accept a broader set of integration-oriented fields:

  • code
  • filesystem_disk_id
  • inventory_file_path
  • is_generic_inventory_file
  • sync_inventory
  • sync_cost
  • sync_msrp

Sources:

  • packages/framework/src/Http/Controllers/Api/Admin/ProductVendorsController.php
  • packages/framework/src/Actions/ProductVendor/CreateProductVendor.php
  • packages/framework/src/Actions/ProductVendor/UpdateProductVendor.php

Model fields not exposed in the inspected CRUD dialogs

The model also carries:

  • inventory_synced_at
  • exported_to_accounting_at
  • inventory_directory_path
  • legacy_inventory_sync
  • ftp_file_modified_at
  • inventory_sync_started_at
  • extra_attributes

Source:

  • packages/framework/src/Models/ProductVendor.php

Configuration And Data Model

Key model characteristics:

  • searchable
  • activity-log aware
  • soft-deletable
  • auto-generates a vendor code from the name when missing
  • auto-creates a manual data feed after creation

Important relationships grouped under the vendor:

  • inventory locations
  • staged catalog items
  • staged catalog inventory items
  • mappings and mapping attempts
  • raw legacy vendor inventory items
  • vendor manufacturer, category, type, attribute, and collection assignment rules
  • data feeds

Sources:

  • packages/framework/src/Models/ProductVendor.php
  • packages/framework/src/Actions/DataFeed/CreateManualDataFeed.php

Relationships

ProductVendor directly relates to:

  • productVendorItems()
  • productVendorCatalogItems()
  • productVendorCatalogInventoryItems()
  • productMappingAttempts()
  • productVendorInventoryItems()
  • productVendorMappings()
  • productInventoryLocations()
  • productManufacturers()
  • productCategories()
  • productTypes()
  • productAttributes()
  • productCollections()
  • filesystemDisk()
  • dataFeeds()

Practical ownership:

  • the vendor is the parent record for most supply-domain admin pages
  • feed health, next-run, and sync status roll up to the vendor

Sources:

  • packages/framework/src/Models/ProductVendor.php
  • packages/admin/src/Livewire/Admin/Vendor

Rules And Downstream Effects

Create and delete rules

  • creating a vendor automatically creates a non-deletable manual data feed
  • deleting a vendor is blocked when it would remove the last remaining product vendor

Sources:

  • packages/framework/src/Models/ProductVendor.php
  • packages/framework/src/Actions/DataFeed/CreateManualDataFeed.php
  • packages/framework/src/Actions/ProductVendor/DeleteProductVendor.php

Feed and sync behavior

The vendor model computes operational rollups such as:

  • healthy or unhealthy feed status
  • active-feed count
  • last successful feed sync
  • next scheduled run
  • inventory-sync status

Source:

  • packages/framework/src/Models/ProductVendor.php

Assignment-rule behavior

Vendor assignment pivots drive auto-assignment and mapping-attempt behavior for staged vendor catalog items.

Sources:

  • packages/framework/src/Models/ProductManufacturerProductVendor.php
  • packages/framework/src/Actions/ProductVendor/ProductManufacturer/AttachOrUpdateProductManufacturer.php
  • packages/framework/src/Actions/ProductVendor/ProductCategory/AttachOrUpdateProductCategory.php
  • packages/framework/src/Actions/ProductVendor/ProductType/AttachOrUpdateProductType.php
  • packages/framework/src/Actions/ProductVendor/ProductAttribute/AttachOrUpdateProductAttribute.php
  • packages/framework/src/Actions/ProductVendor/ProductCollection/AttachOrUpdateProductCollection.php

Integrations And Automation

Data feeds

ProductVendor is the main parent of vendor feed operations.

The packaged vendor area exposes data-feed pages, run history, feature configuration, and report surfaces.

Sources:

  • packages/admin/src/Livewire/Admin/Vendor/DataFeeds
  • packages/admin/src/Livewire/Admin/Vendor/DataFeed
  • packages/framework/src/Models/ProductVendor.php

Inventory sync

The admin API exposes an explicit inventory-sync dispatch endpoint at the vendor level.

Source:

  • packages/framework/src/Http/Controllers/Api/Admin/ProductVendorsController.php

Excel and reports

The admin Excel tooling uses vendor selection for several export and import flows, especially mapping-related and vendor-catalog reports.

Sources:

  • packages/admin/src/Livewire/Admin/Tools/Excel
  • packages/framework/src/Exports/ProductVendor
  • packages/framework/src/Exports/ProductVendorMapping

Where It Appears To End Users

ProductVendor is mainly an internal operator concept.

Customers do not directly browse vendors in the inspected base storefront, but vendor configuration affects:

  • which locations exist
  • which catalog items can be mapped
  • which inventory becomes sellable
  • whether feed-driven supply data remains healthy

Current Documentation Takeaways

  1. ProductVendor is the parent operational record for nearly every vendor-side supply workflow.
  2. The packaged vendor CRUD dialogs are intentionally thin, but the model carries much deeper integration and feed state.
  3. Creating a vendor does more than add a label; it also seeds manual feed infrastructure for later imports.

Open Questions

  • The vendor model exposes inventory-sync status and feed rollups, but the exact packaged UI fields for every one of those rollups were not inspected in this pass.
  • The model's productInventoryItemsCount attribute still relies on the legacy productVendorItem relationship chain, which suggests some older abstractions remain in play under the surface.