Impressões e Relatórios

Amigos,

Alguém pode me disponibilizar um modelo de rebibo de pagamento, ou me ensinar como posso fazer. A idéia é que após o usuário cadastrar o pagamento recebido, ter um botão que pegue esses dados e monte um recibo de pagamento com logo da empresa e tudo. Gostaria que o usuário visualizasse em html mesmo, tipo esses sites que já montam o boleto bancário, e podesse imprimir direto, sem gerar em pdf.

Gostaria dessa ajuda agora. Agradeço a todos.

Bem amigos como não obtive nenhum exemplo, fiz o recibo em html mesmo e pedi pra visualizar em um nova guia. Como tenho uma certa urgência vai ficar assim mesmo. Pra trabalhos futuros a quem interessar pode deixar seus exemplos.

A quem desejar este exemplo ficou assim, para visualizar o valor que pego do BD usei a função que comentamos no post http://www.yiiframework.com/forum/index.php/topic/29168-valor-por-extenso/.

ReciboController




	public function actionPrint() {

    	$model = rcprecibo::model()->findByPk($_GET['id']);

    	$html = $this->renderPartial('view', array('model' => $model), true);


    	/* Linhas Cabeçalhos */

    	$linhacabecalho1 = "Endereço da Empresa";

    	$linhacabecalho2 = "Cidade/Estado e CEP";

    	$linhacabecalho3 = "FONE e FAX";


    	/* Linhas Final */

    	$linhafinal1 = "Nome da Empresa";

    	$linhafinal2 = "<b>CNPJ</b>. 00.000.000/0004-31 - <b>INSC. EST.</b> 00.000.000-1";


    	/* Diretorio que será salvo */

    	$dir = dirname(__FILE__) . '/pdf/';


    	/* Nome do arquivo */

    	$file = $model->numero . "/" . $model->ano. '.pdf';


    	/* Importando a classe */

    	Yii::import('application.extensions.mpdf.mpdf');

    	$mpdf = new mpdf();

    	$mpdf->WriteHTML($html);

    	$html = '

        	<html>

            	<head>

                	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

                	<meta http-equiv="Content-Language" content="pt-br, pt">

                	<title>Impressão de RPC - Recibo de Pagamento para Cliente</title>

            	</head>

            	<body>

                	<p>

                	<table style="height: 842px; text-align: left;" align="center" border="0" width="650">

                    	<tbody>

                        	<tr>

                            	<td><img src="' . Yii::app()->baseUrl . '/images/logo.png" border="0" /></td>

                            	<td><span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho1 . '

                                        	<br>' . $linhacabecalho2 . '</span></span><br /> <span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho3 . '</span></span><br /></td>

                            	<td style="text-align: center;" valign="middle"><span style="font-size: small;"></span><span style="font-size: small;"><b>Nº </b>' . $model->numero . "/" . $model->ano . '</span></td>

                        	</tr>

                        	<tr>

                            	<td rowspan="2" style="text-align: center;" colspan="2"><span style="font-size: medium;"><b>RECIBO</b></span></td>

                            	<td style="text-align: center;" valign="middle">

                                	<p><span style="font-size: small;"><b>1ª VIA</b> <span style="text-decoration: underline;">CLIENTE</span></span></p>

                                	<p><span style="font-size: small;"><span style="text-decoration: underline;"><br /></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td align="center" valign="middle">

                                	<p style="text-align: center;"><span style="text-decoration: underline;"><span style="font-size: medium;"><b>R$ ' . number_format($model->valor, 2, ',', '.') . '</b></span></span></p>

                                	<p style="text-align: center;"><span style="text-decoration: underline;"><span style="font-size: medium;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3">

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;">Recebemos de

                                            	<b>' . $model->cliente0->nome . '</b>, a importância supra de <b>' . $model->extenso($model->valor, true) . '</b> referente a <b>' . $model->tipo0->descricao . " " . $model->descricao . '.</b></span></span></p>

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="right" valign="middle">

                                	<p>' . $model->data_extenso($model->datarecebimento) . '</p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="center" valign="middle">____________________________________________<br /> <address><span style="font-size: 9;"><i><span style="font-family: arial,helvetica,sans-serif;">

                                                	' . $linhafinal1 . '</span></i></span></address> <address><span style="font-size: 9;"><i><span style="font-family: arial,helvetica,sans-serif;">' . $linhafinal2 . '</span></i></span></address>

                                	<p> </p>

                                	<p>------------------------------------------------------------------------------------------------------------------------</p>

                                	<p> </p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td><img src="' . Yii::app()->baseUrl . '/images/logo.png" border="0" /></td>

                            	<td><span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho1 . '

                                        	<br>' . $linhacabecalho2 . '</span></span><br /> <span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho3 . '</span></span><br /></td>

                            	<td align="center" valign="middle"><span style="font-size: small;"><b>Nº </b>' . $model->numero . "/" . $model->ano . '</span></td>

                        	</tr>

                        	<tr>

                            	<td rowspan="2" colspan="2" align="center" valign="middle"><span style="font-size: medium;"><b>RECIBO</b></span></td>

                            	<td align="center" valign="middle">

                                	<p><span style="font-size: small;"><b>2ª VIA</b> <span style="text-decoration: underline;">CD</span></span></p>

                                	<p><span style="font-size: small;"><span style="text-decoration: underline;"><br /></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td align="center" valign="middle">

                                	<p><span style="text-decoration: underline;"><span style="font-size: medium;"><b>R$ ' . number_format($model->valor, 2, ',', '.') . '</b></span></span></p>

                                	<p><span style="text-decoration: underline;"><span style="font-size: medium;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="left" valign="middle">

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;">Recebemos de

                                            	<b>' . $model->cliente0->nome . '</b>, a importância supra de <b>' . $model->extenso($model->valor, true) . '</b> referente a <b>' . $model->tipo0->descricao . " " . $model->descricao . '.</b></span></span></p>

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="right" valign="middle">

                                	<p>' . $model->data_extenso($model->datarecebimento) . '</p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="center" valign="middle">____________________________________________<br /> <address><span style="font-size: 9;"><span style="font-family: arial,helvetica,sans-serif;">

                                            	' . $linhafinal1 . '</span></span></address> <address><span style="font-size: 9;"><span style="font-family: arial,helvetica,sans-serif;">' . $linhafinal2 . '</span></span></address>

                                	<p> </p>

                                	<p>------------------------------------------------------------------------------------------------------------------------</p>

                                	<p> </p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td><img src="' . Yii::app()->baseUrl . '/images/logo.png" border="0" /></td>

                            	<td align="left" valign="middle"><span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho1 . '

                                        	<br>' . $linhacabecalho2 . '</span></span><br /> <span style="font-size: 11;"><span style="font-family: Arial Unicode MS;">' . $linhacabecalho3 . '</span></span><br /></td>

                            	<td align="center" valign="middle"><span style="font-size: small;"><b>Nº </b>' . $model->numero . "/" . $model->ano . '</span></td>

                        	</tr>

                        	<tr>

                            	<td rowspan="2" colspan="2" align="center" valign="middle"><span style="font-size: medium;"><b>RECIBO</b></span></td>

                            	<td align="center" valign="middle">

                                	<p><span style="font-size: small;"><b>3ª VIA</b> <span style="text-decoration: underline;">ARQUIVO</span></span></p>

                                	<p><span style="font-size: small;"><span style="text-decoration: underline;"><br /></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td align="center" valign="middle">

                                	<p><span style="text-decoration: underline;"><span style="font-size: medium;"><b>R$ ' . number_format($model->valor, 2, ',', '.') . '</b></span></span></p>

                                	<p><span style="text-decoration: underline;"><span style="font-size: medium;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="left" valign="middle">

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;">Recebemos de

                                            	<b>' . $model->cliente0->nome . '</b>, a importância supra de <b>' . $model->extenso($model->valor, true) . '</b> referente a <b>' . $model->tipo0->descricao . " " . $model->descricao . '.</b></span></span></p>

                                	<p><span style="font-family: times new roman,times;"><span style="font-size: small;"><b><br /></b></span></span></p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="right" valign="middle">

                                	<p>' . $model->data_extenso($model->datarecebimento) . '</p>

                            	</td>

                        	</tr>

                        	<tr>

                            	<td colspan="3" align="center" valign="middle">____________________________________________<br /> <address><span style="font-size: 9;"><span style="font-family: arial,helvetica,sans-serif;">

                                            	' . $linhafinal1 . '</span></span></address> <address><span style="font-size: 9;"><span style="font-family: arial,helvetica,sans-serif;">' . $linhafinal2 . '</span></span></address></td>

                        	</tr>

                    	</tbody>

                	</table>

            	<script type="text/javascript">

                	print();

            	</script>

        	</body>

        	</html>

                	';

    	echo $html; 

	}



No \recibo\views\recibo\view




<?php

$this->widget('ext.widgets.amenu.XActionMenu', array(

	'htmlOptions' => array('class' => 'actionBar'),

	'encodeLabel' => false,

	'items' => array(

    	array('label' => '<img src="' . Yii::app()->baseUrl . '/images/printer--arrow.png" /> Gerar Recibo', 'url' => array('print', 'id' => $model->idrcprecibo), 'linkOptions' => array('target' => '_blank')),

	),

));

?>



No admin também coloquei um button




<?php

$this->widget('zii.widgets.grid.CGridView', array(

	'id' => 'rcprecibo-grid',

	'dataProvider' => $model->search(),

	'filter' => $model,

	'pager' => array('cssFile' => Yii::app()->baseUrl . '/css/gridViewStyle/gridView.css'),

	'cssFile' => Yii::app()->baseUrl . '/css/gridViewStyle/gridView.css',

	'htmlOptions' => array('class' => 'grid-view rounded'),

	'columns' => array(

 	...................................

    	array(

        	'header' => 'Opções',

        	'class' => 'CButtonColumn',

        	'template' => '{view}{update}{delete}{print}',

        	'updateButtonLabel' => 'Editar o Recibo',

        	'viewButtonLabel' => 'Detalhes do Recibo',

        	'deleteButtonLabel' => 'Apagar Recibo',

        	'viewButtonImageUrl' => Yii::app()->baseUrl . '/css/gridViewStyle/images/' . 'gr-view.png',

        	'updateButtonImageUrl' => Yii::app()->baseUrl . '/css/gridViewStyle/images/' . 'gr-update.png',

        	'deleteButtonImageUrl' => Yii::app()->baseUrl . '/css/gridViewStyle/images/' . 'gr-delete.png',

        	'buttons' => array(

            	'print' => array(

                	'label' => 'Gerar e Imprimir Recibo',

                	'imageUrl' => Yii::app()->baseUrl . '/css/gridViewStyle/images/' . 'printer--arrow.png',

                	'url' => 'Yii::app()->createUrl("/rcprecibo/print", array("id" => $data->idrcprecibo))',

                	'options' => array('target' => '_blank'),

                	'click' => 'function(){if(confirm("Tem a certeza que deseja gerar o Recibo?"))alert("Obrigado! Após imprimir feche a guia de impressão.");else return false; }',

            	),

        	),

    	),

	),

)); ?>



Sei que pode estar um pouco grosseiro mais pra mim serviu bem…;D

Atualmente utilizo uma biblioteca em JQuery para desenhar os Relatórios…


http://raphaeljs.com/

Bem fácil, rapida e dinâmica de usar e atende as necessidades.

Caso queira trabalhar com outras, neste site tem algumas dicas:


http://www.1stwebdesigner.com/css/top-jquery-chart-libraries-interactive-charts/

Amigos,

Como ja disse neste post anteriomente, tenho muitas dúvidas em relação a relatórios, porém com a ajuda dos amigos consegui gerar relatórios apartir do ID, até aí tudo bem, porém ainda não consigo gerar um relatório com varias informações de um determinado cliente, por exemplo:

Digamos que queira um relatório que possa visualizar todas as compras dos clientes de um determinado intervalo de tempo, intervalo esse que será passado pelo usuário, com subtotais de cada cliente e um total no final

Como posso fazer isto amigos, pode ser visualizado em html mesmo, como fiz anteriomente.

Desde já agradeço a todos.

Adrian,

Mais este relatório e simples, os relatórios dificeis são aqueles de mesclar diversas tabelas.

Faça uma página que retorna os dados, se quizer faz usando o Yii::app()->createCommand(), com linha de query padrão mesmo, e mostras os dados em tabela, sem formatação de estilo, faz tabela crua mesmo.

Depois disso, na mesma página depois que os resultados estiver mostrando, coloca a tabela em uma variável tipo $html = ‘<table>…’, e exporta isso para PDF.

Ai depois de tudo funcionando, vai ajustando a tabela por parte e visualizando em PDF.

Se vai ver no final vai está montando um relatório bonito, para o cliente fazer download.

Como sempre você me ajudando muito amigo Newerton. Desculpas pela ignorância, mais como poderia usar o Yii::app()->createCommand() neste exemplo que você me passou???

Adrian, vamos pegar seu exemplo acima.

Faz um:


$sql = "SELECT * FROM cliente cli 

JOIN cliente_pedido cp ON cli.codcliente = cp.codcliente 

JOIN pedido ped ON cp.codpedido = ped.codpedido 

JOIN produto prod ON ped.codproduto = prod.codproduto";


$conn = Yii::app()->createCommand()->execute()->queryAll();


echo '<table>';

echo '<tr>';

echo '<th>Produto</th>';

echo '</tr>';

foreach($conn as $row){

    echo '<tr>';

    echo '<td>'.$row['tituloProduto'].'</td>';

    echo '</tr>';

}

echo '</table>';

Você pode usar uma view de teste, somente para gerar uma tabela de dados, se ve que conseguiu acertar a tabela, ai você modifica para ajustar ao seu sistema.

Mais usa o createCommand() somente se estiver tendo dificuldade com relacionamento de tabelas.

Newerton…Socorro…O que fiz de errado:blink:




	public function actionPrint() {


    	$dir = dirname(__FILE__) . '/pdf/';


    	/* Nome do arquivo */

    	$file = time() . '.pdf';

    	/* Importando a classe */

    	Yii::import('application.extensions.mpdf.mpdf');

    	$mpdf = new mpdf();

    	$mpdf->WriteHTML($html);


    	$sql = "SELECT * FROM cliente cli 

                	JOIN cliente_pedido cp ON cli.codcliente = cp.codcliente 

                	JOIN pedido ped ON cp.codpedido = ped.codpedido 

                	JOIN produto prod ON ped.codproduto = prod.codproduto";


    	$conn = Yii::app()->createCommand()->execute()->queryAll($sql);


    	echo '<table>';

    	echo '<tr>';

    	echo '<th>Produto</th>';

    	echo '</tr>';

    	foreach ($conn as $row) {

        	echo '<tr>';

        	echo '<td>' . $row['tituloProduto'] . '</td>';

        	echo '</tr>';

    	}

    	echo '</table>';

	}



O link no admim


<?php echo CHtml::link('Imprimir', array('/atualizar/print')); ?>

Aí quando clico aparece o erro


CWebApplication and its behaviors do not have a method or closure named "createCommand".  

:o

Esqueci de mencionar!

Coloca a variavel $sql dentro do createCommand()


$conn = Yii::app()->createCommand()->execute()->queryAll($sql);

Ao invés de dá echo na function, usa como váriavel.




        $html = '<table>';

        $html .= '<tr>';

        $html .= '<th>Produto</th>';

        $html .= '</tr>';

        foreach ($conn as $row) {

                $html .= '<tr>';

                $html .= '<td>' . $row['tituloProduto'] . '</td>';

                $html .= '</tr>';

        }

        $html .= '</table>';




        $mpdf->WriteHTML($html)



Ai você remove o WriteHTML() lá de cima.

Outra coisa que vi hehehe

Ta usando minha query SQL por que? Fiz de modelo, eu nen sei se está usando essas estrutura de tabela! hehehe

:rolleyes: Eu sei Newerton, coloquei esse seu exemplo só pra ficar mais fácil. Fiz da forma que você falou mais continua dando o mesmo erro;




	public function actionPrint() {


    	$dir = dirname(__FILE__) . '/pdf/';

    	/* Nome do arquivo */

    	$file = time() . '.pdf';

    	/* Importando a classe */

    	Yii::import('application.extensions.mpdf.mpdf');

    	$mpdf = new mpdf();

    	//$mpdf->WriteHTML($html);


    	$sql = "SELECT * FROM atualizar atual

        	JOIN colab col ON col.idcolab = att.colaborador

        	";


    	$conn = Yii::app()->createCommand()->execute()->queryAll($sql);


    	$html = '<table>';

    	$html .= '<tr>';

    	$html .= '<th>Colaboradores</th>';

    	$html .= '</tr>';

    	foreach ($conn as $row) {

        	$html .= '<tr>';

        	$html .= '<td>' . $row['Atualizações dos Colaboradores'] . '</td>';

        	$html .= '</tr>';

    	}

    	$html .= '</table>';




    	$mpdf->WriteHTML($html);

	}



E agora o que fiz de errado??:blink:

Adrian

Tenta usar essa extensao.

http://www.yiiframework.com/extension/pdf

Muito obrigado pela sua dica Railton, mais já estou usando o MPDF. O problema é que nunca fiz e não estou conseguindo imprimir um array, digamos assim, gostaria por exemplo de imprimir todas as atualizações de um determinado funcionário. Quando é pra imprimir dados pelo ID fica perfeito, agora quando preciso gerar um arquivo que me dê subtotais aí o bicho pegar.

Como nunca fiz isto, estou com dificuldades.

No controler vai montando todos os dados que voce quer e repassa pra view

Tipo um que fiz, que e uma assembleia, cada assembleia tem varias enquetes, e cada enquete tem n respostas

Fiz as querys e repassei pra view

array(‘assembleia’=>$assembleia,‘enquete’=>$enquete,‘alternativas’=>$alternativas);

e na view você monta da forma que você quiser os dados.

Railton

Muda o a linha:


$conn = Yii::app()->createCommand()->execute()->queryAll($sql);

para:


$conn = Yii::app()->createCommand($sql)->execute()->queryAll();

E abaixo do WriteHTML(), coloca o Output():


$mpdf->Output($file,'D');

Newerton,

Ainda o mesmo problema


CWebApplication and its behaviors do not have a method or closure named "createCommand".	




	public function actionPrint() {


    	$dir = dirname(__FILE__) . '/pdf/';

    	/* Nome do arquivo */

    	$file = time() . '.pdf';

    	/* Importando a classe */

    	Yii::import('application.extensions.mpdf.mpdf');

    	$mpdf = new mpdf();

    	//$mpdf->WriteHTML($html);


    	$sql = "SELECT * FROM atualizar atual

        	JOIN colab col ON col.idcolab = att.colaborador

        	";


    	$conn = Yii::app()->createCommand($sql)->execute()->queryAll();


    	$html = '<table>';

    	$html .= '<tr>';

    	$html .= '<th>Colaboradores</th>';

    	$html .= '</tr>';

    	foreach ($conn as $row) {

        	$html .= '<tr>';

        	$html .= '<td>' . $row['Atualizações dos Colaboradores'] . '</td>';

        	$html .= '</tr>';

    	}

    	$html .= '</table>';


    	$mpdf->WriteHTML($html);

    	$mpdf->Output($file,'D');

	}



Errei na instrução, corrigi ae:


$conn = Yii::app()->db->createCommand($sql)->execute()->queryAll();



Falto a conexão com o banco de dados.

Amigo,

Agora mostrou o erro




Fatal error:  Call to a member function queryAll() on a non-object in C:\wamp\www\ControleCTPS\protected\controllers\AtualizarController.php on line 298



justamente na linha




$conn = Yii::app()->db->createCommand($sql)->execute()->queryAll();



Remove o execute()




$conn = Yii::app()->db->createCommand($sql)->queryAll();



Ref.: http://www.yiiframework.com/doc/guide/1.1/en/database.dao#fetching-query-results

Agora rodou amigo, porém, ela só mostra o título e pronto. Testei a query no sql-front e rodou perfeita. Qual o prob agora??:unsure:




	public function actionPrint() {


    	$dir = dirname(__FILE__) . '/pdf/';

    	/* Nome do arquivo */

    	$file = time() . '.pdf';

    	/* Importando a classe */

    	Yii::import('application.extensions.mpdf.mpdf');

    	$mpdf = new mpdf(); 

    	

    	$sql = "SELECT colaborador, statusAtualizacao FROM atualizar";


    	$conn = Yii::app()->db->createCommand($sql)->queryAll();


    	$html = '<table>';

    	$html .= '<tr>';

    	$html .= '<th><h1>Colaboradores</h1></th>'; // Só mostra o título

    	$html .= '</tr>';

    	foreach ($conn as $row) {

        	$html .= '<tr>';

        	$html .= '<td>' . $row['Atualizações dos Colaboradores'] . '</td>';

        	$html .= '</tr>';

    	}    	

    	$html .= '</table>';

    	echo $html;

    	/*$mpdf->WriteHTML($html);

    	$mpdf->Output($file,'D');*/

	}



Veja se o problema e este campo

$row[‘Atualizações dos Colaboradores’]

Veja se o nome no banco e esse mesmo, se for muda pra um nome sem espaços.

Railton