NotasTecnicas/personalizaciones/modelo

De SIU
Revisión del 10:47 8 sep 2015 de Mchilczenko (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Modificando el Modelo

Modificar una función ya existente en el modelo

Como primer paso debe recrearse la estructura del directorio, en el sector correspondiente a la personalización.

Por ejemplo, haremos una modificación en el trámite de solicitud de certificados de un alumno, imaginemos que debemos agregar un parámetro nuevo en la función certificados_habilitados (que se encuentra en certificados.php)

└── src
    ├── pers
    │   ├── ejemplo01
    │   │   └── modelo
    │   │       └── datos
    │   │           └── db
    │   │               └── certificados.php 
    │   └── ejemplo02
    └── siu
        └── modelo
            └── datos
                └── db
                    └── certificados.php

Vamos a modificar la función certificados_habilitados agregando, por ejemplo, el parámetro 'alumno'. Observando el código original (siu/modelo/datos/db/certificados.php), la definición de la función se da de esta forma:

<?php
...
...

class certificados
{
        /**
         * parametros: _ua, nro_inscripcion
         * cache: no
         * filas: n
         */

        function certificados_habilitados($parametros)
        {
                $sql = "execute procedure sp_certif_habilit ({$parametros['_ua']}, {$parametros['nro_inscripcion']})";
...
...
}
?>

Lo primero que hay que tener en cuenta, es que en la personalización debe hacerse un extends en la clase original, de la siguiente forma:

<?php
...
class certificados extends \siu\modelo\datos\db\certificados
...
?>

Es decir, debe respetarse la ruta donde se encuentra la clase original, para que de esta forma reconozca luego a las funciones correspondientes.

Para agregar un parámetro, por ejemplo, el parámetro alumno a la función certificados_habilitados, debe agregarse este parámetro en el comentario obligatorio, de la siguiente forma:

class certificados extends \siu\modelo\datos\db\certificados
{
        /**
         * parametros: _ua, nro_inscripcion, alumno
         * cache: no
         * filas: n
         */

        function certificados_habilitados($parametros)
        { ...
        }
...
...
}

Cada función debe contener un comentario el cual se compone de las siguientes directivas:

  • parametros: Obligatorio. Lista de parámetros que recibe la función separados por una coma. Ej. parametros: _ua, carrera, legajo, periodo_inscripcion.
  • no_quote: Lista de parámetros que NO serán envueltos entre comillas simples. Ej. no_quote: legajo, periodo_inscripcion.
  • cache: Obligatorio. Indica si se va a cachear el resultado devuelto por la función o no. Los posibles valores son no (no cachea), memoria (cachea en memoria durante la cantidad de tiempo definido en cache_expiracion) y sesion (cachea en la sesión del usuario, almacena los datos hasta que el usuario cierre sesión). Ej. cache: memoria.
  • cache_expiracion: Es la cantidad de segundos que duraran los datos almacenados en cache, si no se especifica los datos permanecerán almacenados la cantidad de segundos definidos en la constante CACHE_EXPIRATION_MAX de la clase src/siu/modelo/datos/catalogo.php (por defecto 5 minutos). Se aplica si se utiliza la directiva cache: memoria. Ej. cache_expiracion: 600.
  • filas: Obligatorio. Cantidad de filas devueltas por la función, puede tomar el valor n (cantidad indefinida de filas) o un numero entero (cantidad exacta de filas devueltas). Ej. filas: n.

Es importante generar el catálogo cuando se modifica alguna directiva del comentario o el nombre de la función. De la siguiente manera: En una terminal, ubicarse donde se encuentra el proyecto y correr el comando 'generar_catalogo'.

demo@g3w2-demo:~/proyectos/g3w2/bin$ ./guarani generar_catalogo

Este comando regenera el archivo _info_catalago.php y lo ubica en el sector correspondiente a la personalización.

Aclaración: el comando 'generar_catalogo' debe correrse cada vez que se modifica el nombre de una función o sus parámetros.

Otro punto a tener en cuenta, es que se deben personalizar todas las clases que acceden al método modificado. En el ejemplo presentado, al método certificados_habilitados se accede desde modelo/datos/transacciones/solicitud_certificados.php, en la función lista_certificados. De la siguiente manera:

<?php
namespace siu\modelo\transacciones;

use kernel\kernel;
use siu\guarani;
use siu\errores\error_guarani;
use siu\modelo\datos\catalogo;

class solicitud_certificados extends transaccion
{
...
...
        function lista_certificados()
        {
                $parametros['nro_inscripcion'] = kernel::persona()->get_nro_inscripcion();
        $datos = catalogo::consultar('certificados', 'certificados_habilitados', $parametros);
...
...
}
?>

Para personalizarlo, primero se replica la estructura del directorio en la sección correspondiente a la personalización:

└── src
    ├── pers
    │   └── ejemplo01
    │       └── modelo
    │           └── datos
    │               ├── db
    │               │   └── certificados.php 
    │               └── transacciones
    │                   └── solicitud_certificados.php 
    └── siu
        └── modelo
               └── datos
                    ├── db
                    │   └── certificados.php   
                    └── transacciones
                        └── solicitud_certificados.php

Luego, se debe agregar el nuevo parámetro en la clase que accede al método:

<?php
namespace ejemplo01\modelo\transacciones;

use kernel\kernel;
use siu\guarani;
use siu\errores\error_guarani;
use siu\modelo\datos\catalogo;
use siu\modelo\transacciones\transaccion;

class solicitud_certificados extends \siu\modelo\transacciones\solicitud_certificados
{
        function lista_certificados()
        {
                $parametros['nro_inscripcion'] = kernel::persona()->get_nro_inscripcion();
                $parametros['alumno'] = kernel::persona()->get_id_alumno();
        $datos = catalogo::consultar('certificados', 'certificados_habilitados', $parametros);
        ...
        ...
}
?>

Deben tenerse en cuenta las siguientes consideraciones:

  1. La clase solicitud_certificados personalizada debe extender de la clase solicitud_certificados original:
    class solicitud_certificados extends \siu\modelo\transacciones\solicitud_certificados
  2. En la función que accede al método que modificamos, debe agregarse el nuevo parámetro, de la siguiente forma:
    function lista_certificados()
            {
                    $parametros['nro_inscripcion'] = kernel::persona()->get_nro_inscripcion();
                    $parametros['alumno'] = kernel::persona()->get_id_alumno();
            $datos = catalogo::consultar('certificados', 'certificados_habilitados', $parametros);
    ... }

Agregar una función nueva

Para agregar una función nueva, el esquema es muy similar al de modificación. Deben tenerse en cuenta:

  1. Recrear la estructura del directorio donde se quiere agregar la función.
  2. Personalizar la clase del modelo donde vamos a poner la función nueva, la cual debe extender de la original.
    Por ejemplo: siguiendo el caso anterior, deberíamos personalizar siu/modelo/datos/db/certificados.php, agregando una nueva función allí. No olvidarse de extender a la clase original (class certificados extends \siu\modelo\datos\db\certificados)
  3. Definir la función incluyendo comentario obligatorio, con los parámetros, caché y filas.
    Por ejemplo: dentro de certificados.php, crear una función nueva
  4. Extender la clase que la va a usar
    Por ejemplo: como en el caso anterior, que la accede la clase solititud_certificados (class solicitud_certificados extends \siu\modelo\transacciones\solicitud_certificados)
  5. Regenerar el catálogo
    Por ejemplo: demo@g3w2-demo:~/proyectos/g3w2/bin$ ./guarani generar_catalogo