TUTORIAL YII FRAMEWORK (CAPÍTULO 12) – REPORTES A PARTIR DE UNA BÚSQUEDA EN EL GRID

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 el método 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.='
<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.

Anuncios

Publicado el 27/01/2012 en Yii Framework. Añade a favoritos el enlace permanente. Deja un comentario.

Tu Opinión es Importante, Comenta!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s