Amigos hoy les traigo una forma de como generar Reportes en Yii a partir de una búsqueda y buscando en los foros de Yii me encontré con esta información espero les sirva como me sirvió a mi, sin mas aquí esta la explicación:
- 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%"> N° Control</td>
<td class="principal" width="7%"> N° Contrato</td>
<td class="principal" width="19%"> Empresa</td>
<td class="principal" width="10%"> Estado</td>
<td class="principal" width="9%"> Monto Contratado</td>
<td class="principal" width="25%"> Objeto Contrato</td>
<td class="principal" width="14%"> Personal Actuante</td>
<td class="principal" width="9%"> Tipo Informe</td>
</tr>';
$i=0;
$val=count($dataProvider);
while($i<$val){
$html.='
<tr class="odd">
<td class="odd" width="7%"> '.$dataProvider[$i]["num_control"].'</td>
<td class="odd" width="7%"> '.$dataProvider[$i]["num_contrato"].'</td>
<td class="odd" width="19%"> '.$dataProvider[$i]["empresa"].'</td>
<td class="odd" width="10%"> '.$dataProvider[$i]["estado0"]["nombre_estado"].'</td>
<td class="odd" width="9%"> '.$dataProvider[$i]["monto_contratado"].'</td>
<td class="odd" width="25%"> '.$dataProvider[$i]["objeto_contrato"].'</td>
<td class="odd" width="14%"> '.$dataProvider[$i]["personal_actuante"].'</td>
<td class="odd" width="9%"> '.$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.
Via: http://www.yiiframework.com/forum/index.php?/topic/22686-reportes-en-yii-a-partir-de-una-busqueda/
0 comentarios:
Publicar un comentario