Hola Emilio,
Antes de meternos en las alternativas técnicas, dejame hacer un comentario sobre esta cita:
Como me habrás escuchado repetir hasta el hartazgo en el curso de personalizaciones, el momento del cambio de versión es una gran oportunidad para revisar procesos. Sería ideal si pudieran coordinar entre las Unidades Académicas que centralicen la forma de generación de legajo, que reduciría bastante la complejidad de la personalización. Ahora, si esta unificación no puede darse, te dejo a continuación una propuesta sobre cómo encarar el tema.
Ante la necesidad de modificar una función o vista, generar una nueva en lugar de modificar la existente minimiza la probabilidad de errores a futuro, sobre todo en los extremos de la versión propia, es decir, cuando desde el SIU sacamos nuevas versiones y hay que trasladar las personalizaciones.
Esto implica un doble trabajo, porque no sólo hay que personalizar la función, sino también el lugar donde se utiliza. Pero hacemos las cosas bien una vez y casi nos aseguramos no tener conflictos severos en los cambios de versiones. Es una inversión a largo plazo.
Con respecto al caso del legajo, en base al escenario más complejo de los planteados (que no se pueda unificar la forma de generación de legajo), se podría:
-
En algún lugar del proceso “Generar Legajos”, recolectar un dato más con un formulario: “Responsable Académica”
-
En la clase personalizacion/php/nucleo/matriculas/actualizaciones/generacion_legajos/legajos.php, ya tenemos una clase vacía que extiende a legajos_nucleo, donde se resuelve el quid de la cuestión. En particular, el legajo se genera con esta función PHP, que hace la invocación a la función Postgres:
static function get_nuevo_nro_legajo($unico_legajo, $inscripcion, $persona, $propuesta, $ubicacion)
Habría que crear una nueva función en esa clase vacía, que la sobrecargue con el parámetro adicional $ra:
static function get_nuevo_nro_legajo($unico_legajo, $inscripcion, $persona, $propuesta, $ubicacion, $ra)
{
switch ($ra) {
case 'x':
$legajo = self::generar_legajo_raX($unico_legajo, $inscripcion, $persona, $propuesta, $ubicacion);
break;
case 'y':
$legajo = self::generar_legajo_raY($unico_legajo, $inscripcion, $persona, $propuesta, $ubicacion);
break;
...
}
return $legajo;
}
Cada RA debería implementar dentro de esa clase su función propia para la generación de legajo.
- Habría que personalizar los lugares donde se consume esa función para invocar a la función sobrecargada con el nuevo parámetro. Por ejemplo, act_inscripciones_nucleo → actualizar_legajo y toda la cadena de invocación.
Cualquier cosa, volvenos a escribir y lo seguimos viendo.
Saludos,
Fernando