# Controlar datos obligatorios

**URL:** <https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211>\
**Category:** Toba - Desarrollo\
**Created:** [12 Junio, 2017 16:57 UTC](https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211 "2017-06-12T16:57:41Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![marianofrezz](https://foro.comunidad.siu.edu.ar/letter_avatar_proxy/v4/letter/m/c68b51/32.png) [@marianofrezz](https://foro.comunidad.siu.edu.ar/u/marianofrezz)\
**Post date:** [12 Junio, 2017 16:57 UTC](https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211/1 "2017-06-12T16:57:41Z")

</div>

Buenas. Un usuario consulto esto, pero no se como hacerlo.

Estoy trabajando con un Tab horizontal que contiene 4 pantallas, las cuales poseen formularios. La carga se va haciendo por partes. Al finalizar, todos los datos tienen que estar cargados. Se me ocurren varias ideas, pero no se como encararlas

- Deshabilitar las pantallas y que se puedan acceder a medida que se van completando los datos
- Deshabilitar el botón guardar hasta que se completen todos los datos
- Al presionar el botón guardar, validar que estén cargados todos los datos

Mi gran problema es controlar que se estén cargados todos los datos de los formularios

Esta es la consulta que estuve viendo y es lo que necesito

[  
http://foro.comunidad.siu.edu.ar/index.php?topic=2366.0  
 ](http://foro.comunidad.siu.edu.ar/index.php?topic=2366.0)

Saludos

---

<div class="post-metadata">

**Author:** ![richard](https://foro.comunidad.siu.edu.ar/user_avatar/foro.comunidad.siu.edu.ar/richard/32/40_2.png) [@richard](https://foro.comunidad.siu.edu.ar/u/richard)\
**Post date:** [12 Junio, 2017 18:00 UTC](https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211/2 "2017-06-12T18:00:12Z")

</div>

Hola Mariano,

la respuesta que dio Rodrigo hace 7 años sigue siendo la mas acertada.

- Deshabilitar las pantallas y que se puedan acceder a medida que se van completando los datos

Esto fuerza a que la persona deba seguir un orden estricto, no siempre va a tener los datos ordenados por lo que darle la posibilidad de ir cargando cosas aunque sea fuera de orden, es algo que le suma capacidad de trabajo.

- Deshabilitar el botón guardar hasta que se completen todos los datos

Como realizaria entonces los guardados parciales? Es necesario que pueda guardar parcialmente para evitar la perdida de datos.

- Al presionar el botón guardar, validar que estén cargados todos los datos

Esto podes hacerlo… pero tene en cuenta que los guardados parciales siempre van a tener faltantes, si te completa unicamente la primer pestaña vas a vivir reclamandole las que siguen. Por ahí se puede volver un poco tedioso.

Lo ideal seria que existiera un pasaje explicito de ‘estado’ si se quiere, donde realizarias todos los controles necesarios. La otra opción es ir por la última que mencionaste y avisar de la falta de los otros datos, si no tenes que reclamar todas las pestañas puede ser util.

Saludos

---

<div class="post-metadata">

**Author:** ![mfalemany](https://foro.comunidad.siu.edu.ar/user_avatar/foro.comunidad.siu.edu.ar/mfalemany/32/109_2.png) [@mfalemany](https://foro.comunidad.siu.edu.ar/u/mfalemany)\
**Post date:** [2 Febrero, 2018 14:32 UTC](https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211/3 "2018-02-02T14:32:10Z")

</div>

Yo lo encaré, primero, de la siguiente manera:  
En el evento del CI padre, configuré un evento (por ejemplo) “Guardar”, que contenía lo siguente:

```auto

...
foreach($this->dep('ci_edicion')->get_dependencias_clase('form') as $formulario){
	$this->dep('ci_edicion')->dep($formulario)->validar_estado();
}
...

```

El problema, es que todos los formularios obtenidos por ese bucle, están vacíos, sin estado (aún cuando los formularios tienen datos), y esto no se porque sucede (Si alguien lo puede explicar, sería un golazo al ángulo).

Lo que hice entonces fue, en el ci\_edicion (CI hijo), en su método conf() coloqué el siguiente código:

```auto

//esto va fuera del conf (se define la variable de sesión)
public $s__estado_forms;
//esto va dentro del conf() del CI
if(!isset($this->s__estado_forms)){
			$this->s__estado_forms = array();
			foreach($this->get_dependencias_clase('form') as $formulario){
				$this->s__estado_forms[$formulario] = false;
			}
		}

```

Una vez hecho eso, en cada evt\_\_formulario\_x\_\_modificacion(), agrego como última línea lo siguiente:

```auto
$this->s__estado_forms['formulario_actual'] = true;

```

Entonces, por cada evento implicito que se va disparando para cada formulario, se va a guardar el valor TRUE (si es que ya se pasó por ese formulario)

Al final, en el CI padre, el evento evt\_\_guardar() queda así:

```auto

function evt__cerrar()
	{
		foreach($this->dep('ci_edicion')->s__estado_forms as $formulario => $valido){
			if(!$valido){
				$nombre_form = $this->dep('ci_edicion')->dep($formulario)->get_titulo();
				throw new toba_error("Debe completar los datos del formulario $nombre_form");
			}
		}
	}

```

Espero sirva de ayuda.  
Saludos

---

<div class="post-metadata">

**Author:** ![richard](https://foro.comunidad.siu.edu.ar/user_avatar/foro.comunidad.siu.edu.ar/richard/32/40_2.png) [@richard](https://foro.comunidad.siu.edu.ar/u/richard)\
**Post date:** [2 Febrero, 2018 18:25 UTC](https://foro.comunidad.siu.edu.ar/t/controlar-datos-obligatorios/14211/4 "2018-02-02T18:25:32Z")

</div>

Hola Marcelo,

> [@mfalemany post:3](#):
>
> Yo lo encaré, primero, de la siguiente manera:  
> En el evento del CI padre, configuré un evento (por ejemplo) “Guardar”, que contenía lo siguente:
> 
> ```auto
> 
> ...
> foreach($this->dep('ci_edicion')->get_dependencias_clase('form') as $formulario){
> $this->dep('ci_edicion')->dep($formulario)->validar_estado();
> }
> ...
> 
> ```
> 
> El problema, es que todos los formularios obtenidos por ese bucle, están vacíos, sin estado (aún cuando los formularios tienen datos), y esto no se porque sucede (Si alguien lo puede explicar, sería un golazo al ángulo).

ninguna dependencia mantiene un “estado” en el servidor (salvo los componentes de persistencia), para eso se entregan los datos mediante el disparo de los eventos, la idea es que no se consulte las dependencias directamente sino que se reciban los datos en el Ci y se los manipule desde alli.

Si hay que hacer controles sobre el “estado” de los datos, eso se realiza en el Ci… o en alguna clase de negocio, sino le metes al formulario una logica que luego va a complicar su reuso.

Saludos
