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

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


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