USE testing_votaciones
GO


DROP PROCEDURE IF EXISTS dbo.CAT_get_regiones;
GO

CREATE PROCEDURE dbo.CAT_get_regiones
    @varPK INT,
    @varPkRegionMayor INT,
    @pkTipo INT, -- Parámetro añadido para filtrar por pk_tipo
    @opc INT
AS
BEGIN
    SELECT
        region.*,
        tipo.nombre AS pk_tipo_nombre,
        mayor.nombre AS pk_region_mayor_nombre,
        mayor_tipo.nombre AS pk_region_mayor_tipo_nombre
    FROM catalogo_regiones region
    LEFT JOIN catalogo_regiones_tipo tipo ON tipo.pk_tipo = region.pk_tipo
    LEFT JOIN catalogo_regiones mayor ON mayor.pk_region = region.pk_region_mayor
    LEFT JOIN catalogo_regiones_tipo mayor_tipo ON mayor_tipo.pk_tipo = mayor.pk_tipo
    WHERE (@varPK = 0 OR region.pk_region = @varPK)
    AND (@varPkRegionMayor IS NULL OR region.pk_region_mayor = @varPkRegionMayor)
    AND (@pkTipo IS NULL OR region.pk_tipo = @pkTipo) -- Filtro añadido para pk_tipo
    AND (@opc = 0 OR region.estado <> 3);
END;
GO


DROP PROCEDURE IF EXISTS CAT_get_regiones_tipo;
GO
CREATE PROCEDURE CAT_get_regiones_tipo
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT * FROM catalogo_regiones_tipo
    WHERE (@varPK = 0 OR pk_tipo = @varPK)
    AND (@opc = 0 OR estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_partidos;
GO
CREATE PROCEDURE VOT_get_partidos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    partido.*,
    region.nombre AS pk_region_nombre,
    region_tipo.nombre AS pk_region_pk_tipo_nombre
    FROM partidos partido
    LEFT JOIN catalogo_regiones region ON region.pk_region = partido.pk_region
    LEFT JOIN catalogo_regiones_tipo region_tipo ON region_tipo.pk_tipo = region.pk_tipo
    WHERE (@varPK = 0 OR partido.pk_partido = @varPK)
    AND (@opc = 0 OR partido.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_movimientos;
GO
CREATE PROCEDURE VOT_get_movimientos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    movimiento.*,
    partido.nombre AS pk_partido_nombre,
    partido.abreviatura AS pk_partido_abreviatura
    FROM movimientos movimiento
    LEFT JOIN partidos partido ON partido.pk_partido = movimiento.pk_partido
    WHERE (@varPK = 0 OR movimiento.pk_movimiento = @varPK)
    AND (@opc = 0 OR movimiento.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_candidatos;
GO
CREATE PROCEDURE VOT_get_candidatos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    candidato.*,
    tipo.nombre AS pk_tipo_nombre,
    region.nombre AS pk_region_nombre,
    region_tipo.nombre AS pk_region_pk_tipo_nombre,
    movimiento.nombre AS pk_movimiento_nombre,
    movimiento_partido.nombre AS pk_movimiento_pk_partido_nombre,
    movimiento_partido.abreviatura AS pk_movimiento_pk_partido_abreviatura
    FROM candidatos candidato
    LEFT JOIN candidatos_tipo tipo ON tipo.pk_tipo = candidato.pk_tipo
    LEFT JOIN catalogo_regiones region ON region.pk_region = candidato.pk_region
    LEFT JOIN catalogo_regiones_tipo region_tipo ON region_tipo.pk_tipo = region.pk_tipo
    LEFT JOIN movimientos movimiento ON movimiento.pk_movimiento = candidato.pk_movimiento
    LEFT JOIN partidos movimiento_partido ON movimiento_partido.pk_partido = movimiento.pk_partido
    WHERE (@varPK = 0 OR candidato.pk_candidato = @varPK)
    AND (@opc = 0 OR candidato.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_candidatos_tipo;
GO
CREATE PROCEDURE VOT_get_candidatos_tipo
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT * FROM candidatos_tipo
    WHERE (@varPK = 0 OR pk_tipo = @varPK)
    AND (@opc = 0 OR estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_elecciones;
GO
CREATE PROCEDURE VOT_get_elecciones
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    eleccion.*,
    region.nombre AS pk_region_nombre,
    region_tipo.nombre AS pk_region_pk_tipo_nombre,
    tipo.nombre AS pk_tipo_nombre
    FROM elecciones eleccion
    LEFT JOIN elecciones_tipo tipo ON tipo.pk_tipo = eleccion.pk_tipo
    LEFT JOIN catalogo_regiones region ON region.pk_region = eleccion.pk_region
    LEFT JOIN catalogo_regiones_tipo region_tipo ON region_tipo.pk_tipo = region.pk_tipo
    WHERE (@varPK = 0 OR eleccion.pk_eleccion = @varPK)
    AND (@opc = 0 OR eleccion.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_elecciones_tipo;
GO
CREATE PROCEDURE VOT_get_elecciones_tipo
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT * FROM elecciones_tipo
    WHERE (@varPK = 0 OR pk_tipo = @varPK)
    AND (@opc = 0 OR estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_elecciones_candidatos_x_region;
GO
CREATE PROCEDURE VOT_get_elecciones_candidatos_x_region
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    configuracion.*,
    eleccion_tipo.nombre AS pk_eleccion_pk_tipo_nombre,
    eleccion_region.nombre AS pk_eleccion_pk_region_nombre,
    region.nombre AS pk_region_nombre,
    region_tipo.nombre AS pk_region_pk_tipo_nombre,
    candidato_tipo.nombre AS pk_candidato_pk_tipo_nombre
    FROM elecciones_candidatos_x_region configuracion
    LEFT JOIN elecciones eleccion ON eleccion.pk_eleccion = configuracion.pk_eleccion
    LEFT JOIN elecciones_tipo eleccion_tipo ON eleccion_tipo.pk_tipo = eleccion.pk_tipo
    LEFT JOIN catalogo_regiones eleccion_region ON eleccion_region.pk_region = eleccion.pk_region
    LEFT JOIN catalogo_regiones region ON region.pk_region = configuracion.pk_region
    LEFT JOIN catalogo_regiones_tipo region_tipo ON region_tipo.pk_tipo = region.pk_tipo
    LEFT JOIN candidatos_tipo candidato_tipo ON candidato_tipo.pk_tipo = configuracion.pk_candidato_tipo
    WHERE (@varPK = 0 OR configuracion.pk_configuracion = @varPK)
    AND (@opc = 0 OR configuracion.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_elecciones_proceso;
GO
CREATE PROCEDURE VOT_get_elecciones_proceso
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    proceso.*,
    UPPER(
        CASE proceso.mes
            WHEN 1 THEN 'Enero'
            WHEN 2 THEN 'Febrero'
            WHEN 3 THEN 'Marzo'
            WHEN 4 THEN 'Abril'
            WHEN 5 THEN 'Mayo'
            WHEN 6 THEN 'Junio'
            WHEN 7 THEN 'Julio'
            WHEN 8 THEN 'Agosto'
            WHEN 9 THEN 'Septiembre'
            WHEN 10 THEN 'Octubre'
            WHEN 11 THEN 'Noviembre'
            WHEN 12 THEN 'Diciembre'
            ELSE 'Desconocido'
        END
    ) AS mes_verbose,
    eleccion_tipo.nombre AS pk_eleccion_pk_tipo_nombre,
    region.nombre AS pk_eleccion_pk_region_nombre
    FROM elecciones_proceso proceso
    LEFT JOIN elecciones eleccion ON eleccion.pk_eleccion = proceso.pk_eleccion
    LEFT JOIN elecciones_tipo eleccion_tipo ON eleccion_tipo.pk_tipo = eleccion.pk_tipo
    LEFT JOIN catalogo_regiones region ON region.pk_region = eleccion.pk_region
    WHERE (@varPK = 0 OR proceso.pk_proceso = @varPK)
    AND (@opc = 0 OR proceso.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS VOT_get_elecciones_proceso_acta;
GO
CREATE PROCEDURE VOT_get_elecciones_proceso_acta
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT
    acta.*,
    proceso_eleccion_tipo.nombre AS pk_proceso_pk_eleccion_pk_tipo_nombre,
    proceso_eleccion_region.nombre AS pk_proceso_pk_eleccion_pk_region_nombre,
    proceso.anio AS pk_proceso_anio,
    candidato.nombres AS pk_candidato_nombres,
    candidato.apellidos AS pk_candidato_apellidos,
    candidato_tipo.nombre AS pk_candidato_pk_tipo_nombre,
    candidato_region.nombre AS pk_candidato_pk_region_nombre,
    candidato_region_tipo.nombre AS pk_candidato_pk_region_pk_tipo_nombre
    FROM elecciones_proceso_acta acta
    LEFT JOIN elecciones_proceso proceso ON proceso.pk_proceso = acta.pk_proceso
    LEFT JOIN elecciones eleccion ON eleccion.pk_eleccion = proceso.pk_eleccion
    LEFT JOIN elecciones_tipo proceso_eleccion_tipo ON proceso_eleccion_tipo.pk_tipo = eleccion.pk_tipo
    LEFT JOIN catalogo_regiones proceso_eleccion_region ON proceso_eleccion_region.pk_region = eleccion.pk_region
    LEFT JOIN candidatos candidato ON candidato.pk_candidato = acta.pk_candidato
    LEFT JOIN candidatos_tipo candidato_tipo ON candidato_tipo.pk_tipo = candidato.pk_tipo
    LEFT JOIN catalogo_regiones candidato_region ON candidato_region.pk_region = candidato.pk_region
    LEFT JOIN catalogo_regiones_tipo candidato_region_tipo ON candidato_region_tipo.pk_tipo = candidato_region.pk_tipo

    WHERE (@varPK = 0 OR acta.pk_acta = @varPK)
    AND (@opc = 0 OR acta.estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS CAT_get_sexos;
GO
CREATE PROCEDURE CAT_get_sexos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT * FROM catalogo_sexos
    WHERE (@varPK = 0 OR pk_sexo = @varPK)
    AND (@opc = 0 OR estado <> 3);
END;
GO

DROP PROCEDURE IF EXISTS CAT_get_nacionalidades;
GO
CREATE PROCEDURE CAT_get_nacionalidades
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT * FROM catalogo_nacionalidades
    WHERE (@varPK = 0 OR pk_nacionalidad = @varPK)
    AND (@opc = 0 OR estado <> 3);
END;
GO
