Yii Framework Forum: Reportes en Yii a partir de una busqueda - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Reportes en Yii a partir de una busqueda Hacer reportes en Yii a partir de una busqueda Rate Topic: ***** 1 Votes

#1 User is offline   Gabriel Duarte Martinez 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 09-July 11

Posted 16 August 2011 - 09:14 AM

He visto en el foro que hay muchas personas preguntando como exportar en PDF a partir de una búsqueda en la vista admin, aquí les traigo una solución a ese problema.

- En la función search() del modelo en cuestión agregamos al final (antes del retorno) las siguientes lineas de código:

     $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(
                        'criteria'=>$criteria,
                        'sort'=>$sort,
                        'pagination'=>false,
                ));


Donde $criteria son los datos de filtrado y $sort el arreglo de ordenación, eso nos guardará en una variable de sesión la ultima búsqueda realizada, si no hemos realizado ninguna búsqueda estaremos guardando todos los resultados del listado, es importante colocar en false la paginación para que pueda traernos todos los resultados.

- En la vista admin agregar el botón de exportar con array('label'=>'Exportar a PDF', 'url'=>array('pdf')), en la configuración del menú.

- En el controlador agregamos la siguiente función:

public function actionPdf()
    {
        $this->render('pdf');
    }


- Agrega la action pdf en el accessRules del controlador, para que los usuarios del sistema puedan tener permisos de utilizarla.

- La librería que uso y recomiendo para exportar pdf es MPDF, la pueden descargar de su pagina oficial, una vez descargada la copian en extensions.

- Un ejemplo para la vista pdf es el siguiente:

<?
$pdf = Yii::createComponent('application.extensions.MPDF52.mpdf');
$dataProvider = $_SESSION['datos_filtrados']->getData();
$contador=count($dataProvider);
    $html.=' <link rel="stylesheet" type="text/css" href="'.Yii::app()->request->baseUrl.'/css/pdf.css" />

    <table align="center"><tr>
    <td align="center"><b>LISTADO DE CONTRATOS</b></td>
    </tr></table>
    Total Resultados: '.$contador.'
        <table class="detail-view2" repeat_header="1" cellpadding="1" cellspacing="1" width="100%" border="0">
            <tr class="principal">
                <td class="principal" width="7%">&nbsp;N° Control</td>
                <td class="principal" width="7%">&nbsp;N° Contrato</td>
                <td class="principal" width="19%">&nbsp;Empresa</td>
                <td class="principal" width="10%">&nbsp;Estado</td>
                <td class="principal" width="9%">&nbsp;Monto Contratado</td>
                <td class="principal" width="25%">&nbsp;Objeto Contrato</td>
                <td class="principal" width="14%">&nbsp;Personal Actuante</td>
                <td class="principal" width="9%">&nbsp;Tipo Informe</td>
            </tr>';
         $i=0;
         $val=count($dataProvider);
         
         while($i<$val){
$html.='
            <tr class="odd">
                <td class="odd" width="7%">&nbsp;'.$dataProvider[$i]["num_control"].'</td>
                <td class="odd" width="7%">&nbsp;'.$dataProvider[$i]["num_contrato"].'</td>
                <td class="odd" width="19%">&nbsp;'.$dataProvider[$i]["empresa"].'</td>
                <td class="odd" width="10%">&nbsp;'.$dataProvider[$i]["estado0"]["nombre_estado"].'</td>
                <td class="odd" width="9%">&nbsp;'.$dataProvider[$i]["monto_contratado"].'</td>
                <td class="odd" width="25%">&nbsp;'.$dataProvider[$i]["objeto_contrato"].'</td>
                <td class="odd" width="14%">&nbsp;'.$dataProvider[$i]["personal_actuante"].'</td>
                <td class="odd" width="9%">&nbsp;'.$dataProvider[$i]["informe0"]["nombre_tipo_informe"].'</td>
            ';
    $html.='</tr>'; $i++;
                        }
    $html.='</table>';
$mpdf=new mPDF('win-1252','LETTER-L','','',9,9,24,10,5,5);
$mpdf->WriteHTML($html);
$mpdf->Output('Reporte_Contratos.pdf','D');
exit;
?>


- Como vemos al principio del ejemplo tomamos los datos filtrado mediante la variable de sesión y disponemos de ellos como queramos en el pdf

Espero que les sirva de ayuda, ahí en el ejemplo puse como acceder incluso a campos de las otras tablas mediante las relaciones.

Twitter: @gabrielduarte77
Correo: gabrielduarte77@gmail.com

Otros Temas:
Exportar del Cgridview a PDF
2

#2 User is offline   blammo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 15-November 11
  • Location:Rosario, Santa Fe, Argentina

Posted 23 December 2011 - 07:51 AM

Excelente ejemplo, funciona muy bien :)
0

#3 User is offline   chyo hdz 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 04-January 13

Posted 12 January 2013 - 07:49 PM

Disculpa Gabriel una duda ya intente crear el boton para generar el pdf pero no me sale nada podrias poner esa parte mas explicada por favor?? de antemano gracias por el aporte
0

#4 User is offline   Yeye 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 14-March 12

Posted 23 January 2013 - 01:20 AM

No lo he probado aún, por eso me aventuro a esta pregunta: ¿lo haz probado con tcpdf o con dompdf?.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users