SIU-Guarani/Version3.19.0/personalizaciones/constancias/anexo constancias

De SIU
Saltar a: navegación, buscar

Personalizar constancias y certificados

ANEXO: Desarrollar un Formulario para agregar/validar campos a una constancia

Aquí se detallaran los pasos a realizar para personalizar un formulario. Como punto de partida, se recomienda analizar las constancias estándar enviadas con el sistema que utilizan un formulario para agregar o validar campos.

  1. Hacer una carpeta en $toba_dir/guarani/personalizacion/php/UXXX/operaciones/constancias/constancias (donde XXX es el código de institución otorgado por el SIU) con el nombre de la constancia a personalizar/agregar. Ej.: Supongamos que se va a desarrollar un formulario para implementar un certificado de que un alumno esta inscripto en una propuesta. En este caso, el directorio donde hospedar los archivos para el desarrollo del mismo seria: $toba_dir/guarani/personalizacion/php/UXXX/operaciones/constancias/constancias/constancia_inscripto_a_propuesta
  2. Crear un archivo PHP conteniendo a la clase que implementa este formulario que herede de ci_constancia. Por ej.: Continuando con la implementación del certificado de un alumno inscripto a una propuesta, se crearía en el directorio previamente mencionado un archivo de nombre: ci_constancia_inscripto_a_propuesta_UXXX.php y tendría el siguiente contenido:
    #php
    <?php
    /**
     *@package  Constancias y Certificados
     */

    class ci_constancia_inscripto_a_propuesta_UXXX extends ci_constancia
    {
    }
    ?>
    En principio, se crea el archivo vacío para que herede el comportamiento estándar de la clase ci_constancia. A futuro, se pueden redefinir los métodos de la misma para agregar validaciones o modificar su comportamiento según lo que se necesite para el formulario en cuestión.
    EXPLICACION DEL FUNCIONAMIENTO Y METODOS DE LA CLASE CI_CONSTANCIA:
    La clase ci_constancia contiene el comportamiento estándar de una constancia proveyendo métodos para el envío automático de datos y validación de campos estándares.
    A continuación se explicara su funcionamiento y los métodos principales a redefinir para lograr el funcionamiento deseado.
    Se analizara la clase dividiéndola en 3 secciones. A saber: datos iniciales, datos generales y métodos trasversales.
    • En primer lugar, la clase cuenta con una sección destinada a los datos iniciales del componente tanto para la variable que almacena estos valores, como los métodos que operan sobre la misma.
      #php
      <?php

              // Datos auxiliares
              protected $s__datos_iniciales;

              /**
               * Se ejecuta al inicio de todos los request en donde participa el componente
               */

              function ini()
              {
                      $this->s__datos_iniciales = $this->controlador()->get_params_form_dinamico();  
              }

              function set_datos_iniciales($datos)
              {
                      $this->s__datos_iniciales = $datos;
              }
      ?>
      La variable s_datos_iniciales, debe contener los datos a pasar en el arranque del componente, en caso de que el componente o los objetos asociados al mismo lo necesiten para configuraciones iniciales (también se puede re-utilizar para contener valores temporales o valores extras de comunicación con el controlador). De hecho, la primer acción que se realiza ante la creación del componente es inicializar esta variable para que cuando se configuren todos los subcomponentes de la misma puedan contar con este arreglo de datos cargado.
    • En segundo lugar, se analiza la parte mas importante de la clase. La que consiste en los datos generales que se recopilan y utilizan, previa validación, para pasar los campos a la plantilla para el funcionamiento de la misma.
      #php
      <?php

              // Datos a pasar al controlador correspondiente a los parametros a grabar
              /*
               * El formato del arreglo de datos debe ser:
               * datos => (   campo => valor, campo => valor, campo => valor  )
               * donde 'campo' debe ser un campo valido registrado en la tabla mce_campos
               */

              protected $s__datos;
             
              function get_datos()
              {
                return $this->s__datos;
              }

              function validar_datos()
              {
                      /*
                       * El formato del arreglo de datos debe ser:
                       * datos => (   campo => valor, campo => valor, campo => valor  )
                       * donde 'campo' debe ser un campo valido registrado en la tabla mce_campos
                       */
                 
                      // Valido que los valores dados por el arreglo a grabar sean campos existentes y con valores validos
                      foreach ($this->s__datos as $campo => $valor) {
                              campo::validar_campo_valor($campo, $valor);
                      }
                     
                      return true;
              }

              function set_datos($datos)
              {
                      /*
                       * El formato del arreglo de datos debe ser:
                       * datos => (   campo => valor, campo => valor, campo => valor  )
                       * donde 'campo' debe ser un campo valido registrado en la tabla mce_campos
                       */
                 
                      // Seteo los datos
                      $this->s__datos = $datos;
              }

      ?>
      La idea es que en la variable s_datos se almacenen los campos a pasar a la plantilla (en un arreglo con el formato especificado) a través del método set_datos. El método "validar_datos" contiene una implementación estándar de la validación de los campos (definidos en la tabla mce_campos) según su tipo con el valor que contienen. Si se desean agregar mas validaciones sobre estos campos u otras propias del certificado a implementar se debe redefinir el mismo para realizar las acciones deseadas.
    • Por ultimo, también se incluyen métodos generales como "get_alumno_seleccionado" para obtener el ID del alumno seleccionado para poder trabajar con el mismo y realizar consultas u obtener mas datos del mismo para enviar al formulario.
      #php
      <?php

              //-----------------------------------------------------------------------------------
              //---- Funciones Auxiliares ---------------------------------------------------------
              //-----------------------------------------------------------------------------------

              /**
               * Obtiene del ci controlador el alumno seleccionado para el cual se está dando de alta
               * o editando la Solicitud de Constancia.
               */

              function get_alumno_solicitud()
              {
                      return $this->controlador()->get_alumno_seleccionado();
              }
             
              function limpiar_datos()
              {
                      $this->s__datos = array();
                      unset($this->s__datos_iniciales);
              }

      ?>
  3. Desde el editor de Toba abrir el proyecto "guarani".
  4. Crear un CI con el nombre adecuado. Ej: Certificado de Alumno Inscripto a Propuesta
    • Seleccionar como "Subclase - Archivo" el archivo recién creado. Notar que al elegir el archivo, se autocompleta el campo con el nombre de la Subclase. Si esto no sucede, completarlo manualmente.G3 Ej Creacion CI Constancia I.jpg
  5. Asociar el CI recién creado al componente (CI) "Solicitar Constancias y Certificados - ci_edi_solicitud_constancias" - Identificador: 37000548.
    • Para realizar esto, seleccionar el componente, ir a la pestaña "Dependencias" y en la sección "Objeto asociado" agregar el objeto recién creado. IMPORTANTE: El nombre de la dependencia debe ser el ID del componente creado (el mismo que se utiliza cuando se da de alta un formulario). Tipo: "CI". Componente: El recientemente creado (observar que como contiene como prefijo entre corchetes el ID que se debe poner en el campo nombre)G3 Ej Creacion CI Constancia II.jpgG3 Ej Creacion CI Constancia III.jpg
    • A partir de aquí se pueden crear y asociar distintos objetos al componente creado (como por ejemplo un formulario para recopilar mas datos a enviar para luego enviar a la plantilla o un cuadro para mostrar determinados datos y seleccionarlos - Ver la Constancia de Examen). Si se realiza esto, recordar poner el código dentro de la carpeta creada previamente, de forma tal que un mismo componente y los subcomponentes asociados tengan todos los archivos dentro de un mismo directorio.
  6. En el caso de que se haya agregado algún componente para recolectar datos y estos se envíen a la plantilla para ser utilizados en la impresión (almacenados en la variable s__datos de la clase ci_constancia con el formato especificado, que se pasa automáticamente a la plantilla) se deben dar de alta en la tabla mce_campos, indicando los siguientes campos:
    • campo: el nombre del campo que se asignara el valor internamente y sera pasado como parametro con este mismo nombre a la plantilla (recordar declarar el parámetro en la plantilla JASPER para ser tomado como entrada)
    • etiqueta y descripcion: strings que describen el campo en cuestión
    • tipo_de_dato: Ver valores posibles en par_tipo_dato
    • longitud: Tamaño del campo
    • cant_decimales: En el caso de que el campo sea entero
  7. Modificar la plantilla JASPER agregando como parámetros los campos especificados en el punto anterior y hacer las modificaciones correspondientes para utilizarlos. Recordar que la constancia (plantilla JASPER) recibe como parámetros fijos siempre el logo (path) y el nro. de solicitud (registro de la tabla sga_constancias_solicitud). Estos datos deben estar como parametros, ademas de los que se desea agregar en la plantilla JASPER.
  8. Dar de alta el formulario en la opción "Administrar formularios". Para esto, además del campo nombre, completar el campo Objeto ID: con el ID asignado por Toba al componente recién desarrollado y que se hizo referencia previamente. Esto es para que se cargue dinámicamente el formulario cuando se solicita la constancia que lo utiliza. Si este dato se carga erróneamente, provocara un error en el sistema cuando se solicite la constancia.