Exibir todos itens do pedido no PDF Estou implementando esse relatório, não estou conseguindo fazer aparecer todos os itens do pedido. Só exibe um item. ...
A
Exibir todos itens do pedido no PDF  
Estou implementando esse relatório, não estou conseguindo fazer aparecer todos os itens do pedido. Só exibe um item.

 
  1. <?php
  2. class PDFDesignNFEView extends TPage
  3. {
  4. private $form; // form
  5. /**
  6. * Class constructor
  7. */
  8. function __construct()
  9. {
  10. parent::__construct();
  11. // creates the form and a inner table
  12. $this->form = new TForm('form_pdf_nfe');
  13. $table = new TTable;
  14. $this->form->add($table);
  15. // creates an action button
  16. $save_button = new TButton('Generate');
  17. $save_button->setAction(new TAction(array($this, 'onGenerate')), 'Gerar');
  18. $save_button->setImage('fa:download blue');
  19. // add a row for the form action
  20. $table->addRowSet($save_button);
  21. // define wich are the form fields
  22. $this->form->setFields(array($save_button));
  23. // wrap the page content using vertical box
  24. $vbox = new TVBox;
  25. $vbox->style = 'width: 100%';
  26. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  27. $vbox->add($this->form);
  28. parent::add($vbox);
  29. }
  30. /**
  31. * method onGenerate()
  32. * Executed whenever the user clicks at the generate button
  33. */
  34. function onGenerate()
  35. {
  36. try
  37. {
  38. // open a transaction with database 'samples'
  39. TTransaction::open('banco');
  40. $pedidos= new Pedidos(10);
  41. $cliente= new Cliente($pedidos->COD_CLI);
  42. $transp= new Transportadora($pedidos->COD_TRA);
  43. $designer = new TPDFDesigner;
  44. $designer->fromXml('app/reports/nfe.pdf.xml');
  45. $designer->generate();
  46. $fill = TRUE;
  47. $designer->gotoAnchorXY('details');
  48. $designer->SetFont('Arial', '', 10);
  49. $designer->setFillColorRGB( '#F9F9FF' );
  50. $designer->SetFont('Arial', 'B', 8);
  51. $designer->setFontColorRGB( '#4C4491' );
  52. $designer->writeAtAnchor('tipo_emissao', $pedidos->TIPO_EMISSAO);
  53. $designer->writeAtAnchor('for_ie', '23234234234');
  54. $designer->writeAtAnchor('for_cnpj', '001.111.222.0001/00');
  55. $designer->writeAtAnchor('nome', utf8_decode($cliente->NOME_CLI));
  56. $designer->writeAtAnchor('endereco', utf8_decode($cliente->ENDCOB_CLI));
  57. $designer->writeAtAnchor('bairro', $cliente->BAICOB_CLI);
  58. $designer->writeAtAnchor('municipio', $cliente->CIDCOB_CLI);
  59. $designer->writeAtAnchor('fone', $cliente->CONTATO_CLI);
  60. $designer->writeAtAnchor('uf', $cliente->ESTCOB_CLI);
  61. $designer->writeAtAnchor('ie', '45645645656');
  62. $designer->writeAtAnchor('cep', $cliente->CEPCOB_CLI);
  63. $designer->writeAtAnchor('cnpjcpf', $cliente->CNPJ_CLI);
  64. $designer->writeAtAnchor('dataemissao', $pedidos->DATA);
  65. $designer->writeAtAnchor('dataentrada', '12/12/1912');
  66. $designer->writeAtAnchor('datasaida', $pedidos->DATA_ENTREGA);
  67. $designer->writeAtAnchor('protocolo', '1234567890');
  68. $designer->writeAtAnchor('valor_produtos',$pedidos->VLRTOTAL);
  69. $designer->writeAtAnchor('frete', $pedidos->VALOR_FRETE);
  70. $designer->writeAtAnchor('desconto', $pedidos->DESCONTO);
  71. $designer->writeAtAnchor('valor_nota', $pedidos->TOTAL);
  72. $designer->writeAtAnchor('complementares',utf8_decode($pedidos->OBS));
  73. $designer->writeAtAnchor('cod_tra',utf8_decode($transp->NOME_TRA));
  74. $designer->writeAtAnchor('cid_tra',utf8_decode($transp->CID_TRA));
  75. $designer->writeAtAnchor('cnpj_tra',utf8_decode($transp->CNPJ_TRA));
  76. $designer->writeAtAnchor('est_tra',utf8_decode($transp->EST_TRA));
  77. $designer->writeAtAnchor('frete_conta',utf8_decode($pedidos->FRETE_CONTA));
  78. $designer->writeAtAnchor('end_tra',utf8_decode($transp->END_TRA));
  79. $designer->writeAtAnchor('placa',utf8_decode($transp->PLACA_TRA));
  80. $pedidos_list= new PedidosItens(10);
  81. $designer->gotoAnchorXY('details');
  82. $designer->SetFont('Arial', '', 8);
  83. $designer->Cell( 62, 10, $pedidos_list->COD_PRODUTO, 1, 0, 'C',$fill);
  84. $designer->Cell(222, 10, utf8_decode($pedidos_list->NOME_PRODUTO), 1, 0, 'L',$fill);
  85. $designer->Cell( 26, 10, 'UN', 1, 0, 'C');
  86. $designer->Cell( 50, 10, $pedidos_list->QUANTIDADE, 1, 0, 'C');
  87. $designer->Cell( 50, 10, $pedidos_list->VLRUNIT, 1, 0, 'R',$fill);
  88. $designer->Cell( 50, 10, $pedidos_list->DESCONTO, 1, 0, 'R');
  89. $designer->Cell( 50, 10, $pedidos_list->ACRESCIMO, 1, 0, 'R');
  90. $designer->Cell( 51, 10, $pedidos_list->VLRTOTAL, 1, 0, 'R');
  91. $file = 'app/output/nfe_pdf.pdf';
  92. if (!file_exists($file) OR is_writable($file))
  93. {
  94. $designer->save($file);
  95. //parent::openFile($file);
  96. $window = TWindow::create(_t('Pedido'), 0.8, 0.8);
  97. $object = new TElement('object');
  98. $object->data = $file;
  99. $object->type = 'application/pdf';
  100. $object->style = "width: 100%; height:calc(100% - 10px)";
  101. $window->add($object);
  102. $window->show();
  103. }
  104. else
  105. {
  106. throw new Exception(_t('Permission denied') . ': ' . $file);
  107. }
  108. // close the transaction
  109. TTransaction::close();
  110. }
  111. catch (Exception $e) // in case of exception
  112. {
  113. new TMessage('error', $e->getMessage());
  114. TTransaction::rollback();
  115. }
  116. }
  117. }
  118. ?>

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


SV

Boa Noite, Amanda, tudo bem?

Imagino que você tenha que fazer um foreach para listar todos os seus produtos contidos no pedido, veja só:

Aqui:

 
  1. <?php
  2. $designer->gotoAnchorXY('details');
  3. $designer->SetFont('Arial', '', 8);
  4. $designer->Cell( 62, 10, $pedidos_list->COD_PRODUTO, 1, 0, 'C',$fill);
  5. $designer->Cell(222, 10, utf8_decode($pedidos_list->NOME_PRODUTO), 1, 0, 'L',$fill);
  6. $designer->Cell( 26, 10, 'UN', 1, 0, 'C');
  7. $designer->Cell( 50, 10, $pedidos_list->QUANTIDADE, 1, 0, 'C');
  8. $designer->Cell( 50, 10, $pedidos_list->VLRUNIT, 1, 0, 'R',$fill);
  9. $designer->Cell( 50, 10, $pedidos_list->DESCONTO, 1, 0, 'R');
  10. $designer->Cell( 50, 10, $pedidos_list->ACRESCIMO, 1, 0, 'R');
  11. $designer->Cell( 51, 10, $pedidos_list->VLRTOTAL, 1, 0, 'R');
  12. ?>

Poderia ser assim:
 
  1. <?php
  2. foreach ($pedidos_list as $pedidos)
  3. {
  4. $designer->gotoAnchorXY('details');
  5. $designer->SetFont('Arial', '', 8);
  6. $designer->Cell( 62, 10, $pedidos->COD_PRODUTO, 1, 0, 'C',$fill);
  7. $designer->Cell(222, 10, utf8_decode($pedidos_list->NOME_PRODUTO), 1, 0, 'L',$fill);
  8. $designer->Cell( 26, 10, 'UN', 1, 0, 'C');
  9. $designer->Cell( 50, 10, $pedidos->QUANTIDADE, 1, 0, 'C');
  10. $designer->Cell( 50, 10, $pedidos->VLRUNIT, 1, 0, 'R',$fill);
  11. $designer->Cell( 50, 10, $pedidos->DESCONTO, 1, 0, 'R');
  12. $designer->Cell( 50, 10, $pedidos->ACRESCIMO, 1, 0, 'R');
  13. $designer->Cell( 51, 10, $pedidos->VLRTOTAL, 1, 0, 'R');
  14. }
  15. ?>


No Tutor tem uns modelos bem legais, segue o link:
www.adianti.com.br/framework_files/tutor/index.php?class=HomeView&am

Depois nos diga se deu certo.

Abraços

Samuel de Vincenzo
NR

Antes de fazer o foreach que o Samuel comentou, você precisa obter os itens do pedido:
 
  1. <?php
  2. //$pedidos_list= new PedidosItens(10); // você fez isso, mas esse código só vai carregar o item de id = 10
  3. $pedidos_list = PedidosItens::where('pedido_id','=',10)->load();// esse código vai carregar todos os itens com pedido_id = 10
  4. ?>
A

Boa tarde,
Fiz as alterações e funcionou, mas esta exibindo um item em cima do outro.

 
  1. <?php
  2. $fill = TRUE;
  3. $designer->gotoAnchorXY('details');
  4. $designer->SetFont('Arial', '', 10);
  5. $designer->setFillColorRGB( '#F9F9FF' );
  6. $pedidos_list = PedidosItens::where('CODIGO_PEDIDO','=',7)->load();
  7. if ($pedidos_list)
  8. {
  9. foreach ($pedidos_list as $pedidos)
  10. {
  11. $designer->gotoAnchorXY('details');
  12. $designer->SetFont('Arial', '', 8);
  13. $designer->Cell( 62, 10, $pedidos->COD_PRODUTO, 1, 0, 'C',$fill);
  14. $designer->Cell(222, 10, utf8_decode($pedidos->NOME_PRODUTO), 1, 0, 'L',$fill);
  15. $designer->Cell( 26, 10, 'UN', 1, 0, 'C',$fill);
  16. $designer->Cell( 50, 10, $pedidos->QUANTIDADE, 1, 0, 'C',$fill);
  17. $designer->Cell( 50, 10, $pedidos->VLRUNIT, 1, 0, 'R',$fill);
  18. $designer->Cell( 50, 10, $pedidos->DESCONTO, 1, 0, 'R',$fill);
  19. $designer->Cell( 50, 10, $pedidos->ACRESCIMO, 1, 0, 'R',$fill);
  20. $designer->Cell( 51, 10, $pedidos->VLRTOTAL, 1, 0, 'R',$fill);
  21. $designer->Ln(12);
  22. // grid background
  23. $fill = !$fill;
  24. }
  25. }
  26. ?>
SV

Oi Amanda, Bom dia!

Desculpa a demora da resposta

Já tento usar :

$designer->Ln(10);

Poste o seu código completo.

Abraços

Samuel
A

Boa tarde Samuel,

Já tentei sim, e continua exibindo um item em cima do outro, esta ai o código
 
  1. <?php
  2. /**
  3. * PDF Designed Customer report
  4. *
  5. * @version 1.0
  6. * @package samples
  7. * @subpackage tutor
  8. * @author Pablo Dall'Oglio
  9. * @copyright Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10. * @license http://www.adianti.com.br/framework-license
  11. */
  12. class PDFDesignNFEView extends TPage
  13. {
  14. private $form; // form
  15. /**
  16. * Class constructor
  17. */
  18. function __construct()
  19. {
  20. parent::__construct();
  21. // creates the form and a inner table
  22. $this->form = new TForm('form_pdf_nfe');
  23. $table = new TTable;
  24. $this->form->add($table);
  25. // creates an action button
  26. $save_button = new TButton('Generate');
  27. $save_button->setAction(new TAction(array($this, 'onGenerate')), 'Gerar');
  28. $save_button->setImage('fa:download blue');
  29. // add a row for the form action
  30. $table->addRowSet($save_button);
  31. // define wich are the form fields
  32. $this->form->setFields(array($save_button));
  33. // wrap the page content using vertical box
  34. $vbox = new TVBox;
  35. $vbox->style = 'width: 100%';
  36. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  37. $vbox->add($this->form);
  38. parent::add($vbox);
  39. }
  40. /**
  41. * method onGenerate()
  42. * Executed whenever the user clicks at the generate button
  43. */
  44. function onGenerate()
  45. {
  46. try
  47. {
  48. // open a transaction with database 'samples'
  49. TTransaction::open('banco');
  50. $pedidos= new Pedidos(7);
  51. $cliente= new Cliente($pedidos->COD_CLI);
  52. $transp= new Transportadora($pedidos->COD_TRA);
  53. $designer = new TPDFDesigner;
  54. $designer->fromXml('app/reports/nfe.pdf.xml');
  55. $designer->generate();
  56. $designer->SetFont('Arial', 'B', 8);
  57. $designer->setFontColorRGB( '#4C4491' );
  58. $designer->writeAtAnchor('tipo_emissao', $pedidos->TIPO_EMISSAO);
  59. $designer->writeAtAnchor('for_ie', '23234234234');
  60. $designer->writeAtAnchor('for_cnpj', '001.111.222.0001/00');
  61. $designer->writeAtAnchor('nome', utf8_decode($cliente->NOME_CLI));
  62. $designer->writeAtAnchor('endereco', utf8_decode($cliente->ENDCOB_CLI));
  63. $designer->writeAtAnchor('bairro', $cliente->BAICOB_CLI);
  64. $designer->writeAtAnchor('municipio', $cliente->CIDCOB_CLI);
  65. $designer->writeAtAnchor('fone', $cliente->CONTATO_CLI);
  66. $designer->writeAtAnchor('uf', $cliente->ESTCOB_CLI);
  67. $designer->writeAtAnchor('ie', '45645645656');
  68. $designer->writeAtAnchor('cep', $cliente->CEPCOB_CLI);
  69. $designer->writeAtAnchor('cnpjcpf', $cliente->CNPJ_CLI);
  70. $designer->writeAtAnchor('dataemissao', $pedidos->DATA);
  71. $designer->writeAtAnchor('dataentrada', '12/12/1912');
  72. $designer->writeAtAnchor('datasaida', $pedidos->DATA_ENTREGA);
  73. $designer->writeAtAnchor('protocolo', '1234567890');
  74. $designer->writeAtAnchor('valor_produtos',$pedidos->VLRTOTAL);
  75. $designer->writeAtAnchor('frete', $pedidos->VALOR_FRETE);
  76. $designer->writeAtAnchor('desconto', $pedidos->DESCONTO);
  77. $designer->writeAtAnchor('valor_nota', $pedidos->TOTAL);
  78. $designer->writeAtAnchor('complementares',utf8_decode($pedidos->OBS));
  79. $designer->writeAtAnchor('cod_tra',utf8_decode($transp->NOME_TRA));
  80. $designer->writeAtAnchor('cid_tra',utf8_decode($transp->CID_TRA));
  81. $designer->writeAtAnchor('cnpj_tra',utf8_decode($transp->CNPJ_TRA));
  82. $designer->writeAtAnchor('est_tra',utf8_decode($transp->EST_TRA));
  83. $designer->writeAtAnchor('uf_placa_tra',utf8_decode($transp->UF_PLACA_TRA));
  84. $designer->writeAtAnchor('frete_conta',utf8_decode($pedidos->FRETE_CONTA));
  85. $designer->writeAtAnchor('end_tra',utf8_decode($transp->END_TRA));
  86. $designer->writeAtAnchor('placa',utf8_decode($transp->PLACA_TRA));
  87. $fill = TRUE;
  88. $designer->gotoAnchorXY('details');
  89. $designer->SetFont('Arial', '', 10);
  90. $designer->setFillColorRGB( '#F9F9FF' );
  91. $pedidos_list = PedidosItens::where('CODIGO_PEDIDO','=',7)->load();
  92. if ($pedidos_list)
  93. {
  94. foreach ($pedidos_list as $pedidos)
  95. {
  96. $designer->gotoAnchorXY('details');
  97. $designer->SetFont('Arial', '', 8);
  98. $designer->Cell( 62, 10, $pedidos->COD_PRODUTO, 1, 0, 'C',$fill);
  99. $designer->Cell(222, 10, utf8_decode($pedidos->NOME_PRODUTO), 1, 0, 'L',$fill);
  100. $designer->Cell( 26, 10, 'UN', 1, 0, 'C',$fill);
  101. $designer->Cell( 50, 10, $pedidos->QUANTIDADE, 1, 0, 'C',$fill);
  102. $designer->Cell( 50, 10, $pedidos->VLRUNIT, 1, 0, 'R',$fill);
  103. $designer->Cell( 50, 10, $pedidos->DESCONTO, 1, 0, 'R',$fill);
  104. $designer->Cell( 50, 10, $pedidos->ACRESCIMO, 1, 0, 'R',$fill);
  105. $designer->Cell( 51, 10, $pedidos->VLRTOTAL, 1, 0, 'R',$fill);
  106. $designer->Ln(10);
  107. // grid background
  108. $fill = !$fill;
  109. }
  110. }
  111. $file = 'app/output/nfe_pdf.pdf';
  112. if (!file_exists($file) OR is_writable($file))
  113. {
  114. $designer->save($file);
  115. //parent::openFile($file);
  116. $window = TWindow::create(_t('Pedido'), 0.8, 0.8);
  117. $object = new TElement('object');
  118. $object->data = $file;
  119. $object->type = 'application/pdf';
  120. $object->style = "width: 100%; height:calc(100% - 10px)";
  121. $window->add($object);
  122. $window->show();
  123. }
  124. else
  125. {
  126. throw new Exception(_t('Permission denied') . ': ' . $file);
  127. }
  128. // close the transaction
  129. TTransaction::close();
  130. }
  131. catch (Exception $e) // in case of exception
  132. {
  133. new TMessage('error', $e->getMessage());
  134. TTransaction::rollback();
  135. }
  136. }
  137. }
  138. ?>
NR

No começo do foreach você está definindo o X e Y sempre na mesma posição:
 
  1. <?php
  2. $designer->gotoAnchorXY('details');
  3. ?>

Nesse caso teria que definir somente o X, pois o Y vai variar de acordo com a quantidade de itens
 
  1. <?php
  2. $designer->gotoAnchorX('details');
  3. ?>
A

Fiz a alteração, coloquei só o X, e continua exibindo um item em cima do outro.
 
  1. <?php
  2. $fill = TRUE;
  3. $designer->gotoAnchorXY('details');
  4. $designer->SetFont('Arial', '', 10);
  5. $designer->setFillColorRGB( '#F9F9FF' );
  6. $pedidos_list = PedidosItens::where('CODIGO_PEDIDO','=',7)->load();
  7. if ($pedidos_list)
  8. {
  9. foreach ($pedidos_list as $pedidos)
  10. {
  11. $designer->gotoAnchorX('details');
  12. $designer->SetFont('Arial', '', 8);
  13. $designer->Cell( 62, 10, $pedidos->COD_PRODUTO, 1, 0, 'C',$fill);
  14. $designer->Cell(222, 10, utf8_decode($pedidos->NOME_PRODUTO), 1, 0, 'L',$fill);
  15. $designer->Cell( 26, 10, 'UN', 1, 0, 'C',$fill);
  16. $designer->Cell( 50, 10, $pedidos->QUANTIDADE, 1, 0, 'C',$fill);
  17. $designer->Cell( 50, 10, $pedidos->VLRUNIT, 1, 0, 'R',$fill);
  18. $designer->Cell( 50, 10, $pedidos->DESCONTO, 1, 0, 'R',$fill);
  19. $designer->Cell( 50, 10, $pedidos->ACRESCIMO, 1, 0, 'R',$fill);
  20. $designer->Cell( 51, 10, $pedidos->VLRTOTAL, 1, 0, 'R',$fill);
  21. $designer->Ln(10);
  22. // grid background
  23. $fill = !$fill;
  24. }
  25. }
  26. ?>
A

Consegui achar o erro !! Agora funcionou certinho!

Muito obrigada Nataniel e Samuel pela ajuda!
SV

Olá Amanda, Boa Noite!

Eu que agradeço por compartilhar conosco suas dúvidas.

A propósito nos conte como você conseguiu resolver, assim fica registrado e conseguimos ajudar outras pessoas que podem ter a mesma dúvida. =)


Conte conosco sempre!

Abraços

Samuel de Vincenzo