-- modificar estructura de tablas para agregar campo estado y validar que solo sea posible ingresar dos valores 'Activo' he 'Inactivo'
ALTER TABLE area_indicadores
    ADD COLUMN estado ENUM('Activo', 'Inactivo');

ALTER TABLE categoria_indicadores
    ADD COLUMN estado ENUM('Activo', 'Inactivo');

ALTER TABLE subcategoria_indicadores
    ADD COLUMN estado ENUM('Activo', 'Inactivo');

ALTER TABLE presupuesto_indicadores
    ADD COLUMN estado ENUM('Activo', 'Inactivo');


-- modificar campos existentes que quedaron en null
UPDATE area_indicadores SET estado = 'Inactivo' WHERE estado IS NULL;
UPDATE categoria_indicadores SET estado = 'Inactivo' WHERE estado IS NULL;
UPDATE subcategoria_indicadores SET estado = 'Inactivo' WHERE estado IS NULL;
UPDATE presupuesto_indicadores SET estado = 'Inactivo' WHERE estado IS NULL;


-- modificar vista categoria area para que agregue solo los registros con categorias activas
CREATE OR REPLACE VIEW v_categoria_indicadores AS
SELECT DISTINCT
    c.id AS id,
    c.area AS area,
    a.nombre AS nombreArea,
    c.centroCosto AS centroCosto,
    c.nombre AS nombre,
    u.id AS usuario,
    u.nombre AS nombreUsuario,
    c.estado,
    c.createdAt AS createdAt,
    c.updatedAt AS updatedAt
FROM
    categoria_indicadores c
        JOIN
    usuarios u
    ON c.responsable = u.id
        JOIN
    area_indicadores a
    ON c.area = a.id

-- modificar vista subcategoria para
CREATE OR REPLACE VIEW v_subcategoria_indicadores AS
SELECT
    s.id AS id,
    s.categoria AS categoria,
    c.nombre AS nombreCategoria,
    a.id AS area,
    a.nombre AS nombreArea,
    s.nombre AS nombre,
    s.responsable AS responsable,
    u.nombre AS nombreResponsable,
    s.estado,
    s.createdAt AS createdAt,
    s.updatedAt AS updatedAt
FROM
    subcategoria_indicadores s
        JOIN
    categoria_indicadores c
    ON s.categoria = c.id
        JOIN
    area_indicadores a
    ON c.area = a.id
        JOIN
    usuarios u
    ON s.responsable = u.id

--
CREATE OR REPLACE VIEW v_usuario_subcategoria_indicadores AS
SELECT DISTINCT
    u.id AS id,
    u.nombre AS nombreUsuario,
    a.id AS area,
    a.nombre AS nombreArea,
    u.createdAt AS createdAt,
    u.updatedAt AS updatedAt
FROM
    usuarios u
        JOIN
    areas a
    ON u.area = a.id
        JOIN
    subcategoria_indicadores s
    ON s.responsable = u.id
WHERE
    u.id <> 1
ORDER BY
    u.nombre;

-- vista presupuesto indicadores
CREATE OR REPLACE VIEW v_presupuesto_indicadores AS
SELECT
    p.id AS id,
    a.id AS areaIndicador,
    a.nombre AS nombreAreaIndicador,
    p.categoriaIndicador AS categoriaIndicador,
    c.nombre AS nombreCategoriaIndicadores,
    c.responsable AS responsableCategoria,
    p.subcategoriaIndicador AS subcategoriaIndicador,
    s.nombre AS nombreSubcategoriaIndicadores,
    s.responsable AS responsableSubcategoria,
    u.nombre AS nombreResponsableSubcategoria,
    ar.id AS areaUsuario,
    ar.nombre AS nombreAreaUsuario,
    p.referenciaYearAnterior AS referenciaYearAnterior,
    p.year AS year,
    p.enero AS enero,
    p.eneroReal AS eneroReal,
    p.febrero AS febrero,
    p.febreroReal AS febreroReal,
    p.marzo AS marzo,
    p.marzoReal AS marzoReal,
    p.abril AS abril,
    p.abrilReal AS abrilReal,
    p.mayo AS mayo,
    p.mayoReal AS mayoReal,
    p.junio AS junio,
    p.junioReal AS junioReal,
    p.julio AS julio,
    p.julioReal AS julioReal,
    p.agosto AS agosto,
    p.agostoReal AS agostoReal,
    p.septiembre AS septiembre,
    p.septiembreReal AS septiembreReal,
    p.octubre AS octubre,
    p.octubreReal AS octubreReal,
    p.noviembre AS noviembre,
    p.noviembreReal AS noviembreReal,
    p.diciembre AS diciembre,
    p.diciembreReal AS diciembreReal,
    p.metaAnual AS metaAnual,
    p.valorAcumulado AS valorAcumulado,
    p.tipoDato AS tipoDato,
    p.estado,
    p.createdAt AS createdAt,
    p.updatedAt AS updatedAt
FROM
    presupuesto_indicadores p
    JOIN
    categoria_indicadores c
ON p.categoriaIndicador = c.id
    JOIN
    subcategoria_indicadores s
    ON p.subcategoriaIndicador = s.id
    JOIN
    usuarios u
    ON s.responsable = u.id
    JOIN
    area_indicadores a
    ON c.area = a.id
    JOIN
    areas ar
    ON u.area = ar.id
ORDER BY
    a.id,
    c.id,
    s.id;
