Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Criar Dashboard Pessoal boa tarde, gostaria de saber como funciona a criação do Dashboard, como o que foi feito no Adianti 7: SystemAdministrationDashboard. Alguém pode me explicar como montar ou alterar este existente? Desde já agradeço Paulo Silva...
PS
Criar Dashboard  
Pessoal boa tarde, gostaria de saber como funciona a criação do Dashboard, como o que foi feito no Adianti 7: SystemAdministrationDashboard. Alguém pode me explicar como montar ou alterar este existente?

Desde já agradeço
Paulo Silva

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


MG

Paulo, os códigos fontes são abertos e você poderá estudá-los ou alterá-los.
No Tutor tem vários exemplos com código fonte.
Cada dashboard tem seus próprios elementos, o FW te dá como iniciar este trabalho.
PS

  1. <?php
  2. class SystemAdministrationDashboard extends TPage
  3. {
  4.     /**
  5.      * Class constructor
  6.      * Creates the page
  7.      */
  8.     function __construct()
  9.     {
  10.         parent::__construct();
  11.         
  12.         try
  13.         {
  14.             $html = new THtmlRenderer('app/resources/system_admin_dashboard.html');
  15.             
  16.             TTransaction::open('permission');
  17.             $indicator1 = new THtmlRenderer('app/resources/info-box.html');
  18.             $indicator2 = new THtmlRenderer('app/resources/info-box.html');
  19.             $indicator3 = new THtmlRenderer('app/resources/info-box.html');
  20.             $indicator4 = new THtmlRenderer('app/resources/info-box.html');
  21.             
  22.             $indicator1->enableSection('main', ['title' => _t('Users'),    'icon' => 'user',       'background' => 'orange''value' => SystemUser::count()]);
  23.             $indicator2->enableSection('main', ['title' => _t('Groups'),   'icon' => 'users',      'background' => 'blue',   'value' => SystemGroup::count()]);
  24.             $indicator3->enableSection('main', ['title' => _t('Units'),    'icon' => 'university''background' => 'purple''value' => SystemUnit::count()]);
  25.             $indicator4->enableSection('main', ['title' => _t('Programs'), 'icon' => 'code',       'background' => 'green',  'value' => SystemProgram::count()]);
  26.             $indicator1->enableSection('main', ['title' => _t('Users'),    'icon' => 'user',       'background' => 'orange''value' => SystemUser::count()]);
  27.             
  28.             $chart1 = new THtmlRenderer('app/resources/google_bar_chart.html');
  29.             $data1 = [];
  30.             $data1[] = [ 'Group''Users' ];
  31.             
  32.             $stats1 SystemUserGroup::groupBy('system_group_id')->countBy('system_user_id''count');
  33.             if ($stats1)
  34.             {
  35.                 foreach ($stats1 as $row)
  36.                 {
  37.                     $data1[] = [ SystemGroup::find($row->system_group_id)->name, (int) $row->count];
  38.                 }
  39.             }
  40.             
  41.             // replace the main section variables
  42.             $chart1->enableSection('main', ['data'   => json_encode($data1),
  43.                                             'width'  => '100%',
  44.                                             'height'  => '500px',
  45.                                             'title'  => _t('Users by group'),
  46.                                             'ytitle' => _t('Users'), 
  47.                                             'xtitle' => _t('Count'),
  48.                                             'uniqid' => uniqid()]);
  49.             
  50.             $chart2 = new THtmlRenderer('app/resources/google_pie_chart.html');
  51.             $data2 = [];
  52.             $data2[] = [ 'Unit''Users' ];
  53.             
  54.             $stats2 SystemUserUnit::groupBy('system_unit_id')->countBy('system_user_id''count');
  55.             
  56.             if ($stats2)
  57.             {
  58.                 foreach ($stats2 as $row)
  59.                 {
  60.                     $data2[] = [ SystemUnit::find($row->system_unit_id)->name, (int) $row->count];
  61.                 }
  62.             }
  63.             // replace the main section variables
  64.             $chart2->enableSection('main', ['data'   => json_encode($data2),
  65.                                             'width'  => '100%',
  66.                                             'height'  => '500px',
  67.                                             'title'  => _t('Users by unit'),
  68.                                             'ytitle' => _t('Users'), 
  69.                                             'xtitle' => _t('Count'),
  70.                                             'uniqid' => uniqid()]);
  71.             
  72.             $html->enableSection('main', ['indicator1' => $indicator1,
  73.                                           'indicator2' => $indicator2,
  74.                                           'indicator3' => $indicator3,
  75.                                           'indicator4' => $indicator4,
  76.                                           'chart1'     => $chart1,
  77.                                           'chart2'     => $chart2] );
  78.             
  79.             $container = new TVBox;
  80.             $container->style 'width: 100%';
  81.             $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  82.             $container->add($html);
  83.             
  84.             parent::add($container);
  85.             TTransaction::close();
  86.         }
  87.         catch (Exception $e)
  88.         {
  89.             parent::add($e->getMessage());
  90.         }
  91.     }
  92. }
  93. ?>


Marcelo, obrigado pelo apoio, mas poderia me dizer como eu altero o conteúdo neste exemplo para outra tabela?
Estou meio confuso com o código.
MG

Paulo, esse dashboard usa THtmlRender.
Abra o html e poderá ver que o código está passado para o html (section), os dados.
Portanto é renderizar html, habilitar a seção e enviar os dados para serem substituídos pelo
dados enviado.

Veja este link no turor:

https://www.adianti.com.br/framework_files/tutor/index.php?class=TemplateViewMas

  1. <?php
  2.      $indicator1->enableSection('main', ['title' => _t('Users'),    'icon' => 'user',       'background' => 'orange''value' => SystemUser::count()]);
  3. ?>


PS

Marcelo, muito obrigado pelas dicas, consegui realmente entender o funcionamento. Me diga só mais uma coisa, como faço para filtrar o resultado, já que, quero mostrar somente a quantidade por exemplo, da empresa que estou logado, ou seja, cada empresa tenho uma determinada quantidade a ser exibida.

Desde já agradeço.
MG

Paulo
Como dica, crie um método estático no Model que precisar obter os dados com um parâmetro que seria empresa_id ou unit-id do usuário logado que está na session.
De modo geral, não precisaria do parâmetro uma vez que está na memória, mas caso precise obter este dados num processamento diferente, o parâmetro ajuda a desacoplar.

No where condition>/b>, inclua a chave da empresa ou unit como um dos parâmetros.
Assim o método poderá retornar apenas o que deseja.

Exemplo:
  1. <?php
  2. public static function totalVendas($empresa_id)
  3. {
  4.     ....
  5.     $repository = new TRepository('PedidoItem');
  6.     $criteria = new TCriteria;
  7.     // filtro inicial
  8.      $criteria->add(new TFilter('empresa_id','=',$empresa_id));
  9.      $total $repository->count($criteria);
  10.      // retorna o total de vendas
  11.      return $total;
  12. }
  13. /// como chamar
  14. $total_vendas PedidoItem::totalVendas($empresa_id); // obtem o total;
  15. $replaces['total_vendas'] = $total_vendas// passado para o html renderizar.
  16. ?>
KC

Ola Marcelo, me ajude por fovor. tenho o mesmo problema para criação do Dashboard.
acontece que eu quero trazer o valor total da tabela de pagamento.
fiz assim :

$indicator5->enableSection('main', ['title' => ('Prestações Pagas'), 'icon' => 'code', 'background' => 'orange', 'value' => Pagarprestacao::sum('valor')]);

está dando este erro:
Método Pagarprestacao::sum() não encontrado
MG

Olá, se vc criou um método estático "sum" na classe "Pagarprestacao"?
KC

Marcelo, não Criei o método estático na classes Pagarprestação
KC

neste caso como ficaria Marcelo?
MG

O erro está dizendo que não encontrou o método em Pagarprestacao.
Pela chamada, este método espera um parâmetro chamado 'valor'.
Poderia postar a classe Pagarprestacao?

KC

  1. <?php 
  1. <?php
  2. class Pagarprestacao extends TRecord
  3. {
  4.     const TABLENAME  'pagarprestacao';
  5.     const PRIMARYKEY 'id';
  6.     const IDPOLICY   =  'serial'// {max, serial}
  7.     private $fk_user;
  8.     private $fk_idvendaimovel;
  9.     private $fk_cliente;
  10.     
  11.     /**
  12.      * Constructor method
  13.      */
  14.     public function __construct($id NULL$callObjectLoad TRUE)
  15.     {
  16.         parent::__construct($id$callObjectLoad);
  17.         parent::addAttribute('idvendaimovel');
  18.         parent::addAttribute('iditensvendaimovel');
  19.         parent::addAttribute('cliente');
  20.         parent::addAttribute('vendidopor');
  21.         parent::addAttribute('imovel');
  22.         parent::addAttribute('valorimovel');
  23.         parent::addAttribute('valorrestante');
  24.         parent::addAttribute('valorprestacao');
  25.         parent::addAttribute('user');
  26.         parent::addAttribute('datapagamento');
  27.         parent::addAttribute('nprestacao');
  28.             
  29.     }
  30.     /**
  31.      * Method set_system_users
  32.      * Sample of usage: $var->system_users = $object;
  33.      * @param $object Instance of SystemUser
  34.      */
  35.     public function set_fk_user(SystemUser $object)
  36.     {
  37.         $this->fk_user $object;
  38.         $this->user $object->id;
  39.     }
  40.     /**
  41.      * Method get_fk_user
  42.      * Sample of usage: $var->fk_user->attribute;
  43.      * @returns SystemUser instance
  44.      */
  45.     public function get_fk_user()
  46.     {
  47.         TTransaction::open('permission');
  48.         // loads the associated object
  49.         if (empty($this->fk_user))
  50.             $this->fk_user = new SystemUser($this->user);
  51.         TTransaction::close();
  52.         // returns the associated object
  53.         return $this->fk_user;
  54.     }
  55.     /**
  56.      * Method set_vendaimovel
  57.      * Sample of usage: $var->vendaimovel = $object;
  58.      * @param $object Instance of Vendaimovel
  59.      */
  60.     public function set_fk_idvendaimovel(Vendaimovel $object)
  61.     {
  62.         $this->fk_idvendaimovel $object;
  63.         $this->idvendaimovel $object->id;
  64.     }
  65.     /**
  66.      * Method get_fk_idvendaimovel
  67.      * Sample of usage: $var->fk_idvendaimovel->attribute;
  68.      * @returns Vendaimovel instance
  69.      */
  70.     public function get_fk_idvendaimovel()
  71.     {
  72.     
  73.         // loads the associated object
  74.         if (empty($this->fk_idvendaimovel))
  75.             $this->fk_idvendaimovel = new Vendaimovel($this->idvendaimovel);
  76.     
  77.         // returns the associated object
  78.         return $this->fk_idvendaimovel;
  79.     }
  80.     /**
  81.      * Method set_cliente
  82.      * Sample of usage: $var->cliente = $object;
  83.      * @param $object Instance of Cliente
  84.      */
  85.     public function set_fk_cliente(Cliente $object)
  86.     {
  87.         $this->fk_cliente $object;
  88.         $this->cliente $object->id;
  89.     }
  90.     /**
  91.      * Method get_fk_cliente
  92.      * Sample of usage: $var->fk_cliente->attribute;
  93.      * @returns Cliente instance
  94.      */
  95.     public function get_fk_cliente()
  96.     {
  97.     
  98.         // loads the associated object
  99.         if (empty($this->fk_cliente))
  100.             $this->fk_cliente = new Cliente($this->cliente);
  101.     
  102.         // returns the associated object
  103.         return $this->fk_cliente;
  104.     }    
  105. }
  106. ?>
MG

Não existe o método "sum", por isso está dando erro!
Realmente não foi implementado!

  1. <?php
  2. public static function sum()
  3. {
  4.      ....
  5. }
  6. ?>