Tengo un ML con algunos ef que desactivo de acuerdo a un valor ($this->dep(‘certifica’)->desactivar_efs($columnas);) en el método conf del ML.
Luego he extendido el comportamiento del ml en js, con lo que intento que dependiendo del ef que esté activo se actualize el porcentaje acumulado que corresponda. El tema es que el problema está en el código que uso para saber si un ef determinado está activo. La actualizacion no funciona.
¿Como puedo solucionarlo?
{$this->objeto_js}.evt__porc_realizado__procesar = function(es_inicial, fila) {
if (this.ef('porc_acumulado_mat').ir_a_fila(fila).input().type != 'hidden'){
{$this->objeto_js}.refrescar_porcentajes(es_inicial, fila);
}elseif (this.ef('porc_acumulado_mo').ir_a_fila(fila).input().type != 'hidden'){
{$this->objeto_js}.refrescar_porcentajes_mo(es_inicial, fila);
}
}
{$this->objeto_js}.refrescar_porcentajes = function(es_inicial, fila) {
var porcentaje_actual = this.ef('porc_realizado').ir_a_fila(fila).valor();
var porcentaje_acumulado = this.ef('porc_acumulado_mat').ir_a_fila(fila).valor();
var acumulado_actual = porcentaje_acumulado + porcentaje_actual;
if (porcentaje_acumulado > 100) {
this.ef('porc_realizado').ir_a_fila(fila).set_error('El porcentaje acumulado más el actual no deben superar 100%');
}else{
this.ef('porc_acumulado_mat').ir_a_fila(fila).set_estado(acumulado_actual);
}
}
Si cambio la condicion this.ef(‘porc_acumulado_mat’).ir_a_fila(fila).input().type != ‘hidden’ por this.ef(‘porc_acumulado_mat’).ir_a_fila(fila).activo()
funciona en la 1er condicion pero no en la segunda.
¿Tiene q ver desactivar_efs en esto?
Gracias
Saludos
el metodo desactivar_efs lo que hace es evitar que los mismos se envien al cliente durante ese pedido de pagina, por lo que en caso de usarlo hay que tener cuidado con que el javascript que se envia no este accediendo siempre a esos efs de manera continua o se generara un error. No se cuales son las columnas que estas desactivando para ese pedido de pagina pero si es alguna de las que estan en los if entonces es por eso que no te funciona.
Muy bien por el cambio de la condicion, con la primera que tenias lo que chequeabas era que el tipo del elemento html, con la nueva lo que chequeas es efectivamente que el EF sea editable por el usuario.
Contame un poco mas como viene la mano asi lo sacamos andando :).
Lo que yo te decia es que esta llamada $this->dep(‘certifica’)->desactivar_efs(‘porc_acumulado_mo’); hace que el ef porc_acumulado_mo no exista en el cliente durante ese pedido de pagina, con lo cual el segundo condicional no te va a funcionar sencillamente porque el EF no existe. Una alternativa mas practica me parece que seria hacer lo siguiente.
if($tipo[0]['tipo_id']==1 OR $tipo[0]['tipo_id']==2)
{
$this->dep('certifica')->ef('porc_acumulado_mo')->set_solo_lectura();
}else{
$this->dep('certifica')->ef('porc_acumulado_mat')->set_solo_lectura();
}
$form_ml->set_datos($datos);
}
De esta forma van a seguir existiendo ambos EFs en el cliente, solo que no sera editable el que no necesites.
Entiendo lo que me sugerís pero yo necesito ocultar el ef q no corresponda para el tipo de operacion, q no se vea xq no se necesita, es uno u otro dependiendo del tipo.
Y luego al momento de actualizar, verifico cual es el ef activo y ese es el q modifico.
Solucionado!!!
Como JS no encontraba los efs que fueron desactivados en php (como dijo Richard), cambie la validacion para q revisara si estaba ese ef y ahi funcionó.
El código de JS quedó así y el resto igual
{$this->objeto_js}.evt__porc_realizado__procesar = function(es_inicial, fila){
if (this.ef('porc_acumulado_mat')){
{$this->objeto_js}.refrescar_porcentajes(es_inicial, fila);
}
else if (this.ef('porc_acumulado_mo')){
{$this->objeto_js}.refrescar_porcentajes_mo(es_inicial, fila);
}
}