Manual de corrección de errores en las alertas de registro del SIAF PDF

Summary

Este documento describe un manual de corrección de errores en las alertas de registro del SIAF. Se centra en la implementación de cambios en el código, consideraciones previas, la documentación, el proceso de exportación y las instrucciones de exportación. Además, menciona recomendaciones para un proceso más eficiente.

Full Transcript

Manual de corrección de errores en las alertas de registro del SIAF ÁREA DE TECNOLOGÍA EDUCATIVA En primer lugar, es importante destacar que la integridad del código es esencial para cualquier proyecto de software exitoso. Cuando se realizan cambios importantes en el código, como en el caso de las...

Manual de corrección de errores en las alertas de registro del SIAF ÁREA DE TECNOLOGÍA EDUCATIVA En primer lugar, es importante destacar que la integridad del código es esencial para cualquier proyecto de software exitoso. Cuando se realizan cambios importantes en el código, como en el caso de las inscripciones, es fundamental hacer pruebas unitarias y de consistencia dentro del servidor de desarrollo. De esta manera, se pueden verificar los cambios realizados y detectar posibles fallas antes de implementarlos en un entorno de producción. Para que la implementación sea correcta, es necesario considerar ciertas métricas. Por ejemplo, se deben definir los criterios de aceptación para las pruebas unitarias y de consistencia, y se deben establecer los tiempos límite para realizar las pruebas. Además, es fundamental contar con un equipo de desarrollo altamente capacitado y con experiencia en la implementación de cambios importantes en el código. Otra consideración importante es la documentación. Es necesario documentar todos los cambios realizados y asegurarse de que la documentación sea clara y fácil de entender. De esta manera, cualquier miembro del equipo de desarrollo puede entender los cambios realizados y trabajar de manera eficiente en el futuro. Además, es importante tener en cuenta que la implementación de cambios importantes puede afectar a otros sistemas y procesos dentro de la organización. Por lo tanto, se deben realizar pruebas de integración para garantizar que los cambios no afecten negativamente a otros sistemas. 2 La implementación de cambios importantes en el código es un proceso crucial que requiere una planificación cuidadosa, pruebas exhaustivas y una documentación clara. Al seguir estas pautas, se puede garantizar la integridad del código y las implementaciones, lo que es esencial para el éxito. Esta guía proporciona instrucciones detalladas para la exportación de los módulos reparados de inscripción al servidor de producción. Consideraciones previas Antes de realizar la exportación, es necesario tener en cuenta las siguientes consideraciones: Realizar un backup de la base de datos Es importante realizar un backup completo de todas las bases de datos que se utilicen en el sistema. Esto permitirá restaurar el sistema en caso de que la exportación falle. Evitar implementarlo en periodos de inscripción o cuando el SIAF tenga bastante demanda Se recomienda evitar implementar los cambios durante los periodos de inscripción o cuando el sistema tenga una alta demanda. Esto se debe a que si la exportación falla, podría afectar a un gran número de usuarios. Realizar un backup del SIAF 3 Se recomienda realizar un backup de la versión estable del SIAF que se está utilizando actualmente. Esto permitirá restaurar el sistema en caso de que la exportación falle. Proceso de exportación El proceso de exportación debe seguir los siguientes pasos: 1. Realizar los backups de las bases de datos y del SIAF. 2. Establecer un entorno de pruebas para verificar que los cambios funcionen correctamente. 3. Exportar los cambios al servidor de producción. 4. Probar los cambios en el servidor de producción. 5. Publicar los cambios en el servidor de producción. Instrucciones de exportación Los cambios se deben exportar en el siguiente orden: 1. Archivo 5 2. Archivos 3 y 1 3. Archivos 4 y 2 4 Archivos modificados Los archivos modificados son los siguientes: js/participantes_registro.js ○ Método registrarOferta() js/gestion_grupos.js ○ Método regParticipanteG() paginas/participantes_registro.php paginas/gestion_administracion.php aunado a ello, se modificó el procedimiento almacenado que hace referencia los archivos anteriores 5.1.- sp_registrar_oferta Siguiendo estas instrucciones, se puede garantizar que la exportación de los módulos reparados de inscripción se realice de forma correcta y segura. Recomendaciones Para mejorar el proceso de exportación, se recomienda lo siguiente: Utilizar un proceso automatizado para realizar los backups Crear un plan de contingencia en caso de que la exportación falle. 5 La implementación de estas recomendaciones haría que el proceso de exportación sea más eficiente y eficaz. Cambios en el código Los cambios en el código se describen a continuación: Archivo 5 ○ Se agregó un nuevo método para registrar una oferta de capacitación. Archivos 3 y 1 ○ Se corrigieron algunos errores en el código. Archivos 4 y 2 ○ Se agregaron nuevas funcionalidades para mejorar el proceso de inscripción. Cambios en el comportamiento Los cambios en el comportamiento se describen a continuación: Archivo 5 ○ El nuevo método para registrar una oferta de capacitación facilita el proceso de inscripción de usuarios. Archivos 3 y 1 ○ Los errores corregidos mejoran la estabilidad del sistema. Archivos 4 y 2 6 ○ Las nuevas funcionalidades mejoran la experiencia del usuario al inscribirse en un curso. Archivo 1: participantes_registro.js JavaScript function registrarOferta() { Swal.fire({ title: '¿Está seguro que desea inscribirse al curso seleccionado?', icon: 'warning', showCancelButton: true, focusConfirm: false, confirmButtonColor: '#0a0a0a', cancelButtonColor: '#B91116', confirmButtonText: 'Si, inscribirme', cancelButtonText: 'No, cancelar', }).then((result) => { if (result.isConfirmed) { $.ajax({ url: '../php/sitios/participantes_registro.php?action=registrarOferta', 7 type: 'POST', dataType: 'json', data: { id_oferta:$('#txtIdOferta').val() }, success: function() { getOfertaRegistro(); getOfertaRegistroD($('#txtIdOferta').val()); Swal.fire({ title: 'Registro', text: 'Se ha registrado al curso', icon: 'success', confirmButtonColor: '#0a0a0a', confirmButtonText: 'Aceptar' }) }, error: function (data) { contenidosRecibidos = data.responseText.split("Indiviual"); //quit keys and commas from the array contenidosRecibidos = data.responseText.replace(/['"]+/g, ''); 8 //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("Indiviual", ""); //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("Array", ""); //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("(", ""); //Quit the last character of the string contenidosRecibidos = contenidosRecibidos.substring(0, contenidosRecibidos.length - 1); //quit the first three characters of the string contenidosRecibidos = contenidosRecibidos.substring(13); //quit the numbers of the string contenidosRecibidos = contenidosRecibidos.replace(/[0-9]/g, ''); //acentuar la primera U contenidosRecibidos = contenidosRecibidos.replace("U", "Ú"); //acentuar la palabra inscripción 9 contenidosRecibidos = contenidosRecibidos.replace("inscripcion", "inscripción"); //si el string contiene "exitosamente" entonces se muestra el icono de exito if (contenidosRecibidos.includes("exitosamente")) { Swal.fire({ text: contenidosRecibidos, icon: 'success', confirmButtonColor: '#0a0a0a', confirmButtonText: 'Aceptar' }) } else { Swal.fire({ text: contenidosRecibidos, icon: 'info', iconColor: '#B91116', confirmButtonColor: '#0a0a0a', confirmButtonText: 'Aceptar' }) } 10 } }) } else if (result.dismiss === Swal.DismissReason.cancel) { Swal.fire({ title: 'Cancelado', icon: 'error', iconColor: '#90CAF9', confirmButtonColor: '#0a0a0a', confirmButtonText: 'Aceptar' })}})} hace lo siguiente: Muestra una ventana emergente al usuario para confirmar que desea inscribirse al curso seleccionado. Si el usuario confirma, realiza una llamada AJAX al servidor para registrar la inscripción. Si la inscripción se realiza correctamente, muestra un mensaje de éxito al usuario. Si la inscripción falla, muestra un mensaje de error al usuario. La función registrarOferta() se puede utilizar en cualquier lugar de la aplicación donde se quiera permitir al usuario inscribirse a un curso. 11 Archivo 2: gestion_grupos.js JavaScript function regParticipanteG(id_personal,id_oferta) { Swal.fire({ title: '¿Está seguro que desea registrar al participante en el curso seleccionado?', text: "¡Si no está seguro, puede cancelar la acción!", icon: 'warning', showCancelButton: true, focusConfirm: false, confirmButtonColor: '#0a0a0a', cancelButtonColor: '#B91116', confirmButtonText: 'Si, registrar', cancelButtonText: 'No, cancelar', }).then((result) => { if (result.isConfirmed) { $.ajax({ url: '../php/sitios/listas.php?action=registrarOferta', type: 'POST', dataType: 'json', data: { 12 id_personal:id_personal, id_oferta:id_oferta }, success: function(data){ getOfertaD(id_oferta); $("#modParticipante").hide(); }, error: function(data){ contenidosRecibidos = data.responseText.split("Indiviual"); //quit keys and commas from the array contenidosRecibidos = data.responseText.replace(/['"]+/g, ''); //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("Indiviual", ""); //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("Array", ""); //quit the word Indiviual from the string contenidosRecibidos = contenidosRecibidos.replace("(", ""); 13 //Quit the last character of the string contenidosRecibidos = contenidosRecibidos.substring(0, contenidosRecibidos.length - 1); //quit the first three characters of the string contenidosRecibidos = contenidosRecibidos.substring(13); //quit the numbers of the string contenidosRecibidos = contenidosRecibidos.replace(/[0-9]/g, ''); Swal.fire({ title: 'Registro', text: contenidosRecibidos, icon: 'info', confirmButtonColor: '#0a0a0a', confirmButtonText: 'Aceptar' }).then((result) => { if (result.isConfirmed) { getOfertaGD(id_oferta); } }) 14 $("#modParticipante").hide(); }})}})} hace lo siguiente: 1. Muestra una ventana emergente al usuario para confirmar que desea registrar al participante en el curso seleccionado. 2. Si el usuario confirma, realiza una llamada AJAX al servidor para registrar la inscripción. 3. Si la inscripción se realiza correctamente, actualiza la lista de participantes del curso y oculta el modal. 4. Si la inscripción falla, muestra un mensaje de error al usuario y oculta el modal. Explicación del código: Líneas 1-10: Se declara la función regParticipanteG() que recibe dos parámetros: id_personal y id_oferta. Estos parámetros representan el identificador del participante y el identificador del curso, respectivamente. Líneas 12-25: Se muestra una ventana emergente al usuario para confirmar que desea registrar al participante en el curso seleccionado. Si el usuario confirma, se realiza una llamada AJAX al servidor para registrar la inscripción. Líneas 27-34: Si la inscripción se realiza correctamente, se actualiza la lista de participantes del curso y se oculta el modal. 15 Líneas 36-46: Si la inscripción falla, se muestra un mensaje de error al usuario y se oculta el modal. El código JavaScript utiliza la biblioteca Swal para mostrar las ventanas emergentes. La biblioteca Swal es una biblioteca de JavaScript que se utiliza para crear ventanas emergentes personalizadas. Archivo 3: páginas/participantes_registro.php HTML El código PHP de la página incluye la biblioteca Swal para mostrar ventanas emergentes personalizadas al usuario. Esto le permite al código PHP confirmar ciertas acciones con el usuario y mostrarle mensajes de error en caso necesario. Archivo 4: paginas/gestion_administracion.php HTML 16 Este código JavaScript incluye la biblioteca Swal para mostrar ventanas emergentes personalizadas al usuario. Esto le permite al código PHP confirmar ciertas acciones con el usuario y mostrarle mensajes de error en caso necesario. Archivo 5: Procedimiento almacenado sp_registrar_oferta USE [siaf] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_registrar_oferta] @uid VARCHAR(50), @sid INT, @id_oferta INT, @id_personal VARCHAR(50) AS BEGIN SET NOCOUNT ON; DECLARE @rows INT DECLARE @id_periodo INT DECLARE @id_curso INT DECLARE @capacidad INT --BEGIN TRY --EXEC poner_sp_de_seguridad_aqui --END TRY --BEGIN CATCH 17 --DECLARE @msg NVARCHAR(4000); --DECLARE @sev INT; --DECLARE @sta INT; --SELECT @msg=ERROR_MESSAGE(), @sev=ERROR_SEVERITY(), @sta=ERROR_STATE(); --RAISERROR (@msg, @sev, @sta) --RETURN --END CATCH SELECT @id_curso=id_curso, @id_periodo=id_periodo, @capacidad=capacidad FROM oferta WHERE id_oferta=@id_oferta SELECT @rows=COUNT(*) FROM inscripcion_v WHERE id_personal=@id_personal AND id_periodo=@id_periodo AND id_curso=@id_curso and id_oferta=@id_oferta ----- IF @rows>0 THROW 51000, 'Ya existe un curso similar registrado.', 1 SELECT @rows=COUNT(*) FROM inscripcion_v WHERE id_oferta=@id_oferta AND id_resultado NOT IN (5,6) IF @rows>=@capacidad AND @capacidad>0 THROW 51000, 'No se pudo hacer el registro debido a que se ha excedido la capacidad de participantes para esta oferta.', 1 ELSE PRINT 'Registro Exitoso'; INSERT INTO inscripcion (id_personal, id_oferta, id_resultado, observaciones, fecha) VALUES (@id_personal, @id_oferta, 0, '', GETDATE()) 18 INSERT INTO inscripcion_audit (id_personal, id_oferta, id_resultado, calificacion, observaciones, fecha, uid) VALUES (@id_personal, @id_oferta, 0, NULL, '(inscripción)', GETDATE(), @uid) END El procedimiento almacenado sp_registrar_oferta se utiliza para registrar un participante en una oferta de capacitación. El procedimiento recibe los siguientes parámetros: @uid: El identificador de usuario del usuario que está realizando la inscripción. @sid: El identificador de sesión del usuario que está realizando la inscripción. @id_oferta: El identificador de la oferta de capacitación en la que se desea inscribir al participante. @id_personal: El identificador del participante que se desea inscribir. El procedimiento comienza verificando si el participante ya está inscrito en la oferta de capacitación. Si ya está inscrito, se lanza una excepción con el mensaje "Ya existe un curso similar registrado". Luego, el procedimiento verifica si la oferta de capacitación está llena. Si está llena, se lanza una excepción con el mensaje "No se pudo hacer el registro debido a que se ha excedido la capacidad de participantes para esta oferta". 19 Si la inscripción es exitosa, el procedimiento inserta un registro en la tabla inscripcion con los siguientes datos: id_personal: El identificador del participante que se inscribió. id_oferta: El identificador de la oferta de capacitación en la que se inscribió el participante. id_resultado: El identificador del resultado de la inscripción, que en este caso es 0, que significa "Inscrito". observaciones: Observaciones sobre la inscripción. fecha: La fecha de la inscripción. El procedimiento también inserta un registro en la tabla inscripcion_audit con los siguientes datos: id_personal: El identificador del participante que se inscribió. id_oferta: El identificador de la oferta de capacitación en la que se inscribió el participante. id_resultado: El identificador del resultado de la inscripción, que en este caso es 0, que significa "Inscrito". calificacion: La calificación de la inscripción, que en este caso es NULL. observaciones: Observaciones sobre la inscripción. fecha: La fecha de la inscripción. uid: El identificador de usuario del usuario que realizó la inscripción. Explicación del código: Líneas 1-12: Se declaran los parámetros del procedimiento. 20 Líneas 14-17: Se declaran las variables que se utilizarán en el procedimiento. Líneas 20-23: Se consulta la tabla oferta para obtener el identificador del curso, el identificador del período y la capacidad de la oferta de capacitación. Líneas 25-28: Se consulta la tabla inscripcion_v para verificar si el participante ya está inscrito en la oferta de capacitación. Líneas 30-33: Si el participante ya está inscrito, se lanza una excepción. Líneas 35-38: Se consulta la tabla inscripcion_v para verificar si la oferta de capacitación está llena. Líneas 40-43: Si la oferta de capacitación está llena, se lanza una excepción. Líneas 45-48: Si la inscripción es exitosa, se inserta un registro en la tabla inscripcion. Líneas 49-52: Si la inscripción es exitosa, se inserta un registro en la tabla inscripcion_audit. Errores: El procedimiento puede lanzar las siguientes excepciones: 51000: Si el participante ya está inscrito en la oferta de capacitación, se lanza una excepción con el mensaje "Ya existe un curso similar registrado". 51000: Si la oferta de capacitación está llena, se lanza una excepción con el mensaje "No se pudo hacer el registro debido a que se ha excedido la capacidad de participantes para esta oferta". 21 Conclusión La guía de exportación para los módulos reparados de inscripción proporciona instrucciones detalladas sobre cómo implementar los cambios necesarios para solucionar los problemas encontrados en estos módulos de inscripción, son relativamente simples de implementar y no requieren cambios importantes en el código existente. Los cambios realizados son los siguientes: En el archivo js/participantes_registro.js, se ha agregado una ventana emergente para confirmar que el usuario desea inscribir al participante en el curso seleccionado. En el archivo js/gestion_grupos.js, se ha agregado una función para registrar a un participante en un curso. En el archivo paginas/participantes_registro.php, se ha agregado una validación para verificar que el participante no esté inscrito en el curso seleccionado. En el archivo paginas/gestion_administracion.php, se ha agregado una validación para verificar que el usuario tenga los permisos necesarios para registrar a un participante en un curso. Implementar los cambios en el siguiente orden: Archivo 5 Archivos 3 y 1 Archivos 4 y 2 Siguiendo estas instrucciones, se puede garantizar que los cambios se implementen correctamente y que no se produzcan problemas en el funcionamiento del SIAF.

Use Quizgecko on...
Browser
Browser