Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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($criteriaFALSE);
  8.             
  9.             if (is_callable($this->transformCallback))
  10.             {
  11.                 call_user_func($this->transformCallback$objects$param);
  12.             }
  13.             $this->datagrid->clear();
  14.             if ($objects)
  15.             {
  16.                 // iterate the collection of active records
  17.                 $old_tipo    '';
  18.                 $total  = array(0,0,0,0,0,0);
  19.                 $ttgeral = array(0,0,0,0,0,0);
  20.                 foreach ($objects as $object)
  21.                 {
  22.                     if ($old_tipo and $old_tipo != $object->tipo)
  23.                     {
  24.                         $this->totalizador('SUBTOTAL'$total);
  25.                         $total  = array(0,0,0,0,0,0);
  26.                     }
  27.                     // add the object inside the datagrid
  28.                     $this->datagrid->addItem($object);
  29.                     $total[0] += $object->vl_executada_2;
  30.                     $total[1] += $object->vl_executada_1;
  31.                     $total[2] += $object->vl_orcada_0;
  32.                     $total[3] += $object->vl_prevista1;
  33.                     $total[4] += $object->vl_prevista2;
  34.                     $total[5] += $object->vl_prevista3;
  35.                     $ttgeral[0] += $object->vl_executada_2;
  36.                     $ttgeral[1] += $object->vl_executada_1;
  37.                     $ttgeral[2] += $object->vl_orcada_0;
  38.                     $ttgeral[3] += $object->vl_prevista1;
  39.                     $ttgeral[4] += $object->vl_prevista2;
  40.                     $ttgeral[5] += $object->vl_prevista3;
  41.                     $old_tipo $object->tipo;
  42.                 }
  43.                 $this->totalizador('SUBTOTAL'$total);
  44.                 $this->totalizador('TOTAL GERAL'$ttgeral);                
  45.             }
  46.             
  47. ?>


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.              
  21.          $row $this->datagrid->addItem($it);
  22.          $row->get(1)->colspan 2;                
  23.         //  $row->del($row->get(0)); //deletar coluna de ações // nao funcionou comigo
  24.     }
  25. ?>


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 mês) - Clique para ver alterações

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