Como Ordenar duas colunas num Relatório? Eu tenho uma coleção de Revistas e quero fazer ordenação primeiro pelo nome e segundo pelo número da revista. Meu relatório está exibindo corretamente a ordenação pelo nome da revista, mas os números de uma coleção, está exibindo desordenada. Como eu posso resolver isso? Tentei colocar nessa ordem abaixo, mas não funciona. $criteria->setProperty('order', 'nome'); ...
AM
Como Ordenar duas colunas num Relatório?  
Eu tenho uma coleção de Revistas e quero fazer ordenação primeiro pelo nome e segundo pelo número da revista.
Meu relatório está exibindo corretamente a ordenação pelo nome da revista, mas os números de uma coleção, está exibindo desordenada. Como eu posso resolver isso?
Tentei colocar nessa ordem abaixo, mas não funciona.
$criteria->setProperty('order', 'nome');
$criteria->setProperty('order', 'numero');

Veja o anexo, têm uma foto do relatório.
Veja abaixo, meu código completo do relatório.

 
  1. <?php
  2. class ImpRelatorio7 extends TPage
  3. {
  4. protected $form;
  5. protected $notebook;
  6. function __construct()
  7. {
  8. parent::__construct();
  9. // Set focus no campo especificado
  10. TScript::create('setTimeout(function() { $("input[name=\'id\']").focus() }, 500);');
  11. // Executa um script que substitui o Tab pelo Enter.
  12. parent::include_js('app/lib/include/application.js');
  13. // creates the form
  14. $this->form = new TQuickForm('form_Revista_report');
  15. $this->form->class = 'tform'; // change CSS class
  16. $this->form->style = 'width: 830px';
  17. // creates the table container
  18. $table = new TTable;
  19. $table->width = '100%';
  20. // add the table inside the form
  21. $this->form->add($table);
  22. // define the form title
  23. $table->addRowSet( new TLabel('Relatório de Revistas'), new TLabel('(Estilo 7) Em Ordem Alfabética') )->class = 'tformtitle';
  24. // create the form fields
  25. $nome = new TEntry('nome');
  26. $numero = new TEntry('numero');
  27. $ano = new TEntry('ano');
  28. $nota = new TCombo('nota');
  29. $combo_items = array();
  30. $combo_items['Péssimo'] ='Péssimo';
  31. $combo_items['Ruim'] ='Ruim';
  32. $combo_items['Médio'] ='Médio';
  33. $combo_items['Bom'] ='Bom';
  34. $combo_items['Muito Bom'] ='Muito Bom';
  35. $combo_items['Excelente'] ='Excelente';
  36. $nota->addItems($combo_items);
  37. $output_type = new TRadioGroup('output_type');
  38. // define the sizes
  39. $nome->setSize(650);
  40. $numero->setSize(70);
  41. $ano->setSize(70);
  42. $nota->setSize(100);
  43. $output_type->setSize(100);
  44. // MaxLength
  45. $nome->setMaxLength(70);
  46. $numero->setMaxLength(4);
  47. $ano->setMaxLength(4);
  48. // Define um valor inicial para os campos.
  49. $nome->setValue('');
  50. $numero->setValue('');
  51. $ano->setValue('');
  52. $nota->setValue('');
  53. // $output_type = new TRadioGroup('output_type');
  54. // validação
  55. $output_type->addValidation('Output', new TRequiredValidator);
  56. // add one row for each form field
  57. $table->addRowSet( new TLabel('Nome:'), $nome );
  58. $table->addRowSet( new TLabel('Número:'), $numero );
  59. $table->addRowSet( new TLabel('Ano:'), $ano );
  60. $table->addRowSet( new TLabel('Nota:'), $nota );
  61. $table->addRowSet( $label_output_type = new TLabel('Saída:'), $output_type );
  62. $label_output_type->setFontColor('#cc0000');
  63. $this->form->setFields(array($nome,$numero,$ano,$nota,$output_type));
  64. $output_type->addItems(array('html'=>'HTML', 'pdf'=>'PDF', 'rtf'=>'RTF'));;
  65. $output_type->setValue('pdf');
  66. $output_type->setLayout('horizontal');
  67. $generate_button = TButton::create('generate', array($this, 'onGenerate'), ('Gerar'), 'ico_apply.png');
  68. $this->form->addField($generate_button);
  69. $limp = TButton::create('Limpar', array($this, 'onShow'), ('Limpar Campos'), 'ico_ok.png');
  70. $this->form->addField($limp);
  71. // add a row for the form action
  72. $table->addRowSet( $generate_button, '' )->class = 'tformaction';
  73. parent::add($this->form);
  74. }
  75. function onShow() {
  76. }
  77. function onGenerate()
  78. {
  79. try
  80. {
  81. // open a transaction with database 'revista'
  82. TTransaction::open('revista');
  83. // get the form data into an active record
  84. $formdata = $this->form->getData();
  85. $repository = new TRepository('Revista');
  86. $criteria = new TCriteria;
  87. if ($formdata->nome)
  88. {
  89. $criteria->add(new TFilter('nome', 'like', "%{$formdata->nome}%"));
  90. }
  91. if ($formdata->numero)
  92. {
  93. $criteria->add(new TFilter('numero', 'like', "%{$formdata->numero}%"));
  94. }
  95. if ($formdata->ano)
  96. {
  97. $criteria->add(new TFilter('ano', 'like', "%{$formdata->ano}%"));
  98. }
  99. if ($formdata->nota)
  100. {
  101. $criteria->add(new TFilter('nota', 'like', "%{$formdata->nota}%"));
  102. }
  103. // Ordenação
  104. $criteria->setProperty('order', 'nome');
  105. $criteria->setProperty('order', 'numero');
  106. $objects = $repository->load($criteria, FALSE);
  107. $format = $formdata->output_type;
  108. if ($objects)
  109. {
  110. $widths = array(375,40,40,80);
  111. switch ($format)
  112. {
  113. case 'html':
  114. $tr = new TTableWriterHTML($widths);
  115. break;
  116. case 'pdf':
  117. $tr = new TTableWriterPDF($widths);
  118. break;
  119. case 'rtf':
  120. if (!class_exists('PHPRtfLite_Autoloader'))
  121. {
  122. PHPRtfLite::registerAutoloader();
  123. }
  124. $tr = new TTableWriterRTF($widths);
  125. break;
  126. }
  127. // Cria o estilo do documento
  128. $tr->addStyle('title', 'Arial', '12', 'B', '#ffffff', '#EA9C98'); // Cabeçalho, Cor: Letra - Fundo
  129. $tr->addStyle('title2', 'Arial', '12', 'B', '#ffffff', '#EA9C98'); // Cabeçalho, Cor: Letra - Fundo
  130. $tr->addStyle('datap', 'Arial', '12', '', '#000000', '#EEEEEE'); // 2º Registro
  131. $tr->addStyle('datai', 'Arial', '12', '', '#000000', '#ffffff'); // 1º Registro
  132. $tr->addStyle('header', 'Arial', '16', '', '#ffffff', '#904F49'); // Título
  133. $tr->addStyle('header2', 'Arial', '16', '', '#ffffff', '#904F49'); // Título
  134. $tr->addStyle('footer', 'Times', '12', 'I', '#000000', '#F2BEBC'); // Rodapé
  135. // add a header row
  136. $tr->addRow();
  137. $tr->addCell(utf8_decode('Relatório de Todas as Revistas'), 'center', 'header', 4);
  138. // adiciona títulos na linha.
  139. $tr->addRow();
  140. $tr->addCell(utf8_decode('Nome'), 'center', 'title2');
  141. $tr->addCell(utf8_decode('Nº'), 'center', 'title2');
  142. $tr->addCell('Ano', 'center', 'title2');
  143. $tr->addCell(utf8_decode('Nota'), 'center', 'title2');
  144. // controls the background filling
  145. $colour= FALSE;
  146. // data rows
  147. foreach ($objects as $object)
  148. {
  149. $style = $colour ? 'datap' : 'datai';
  150. $tr->addRow();
  151. $tr->addCell(utf8_decode($object->nome), 'left', $style);
  152. $tr->addCell(str_pad($object->numero, 2, "0", STR_PAD_LEFT), 'center', $style);
  153. $tr->addCell(utf8_decode($object->ano), 'center', $style);
  154. $tr->addCell(utf8_decode($object->nota), 'center', $style);
  155. $colour = !$colour;
  156. }
  157. // footer row
  158. $tr->addRow();
  159. $tr->addCell(utf8_decode('Data e Hora da Impressão: ').date(' d/m/Y | h:i:s'), 'left', 'footer', 4);
  160. // stores the file
  161. if (!file_exists("app/output/Revista.{$format}") OR is_writable("app/output/Revista.{$format}"))
  162. {
  163. $tr->save("app/output/Revista.{$format}");
  164. }
  165. else
  166. {
  167. throw new Exception(_t('Acesso Negado.') . ': ' . "app/output/Revista.{$format}");
  168. }
  169. // open the report file
  170. parent::openFile("app/output/Revista.{$format}");
  171. // shows the success message
  172. new TMessage('info', 'Relatório Gerado. Deixe sempre habilitado o Pop-Up Menu do seu Navegador.');
  173. }
  174. else
  175. {
  176. new TMessage('error', 'Nenhum registro foi encontrado.');
  177. }
  178. // fill the form with the active record data
  179. $this->form->setData($formdata);
  180. // close the transaction
  181. TTransaction::close();
  182. }
  183. catch (Exception $e) // in case of exception
  184. {
  185. // shows the exception error message
  186. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  187. // undo all pending operations
  188. TTransaction::rollback();
  189. }
  190. }
  191. }

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


IF

Olá Alex.

Tenta fazer assim:

 
  1. <?php $criteria->setProperty('order', 'nome, numero'); ?>