-- ============================================================
--  Migración 2026-10-15_02 · IVA según tipo de cliente y transporte
-- ------------------------------------------------------------
--  IVA (13 %), según el cliente de la solicitud:
--    - Empresa PÚBLICA: el 13 % va DENTRO del costo de los materiales
--      (un material de $20 cuesta $22.60 para cotizar); el precio del ítem
--      se calcula sobre ese costo y al cliente NO se le muestra IVA aparte.
--    - Empresa privada o persona natural: los precios van sin IVA y al
--      total se le SUMA el 13 % como IVA.
--  cotizacion_venta_oferta.iva: monto del IVA sumado (0 para pública).
--    subtotal = suma de los precios de los ítems; total = subtotal + iva.
--  paquete_producto.es_transporte: marca los conceptos de transporte
--    (para el desglose de "Valor general" en Presupuesto).
--  Se recalculan las ofertas todavía abiertas (borrador / lista); las ya
--  seleccionadas o descartadas conservan sus valores.
-- ============================================================
USE tinsa_db;

ALTER TABLE `paquete_producto`
  ADD COLUMN `es_transporte` tinyint(1) NOT NULL DEFAULT 0 AFTER `es_mano_obra`;
UPDATE paquete_producto SET es_transporte = 1 WHERE nombre LIKE 'Transporte%';

ALTER TABLE `cotizacion_venta_oferta`
  ADD COLUMN `iva` decimal(12,2) NOT NULL DEFAULT 0.00 AFTER `subtotal`;

-- Ofertas abiertas: precio de cada ítem con el costo de su tipo de cliente
UPDATE cotizacion_venta_oferta_item i
  JOIN cotizacion_venta_oferta o ON o.id = i.id_oferta
  JOIN cotizacion_venta cv       ON cv.id = o.id_cotizacion_venta
  JOIN cliente c                 ON c.id = cv.id_cliente
   SET i.precio = IF(i.margen IS NULL, 0,
                     ROUND(i.costo_total * IF(c.tipo_cliente = 'juridico' AND c.tipo_empresa = 'publica', 1.13, 1) / (1 - i.margen / 100), 2))
 WHERE o.estado IN ('borrador', 'lista');

UPDATE cotizacion_venta_oferta o
  JOIN cotizacion_venta cv ON cv.id = o.id_cotizacion_venta
  JOIN cliente c           ON c.id = cv.id_cliente
   SET o.subtotal = (SELECT COALESCE(SUM(i.precio), 0) FROM cotizacion_venta_oferta_item i WHERE i.id_oferta = o.id)
 WHERE o.estado IN ('borrador', 'lista');

UPDATE cotizacion_venta_oferta o
  JOIN cotizacion_venta cv ON cv.id = o.id_cotizacion_venta
  JOIN cliente c           ON c.id = cv.id_cliente
   SET o.iva   = IF(c.tipo_cliente = 'juridico' AND c.tipo_empresa = 'publica', 0, ROUND(o.subtotal * 0.13, 2)),
       o.total = o.subtotal + IF(c.tipo_cliente = 'juridico' AND c.tipo_empresa = 'publica', 0, ROUND(o.subtotal * 0.13, 2))
 WHERE o.estado IN ('borrador', 'lista');
