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