Skip to content

Products Admin Panel

Products are managed through Filament resources. The primary workflow starts from Tours (under “Suppliers”), which creates both the tour and its underlying ProductTemplate in a single wizard. Publishing to markets is done from the Tour edit page.

The simplified workflow is:

  1. Create a Tour (Suppliers > Tours) — defines itinerary, content, hotels, activities, transfers, and travel windows in one wizard
  2. Publish to Market — from the Tour edit page, creates a ProductByMarket with AI translation
  3. Review Market Product — fine-tune flight configs, translations, and SEO in Products by Market

ProductTemplate is created and managed automatically through the Tour form. The standalone Product Templates resource is hidden from navigation but remains accessible via direct URL for debugging.

Source: backend/app/Filament/Resources/ProductTemplates/ProductTemplateResource.php (shouldRegisterNavigation() returns false)

Path: Admin > Suppliers > Tours > View

The Tour view page provides a comprehensive overview of the tour state.

A header widget showing 6-step completion progress with auto-derived TourStatus (Draft/Complete):

StepChecks
Tour DetailsSupplier, source locale, and title filled
ItineraryAt least arrival + one stop with locations, nights, and per-day content (title, details)
Visual & MediaHero image + at least 3 gallery images
Travel WindowsAt least one rate period with start/end dates
Services AssignmentsAll itinerary stops have a Selection-tier hotel assigned
Supplier DetailsMeals and transport descriptions filled; guide languages if guide enabled

Status is Complete when all 6 steps pass; Draft otherwise. Status is derived automatically on every save — there is no manual status toggle.

Source: backend/app/Filament/Resources/Suppliers/SupplierTours/Widgets/TourCompletionWidget.php, backend/app/Services/SupplierTourService.php

Below the form, a “Published Markets” section lists all ProductByMarket records linked to this tour’s template. Each entry shows market name, locale, SKU, and status as a clickable badge linking to the market product view page.

Source: backend/app/Filament/Resources/Suppliers/SupplierTours/Pages/ViewSupplierTour.php

Three footer widgets display the current hotel, activity, and transfer assignments from the tour itinerary in read-only tables:

  • Hotels — grouped by stop, showing Selection/Luxury/Grand Luxury hotels per period
  • Activities — per-day assignments across Included/Extra/Substitution tiers
  • Transfers — per-day assignments across Selection/Luxury/Grand Luxury tiers

Source: backend/app/Filament/Resources/ProductTemplates/Widgets/SupplierTourHotelsWidget.php, SupplierTourActivitiesWidget.php, SupplierTourTransfersWidget.php

Available on the Tour Edit page header. Creates a ProductByMarket from the tour’s template.

Modal form:

  • Select a market (active markets only)
  • Select a language from the market’s supported locales

On submit:

  1. Creates ProductByMarket record (status: draft) with auto-generated SKU
  2. Generates flight configs from the market’s default airports using FlightRouteConfigGenerator
  3. AI-translates content if target locale differs from source locale (falls back to empty translation on failure)
  4. Redirects to the new ProductByMarket edit page

Duplicate check: if a ProductByMarket already exists for the same template + market + locale, a warning is shown and no record is created.

Source: backend/app/Filament/Resources/Suppliers/SupplierTours/Actions/PublishToMarketAction.php

Path: Admin > Products > Products by Market

Source: backend/app/Filament/Resources/ProductsByMarket/ProductByMarketResource.php

The creation form uses a 4-step wizard for guided data entry:

  1. Product & Market — Select product template, market, language, status, sort order
  2. Flight Configuration — Departure airports, route type, search period, excluded dates
  3. Description and Itinerary — AI translation button, core content, per-stop itinerary with nested per-day translations (day_label, title, details)
  4. Details & SEO — Logistics, accommodation, meal plans, SEO metadata

Each step validates before allowing progression.

Source: backend/app/Filament/Resources/ProductsByMarket/Pages/CreateProductByMarket.php

ButtonVisibilityBehavior
Preview on FrontendActive productsDirect link to frontend product page
Preview DraftDraft/Inactive productsSigned URL with 60-minute expiration
Prepare Flight SearchesAlwaysCreates routes and cache entries for flight configs
View Cached FlightsWhen matching routes existLinks to DynamicFlightCaches filtered by product routes

Source: backend/app/Filament/Resources/ProductsByMarket/Pages/ViewProductByMarket.php

ResourceGroupIconNotes
ToursSuppliersmap-pinPrimary entry point for product creation
Products by MarketProductsglobe-altMarket-specific configuration
Product TemplatesProductsrectangle-stackHidden from navigation (accessible via direct URL)

Resources use HasResourcePermissions trait for RBAC integration.

Source: backend/app/Filament/Traits/HasResourcePermissions.php