Abrir Uma Nova Janela A Partir Da Action

Boa tarde galera,

Eu estou a uns 2 dias pesquisando sobre como fazer isso e não consigo. O que eu preciso é o seguinte: O usuário seleciona uma certa quantidade de itens, esses itens serão associados a um termo. Quando ele vai clicar em salvar existe um checkbox em cima do salvar que pergunta se ele gostaria de imprimir o relatório assim que salvar. Ele salva OK, mas eu não consigo fazer esse relatório abrir, de jeito nenhum. Na tela de consulta, pelo botão imprimir funciona normalmente, abrindo em outra aba.

O método está no meu controller, o que eu já tentei:


             

 /*Tentativa 1*/

 echo '<script>';

 echo "var tea_id = $ultimoId";

 echo'window.open("index.php?r=estoque/termoEmpenhoAdquirido/imprimirRelatorioTombo&tea_id="+tea_id) ';

 echo'</script>';


/*Tentativa 2*/

this->redirect(array('imprimirRelatorioTombo'),array('tea_id' => $ultimoId));


/*Tentativa 3*/ 

echo  Yii::app()->createUrl('termoEmpenhoAdquirido/imprimirRelatorioTombo', array('tea_id' => $ultimoId));


/*Tentativa 4 - Essa funciona, porém sobrepõe a janela do sistema*/

$this->actionImprimirRelatorioTombo($ultimoId);




Agradeço desde já.

Ninja,

O actionImprimirRelatorioTombo() ele ja abri para download ou ele carrega o relatório?


$this->redirect(Yii::app()->createUrl('termoEmpenhoAdquirido/imprimirRelatorioTombo', array('tea_id' => $ultimoId)));

Veja se assim vai funcionar.

Newerton valeu pela ajuda,

Esse método que você colocou funciona, mas faz a mesma coisa que essa linha:


$this->actionImprimirRelatorioTombo($ultimoId);

Ele sobrescreve a tela do sistema. O relatório está para ser impresso na janela em PDF, então quando aparece não tem como voltar pro sistema, só com o voltar do navegador, aí já viu né, esse botão consegue detonar um sistema :lol:

Entendi,

É complicado, por que você precisa submeter o formulário, e abrir uma nova janela.

Você pode fazer isso usando jQuery.




$('form').live('submit', function(){

	

	var check = $('input#id').is(':checked'); //adiciona a ID correta do campo

	

	if(check){

		var tea_id = $model->primaryKey;

		window.open("index.php?r=estoque/termoEmpenhoAdquirido/imprimirRelatorioTombo&tea_id="+tea_id);

	}

	

	return true;

});



Esse é modo de fazer quando for um formulário de atualizar/editar.

Agora se a váriavel $ultimoId for o último ID adicionado no banco de dados, ai vai precisar usar o ajaxForm(), que vai submeter o formulário em ajax, e retornar o ID adicionado, ai você adiciona esse ID no window.open() abrindo a janela do PDF, e debaixo do window.open() você pode colocar o location.href=’’ para direcionar o formulário para listagem, assim fica do jeito que você quer.

Vou tentar fazer aqui, primeiro vou ver se a versão do Yii tem os widgets necessários, aqui a versão é a 1.0.5 :(. Se eu conseguir eu volto e posto o resultado.

Consegui resolver,

Não ficou muuuuito bonito, mas funcionou. Eu fiz o seguinte:

Eu passei o ultimo id vindo do banco e uma flag caso o checkbox estivesse marcado, direto pra action.


 

if ($_POST["imp_termo"] == 1) {

   $imprimir = true;

                }

$this->actionAdmin($ultimoId,$imprimir);

Na view eu verifiquei se a flag era true, se for eu utilizei o window.open pra chamar o relatório. Funcionou perfeitamente.