-- =====================================================
-- SQL PARA GUÍAS DE COMPRA
-- Sistema Kardex
-- Ejecutar en phpMyAdmin o MySQL
-- =====================================================

-- Tabla principal de guías de compra
CREATE TABLE IF NOT EXISTS guias_compra (
    id_guia_compra INT AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(20) NOT NULL UNIQUE,
    id_proveedor INT NOT NULL,
    id_almacen INT NOT NULL,
    fecha_emision DATE NOT NULL,
    documento_referencia VARCHAR(50) NULL COMMENT 'FACTURA, BOLETA, GUIA_REMISION, ORDEN_COMPRA',
    serie_referencia VARCHAR(10) NULL,
    numero_referencia VARCHAR(20) NULL,
    subtotal DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    igv DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    observaciones TEXT NULL,
    estado_aprobacion ENUM('PENDIENTE', 'APROBADO', 'RECHAZADO') DEFAULT 'PENDIENTE',
    motivo_rechazo TEXT NULL,
    id_usuario_crea INT NOT NULL,
    id_usuario_aprueba INT NULL,
    fecha_aprobacion DATETIME NULL,
    id_ingreso INT NULL COMMENT 'ID del ingreso generado si fue aprobado',
    estado TINYINT(1) DEFAULT 1,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_modificacion TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_codigo (codigo),
    INDEX idx_proveedor (id_proveedor),
    INDEX idx_estado_aprobacion (estado_aprobacion),
    INDEX idx_fecha (fecha_emision),
    
    FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor),
    FOREIGN KEY (id_almacen) REFERENCES almacenes(id_almacen),
    FOREIGN KEY (id_usuario_crea) REFERENCES usuarios(id_usuario),
    FOREIGN KEY (id_usuario_aprueba) REFERENCES usuarios(id_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Tabla de detalle de guías de compra
CREATE TABLE IF NOT EXISTS guias_compra_detalle (
    id_guia_detalle INT AUTO_INCREMENT PRIMARY KEY,
    id_guia_compra INT NOT NULL,
    id_producto INT NOT NULL,
    cantidad DECIMAL(12,4) NOT NULL,
    precio_unitario DECIMAL(12,4) NOT NULL,
    subtotal DECIMAL(12,2) NOT NULL,
    igv DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total DECIMAL(12,2) NOT NULL,
    
    INDEX idx_guia (id_guia_compra),
    INDEX idx_producto (id_producto),
    
    FOREIGN KEY (id_guia_compra) REFERENCES guias_compra(id_guia_compra) ON DELETE CASCADE,
    FOREIGN KEY (id_producto) REFERENCES productos(id_producto)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- PERMISOS PARA EL MÓDULO DE GUÍAS DE COMPRA
-- =====================================================
INSERT INTO permisos (nombre, descripcion, id_modulo) VALUES
('guias_compra_listar', 'Ver listado de guías de compra', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1)),
('guias_compra_crear', 'Crear guías de compra', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1)),
('guias_compra_editar', 'Editar guías de compra pendientes', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1)),
('guias_compra_aprobar', 'Aprobar/Rechazar guías de compra', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1)),
('guias_compra_eliminar', 'Eliminar guías de compra', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1)),
('guias_compra_convertir', 'Convertir guía aprobada en ingreso', (SELECT id_modulo FROM modulos WHERE nombre = 'Ingresos' LIMIT 1));

-- Asignar permisos al rol Administrador (id_rol = 1)
INSERT INTO rol_permiso (id_rol, id_permiso)
SELECT 1, id_permiso FROM permisos WHERE nombre LIKE 'guias_compra_%';


-- =====================================================
-- VERIFICAR CREACIÓN
-- =====================================================
SELECT 'Tablas creadas:' AS mensaje;
SHOW TABLES LIKE '%guia%';

SELECT 'Permisos creados:' AS mensaje;
SELECT * FROM permisos WHERE nombre LIKE 'guias_compra_%';
