Implementación de funcionalidad: Insertar Movimiento

Fecha: domingo 26 de abril de 2026

Hora de inicio: 9:30 a.m.

Hora de finalización: 1:48 p.m.

Horas trabajadas: 3 h 18 min

El plan para esta sesión era implementar la funcionalidad completa de insertar movimiento: el SP auxiliar que necesitaba para el dropdown, las funciones en el modelo, la vista en el controlador y el HTML.

Actividades realizadas

9:30 a.m. – 10:12 a.m. — SP: ListarTiposMovimiento

Al empezar a pensar en el formulario de insertar movimiento me di cuenta de que necesitaba un dropdown para que el usuario escogiera el tipo de movimiento, y para llenarlo necesitaba un SP que retornara todos los tipos disponibles. Este no estaba pensado originalmente, pero surgió la necesidad en este momento al diseñar la funcionalidad completa.

10:12 a.m. – 11:45 a.m. — Funciones listar_tipos_movimiento e insertar_movimiento (modelo) + vista insertar_movimiento_view (controlador)

Con el SP listo, implementé las dos funciones del modelo y la vista del controlador.

insertar_movimiento fue más compleja y es donde apareció el error más interesante del día. La función ejecuta el SP InsertarMovimiento, pero al probarlo con un monto que dejaría el saldo negativo, la aplicación mostraba "Movimiento insertado correctamente" cuando en realidad el SP no había insertado nada. El código de error 50011 no estaba llegando correctamente a Python.

Al investigar el problema recordé que InsertarMovimiento retorna más de un resultset: uno de RegistrarBitacora y dos del SP principal. Python estaba leyendo el primer resultset que encontraba con columna resultado, que era el 0 que retorna RegistrarBitacora, y se detenía ahí sin llegar al código real del SP.

Para confirmar el diagnóstico, probé el SP manualmente en SSMS, el SP retornó correctamente los tres resultsets: 0 de RegistrarBitacora, 50011 del SP principal y 50011 nuevamente.

Img1: Resultsets del SP.

Con eso confirmado, modifiqué insertar_movimiento en el modelo para recorrer todos los resultsets con un loop while True y quedarse con el último valor de resultado en lugar de detenerse en el primero. La lógica es que el código relevante es el último, que corresponde al SELECT @outResultCode final del SP principal.

La vista del controlador insertar_movimiento_view maneja GET y POST en una sola función usando request.method. En GET carga los datos del empleado y los tipos de movimiento para el formulario y en POST valida el monto en capa lógica antes de llamar al SP, redirige según el resultado.

12:45 p.m. – 1:48 p.m. — Vista insertar_movimiento.html + botón en movimientos.html

Igual que con las vistas anteriores, primero diseñé en Figma siguiendo el diseño base del proyecto y luego programé el HTML. La vista muestra los datos del empleado en modo lectura, un dropdown con los tipos de movimiento y un campo de monto numérico.

Al cargar el formulario por primera vez me encontré con que el dropdown aparecía vacío.

Img2: Dropdown  de Tipo de movimiento vacío.

La causa era simple, el SP ListarTiposMovimiento lo había creado en el script del repositorio pero no lo había ejecutado todavía en la base de datos de Azure. Lo ejecuté en SSMS y el dropdown se llenó correctamente.

Forma de trabajo del equipo

Nos mantuvimos en contacto por WhatsApp para coordinar el estado general del proyecto.

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

Implementación de funcionalidad: Consultar Empleado