sábado, 21 de mayo de 2016

SP de Simulacion de Créditos por Concepto de Mes Cumplido

Se lleva a cabo el SP para la simulación de un Job que día a día le acredita días de vacaciones a los empleados que están cumpliendo un mes.

Para el mismo se requirió de una función que verifique si la fecha de contratación del empleado y la fecha del proceso indican que el empleado esta cumpliendo un mes más de trabajo.

El código para la función se presenta ahora:





Luego para el procemiento de actualizacion masiva se utilizo como base el codigo que el profesor facilito en clases, aún así se debieron realizar cambios para adaptarlo al modelo de bases respectivo.
Se presenta a continuacion su codigo:

[SimulacionCreditoVacaciones]

@fechaProceso DATETIME

AS
BEGIN
    SET NOCOUNT ON;
        BEGIN TRY
            
            DECLARE @MovsTempTable TABLE
            (
            ID INT IDENTITY(1,1) PRIMARY KEY,
            IDEmpleado INT,
            Email VARCHAR(50),
            SaldoVacaciones INT,
            TextoEmail VARCHAR(500)
            )
            
            DECLARE @QEmpleados INT
            
            INSERT INTO @MovsTempTable(IDEmpleado, Email, SaldoVacaciones)
            SELECT E.ID, E.Email, E.SaldoVacaciones
            FROM Empleados E
            WHERE (dbo.CumpleMes( @fechaProceso, E.FechaContrat) = 1)
             
            UPDATE @MovsTempTable
            SET TextoEmail = 'Se ha agregado un dia a su saldo de vacaciones por cumplir mes de trabajo.'
            
            SET @QEmpleados = (SELECT COUNT(1) FROM @MovsTempTable)
            
            SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
            BEGIN TRAN transac

INSERT ProcesosMasivos(Fecha)
VALUES (@fechaProceso)
DECLARE @IDprocesoMasivo INT = (SELECT MAX(ID) FROM ProcesosMasivos)

INSERT Emails(Texto)
SELECT M.TextoEmail
FROM @MovsTempTable M
ORDER BY M.ID

DECLARE @lastID INT = (SELECT MAX(ID) FROM @MovsTempTable)

INSERT Movimientos(FK_Empleado, FK_TipoMov, FK_Email, Fecha, Monto, FK_Proceso)
SELECT M.IDEmpleado, 2, @lastID - @QEmpleados + M.ID, @fechaProceso, 1, @IDprocesoMasivo
FROM @MovsTempTable M
ORDER BY M.ID

UPDATE Empleados
SET SaldoVacaciones = SaldoVacaciones + 1
WHERE ID IN (SELECT M.IDEmpleado FROM @MovsTempTable M)

COMMIT TRAN transac
        END TRY        
        BEGIN CATCH
RETURN -1
IF @@TRANCOUNT > 0
ROLLBACK
            ROLLBACK TRAN transac            
        END CATCH
        RETURN 1
END

Tiempo estimado de la tarea: 2 horas.
Tiempo de investigacion sobre funciones y manejo de fechas: 2 horas.
Pruebas y solucion de errores: 1 hora.
Total 5 horas.

No hay comentarios.:

Publicar un comentario