-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-17_01 · Lista de precios enlazada al inventario + hojas de salida
--
-- Pedido del usuario: arraigar cada producto o concepto de la lista de precios
-- de Paquetes a un catálogo o a un producto del inventario, para saber al
-- hacer la hoja de salida de un proyecto si se tiene lo elegido y medir lo que
-- se puede ofrecer a quien despacha.
--
--   paquete_producto.id_catalogo        cualquier producto del catálogo sirve
--   paquete_producto.id_producto        (ya existía) producto exacto; manda sobre el catálogo
--   paquete_producto.factor_inventario  cuántas unidades de la lista equivale
--                                       1 unidad de inventario (1 lámina = 2.9768 m²)
--
--   orden_salida (existía sin uso) pasa a ser la "hoja de salida" de un
--   proyecto: sale de la oferta seleccionada de una solicitud de cotización.
--   Ciclo: borrador → despachada (descuenta del Kardex) | cancelada.
--   orden_salida_detalle.id_paquete_producto = concepto de la oferta que cubre.
--
-- Respaldo previo: backups/tinsa_db_pre-hojas-salida_2026-10-17.sql
-- Reversa: database/rollback/2026-10-17_01_hojas_salida.sql
-- ═══════════════════════════════════════════════════════════════════════

ALTER TABLE paquete_producto
  ADD COLUMN id_catalogo INT(10) UNSIGNED NULL DEFAULT NULL AFTER es_transporte,
  ADD COLUMN factor_inventario DECIMAL(12,4) NOT NULL DEFAULT 1.0000 AFTER id_producto,
  ADD KEY fk_pqp_catalogo (id_catalogo),
  ADD CONSTRAINT fk_pqp_catalogo FOREIGN KEY (id_catalogo) REFERENCES catalogo_producto (id) ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT chk_pqp_factor CHECK (factor_inventario > 0);

ALTER TABLE orden_salida
  ADD COLUMN id_cotizacion_venta INT(10) UNSIGNED NULL DEFAULT NULL AFTER id_bodega,
  ADD COLUMN id_oferta INT(10) UNSIGNED NULL DEFAULT NULL AFTER id_cotizacion_venta,
  ADD COLUMN fecha_despacho DATETIME NULL DEFAULT NULL AFTER estado,
  ADD KEY fk_orden_salida_solicitud (id_cotizacion_venta),
  ADD KEY fk_orden_salida_oferta (id_oferta),
  ADD CONSTRAINT fk_orden_salida_solicitud FOREIGN KEY (id_cotizacion_venta) REFERENCES cotizacion_venta (id) ON UPDATE CASCADE,
  ADD CONSTRAINT fk_orden_salida_oferta FOREIGN KEY (id_oferta) REFERENCES cotizacion_venta_oferta (id) ON UPDATE CASCADE;

ALTER TABLE orden_salida_detalle
  ADD COLUMN id_paquete_producto INT(10) UNSIGNED NULL DEFAULT NULL AFTER id_orden_salida,
  ADD KEY fk_detalle_salida_concepto (id_paquete_producto),
  ADD CONSTRAINT fk_detalle_salida_concepto FOREIGN KEY (id_paquete_producto) REFERENCES paquete_producto (id) ON DELETE SET NULL ON UPDATE CASCADE;

-- Pestaña nueva en Inventario y Bodega, de entrada solo para Administrador
INSERT INTO pestanas (id_modulo, nombre, ruta, icono, orden, estado) VALUES
  (1, 'Hojas de salida', '/inventario/salidas', 'fa-dolly', 11, 1);

INSERT INTO permisos_roles (id_rol, id_pestana, puede_leer, puede_escribir, puede_eliminar)
SELECT 1, p.id, 1, 1, 1 FROM pestanas p WHERE p.ruta = '/inventario/salidas';
