modificacion toba_vista_jasperreports

Buen día. Dentro de mi ‘ci_edi_imprimir_acta_examen’ en la funcion ‘vista_jasperreports’ debo aplicar una serie de cambios para poder consumir una api que se conecta a la blockchain para guardar las actas de examen. La api me devuelve un json, el cual debo ADJUNTAR (de forma oculta) al pdf generado por iReport, para ello se utilizan las librerias FPDF y FPDI. El problema es que para poder utilizar las librerías, necesito tener previamente el archivo (pdf) del reporte previo a la descarga, osea en el servidor, pero este pdf temporal se genera luego de ejecutar mi función ‘vista_jasperreports’. La unica forma que encontré para solucionarlo, es modificar el acceso de protected a public de la funcion ‘crear_pdf()’ de la clase ‘toba_vista_jasperreports’ (en el directorio vendor) y llamarla dentro d mi ‘vista_jasperreports’ modificado para poder crear el archivo y tener acceso a el. Probé con la función publica ‘generar_salida()’ pero me genera megas y megas de archivos temporales, finalizando en un error de memoria. ¿Como puedo hacer para solucionarlo sin realizar modificaciones sobre el vendor?

Hola Matias,

Ordenemonos un poco, estamos hablando de G3?.. necesitaria ver el arbol de la operacion como para darme una idea de donde esta parado ese CI. Subime una captura por favor.

El problema es que para poder utilizar las librerías, necesito tener previamente el archivo (pdf) del reporte previo a la descarga, osea en el servidor, pero este pdf temporal se genera luego de ejecutar mi función 'vista_jasperreports'.

Lo que haria yo es subir un nivel en el arbol y hacer la llamada en el CI padre, de manera de que se procesen todas las dependencias previamente y asi asegurarme que el PDF contiene todo lo que necesito. Una vez estas ahi, podes llamar a la funcion generar_salida y luego solicitar el nombre del archivo generado con el metodo get_nombre_archivo_generado

La unica forma que encontré para solucionarlo, es modificar el acceso de protected a public de la funcion 'crear_pdf()' de la clase 'toba_vista_jasperreports' (en el directorio vendor) y llamarla dentro d mi 'vista_jasperreports' modificado para poder crear el archivo y tener acceso a el. Probé con la función publica 'generar_salida()' pero me genera megas y megas de archivos temporales, finalizando en un error de memoria. ¿Como puedo hacer para solucionarlo sin realizar modificaciones sobre el vendor?
Me parece que el tema es desde donde la estas llamando. No conozco bien la operacion, asi que dejame que consulte con la gente de G3 a ver si tiene alguna particularidad. Igualmente, lo que te dije mas arriba es lo mas recomendable, sobre todo porque luego tenes que modificar el archivo y enviarlo al cliente de forma manual.

Saludos

Buen dia. Muchas gracias por la respuesta, por que haria la llamada en el CI padre? si este hereda del padre no deberia tener toda la info necesaria?. Si, es G3. Te dejo de todas formas la info de la clase. El path del mi CI es guarani/personalizacion/php/operaciones/examenes/actas/imprimir_actas/ci_edi_imprimir_acta_examen_uncor.php
En este ci modifico vista_jasperreports() y evt__pdf(). En el evt__pdf es igual a la original, solo que agrega la generacion del archivo json que adjuntaremos al pdf.
Esta es mi funcion resumida de vista_jasperreports():

class ci_edi_imprimir_acta_examen_uncor extends ci_edi_imprimir_acta_examen
{
protected $path_reporte_generado;
protected $s__response_blockchain;

function vista_jasperreports(toba_vista_jasperreports $report)
{
    ...
    ... //Esta parte de arriba es igual a la rama original del proyecto.
    ...
    $report->generar_salida();                // -------> me genera mucho archivo temporal hasta que se queda sin memoria.
                                                                                                   //si utilizo crear_pdf() me lo hace bien, pero es protected y no deberia cambiarlo

//--------------------------- COMIENZA FPDF - FPDI -----------------------------------
$this->path_reporte_generado = $report->get_nombre_archivo_generado();
$inicio = strpos(utf8_decode($this->path_reporte_generado), ‘/temp’);
$fin = strpos(utf8_decode($this->path_reporte_generado), ‘.pdf’);
$nombre_archivo_viejo = substr(utf8_decode($this->path_reporte_generado), $inicio, ($fin - $inicio));
$inicio2 = strpos(utf8_decode($this->s__response_blockchain), ‘“idActa”:"’)+10;
$fin2 = strpos(utf8_decode($this->s__response_blockchain), ‘",“revocadoPor”:’);
$nombre_archivo = substr(utf8_decode($this->s__response_blockchain), $inicio2, ($fin2 - $inicio2));

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    set_time_limit(2);
    date_default_timezone_set('UTC');
    $start = microtime(true);

    $pdf = new Fpdi\Fpdi();
    //$pdf = new Fpdi\TcpdfFpdi('L', 'mm', 'A3');

    if ($pdf instanceof \TCPDF) {
        $pdf->SetProtection(['print'], '', 'owner');
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
    }

    $files = [
        __DIR__.'/../../../../../..'.$nombre_archivo_viejo.'.pdf',
    ];

    foreach ($files as $file) {
        $pageCount = $pdf->setSourceFile(__DIR__.'/../../../../../..'.$nombre_archivo_viejo.'.pdf');

        for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
            $pdf->AddPage();
            $pageId = $pdf->importPage($pageNo, '/MediaBox');
            //$pageId = $pdf->importPage($pageNo, Fpdi\PdfReader\PageBoundaries::ART_BOX);
            $s = $pdf->useTemplate($pageId, 10, 10, 200);
        }
    }
    $pdf->Attach(__DIR__.'/../../../../../../temp/'.$nombre_archivo.'.json');
    $file = uniqid().'.pdf';
    $pdf->Output('F', __DIR__.'/../../../../../../temp/'.$nombre_archivo.'.pdf');
    //$pdf->Output('output/'.$file, 'I');

//----------------------FIN FPDF - FPDI ------------------------------------------------
}

Hola Matias,

normalmente si tenes mas de un CI asociado a la operacion, se busca que sea el mas externo el que lleve adelante la exportacion de forma que abarque la totalidad de las dependencias.
Por eso te pedi una imagen del arbol de la operacion, para ver si habia mas dependencias involucradas… en este caso (luego de haberla visto con el equipo de G3) lo podes hacer directamente desde el CI interno.

Sin embargo, hay una alternativa que debes considerar… y es la modificacion del evento a lanzar.
Usando la vista no vas a poder obtener directamente el archivo, por dos motivos:

  • El metodo generar_salida se invoca desde la clase toba_solicitud_web, la cual no podes extender ya que es parte del nucleo de Toba.
  • Dentro de dicho metodo, hay un ciclo que pasa por todas las dependencias de la operacion invocando la vista jasper… (que puede ser la causa por la que ves multiples archivos).

Como la informacion solo la podes agregar una vez esta creado el archivo, hay que cambiar el enfoque.

  • Vas a tener que crear un nuevo evento (que no va a ir en botonera) que tenga como accion la llamada a un servicio especifico.
  • Vas a tener que modificar la extension js, para cambiar el JS que realiza el disparo de ese evento en lugar de la vista jasperreports.
  • Tenes que crear un listener para dicho servicio, el cual va a instanciar la clase toba_vista_jasperreports manualmente, va a asignarle los objetos pertenecientes a las dependencias que forman parte de la operacion y luego hara la invocacion al metodo generar_salida.
  • Posterior a eso, obtenes el nombre del archivo generado e ingresas via Fpdi la informacion que necesitas.
  • El ultimo paso del metodo seria enviar el archivo al cliente para completar el circuito.

Saludos

Buen dia Richard. No se muy bien como hacerlo pero hice algunas cosas aver si me podes encaminar:

  1. Cree un evento llamado pdfAux. Me pusiste “que tenga como accion la llamada a un servicio especifico”, a que te referis con esto?
  2. Modifiqué la extension js para que me llame al evento nuevo y no al vista_jasperreports y cree el listener pero no comprendí que es lo que deberia hacer aca adentro. del listener De todas formas en mis logs al ejecutarlo me sale el mensaje “toba_error_seguridad: Error Interno El servicio evt__pdfAux no est\xe1 soportado…”. Te dejo como tengo la extension js:

function extender_objeto_js()
{
if ($this->s__imprimir) {
$this->s__imprimir = false;
echo "
window.open(vinculador.get_url(null, null, ‘evt__pdfAux’, null, [{$this->objeto_js}._id], false, true));
//---- Eventos ---------------------------------------------

	{$this->objeto_js}.evt__pdfAux = function()
	{
	}
	";
    }
}

Hola Matias,

Los eventos tienen algo llamado “accion predefinida”… ahi tenes varias opciones (entre ellas la impresion), cuando seleccionas “vinculo”… fijate que en el ultimo parametro podes especificar (seleccionando “otro”) que dicho vinculo invoque un servicio especifico a tu gusto.

2) Modifiqué la extension js para que me llame al evento nuevo y no al vista_jasperreports y cree el listener pero no comprendí que es lo que deberia hacer aca adentro. del listener De todas formas en mis logs al ejecutarlo me sale el mensaje "toba_error_seguridad: Error Interno El servicio evt__pdfAux no est\xe1 soportado...".

Lo primero es colocar el nombre que pusiste en ese ultimo parametro que te mencionaba arriba, no el nombre del evento… de esa forma cuando tengas el metodo “servicio__nombre” se va a invocar correctamente y no te va a lanzar esa excepcion.

Por otra parte, lo que tenes que hacer dentro de ese servicio… seria simular lo que hace la vista_jasper… esto es:

  • Instanciar la clase toba_vista_jasperreports
  • Asignarle los objetos de la operacion que se deben tomar en cuenta para la misma
  • Llamar al metodo generar_salida
  • Agregar el json via Fpdi
  • Enviarle el archivo al cliente
Te dejo como tengo la extension js: function extender_objeto_js() { if ($this->s__imprimir) { $this->s__imprimir = false; echo " window.open(vinculador.get_url(null, null, 'evt__pdfAux', null, [{$this->objeto_js}._id], false, true)); //---- Eventos --------------------------------------------- "; } }
Con esto deberia alcanzar, en cuanto invocas la funcion open.. se dispara el pedido de pagina que te deberia devolver el pdf con todo lo que querias.

Saludos.

Buen dia Richard. Hice lo que me dijiste pero no puedo sacar el “error interno” del log cuando presiono imprimir. Ese servicio que mencionas…seria una funcion dentro del mismo php verdad?..t digo como lo tengo ahora a ver si te das cuenta que puede ser.

1)el nombre del evento es ‘pdfAux’ . Accion predefinida: ‘vinculo’ . Nombre Servicio Manual(*): ‘evt__pdfAux’
2)

- Instanciar la clase toba_vista_jasperreports

  • Asignarle los objetos de la operacion que se deben tomar en cuenta para la misma
  • Llamar al metodo generar_salida
  • Agregar el json via Fpdi
  • Enviarle el archivo al cliente

en mi php tengo mi funcion llamada ‘evt__pdfAux’ que es la que hace todo esto de la cita, es decir, vendria a ser la funcion que suplanta a vista_jasperreports. La otra funcion evt_pdf, resumiendo, consume la api de la blockchain y crea el json que tengo que adjuntar.

Un par de mensajes atras me dijistes que necesitaba un listener, en el mensaje anterior vi que lo eliminaste de mi codigo…no hace falta entonces?

Te dejo el codigo de la clase como lo tengo ahora por si las dudas


<?php

use setasign\fpdf;

require_once __DIR__ . '/../../../../../../vendor/autoload.php';
require_once __DIR__ . '/../../../../../../vendor/setasign/fpdf/fpdf.php';
require_once 'atach_complement.php';

class ci_edi_imprimir_acta_examen_uncor extends ci_edi_imprimir_acta_examen
{
    protected $path_reporte_generado;
    protected $s__response_blockchain;
    protected $s__salida_mensaje;

    function evt__pdf()
    {
        //CONSUMO API
        $datos_encabezado = $this->s__datos_acta;
        $institucion = current(toba::consulta_php('co_instituciones')->get_institucion_gestionante());
        $llamado = $datos_encabezado['llamado_mesa'];
        $datos = toba::consulta_php('co_responsables_academicas')->get_ras_actividad_llamado_uncor($llamado);
        $this->salida_mensaje = 0;
        if ($datos_encabezado['estado'] == 'C') {
            $codigo_ra = toba::consulta_php('co_responsables_academicas')->get_codigo_responsable_academica($datos['resp_acad_nombre'])[0]['codigo'];
            $concatenacion = '' . $institucion['nombre_abreviado'] . $codigo_ra . $datos_encabezado['codigo_actividad'] . $datos_encabezado['libro_nombre'] . $datos_encabezado['nro_acta'];
            $url = 'http://172.16.248.194:1478/v1/dominios/UNC/actas/' . str_replace(' ', '', $concatenacion);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); //segundos de espera mientras espera conectarse
            curl_setopt($ch, CURLOPT_TIMEOUT, 30); //segundos maximo para ejecutar el curl

            $this->s__response_blockchain = curl_exec($ch);
            curl_close($ch);

            //-------------------------- CREACION ARCHIVO JSON TEMPORAL ------------------------------------
            $inicio = strpos(utf8_decode($this->s__response_blockchain), '"idActa":"') + 10;
            $fin = strpos(utf8_decode($this->s__response_blockchain), '","revocadoPor":');
            $nombre_archivo = substr(utf8_decode($this->s__response_blockchain), $inicio, ($fin - $inicio));
            $fh = fopen(__DIR__ . '/../../../../../../temp/' . $nombre_archivo . ".json", 'w');
            fwrite($fh, $this->s__response_blockchain);
            fclose($fh);
            //---------------------------FIN CREACION ARCHIVO JSON TEMPORAL ---------------------------------

            if (!empty($this->s__response_blockchain)) {
                $ttt = utf8_decode($this->s__response_blockchain);
                //$rta = json_decode($ttt);
                if (strpos($ttt, 'Not Found') == true) {
                    $this->s__salida_mensaje = 1;
                    //echo('No se encontro el acta');
                    $this->s__imprimir = false;
                } else if (strpos($ttt, 'UNC') == true) {
                    $this->s__salida_mensaje = 2;
                    $this->s__imprimir = true;
                    //echo('Acta encontrada');
                } else {
                    $this->s__salida_mensaje = 3;
                    $this->s__imprimir = false;
                    //echo('Error interno');
                }
            } else {
                $this->s__salida_mensaje = 4;
                $this->s__imprimir = false;
                //echo('Time out');
            }
        } else {
            //echo('Acta abierta');
            $this->s__imprimir = true;
        }
        // FIN CONSUMO API

        $carga_manual_libro = guarani::parametros()->get_valor('exa_carga_manual_libro_examen');
        $forma_asignacion_folio_fisico = guarani::parametros()->get_valor('exa_forma_asignacion_folio_fisico');
        $agrega_folios_fisicos_extra = guarani::parametros()->get_valor('exa_agrega_folios_fisicos_extra');

        $this->cn()->actualizar_datos_impresion($this->s__datos_acta, count($this->s__datos_alumnos), $carga_manual_libro, $forma_asignacion_folio_fisico, $agrega_folios_fisicos_extra, $this->s__libro_tomo);

        // Obtengo los datos de Libro y Tomo para cada linea (alumno) ya que pueden variar para pasarselos al reporte
        $datos = array();
        foreach ($this->s__datos_alumnos as $dato_alumno) {
            $datos_folio_acta = toba::consulta_php('co_actas')->get_datos_folio_acta($this->s__datos_acta['id_acta'], $dato_alumno['folio']);
            $dato_alumno['folio_fisico'] = (isset($datos_folio_acta['folio_fisico'])) ? $datos_folio_acta['folio_fisico'] : 0;
            $dato_alumno['libro'] = (isset($datos_folio_acta['nombre_libro'])) ? $datos_folio_acta['nombre_libro'] : '';
            $dato_alumno['tomo'] = (isset($datos_folio_acta['nro_tomo'])) ? $datos_folio_acta['nro_tomo'] : 0;
            $datos[] = $dato_alumno;
        }
        $this->s__datos_alumnos = $datos;
    }

    function evt__pdfAux()
    {
        $report = new toba_vista_jasperreports();
        // Seteo la plantilla a usar
        $path = guarani::get_path_reporte_jasper(acta::plantilla_examenes);
        $report->set_path_reporte($path);

        // Cantidad de Ejemplares
        $nombre_parametro = $this->es_acta_cerrada() ? 'exa_actas_examen_cerradas_cnt_ejemplares' : 'exa_actas_examen_abiertas_cnt_ejemplares';
        $cnt_ejemplares = guarani::parametros()->get_valor($nombre_parametro);

        //Institucion
        $institucion = current(toba::consulta_php('co_instituciones')->get_institucion_gestionante());
        $this->s__institucion = $institucion;
        $datos_encabezado = $this->controlador()->ev_info()->get_datos(false);
        $this->s__datos_encabezado = $datos_encabezado;
        $actividad = $datos_encabezado['elemento'];
        $llamado = $datos_encabezado['llamado_mesa'];
        $datos = toba::consulta_php('co_responsables_academicas')->get_ras_actividad_llamado_uncor($llamado);
        $this->s__datos = $datos;
        // Es copia o acta anulada?
        $anulada = $this->es_acta_anulada() ? 'ANULADA' : '';
        $copia = $this->es_copia() ? 'ES COPIA' : '';
        $texto = $copia . $anulada;
        // Par?metros para el Ev y las fechas de las clases para Asistencia.
        $report->set_parametro('titulo', 'S', $this->s__titulo);
        $path_logo = guarani::get_path_logo_impresion();
        $report->set_parametro('logo', 'S', $path_logo);
        $report->set_parametro('institucion', 'S', $institucion['nombre']);
        $report->set_parametro('ra_nombre', 'S', $datos['resp_acad_nombre']);
        $report->set_parametro('texto_aux', 'S', $texto);
        $str = (is_null($this->s__datos_acta['observaciones'])) ? '' : $this->s__datos_acta['observaciones'];
        $report->set_parametro('observaciones', 'S', $str);
        $report->set_parametro('nro_acta', 'S', $datos_encabezado['nro_acta']);
        $report->set_parametro('fecha', 'S', $datos_encabezado['fecha_formato_visual']);
        if ($this->es_rectificativa()) {
            $report->set_parametro('acta_referencia', 'S', $datos_encabezado['acta_referencia']);
        }
        $report->set_parametro('version', 'S', $datos_encabezado['version']);
        $report->set_parametro('codigo_nombre_actividad', 'S', $datos_encabezado['cod_nombre_actividad']);
        $str = (is_null($datos_encabezado['turno_nombre'])) ? ' - ' : $datos_encabezado['turno_nombre'];
        $report->set_parametro('turno_examen', 'S', $str);
        $report->set_parametro('mesa', 'S', $datos_encabezado['mesa_nombre']);
        $str = (is_null($datos_encabezado['llamado_nombre'])) ? ' - ' : $datos_encabezado['llamado_nombre'];
        $report->set_parametro('nombre_llamado', 'S', $str);
        $report->set_parametro('anio_academico', 'E', $datos_encabezado['anio_academico']);
        $report->set_parametro('nombre_ubicacion', 'S', $datos_encabezado['ubicacion_nombre']);


        if (!empty($datos_encabezado['acta_referencia'])) {
            $aux = toba::consulta_php('co_actas')->get_nombre_catedra_de_acta($datos_encabezado['acta_referencia']);
        } else {
            $aux = toba::consulta_php('co_actas')->get_nombre_catedra_de_acta($datos_encabezado['id_acta']);
        }

        if (isset($aux['catedra_nombre'])) {
            $report->set_parametro('catedra', 'S', $aux['catedra_nombre']);
        } else {
            $report->set_parametro('catedra', 'S', '');
        }

        // Docentes y Roles (Maximo 3 por acta)
        $docentes_actas = toba::consulta_php('co_mesas_de_examen')->get_docentes_mesa_uncor($this->s__datos_acta['llamado_mesa']);
        for ($i = 0; $i < 4; $i++) {
            $rol = '';
            $docente_nombre = '';
            if (isset($docentes_actas[$i]['docente_nombre'])) {
                $docente_nombre = $docentes_actas[$i]['docente_nombre'];
                $rol = $docentes_actas[$i]['nombre'];
            }
            $par = 'docente_' . ($i + 1);
            $report->set_parametro($par, 'S', $docente_nombre);
            $par = 'rol_' . ($i + 1);
            $report->set_parametro($par, 'S', $rol);
        }
        if (!empty($datos_encabezado['rectifica_a'])) {
            $report->set_parametro('rectifica_a', 'S', $datos_encabezado['rectifica_a']);
        } else {
            $report->set_parametro('rectifica_a', 'S', '');
        }
        if (!empty($datos_encabezado['acta_referencia'])) {
            $nombre_libro_original = toba::consulta_php('co_actas')->get_nombre_libro_de_acta($datos_encabezado['acta_referencia']);
            $report->set_parametro('nombre_libro_original', 'S', $nombre_libro_original[0]['libro_nombre']);
        } else {

            $report->set_parametro('nombre_libro_original', 'S', '');
        }
        //Se agregan los datos de los alumnos
        $xml = $this->dep('alumnos')->vista_xml();
        $report->set_xml(utf8_e_seguro($xml));

        // Si hay que generar mas de una copia replico el reporte
        for ($i = 0; $i < $cnt_ejemplares; $i++) {
            $report->completar_con_datos();
        }

        if ($this->s__datos_acta['estado'] == 'C') {
            if ($this->s__salida_mensaje == 2) {
                echo('11111111111111111111111111111111111111');
                $report->generar_salida();
//--------------------------- COMIENZA FPDF - FPDI -----------------------------------
                $this->path_reporte_generado = $report->get_nombre_archivo_generado();
                $inicio = strpos(utf8_decode($this->path_reporte_generado), '/temp') + 6;
                $fin = strpos(utf8_decode($this->path_reporte_generado), '.pdf');
                $nombre_archivo_viejo = substr(utf8_decode($this->path_reporte_generado), $inicio, ($fin - $inicio));
                $inicio2 = strpos(utf8_decode($this->s__response_blockchain), '"idActa":"') + 10;
                $fin2 = strpos(utf8_decode($this->s__response_blockchain), '","revocadoPor":');
                $nombre_archivo = substr(utf8_decode($this->s__response_blockchain), $inicio2, ($fin2 - $inicio2));

                error_reporting(E_ALL);
                ini_set('display_errors', 1);
                set_time_limit(2);
                date_default_timezone_set('UTC');

                $pdf = new atach_complement();
                echo('222222222222222222222222222222222222');
                if ($pdf instanceof \TCPDF) {
                    $pdf->SetProtection(['print'], '', 'owner');
                    $pdf->setPrintHeader(false);
                    $pdf->setPrintFooter(false);
                }
                $file = __DIR__ . '/../../../../../../temp/' . $nombre_archivo_viejo . '.pdf';
                $pageCount = $pdf->setSourceFile($file);

                for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
                    $pdf->AddPage();
                    $pageId = $pdf->importPage($pageNo, '/MediaBox');
                    $s = $pdf->useTemplate($pageId, 10, 10, 200);
                }

                $pdf->Attach(__DIR__ . '/../../../../../../temp/' . $nombre_archivo . '.json');
                $pdf->Output('F', __DIR__ . '/../../../../../../temp/archivo.pdf');
//----------------------FIN FPDF - FPDI ------------------------------------------------

                echo('3333333333333333333333333333333333333333333333');
            }
        }
    }

    function extender_objeto_js()
    {
        if ($this->s__imprimir) {
            $this->s__imprimir = false;
            echo "
				window.open(vinculador.get_url(null, null, 'evt__pdfAux', null, [{$this->objeto_js}._id], false, true)); 
			//---- Eventos ---------------------------------------------
		";
        }
    }

}

?>

Hola Matias,

Fijate que te mencione que el listener en PHP se debia llamar servicio__nombre… con lo cual en tu caso quedaria servicio__evt__pdfAux.

en mi php tengo mi funcion llamada 'evt__pdfAux' que es la que hace todo esto de la cita, es decir, vendria a ser la funcion que suplanta a vista_jasperreports. La otra funcion evt_pdf, resumiendo, consume la api de la blockchain y crea el json que tengo que adjuntar.
Creo que el problema estaba en el nombre del metodo.
Un par de mensajes atras me dijistes que necesitaba un listener, en el mensaje anterior vi que lo eliminaste de mi codigo...no hace falta entonces?
Necesitas un listener en PHP, no en JS.. por eso elimine ese codigo.
Te dejo el codigo de la clase como lo tengo ahora por si las dudas
Veamos primero que se pueda invocar correctamente el metodo, sin eso ni siquiera se esta ejecutando el código. Igual comentaria por el momento el condicional que chequea el estado del acta, de forma de obtener una respuesta siempre.

Saludos