SP insertar empleado terminado

Hoy terminé el SP de insertar empleado con ajustes para que cumplan con el R7 y R8, además de los TRANSACTION y del CATCH pendiente. Aproximadamente me tardé unas 3 horas

CREATE PROCEDURE dbo.procInsertarEmpleado
     @inValorDocumentoIdentidad VARCHAR(64)
    ,@inNombre VARCHAR (64)
    ,@inIdPuesto INT
    ,@outResultCode INT OUTPUT

    ,@inUsername VARCHAR(64) -- Username del usuario que intenta hacer la inserción
    ,@inPostInIP VARCHAR(64) -- IP del usuario que intenta hacer la inserción
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @IdUsuario INT
    DECLARE @ValorID VARCHAR(64)
    DECLARE @Nombre VARCHAR(64)
    DECLARE @NombrePuesto VARCHAR(64)
    DECLARE @DescError VARCHAR(256)
    SET @outResultCode = 0

    BEGIN TRY

        -- Verifica que TODOS los caracteres sean numéricos
        IF (@inValorDocumentoIdentidad LIKE '%[^0-9]%')
        BEGIN
            SET @outResultCode = 50010
            RETURN
        END
        -- Verificar que el nombre debe ser alfabético y puede contener espacios entre nombre y apellidos
        IF (@inNombre LIKE '%[^a-zA-Z ]%')
        BEGIN
            SET @outResultCode = 50009
            RETURN
        END

        SELECT @ValorID = e.ValorDocumentoIdentidad
        FROM dbo.Empleado AS e
        WHERE (e.ValorDocumentoIdentidad = @inValorDocumentoIdentidad)
        -- Verifica que el valor del documento de identidad no esté repetido en la base de datos
        IF (@ValorID = @inValorDocumentoIdentidad)
        BEGIN
            SET @outResultCode = 50004
            RETURN
        END

        SELECT @Nombre = e.Nombre
        FROM dbo.Empleado AS e
        WHERE (e.Nombre = @inNombre)
        -- Verificar que el nombre no esté repetido en la base de datos
        IF (@Nombre = @inNombre)
        BEGIN
            SET @outResultCode = 50005
            RETURN
        END

        SELECT @IdUsuario = u.Id
        FROM dbo.Usuario AS u
        WHERE (u.Username = @inUsername)

        SELECT @NombrePuesto = p.Nombre
        FROM dbo.Puesto AS p
        WHERE (p.Id = @inIdPuesto)

        BEGIN TRANSACTION
            INSERT INTO dbo.Empleado (
                 IdPuesto
                ,ValorDocumentoIdentidad
                ,Nombre
                ,FechaContratacion
                ,SaldoVacaciones
                ,EsActivo
            )
            VALUES (
                 @inIdPuesto
                ,@inValorDocumentoIdentidad
                ,@inNombre
                ,GETDATE()
                ,0
                ,1
            )

            -- Bitácora de eventos
            INSERT INTO dbo.BitacoraEvento (
                 idTipoEvento
                ,Descripcion
                ,IdPostByUser
                ,PostInIP
                ,PostTime
            )
            VALUES (
                 6
                ,@inValorDocumentoIdentidad + ' ' + @inNombre + ' ' + @NombrePuesto
                ,@idUsuario
                ,@inPostInIP
                ,GETDATE()
            )
        COMMIT TRANSACTION

    END TRY
    BEGIN CATCH

        SELECT @DescError = er.Descripcion
        FROM dbo.Error AS er
        WHERE (er.Codigo = @outResultCode)

        INSERT INTO dbo.DBError(
             UserName
            ,Number
            ,State
            ,Severity
            ,Line
            ,[Procedure]
            ,Message
            ,DateTime
        )
        VALUES(
             @inUsername
            ,ERROR_NUMBER()
            ,ERROR_STATE()
            ,ERROR_SEVERITY()
            ,ERROR_LINE()
            ,ERROR_PROCEDURE()
            ,ERROR_MESSAGE()
            ,GETDATE()
        )

        -- Bitácora de eventos
        INSERT INTO dbo.BitacoraEvento (
                 idTipoEvento
                ,Descripcion
                ,IdPostByUser
                ,PostInIP
                ,PostTime
        )
        VALUES (
             5
            ,@DescError + ' ' + @inValorDocumentoIdentidad + ' ' + @inNombre + ' ' + @NombrePuesto
            ,@idUsuario
            ,@inPostInIP
            ,GETDATE()
        )

        SET @outResultCode = 50008
    END CATCH
END

Faltaría pedirle al profe si es posible una revisión de este SP y conectarlo al backend

Link de referencia: https://youtu.be/m-VztZYm1jE?si=W5D1ouTop1AAsh2m

Comments