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:
No método onReload, na parte onde os itens são adicionados nada datagrid
Método de totalização :
O método para esconder botão de edição
4 - Aqui a condição de mostrar/esconder o botão
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:
- <?php
- // Definir a configuracao do agrupamento
- $this->datagrid->setGroupColumn('tipo', "<b style='color:red'><i>{tipo_descricao}</i></b>");
- // Comentar a linha
- // $this->datagrid->datatable = 'true';
- ?>
No método onReload, na parte onde os itens são adicionados nada datagrid
- <?php
- public function onReload()
- // ... diversos comandos do onreaload
- // Quando chegar aqui, fazer assim
- $limit = $criteria->getProperty('limit');
- // load the objects according to criteria
- $objects = $repository->load($criteria, FALSE);
- if (is_callable($this->transformCallback))
- {
- call_user_func($this->transformCallback, $objects, $param);
- }
- $this->datagrid->clear();
- if ($objects)
- {
- // iterate the collection of active records
- $old_tipo = '';
- $total = array(0,0,0,0,0,0);
- $ttgeral = array(0,0,0,0,0,0);
- foreach ($objects as $object)
- {
- if ($old_tipo and $old_tipo != $object->tipo)
- {
- $this->totalizador('SUBTOTAL', $total);
- $total = array(0,0,0,0,0,0);
- }
- // add the object inside the datagrid
- $this->datagrid->addItem($object);
- $total[0] += $object->vl_executada_2;
- $total[1] += $object->vl_executada_1;
- $total[2] += $object->vl_orcada_0;
- $total[3] += $object->vl_prevista1;
- $total[4] += $object->vl_prevista2;
- $total[5] += $object->vl_prevista3;
- $ttgeral[0] += $object->vl_executada_2;
- $ttgeral[1] += $object->vl_executada_1;
- $ttgeral[2] += $object->vl_orcada_0;
- $ttgeral[3] += $object->vl_prevista1;
- $ttgeral[4] += $object->vl_prevista2;
- $ttgeral[5] += $object->vl_prevista3;
- $old_tipo = $object->tipo;
- }
- $this->totalizador('SUBTOTAL', $total);
- $this->totalizador('TOTAL GERAL', $ttgeral);
- }
- ?>
Método de totalização :
- <?php
- function totalizador($titulo,$total)
- {
- // objeto com mesma estrutura dos itens utilizados no addItem da grid
- $it = new stdclass();
- $it->id = '';
- $it->anobase='';
- $it->tipo='X';
- $it->codigo='';
- $it->descricao = $titulo;
- $it->vl_executada_2 = $total[0];
- $it->vl_executada_1 = $total[1];
- $it->vl_orcada_0 = $total[2];
- $it->vl_prevista1 = $total[3];
- $it->vl_prevista2 = $total[4];
- $it->vl_prevista3 = $total[5];
- $it->nota_explicativa = '';
- $it->flag_rpps = '';
- $it->tipo_descricao = '';
- $row = $this->datagrid->addItem($it);
- $row->get(1)->colspan = 2;
- // $row->del($row->get(0)); //deletar coluna de ações // nao funcionou comigo
- }
- ?>
O método para esconder botão de edição
- <?php
- public function escondeBotao($param)
- {
- if ($param->tipo == 'X')
- {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
- }
- ?>
4 - Aqui a condição de mostrar/esconder o botão
- <?php
- private function createDatagridActions()
- {
- // Acao de selecao de registro. Deve ser antes do create model.
- // register_state = false é usado para nao mudar a URL
- $action1 = new TDataGridAction([$this->editForm, 'onEdit'] , [$this->keyField=>'{'.$this->keyField.'}','register_state'=>'false']);
- $action2 = new TDataGridAction([$this, 'onDelete'] , [$this->keyField=>'{'.$this->keyField.'}']);
- $action3 = new TDatagridAction([$this,'onSelect'] , [$this->keyField=>'{'.$this->keyField.'}', 'register_state'=>'false']);
- $action1->setDisplayCondition([$this,'escondeBotao']);
- $this->datagrid->addAction($action1, _t('Edit'), 'far:edit blue');
- }
- ?>
Editado 25/03/2024 (há 6 meses) - Clique para ver alterações