tildar ef_multi_seleccion_check

Dentro de un Ci estamos trabajando sobre 2 pantallas, en la primera tenemos un cuadro donde se pueden observar organismos de investigacion, y en la segunda un formulario con dos componente… un ef_editable para permitir que el usuario ingrese el nombre del nuevo organismo de investigacion, y un ef_multi_seleccion_check (se carga desde una consulta php de una tabla) que muestra en pantalla varias categorias las cuales se pueden tildar para asociarlas a un organismo de investigacion. Un organismo de investigacion puede estar asociado a varias categorias. En el proceso de Alta se deben almaccenar datos en dos tablas… organismosinvestigacion(padre) y organismosinvestigacion(hijo) vinculados por el idorganismoinvestigacion. No hay complicaciones al guardar un organismo de investigacion nuevo, ya que sincronizan bien las dos tabla. Pero… lo que no podemos lograr es que cuando se seleccione un organismo de investigacion(y el sistema pase a la pantalla edicion) se tilden en el ef_multi_seleccion_check las categorias que ese organismo de investigación tiene asociado… en vez de esto…aparecen todas las opciones destildadas. Entendemos que toba no lo hace automaticamente y que debemos hacerlo a travez del codigo, pero probamos varias opciones y aun no lo podemos lograr. Hicimos Busquedas en el foro y en la docmentacion de la API.
Estamos trabajando con la version 1.5 de toba. Adjunto el CI con el que estamos trabajando y un impresion de la pantalla del formulario. Desde ya agradecemos cualquier sugerencia y/o solucion que puedan brindarnos.
Alejandra.-

<?php
class ci_organismosinvestigacion extends toba_ci
{
	protected $s__datos_formulario;
		
	function get_relacion()
	{
		return $this->dep('datos');
	}
	//-----------------------------------------------------------------------------------
	//---- Eventos ----------------------------------------------------------------------
	//-----------------------------------------------------------------------------------

	function evt__agregar()
	{
		$this->set_pantalla('edicion');
	}

	function evt__cancelar()
	{
		$this->get_relacion()->resetear();
		$this->set_pantalla('seleccion');
	}

	function evt__eliminar()
	{
		if ($this->get_relacion()->esta_cargada()) {
		$this->get_relacion()->eliminar_todo();
		$this->get_relacion()->resetear(); 
		$this->informar_msg('El Organismo de Investigación se Elimino exitosamente', 'info');
		$this->set_pantalla('seleccion');
		}
	}

	function evt__guardar()
	{
		if (!($this->get_relacion()->tabla('organismosinvestigacion')->get_columna('idorganismoinvestigacion')) > 0) {
			$id = $this->get_relacion()->tabla('organismosinvestigacion')->get_max_id_organismo_investigacion() + 1;														
			$this->get_relacion()->tabla('organismosinvestigacion')->set_columna_valor('idorganismoinvestigacion', $id, false);
			
			$categorias=$this->s__datos_formulario['idcategoria'];
			for ($filacategoria = 0;($filacategoria <count($categorias)); $filacategoria++) {
				$org_inv_categ= array (	'idorganismoinvestigacion'=>$id,'idcategoria'=>$categorias[$filacategoria]);
				$this->get_relacion()->tabla('organismosinvestigacioncategorias')->nueva_fila($org_inv_categ);
			}			
		}
						
		$this->get_relacion()->sincronizar();
		$this->informar_msg('El Organismo de Investigación se Guardo exitosamente', 'info');
		$this->get_relacion()->resetear();
		$this->set_pantalla('seleccion');
	}

	//-----------------------------------------------------------------------------------
	//---- formulario -------------------------------------------------------------------
	//-----------------------------------------------------------------------------------

	function conf__formulario($form)
	{
		if ($this->get_relacion()->esta_cargada()) {
			$form->set_datos($this->get_relacion()->tabla('organismosinvestigacion')->get());
			//$form->set_datos($this->get_relacion()->tabla('organismosinvestigacioncategorias')->get());
			//ei_arbol($this->s__datos_cuadro);
			//ei_arbol($form->ef('idcategoria')->get_dato());
			//ei_arbol($form->ef('idcategoria')->set_estado());
			//$form->ef('idcategoria')->set_estado('1','true');
			//ei_arbol($form->ef('idcategoria')->get_lista_parametros());
		}
	}

	function evt__formulario__modificacion($datos)
	{
		$this->get_relacion()->tabla('organismosinvestigacion')->set($datos);
		$this->s__datos_formulario = $datos;
	}
	//-----------------------------------------------------------------------------------
	//---- cuadro -----------------------------------------------------------------------
	//-----------------------------------------------------------------------------------

	function conf__cuadro(toba_ei_cuadro $cuadro)
	{
		$cuadro->set_datos($this->get_relacion()->tabla('organismosinvestigacion')->get_listado());
	}

	function evt__cuadro__seleccion($datos)
	{
		$this->get_relacion()->cargar($datos);
		$this->set_pantalla('edicion');
	}
}
?>

La verdad, yo lo trabaje sin problemas y Toba si almacena y recupera la información del los ef_multi_seleccion_check

  1. la tabla el campo debe ser de tipo text,
  2. al momento de asociar el campo como tipo ef_multi_seleccion_check, carga los datos de una función de php.
  3. elegir serializar el estado

Lo único es que en postgres, no relaciono la tabla que contiene los tipos, ya que es en un mismo registro donde guardo las opciones que se tilden

Espero te sirva. adjunto como lo trabaje


Hola Alejandra,

lo que tendrias que hacer es el proceso inverso al que estas generando en el metodo donde guardas… osea… el ef_multicheck te dio un arreglo, al cargarse esta esperando lo mismo.
La idea seria que recuperes todas las categorias, hagas un arreglo con eso y lo pases al ef.



function conf__formulario($form)
	{
		if ($this->get_relacion()->esta_cargada()) {
			$form->set_datos($this->get_relacion()->tabla('organismosinvestigacion')->get());
                        $categorias = $this->get_relacion()->tabla('organismosinvestigacioncategorias')->get_filas();
                        $categ_asociadas = array();
                        foreach($categorias as $categoria) {
                             $categ_asociadas[] = $categoria['idcategoria'];
                        }
                        $form->set_datos(array('idcategoria'=>$categ_asociadas));
		}
	}

Saludos

Hola! Gracias Richard, probamos con esa opción y funciono perfectamente!!! Pero… para entender mejor…como sabe el método get_filas() cuales son las categorias del organismo seleccionado en el cuadro? hace una especie de filtro interno?la verdad que no se nos ocurrio probar ese método porque pensamos que “tabla(‘organismosinvestigacioncategorias’)->get_filas()” nos devolvía todas las categorías de la tabla. Bueno…aprendimos algo más…gracias nuevamente.
Agradecemos además la primer respuesta que también fué probada pero sin resultados positivos.
Alejandra.-

Hola Alejandra,

los datos_relacion trabajan internamente con cursores, cada vez que vos seleccionas un registro en la tabla padre y seteas un cursor el mismo es tenido en cuenta al momento de trabajar sobre las filas de las tablas hijas, si no queres que se usen cursores explicitamente tenes que decirlo en la llamada a las funciones. Esto es cuando existe una relacion entre las tablas, de lo contrario devuelve el contenido de la tabla o del filtro que le especifiques al momento de hacer la llamada a get_filas();

Saludos