Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Graficos com dados vindo do banco de dados Caros amigos, bom dia! Recorro mais uma vez ao auxilio da comunidade. Primeiro gostaria de fazer um desabafo, o framework possui uma API para gráficos em todo material que encontro a utilização dela são com dados fixos e não dinâmicos, quando encontro algum material com dados dinâmicos é com outra API esse fato me causou muita estranheza olha que eu acompanho esse framework há tempos.e ...
PC
Graficos com dados vindo do banco de dados  
Caros amigos, bom dia!
Recorro mais uma vez ao auxilio da comunidade.
Primeiro gostaria de fazer um desabafo, o framework possui uma API para gráficos em todo material que encontro a utilização dela são com dados fixos e não dinâmicos, quando encontro algum material com dados dinâmicos é com outra API esse fato me causou muita estranheza olha que eu acompanho esse framework há tempos.e sempre existiu solução e estranhei mais ainda nenhuma manifestação da equipe de desenvolvimento, agora assistindo os videos do lançamento do Builder existe o modulo de geração de gráfico, portanto, concluo que a API que está sendo utilizada funciona e porque não tem nenhum exemplo de utilização da mesma?
Vamos deixar de reclamação segue minha necessidade, quando dou um echo nas informações que foram retornadas pelo Select existe conteúdo, porém, quando passo para a enableSection apresenta o erro abaixo:

[Wed Dec 13 13:01:13.401530 2017] [:error] [pid 2308:tid 1272] [client ::1:15878] PHP Fatal error: Call to a member function enableSection() on null in C:\Bitnami\wamp\apache2\htdocs\contpag\app\control\CommonPage.class.php on line 54, referer: localhost/contpag/index.php?class=CommonPage

Em anexo está a imagem com o resultado do echo.
Abaixo o código que estou utilizando:
  1. <?php
  2. /**
  3.  * CommonPage
  4.  *
  5.  * @version    1.0
  6.  * @package    control
  7.  * @author     Pablo Dall'Oglio
  8.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  9.  * @license    http://www.adianti.com.br/framework-license
  10.  */
  11. class CommonPage extends TPage
  12. {
  13.     //private $html;
  14.     
  15.     public function __construct()
  16.     {
  17.         parent::__construct();
  18.         parent::add(new TLabel('Demonstrativos'));
  19.         
  20.         
  21.         $html = new THtmlRenderer('app/resources/google_pie_chart.html');
  22.         
  23.         $table = new TTable;
  24.         
  25.         $div = new TElement('div');
  26.         $div->id    'container';
  27.         $div->style "width:950px;height:600px";
  28.         $div->add($html);
  29.         
  30.         
  31.         $table->addRow()->addCell($div);
  32.         
  33.         parent::add($table);
  34.         $this->onGenerator();
  35.     }
  36.     
  37.     function onGenerator()
  38.     {
  39.         TTransaction::open('contpag');
  40.         $conn TTransaction::get();
  41.         
  42.         $colunas $conn->query('SELECT * FROM totalpormes ORDER BY nome');
  43.         
  44.         $dados '';
  45.         
  46.         foreach($colunas as $coluna)
  47.         {
  48.             $dados $dados '[\'' .$coluna[0].'\',' .$coluna[1] .'];';
  49.         }
  50.         
  51.         $dados substr($dados,0,-1);
  52.         echo json_encode($dados);
  53. /*        
  54.         $this->html->enableSection('main', [ 'width' => '100%',
  55.         'height' => '300px',
  56.         'title'  => 'Salários',
  57.         'data'   => json_encode($dados)] );
  58. */        
  59.         TTransaction::close();
  60.     }
  61. }
  62. ?>


Conto com a excelente ajuda que tenho tido da comunidade.
Abs à todos!

Paulo Corrêa

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


NR

Você está tentando utilizar uma variável que não existe, pois "$this->html" não foi inicializada. Modifique no construtor o uso de "$html" para "$this->html":
  1. <?php
  2. // construct
  3. //$html = new THtmlRenderer('app/resources/google_pie_chart.html');
  4. $this->html = new THtmlRenderer('app/resources/google_pie_chart.html');
  5. ?>
PC

Nataniel como sempre sua ajuda foi útil, alterei o código não dá mais o erro, mas, o gráfico não é exibido, fica a mensagem carregando mas não exibe o gráfico.
A saída das informações estão assim:
DADOS COMPLETOS => Array['Alimentação',292.42000579833984];['Anuidades',25];['Bancárias',49.14999961853027];['Combustível',70];['Cursos',390.5999984741211];['Dízimos e Ofertas',25];['Feira / Sacolão',20];['Filhos',100];['Higiene Pessoal',20];['Luz',155.3000030517578];['Manutenção',150];['Medicamentos',31.559999465942383];['Seguro de Cartão',5.349999904632568];['Supermercado',82.45999908447266];['Transporte',98.25000035762787];['TV Por Assinatura',199.1300048828125];['TV Por Striaming',37.900001525878906]
NR

A variável $dados deve ser uma matriz, pois a função json_encode faz a transformação necessária para o json usado pelo javascript. Você também precisa definir na primeira linha de $dados as descrições das colunas:
  1. <?php
  2. $dados[] = ['Tipo','Valor'];
  3.         
  4.         foreach($colunas as $coluna)
  5.         {
  6.             $dados[] = [$coluna[0],$coluna[1]];
  7.         }
  8. $this->html->enableSection('main', [ 'width' => '100%',
  9.         'height' => '300px',
  10.         'title'  => 'Salarios',
  11.         'data'   => json_encode($dados)] );
  12. ?>
JA

Faça essas alterações :

  1. <?php
  2. class GraficoReceitaDespesasResultado extends TPage
  3. {
  4.     //private $html;
  5.     
  6.     public function __construct()
  7.     {
  8.         parent::__construct();
  9.         parent::add(new TLabel('Demonstrativos'));
  10.         $table = new TTable;
  11.         
  12.         parent::add($table);
  13.         $this->onGenerator();
  14.         
  15.         $panel = new TPanelGroup('Bar chart');
  16.         $panel->style 'width: 100%';
  17.      
  18.     }
  19.     
  20.     function onGenerator()
  21.     {
  22.         //$this->html = new THtmlRenderer('app/resources/google_pie_chart.html'); 
  23.         $html = new THtmlRenderer('app/resources/google_pie_chart.html'); 
  24.         
  25.         TTransaction::open('facilitasmart');
  26.         $conn TTransaction::get();
  27.         
  28.         $colunas $conn->query("SELECT 
  29.                         sum(contas_receber.valor) as valor_titulo, 
  30.                         sum(contas_receber.valor_pago) as valor_pago
  31.                        FROM contas_receber
  32.                         where  
  33.                         contas_receber.condominio_id = 6 and 
  34.                         contas_receber.situacao = 1 and 
  35.                         (contas_receber.dt_liquidacao >= '2017-11-01' and contas_receber.dt_liquidacao <= '2017.11.30')"
  36.                         );
  37.         
  38.         $dados[] = ['Valor Título','Valor Pago'];
  39.         
  40.         foreach($colunas as $coluna)
  41.         {
  42.             $dados[] = [$coluna[0],$coluna[1]];
  43.         }
  44.         $div = new TElement('div');
  45.         $div->id    'container';
  46.         $div->style "width:950px;height:600px";
  47.         $div->add($html);
  48.                
  49.         // replace the main section variables
  50.         $html->enableSection('main', array('data'   => json_encode($dados),
  51.                                            'width'  => '100%',
  52.                                            'height'  => '300px',
  53.                                            'title'  => 'Accesses by day',
  54.                                            'ytitle' => 'Accesses'
  55.                                            'xtitle' => 'Day',
  56.                                            'uniqid' => uniqid()));
  57.                                            
  58.         TTransaction::close();
  59.         
  60.         parent::add($div);
  61.     }
  62. }
  63. ?>
PC

Junior boa tarde!

Agradeço a ajuda!
Tenho uma dúvida você criou uma tabela e não utilizou e criou um panel e não incluiu não entendi?
Alterei o código não dá mais erro, a div do gráfico é renderizada o titulo do gráfico aparece, contudo, o gráfico não é exibido.
Segue o novo código abaixo:
  1. <?php
  2. /**
  3.  * CommonPage
  4.  *
  5.  * @version    1.0
  6.  * @package    control
  7.  * @author     Pablo Dall'Oglio
  8.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  9.  * @license    http://www.adianti.com.br/framework-license
  10.  */
  11. class CommonPage extends TPage
  12. {
  13.     //private $html;
  14.     
  15.     public function __construct()
  16.     {
  17.         parent::__construct();
  18.         parent::add(new TLabel('Demonstrativos'));
  19.         $table = new TTable;
  20.                         
  21.         parent::add($table);
  22.         $this->onGenerator();
  23.         
  24.         $panel = new TPanelGroup('Grafico de Despesas');
  25.         $panel->style='width:100%';
  26.         
  27.         parent::add($panel);
  28.     }
  29.     
  30.     function onGenerator()
  31.     {
  32.         $html = new THtmlRenderer('app/resources/google_pie_chart.html');
  33.         
  34.         TTransaction::open('contpag');
  35.         $conn TTransaction::get();
  36.         
  37.         $colunas $conn->query('SELECT * FROM totalpormes ORDER BY nome');
  38.         $dados[] = ['Categoria','Valor'];
  39.         
  40.         foreach($colunas as $coluna)
  41.         {
  42.             $dados[] = [$coluna[0],$coluna[1]];
  43.         }
  44.         
  45.         $div = new TElement('div');
  46.         $div->id 'container';
  47.         $div->style 'width:950px;height:600px';
  48.         $div->add($html);
  49.         
  50.         $html->enableSection('main', array('data' => json_encode($dados),
  51.                                            'width' => '40%',
  52.                                            'height' => '300px',
  53.                                            'title'  => 'Despesas'));
  54.         
  55.         //print_r($dados);
  56.         
  57.         TTransaction::close();
  58.         parent::add($div);
  59.     }
  60. }
  61. ?>
NR

Tente fazer o cast da coluna do valor para float:
  1. <?php
  2. foreach($colunas as $coluna)
  3. {
  4.        $dados[] = [$coluna[0],(float)$coluna[1]];
  5. }
  6. ?>
PC

Nataniel você é fera cara!!

Deu certo, muito obrigado!

Estranho não ter nenhum exemplo no fórum ou no tutor.

Feliz Natal!
PC

Galera consegui exibir os gráficos tanto pie, bar e line.

Dei uma olhada no site do google chart existem várias configurações de apresentação, no Adianti só tem essas:

'width' => '100%',
'height' => '300px',
'title' => 'Orçado X Realizado',
'ytitle' => 'Orçado',
'xtitle' => 'Realizado',


No meu grafico de barras os valores estão sendo exibido com 4.1K assim por diante.
Eu gostaria de exibir valores configurados, alterar a cor das barras e outros aonde posso encontrar essa informação no Adianti?

att.
EB

Muito bom!
Parabéns Nataniel por ajudar sempre.

Att.,
Edi
J

Olá Paulo Corrêa. Amigo, sei que o post é antigo, porém, caso você ou outra pessoa possa ter esse problema eu encontrei uma solução. Acredito, sinceramente que não seja a ideal, porém, resolve o problema de customização de cores das barras dos gráficos.

O que eu fiz foi criar um novo arquivo copiado de app/resources/google_line_chart.html

nele você pode configurar como queira, aqui como exemplo (da linha 19 a 27):

var render_bar_chart = function() { var data = google.visualization.arrayToDataTable( {$data} ); var options = { title : '{$title}', vAxis: {title: '{$ytitle}'}, hAxis: {title: '{$xtitle}'}, seriesType: 'bars', colors : ['#ff851b', '#0073b7'] };


Ah! Lembrando de chamar corretamente o nome do novo arquivo em $html = new THtmlRenderer('app/resources/...');