validar dato antes de actualizar BD

Gente, tengo un cuadro el cual se carga con datos de porcentajes permitidos por cada registro, es decir no debo permitir “Agregar” o “Modificar” un registro con un valor que supere el total acumulado de 100%, con lo cual en el formulario tengo el siguiente código:


if (!$this->dep('datos')->esta_cargada()){
			//Si es nuevo verifica que el puntaje acumulado no supere el 100%
			if ($this->dep('datos')->tabla('sgp_concepto_calificacion')->validar_puntaje($datos['puntaje_max']))
			{
				//Si es menor a 100% permite la grabación del nuevo registro
				$this->dep('datos')->tabla('sgp_concepto_calificacion')->set($datos);	
			} else {
				//Si es mayor, muestra un mensaje de error y no graba
				toba::notificacion()->agregar($datos['puntaje_max'].' El Puntaje Total Acumulado de los Conceptos supera el 100%', 'error');
			}

El problema es el siguiente, supongamos que tengo 4 registros con valores de 30, 30, 30 y 10. Al querer modificar el ultimo a un valor de 5 por ejemplo la logica me da error ya que en la BD la funcion validar_puntaje totaliza 100 y al sumarle 5 del campo modificado supera los 100 permitidos. Hay alguna forma de guardar o conocer el valor que tenia el campo $datos[‘puntaje_max’] antes de la modificación?.

Gracias.

Hola Nicolas,

el problema me parece que es de logica, osea… vos estas sumando todo lo que tenes en registros, mas lo que te manda el formulario… cuando en realidad, lo que envia el formulario puede ser una modificacion de un registro que ya tenes… ese es el caso que no estas contemplando.

En otras palabras, el metodo validar_puntaje no puede hacerse antes del set… salvo que descuentes el valor del registro que estas modificando… sino estas sumando de mas.

Te diria que seria mas sencillo incluir ese control en este punto en cuyo caso sabes cual es la fila que se esta modificando y podes calcular adecuadamente.

Saludos

Se que el problema es de “Logica” es por ello que pido una mano de como poder resolverlo para validar antes de Sincronizar. Podrás darme un ejemplo?

Nicolas,

lo que tenes que hacer es meter el codigo del metodo ‘validar_puntaje’ dentro del metodo que te pase, que como ademas recibe el ID de la fila en la modificacion, te permite descontar el valor anterior a la cuenta y por tanto realizar la suma correcta con el dato nuevo.

Saludos