Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Criando um TRepository através de uma consulta manual? Boa tarde! É possível criar um TRepository através de uma consulta manual? Eu tenho uma consulta que utiliza UNION, e não encontrei nada no TCriteria que poderia me auxiliar nisso. Basicamente eu realizo a consulta de qual apartamento a pessoa mora, e depois disso adiciono esta consulta a consulta de todos os apartamentos vazios, então nessa consulta eu tenho o apartamento da pessoa que ...
CG
Criando um TRepository através de uma consulta manual?  
Boa tarde!
É possível criar um TRepository através de uma consulta manual?

Eu tenho uma consulta que utiliza UNION, e não encontrei nada no TCriteria que poderia me auxiliar nisso.
Basicamente eu realizo a consulta de qual apartamento a pessoa mora, e depois disso adiciono esta consulta a consulta de todos os apartamentos vazios, então nessa consulta eu tenho o apartamento da pessoa que eu selecionar e ainda todos os apartamentos livres.
Para realizar isso só consegui pensar em UNION, eu busco o apartamento da pessoa selecionada e faço o UNION com todos os livres, assim eu tenho os resultados que preciso.

Consegui fazer desta maneira e está funcionando no meu datagrid e no meu seek, porém, obviamente quando preciso realizar consultas nessa query não consigo através dos filtros, já que os filtros do Seek utilizam de TCriteria e também de TRepository, por esta razão a pergunta do tópico: teria como eu fazer um TRepository dessa minha consulta?. Desta forma conseguiria realizar as consultas e tudo mais.

Agradeço já a atenção!

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (4)


JH

cria um view.

www.adianti.com.br/forum/pt/view_876?pensando-em-objetos-nao-em-sql-
CG

Olá!
Eu utilizo view para quase tudo que preciso em relação a sql complexas.. mas esse não é o caso!
Mencionei que estou utilizando UNION <DEPENDENTE/b> da seleção que faço, então eu uno uma consulta com outra consulta dependendo do que é selecionado.
Na maneira que preciso não teria como usar uma view amigo, obrigado pelo retorno, mas gostaria de saber se tem como transformar uma consulta manual em um TRepository ou algo que pudesse colocar criterios com base no TCriteria.
Isso me ajudaria um monte!

Alguém sabe como resolver essa questão através dos métodos do framework?

P.S. Para não parar o projeto estou resolvendo essas questões de forma manual, espero que dê certo!
NR

Veja a classe TSqlSelect. Você pode passar filtros pra ela através da função setCriteria.

Mas talvez seja mais simples criar o sql manualmente e concatenar os wheres transformando o criteria em string com a função dump.
AE

Olá pessoal da comunidade do Adianti. Estou criando um relatório tabular e pretendo filtrar dados das tabelas relacionadas. Em vez de aparecer o id usuário quero que apareça o nome do usuário. Help me...

  1. <?php
  2. /**
  3.  * VendaReport Report
  4.  * @author  <your name here>
  5.  */
  6. class VendaReport extends TPage
  7. {
  8.     protected $form// form
  9.     /**
  10.      * Class constructor
  11.      * Creates the page and the registration form
  12.      */
  13.     function __construct()
  14.     {
  15.         parent::__construct();
  16.         // creates the form
  17.         $this->form = new BootstrapFormBuilder('form_Venda_report');
  18.         $this->form->setFormTitle('Venda Report');
  19.         // create the form fields
  20.         $DATA_VENDA = new TDate('DATA_VENDA');
  21.         $output_type = new TRadioGroup('output_type');
  22.         // add the fields
  23.         $this->form->addFields( [ new TLabel('Data') ], [ $DATA_VENDA ] );
  24.         $this->form->addFields( [ new TLabel('Formato') ], [ $output_type ] );
  25.         $output_type->addValidation('Output', new TRequiredValidator);
  26.         // set sizes
  27.         $DATA_VENDA->setSize('32%');
  28.         $output_type->setSize('100%');
  29.         $output_type->addItems(array('html'=>'HTML''pdf'=>'PDF''rtf'=>'RTF''xls' => 'XLS'));
  30.         $output_type->setLayout('horizontal');
  31.         $output_type->setUseButton();
  32.         $output_type->setValue('pdf');
  33.         $output_type->setSize(70);
  34.         // add the action button
  35.         $btn $this->form->addAction(_t('Generate'), new TAction(array($this'onGenerate')), 'fa:cog');
  36.         $btn->class 'btn btn-sm btn-primary';
  37.         // vertical box container
  38.         $container = new TVBox;
  39.         $container->style 'width: 90%';
  40.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  41.         $container->add($this->form);
  42.         parent::add($container);
  43.     }
  44.     /**
  45.      * Generate the report
  46.      */
  47.     function onGenerate()
  48.     {
  49.         try
  50.         {
  51.             // open a transaction with database 'erp'
  52.             TTransaction::open('erp');
  53.             // get the form data into an active record
  54.             $data $this->form->getData();
  55.             $this->form->validate();
  56.             $repository = new TRepository('Venda');
  57.             $criteria   = new TCriteria;
  58.             if ($data->DATA_VENDA)
  59.             {
  60.                 $criteria->add(new TFilter('DATA_VENDA''like'"%{$data->DATA_VENDA}%"));
  61.             }
  62.             $objects $repository->load($criteriaFALSE);
  63.             $format  $data->output_type;
  64.             if ($objects)
  65.             {
  66.                 $widths = array(60,100,100,100,100,100,100,100);
  67.                 switch ($format)
  68.                 {
  69.                     case 'html':
  70.                         $tr = new TTableWriterHTML($widths);
  71.                         break;
  72.                     case 'pdf':
  73.                         $tr = new TTableWriterPDF($widths);
  74.                         break;
  75.                     case 'xls':
  76.                         $tr = new TTableWriterXLS($widths);
  77.                         break;
  78.                     case 'rtf':
  79.                         $tr = new TTableWriterRTF($widths);
  80.                         break;
  81.                 }
  82.                 // create the document styles
  83.                 $tr->addStyle('title''Arial''10''B',   '#ffffff''#EA9C98');
  84.                 $tr->addStyle('datap''Arial''10''',    '#000000''#EEEEEE');
  85.                 $tr->addStyle('datai''Arial''10''',    '#000000''#ffffff');
  86.                 $tr->addStyle('header''Arial''16''',   '#ffffff''#904F49');
  87.                 $tr->addStyle('footer''Times''10''I',  '#000000''#F2BEBC');
  88.                 // add a header row
  89.                 $tr->addRow();
  90.                 $tr->addCell('Relatório de Venda''center''header'8);
  91.                 // add titles row
  92.                 $tr->addRow();
  93.                 $tr->addCell('Código''center''title');
  94.                 $tr->addCell('Cliente''left''title');
  95.                 $tr->addCell('Data''left''title');
  96.                 $tr->addCell('Total''left''title');
  97.                 // $tr->addCell('Anulada Venda', 'left', 'title');
  98.                 // $tr->addCell('Cod Arm', 'right', 'title');
  99.                 // $tr->addCell('Proforma Venda', 'left', 'title');
  100.                 // $tr->addCell('Pag Tipo Venda', 'left', 'title');
  101.                 // $tr->addCell('Pag Ref Venda', 'left', 'title');
  102.                 // $tr->addCell('Cod Cliente', 'right', 'title');
  103.                 $tr->addCell('Tipo''left''title');
  104.                 $tr->addCell('Descrição''left''title');
  105.                 $tr->addCell('Desconto''left''title');
  106.                 $tr->addCell('Usuário''left''title');
  107.                 // controls the background filling
  108.                 $colourFALSE;
  109.                 // data rows
  110.                 foreach ($objects as $object)
  111.                 {
  112.                     $style $colour 'datap' 'datai';
  113.                     $tr->addRow();
  114.                     $tr->addCell($object->COD_VENDA'center'$style);
  115.                     $tr->addCell($object->CLIENTE_VENDA'left'$style);
  116.                     $tr->addCell($object->DATA_VENDA'left'$style);
  117.                     $tr->addCell($object->TOTAL_VENDA'left'$style);
  118.                     // $tr->addCell($object->ANULADA_VENDA, 'left', $style);
  119.                     // $tr->addCell($object->COD_ARM, 'right', $style);
  120.                     // $tr->addCell($object->PROFORMA_VENDA, 'left', $style);
  121.                     // $tr->addCell($object->PAG_TIPO_VENDA, 'left', $style);
  122.                     // $tr->addCell($object->PAG_REF_VENDA, 'left', $style);
  123.                     // $tr->addCell($object->COD_CLIENTE, 'right', $style);
  124.                     $tr->addCell($object->TIPO_VENDA'left'$style);
  125.                     $tr->addCell($object->DESC_VENDA'left'$style);
  126.                     $tr->addCell($object->TOTAL_S_DESCONTO'left'$style);
  127.                     $tr->addCell($object->COD_USUARIO'left'$style);
  128.                     $colour = !$colour;
  129.                 }
  130.                 // footer row
  131.                 $tr->addRow();
  132.                 $tr->addCell(date('Y-m-d h:i:s'), 'center''footer'8);
  133.                 // stores the file
  134.                 if (!file_exists("app/output/Venda.{$format}") OR is_writable("app/output/Venda.{$format}"))
  135.                 {
  136.                     $tr->save("app/output/Venda.{$format}");
  137.                 }
  138.                 else
  139.                 {
  140.                     throw new Exception(_t('Permission denied') . ': ' "app/output/Venda.{$format}");
  141.                 }
  142.                 // open the report file
  143.                 parent::openFile("app/output/Venda.{$format}");
  144.                 // shows the success message
  145.                 new TMessage('info''Relatório gerado. Por favor, active popups.');
  146.             }
  147.             else
  148.             {
  149.                 new TMessage('error''Nenhum dados encontrado');
  150.             }
  151.             // fill the form with the active record data
  152.             $this->form->setData($data);
  153.             // close the transaction
  154.             TTransaction::close();
  155.         }
  156.         catch (Exception $e// in case of exception
  157.         {
  158.             // shows the exception error message
  159.             new TMessage('error'$e->getMessage());
  160.             // undo all pending operations
  161.             TTransaction::rollback();
  162.         }
  163.     }
  164. }
  165. ?>
</your>