[SOLUCIONADO]Actualizar un formulario desde un FORM ML

Les comento, tengo una pantalla con un formulario y un formulario ml.

El primer formulario tiene un campo que se llama fecha fin y uno fecha inicio. Este se tiene que actualizar dinamicamente con el mayor valor de fecha fin del form ML y con el menor valor de fecha inicio de fecha inicio del ML.

Intente trabajándolo con ajax y js, pero no encuentro la forma para que actualice el estado en el form y lo guarde.

Ayuda?

Hola,

esto tenes que hacerlo todo via JS, lo que podes hacer es previo a hacer el submit en el ML… recorrerlo todo y buscar ambos valores, tanto maximo como minimo.

Esto va a ser un poco pesadito si tenes muchas filas… pero no hay otra.

Una vez tenes esos valores, direccionas el form comun y le asignas los valores a los efs correspondientes.

Luego en el servidor te recomendaria que vuelvas a chequear que esa seleccion se hizo bien… pero en ppio lo podes resolver todo en JS antes de hacer el submit.

Saludos

Intenté hacerlo al final de cada linea cuando se carga la fecha fin, de la siguiente manera. Me basé en un ejemplo que encontré acá en el foro.

Sin embargo, al hacer esto, el formulario queda inutilizable sin ningún mensaje de error.

Gracias



<?php
class form_resoluciones extends toba_ei_formulario_ml
{
	//-----------------------------------------------------------------------------------
	//---- JAVASCRIPT -------------------------------------------------------------------
	//-----------------------------------------------------------------------------------

	function extender_objeto_js()
	{
		echo "
		//---- Procesamiento de EFs --------------------------------
		
		
		
		{$this->objeto_js}.evt__fecha_fin__procesar = function(es_inicial, fila)
		{
			
			
		//ENCONTRAR FECHA MAXIMA
		
		if(!es_inicial){
		var filas = this.filas();
		
		
		var fecha_temp[0]=0;
		var fecha_temp[1]=0;
		var fecha_temp[2]=0;
		
		for (id_fila in filas) {
			var temp = this.ef('fecha_fin').ir_a_fila(filas(id_fila)).get_estado();
			var fecha = temp.split('-');
			
			
			if(fecha[0]>fecha_temp[0] && fecha[1]>fecha_temp[1] && fecha[2]>fecha_temp[2]){
				
				
				fecha_temp[0] = fecha[0];
				fecha_temp[1] = fecha[1];
				fecha_temp[0] = fecha[2];
				
				
				}
					
			}
		
		var fecha_max = fecha_temp[2]+'/'+fecha_temp[1]+'/'+fecha_temp[0];
		this.controlador.dep('formulario').ef('fecha_fin').set_estado(fecha_max);
		
		//ENCONTRAR FECHA MINIMA
		
		
		var filas = this.filas();
		
		
		var fecha_temp[0]=9999;
		var fecha_temp[0]=99;
		var fecha_temp[2]=99;
		
		for (id_fila in filas) {
			var temp = this.ef('fecha_fin').ir_a_fila(filas(id_fila)).get_estado();
			var fecha = temp.split('-');
			
			
			if(fecha[0]<fecha_temp[0] && fecha[1]<fecha_temp[1] && fecha[2]<fecha_temp[2]){
				
				
				fecha_temp[0] = fecha[0];
				fecha_temp[1] = fecha[1];
				fecha_temp[0] = fecha[2];
				
				
				}
					
			}
		
		var fecha_min = fecha_temp[2]+'/'+fecha_temp[1]+'/'+fecha_temp[0];
		this.controlador.dep('formulario').ef('fecha_inicio').set_estado(fecha_min);
		
		}
		
		}
		
		";
	}

}
?>

Hola,

me parece que quizas te estas complicando un poco, lo que podrias hacer es realizar el calculo al momento de hacer el submit.
Solo tendrias que valerte de esto y esto.


function extender_objeto_js()
{
         echo "
           {$this->objeto_js}.submit = function() {
                       var filas = this.filas(),
                              anterior = new Date(1970,0,1),
                              posterior = new Date(),
                              temp_date;
                       for(var ind in filas) {
                              temp_date  = this.ef('fecha_fin').ir_a_fila(filas[ind]).fecha();
                              if (temp_date > anterior) {
                                          anterior = temp_date;
                              }

                              if (temp_date < posterior) {
                                         posterior = temp_date;
                              }
                      }
                      this.asignar_fechas_limite(anterior, posterior);      //Aca seteas los otros efs.
                      ei_formulario_ml.prototyte.submit.call();                //Llama la parent para seguir con el submit.
           }
}

Con algo mas o menos asi tendria que funcar.

Saludos

richard,

antes que nada gracias por la respuesta, pero lo que me queda la duda, es en que momento se ejecuta sumit, porque estos dos formularios se encuentran en la misma pantalla. He intentado con lo que me pasaste pero sigo sin tener suerte.

Lo he intentado también con el método “procesar fecha_fin” y nada



{$this->objeto_js}.evt__fecha_fin__procesar = function()
		{	
			var filas = this.filas(),
                              anterior = new Date(1970,0,1),
                              posterior = new Date(3000,0,1),
                              temp_date;
                       for(var ind in filas) {
                              temp_date  = this.ef('fecha_fin').ir_a_fila(filas[ind]).fecha();
                              if (temp_date > anterior) {
                                          anterior = temp_date;
                              }
							  temp_date  = this.ef('fecha_inicio').ir_a_fila(filas[ind]).fecha();
                              if (temp_date < posterior) {
                                         posterior = temp_date;
                              }
                      }
                      
                      
                      this.controlador.dep('Form').ef('fecha_fin').set_estado(anterior);
                      this.controlador.dep('Form').ef('fecha_inicio').set_estado(posterior);
                     // ei_formulario_ml.prototyte.submit.call();            
			
			
			
			
			
		}


Hola,

tene en cuenta que lo que te queda en anterior y posterior, son objetos Date de javascript… no valores de texto que representan la fecha, por tanto salvo que hayas redefinido el metodo ‘set_estado’ para los efs del otro formulario, dicho llamado no va a asignarte los valores correctamente.

Otra cosa que podrias mirar, es que valor posee temp_date en caso de que alguno de los campos del ML no tenga valor.

Saludos

muchas grracias Richard, lo pude solucionar, era eso.