Sesión #10
Duración 2horas: 10pm - 12mn
Se creó el SP de eliminar Empleado, el mismo funciona adecuadamente y trabaja realizando las dos entradas a la bitácora, cuando se confirma la eliminación y cuando no. Esto mediante el parámetro de confirmación, si es un 0, significa que el usuario canceló la operación pero si es un 1, fue que la aceptó y se realizó el borrado lógico en la BD
ALTER PROCEDURE [dbo].[IntentoBorrado]
@ValorDocumentoIdentidad VARCHAR(128),
@Username VARCHAR(128),
@PostInIP VARCHAR(64),
@Confirmación INT,
@OutResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @NombreEmpleado VARCHAR(128);
DECLARE @PuestoEmpleado VARCHAR(128);
DECLARE @SaldoVacaciones INT;
IF EXISTS (SELECT 1 FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad)
SELECT
@NombreEmpleado = E.Nombre,
@PuestoEmpleado = P.Nombre,
@SaldoVacaciones = E.SaldoVacaciones
FROM dbo.Empleado E
INNER JOIN dbo.Puesto P ON E.IdPuesto = P.Id
WHERE E.ValorDocumentoIdentidad = @ValorDocumentoIdentidad;
BEGIN
IF @Confirmación = 0
BEGIN
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
8,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
CONCAT('Intento de borrado: [ValorDocumento: ', @ValorDocumentoIdentidad, ', Nombre: ', @NombreEmpleado,
', Puesto: ', @PuestoEmpleado,
', SaldoVacaciones: ', @SaldoVacaciones, ']'),
@PostInIP,
GETDATE()
);
END
ELSE
BEGIN
UPDATE dbo.Empleado
SET EsActivo = 0
WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad;
SET @OutResultCode = 0;
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
9,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
CONCAT('Borrado: [ValorDocumento: ', @ValorDocumentoIdentidad,
', Nombre: ', @NombreEmpleado,
', Puesto: ', @PuestoEmpleado,
', SaldoVacaciones: ', @SaldoVacaciones, ']'),
@PostInIP,
GETDATE()
);
END
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()
);
END CATCH
SET NOCOUNT OFF;
END
GO
También se corrigió un pequeño error que mostraba los Empleados aunque tuvieran el campo EsActivo en 0, se corrigió cambiando de posición el lugar donde se hacía la verifiación de este campo.
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;
Comentarios
Publicar un comentario