Printed Forms: Difference between revisions

From IHRIS Wiki
Line 77: Line 77:


===Definición del tipo: Texto===
===Definición del tipo: Texto===
The text element is just certain text to be placed in the document. It should consist of the following nodes:
El elemento del texto es determinado tesxto a ubicarse en el documento. Debe consistir de los siguientes nodos:
*printf:  Optional scalar node. The a printf string to be placed hereDefaults to ''.  Example: "%s, %s has registation number %s"
*printf:  Nodo escalar opcional . La cadena printf debe ubicarse aquíPor defecto ''.  Ejemplo: "%s, %s has registation number %s"
*printf_args:  Optional parent nodeAn array of arguments to subsititute into the printf as follows
*printf_args:  Nodo primario opcional Un arreglo de argumentos a sustituirse en el printf de la siguiente manera
**'''formname'''+'''field''': a report form fields to substitute into the printf.  E.g. "person+surname,person+fisrtname,registation+number":
**'''formname'''+'''field''': un informe de campos de formularios a sustituirse en el printf.  E.g. "person+surname,person+fisrtname,registation+number":
**+'''relationshipFunction''':  The evaluation of the named function in the the form relationshipExample +age65 which be the year the person turns 65 in the staff relationship
**+'''relationshipFunction''':  La evaluación de la función nombrada función en la relación del formularioEjemplo +age65 cual sera el año en que la persona cumpla 65 años en la relacion de personal
**++date('''XYZ'''): The data formatted according to '''XYZ'''  (unquoted) via [http://us2.php.net/manual/en/function.strftime.php strfrtime] functionsExample ++date(%Y) is the four digit year
**++date('''XYZ'''): Los datos formateados de acuerdo a '''XYZ'''  (sin comillas) usando las funciones [http://us2.php.net/manual/en/function.strftime.php strfrtime] .  Ejemplo ++date(%Y) es el año de cuatro dígitos
**++date:  The dateThis is the same as ++date(%x).     
**++date:  La fechaEste es el mismo de  ++date(%x).     
**++user:  The name of the user printing the form
**++user:  El nombre del usuario que imprime el formulario
**++eval('''XYZ'''):  Evaluate the php code '''XYZ'''.  Example is ++eval(strftime("%Y")+60)  would add 60 to the current year
**++eval('''XYZ'''):  Evaluar el código php '''XYZ'''.  Ejemplo  ++eval(strftime("%Y")+60)  añadiría 60 al año actual
*horiz_min:  Required numeric scalar node. If the alignment is 'L' it is the left most coordinate to place this textIf the alignment is 'R' it is the right-most cooridnate of the text
*horiz_min:  nodo escalar numérico requerido. Si la alineación es 'L' es la coordenada que está más a la izquierda para ubicar el texto. Si la alineación es 'R' es la coordenada qeu está más a la izquierda del texto
*horiz_max: Optional numeric scalar node. If not set and the allignment is 'J' then the alignment reverts to 'L'.    If set and allignment if 'L' is the right-most coordinateIf set and alignment is 'R' then it is the left-most coordinateIf set and alignment is 'J' then the this is the right-most coordinate and ''horiz-min'' is the left-most coodinate.
*horiz_max: Nodo escalar numérico. Si no está establecido y la alineación es 'J' entonces la alineación se revierte a 'L'.    Si esta establecida y la alineación es 'L' es la coordenada que está más a la derechaSi está establecida y la alineación es 'R' entonces es la coordenada que está más a la izquierdaSi está establecida y la alineación es 'J' entonces es la coordenada que está más a la derecha y ''horiz-min'' es la coordenada que está más a la izquierda.
*vert_max: Optional numeric scalar node.  The  bottom most coordinate to place this text.  
*vert_max: Optional numeric scalar node.  La coordenada que está más al fondo para ubicar el texto.  
*vert_min: Required numeric scalar valueThe top most coordinate to place this text.
*vert_min: Valor escalar numérico requeridoLa coordenada de más arriba para ubicar el texto.


===Definición del Tipo: Imágen===
===Definición del Tipo: Imágen===

Revision as of 18:16, 29 September 2013

This tutorial describes how to create "standardized" or "official" PDF forms based upon the data in the system. This could be useful for generating training certificates, generating form letters on a position change, or validating who works in a facility or district.

This module first appears in version 4.0.5 of the iHRIS Suite.

Depending on your needs, you may wish to look at these other methods for standardized form generation:

Datos Fuente

Los datos fuente para el formulario impreso estarán basados en una Relación de Formularios.

Interacción de Páginas

Imprimir

En la primera fase de este módulo, la única interacción es para producir los formularios impresos en base a lo que se ha guardado en los datos magic. No habrá un componente de "diseño de documento" . Se podrá tener acceso al formulario estándar a través de un URL con el nombre del formulario estandarizado y una variable GET/POST que contenga una o más de las id del formulario primario en la relación. Por ejemplo:

http://<SITE_URL>/PrintedForms/print/registration?ids[]=person|12&ids[]=person|14&ids=[]person|22

Utilizar este URL causaría lo siguiente:

  • verificar que existe un formulario estandarizado llamado registration
  • verificar que el usuario tiene los permisos apropiados para ver este formulario estandarizado:
    • Revisar si el usuario tiene la tarea 'printed_forms_all_generate'
    • Si no, revisar si la tarea 'printed_forms_generate_registration' existe y el usuario tiene esta tarea
  • pra cada id, person|12, person|14, person|22 llenar los detalles del informe estandarizado utilizando las filas correspondientes en la tabla de informes si existe (ver abajo).

Menú

Es posible ver cuales formularios se pueden generar para una id dada haciendo el siguiente llamado

http://<SITE_URL>/PrintedForms/menu?id=person|12

mostrará todos los formularios impresos cuyo formulario primario es person. Entonces para cada uno de estos tendrá un link a la página de impresión correspondiente.

También debe vincular a la página de archivo correspondiente y mostrar cuales formularios en PDF ya se han archivado para esa persona clasificados por tipo y fecha.

Archivo

También debe crear un formulario, por ejemplo generated_doc que contenga los siguientes campos:

  • document: Un campo binario que contendrá el PDF
  • date: la fecha en la que fue generado
  • type: el formulario standard impreso (es decir, registro en el ejemplo anterior)

Al llamar a la página de archivo como:

http://<SITE_URL>/PrintedForms/archive/registration?ids[]=person|12&ids[]=person|14&ids=[]person|22

Se ejecutará lo siguiente:

  • revisar si 'generated_form' es un formulario secundario de person. Si no, la ejecución se detiene.
  • para cada id crear el formulario PDF (solo uno en cada página/documento) y guardarlo como un formulario secundario generated_doc

Detalles de Datos Magic

Todos los formularios estandarizados se guardarán en el nodo de datos magic:

/modules/PrintedForms/forms

En el ejemplo anterior los detalles que definen el formulario de registro se guardarían bajo:

/modules/PrintedForms/forms/registration

Los detalles de un formulario específico son los siguientes (todas las medidas son en mm):

  • relationship: Nodo escalar requerido. El nombre de la relación de formulario en la que se basa este formulario. Debe ser el nombre de un nodo secundario de /modules/CustomReports/relationships
  • displayName: Nodo escalar opcional. El nombre de la carta impresa como se muestra al usuario final.
  • archive: Nodo escalar opcional. Si se ha establecido, debe ser un formulario nombrado en la relación. Si es un formulario de nombre válido, entonces permitirá la archivación de esta carta impresa como un formulario secundario del formulario nombrado correspondiente. Debe asegurarse que este formulario tiene un generated_doc como un formulario secundario válido.
  • layout_details: Nodo primario opcional que describe los detalles de de la diagramación de la página. Contiene los siguientes nodos secundarios.
    • encoding: Nodo escalar opcional. La codificación utilizada por el renderer(PDF). Por defecto es ASCII
    • hyphenation_file: Nodo escalar opcional. Archivo utilizado para la separación. Por defecto en hyph_en_US.dic'
    • orientation: Nodo escalar opcional. Por defecto a 'P' de portrait. La otra opción es 'L' de landscape
    • size: Nodo escalar opcional. Por defecto 'A4' para describer el papel que se utilizará. Debe ser uno de los tamaños de papel ISO 216 estándar, es decir 'A4', o uno de los tamaños de papel Norteamericanos como 'carta' o 'legal'
    • rows: Nodo escalar opciona: Por defecto 1. El número de filas de de formularios a imprimir en una página.
    • cols: Nodo escalar opcional: Por defecto 1. El número de columnas de formularios a imprimir en la página.
    • border: Nodo escalar opcional. Por defecto 0 si las filas y columnas son 1, de lo contrario por defecto es 1. El ancho del borde dibujado alrededor de los formularios.
    • vert_pad: Nodo escalar opcional. Por defecto 10. El espacio vertical utilizado en el límite de la página
    • horiz_pad: Nodo escalar opcional. Por defecto 10. El espacio horizontal utilizado en el límite de la página
    • vert_pad_border: Por defecto 0. El espacio vertical utilizado entre formularios
    • horiz_pad_border: Por defecto 0. El espacio vertical utilizado entre formularios
  • text_properties: Un nodo primario opcional que define las propiedades de texto por defecto de los tipos de elementos en el documento. Los nombres de los nodos secundarios son los nombres de los tipos de elementos (imágen o texto). Los valores posibles son:
    • font: Nodo escalar opcional. Por defecto helvetica. Debe limitarse a uno de los tipos de letra standard de pdf: times,helvetica, courier
    • size: Nodo entero positive opcional. Tamaño en puntos de tipo de letra. Por defecto 12.
    • alignment: Nodo escalar opcional. Por defecto 'L' por left. Puede ser 'R' o 'J', 'L' o 'C'
    • color: Color opcional del primer plano/texto . Utiliza colores estilo html hex . Por defecto negro #000000 ,
    • bg_color: Color opcional de fondo. Utiliza colores estilo html hex . Por defecto 'none' para transparente.
    • style: Nodo escalar opcional. Por defecto ninguno. Puede contener cualquiera de los siguientes caracteres, N de Negrita, S de subrayado , K para cursiva
  • elements: Nodo primario. Los secundarios Deben tener un índice numérico. Los elementos se agregan al document estándar en orden nemérico ascendente del nombre del nodo del elemento. Cada nodo secundario contendrá lo siguiente:
    • text_properties: Un nodo primario opcional que define las propiedades que aplican a este nodo y a todos los sub-elementos de este. La definición es la misma que la anterior.
    • type: Nodo escalar requerido. Debe ser 'text' 'image' o 'value'
    • definition: Depende del tipo. Ver abajo.

Definición del tipo: Texto

El elemento del texto es determinado tesxto a ubicarse en el documento. Debe consistir de los siguientes nodos:

  • printf: Nodo escalar opcional . La cadena printf debe ubicarse aquí. Por defecto . Ejemplo: "%s, %s has registation number %s"
  • printf_args: Nodo primario opcional . Un arreglo de argumentos a sustituirse en el printf de la siguiente manera
    • formname+field: un informe de campos de formularios a sustituirse en el printf. E.g. "person+surname,person+fisrtname,registation+number":
    • +relationshipFunction: La evaluación de la función nombrada función en la relación del formulario. Ejemplo +age65 cual sera el año en que la persona cumpla 65 años en la relacion de personal
    • ++date(XYZ): Los datos formateados de acuerdo a XYZ (sin comillas) usando las funciones strfrtime . Ejemplo ++date(%Y) es el año de cuatro dígitos
    • ++date: La fecha. Este es el mismo de ++date(%x).
    • ++user: El nombre del usuario que imprime el formulario
    • ++eval(XYZ): Evaluar el código php XYZ. Ejemplo ++eval(strftime("%Y")+60) añadiría 60 al año actual
  • horiz_min: nodo escalar numérico requerido. Si la alineación es 'L' es la coordenada que está más a la izquierda para ubicar el texto. Si la alineación es 'R' es la coordenada qeu está más a la izquierda del texto
  • horiz_max: Nodo escalar numérico. Si no está establecido y la alineación es 'J' entonces la alineación se revierte a 'L'. Si esta establecida y la alineación es 'L' es la coordenada que está más a la derecha. Si está establecida y la alineación es 'R' entonces es la coordenada que está más a la izquierda. Si está establecida y la alineación es 'J' entonces es la coordenada que está más a la derecha y horiz-min es la coordenada que está más a la izquierda.
  • vert_max: Optional numeric scalar node. La coordenada que está más al fondo para ubicar el texto.
  • vert_min: Valor escalar numérico requerido. La coordenada de más arriba para ubicar el texto.

Definición del Tipo: Imágen

  • image: Nodo standard Requerido. El nombre del archivo de imágen a ubicar. Puede ser:
    • Un nombre de archivo, en cual caso la ruta de búsqueda utilizada es "PDF_IMAGES"
    • Una cadena "form://form+field" donde el formulario se nombra form en la relación y el campo es un campo de tiempo IMAGE (e.g. "form://passport+image")
  • horiz_min: Nodo escalar numérico requerido. El de más a la izquierda coordina para ubicar la imágen.
  • vert_min: Nodo escalar numérico requerido. El de más arriba coordina para ubicar la imágen
  • horiz_max: Nodo escalar numérico opcional. El de más a la derecha coordina para ubicar la imágen. Si esta establecido, la imágen se reescala si es necesario.
  • vert_max: Nodo escalar numérico opcional. El de más abajo coordina para ubicar la imágen. Si esta establecido, la imágen se reescala si es necesario.

Ejemplo

Definir las características del Formulario Impreso

Por ejemplo, para producir una Staff Hire Letter en iHRIS Manage podría definirla como: <source lang='xml'>

 <configurationGroup name="sample-hire-letter" path="/modules/PrintedForms/forms/sample_hire_letter">
   <configuration name="relationship">
     <value>staff</value>
   </configuration>
   <configuration name="archive">
     <value>person</value>
   </configuration>
   <configuration name="displayName">
     <value>Staff Hire Letter</value>
   </configuration>
   <configurationGroup name="elements">
     <configurationGroup name="0">
       <configuration name="type">
         <value>image</value>
       </configuration>
       <configuration name="definition" values='many' type='delimited'>
         <value>image:iHRISManage_logo_whiteBG.png</value>
         <value>horiz_min:5</value>
         <value>vert_min:1</value>
       </configuration>
     </configurationGroup>
     <configurationGroup name="50">
       <configuration name="type">
         <value>text</value>
       </configuration>
       <configuration name="text_properties" values='many' type='delimited'>
         <value>style:I</value>
       </configuration>
       <configuration name="definition" values='many' type='delimited'>
         <value>horiz_min:33</value>
         <value>vert_min:6</value>
         <value>printf:Certification of Employment</value>
       </configuration>
     </configurationGroup>
     <configurationGroup name="51">
       <configuration name="type">
         <value>text</value>
       </configuration>
       <configuration name="text_properties" values='many' type='delimited'>
         <value>style:BU</value>
       </configuration>
       <configuration name="definition" values='many' type='delimited'>
         <value>horiz_min:33</value>
         <value>vert_min:12</value>
         <value>printf:Ministry of Health</value>
       </configuration>
     </configurationGroup>
     <configurationGroup name="52">
       <configuration name="type">
         <value>text</value>
       </configuration>
       <configuration name="definition" values='many' type='delimited'>
         <value>horiz_min:160</value>
         <value>vert_min:6</value>
         <value>printf:%s</value>
       </configuration>
       <configuration name="printf_args" path='definition/printf_args' values='many' type='delimited'>
         <value>0:++date(%e %B %Y)</value>

</configuration>

     </configurationGroup>
     <configurationGroup name="100">
       <configuration name="type">
         <value>text</value>
       </configuration>
       <configuration name="definition" values='many' type='delimited'>
         <value>horiz_min:3</value>
         <value>vert_min:50</value>
         <value>printf:Dir Sir/Madam, 
Please accept this letter as certification of employment for %s %s. 

On %s, employment began as %s in the %s department of %s.

Sincerely, %s</value>

       </configuration>
       <configuration name="printf_args" path='definition/printf_args' values='many' type='delimited'>
         <value>0:person+firstname</value>
         <value>1:person+surname</value>
         <value>2:staff+start_date</value>
         <value>3:position+title</value>
         <value>4:department+name</value>
         <value>5:facility+name</value>
         <value>6:++user</value>
       </configuration>
     </configurationGroup>
   </configurationGroup>
 </configurationGroup>

</source>

Crear un link para imprimir el formulario

Después de que esto se ha establecido, debe abrir la plantilla de vista del formulario donde quiere ubicar el link a PrinteForm. <source lang="xml">

 hasValidForms('sample_hire_letter')">
  • Sample Hire Letter
  • </source> Lo descrito arriba sigificaría que el nombre de PrintedForm es sample_hire_letter y es primario de person. Esta parte del código debe insertarse favorablemente bajo el link para actualizar la información de un formulario. (view_form_name.html)