-- ============================================================
--  Migración 2026-10-15_01 · Ítems con cantidad, instalación y mano de obra
-- ------------------------------------------------------------
--  Rediseño de la oferta en Presupuesto (pestañas Información general /
--  Documentos / Valor general; ítems que se editan en el cotizador
--  automático o manual).
--  cotizacion_venta_oferta_item:
--    descripcion           detalle del ítem (opcional).
--    cantidad, unidad      p. ej. 120 m² (lo que se le cotiza al cliente).
--    incluye_instalacion   1 = el ítem DEBE llevar mano de obra con valor;
--                          0 = NO puede llevar mano de obra.
--  cotizacion_venta_material.origen:
--    paquete  la calculó el paquete del ítem (se rehace al editar el ítem).
--    extra    la agregó el cotizador a mano (se conserva al editar).
--  paquete_producto.es_mano_obra: marca en la lista de costos los
--    conceptos de mano de obra / instalación.
--  Permiso especial nuevo "supervisor_presupuesto": modifica directamente
--    cantidades y costos de los materiales (predefinido en Administrador).
-- ============================================================
USE tinsa_db;

ALTER TABLE `paquete_producto`
  ADD COLUMN `es_mano_obra` tinyint(1) NOT NULL DEFAULT 0 AFTER `unidad`;
UPDATE paquete_producto SET es_mano_obra = 1 WHERE nombre LIKE 'Mano de obra%' OR nombre LIKE 'Instalaci%';

ALTER TABLE `cotizacion_venta_oferta_item`
  ADD COLUMN `descripcion` text DEFAULT NULL AFTER `titulo`,
  ADD COLUMN `cantidad` decimal(12,4) NOT NULL DEFAULT 1.0000 AFTER `descripcion`,
  ADD COLUMN `unidad` varchar(30) DEFAULT NULL AFTER `cantidad`,
  ADD COLUMN `incluye_instalacion` tinyint(1) DEFAULT NULL AFTER `unidad`;

ALTER TABLE `cotizacion_venta_material`
  ADD COLUMN `origen` enum('paquete','extra') NOT NULL DEFAULT 'extra' AFTER `id_item`;

UPDATE cotizacion_venta_material m
  JOIN cotizacion_venta_oferta_item i ON i.id = m.id_item
   SET m.origen = 'paquete'
 WHERE i.id_paquete IS NOT NULL;

-- Ítems existentes: incluyen instalación si ya traen mano de obra con valor
UPDATE cotizacion_venta_oferta_item i
   SET i.incluye_instalacion = EXISTS (
         SELECT 1 FROM cotizacion_venta_material m
           JOIN paquete_producto pp ON pp.id = m.id_paquete_producto
          WHERE m.id_item = i.id AND pp.es_mano_obra = 1 AND m.subtotal_costo > 0);

INSERT IGNORE INTO rol_permiso_especial (id_rol, clave)
SELECT id, 'supervisor_presupuesto' FROM roles WHERE nombre = 'Administrador';
