Impressões e Relatórios

ÔÔÔÔÔÔÔÔÔÔÔ amigos, era isso mesmo. Como sempre digo, as vezes as respostas estão em nossa frente e não conseguimos vê, valeu pela ajuda. Agora vou tentar moldá-la…

:D

Amigo é o seguinte, conseguir gerar o arquivo porém gostaria de implementá-lo assim:

No meu admin tá assim




<div class="example_title">

	<img src="<?php echo Yii::app()->request->baseUrl; ?>/images/atualizar.png" alt="logo" />

	<?php echo "Atualizações das CTPS's"; ?>

</div>

<?php $this->renderPartial('_filter', array('drtFilter' => $drtFilter)); ?>


<?php

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

    	'id' => 'atualizar-grid',

    	'dataProvider' => $dataProvider,

    	//'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'),

    	'rowCssClass' => array('odd', 'even', 'redodd', 'redeven'),

    	'rowCssClassExpression' => '$this->dataProvider->data[$row]->statusAtualizacao==atualizar::DEVOLVIDO?$this->rowCssClass[$row%2+2]:$this->rowCssClass[$row%2]',

    	'columns' => array(

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

    	),

	));

?>



Onde solicito ao usuário o drt do funcionário para filtrar a GridView, até aí tudo bem. O que queria era ao lado do botão Filtrar colocar um imprimir também. Só que não estou conseguindo.

O _filter tá assim:




<div class="form">


	<?php echo CHtml::beginForm(); ?>


	<fieldset>

    	<div class="row">

        	<?php echo CHtml::label('Pesquisar o DRT', 'drt'); ?>

        	<?php echo CHtml::textField('drt', $drtFilter, array("style" => "background:gold; color:blue; border-bottom:1px solid blue; border-top:1px solid blue; border-left:1px solid blue; border-right:1px solid blue")); ?>


        	<?php echo CHtml::submitButton('Filtrar'); ?>


        	<?php echo CHtml::submitButton('Imprimir'); ?> <!-- Gostaria de colocar botão para funcionar -->

    	</div>

	</fieldset>

	

	<?php echo CHtml::endForm(); ?>

	

</div><!-- form -->



No Controller criei a função print e está assim:




	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();


    	if ($_POST["drt"] == '') {

        	$sql = "SELECT col.drt, col.nome, att.convocacao, att.recebimento, att.atualizacao, att.devolucao, att.observacao

            	FROM colab col

            	INNER JOIN atualizar att ON att.colaborador = col.idcolab            	

            	ORDER BY col.nome ASC";

    	} else {

        	$sql = "SELECT col.drt, col.nome, att.convocacao, att.recebimento, att.atualizacao, att.devolucao, att.observacao

            	FROM colab col

            	INNER JOIN atualizar att ON att.colaborador = col.idcolab

            	WHERE col.drt = '{$_POST["drt"]}'

            	ORDER BY col.nome ASC ";

    	}


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


    	$html .= '<html>';

    	$html .= '<head>';

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

    	$html .= '<meta http-equiv="Content-Language" content="pt-br, pt">';

    	$html .= '<title>Impressão de Atualizações de CTPS</title>';

    	$html .= '</head>';

    	$html .= '<body>';

    	$html .= '<table border="0" width="650">';

    	$html .= '<tbody>';

    	$html .= '<tr>';

    	$html .= '<td>';

    	$html .= '<p style="text-align: center;"><img src="' . Yii::app()->baseUrl . '/images/logo.png" border="0" /></p>';

    	$html .= '</td>';

    	$html .= '</tr>';

    	$html .= '<tr>';

    	$html .= '<td style="text-align: center;"><span style="color: #000080;"><span style="font-size: small;"><span style="font-family: tahoma,arial,helvetica,sans-serif;"><b>SETOR</b></span></span></span></td>';

    	$html .= '</tr>';

    	$html .= '<tr>';

    	$html .= '<td style="text-align: center;"><span style="color: #000080;"><span style="font-size: small;"><span style="font-family: tahoma,arial,helvetica,sans-serif;"><b>ATUALIZAÇÕES DA CTPS</b></span></span></span></td>';

    	$html .= '</tr>';

    	$html .= '<tr>';

    	$html .= '<td></td>';

    	$html .= '</tr>';

    	$html .= '</tbody>';

    	$html .= '</table>';

    	$html .= '<p>';

    	$html .= '<table border="1" width="650" frame="border" rules="all">';

    	$html .= '<tbody>';

    	$html .= '<tr style="background-color: #d0cdd4;">';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>DRT - Nome</b></span></td>';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>Convocação</b></span></td>';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>Recebimento</b></span></td>';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>Atualização</b></span></td>';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>Devolução</b></span></td>';

    	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;"><b>Observações</b></span></td>';

    	$html .= '</tr>';

    	foreach ($conn as $row) {

        	$html .= '<tr>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['drt'] . " - " . $row['nome'] . '</span></td>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['convocacao'] . '</span></td>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['recebimento'] . '</span></td>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['atualizacao'] . '</span></td>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['devolucao'] . '</span></td>';

        	$html .= '<td><span style="font-family: verdana,geneva; font-size: 12;">' . $row['observacao'] . '</span></td>';

        	$html .= '</tr>';

        	$html .= '</tbody>';

    	}

    	$html .= '</table>';

    	$html .= '</p>';

    	$html .= '<script type="text/javascript">

                	print();

              	</script>';

    	$html .= '</body>';

    	$html .= '</html>';

    	echo $html;

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

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

	}



Em anexo como está hoje a página, percebam que o Filter tá OK e agora só falta colocar o Imprimir pra funcionar. O que fiz de errado ou esqueci???

De antemão peço que me desculpem a ignorância. Sou um programador pouco experiente e estou começando a trabalhar com MVC agora e a separação do Modelo, Visão, Controlador ainda me confunde um pouco a cabeça e uma das coisas que tenho achado ruim nos fóruns é que muitas vezes são colocados códigos sem a indicação de onde eles estarão.

Bom, mas indo ao assunto, gostaria de saber se é aconselhável ter código Html dentro de um controller, na minha ignorância entendi que código html deveria ficar na view. Alguém pode esclarecer?

Abs,

Felipe

Felipe, HTML, CSS e JS são códigos de Frontend, que terão contato com o usuário final, sendo assim, deverão ficar na view!

Felipe,

E isso mesmo, o HTML somente na view, você pode montar a tabela em uma váriavel $hmtl .= ‘’ no Controller, e depois mostrar na view, isso dependendo dos dados, senão você monta um array e mostra com um foreach() na view.

Concordo com o amigo Newerton, vai depender da necessidade que cada um.

Amigos por favor me ajudem, não estou conseguindo mostar este relatório pegando os parâmetros via $post ou $get. Fui fazer outras partes do sistema pra tentar abrir a mente, mais quando voltei a esses benditos relatório travou denovo.

tentei seguir o exemplo do Newerton aqui mais não consegui nada. Não sei mais o que fazer.:o:o:o

Adrian, Boa tarde.

Eu fiz uma extension para ler o Jasper e criar um PDF, te resolve? Eu não usei a PHPJasperXML, pq não lê subreports avançados…consegui criar uma, creio eu bem melhor do que ela…ainda tem alguns buguinzinhos q estamos descobrindo com outros relatórios…se quiser eu subo ela pra vcs!

Manda aí amigo, vou tentar usar, se não servir pra mim pode servir pra outros amigos.

Obrigado…

Sua solução é em PHP ou vc gera os rels por Java?

Daniel na verdade estou gerando os relatórios em PHP mesmo com html como esta neste post, o que não estou conseguindo é só buscar o valor via $post, quando peço pra montar o html de todos da tabela ele monta certinho. Agora quando peço pra gerar por parâmetros que venham do usuário aí dá erro.

Segue anexo como está a minha a aplicação na hora que solicira os parâmetros.Sei que pode ser uma coisa básica, mais infelismente não estou conseguindo. Os exemplos de como estão meu código estão neste post mesmo.

Obrigado…

a minha solução é PHP inteiramente…tivemos q fazer algo que não pudesse instalar aplicativos na máquina, usar o servidor que já estava lá…

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

coloquei ai, mas como alpha…pq eu fiz baseado em 2 reports MONSTRO, com mais de 3 subreports e afim…deu certo!! aos poucos vou corrigindo os erros…

Muito bom Eric, pra os sistemas futuros irei usar sim e se pintar dúvida entre em contato, mais agora como já quase tudo feito faltando só esse detalhe não irei mudar, pois tenho uma certa urgência.

Valeu mesmo cara. ;)

Adrian,

Se deu problema, começa do zero denovo ai você consegue achar o problema, as vezes você fez alguma alteração no banco de dados que afetou o relatório.

Rêf.: http://www.yiiframework.com/forum/index.php/topic/28869-impressoes-e-relatorios/page__view__findpost__p__142265

Concordo Newerton, criando a pesquisa dessa forma que você mesmo me ensinou dá certo, ou seja, uma busca de todos que estão no banco de dados, porém gostaria de passar alguns parâmetros nesta busca como por exemplo o período e o tipo. Quando tento fazer assim aí não consigo. :unsure:

Obrigado por todos pela grande ajuda, as vezes é bom pararmos e começarmos do zero como o amigo falou.

PROBLEMA RESOLVISO. Se alguém precisar posto os códigos.

Amigos como faço pra colocar um submitButton com ‘target’ => ‘_blank’?

Tentei assim mais não deu certo.




    	<div class="row buttons">

        	<?php echo CHtml::submitButton('Imprimir', array('submit' => $this->createUrl('rparecibo/relatorioacumulado')), array('target' => '_blank')); ?>

    	</div>



Adrian,

Só é aceito o target em link(<a/>) e no form(<form/>).

Tenta colocar o target no ‘htmlOptions’ do formulário.

Newerton coloquei mais não deu certo, como seria neste meu form




<div class="form">


	<?php echo CHtml::beginForm(); ?>


	<fieldset>

    	<div class="row"> 	

        	<?php echo CHtml::label('', 'datarecibo'); ?>

        	<b>Período de: </b><?php

        	$this->widget('zii.widgets.jui.CJuiDatePicker', array(

            	'name' => 'datarecibo',

            	'language' => 'pt-BR',

            	'value' => date('d/m/Y'),

            	'options' => array(

                	'changeMonth' => 'true',

                	'changeYear' => 'true',

                	'showButtonPanel' => 'true',

                	'showAnim' => 'slideDown', // 'show' (the default), 'slideDown', 'fadeIn', 'fold'

                	'showOn' => 'both', // 'focus', 'button', 'both'

                	'buttonText' => 'Selecionar o calendário',

                	'buttonImage' => Yii::app()->request->baseUrl . '/images/calendar.png',

                	'buttonImageOnly' => true,

            	),

            	'htmlOptions' => array(

                	'style' => '

                      	width:80px;

                      	vertical-align:center;

                      	background:#FFF68F;

                      	color:blue;'

            	),

        	));

        	?>

        	<b>a</b>

        	<?php

        	$this->widget('zii.widgets.jui.CJuiDatePicker', array(

            	'name' => 'datavencimento',

            	'language' => 'pt-BR',

            	'value' => date('d/m/Y'),

            	'options' => array(

                	'changeMonth' => 'true',

                	'changeYear' => 'true',

                	'showButtonPanel' => 'true',

                	'showAnim' => 'slideDown', // 'show' (the default), 'slideDown', 'fadeIn', 'fold'

                	'showOn' => 'both', // 'focus', 'button', 'both'

                	'buttonText' => 'Selecionar o calendário',

                	'buttonImage' => Yii::app()->request->baseUrl . '/images/calendar.png',

                	'buttonImageOnly' => true,

            	),

            	'htmlOptions' => array(

                	'style' => '

                      	width:80px;

                      	vertical-align:center;

                      	background:#FFF68F;

                      	color:blue;'

            	),

        	));

        	?>

        	<b>da</b>


        	<?php

        	echo CHtml::dropDownList('tipo', 'tipo', rparecibo::listEmpresa(), array('maxlength' => '30', 'title' => 'Selecione o Tipo do Relatório',

            	'style' =>

            	'background:#FFF68F;            	

                	color:blue;

                	width:100px')

        	);

        	?>


    	</div>

    	<div class="row buttons">

        	<?php echo CHtml::submitButton('Imprimir', array('submit' => $this->createUrl('rparecibo/relatorioacumulado')), array('target' => '_blank')); ?>

    	</div>

	</fieldset>


	<?php echo CHtml::endForm(); ?>

</div><!-- form -->




Adrian,

Altera seu beginForm(), para:




<?php echo CHtml::beginForm('','post', array('target'=>'_blank')); ?>