modificacion toba_vista_jasperreports

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 ---------------------------------------------
		";
        }
    }

}

?>