lugfi / organizador-fiuba

El organizador te ayuda a organizar las materias con un calendario semanal, mostrando superposiciones y permitiendo probar distintas combinaciones de cursos rapidamente.
https://lugfi.github.io/organizador-fiuba/
GNU General Public License v3.0
15 stars 16 forks source link

Error en materias con cursos especiales #33

Open colltoaction opened 7 years ago

colltoaction commented 7 years ago

Cuando una materia tiene cursos especiales que no son para todas las carreras (como Química 6103), la materia puede no aparecer en el organizador.

El problema se da porque no incluímos en el archivo JSON la información sobre a qué carreras aplica cada curso. Sería fácil modificar el parser con algo del estilo:

for (let j = 0; j < materia.cursos.length; j++) {
    const curso = materia.cursos[j];
    if ((curso.carreras & carr.flag) === carr.flag) {
        //// almacenar la correlación carrera-materia-curso
    }
}

Pero luego hay un problema mayor a la hora de ofrecer solo los cursos que corresponden a las carreras seleccionadas como parte de la función llenarLista en el archivo organizador.js. Como todos sabemos, el código del organizador requeriría un refactor importante, y hasta que esto no suceda no veo ninguna solución "sencilla" para el problema.

Intentaré dedicarle un par de horas en algún momento, ya que estamos a principios de cuatrimestre y tenemos datos incorrectos.

edittler commented 7 years ago

Revisé como se persiste el JSON actualmente y pensé una posible solución para estos cursos "especiales". A la izquierda van a ver cómo está representado actualmente y a la derecha cómo debe ser. Perdón por la calidad, hacerlo a mano me parece más ágil.

fullsizerender 2

Para el caso de la derecha, el JSON debería quedar algo así

{
    "carreras": [{
        "codigo": 1, /* es más bien un identificador para la app */
        "nombre": "Civil",
        "materias": []
    }],
    "materias": [{
        "codigo": "6103",
        "nombre": "ANALISIS MATEMATICO II A",
        ...
    }],
    "cursos": [{
        "materia": 6103, /* código de la materia a la que corresponde el curso */
        "carreras": [], /* array de los códigos/ids de las carreras que pueden tomar ese curso */
        "docentes": "nombres de los docentes",
        "clases": [] /* igual a cómo es ahora. */
        ... 
    }] 
}
edittler commented 7 years ago

Creo que la solución que propuse anteriormente no es muy óptima para JSON y JS, por las siguientes razones:

Propongo la siguiente forma de organizar los datos, que además parecería más fácil de generar a partir del PDF.

{
    "carreras": [{
        "codigo": 1, /* es más bien un identificador para la app */
        "nombre": "Civil",
        "materias": []
    }],
    "materias": [{
        "codigo": "6103",
        "nombre": "ANALISIS MATEMATICO II A",
        "cursos": [{
            "carreras": [], /* array de los códigos/ids de las carreras que pueden tomar ese curso */
            "docentes": "nombres de los docentes",
            "clases": [] /* igual a cómo es ahora. */
        ... 
    }] 
}

De esta manera, los cursos siguen estando dentro de la materia pero almacenan las carreras que pueden tomarlos. Al cambiar selección de la carrera sólo se deben recorrer todos los cursos de las materias seleccionadas.

Otra ventaja es que en el PDF ese dato de las carreras está en cada curso, por lo que parsearlo es más sencillo también.