use votaciones
go


CREATE PROCEDURE dbo.VOT_insert_update_elecciones_proceso_acta
    @varPkActa INT OUTPUT,
    @varPkTipo INT,
    @varPkProceso INT,
    @varPkPartido INT,
    @varPkJrv INT,
    @varFechaHoraInicio DATETIME,
    @varFechaHoraFinalizacion DATETIME,
    @varCantidadPapeletasRecibidas INT,
    @varCantidadPapeletasSobrantes INT,
    @varCantidadPapeletasUtilizadas INT,
    @varCantidadVotantesCiudadanos INT,
    @varCantidadVotantesJrv INT,
    @varCantidadVotantesInformaticosElectorales INT,
    @varCantidadVotantesTotal INT,
    @varCantidadVotosEnBlanco INT,
    @varCantidadVotosNulos INT,
    @varCantidadVotosTotal INT,
    @varCantidadPapeletasValidas INT,
    @varCantidadPapeletasEnBlanco INT,
    @varCantidadPapeletasNulas INT,
    @varUrlFoto NVARCHAR(255),
    @varUsuario INT,
    @varOpc INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @existe INT;

    -- VALIDAR SI YA EXISTE
    SELECT @existe = COUNT(*)
    FROM elecciones_proceso_acta
    WHERE pk_proceso = @varPkProceso
        AND pk_partido = @varPkPartido
        AND pk_tipo = @varPkTipo
        AND pk_jrv = @varPkJrv
        AND estado <> 3
        AND (@varOpc = 1 OR pk_acta <> @varPkActa);

    IF @existe > 0
    BEGIN
        -- CAMPOS ADICIONALES
        DECLARE @acta_tipo_nombre NVARCHAR(200),
        @partido_nombre_abreviatura NVARCHAR(200);

        SELECT @acta_tipo_nombre = tipo.nombre
        FROM elecciones_proceso_acta_tipo tipo
        WHERE tipo.pk_tipo = @varPkTipo;

        SELECT @partido_nombre_abreviatura = CONCAT(partido.nombre, ' (', partido.abreviatura, ')')
        FROM partidos partido
        WHERE partido.pk_partido = @varPkPartido;

        SET @result = CONCAT('Esta Junta Receptora de Votos ya registró una "', @acta_tipo_nombre,'" para el partido "', @partido_nombre_abreviatura,'".');
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END

    IF @varOpc = 1 -- INSERTAR
    BEGIN
        INSERT INTO elecciones_proceso_acta
            (pk_tipo, pk_proceso, pk_partido, pk_jrv, fecha_hora_inicio, fecha_hora_finalizacion, cantidad_papeletas_recibidas,
             cantidad_papeletas_sobrantes, cantidad_papeletas_utilizadas, cantidad_votantes_ciudadanos, cantidad_votantes_jrv, cantidad_votantes_informaticos_electorales, cantidad_votantes_total,
             cantidad_votos_en_blanco, cantidad_votos_nulos, cantidad_votos_total, cantidad_papeletas_validas, cantidad_papeletas_en_blanco, cantidad_papeletas_nulas,
             url_foto, creado_por)
        VALUES
            (@varPkTipo, @varPkProceso, @varPkPartido, @varPkJrv, @varFechaHoraInicio, @varFechaHoraFinalizacion, @varCantidadPapeletasRecibidas,
             @varCantidadPapeletasSobrantes, @varCantidadPapeletasUtilizadas, @varCantidadVotantesCiudadanos, @varCantidadVotantesJrv, @varCantidadVotantesInformaticosElectorales, @varCantidadVotantesTotal,
             @varCantidadVotosEnBlanco, @varCantidadVotosNulos, @varCantidadVotosTotal, @varCantidadPapeletasValidas, @varCantidadPapeletasEnBlanco, @varCantidadPapeletasNulas,
             @varUrlFoto, @varUsuario);

        SET @varPkActa = SCOPE_IDENTITY();
        SET @save = 1;
        SET @result = 'Registro insertado correctamente';
    END
    ELSE IF @varOpc = 2 -- ACTUALIZAR
    BEGIN
        UPDATE elecciones_proceso_acta
        SET pk_tipo = @varPkTipo,
            pk_proceso = @varPkProceso,
            pk_partido = @varPkPartido,
            pk_jrv = @varPkJrv,
            fecha_hora_inicio = @varFechaHoraInicio,
            fecha_hora_finalizacion = @varFechaHoraFinalizacion,
            cantidad_papeletas_recibidas = @varCantidadPapeletasRecibidas,
            cantidad_papeletas_sobrantes = @varCantidadPapeletasSobrantes,
            cantidad_papeletas_utilizadas = @varCantidadPapeletasUtilizadas,
            cantidad_votantes_ciudadanos = @varCantidadVotantesCiudadanos,
            cantidad_votantes_jrv = @varCantidadVotantesJrv,
            cantidad_votantes_informaticos_electorales = @varCantidadVotantesInformaticosElectorales,
            cantidad_votantes_total = @varCantidadVotantesTotal,
            cantidad_votos_en_blanco = @varCantidadVotosEnBlanco,
            cantidad_votos_nulos = @varCantidadVotosNulos,
            cantidad_votos_total = @varCantidadVotosTotal,
            cantidad_papeletas_validas = @varCantidadPapeletasValidas,
            cantidad_papeletas_en_blanco = @varCantidadPapeletasEnBlanco,
            cantidad_papeletas_nulas = @varCantidadPapeletasNulas,
            url_foto = @varUrlFoto,
            modificado_por = @varUsuario,
            fecha_hora_modificado = GETDATE()
        WHERE pk_acta = @varPkActa;

        SET @save = 1;
        SET @result = 'Registro actualizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END

    SELECT @save AS 'save', @result AS result, @varPkActa AS pk;
END;
GO





DROP PROCEDURE IF EXISTS VOT_insert_update_elecciones_proceso_acta_tipo;
GO
CREATE PROCEDURE VOT_insert_update_elecciones_proceso_acta_tipo
    @varPkTipo INT OUTPUT,
    @varNombre NVARCHAR(100),
    @varUsuario INT,
    @varOpc INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @existe INT;

    -- MAYÚSCULAS
    SET @varNombre = UPPER(@varNombre);

    -- VALIDAR SI YA EXISTE
    SELECT @existe = COUNT(*)
    FROM elecciones_proceso_acta_tipo
    WHERE nombre = @varNombre
        AND estado <> 3
        AND (@varOpc = 1 OR pk_tipo <> @varPkTipo);

    IF @existe > 0
    BEGIN
        SET @result = 'El nombre del tipo de acta ya existe.';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END

    IF @varOpc = 1 -- INSERTAR
    BEGIN
        INSERT INTO elecciones_proceso_acta_tipo (nombre, creado_por)
        VALUES (@varNombre, @varUsuario);

        SET @varPkTipo = SCOPE_IDENTITY();
        SET @save = 1;
        SET @result = 'Registro insertado correctamente';
    END
    ELSE IF @varOpc = 2 -- ACTUALIZAR
    BEGIN
        UPDATE elecciones_proceso_acta_tipo
        SET nombre = @varNombre,
            modificado_por = @varUsuario,
            fecha_hora_modificado = GETDATE()
        WHERE pk_tipo = @varPkTipo;

        SET @save = 1;
        SET @result = 'Registro actualizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END

    SELECT @save AS 'save', @result AS result, @varPkTipo AS pk;
END;
GO


DROP PROCEDURE IF EXISTS VOT_insert_update_elecciones_proceso_acta_conteo;
GO
CREATE PROCEDURE VOT_insert_update_elecciones_proceso_acta_conteo
    @varPkConteo INT OUTPUT,
    @varPkActa INT,
    @varPkCandidato INT,
    @varCantidad INT,
    @varUsuario INT,
    @varOpc INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @existe INT;

    -- VALIDAR SI YA EXISTE
    SELECT @existe = COUNT(*)
    FROM elecciones_proceso_acta_conteo
    WHERE pk_acta = @varPkActa
        AND pk_candidato = @varPkCandidato
        AND estado <> 3
        AND (@varOpc = 1 OR pk_conteo <> @varPkConteo);

    IF @existe > 0
    BEGIN
        SET @result = 'Ya existe un conteo para ese candidato en la misma acta.';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END

    IF @varOpc = 1 -- INSERTAR
    BEGIN
        INSERT INTO elecciones_proceso_acta_conteo (pk_acta, pk_candidato, cantidad, creado_por)
        VALUES (@varPkActa, @varPkCandidato, @varCantidad, @varUsuario);

        SET @varPkConteo = SCOPE_IDENTITY();
        SET @save = 1;
        SET @result = 'Registro insertado correctamente';
    END
    ELSE IF @varOpc = 2 -- ACTUALIZAR
    BEGIN
        UPDATE elecciones_proceso_acta_conteo
        SET pk_acta = @varPkActa,
            pk_candidato = @varPkCandidato,
            cantidad = @varCantidad,
            modificado_por = @varUsuario,
            fecha_hora_modificado = GETDATE()
        WHERE pk_conteo = @varPkConteo;

        SET @save = 1;
        SET @result = 'Registro actualizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END

    SELECT @save AS 'save', @result AS result, @varPkConteo AS pk;
END;
GO


DROP PROCEDURE IF EXISTS VOT_insert_update_elecciones_proceso_acta_control;
GO
CREATE PROCEDURE VOT_insert_update_elecciones_proceso_acta_control
    @varPkControl INT OUTPUT,
    @varUsuario INT,
    @varPkTipo INT, -- Agregado pk_tipo
    @varPkProceso INT,
    @varPkPartido INT,
    @varPkJrv INT,
    @varEstadoControl INT, -- Cambié el nombre de estado_compartido por estado_control
    @varOpc INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @existe INT;

    -- VALIDAR SI YA EXISTE
    SELECT @existe = COUNT(*)
    FROM elecciones_proceso_acta_control
    WHERE pk_tipo = @varPkTipo
        AND pk_proceso = @varPkProceso
        AND pk_partido = @varPkPartido
        AND pk_jrv = @varPkJrv
        AND estado <> 3
        AND (@varOpc = 1 OR pk_control <> @varPkControl);

    IF @existe > 0
    BEGIN
        SET @result = 'El registro ya existe.';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END

    IF @varOpc = 1 -- INSERTAR
    BEGIN
        INSERT INTO elecciones_proceso_acta_control (pk_tipo, pk_proceso, pk_partido, pk_jrv, pk_user, estado_control, creado_por)
        VALUES (@varPkTipo, @varPkProceso, @varPkPartido, @varPkJrv, @varUsuario, @varEstadoControl, @varUsuario);

        SET @varPkControl = SCOPE_IDENTITY();
        SET @save = 1;
        SET @result = 'Registro insertado correctamente';
    END
    ELSE IF @varOpc = 2 -- ACTUALIZAR
    BEGIN
        UPDATE elecciones_proceso_acta_control
        SET pk_partido = @varPkPartido,
            pk_jrv = @varPkJrv,
            pk_user = @varUsuario,
            estado_control = @varEstadoControl,
            modificado_por = @varUsuario,
            fecha_hora_modificado = GETDATE()
        WHERE pk_control = @varPkControl AND pk_proceso = @varPkProceso AND pk_tipo = @varPkTipo;

        SET @save = 1;
        SET @result = 'Registro actualizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END

    SELECT @save AS 'save', @result AS result, @varPkControl AS pk;
END;
GO




DROP PROCEDURE IF EXISTS VOT_validar_elecciones_proceso_acta;
GO
CREATE PROCEDURE VOT_validar_elecciones_proceso_acta
    @varPkTipo INT,
    @varPkProceso INT,
    @varPkPartido INT,
    @varPkJrv INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @result NVARCHAR(200), @save INT = 1;
    DECLARE @existe INT;

    -- VALIDAR SI YA EXISTE EL ACTA
    SELECT @existe = COUNT(*)
    FROM elecciones_proceso_acta
    WHERE pk_proceso = @varPkProceso
        AND pk_partido = @varPkPartido
        AND pk_tipo = @varPkTipo
        AND pk_jrv = @varPkJrv
        AND estado <> 3;

    IF @existe > 0
    BEGIN
        SET @save = 0;
        SET @result = 'El acta ya existe para estos datos.';
    END
    ELSE
    BEGIN
        SET @result = 'El acta no existe y puede ser registrada.';
    END

    SELECT @save AS 'save', @result AS result;
END;
