Personalización de los datos censales

Hola
Estamos con la versión 2.9.3 de g3w.
Estoy intentando personalizar los datos censales.
Quiero agregar un nuevo campo en el array $def.
Para ello intento personalizar la clase definicion_datos_censales dentro del directorio de las personalizaciones y extenderla de la original. Peor no me funciona…

class definicion_datos_censales extends \siu\conf\definicion_datos_censales

Alguna orientación?
Gracias!

Hola Iris,

¿esta subida al COLAB la personalización para poder verla?

Para mi esta pasando lo siguiente:

  1. Todos los formularios de Censo heredan de src/siu/operaciones/censo/_forms/form_comun.php. Ej: src/siu/operaciones/censo/_forms/form_principales.php
class form_principales extends form_comun
  1. form_comun esta usando directamente la clase definicion_datos_censales dentro de la función crear_elementos, es decir ignora si hay personalizaciones.

Solución:
Personalizar src/siu/operaciones/censo/_forms/form_comun.php y en lugar de usar la clase definicion_datos_censales del SIU usa la personalizada, solamente deberías personalizar la función crear_elementos.

saludos.
2

Otra solución a probar para que tome las personalizaciones seria la siguiente:

En src/siu/operaciones/censo/_forms/form_comun.php reemplazar:

$campos = definicion_datos_censales::get_campos($this->form); por $campos = kernel::localizador()->invocacion_estatica(‘definicion_datos_censales’, ‘get_campos’, [$this->form]);.

$campo = definicion_datos_censales::get_campo($campo_nombre); por $campo = kernel::localizador()->invocacion_estatica(‘definicion_datos_censales’, ‘get_campo’, [$campo_nombre]);.

Con dicho cambio debería empezar a tomar las personalizaciones. Si con esto no funciona hace lo de la primer respuesta.

saludos.
2

Hola
Gracias por la respuesta.
El punto es que cómo puedo “personalizar” los campos obligatorios desde ahí?
Veo que están definidos en src/siu/conf/definicion_datos_censales.php
Necesito que algunos que no son obligatorios, lo comiencen a ser.
Gracias!

Iris

Hola Iris,

En la clase definicion_datos_censales personalizada vas a tener que tener algo así:


<?php
namespace comun\conf;

class definicion_datos_censales extends \siu\conf\definicion_datos_censales
{
	static function personalizar_campos()
	{
		static::$def['CENS_ULT_EST_CUR_PADRE'][static::obligatorio] = false;
		static::$def['AUX2_ALU_TRAB_TAREA'][static::obligatorio] = false;
	}
	
	static function hay_campo($campo)
	{
		static::personalizar_campos();
		return parent::hay_campo($campo);
	}

	static function es_campo_a_validar($campo)
	{
		static::personalizar_campos();
		return parent::es_campo_a_validar($campo);
	}

	static function get_campo($campo)
	{
		static::personalizar_campos();
		return parent::get_campo($campo);
	}

	static function get_campos($sub_formulario)
	{
		static::personalizar_campos();
		return parent::get_campos($sub_formulario);
	}

	static function get_def()
	{
		static::personalizar_campos();
		return parent::get_def();
	}

}

La función personalizar_campos pone los campos ‘CENS_ULT_EST_CUR_PADRE’ y ‘AUX2_ALU_TRAB_TAREA’ como “no obligatorios” por ejemplo.

saludos.
2

Hola Leonel

Claro, justamente era lo que estaba intentando hacer.
Pero la personalización de esta clase, no me la toma:

class definicion_datos_censales extends \siu\conf\definicion_datos_censales

Gracias!
Saludos

Iris

Hola Iris,

Hice una prueba y no esta tomando lo personalizado porque directamente hace uso de la clase siu\conf\definicion_datos_censales.

Vas a tener que cambiar en los siguientes archivos para que tome los cambios:

  1. src/siu/operaciones/censo/_forms/form_comun.php: Cambiar use siu\conf\definicion_datos_censales; por use nombre_pers\conf\definicion_datos_censales;

  2. src/siu/modelo/transacciones/datos_censales.php: Cambiar use siu\conf\definicion_datos_censales; por use nombre_pers\conf\definicion_datos_censales;, también cambiar use siu\conf; por use nombre_pers\conf;

Con eso debería tomar la clase definicion_datos_censales personalizada (dentro del namespace nombre_pers\conf).

saludos.
4

Hola Leonel

Esos cambios que mencionás, lo debería hacer dentro del mismo directorio de /src/siu ?
Intenté replicar dentro de mi directorio de personalizaciones lo siguiente:

<?php
namespace nombre_pers\operaciones\censo\_forms;

use siu\extension_kernel\form as form_base;
use kernel\kernel;
use siu\operaciones\censo\modelo;
use siu\modelo\datos\catalogo;
//use siu\conf\definicion_datos_censales;
use nombre_pers\conf\definicion_datos_censales;
use siu\conf\datos_comunes;

abstract class form_comun extends \siu\operaciones\censo\_forms\form_comun
{

}

y


<?php

namespace nombre_pers\modelo\transacciones;

use kernel\kernel;
use siu\modelo\datos\catalogo;
use siu\errores;
//use siu\conf;
use nombre_pers\conf;
use kernel\util\validador;
//use siu\conf\definicion_datos_censales;
use nombre_pers\conf\definicion_datos_censales;
use siu\conf\definicion_datos_censales_docente;
use kernel\error_kernel_db;
use siu\guarani;

class datos_censales extends \siu\modelo\transacciones\datos_censales
{

}

Junto con la clase definicion_datos_censales personalizada (dentro del namespace nombre_pers\conf), pero sigue sin tomarla…

Gracias
Saludos

Iris

Hola Iris,

Vas a tener que personalizar como te puse en la Respuesta #4.

Luego para que tome la personalización vas a tener que tocar las clases del SIU (quedo mal hecha esa parte), vas a tener que hacer lo que te puse en la Respuesta #6.

Esos cambios que mencionás, lo debería hacer dentro del mismo directorio de /src/siu ?

Si, los de la Respuesta #6, ya que sino no toma la personalización de la Respuesta #4.

saludos.
2

Hola Leonel

Entendido.
Modificando los “use” dentro del mismo /src/siu/ anduvo (era lo que quería evitar).

  1. src/siu/operaciones/censo/_forms/form_comun.php
  2. src/siu/modelo/transacciones/datos_censales.php

Gracias!
Saludos.

Iris