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