personalizar popup de cración de parciales

Estoy adaptando el módulo de notas parciales de G3W…

En el popup.twig precargo la fecha del parcial con la fecha actual:

  <input id='fecha' type='text' name='fecha' value='{{ "now"|date("d/m/Y") }}' />

E intento preseleccionar la escala de notas (pero esto último no logro hacerlo funcionar):

  <select id='escala' name='escala'>
  {% for escala in escalas %}
    <option value='{{ escala.ESCALA_NOTAS }}'{% if escala.ESCALA_NOTAS==comision.ESCALA_NOTAS %} selected='selected'{% endif %}>{{ escala.NOMBRE }}</option>
  {% endfor %}
  </select>

¿Es posible heredar/personalizar el modelo, el pagelet y el controlador para que esto funcione?

En principio ya personalicé:

  • modelo\datos\db\carga_evaluaciones_parciales.php
    • modelo\transacciones\carga_evaluaciones_parciales.php
    • operaciones\notas_parciales\controlador.php
    • operaciones\notas_parciales\pagelet_lista_materias.php
    • operaciones\notas_parciales\pagelet_lista_notas.php
    • operaciones\notas_parciales\lista_materias\popup.twig

Pero no se por qué desde el pagelet se sigue intentando acceder al modelo original del SIU…

Les completo un poco…
Este es el contenido personalizado del pagelet_lista_materias.php

<?php
namespace unlam\operaciones\notas_parciales;
use kernel\interfaz\pagelet;
use kernel\kernel;
use unlam\modelo\datos\catalogo;
class pagelet_lista_materias extends \siu\operaciones\notas_parciales\pagelet_lista_materias
{
   function prepare()
   {
        $this->data = array();
        
        switch ($this->estado) {
            case 'crear_parcial':
                $this->set_template('parcial');
                break;
            default:
               $this->data = $this->get_lista_materias();
                $this->add_var_js('url_crear_evaluacion', kernel::vinculador()->crear('notas_parciales', 'crear_evaluacion'));
                $this->add_var_js('url_borrar_evaluacion', kernel::vinculador()->crear('notas_parciales', 'borrar_evaluacion'));
                $this->add_var_js('titulo_crear_parcial', kernel::traductor()->trans('crear_evaluacion_parcial'));
                $this->add_var_js('boton_crear_parcial', kernel::traductor()->trans('crear_parcial'));
                // Se manda el template en una variable js para que dp se reuse para las
                // diferentes materias
                $this->add_var_js('html_popup', 
                    kernel::load_template('lista_materias/popup.twig')->render(array(
                        'tipo_eval' => $this->controlador->modelo()->info__tipo_evaluacion(),
                        'escalas' => $this->controlador->modelo()->info__lista_escala_notas(),
// ESTO NO FUNCIONA:     'comision' => $this->controlador->modelo()->get_datos_comision(),
// lo anterior apunta al modelo del SIU en vez de a mi modelo
/* ESTO PRECARGADO DE EJEMPLO SI: */
                        'comision' => array('materia'=>'01114','anio_academico'=>2017,'periodo_lectivo'=>'1º Cuatrimestre','ESCALA_NOTAS'=>2,'nombre'=>'BASE DE DATOS','turno'=>'Noche')
                    ))
                );
        }
   }
}
?>

Buenas tardes.

¿ Entonces lo que no funciona es la llamada al método get_datos_comision de la clase modelo\transacciones\carga_evaluaciones_parciales.php ?

¿La clase carga_evaluaciones_parciales.php está en la carpeta de personalización dentro de su respectiva profundidad de carpetas?

Entiendo que todas las clases que nombré en mi primer mensaje están en la carpeta de personalización correcta, con nuevo namespace y todas heredando de la clase SIU correspondiente.

De cualquier modo creo que estaba equivocado en la forma de cargar el dato de la comisión, por lo que veo el contenido del popup es estático, así que no puedo pasarle la comisión en el evento prepare del pagelet_lista_materias.

¿se les ocurre alguna manera de enviarle al popup información de la comisión específica en que se hizo clic?

Retormo este tema…

¿Hay forma de pasar al popup los datos de la comisión que dió origen al popup?

Necesito precargar la escala de notas (con la escala de la comisión) y filtrar los parciales que pueden ser creados (dependiendo si la comisión es anual o cuatrimestral).

Hola Diego,

para preseleccionar la escala de notas tenes que hacer lo siguiente:

personalizar el archivo src/siu/operaciones/notas_parciales/pagelet_lista_materias.php función prepare:


......
$this->add_var_js('html_popup', 
					kernel::load_template('lista_materias/popup.twig')->render(array(
						'tipo_eval' => $this->controlador->modelo()->info__tipo_evaluacion(),
						'escalas' => $this->controlador->modelo()->info__lista_escala_notas(),
						'escala_seleccionada' => 4 //código de la escala de notas seleccionada
					))
				);

luego personalizar src/siu/operaciones/notas_parciales/lista_materias/popup.twig:


<select id='escala' name='escala'>
				{% for escala in escalas %}
				<option {% if escala_seleccionada == escala.ESCALA_NOTAS %} selected="selected"{% endif %} value='{{ escala.ESCALA_NOTAS }}'>{{ escala.NOMBRE }}</option>
				{% endfor %}
			</select>

acá podes ver como se personaliza cada tipo de archivo. Las clases PHP utilizan herencia, y solo debes sobrescribir la función a personalizar.
Los archivos .twig los vas a tener que copiar todo entero, ya que no tiene ningún mecanismo de herencia, lo mismo pasa con los .js.

Decime si era eso, o comprendí mal lo que querías hacer.

saludos.

Es eso… pero no funciona.

Explico:

El add_var_js crea un popup estático (se arma en el prepare de la vista/pagelet), eso significa que no importa la comisión en la que haga clic para generar el parcial se utiliza siempre al mismo template.

Necesito pasarle de alguna manera los datos de la comisión actual y eso no estoy logrando hacerlo :frowning:

Hola Diego, podes ver lo siguiente:

en el archivo src/siu/operaciones/notas_parciales/lista_materias/pagelet_lista_materias.js tenes el evento click del botón crear:


$(id + ' .comision-nombre').on('click', '.crear', function(evt) {
.......

allí podrías hacer una preselección vía JavaScript antes de mostrar el popup (kernel.ui.prompt). Los datos que necesites los podes poner en los

  • con la clase ‘comision’ en el archivo src/siu/operaciones/notas_parciales/lista_materias/default.twig. Fijate como se esta haciendo con data-comision-id y data-fecha-ini-per-lect. Luego en el JS lo podes acceder así:

    
    comision_popup = $(this).parents('.comision').data('comision-id');
    fecha_inicio_per_lect = $(this).parents('.comision').data('fecha-ini-per-lect');
    
    

    se entiende? fíjate si con eso podes, sino cualquier cosa me consultas.

    saludos.

  • Joya!

    Les cuento que las validaciones de fecha y tipo de examen ya las implementé.
    En su momento lo resolví diferente. La validación la hice post envío de los datos, al momento de intentar crear el parcial.
    Básicamente el SP que crea el parcial recibe la comisión, así que hice la validación de fecha y de tipo de parcial post llamada ajax y el error lo informo a modo tardío pero salíó andando rápidamente.