Sesión #9

 Duración 4 horas 2:30pm - 6:30pm

Se trabajó en la funcionalidad de modificar empleado. Ya que ayer se trabajó en la forma de mostrar los datos, hoy se concentró el trabajo en capturar esos datos y llevarlos al SP de modificarEmpleado. El mismo es completamente funcional y muestra los cambios realizados en la bitácora de manera correcta. Ya sea que no se pudo realizar por algún conlfito en nombre o documento de identidad o que sí se realizó la modificación.

ALTER PROCEDURE ModificarEmpleadoPorDocumento
    @ValorDocumentoIdentidadAnterior VARCHAR(128),
    @ValorDocumentoIdentidadNuevo VARCHAR(128),
    @NombreAnterior VARCHAR(128),
    @NombreNuevo VARCHAR(128),
    @PuestoNuevo VARCHAR(128),
    @SaldoVacaciones INT,
    @Username VARCHAR(128),
    @PostInIP VARCHAR(64),
    @OutResultCode INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        SET @OutResultCode = 0;

        IF @ValorDocumentoIdentidadAnterior <> @ValorDocumentoIdentidadNuevo AND
           EXISTS (SELECT 1 FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidadNuevo)
        BEGIN
            SET @OutResultCode = 50006;
        END

        IF @NombreAnterior <> @NombreNuevo AND
           EXISTS (SELECT 1 FROM dbo.Empleado WHERE Nombre = @NombreNuevo AND Nombre <> @NombreAnterior)
        BEGIN
            SET @OutResultCode = 50007;
        END

        IF @OutResultCode = 0
        BEGIN
            DECLARE @IdPuestoNuevo INT;
            SELECT @IdPuestoNuevo = Id FROM dbo.Puesto WHERE Nombre = @PuestoNuevo;

            DECLARE @PuestoAnterior VARCHAR(128), @SaldoVacacionesAnterior INT;
            SELECT
                @PuestoAnterior = P.Nombre,
                @SaldoVacacionesAnterior = E.SaldoVacaciones
            FROM dbo.Empleado E
            INNER JOIN dbo.Puesto P ON E.IdPuesto = P.Id
            WHERE E.ValorDocumentoIdentidad = @ValorDocumentoIdentidadAnterior;

            BEGIN TRANSACTION;

            UPDATE dbo.Empleado
            SET
                ValorDocumentoIdentidad = @ValorDocumentoIdentidadNuevo,
                Nombre = @NombreNuevo,
                IdPuesto = @IdPuestoNuevo
            WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidadAnterior;

            INSERT INTO dbo.bitacoraEvento (
                IdTipoEvento, IdUsuario, Fecha, Descripcion, PostInIP, PostTime
            ) VALUES (
                8,
                (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                GETDATE(),
                CONCAT('Modificación de empleado: [ValorDocumentoAntes: ', @ValorDocumentoIdentidadAnterior,
                    ', NombreAntes: ', @NombreAnterior,
                    ', PuestoAntes: ', @PuestoAnterior,
                    ', ValorDocumentoDespues: ', @ValorDocumentoIdentidadNuevo,
                    ', NombreDespues: ', @NombreNuevo,
                    ', PuestoDespues: ', @PuestoNuevo,
                    ', SaldoVacaciones: ', @SaldoVacaciones, ']'),
                @PostInIP,
                GETDATE()
            );

            COMMIT TRANSACTION;
        END
        ELSE
        BEGIN
            INSERT INTO dbo.bitacoraEvento (
                IdTipoEvento, IdUsuario, Fecha, Descripcion, PostInIP, PostTime
            ) VALUES (
                7,
                (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                GETDATE(),
                CONCAT('Error en modificación de empleado: ', @OutResultCode,
                    ' [ValorDocumentoAntes: ', @ValorDocumentoIdentidadAnterior,
                    ', NombreAntes: ', @NombreAnterior,
                    ', PuestoAntes: ', @PuestoAnterior,
                    ', ValorDocumentoDespues: ', @ValorDocumentoIdentidadNuevo,
                    ', NombreDespues: ', @NombreNuevo,
                    ', PuestoDespues: ', @PuestoNuevo,
                    ', SaldoVacaciones: ', @SaldoVacaciones, ']'),
                @PostInIP,
                GETDATE()
            );

        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()
        );
        ROLLBACK TRANSACTION;

        SET @OutResultCode = 50008;
    END CATCH;

    SET NOCOUNT OFF;
END;
GO

Se realizaron modificaciones en el SP de listar y en los filtros para que solo muestren los Empleados que son activos. Esto ya que no se había notado en la descripción de la tarea que solo estos se debían mostrar y además el borrado lógico se realiza sobre este dato.

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;
ALTER PROCEDURE GetFiltroEmpleadosNombre
    @nombre VARCHAR(64),
    @Username VARCHAR(128),
    @PostInIP VARCHAR(64),
    @PostTime DATETIME
AS
BEGIN
    SET NOCOUNT ON;
    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.Nombre LIKE '%' + @nombre + '%' AND E.EsActivo = 1
    ORDER BY E.Nombre ASC;
    BEGIN TRANSACTION;
    INSERT INTO dbo.bitacoraEvento(
        IdTipoEvento,
        IdUsuario,
        Fecha,
        Descripcion,
        PostInIP,
        PostTime
    ) VALUES (
        11,
        (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
        GETDATE(),
        @nombre,
        @PostInIP,
        @PostTime
    );
    COMMIT TRANSACTION;
END
GO

ALTER PROCEDURE dbo.filtroEmpDoc
    @valorDocumento int,
    @Username VARCHAR(128),
    @PostInIP VARCHAR(64),
    @PostTime DATETIME
AS
BEGIN
    SET NOCOUNT ON;
    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 CAST(ValorDocumentoIdentidad AS VARCHAR(20)) LIKE '%' + CAST(@valorDocumento AS VARCHAR(20)) + '%' AND E.EsActivo = 1
    ORDER BY nombre ASC;
    BEGIN TRANSACTION;
    INSERT INTO dbo.bitacoraEvento(
        IdTipoEvento,
        IdUsuario,
        Fecha,
        Descripcion,
        PostInIP,
        PostTime
    ) VALUES (
        12,
        (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
        GETDATE(),
        @valorDocumento,
        @PostInIP,
        @PostTime
    );
    COMMIT TRANSACTION;
END
GO







Comentarios