Subtotal em datagrid Olá amigos. O código a seguir serve para mostrar subtotais em datagrids. No meu caso, especificamente, eu tenho várias colunas de valores, e preciso apresentar subtotais conforme um agrupamento, e um total geral no final da datagrid. Importante lembrar que estou me baseando noutra postagem. https://adiantiframework.com.br/forum/view_5432 Aqui serão mostrados os trechos mais relev...
EL
Subtotal em datagrid  
Olá amigos.

O código a seguir serve para mostrar subtotais em datagrids.

No meu caso, especificamente, eu tenho várias colunas de valores, e preciso apresentar subtotais conforme um agrupamento, e um total geral no final da datagrid.

Importante lembrar que estou me baseando noutra postagem.
https://adiantiframework.com.br/forum/view_5432

Aqui serão mostrados os trechos mais relevantes :

No método __construct:

 
  1. <?php
  2. // Definir a configuracao do agrupamento
  3. $this->datagrid->setGroupColumn('tipo', "<b style='color:red'><i>{tipo_descricao}</i></b>");
  4. // Comentar a linha
  5. // $this->datagrid->datatable = 'true';
  6. ?>


No método onReload, na parte onde os itens são adicionados nada datagrid
 
  1. <?php
  2. public function onReload()
  3. // ... diversos comandos do onreaload
  4. // Quando chegar aqui, fazer assim
  5. $limit = $criteria->getProperty('limit');
  6. // load the objects according to criteria
  7. $objects = $repository->load($criteria, FALSE);
  8. if (is_callable($this->transformCallback))
  9. {
  10. call_user_func($this->transformCallback, $objects, $param);
  11. }
  12. $this->datagrid->clear();
  13. if ($objects)
  14. {
  15. // iterate the collection of active records
  16. $old_tipo = '';
  17. $total = array(0,0,0,0,0,0);
  18. $ttgeral = array(0,0,0,0,0,0);
  19. foreach ($objects as $object)
  20. {
  21. if ($old_tipo and $old_tipo != $object->tipo)
  22. {
  23. $this->totalizador('SUBTOTAL', $total);
  24. $total = array(0,0,0,0,0,0);
  25. }
  26. // add the object inside the datagrid
  27. $this->datagrid->addItem($object);
  28. $total[0] += $object->vl_executada_2;
  29. $total[1] += $object->vl_executada_1;
  30. $total[2] += $object->vl_orcada_0;
  31. $total[3] += $object->vl_prevista1;
  32. $total[4] += $object->vl_prevista2;
  33. $total[5] += $object->vl_prevista3;
  34. $ttgeral[0] += $object->vl_executada_2;
  35. $ttgeral[1] += $object->vl_executada_1;
  36. $ttgeral[2] += $object->vl_orcada_0;
  37. $ttgeral[3] += $object->vl_prevista1;
  38. $ttgeral[4] += $object->vl_prevista2;
  39. $ttgeral[5] += $object->vl_prevista3;
  40. $old_tipo = $object->tipo;
  41. }
  42. $this->totalizador('SUBTOTAL', $total);
  43. $this->totalizador('TOTAL GERAL', $ttgeral);
  44. }
  45. ?>


Método de totalização :
 
  1. <?php
  2. function totalizador($titulo,$total)
  3. {
  4. // objeto com mesma estrutura dos itens utilizados no addItem da grid
  5. $it = new stdclass();
  6. $it->id = '';
  7. $it->anobase='';
  8. $it->tipo='X';
  9. $it->codigo='';
  10. $it->descricao = $titulo;
  11. $it->vl_executada_2 = $total[0];
  12. $it->vl_executada_1 = $total[1];
  13. $it->vl_orcada_0 = $total[2];
  14. $it->vl_prevista1 = $total[3];
  15. $it->vl_prevista2 = $total[4];
  16. $it->vl_prevista3 = $total[5];
  17. $it->nota_explicativa = '';
  18. $it->flag_rpps = '';
  19. $it->tipo_descricao = '';
  20. $row = $this->datagrid->addItem($it);
  21. $row->get(1)->colspan = 2;
  22. // $row->del($row->get(0)); //deletar coluna de ações // nao funcionou comigo
  23. }
  24. ?>


O método para esconder botão de edição
 
  1. <?php
  2. public function escondeBotao($param)
  3. {
  4. if ($param->tipo == 'X')
  5. {
  6. return FALSE;
  7. }
  8. else
  9. {
  10. return TRUE;
  11. }
  12. }
  13. ?>


4 - Aqui a condição de mostrar/esconder o botão

 
  1. <?php
  2. private function createDatagridActions()
  3. {
  4. // Acao de selecao de registro. Deve ser antes do create model.
  5. // register_state = false é usado para nao mudar a URL
  6. $action1 = new TDataGridAction([$this->editForm, 'onEdit'] , [$this->keyField=>'{'.$this->keyField.'}','register_state'=>'false']);
  7. $action2 = new TDataGridAction([$this, 'onDelete'] , [$this->keyField=>'{'.$this->keyField.'}']);
  8. $action3 = new TDatagridAction([$this,'onSelect'] , [$this->keyField=>'{'.$this->keyField.'}', 'register_state'=>'false']);
  9. $action1->setDisplayCondition([$this,'escondeBotao']);
  10. $this->datagrid->addAction($action1, _t('Edit'), 'far:edit blue');
  11. }
  12. ?>


Editado 25/03/2024 (há 1 ano) - Clique para ver alterações

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