Cita:
Iniciado por marcospuig "Teniendo este planteamiento, lo que pretendemos es editar una Materia diciendo: Si materia4 pertenece a areaB, quiero que materia4 pertenezca a areaC. Con lo cual tengo que restarle a areaB de su cantidad de horasSemanales y de su cantidad de horasTotales las correspondientes a materia4, y esas mismas cantidades de hora sumarselas a areaC."
No es eso, las horas totales son siempre las mismas y están guardadas con el área, no tenemos que restarles ni sumarles nada a un área si decidimos cambiar la materia de un área a otra, simplemente tenemos que volver a calcular cuántas horas quedan libres en el área nuevo para ver cuántas les podemos asignar a esa materia nueva, es deicr, no se guarda en ningún sitio las 'horas disponibles' de un área, sino que siempre están guardadas las 'horas totales' del área, y, a partir de ahí calculamos sumando todas las materias que están en ese momento en ese área para ver cuántas horas quedan libres. Espero haberme explicado mejor, si no es así, házmelo saber.
Sí, es verdad, lo he vuelto a releer ahora y me he hice un lío con esa frase. Pero el código que postee expresa la idea bastante bien.
Lo que debería decir mi párrafo es:
Teniendo este planteamiento, lo que pretendemos es editar una Materia diciendo: Si materia4 pertenece a areaB, quiero que materia4 pertenezca a areaC. Con lo cual tengo que sumarle (quitarle la materia=sumarle horas disponibles) a areaB de su cantidad de horasSemanalesDisponibles y de su cantidad de horasTotalesDisponibles las correspondientes a materia4, y esas mismas cantidades de hora restárselas (añadir la materia=quitarle las horas disponibles) a areaC.
Bien, lo había entendido, pero lo escribí mal. La cantidad de horas totales y semanales no se modifica, pero las disponibles (el cálculo que tú mencionas, y haces en PHP) sí se modifica. Yo te proponía hacer ese cálculo en js, y jugar con las operaciones en js.
Si te decides a implementar el sistema como te he comentado, sería una buena idea. Si no... podemos simplificar. Veamos:
Cita:
Iniciado por marcospuig Por tanto, se me ocurre que una solución podría ser que con un evento onChange() en el select (es decir cada vez que el usuario modifique el área) tendríamos que pasarle el número de horas totales y el número de horas semanales de ese área, y eso es lo que no sé cómo se hace, ni siquiera sé si se puede hacer, porque creo que habría que hacer una consulta, y recoger los valores y pasárselos cada vez que el usuario cambie el área, ¿entiendes?
Es una buena idea. Hacer una consulta a la BD dinámicamente, sin recargar la página se llama AJAX. Podemos implementarlo así o volcar los datos a la página:
En el onchange del select lo primero que tienes que hacer es ver si la materia cabe en la área seleccionada. Para ello necesitas las horasTotales y las horasSemanales
de cada área en el documento (además de las disponibles ya calculadas en PHP, o calculadas en el javascript), guardadas en variables o en cualquier sitio del documento. Pero lo necesitas primero para validar. De hecho, luego operaríamos con esas horas, así que lo primero sería resolver eso.
Valen los dos sistemas, el de los objetos, y el de sin objetos. Con objetos se ve mejor, pero es más código. Sin objetos las operaciones son más "a pelo", hay que verlas mejor a la primera y entenderlas (y dentro de un mes no te acordarás de lo que has hecho).
Tú decides, pero hagas lo que hagas necesitas los datos de las horas en la página.