Crear nueva operación en G3w trabjando con zonas

Hola, estoy desarrollando un personalización, ya la tenía muy avanzada pero al integrar todo me doy cuenta que me falta desarrollar un zona nueva dentro del perfil del docente. La personalización es sobre una nueva forma de evaluar, no es un examen, y no es una cursada.
Por lo que veo, las zonas son solo sobre exámenes y cursadas, lo que necesito hacer es crear una nueva zona, para por trabajar sobre ella desde el perfil docente y alumno.
En la documentación no hay nada parecido y lo ando necesitando con urgencia, creo que si hago eso, va a facilitar mucho el desarrollo de personalizaciones futuras.

En fin, muchas gracias desde ya.

Saludos.

Hola Ricardo, te guío un poco sobre esto de las zonas, tomemos como ejemplo la zona de Cursadas:

  1. La zona debe estar en al archivo de accesos/rutas, para el perfil docente seria src/siu/conf/acceso/acc_Docente.php.

        'zona_comisiones' => array(
            'activa' => true,
            'menu' => array(
                'visible' => true,
            )
        ),

  1. Luego se debe crear una operación para la zona, en el caso de zona de Cursadas la operación esta en src/siu/operaciones/zona_comisiones. La cual tiene dos pageles (pantallas) comisiones y home, una con el listado de elementos (en este caso los elementos son comisiones) y otra con el detalle de cada elemento (comisión).

  2. Luego se pueden crear varias operaciones y agregarlas a dicha zona, esto se hace en src/siu/operaciones/_comun/zonas/zona_comision.php función get_operaciones_zona.


	protected function get_operaciones_zona()
	{
		return array(
			//por defecto viene a la primera si no tiene derechos
			'zona_comisiones' => array('accion' => 'home', 'descripcion' => 'Inicio'),
			'notas_cursada_comision' => array('accion' => 'edicion', 'descripcion' => 'Cargar Notas'),
			'inscriptos_cursadas' => array('accion' => 'info_comision', 'descripcion' => 'Alumnos'),
			'evaluaciones' => array('accion' => 'ver_comision', 'descripcion' => 'Evaluaciones'),
			'cierre_cursadas' => array('accion' => 'index', 'descripcion' => 'Actas'),
			'administrar_cursos_virtuales' => array('accion' => 'index', 'descripcion' => 'Moodle'),
		);
	}

Si observas en cada operación dentro de la zona se le agrega un hash en la URL, el: http://localhost/3w/trunk3/moodle/c55a303945f16f0cc362e60a9efe5ce690008cd91b9ddba70b210741f41166762d26947fdb20c148

Dicho hash debe contener información del elemento en cuestión, en este caso es la comisión elegida.

  1. En las operaciones de la zona implementar lo métodos load_params y get_info_zona, dichos métodos devuelven el elemento actual sobre el cual se esta trabajando, ver ejemplo en src/siu/operaciones/administrar_cursos_virtuales/controlador.php.

Si tomas de ejemplo las zonas que ya están hechas se te va a hacer mucho mas fácil, hacelo siempre personalizando.

saludos.

Mil gracias por contestar, no quería hacer eso de entrada porque no sabía si había algo especial por hacer antes, en fin, cualquier cosa, continuo en este hilo.

Saludod!

Hola Leonel, Cómo estás?, estoy haciendo lo que me dijiste pero estoy trabado en un solo detalle. En el controlador hay un metodo:


function get_info_zona()
        {
                if (isset($this->params_evaluaciones['turno_evaluacion_desempeno'])) { //si no esta seleccionado nada, no activo la zona
                        return array('zona' => 'evaldesempeno', 'seleccion' => $this->params_evaluaciones);
                }
                return null;
        }

que me imagino que funciona para redirigir a la opción elegida. El código que te muestro es el de la personalización. Pero cuando elijo el turno de evaluación de desempeño, me da el siguiente error:


Zona no soportada- La zona debe indicarse en el campo 'zona'

Creo que el error viene dado porque la clase zona, no puede encontrar la zona evaldesempeno. Pues la clase esta en siu/operaciones/_comun/zonas/zona, tengo que crear una nueva clase zona_pers? o puedo usar la misma clase y crear la zona evaldesempeno en la carpeta zona, ahí veo que estan los twig de la zona comision.
En fin, estoy trabado ahí, ya puedo ver todo. Solo me queda elegir el turno y pasar a cargar el detalle. Es mas o menos como un turno de examen o una comisión, nada mas que las evaluaciones tiene otro formato, es por eso que no pude usar examenes.

En fin, me vendría bien un centro para poder continuar, estoy cada vez mas cerca de terminar.

Saludos! y muchas gracias desde ya!

Hola Ricardo,

Me parece que vas a tener que personalizar la función procesar_accion de la clase src/siu/extension_kernel/controlador_g3w2.php, vas a tener que extender el switch:


		switch ($info['zona']) {
			case 'comision':
				$clase = 'operaciones\\_comun\\zonas\\zona_comision';
				break;
			case 'examen':
				$clase = 'operaciones\\_comun\\zonas\\zona_examen';
				break;
			case 'clase':
				$clase = 'operaciones\\_comun\\zonas\\zona_clase';
				break;
			case 'evaldesempeno':
				$clase = 'operaciones\\_comun\\zonas\\zona_evaldesempeno';
				break;
			default:
				throw new error_guarani("Zona no soportada- La zona debe indicarse en el campo 'zona'");
		}

Si, deberías crear los archivos de la zona en src/pers//operaciones/_comun/zonas/:

  1. src/pers//operaciones/_comun/zonas/zona_evaldesempeno.php
  2. src/pers//operaciones/_comun/zonas/zona/evaldesempeno.twig

saludos.

Hola Leonel,

Principalmente muchas gracias por contestar, por otra parte…

Te pido disculpas, no se que me quisiste decir, porque cuando intento extender la clase controlador_g3w2 no me toma la clase nueva, y no hace uso de mi personalización. Por esa razón trate de modificar directamente en la clase controlador_g3w2, agregue al final del switch el nuevo case, pero el problema es que no me toma la clase zona_evaldesempeno, porque quiere agregar el siu/, quedand así:


..src/siu/autogestion_aleman/operaciones/_comun/zonas/zona_evaldesempeno.php

cuando debería quedar de la siguiente forma:


..src/pers/autogestion_aleman/operaciones/_comun/zonas/zona_evaldesempeno.php

también probe en no poner autogestion_aleman, tal cual como lo pusiste vos, pero obviamente no va encontrar la clase zona_evaldesempeno porque esa clase esta en pers/autogestion_aleman.

te pido disculpas, pero esto me esta sobrepasando, ya hice casi todo, pero no puedo avanzar con la prueba por este pequeño error.

En fin, muchas gracias desde ya! saludos!

Nota: Cambio el nombre del post para que sea mas representativo, quizá alguno le interese hacer una personalización parecida.

Hola Ricardo, no hay problema, para eso estamos!!!

Me tome un tiempo para hacer unas pruebas, y observo lo siguiente:

  1. La función procesar_accion de la clase src/siu/extension_kernel/controlador_g3w2.php llama la función kernel::localizador()->instanciar, la cual busca la clase primero en la personalización, y si no existe la trae del SIU. Es decir, si el archivo lo pusiste en src/pers/autogestion_aleman/operaciones/_comun/zonas/zona_evaldesempeno.php lo debería cargar bien.

  2. El archivo src/siu/extension_kernel/controlador_g3w2.php lo podes personalizar acá src/pers/autogestion_aleman/extension_kernel/controlador_g3w2.php, el contenido debería quedar como sigue:


<?php

namespace autogestion_aleman\extension_kernel;

use siu\extension_kernel\controlador_g3w2 as controlador_g3w2_siu;
use SIU\Chulupi\kernel;

class controlador_g3w2 extends controlador_g3w2_siu
{
	
	public function modelo() {
		
	}
	
	function procesar_accion()
	{
		parent::procesar_accion();
		$info = $this->get_info_zona();
		if (empty($info)) return;

		switch ($info['zona']) {
			case 'comision':
				$clase = 'operaciones\\_comun\\zonas\\zona_comision';
				break;
			case 'examen':
				$clase = 'operaciones\\_comun\\zonas\\zona_examen';
				break;
			case 'clase':
				$clase = 'operaciones\\_comun\\zonas\\zona_clase';
				break;
			case 'evaldesempeno':
				$clase = 'operaciones\\_comun\\zonas\\zona_evaldesempeno';
				break;
			default:
				throw new error_guarani("Zona no soportada- La zona debe indicarse en el campo 'zona'");
		}
		/** @var $zona siu\operaciones\_comun\zonas\zona */
		$zona = kernel::localizador()->instanciar($clase, $this);
		if (isset($info['seleccion'])) {
			$zona->set_entidad_seleccionada($info['seleccion']);
		}

	}

}

El tema es que a partir de ahora todos los controladores de la operaciones que agregues en esta nueva zona deberán heredar del personalizado:


<?php
namespace autogestion_aleman\operaciones\operacion_ejemplo;

use autogestion_aleman\extension_kernel\controlador_g3w2;

class controlador extends controlador_g3w2
{
...........................
}

Proba con estos cambios!!!

Igualmente te pediría que subas esta personalización al COLAB, y me digas donde esta subida así puedo verla mejor.

saludos.

Hola Leonel, mil gracias por tu ayuda. Acabo de subir la personalización al trunk, es la del Hospital Alemán, es para la versión 3.15.1.

Te comento que ahora esta dando un error apenas ingreso a la operación, me aparece esto:

PHP Fatal error:  Call to undefined method autogestion_aleman\\extension_kernel\\controlador_g3w2::accion__index() in /home/ricardo/proyectos/autogestion/src/pers/autogestion_aleman/operaciones/zona_evaldesempenos/controlador.php on line 45, referer: http://192.168.122.177/ha/zona_evaldesempenos

es como si al controlador_g3w2 le falta el accion_index().

Acabo de ver que es lo que pasa y el controlador antes se extendía de controlador_con_filtro, y accion_index lo traía desde ahí y no solo esas, dentro del pagelet_evaluaciones.php tambien usa un metodo heredado de esa clase controlador_con_filtro. No veo que esto se pueda solucionar de forma sencilla.

Saludos, y muchas gracias desde ya!

Hola Leonel, logre hacer funcionar el proceso, no se como pero lo hice. El tema es que cuando quiero levantar el metodo


protected function get_transaccion()
        {
                return transaccion_evaldesempeno();
        }

no encuentra la clase transaccion_evaldesempeno. Obviamente puse el use de la clase, pero como tengo un namespace en autogestion/operaciones/_comun/zonas no me lee la clase de transacción.

Ahora bien, me conviene sacar el namespace y trabajar directamente sin eso? o como puedo hacer para que busque esa clase?

Saludos!

Hola Leonel, ya termine de solucionar todo, perdoname por tantos mensajes, de igual forma, dejo abierto el post hasta terminar con toda la operación, veo que me siguen dando errores, pero por ahora puedo ver la solución.

Saludos y millones de gracias!

Hola Ricardo, gracias por subirlo, buen trabajo!!!

El problema parece estar en la linea 45 del archivo src/pers/autogestion_aleman/operaciones/zona_evaldesempenos/controlador.php, estas llamando a parent::accion__index(), y src/pers/autogestion_aleman/extension_kernel/controlador_g3w2.php no posee la función accion__index.

Si necesitas heredar de controlador_con_filtro, me parece que la mejor opción seria la siguiente:

  1. Heredar de controlador_con_filtro en src/pers/autogestion_aleman/operaciones/zona_evaldesempenos/controlador.php:

<?php
namespace autogestion_aleman\operaciones\zona_evaldesempenos;

......................
use siu\operaciones\_comun\operaciones\reporte\controlador_con_filtro;
......................

class controlador extends controlador_con_filtro
{
......................
}

  1. Personalizar la función procesar_accion en cada controlador de la zona, es decir, en cada operación que agregues a esta nueva zona agrégale también la función procesar_accion.

  2. Sin con esto funciona podes eliminar la clase src/pers/autogestion_aleman/extension_kernel/controlador_g3w2.php.

Un detalle, en el archivo src/pers/autogestion_aleman/conf/acceso/acc_Docente.php te copiaste todo lo del SIU y lo fuiste modificando. La idea es que agregues solo lo personalizado (operación zona_evaldesempenos), ya que el framework ya hace un merge de src/siu/conf/acceso/acc_Docente.php con el personalizado.

saludos.

Hola Leonel, gracias por los aportes, si, lo del acc_Docente se que esta mal, pero por apurarme lo hice así, ahora voy a cambiar todo eso. En cuanto a la personalización, te cuento que logra hacer funcionar todo, pero el problema viene cuando quiere levantar el default.twig, no lo esta cargando, no aparece ningún error al respecto.

Para hacer funcionar todo tuve que hacer una clase nueva de zona llamada zona_ha, también su pagelet_zona_ha.php esta. En fin, hice todo pero lo único que no levanta es el default.twig, este template lo que hace es poner la botonera en la operación, muestra la casa para volver a la pantalla principal, y muestra el detalle de la zona, en fin, lo mas importante es la botonera, que son las operaciones que se pueden hacer sobre la zona.

Lo subí todo al trunk, esta nueva ayuda me vendría bien, no se que puede ser que este pasando. No digo que es la última ayuda porque sería mentirte :smiley:

Saludos! muchísimas gracias!

Hola Ricardo,

¿me hablas del archivo src/pers/autogestion_aleman/operaciones/_comun/zonas/zona_ha/default.twig?

¿te muestra algo el log de la aplicación (instalacion/log) o de Apache?

Fíjate de debugger el archivo con prints ({{ variable }}).

saludos.

Si, ese mismo archivo, no lo muestra. El log de Apache no muestra ningún error y el log del sistema tampoco… Como hago para debuggearlo? el dentro del archivo que lo tengo que hacer?

Acabo de ver el proceso nuevamente y me doy cuenta que no toma ni siquiera el twig de evaldesempeno que esta en _comun/zonas/zona_ha, no se que puede estar pasando, porque cuando fuerzo un error en cualquier de esos dos twig, me salta el error en el log. Quizá no esta llamando bien a los extends que se hace en el default.twig.

En fin, si tienes alguna idea, te lo agradecería.

Saludos!

Hola Ricardo,

Observo un par de cosas, en las lineas 68 y 70 no estas cerrando los bloques:


                <h3 class='clearfix'>
                        <span class='pull-left'>{% block detalle_encabezado_descripcion '' %} </span>

                        <div class='pull-right'><label>{% block detalle_encabezado_icono '' %}</div>
                </h3>

Si con esto no se soluciona, podes ver con la herramienta de debug del browser (Inspeccionar o F12) para ver si hay algún error JS, o no esta cargando bien el HTML.

saludos.

Hola Leonel, perdón por la tardanza, pero no funciona agregando los finales de bloque, de hecho este twig es exactamente el mismo al que viene con el SIU, con respecto al inscpeccionar el sistema, no aparece ningún error.

Creo que voy a tener que replantear la personalización, no se puede personalizar una zona, parece que no se puede…

en fin, ya es fin de semana, pero si se te ocurre algo, no dudes en comentarmelo.

Saludos!

Hola Leonel, bueno, paso a explicar un poco este tema para que todos los que intenten personalizar el g3w para que tenga una nueva zona lo haga sin morir en el intento.

Principalmente no se que pasaba con mi instalación, ya que desde el comienzo no funcionaba lo que ahora si funciona. dicho esto comenzamos.

  1. Lo que se debe hacer es agregar dentro de switch src/siu/extension_kernel/controlador_g3w2.php lo que me habías dicho desde los primeros mensajes de este post

switch ($info['zona']) {
			case 'comision':
				$clase = 'operaciones\\_comun\\zonas\\zona_comision';
				break;
			case 'examen':
				$clase = 'operaciones\\_comun\\zonas\\zona_examen';
				break;
			case 'clase':
				$clase = 'operaciones\\_comun\\zonas\\zona_clase';
				break;
			case '[zona_pers]':
				$clase = 'operaciones\\_comun\\zonas\\zona_[zona_pers]';
				break;
			default:
				throw new error_guarani("Zona no soportada- La zona debe indicarse en el campo 'zona'");
		}

  1. Una vez hecho esto ahora se comienza con la personalización, en la carpeta src/pers/[UA]/operaciones/zona_pers, esta carpeta tiene que terminar en plural, con una s al final, no es necesario que termine así pero por cuestión de seguir una normativa, es mejor hacerlo así. Yo no lo hice al principio y después se me mezclaron las clases. Aunque tampoco es necesario que tengan el mismo nombre, pero como para dejar todo en sintonia, sería bueno hacerlo así.

Para esta carpeta pueden hacer uso de zona_comisiones que esta en la carpeta siu.

  1. Terminado de hacer eso deben crear la zona_pers.php que va esta ubicada en src/pers/[UA]/operaciones/_comun/zonas/zona_pers.php

de la misma forma puede usar la zona_comision.php que esta ubicada en la carpeta siu

  1. Ademas deben crear el modelo de datos, estos archivos estarán ubicados en src/pers/[UA]/modelo/transacciones/transaccion_zona_pers.php
    y src/pers/[UA]/modelo/transacciones/datos/db/zona_pers.php para el archivo donde estarán ubicadas las consultas SQL.

  2. Armado esto pueden empezar crear las nuevas operaciones que tienen en el método get_operaciones_zona que esta en la clase src/pers/[UA]/operaciones/_comun/zonas/zona_pers.php.

deben controlar que el acc tenga todas las operaciones que se encuentren en ese método estén habilitadas .

En fin, estuvo un poco complejo por falta de documentación, en conclusión no se pueden crear zonas personalizadas, por el solo hecho de que no se puede personalizar la clase extension/controlador_g3w2, ahora en cada actualización debo controlar que ese case quede en donde debe quedar.

quizá hay cosas que me este pasando de largo, pero básicamente eso es lo que se debe hacer.

Ahora, con respecto a mi personalización, estoy en el momento de cargar las evaluaciones, ahora tengo que crear un formulario para hacer la carga.

mil gracias Leonel, no se como lo hice, pero lo hice, volví todo desde cero y salió bien.

Saludos!

Hola Ricardo, antes que nada gracias por el aporte!!!

Vamos a tenerlo en cuenta para una futura documentación!!!

saludos.