Ir al contenido

Editor Masivo

Actualiza precios, impuestos, categorías o estado de múltiples productos simultáneamente.

  1. En la lista de productos, selecciona los productos con los checkboxes.
  2. Aparece el botón “Editar (N)” — clic en él.
  3. Selecciona el tipo de acción (ver tabla abajo).
  4. Introduce el nuevo valor o ajuste.
  5. Clic en “Aplicar cambios” — productos actualizados.

ALERTA: Los cambios masivos son irreversibles. Revisa cuidadosamente antes de aplicar.

AcciónDescripciónOpciones
Ajustar precioSuma o resta un valor o porcentajeAbsoluto (+5€) / Porcentaje (+10%)
Cambiar IVAEstablece nueva tasa de IVA0%, 4%, 10%, 21%
Cambiar categoríaAsigna nueva categoríaTexto libre o categoría existente
Cambiar estadoActiva o desactiva productosActivo / Inactivo

Porcentaje:

  • Productos seleccionados con precio 10€
  • Ajuste: +20%
  • Nuevo precio: 12€

Absoluto:

  • Productos seleccionados con precio 10€
  • Ajuste: +5€
  • Nuevo precio: 15€
  • Los productos seleccionados se actualizan en la lista.
  • Toast de confirmación: “N productos actualizados correctamente”.
  • Los cambios se reflejan inmediatamente.
MensajeCausaSolución
”No hay productos seleccionados”Checkboxes vacíosSelecciona al menos un producto
”El precio no puede ser negativo”Ajuste resulta en precio menor a 0Reduce el descuento
🔧 Detalles Técnicos — Editor Masivo

Componente:

  • BulkProductEditor.tsx
  • Dialog modal con formulario de acción

Tipo de dato:

type BulkAction = "price" | "tax" | "category" | "status";
interface BulkEditValues {
price_adjustment_type: "absolute" | "percentage";
price_adjustment: string;
tax_rate: string;
category: string;
status: "active" | "inactive";
}

Lógica de actualización:

Precio (porcentaje):

newPrice = currentPrice * (1 + adjustment / 100);

Precio (absoluto):

newPrice = currentPrice + adjustment;

Queries de diagnóstico:

-- Productos actualizados recientemente (última hora)
SELECT id, name, unit_price, tax_rate, category, updated_at
FROM products
WHERE business_id = '<business_id>'
AND updated_at >= NOW() - INTERVAL '1 hour'
ORDER BY updated_at DESC;