[SOLUCIONADO] Dos eventos que generen diferentes pdfs en el mismo ci

Buenas, la verdad es que después de renegar un rato y de buscar en el foro, no encontré nada que me ayude a la duda que tengo.

Tengo un ci con un pantalla y dentro de la misma varios formularios. Lo que busco es que existan dos eventos que como acción exporten a pdfs, y en un caso incluya algunos formularios y en el otro caso otros.

Genero los eventos, les pongo en la " Acción predefinida" => Exportar PDF.

Luego tengo la función vista_pdf, que me genera en ambos casos el mismo archivo. Los identificadores de los dos eventos son obviamente distintos. Entonces ¿Como hago para que desde la función vista_pdf distinguir si es uno u otro evento, o generar eventos (evt__etc()) particulares para los botones y tener los datos en formato toba_vista_pdf?

Cualquier ayuda es bienvenida!

Gracias de antemano.

Tomas Delvechio
UNLu

Hola Tomas,

creo que una posible forma para lograr eso es la siguiente:

  • Creas los dos eventos con un vinculo a la misma operacion
  • En ambos casos le indicas que el nombre del servicio a disparar es ‘vista_pdf’
  • En el metodo conf() del ci (o conf__nombre_pantalla si los botones estan en una especifica) le agregas un parametro al vinculo para usar de bandera, ej:

$this->evento('imprimir')->vinculo()->agregar_parametro('evento_trigger', 'imprimir_grupo1');
$this->evento('imprimir_alterno')->vinculo()->agregar_parametro('evento_trigger', 'imprimir_grupo2'); 

Luego en el metodo vista_pdf del ci lo que harias seria recuperar el valor de dicho parametro

$bandera = toba::memoria()->get_parametro('evento_trigger');

En base a esa bandera podes decidir que formularios se deben exportar al pdf.

Saludos

Gracias por la respuesta, pero aun tengo una duda:

Si genero los eventos respectivos y llamo a la función vista_pdf, necesito pasarle como parámetro un objeto “toba_vista_pdf” con los datos de los formularios y todo eso. Como Toba eso lo esta haciendo automáticamente, no opte por una opción de este estilo porque no sabia como crear dicho objeto.

¿Estoy en lo correcto o entendí mal tu solución?

Gracias de nuevo.

Tomas Delvechio.

Hola Tomás, toba crea este objeto pdf en base al servicio solicitado (vista_pdf), luego como a cada evento le indicas un parámetro diferente, del lado del servidor podés chequear esa bandera para ver cuál de ellos se disparó y así decidir que hacer.

No se si aclaré u oscurecí :stuck_out_tongue:

Hola Tomas,

El objeto “toba_vista_pdf” no lo brindas vos en este caso, lo genera toba automaticamente al atender el servicio “vista_pdf”, lo que si vas a brindar vos es la generacion del pdf de los componentes que queres en esa exportacion.
Asi como en cada pedido de pagina, en la atencion del servicio ‘vista_pdf’ se recorren los componentes y se dispara su evento de configuracion, por lo tanto no debes preocuparte por pasarle los datos a los formularios, estos deberian cargarlos automaticamente mediante sus metodos de configuracion respectivos. Un ej del proyecto toba_referencia:


         //Cambio lo márgenes accediendo directamente a la librería PDF
          $pdf = $salida->get_pdf();
          $pdf->ezSetMargins(80, 50, 30, 30);    //top, bottom, left, right
                  
          //Pie de página
          $formato = 'Página {PAGENUM} de {TOTALPAGENUM}';
          $pdf->ezStartPageNumbers(300, 20, 8, 'left', $formato, 1);    //x, y, size, pos, texto, pagina inicio
   
         //Inserto los componentes usando la API de toba_vista_pdf
         $salida->titulo($this->get_nombre());
         $salida->mensaje('Nota: Este es el Principal');
         $this->dependencia('filtro')->vista_pdf($salida);
         $this->dependencia('cuadro')->vista_pdf($salida);
         $this->dependencia('formulario')->vista_pdf($salida);
         $salida->salto_pagina();
         $salida->mensaje('Nota: Esta es una copia');
         $this->dependencia('filtro')->vista_pdf($salida);
         $this->dependencia('cuadro')->vista_pdf($salida);
         $this->dependencia('formulario')->vista_pdf($salida);        
         $salida->salto_pagina();
         $salida->mensaje('Este es un formulario ML que esta en otra pagina');
         $salida->separacion();
         $this->dependencia('ml')->vista_pdf($salida);

En tu caso deberias tener un condicional que te elija de acuerdo al parametro que pasaste en el vinculo que dependencia exportar.

Saludos

Richard:

Ahora lo entendí perfecto, gracias!

Gracias a Rodrigo también. En cuanto lo resuelva, les comento como me fue.

Saludo