Modificacion del ingreso de datos y finaiizacion de documentacion

El día de hoy se trabajó en el trabajo escrito y la modificación de la carga de datos, agregando un proceso iterativo en la inserción de movimientos de empleados, se utilizó una tabla variable para crear esta función. Además, se terminó la documentación. El trabajo fue de 2 horas.

-- 7. Movimiento 

DECLARE @TempMov TABLE (    -- Se usa tabla variable para recorrer los movimientos uno por uno

    Fila INT IDENTITY(1,1)

    ,ValorDocId VARCHAR(64)

    ,TipoMov VARCHAR(64)

    ,Fecha DATE

    ,Monto MONEY

    ,PostByUser VARCHAR(64)

    ,PostInIP VARCHAR(64)

    ,PostTime DATETIME

)

-- Carga los movimientos del XML ordenados por fecha ascendente

INSERT INTO @TempMov (ValorDocId, TipoMov, Fecha, Monto, PostByUser, PostInIP, PostTime)

SELECT

    x.value('@ValorDocId', 'VARCHAR(64)')

    ,x.value('@TipoMov',   'VARCHAR(64)')

    ,x.value('@Fecha',      'DATE')

    ,x.value('@Monto',      'MONEY')

    ,x.value('@PostByUser', 'VARCHAR(64)')

    ,x.value('@PostInIP',   'VARCHAR(64)')

    ,x.value('@PostTime',   'DATETIME')

FROM @xml.nodes('/Datos/Movimientos/movimiento') AS t(x)

ORDER BY x.value('@Fecha', 'DATE') ASC


DECLARE @i INT = 1

DECLARE @total INT

SELECT @total = COUNT(*) 

FROM @TempMov


DECLARE @vDocId VARCHAR(64)

DECLARE @vTipoMov VARCHAR(64)

DECLARE @vMonto MONEY

DECLARE @vPostByUser VARCHAR(64)

DECLARE @vPostInIP VARCHAR(64)

DECLARE @vPostTime DATETIME

DECLARE @vFecha DATE

DECLARE @vIdEmpleado INT

DECLARE @vIdTipoMov INT

DECLARE @vIdUsuario INT

DECLARE @vTipoAccion VARCHAR(64)

DECLARE @vSaldoActual MONEY

DECLARE @vSaldoNuevo MONEY


WHILE (@i <= @total) -- Recorre cada movimiento en orden cronológico

BEGIN

    SELECT @vDocId = ValorDocId

        ,@vTipoMov = TipoMov

        ,@vMonto = Monto

        ,@vPostByUser = PostByUser

        ,@vPostInIP = PostInIP

        ,@vPostTime = PostTime

        ,@vFecha = Fecha

    FROM @TempMov

    WHERE (Fila = @i)


    SELECT @vIdEmpleado = e.Id

        ,@vSaldoActual = e.SaldoVacaciones

    FROM dbo.Empleado AS e

    WHERE (e.ValorDocumentoIdentidad = @vDocId)


    SELECT @vIdTipoMov = tm.Id

        ,@vTipoAccion = tm.TipoAccion

    FROM dbo.TipoMovimiento AS tm

    WHERE (tm.Nombre = @vTipoMov)


    SELECT @vIdUsuario = u.Id

    FROM dbo.Usuario AS u

    WHERE (u.Username = @vPostByUser)


    IF (@vTipoAccion = 'Credito') -- Calcula el nuevo saldo según el tipo de acción

    BEGIN

        SET @vSaldoNuevo = @vSaldoActual + @vMonto

    END

    ELSE

    BEGIN

        SET @vSaldoNuevo = @vSaldoActual - @vMonto

        IF (@vSaldoNuevo < 0)

        BEGIN

            SET @vSaldoNuevo = 0

        END

    END


    INSERT INTO dbo.Movimiento (

         IdEmpleado

        ,IdTipoMovimiento

        ,Fecha

        ,Monto

        ,NuevoSaldo

        ,IdPostByUser

        ,PostInIP

        ,PostTime

    )

    VALUES (

         @vIdEmpleado

        ,@vIdTipoMov

        ,@vFecha

        ,@vMonto

        ,@vSaldoNuevo

        ,@vIdUsuario

        ,@vPostInIP

        ,@vPostTime

    )


    UPDATE dbo.Empleado

    SET SaldoVacaciones = @vSaldoNuevo

    WHERE (Id = @vIdEmpleado)


    SET @i = @i + 1

END


SELECT * FROM dbo.Empleado

SELECT * FROM dbo.Movimiento

Comments

Popular posts from this blog

Avance en el R3 Insertar empleado

SP insertar empleado terminado