martes, 16 de abril de 2024

Entrada 6 - 16/04/24

Hora Inicio: 6 p.m

Hora Fin: 10 p.m

Horas Trabajadas: 4 horas

Modalidad: Virtual


Se realizó el SP de ListaArticulosQueCumplenPatron, el cual se encarga de filtrar tanto por nombre como por cedula los empleados que se encuentran activos y cuyos atributos coinciden con los parámetros de entrada.

ALTER PROCEDURE [dbo].[ListaArticulosQueCumplenPatron] 

@inPatron VARCHAR(64)

, @inIP VARCHAR(64)

, @inUser VARCHAR(64)

, @outResultCode INT OUTPUT

AS

BEGIN

SET NOCOUNT ON;

BEGIN TRY

-- se hacen declaraciones

DECLARE @IdTipoEvento INT

, @IdUser INT

, @Filtro VARCHAR(2000);


-- se hacen inicializacion

SET @outResultCode = 0;  -- no error code


SELECT

@IdUser = U.id

FROM dbo.Usuario AS U

WHERE U.Username = @inUser

-- se hacen validaciones

IF (@inPatron IS NULL)

BEGIN

SET @outResultCode = 50008;  -- parametro de entrada es nulo

RETURN;

END;

-- Determinar el tipo de filtro y asignar el IdTipoEvento correspondiente

IF (@inPatron LIKE '%[0-9]%') -- Si el patrón contiene números, probablemente se filtra por cedula

BEGIN

SET @IdTipoEvento = 12 -- Si el filtro es por cedula

END

ELSE

BEGIN

SET @IdTipoEvento = 11; -- Si el filtro es por nombre

END;

IF (@OutResulTCode=0)

BEGIN

IF (@inPatron ='')

BEGIN

SELECT E.[Nombre]

FROM dbo.Empleado E 

WHERE E.EsActivo = 1

ORDER BY E.Nombre;

END

ELSE

BEGIN

SELECT 

E.Nombre

FROM dbo.Empleado E

WHERE (E.Nombre like '%'+@inPatron+'%' 

OR CAST(E.ValorDocumentoIdentidad AS VARCHAR(64)) like '%'+@inPatron+'%')

AND E.EsActivo = 1;

INSERT dbo.BitacoraEvento(

[IdTipoEvento]

, [Descripcion]

, [IdPostByUser]

, [PostInIP]

, [PostTime]

)

VALUES (

@IdTipoEvento

, ' Filtro:' + @inPatron

, @IdUser

, @inIP

, GETDATE()

);

END

END

END TRY

BEGIN CATCH

INSERT INTO dbo.DBError 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;


Siendo así se debió de realizar un ajuste en la ventana de listar empleados para agregar la caja de texto y el botón de búsqueda, de aquí surgió un problema pues no conocíamos como actualizar la información de la ventana de manera dinámica, por lo que se tuvo que crear un nuevo contenedor que almacena y mapeara de forma ordenada los datos devueltos por el sp, para posteriormente desplegar la nueva información mediante la renderización completa de la ventana.

Además, se crearon tanto la solicitud como al función dentro del API que invocan el stored procedure correspondiente.

app.get('/api/list-similar', async (req, res) => {

    try {

        const patron = req.query.patron; // Access the employee parameter from the query string

        const user = req.query.user; // Access the employee parameter from the query string

        const ip = '25.3.206.243';


        const result = await listaArticulosQueCumplenPatronStoredProcedure(patron, ip, user);

        res.json(result);

    } catch (error) {

        console.error('Error calling listingPatron stored procedure:', error);

        res.status(500).json({ error: 'Internal Server Error' });

    }

});

async function listaArticulosQueCumplenPatronStoredProcedure(patron, ip, user) { //Función asincrónica para llamar a un procedimiento almacenado de inserción

    try {

        await sql.connect(config); //Conecta con la base de datos SQL Server


        const request = new sql.Request(); //Crea una nueva solicitud SQL


        request.input('inPatron', sql.VarChar(64), patron);

        request.input('inIP', sql.VarChar(64), ip);

        request.input('inUser', sql.VarChar(64), user);

        request.output('outResultCode', sql.Int); //Define un parámetro de salida para el código de resultado


        const result = await request.execute('dbo.ListaArticulosQueCumplenPatron'); //Ejecuta el procedimiento almacenado de inserción


        const outputResultCode = result.output.outResultCode; //Obtiene el código de resultado de la salida


        if (outputResultCode === 0) { //Si el código de resultado es 1 (éxito)

            return result.recordset; //Devuelve el conjunto de registros resultante

        } else { //Si hay un error en la operación

            console.error(`Error in operation. Result Code: ${outputResultCode}`);

            throw new Error(`Error in operation. Result Code: ${outputResultCode}`);

        }

    } catch (error) {

        console.error('Error executing stored procedure:', error.message);

        throw error; //Captura y lanza cualquier error que ocurra

    } finally {

        await sql.close(); //Cierra la conexión a la base de datos

    }

}


Finalmente, se creó un .css a para cada ventanas y así el usuario pueda ver el proyecto más estético y con más agrado. Algunas cosas que se agregaron fueron las siguiente:

/* InsertEmployee.css */

.container {

    max-width: 600px;

    margin: 0 auto;

    padding: 2rem;

    text-align: center;

}

button{

    margin-left: 10px;

    margin-top: 15px;

}

.list-container {

    margin-bottom: 20px;

    margin-top: 20px;

}

No hay comentarios.:

Publicar un comentario

Entrada 8 - 20/04/24

Hora Inicio: 8 p.m Hora Fin: 10 p.m Horas Trabajadas: 2 horas Modalidad: Virtual Nos reunimos para terminar los últimos detalles del proyect...