Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/07/2007, 07:33
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Comprobación cálculo dinámico

Va quedando más claro, pero aún así estoy liado. Es un problema complejo que hay que tener bien entendido para llevar a cabo una programación lo más inteligente y eficiente posible.

Corrígeme si me equivoco:

Tenemos las Áreas.
En cada Área puede haber muchas materias. Cada área tiene disponible un cupo de horas semanales y un cupo de horas totales (que son independientes las unas de las otras).

Tenemos las Materias.
Cada materia pertenece a un área. Cada materia tiene un número de horas semanales, y un número de horas totales (que son independientes las unas de las otras).


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.

Y el problema de todo esto es que no tengo por ningún sitio las horas totales areaB ni del areaC; que tengo las horas que me quedan disponibles del areaB, ¿no es asi?

--------------


En ese caso lo que yo haría sería casi casi descargarme en javascript en el documento el total de las horas disponibles de cada área, las horas que ocupa una materia, y a qué área pertenece cada materia.

Luego con javascript calculamos ya los movimientos, restas de allí, sumas aquí... lo que sea. Pero veo que por un lado o por otro vamos a necesitar todos esos datos disponibles en javascript. Para ello podrías usar la estructura de "clases-objetos" que tiene javascript. Te hago un esbozo que podrías utilizar:

Código PHP:
function area(nombre,horasTotales,horasSemanales) {
    
this.nombre nombre;
    
this.horasTotales horasTotales;
    
this.horasSemanales horasSemanales;
    
this.susMaterias = new Array();
    
this.getHorasTotalesDisponibles = function() {
        
//sumamos todas las horasTotales de las materias que tiene este área, y el resultado se lo restamos a this.horasTotales
    
}
    
this.getHorasSemanalesDisponibles = function() {
        
//sumamos todas las horasSemanales de las materias que tiene este área, y el resultado se lo restamos a this.horasSemanales
    
}
    
this.cabeMateria = function( objMateria ) {
        
// devuelve true si la materia cabe según las horasTotalesDisponibes y las horasSemanalesDisponibles
    
}
    
this.anyadirMateria = function( objMateria ) {
        
this.susMateriasthis.susMaterias.length ] = objMateria;
    }
    
this.eliminarMateria = function( objMateria ) {
        
//contrar objMateria en this.susMaterias y eliminarla del array
    
}
}


function 
materia(nombre,horasTotales,horasSemanales) {
    
this.nombre nombre;
    
this.horasTotales horasTotales;
    
this.horasSemanales horasSemanales;
}


var 
area1 = new area("Área sociolingüística"10010);
var 
area2 = new area("Área Matemáticas"20020);
var 
area3 = new area("Área taller"50050);
//...
var materia1 = new materia("Materia Lengua PGS"404);
var 
materia2 = new materia("Matemáticas"5010);
//...

// añado materia1 a area1
if( area1.cabeMateria(materia1) )
    
area1.anyadirMateria(materia1);
//...
//... 
No sé si estás familiarizado con este tipo de sintaxis, yo creo que es la más legible.



Pero sí, definitivamente creo que tendrás que volcar todas las áreas, asignaturas y sus respectivas características al código javascript, para después poder operar...






O eso.. o hacer las comprobaciones mediante AJAX, pero no se me da tan bien, tendrías que preguntar en su foro.



Un saludo y corrígeme si me equivoco.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.