Printed Forms

From IHRIS Wiki

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: Required scalar node. the name of the form relationship that this form is based off of. It needs to be the name of a child node of /modules/CustomReports/relationships
  • displayName: Optional scalar node. The name of the printed letter as displayed to the end user.
  • archive: Optional scalar node. If set it should be a named form in the relationship. If it is a valid named form, then it will enable archiving of this printed letter as a child form of the corresponding named form. You should ensure that this form has generated_doc as a valid child form.
  • layout_details: Optional parent node describing the page layout details for the form. It contains the following child nodes.
    • encoding: Optional scalar node. The encoding used by the renderer(PDF). Defaults to ASCII
    • hyphenation_file: Optional scalar node. File used for hyphenation. Defaults to hyph_en_US.dic'
    • orientation: Optional scalar node. Defaults to 'P' for portrait. The other option is 'L' for landscape
    • size: Optional scalar node. Defaults to 'A4' to describe the paper to be used. Should be one of the ISO 216 standard paper sizes, e.g. 'A4', or one of the North American paper sizes, e.g. 'letter' or 'legal'
    • rows: Optional scalar node: Defaults to 1. The number of rows of forms to be printed on the page.
    • cols: Optional scalar node: Defaults to 1. The number of columns of forms to be printed on the page.
    • border: Optional scalar node. Defaults to 0 if rows and columns are 1, otherwise it to defaults to 1. The width of the border drawn around the forms.
    • vert_pad: Optional scalar node. Defaults to 10. The vertical padding used on the page boundary
    • horiz_pad: Optional scalar node. Defaults to 10. The horizontal padding used on the page boundary
    • vert_pad_border: Defaults to 0. The vertical padding used between forms
    • horiz_pad_border: Defaults to 0. The vertical padding used between forms
  • text_properties: An optional parent node defining the default text properties of the element types of the document. Child node names are the name of the element types (image or text). Possible values are:
    • font: Optional scalar node. Defaults to helvetica. Should be limited to one of the standard pdf fonts: times,helvetica, courier
    • size: Optional positive integer node.Size in points of font. Defaults to 12.
    • alignment: Optional scalar node. Defaults to 'L' for left. Can be 'R' or 'J', 'L' or 'C'
    • color: Optional color foreground/text color. Use html style hex colors. Defaults to black #000000 ,
    • bg_color: Optional background color. Use html style hex colors. Defaults to 'none' for transparent.
    • style: Optional scalar node. Default to blank. Can contain any of the following characters, B for bold, U for underline, I for italic
  • elements: Parent node. Children should be numerically indexed. Elements are added to the standard document in increasing numeric order of the node name of the element. Each of the child nodes will contain the following:
    • text_properties: An optional parent node defining the properties which applies to this node and all of its sub-elements of this. The definition is the same as above.
    • type: Required scalar node. Should be one of 'text' 'image' or 'value'
    • definition: Depends on the type. See below.

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:

  • printf: Optional scalar node. The a printf string to be placed here. Defaults to . Example: "%s, %s has registation number %s"
  • printf_args: Optional parent node. An array of arguments to subsititute into the printf as follows
    • formname+field: a report form fields to substitute into the printf. E.g. "person+surname,person+fisrtname,registation+number":
    • +relationshipFunction: The evaluation of the named function in the the form relationship. Example +age65 which be the year the person turns 65 in the staff relationship
    • ++date(XYZ): The data formatted according to XYZ (unquoted) via strfrtime functions. Example ++date(%Y) is the four digit year
    • ++date: The date. This is the same as ++date(%x).
    • ++user: The name of the user printing the form
    • ++eval(XYZ): Evaluate the php code XYZ. Example is ++eval(strftime("%Y")+60) would add 60 to the current year
  • horiz_min: Required numeric scalar node. If the alignment is 'L' it is the left most coordinate to place this text. If the alignment is 'R' it is the right-most cooridnate of the text
  • 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 coordinate. If set and alignment is 'R' then it is the left-most coordinate. If set and alignment is 'J' then the this is the right-most coordinate and horiz-min is the left-most coodinate.
  • vert_max: Optional numeric scalar node. The bottom most coordinate to place this text.
  • vert_min: Required numeric scalar value. The top most coordinate to place this text.

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)