Sesión #9
Duración 4 horas 2:30pm - 6:30pm
Se trabajó en la funcionalidad de modificar empleado. Ya que ayer se trabajó en la forma de mostrar los datos, hoy se concentró el trabajo en capturar esos datos y llevarlos al SP de modificarEmpleado. El mismo es completamente funcional y muestra los cambios realizados en la bitácora de manera correcta. Ya sea que no se pudo realizar por algún conlfito en nombre o documento de identidad o que sí se realizó la modificación.
ALTER PROCEDURE ModificarEmpleadoPorDocumento
@ValorDocumentoIdentidadAnterior VARCHAR(128),
@ValorDocumentoIdentidadNuevo VARCHAR(128),
@NombreAnterior VARCHAR(128),
@NombreNuevo VARCHAR(128),
@PuestoNuevo VARCHAR(128),
@SaldoVacaciones INT,
@Username VARCHAR(128),
@PostInIP VARCHAR(64),
@OutResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET @OutResultCode = 0;
IF @ValorDocumentoIdentidadAnterior <> @ValorDocumentoIdentidadNuevo AND
EXISTS (SELECT 1 FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidadNuevo)
BEGIN
SET @OutResultCode = 50006;
END
IF @NombreAnterior <> @NombreNuevo AND
EXISTS (SELECT 1 FROM dbo.Empleado WHERE Nombre = @NombreNuevo AND Nombre <> @NombreAnterior)
BEGIN
SET @OutResultCode = 50007;
END
IF @OutResultCode = 0
BEGIN
DECLARE @IdPuestoNuevo INT;
SELECT @IdPuestoNuevo = Id FROM dbo.Puesto WHERE Nombre = @PuestoNuevo;
DECLARE @PuestoAnterior VARCHAR(128), @SaldoVacacionesAnterior INT;
SELECT
@PuestoAnterior = P.Nombre,
@SaldoVacacionesAnterior = E.SaldoVacaciones
FROM dbo.Empleado E
INNER JOIN dbo.Puesto P ON E.IdPuesto = P.Id
WHERE E.ValorDocumentoIdentidad = @ValorDocumentoIdentidadAnterior;
BEGIN TRANSACTION;
UPDATE dbo.Empleado
SET
ValorDocumentoIdentidad = @ValorDocumentoIdentidadNuevo,
Nombre = @NombreNuevo,
IdPuesto = @IdPuestoNuevo
WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidadAnterior;
INSERT INTO dbo.bitacoraEvento (
IdTipoEvento, IdUsuario, Fecha, Descripcion, PostInIP, PostTime
) VALUES (
8,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
CONCAT('Modificación de empleado: [ValorDocumentoAntes: ', @ValorDocumentoIdentidadAnterior,
', NombreAntes: ', @NombreAnterior,
', PuestoAntes: ', @PuestoAnterior,
', ValorDocumentoDespues: ', @ValorDocumentoIdentidadNuevo,
', NombreDespues: ', @NombreNuevo,
', PuestoDespues: ', @PuestoNuevo,
', SaldoVacaciones: ', @SaldoVacaciones, ']'),
@PostInIP,
GETDATE()
);
COMMIT TRANSACTION;
END
ELSE
BEGIN
INSERT INTO dbo.bitacoraEvento (
IdTipoEvento, IdUsuario, Fecha, Descripcion, PostInIP, PostTime
) VALUES (
7,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
CONCAT('Error en modificación de empleado: ', @OutResultCode,
' [ValorDocumentoAntes: ', @ValorDocumentoIdentidadAnterior,
', NombreAntes: ', @NombreAnterior,
', PuestoAntes: ', @PuestoAnterior,
', ValorDocumentoDespues: ', @ValorDocumentoIdentidadNuevo,
', NombreDespues: ', @NombreNuevo,
', PuestoDespues: ', @PuestoNuevo,
', SaldoVacaciones: ', @SaldoVacaciones, ']'),
@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()
);
ROLLBACK TRANSACTION;
SET @OutResultCode = 50008;
END CATCH;
SET NOCOUNT OFF;
END;
GO
Se realizaron modificaciones en el SP de listar y en los filtros para que solo muestren los Empleados que son activos. Esto ya que no se había notado en la descripción de la tarea que solo estos se debían mostrar y además el borrado lógico se realiza sobre este dato.
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;
ALTER PROCEDURE GetFiltroEmpleadosNombre
@nombre VARCHAR(64),
@Username VARCHAR(128),
@PostInIP VARCHAR(64),
@PostTime DATETIME
AS
BEGIN
SET NOCOUNT ON;
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.Nombre LIKE '%' + @nombre + '%' AND E.EsActivo = 1
ORDER BY E.Nombre ASC;
BEGIN TRANSACTION;
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
11,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
@nombre,
@PostInIP,
@PostTime
);
COMMIT TRANSACTION;
END
GO
ALTER PROCEDURE dbo.filtroEmpDoc
@valorDocumento int,
@Username VARCHAR(128),
@PostInIP VARCHAR(64),
@PostTime DATETIME
AS
BEGIN
SET NOCOUNT ON;
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 CAST(ValorDocumentoIdentidad AS VARCHAR(20)) LIKE '%' + CAST(@valorDocumento AS VARCHAR(20)) + '%' AND E.EsActivo = 1
ORDER BY nombre ASC;
BEGIN TRANSACTION;
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
12,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
@valorDocumento,
@PostInIP,
@PostTime
);
COMMIT TRANSACTION;
END
GO
Comentarios
Publicar un comentario