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')
))
);
}
}
}
?>
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.
¿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).
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.
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
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í:
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.