A melhor parceira de TI para o seu negócio English version

Framework docs

Apresentação > Relatórios > Relatório tabular

Conheça mais sobre com o livro:

  • Instalação e configuração;
  • Modelos, persistência e BD;
  • Componentes de apresentação;
  • Cadastros e listagens;
  • Logins, permissões, relatórios;
  • Desenvolvimento com Studio Pro.
Ver detalhes...

Este exemplo demonstra as funcionalidades basicas da bibliteca de relatórios disponível juntamente com o Adianti Framework. Esta biblioteca permite criar relatórios tabulares simples com linhas e colunas nos formatos PDF e RTF. Esta biblioteca é formada pelas classes TTableWritterHTML, TTableWritterPDF e TTableWritterRTF. Estas classes possuem a mesma interface, permitindo adicionar linhas e colunas em um documento.

A utilização das classes é bastante simples. Inicialmente, criamos alguns estilos para serem usados no documento por meio do método addStyle(). Este método permite criar um estilo que define a fonte, tamanho, cor da fonte, cor de fundo, além de outras características. Após, podemos começar a criar linhas por meio do método addRow() e células por meio do método addCell(). O método addCell() recebe o conteúdo da célula, o alinhamento, estilo e colspan. Primeiro criamos uma linha para os títulos das colunas e depois, percorremos os clientes, adicionando linhas para os seus dados.

Importante: O código-fonte demonstrado neste exemplo pode ser em grande parte gerado automaticamente pelo Adianti Studio Pro. O Adianti Studio Pro possui um gerador de relatórios, que permite gerar o formulário e os comandos necessários para a escrita de um relatório, baseado na informação de uma tabela do banco de dados.


Clique aqui para
demonstração real

Exemplo

  1. <?php
  2. /**
  3.  * Tabular 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 TabularReportView extends TPage
  13. {
  14.     private $form// form
  15.     
  16.     /**
  17.      * Class constructor
  18.      * Creates the page and the registration form
  19.      */
  20.     function __construct()
  21.     {
  22.         parent::__construct();
  23.         
  24.         // creates the form
  25.         $this->form = new TQuickForm('form_Customer_Report');
  26.         $this->form->class 'tform'// CSS class
  27.         $this->form->setFormTitle'Report filters' );
  28.         
  29.         // create the form fields
  30.         $name         = new TEntry('name');
  31.         $city_id      = new  ">TDBSeekButton('city_id''samples''form_Customer_Report''City''name''city_id''city_name');
  32.         $city_name    = new TEntry('city_name');
  33.         $category_id  = new TDBCombo('category_id''samples''Category''id''name');
  34.         $output_type  = new TRadioGroup('output_type');
  35.         
  36.         $options = array('html' => 'HTML''pdf' => 'PDF''rtf' => 'RTF');
  37.         $output_type->addItems($options);
  38.         $output_type->setValue('pdf');
  39.         $output_type->setLayout('horizontal');
  40.         
  41.         $this->form->addQuickField'Name'$name );
  42.         $this->form->addQuickFields'City', [$city_id$city_name] );
  43.         $this->form->addQuickField'Category'$category_id );
  44.         $this->form->addQuickField'Output'$output_type );
  45.         
  46.         // define the sizes
  47.         $name->setSize325 );
  48.         $city_id->setSize(50);
  49.         $city_name->setSize250 );
  50.         $category_id->setSize325 );
  51.         $city_name->setEditable(FALSE);
  52.         $output_type->setUseButton();
  53.         
  54.         $this->form->addQuickAction'Generate', new TAction(array($this'onGenerate')), 'fa:download blue');
  55.         
  56.         // wrap the page content using vertical box
  57.         $vbox = new TVBox;
  58.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  59.         $vbox->add($this->form);
  60.         
  61.         parent::add($vbox);
  62.     }
  63.     /**
  64.      * method onGenerate()
  65.      * Executed whenever the user clicks at the generate button
  66.      */
  67.     function onGenerate()
  68.     {
  69.         try
  70.         {
  71.             // open a transaction with database 'samples'
  72.             TTransaction::open('samples');
  73.             
  74.             // get the form data into an active record Customer
  75.             $object $this->form->getData();
  76.             
  77.             $repository = new TRepository('Customer');
  78.             $criteria   = new TCriteria;
  79.             if ($object->name)
  80.             {
  81.                 $criteria->add(new TFilter('name''like'"%{$object->name}%"));
  82.             }
  83.             
  84.             if ($object->city_id)
  85.             {
  86.                 $criteria->add(new TFilter('city_id''='"{$object->city_id}"));
  87.             }
  88.             
  89.             if ($object->category_id)
  90.             {
  91.                 $criteria->add(new TFilter('category_id''='"{$object->category_id}"));
  92.             }
  93.            
  94.             $customers $repository->load($criteria);
  95.             $format  $object->output_type;
  96.             
  97.             if ($customers)
  98.             {
  99.                 $widths = array(401508012080);
  100.                 
  101.                 switch ($format)
  102.                 {
  103.                     case 'html':
  104.                         $tr = new TTableWriterHTML($widths);
  105.                         break;
  106.                     case 'pdf':
  107.                         $tr = new TTableWriterPDF($widths);
  108.                         break;
  109.                     case 'rtf':
  110.                         if (!class_exists('PHPRtfLite_Autoloader'))
  111.                         {
  112.                             PHPRtfLite::registerAutoloader();
  113.                         }
  114.                         $tr = new TTableWriterRTF($widths);
  115.                         break;
  116.                 }
  117.                 
  118.                 if (!empty($tr))
  119.                 {
  120.                     // create the document styles
  121.                     $tr->addStyle('title''Arial''10''BI',  '#ffffff''#407B49');
  122.                     $tr->addStyle('datap''Arial''10''',    '#000000''#869FBB');
  123.                     $tr->addStyle('datai''Arial''10''',    '#000000''#ffffff');
  124.                     $tr->addStyle('header''Times''16''BI''#ff0000''#FFF1B2');
  125.                     $tr->addStyle('footer''Times''12''BI''#2B2B2B''#B5FFB4');
  126.                     
  127.                     // add a header row
  128.                     $tr->addRow();
  129.                     $tr->addCell('Customers''center''header'5);
  130.                     
  131.                     // add titles row
  132.                     $tr->addRow();
  133.                     $tr->addCell('Code',      'left''title');
  134.                     $tr->addCell('Name',      'left''title');
  135.                     $tr->addCell('Category',  'left''title');
  136.                     $tr->addCell('Email',     'left''title');
  137.                     $tr->addCell('Birthdate''left''title');
  138.                     
  139.                     // controls the background filling
  140.                     $colourFALSE;
  141.                     
  142.                     // data rows
  143.                     foreach ($customers as $customer)
  144.                     {
  145.                         $style $colour 'datap' 'datai';
  146.                         $tr->addRow();
  147.                         $tr->addCell($customer->id,                 'left'$style);
  148.                         $tr->addCell($customer->name,               'left'$style);
  149.                         $tr->addCell($customer->category_name    ,  'left'$style);
  150.                         $tr->addCell($customer->email,              'left'$style);
  151.                         $tr->addCell($customer->birthdate,          'left'$style);
  152.                         
  153.                         $colour = !$colour;
  154.                     }
  155.                     
  156.                     // footer row
  157.                     $tr->addRow();
  158.                     $tr->addCell(date('Y-m-d h:i:s'), 'center''footer'5);
  159.                     // stores the file
  160.                     if (!file_exists("app/output/tabular.{$format}") OR is_writable("app/output/tabular.{$format}"))
  161.                     {
  162.                         $tr->save("app/output/tabular.{$format}");
  163.                     }
  164.                     else
  165.                     {
  166.                         throw new Exception(_t('Permission denied') . ': ' "app/output/tabular.{$format}");
  167.                     }
  168.                     
  169.                     parent::openFile("app/output/tabular.{$format}");
  170.                     
  171.                     // shows the success message
  172.                     new TMessage('info''Report generated. Please, enable popups in the browser (just in the web).');
  173.                 }
  174.             }
  175.             else
  176.             {
  177.                 new TMessage('error''No records found');
  178.             }
  179.     
  180.             // fill the form with the active record data
  181.             $this->form->setData($object);
  182.             
  183.             // close the transaction
  184.             TTransaction::close();
  185.         }
  186.         catch (Exception $e// in case of exception
  187.         {
  188.             // shows the exception error message
  189.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  190.             
  191.             // undo all pending operations
  192.             TTransaction::rollback();
  193.         }
  194.     }
  195. }
  196. ?>