Sesión #10

 Duración 2horas: 10pm - 12mn

Se creó el SP de eliminar Empleado, el mismo funciona adecuadamente y trabaja realizando las dos entradas a la bitácora, cuando se confirma la eliminación y cuando no. Esto mediante el parámetro de confirmación, si es un 0, significa que el usuario canceló la operación pero si es un 1, fue que la aceptó y se realizó el borrado lógico en la BD

ALTER PROCEDURE [dbo].[IntentoBorrado]
    @ValorDocumentoIdentidad VARCHAR(128),
    @Username VARCHAR(128),
    @PostInIP VARCHAR(64),
    @Confirmación INT,
    @OutResultCode INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        DECLARE @NombreEmpleado VARCHAR(128);
        DECLARE @PuestoEmpleado VARCHAR(128);
        DECLARE @SaldoVacaciones INT;


        IF EXISTS (SELECT 1 FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad)

        SELECT
                @NombreEmpleado = E.Nombre,
                @PuestoEmpleado = P.Nombre,
                @SaldoVacaciones = E.SaldoVacaciones
        FROM dbo.Empleado E
        INNER JOIN dbo.Puesto P ON E.IdPuesto = P.Id
        WHERE E.ValorDocumentoIdentidad = @ValorDocumentoIdentidad;        

        BEGIN
            IF @Confirmación = 0
                BEGIN
                    INSERT INTO dbo.bitacoraEvento(
                        IdTipoEvento,
                        IdUsuario,
                        Fecha,
                        Descripcion,
                        PostInIP,
                        PostTime
                    ) VALUES (
                        8,
                        (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                        GETDATE(),
                        CONCAT('Intento de borrado: [ValorDocumento: ', @ValorDocumentoIdentidad,                             ', Nombre: ', @NombreEmpleado,
                        ', Puesto: ', @PuestoEmpleado,
                        ', SaldoVacaciones: ', @SaldoVacaciones, ']'),
                        @PostInIP,
                        GETDATE()
                    );
                END
        ELSE
            BEGIN
                UPDATE dbo.Empleado
                SET EsActivo = 0
                WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad;
                SET @OutResultCode = 0;


                INSERT INTO dbo.bitacoraEvento(
                    IdTipoEvento,
                    IdUsuario,
                    Fecha,
                    Descripcion,
                    PostInIP,
                    PostTime
                ) VALUES (
                    9,
                    (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                    GETDATE(),
                    CONCAT('Borrado: [ValorDocumento: ', @ValorDocumentoIdentidad,
                    ', Nombre: ', @NombreEmpleado,
                    ', Puesto: ', @PuestoEmpleado,
                    ', SaldoVacaciones: ', @SaldoVacaciones, ']'),
                    @PostInIP,
                    GETDATE()
                );
            END
        END
    END TRY
    BEGIN CATCH
    INSERT INTO dbo.DBErrors VALUES (
            SUSER_SNAME(),
            ERROR_NUMBER(),
            ERROR_STATE(),
            ERROR_SEVERITY(),
            ERROR_LINE(),
            ERROR_PROCEDURE(),
            ERROR_MESSAGE(),
            GETDATE()
        );
    END CATCH
    SET NOCOUNT OFF;
END
GO

También se corrigió un pequeño error que mostraba los Empleados aunque tuvieran el campo EsActivo en 0, se corrigió cambiando de posición el lugar donde se hacía la verifiación de este campo.

ALTER PROCEDURE [dbo].[ListarEmpleado]
    @OutResulTCode INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
   
        SET @OutResulTCode = 0;

        SELECT E.[Id]  
               , E.[ValorDocumentoIdentidad]
               , E.[Nombre]
               , P.[Nombre] AS Puesto
               , E.[FechaContratacion]
               , E.[SaldoVacaciones]
               , E.[EsActivo]
        FROM dbo.Empleado E
        INNER JOIN dbo.Puesto P ON E.IdPuesto = P.Id
        WHERE E.EsActivo = 1
        ORDER BY E.Nombre;

    END TRY
    BEGIN CATCH
        INSERT INTO dbo.DBErrors VALUES (
            SUSER_SNAME(),
            ERROR_NUMBER(),
            ERROR_STATE(),
            ERROR_SEVERITY(),
            ERROR_LINE(),
            ERROR_PROCEDURE(),
            ERROR_MESSAGE(),
            GETDATE()
        );

        SET @OutResulTCode = 50008;
    END CATCH;

    SET NOCOUNT OFF;
END;



Comentarios

Entradas populares de este blog

Sesión #9