-- ============================================================
--  Migración 2026-10-14_03 · Ofertas armadas desde un paquete
-- ------------------------------------------------------------
--  En Presupuesto, "Nueva oferta" puede partir de un paquete (Ventas →
--  Paquetes y servicios): el cotizador llena su formulario (o escribe
--  las cantidades si es manual) y las líneas resultantes entran a la
--  oferta con el precio de la lista de paquetes como COSTO.
--  cotizacion_venta_material:
--    id_producto           ahora opcional (las líneas de paquete no son
--                          productos de inventario: mano de obra, etc.).
--    id_paquete_producto   la línea de la lista de precios de paquetes.
--    descripcion, unidad   copia del nombre y unidad al momento de cotizar
--                          (la lista de precios puede cambiar después).
--  cotizacion_venta_oferta:
--    id_paquete, paquete_parametros  de qué paquete salió y con qué
--                          datos (JSON {variable: valor}), para consultarlo.
-- ============================================================
USE tinsa_db;

ALTER TABLE `cotizacion_venta_material`
  MODIFY `id_producto` int(10) unsigned DEFAULT NULL,
  ADD COLUMN `id_paquete_producto` int(10) unsigned DEFAULT NULL AFTER `id_producto`,
  ADD COLUMN `descripcion` varchar(255) DEFAULT NULL AFTER `id_paquete_producto`,
  ADD COLUMN `unidad` varchar(30) DEFAULT NULL AFTER `descripcion`,
  ADD KEY `idx_cvm_paquete_producto` (`id_paquete_producto`),
  ADD CONSTRAINT `fk_cvm_paquete_producto` FOREIGN KEY (`id_paquete_producto`) REFERENCES `paquete_producto` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT `chk_cvm_origen` CHECK (`id_producto` IS NOT NULL OR `descripcion` IS NOT NULL);

ALTER TABLE `cotizacion_venta_oferta`
  ADD COLUMN `id_paquete` int(10) unsigned DEFAULT NULL AFTER `nota`,
  ADD COLUMN `paquete_parametros` text DEFAULT NULL AFTER `id_paquete`,
  ADD KEY `fk_cvo_paquete` (`id_paquete`),
  ADD CONSTRAINT `fk_cvo_paquete` FOREIGN KEY (`id_paquete`) REFERENCES `paquete` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;
