Implementación de funcionalidad: Consultar Empleado

Fecha: viernes 24 de abril de 2026

Hora de inicio: 2:30 p.m.

Hora de finalización: 7:45 p.m.

Horas trabajadas: 3 h 02 min

El plan para esta sesión era implementar la funcionalidad completa de consultar empleado: la función en la capa lógica, el controlador y la vista. Johana ya había terminado su parte de capa lógica y presentación días antes, así que yo había esperado a que estuviera lista para arrancar con la mía, tal como lo acordamos.

Actividades realizadas

2:30 p.m. – 3:20 p.m. — Función consultar_empleado (capa lógica)

Comencé escribiendo la función consultar_empleado en Python. Esto era bastante similar a lo que hice en la tarea 1, así que no partí desde cero: repasé el código de la tarea anterior para refrescar cómo se hacían las llamadas a SPs con pyodbc y cómo se manejaban los resultsets.

La función abre la conexión, ejecuta el SP con cursor.execute, lee el primer resultset con cursor.fetchone para obtener los datos del empleado, y luego llama a cursor.nextset() para avanzar al segundo resultset donde viene el código de resultado. Si algo falla a nivel de base de datos, el except pyodbc.Error captura el error y retorna 50008.

Un detalle que había aprendido en la tarea 1 y que apliqué aquí es que cursor.nextset() es necesario cuando el SP retorna más de un SELECT, cosa que ConsultarEmpleado hace.

3:20 p.m. – 3:55 p.m. — Ajustar valor por defecto en parámetros OUTPUT

Antes de poder probar cualquier cosa de la capa lógica, me topé con el primer error serio del día. Al conectar la función Python con el SP ConsultarEmpleado y hacer la primera prueba, la app devolvía "error de base de datos" (código 50008) sin más detalle.

Img1: Error de base de datos al consultar un empleado.

Como el bloque except estaba capturando el error silenciosamente, agregué un print para ver el mensaje real, el cual fue este:

('42000', "Procedure or function 'ConsultarEmpleado' expects parameter '@outResultCode', which was not supplied.")

El problema era que los SPs ConsultarEmpleado, EliminarEmpleado, ActualizarEmpleado y RegistrarIntentoEliminarEmpleado tenían el parámetro @outResultCode INT OUTPUT sin valor por defecto, entonces SQL Server lo exigía obligatoriamente. pyodbc no tiene forma de pasar parámetros OUTPUT de esa forma, así que SQL Server los rechazaba.

La solución fue agregar = 0 como valor por defecto en los cuatro SPs. Lo hice de dos formas: primero con ALTER PROCEDURE directamente en SSMS para que el cambio quedara activo en la base de datos de Azure de inmediato, y luego actualicé el script en el repositorio para que quedara consistente. El diff en el repositorio muestra exactamente ese cambio: de @outResultCode INT OUTPUT a @outResultCode INT = 0 OUTPUT.

Img2: Ajuste de valor por defecto en los parámetros de salida.

3:55 p.m. – 4:47 p.m. — Vista consultar_empleado_view (controlador)

Implementé la vista en el controlador. La lógica es la siguiente: valida que haya sesión activa, obtiene el id_empleado desde los parámetros de la URL, llama a consultar_empleado, y si el resultado no es exitoso obtiene el mensaje de error con obtener_mensaje_error y redirige al listado con un flash. Si todo va bien, renderiza el template con los datos del empleado.

Al probar esta parte me apareció el siguiente error:

werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'auth.logout'. Did you mean 'auth.logout_view' instead?

La causa era que en el HTML que había escrito usé url_for('auth.logout') pero la función en el controlador de autenticación se llama logout_view. Lo corregí cambiando el nombre del endpoint en el HTML.

7:00 p.m. – 7:32 p.m. — Crear vista consultar_empleado (HTML)

Antes de programar el HTML, diseñé la vista en Figma usando como referencia el Figma que Johana había preparado para el proyecto, donde están definidos los estilos y componentes que usa el resto de la aplicación. Eso me permitió tener claro qué estructura necesitaba antes de escribir una sola línea de HTML.

Para el código tomé como base las vistas de Johana para mantener consistencia visual. Sin embargo, en el primer intento cometí este error:

Error: vista sin estilos

La página cargaba completamente sin estilos. La causa era que el <link> del CSS apuntaba a styles.css pero el archivo correcto se llama estilos.css. Lo corregí cambiando el nombre en el url_for.

Img3: Vista sin estilos.

7:32 p.m. – 7:45 p.m. — Configurar botón Consultar en index

El último ajuste fue conectar el botón "Consultar" en la vista del listado de empleados para que redirigiera correctamente a consultar_empleado_view pasando el id_empleado por la URL. Con esto la funcionalidad quedó completamente integrada y probada.

Forma de trabajo del equipo

Johana y yo habíamos acordado que ella avanzaría primero con su parte de capa lógica y presentación, y yo esperaría para arrancar con la mía una vez que tuviera las bases listas, pues parte de mi trabajo dependía del de ella. Nos mantuvimos en contacto por WhatsApp durante la sesión para coordinar dudas puntuales.

Referencias:

Comentarios

Entradas más populares de este blog

Creación del SP de Cargar Datos

Implementación de funcionalidades: Editar Empleado y Eliminar Empleado