Ir al contenido

Gestionar Variantes

Crea variantes de un producto con atributos personalizables (talla, color, modelo) y precios/stock independientes.

  1. En la página de detalle del producto, ve a la sección “Variantes”.
  2. Clic en ”+ Agregar Variante”.
  3. Completa los campos obligatorios (ver tabla abajo).
  4. Define los atributos en formato JSON: {"talla": "M", "color": "Rojo"}.
  5. Clic en “Guardar” — variante creada.

Nota: Las variantes solo están disponibles para productos de tipo “Producto”, no para servicios.

CampoDescripciónEjemplo
Nombre de varianteIdentificador descriptivoCamiseta Roja M
SKU varianteCódigo único de la varianteCAM-RED-M
Ajuste de precioDiferencia sobre precio base (+/-)+2.00 €
StockCantidad disponible50
AtributosJSON con propiedades{"talla": "M", "color": "Rojo"}
  • La variante aparece en la tabla de variantes del producto.
  • El precio final se calcula correctamente (precio base + ajuste).
  • El stock de la variante es independiente del producto base.
MensajeCausaSolución
”El nombre de variante es requerido”Campo vacíoIntroduce nombre descriptivo
”SKU duplicado”SKU ya existeUsa código único para la variante
”Formato de atributos inválido”JSON mal formadoVerifica sintaxis: {"clave": "valor"}
🔧 Detalles Técnicos — Gestionar Variantes

Tablas involucradas:

TablaColumnas claveFK
product_variantsid, product_id, variant_name, sku_variant, price_adjustment, stock_quantity, attributes, is_activeproducts

Tipo de dato:

interface ProductVariant {
id?: string;
variant_name: string;
sku_variant: string;
price_adjustment: number;
stock_quantity: number;
attributes: Record<string, string>;
is_active: boolean;
}

Componente:

  • ProductVariantsManager.tsx
  • Tabla editable con inline editing
  • JSON editor para atributos

Queries de diagnóstico:

-- Variantes de un producto
SELECT id, variant_name, sku_variant, price_adjustment, stock_quantity, attributes
FROM product_variants
WHERE product_id = '<product_id>'
AND is_active = true;
-- Precio final con variantes
SELECT pv.variant_name,
p.unit_price as precio_base,
pv.price_adjustment as ajuste,
(p.unit_price + pv.price_adjustment) as precio_final
FROM product_variants pv
INNER JOIN products p ON p.id = pv.product_id
WHERE p.id = '<product_id>';