Control de correlativas en materias de plan anterior

Buenas Tardes:

Hemos habilitado la opción para que los alumnos puedan rendir materias de planes anteriores. Estuve analizando el control de correlativas (ctr_corre_iex_fech) y creo que habría un error, a ver si me pueden ayudar, pego las partes del código donde surge mi duda…


	-- Recupero Plan y Version con que regularizo la materia.
	EXECUTE PROCEDURE sp_planver_uregmat (pUnidadAcademica, pCarrera, pLegajo, pMateria) INTO vcPlan, vcVersion;
                IF vcPlan IS NULL OR vcVersion IS NULL THEN
		LET iStatus = -1 ;
		LET vcMsg = '800000, No se regularizó la Materia en algún Plan anterior del Alumno ' || pLegajo; 	
		RETURN iStatus, vcMsg ;
	END IF;
   END IF;

Y lo que sigue a continuación no encuentro el sentido…


   -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   -- veo si se acepta controlar correlativas con el plan, version con el que curso  la materia
   -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   EXECUTE PROCEDURE sp_param_sistema('controla_correlativas_actuales') INTO sValorParam ;
   IF sValorParam = 'N' THEN
	-- No controla con las correlativas del Plan-Version Actual. Busco ultima regularidad de la materia
	EXECUTE PROCEDURE sp_planver_uregmat (pUnidadAcademica, pCarrera, pLegajo, pMateria) INTO vcPlanRegular, vcVersionRegular;
	IF vcPlanRegular IS NOT NULL AND vcVersionRegular IS NOT NULL THEN
		-- No tiene una cursada de la materia en un plan anterior, entonces asigno el plan version actual.
		LET vcPlan  = vcPlanRegular;
		LET vcVersion  = vcVersionRegular;
	END IF;
   END IF;  

Acá entiendo que verifica si el control debe ser con correlativas del plan actual o del plan con el que se cursó la materia (parametro = N), en este último caso ejecuta el procedimiento que devuelve el plan-version de la materia y le vuelve a asignar el plan-version que ya le había asignado en el código anterior!!! es decir que aún cuando se use el parámetro=S (controla con correlativas actuales), nunca lo haría…

No se si se entiende el punto, al menos a nosotros no nos complica en nada porque las materias cursadas en planes anteriores deben ser controladas con las correlativas del plan en que se curso, de todas formas quería compartirlo.

Saludos

Ezequiel Molina
Facultad de Ciencias Agrarias - UNJu

Hola Ezequiel, no encuentro error, veamos el codigo por partes:

  1. Selecciona el Plan y la Version que se encuentra el alumno en la fecha de inscripción a examen y lo guarda en vcPlan y vcVersion
BEGIN
   -- inicializo con OK, porque puede ser que termine sin llegar al final
   LET iStatus = 1 ;
   LET vcMsg = '800320' ;

   Let dFecha = to_date( pFecha, "%d-%m-%Y");

   -- recupero el (plan, version) actual de la carrera
   EXECUTE PROCEDURE sp_plan_de_alumno (pUnidadAcademica, pCarrera, pLegajo, dFecha ) INTO vcPlan, vcVersion;
   IF (vcPlan IS NULL OR vcVersion IS NULL) THEN
	LET iStatus = -1 ;
	LET vcMsg = '800361' || ',' || pLegajo; 	
	RETURN iStatus, vcMsg ;
   END IF ;

  1. A continuación verifica si la materia en la que se esta inscribiendo a examen es del plan actual del alumno o de un plan anterior que ya no existe mas en su plan actual.
    En el caso que suceda esto, se verifica si la institución permite inscribirse a rendir examen en de una materia de un plan anterior, sin lo lo permite sale con error.
    Si se permite rendir examen de una materia de un plan anterior, entonces busca en que plan y version cursó esa materia y lo guarda estos datos en vcPlan y vcVersion (reemplazando el valor del plan y version actual del alumno del punto 1)
   
   -- Verifico si la materia es del Plan Actual del Alumno, sino recupero plan y versoin con que la cursó
   -- Esto solo si la Unidad Academica permite Rendir materias de Planes Anteriores.
   IF (SELECT COUNT(*) FROM sga_atrib_mat_plan
	WHERE unidad_academica = pUnidadAcademica
	AND carrera = pCarrera
	AND plan      = vcPlan
	AND version = vcVersion
	AND materia = pMateria) = 0 THEN

	LET vcRendirPlanAnt = 'N';
	-- Verifico si el alumno puede rendir materias de planes anteriores.
	EXECUTE PROCEDURE sp_param_sistema('rendir_regul_planes_anteriores') INTO vcRendirPlanAnt;
	IF vcRendirPlanAnt <> 'S' THEN
		-- Error. la materia no es del Plan Actual del Alumno y no puede rendir materias de planes anteriores.
		LET iStatus = -1 ;
		LET vcMsg = '800000, La materia ' || pMateria || ' no es del Plan Actual del Alumno ' || pLegajo; 	
		RETURN iStatus, vcMsg ;
	END IF;

	-- Recupero Plan y Version con que regularizo la materia.
	EXECUTE PROCEDURE sp_planver_uregmat (pUnidadAcademica, pCarrera, pLegajo, pMateria) INTO vcPlan, vcVersion;
                IF vcPlan IS NULL OR vcVersion IS NULL THEN
		LET iStatus = -1 ;
		LET vcMsg = '800000, No se regularizó la Materia en algún Plan anterior del Alumno ' || pLegajo; 	
		RETURN iStatus, vcMsg ;
	END IF;
   END IF;

  1. Este es el código que confunde…
    Aqui se analiza con que plan y version se controlaran las correlativas, si con las correlativas definidas en el plan y version actual del alumno (controla_correlativas_actuales = S) o con el plan y version con la que cursó (ultima cursada vigente y aprobada) de la materia
  • En el caso que controla_correlativas_actuales = S, entonces no entra en este codigo y evalua las correlativas con lo que esta cargado en vcPlan y vcVersion (ya sea los datos actuales, o si la materia no es del plan actual, los datos de plan y version de la ultima cursada vigente aprobada que fue recuperada en el punto 2)

  • En el caso que controla_correlativas_actuales = N, entonces busca la ultima cursada vigente y aprobada de la materia usando el mismo proceso del punto 2 y si la encuentra entonces asigna estos valores a vcPlan y vcVersion

Quizas aqui es donde parezca código repetido, pero solo se daria si la materia no es del plan actual del alumno y controla_correlativas_actuales = N. Se supone que si se cumple esto, las dos veces que se llama al procedure sp_planver_uregmat debe devolver el mismo resultado!!!

   
   -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   -- veo si se acepta controlar correlativas con el plan, version con el que curso  la materia
   -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   EXECUTE PROCEDURE sp_param_sistema('controla_correlativas_actuales') INTO sValorParam ;
   IF sValorParam = 'N' THEN
	-- No controla con las correlativas del Plan-Version Actual. Busco ultima regularidad de la materia
	EXECUTE PROCEDURE sp_planver_uregmat (pUnidadAcademica, pCarrera, pLegajo, pMateria) INTO vcPlanRegular, vcVersionRegular;
	IF vcPlanRegular IS NOT NULL AND vcVersionRegular IS NOT NULL THEN
		-- No tiene una cursada de la materia en un plan anterior, entonces asigno el plan version actual.
		LET vcPlan  = vcPlanRegular;
		LET vcVersion  = vcVersionRegular;
	END IF;
   END IF;  

 LET falloCorrelativa = 'N';

  1. A partir de aqui ya se realiza el control de correlativas buscando las correlativas definidas en el plan y version de plan definidos en vcPlan y vcVersion.

  -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  -- Controlo las correlatividades de la materia para Aprobar
  -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Alejandro:

Gracias por tomarte el tiempo de explicar el código. Es verdad, no hay error. No había considerado la situación de que una materia exista en ambos planes y que se permita controlar con correlativas del plan actual o del plan viejo. Ahora me quedó claro.

Saludos!

Ezequiel Molina
Fac. de Cs. Agrarias - UNJu

Gracias igual a vos por analizar el codigo y avisarnos, aunque en este caso el error no era tal, esta bueno que nos informen cuando detectan algun error.
Saludos!

Hola Ezequiel, nosotros estamos en la misma , por este año y en algunas materias debe controlar correlativas del plan viejo. Tenemos una matriz de equivalencia para el cambio de plan. Lo que hicimos es personalizar el control ctr_corrinscurfech. Si te sirve te lo paso, te comento es algo provisorio por unos meses pero funciona. Si queres te lo paso

Juan José:

Por el momento no tuvimos problemas, en nuestro caso configuramos los parámetros para que permita inscribir a materias de planes anteriores y como son materias que no están en el plan nuevo, las controla con las correlativas del plan original. Pero si llegado el caso tenemos alguna complicación, cuento con tu ayuda! Gracias!

Ezequiel Molina
Fac. de Cs. Agrarias - UNJu