Confirmar Gravar, abrir PDF e retornar a listagem. Boa tarde. Tenho o código abaixo para Confirmar a gravação do Registro. Gostaria de saber como faço para se escolher Gravar, abrir um PDF e retornar a listagem? Esse código quando clico no botão para confirmar ele está limpando o formulário. Obrigado ...
CM
Confirmar Gravar, abrir PDF e retornar a listagem.  
Boa tarde.
Tenho o código abaixo para Confirmar a gravação do Registro.
Gostaria de saber como faço para se escolher Gravar, abrir um PDF e retornar a listagem?

Esse código quando clico no botão para confirmar ele está limpando o formulário.
Obrigado

 
  1. <?php
  2. function onConfirma($param)
  3. {
  4. $action = new TAction(array($this, 'ConfirmarCompra'));
  5. $action->setParameters($param);
  6. new TQuestion('Confirma a Compra ?', $action);
  7. }
  8. public static function ConfirmarCompra( $param )
  9. {
  10. try
  11. {
  12. TTransaction::open('ourorio');
  13. $repository = new TRepository('Compras');
  14. //$repository->delete();
  15. new TMessage('info', 'Compra Registrada com Sucesso!.');
  16. TTransaction::close();
  17. }
  18. catch (Exception $e)
  19. {
  20. new TMessage('error', 'Error ' . $e->getMessage());
  21. TTransaction::rollback();
  22. }
  23. }
  24. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (11)


NR

Pra redirecionar para a listagem, a TMessage aceita um TAction como terceiro parâmetro, executado após o clique no botão.
 
  1. <?php
  2. new TMessage('info', 'Compra Registrada com Sucesso!.', new TAction('classe','metodo'));
  3. ?>

Sobre o pdf, pode usar a função TPage::openFile('arquivo.pdf');
CM

Bom dia Nataniel. Obrigado por responder.

Quanto a voltar para a Lista eu já sei como fazer;
Usar a função TPage::openFile('arquivo.pdf'); não faço a mínima idéia de como usar., nem conhecia.

Esse código que postei quando clico no botão para confirmar ele está limpando o formulário.
Obrigado
NR

Transforme a função onConfirma em estática, dessa forma não haverá remontagem da tela
CM

Na verdade mudar para estática não executava nada.
Alterei as 2 funções para:

public function onConfirma($param)
public function ConfirmarCompra( $param )

E assim funciona sem limpar a tela. Agora só falta abrir o PDF e finalizo.
Se puder ajudar nisso, agradeço. Ele abre mas não exibe nada.
Obrigado
CM

Achei que havia funcionado, mas não está, continua limpando o form.
CM

Alguém pra ajudar?
NR

Confirme que seu ambiente está configurado para mostrar os erros da aplicação. Por exemplo, ao mudar uma função para estática, você não pode usar "$this" dentro dela. Isso gera um erro e provavelmente por isso que o código não executa.
 
  1. <?php
  2. //$action = new TAction(array($this, 'ConfirmarCompra'));
  3. $action = new TAction(array(__CLASS__, 'ConfirmarCompra'));
  4. ?>

Quanto ao pdf, você quer abrir um pdf já existente? Onde está esse arquivo? Você precisa passar o caminho relativo do arquivo para a função openFile.
CM

A confirmação funcionou perfeitamente Naniel. O erro estava nessa linha mesmo.

Ficou assim:

 
  1. <?php
  2. public static function onConfirma($param)
  3. {
  4. $action = new TAction(array(__CLASS__, 'ConfirmarCompra'));
  5. $action->setParameters($param);
  6. new TQuestion('Confirma os Dados da Compra ?', $action);
  7. }
  8. public static function ConfirmarCompra( $param )
  9. {
  10. try
  11. {
  12. TTransaction::open('ourorio');
  13. $repository = new TRepository('Compras');
  14. //$repository->delete();
  15. new TMessage('info', 'Compra Registrada com Sucesso!');
  16. TPage::openFile('app/output/Recibo.pdf');
  17. TTransaction::close();
  18. }
  19. catch (Exception $e)
  20. {
  21. new TMessage('error', 'Error ' . $e->getMessage());
  22. TTransaction::rollback();
  23. }
  24. }
  25. ?>
CM

Quanto ao PDF eu tenho uma função que gera o PDF através de u botão.
O nome é unico Recibo.pdf

Nesse caso, precisava que ao confirmar a compra ele gerasse o arquivo PDF baseado nesse registro.

Segue o código que gera o PDF:

 
  1. <?php
  2. public function OnPDF($param)
  3. {
  4. // open a transaction with database 'samples'
  5. TTransaction::open('ourorio');
  6. // load all customers
  7. $repository = new TRepository('ComprasSub');
  8. $criteria = new TCriteria;
  9. $ComprasSub = $repository->load($criteria);
  10. $data = $this->form->getData('ComprasSub');
  11. $this->form->validate();
  12. $pdf = new TPDFDesigner;
  13. $pdf->fromXml('app/reports/recibo_compra_cliente.pdf.xml');
  14. $pdf->replace('{id_compra}',$data->id_compra);
  15. $pdf->replace('{data_compra}',DateTime::createFromFormat('Y-m-d', $data->data_compra)->format( 'd/m/Y' ));
  16. $pdf->replace('{cliente_txt}',utf8_decode($data->cliente_txt));
  17. $pdf->replace('{endereco_tipo}',utf8_decode($data->cliente_endereco_tipo), 0, 0, 'L');
  18. $pdf->replace('{endereco_numero}',utf8_decode($data->cliente_endereco_numero), 0, 0, 'L');
  19. $pdf->replace('{endereco}',utf8_decode($data->cliente_endereco), 0, 0, 'L');
  20. $pdf->replace('{bairro}',utf8_decode($data->cliente_bairro), 0, 0, 'L');
  21. $pdf->replace('{cpf}',utf8_decode($data->cliente_cpf), 0, 0, 'L');
  22. $pdf->replace('{identidade}',utf8_decode($data->cliente_identidade), 0, 0, 'L');
  23. $pdf->replace('{telefone}',utf8_decode($data->cliente_telefone), 0, 0, 'L');
  24. $pdf->replace('{nascimento}',DateTime::createFromFormat('Y-m-d', $data->cliente_nascimento)->format( 'd/m/Y' ));
  25. $pdf->replace('{cidade}',utf8_decode($data->cliente_cidade), 0, 0, 'L');
  26. $pdf->replace('{estado}',utf8_decode($data->cliente_estado), 0, 0, 'L');
  27. $pdf->replace('{email}',utf8_decode($data->cliente_email), 0, 0, 'L');
  28. $pdf->replace('{vendedor_txt}',utf8_decode($data->vendedor_txt));
  29. $pdf->replace('{loja_txt}',utf8_decode($data->loja_txt));
  30. $pdf->replace('{loja_id}',utf8_decode($data->loja_id));
  31. $pdf->generate();
  32. // Itens do Pedido
  33. //$pedidos_list = ComprasSub::where('compra_id','=',$id_compra)->load();
  34. //if ($pedidos_list)
  35. //{
  36. foreach ($ComprasSub as $pedido_list)
  37. {
  38. $pdf->gotoAnchorX('details');
  39. $pdf->Ln(18);
  40. $pdf->Cell(50, 12, utf8_decode($pedido_list->quantidade), 0, 0, 'R');
  41. $pdf->Cell(25, 12, utf8_decode($pedido_list->unidade), 0, 0, 'R');
  42. $pdf->Cell(100, 12, utf8_decode($pedido_list->descricao), 0, 0, 'L');
  43. $pdf->Cell(170, 12, utf8_decode($pedido_list->kilate_txt), 0, 0, 'R');
  44. $pdf->Cell(50, 12, utf8_decode($pedido_list->tipo_compra_txt), 0, 0, 'R');
  45. $pdf->Cell(115, 12, number_format((double)$pedido_list->valor_unit, 2, ',', '.'), 0, 0, 'R');
  46. $pdf->Cell(70, 12, number_format((double)$pedido_list->subtotal, 2, ',', '.'), 0, 0, 'R');
  47. // grid background
  48. $fill = !$fill;
  49. }
  50. //}
  51. // inicio do rodapé
  52. $pdf->SetY(-25);
  53. $pdf->SetFont('Arial', '', 8);
  54. $pdf->setFontColorRGB( '#000000' );
  55. $pdf->Cell(590, 10, utf8_decode('Pág. ').$pdf->PageNo().' de {nb}',0,0,'R');
  56. $pdf->SetY(-25);
  57. $pdf->Cell(130, 10, utf8_decode('Sistema Gestor OuroRio © 2021 '),0,0,'R');
  58. $pdf->SetY(-25);
  59. $pdf->Cell(340,10,utf8_decode("Impresso em ".date("d/m/Y H:i:s"."")),0,1,'R');
  60. $pdf->SetY(-25);
  61. $pdf->Cell(420,10,utf8_decode(" Por ".TSession::getValue('username')),0,1,'R'); //nome do usuário
  62. // fim do rodapé
  63. $file = 'app/output/Recibo.pdf';
  64. if (!file_exists($file) OR is_writable($file))
  65. {
  66. $pdf->save($file);
  67. //parent::openFile($file);
  68. $window = TWindow::create('Ouro Rio', 0.8, 0.8);
  69. $object = new TElement('object');
  70. $object->data = $file;
  71. $object->type = 'application/pdf';
  72. $object->style = "width: 100%; height:calc(100% - 10px)";
  73. $window->add($object);
  74. $window->show();
  75. }
  76. else
  77. {
  78. throw new Exception(_t('Permission denied') . ': ' . $file);
  79. }
  80. TToast::show('success','RECIBO GERADO COM SUCESSO!', 'top left', 'fas fa-check');
  81. TTransaction::close();
  82. AdiantiCoreApplication::loadPage( 'ComprasList' );
  83. exit;
  84. }
  85. ?>


Eu ainda estou apanhando pra fazer o detalhe do PDF aparecer somente o item do Master, porquê estão aparecendo todos os itens do detalhe, mas isso é um outro problema.
Mas se puder ajudar.. Rsrs.



CM

Boa noite pessoal.
Só falta essa parte: Gravar e abrir o PDF
Quem puder ajudar, agradeço antecipadamente.
CM

Bom dia.
Alguém pra ajudar?
Obrigado