Sesión #13

 Duración 2 horas 15 minutos 3:30pm - 5:45pm

Se terminó con las funcionalidades del proyecto con la realización del Insertar Movimiento. EL mismo contiene el SP que funciona recibiendo el Documento de identidad del empleado junto con el monto. Primero realiza la verificación que el movimiento es posible si el monto es menor al saldo actual, posteriormente realiza los cálculos de cual sería el nuevo saldo y esto es añadido a la bitacora. Posteriormente se realiza el update de el saldo en el Empleado y por ultimo se retrona el out resulto code.

CREATE PROCEDURE [dbo].[InsertarMovimiento]
    @ValorDocumentoIdentidad VARCHAR(128),
    @TipoMovimiento VARCHAR(128),
    @Monto INT,
    @Username VARCHAR(128),
    @PostInIP VARCHAR(64),
    @OutResultCode INT OUTPUT
AS
BEGIN
    DECLARE @NuevoSaldo INT;
    DECLARE @CopiaMonto INT;
    SET NOCOUNT ON;

    BEGIN TRY

    SET @CopiaMonto = @Monto;

    SELECT @NuevoSaldo = SaldoVacaciones FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad;

    SET @NuevoSaldo = @NuevoSaldo +
                     CASE
                         WHEN (SELECT TipoAccion FROM dbo.TipoMovimiento WHERE Nombre = @TipoMovimiento) = 'Credito' THEN @Monto
                         WHEN (SELECT TipoAccion FROM dbo.TipoMovimiento WHERE Nombre = @TipoMovimiento) = 'Debito' THEN -@Monto
                         ELSE 0
                     END;
                   
    IF @NuevoSaldo < 0
    BEGIN
        SET @OutResultCode = 50011;
    END
    ELSE
    BEGIN
        UPDATE dbo.Empleado
        SET SaldoVacaciones = @NuevoSaldo
        WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad;
        INSERT INTO dbo.Movimiento (IdEmpleado, IdTipoMovimiento, Fecha,
        Monto, NuevoSaldo, IdPostByUser, PostInIP, PostTime)
        VALUES ((SELECT Id FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad),
                (SELECT Id FROM dbo.TipoMovimiento WHERE Nombre = @TipoMovimiento),
                GETDATE(),
                @CopiaMonto,
                @NuevoSaldo,
                (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                @PostInIP,
                GETDATE());
        SET @OutResultCode = 0;
    END
   
    IF @OutResultCode = 0
    BEGIN
        INSERT INTO dbo.bitacoraEvento(
                IdTipoEvento,
                IdUsuario,
                Fecha,
                Descripcion,
                PostInIP,
                PostTime
            ) VALUES (
                14,
                (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                GETDATE(),
                CONCAT('Insersión de movimiento, ValorDocumentoIdentidad: ', @ValorDocumentoIdentidad,
                ', Nombre: ', (SELECT Nombre FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad),
                'Nuevo Saldo: ', @NuevoSaldo,
                 ',TipoMovimiento: ', @TipoMovimiento, ', Monto: ', @CopiaMonto),
                @PostInIP,
                GETDATE()
            );
    END
    ELSE
    IF @OutResultCode = 50011
    BEGIN
        INSERT INTO dbo.bitacoraEvento(
                IdTipoEvento,
                IdUsuario,
                Fecha,
                Descripcion,
                PostInIP,
                PostTime
            ) VALUES (
                13,
                (SELECT Id FROM dbo.Usuario WHERE Username = @Username),
                GETDATE(),
                CONCAT('Error: ,',(SELECT Descripcion FROM dbo.Error Where Codigo = @OutResultCode),
                ' ValorDocumentoIdentidad: ', @ValorDocumentoIdentidad,
                ', Nombre: ', (SELECT Nombre FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad),
                'Nuevo Saldo: ', @NuevoSaldo,
                 ',TipoMovimiento: ', @TipoMovimiento, ', Monto: ', @CopiaMonto),
                @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()
        );

        SET @OutResultCode = 50008;
    END CATCH
    SET NOCOUNT OFF;
END
GO

Posteriormente para la ventana de insertar movimiento, se realizó el SP que lista los tipos de moviemientos para poderlos mostrar en la página web y que el usuario pueda seleccionarlo.

CREATE PROCEDURE [dbo].[GetTiposMovimiento]
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
    SELECT Nombre FROM dbo.TipoMovimiento
    ORDER BY 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()
        );
    END CATCH;
    SET NOCOUNT Off;
END;

Con esto realizado, se realizó la conexión de estos SP con el servidor y posteriormente con la página que ya estaba creada del semestre anterior.


Del proyecto queda por realizar pequeñas correcciones a bugs que pueden aparecer y se concluría con éxito el mismo.


Comentarios

Entradas populares de este blog

Sesión #9