Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dúvida sobre somatório em setGroupColumn e outra sobre pesquisa Bom dia! Estou utilizando o setGroupColumn para agrupar registros oriundos de uma view. Neste caso "data_formatada" é um método da minha Model que retorna a data formatada corretamente para exibição no cabeçalho em cada agrupamento. Pois bem tenho duas situações que ocorrem, a primeira...
CG
Dúvida sobre somatório em setGroupColumn e outra sobre pesquisa  
Bom dia!

Estou utilizando o setGroupColumn para agrupar registros oriundos de uma view.
  1. <?php $this->datagrid->setGroupColumn('dt_movimento''<b>Data</b>: <i>{data_formatada}</i>'); ?>

Neste caso "data_formatada" é um método da minha Model que retorna a data formatada corretamente para exibição no cabeçalho em cada agrupamento.

Pois bem tenho duas situações que ocorrem, a primeira é que eu faço uma pesquisa dentro dessa view por um intervalo de datas, e por consequência essa consulta é manual, já que não consegui utilizar o between no where da Model (é possível?), então fiz o seguinte:
  1. <?php $sth $conn->prepare('SELECT * from chopp.v_movimentos_produtos WHERE dt_movimento between ? AND ?');
  2.                 $sth->execute(array( $periodo1,$periodo2));
  3. ?>


Então, quando eu carrego normalmente a view (onReload), o cabeçalho do agrupamento aparece corretamente, mas quando eu realizo a busca por intervalo (e neste caso eu realizo o select manual) ocorre o erro: Notice: Undefined property: stdClass::$data_formatada in...
Isso ocorre já que o método tem que ser chamado dentro da model, mas como foi realizado uma consulta manual, não há model para verificar e o erro ocorre.
Como posso então realizar a minha consulta e transforma ela em um repositório, ou associar com a minha model para que o cabeçalho possa funcionar corretamente?

Outra pergunta é sobre a somatória por agrupamento, como fazer? Eu possuo um somatório de todos os resultados listados, porém, eu preciso de um somatório pelo agrupamento exibido no setGroupColumn.

Estas são minhas dúvidas, se alguém souber como ajudar eu agradeço!
Obrigado!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (4)


NR

1 - Uso do between é possível:
adianti.com.br/framework_files/tutor/index.php?class=CriteriaView

2 - Sobre o somatório dos agrupamentos:
- Ordene os itens pela coluna de agrupamento.
- Dentro do foreach dos itens, na onReload, verifique se a data do item atual é diferente da anterior, pois isso significa que está trocando o agrupamento.
- Insira um item manualmente na grid com os totais.
Ex:
  1. <?php
  2. $dt_movimento '';
  3. $total_data 0;
  4. foreach ($objects as $object)
  5. {
  6.     // quando dt_movimento != anterior e nao for primeiro item, exibe totalizador
  7.     if ($dt_movimento != $object->dt_movimento AND $dt_movimento)
  8.     {
  9.            $obj = new stdclass();
  10.            $obj->dt_movimento $dt_movimento;
  11.            $obj->valor $total_data;
  12.            $obj->outra_coluna '';
  13.            $this->datagrid->addItem($obj);
  14.                        
  15.            $total_data 0;
  16.      }
  17.      $total_data += $object->valor;
  18.      $dt_movimento $object->dt_movimento;
  19.      ...
  20. ?>
CG

Bom dia Nataniel, obrigado pela resposta!

Após a minha postagem eu apliquei uma solução para exibir no cabeçalho do agrupamento os totais da soma bem como os descontos.
Foi uma solução que gostei mas não era a minha inicial, a inicial era mostrar na última linha a soma de tudo.

Quanto a sua solução, já apliquei ela aqui e realmente funcionou, porém, o último agrupamento não aparece o somatório, somente o somatório do setTotalFunction: uploaddeimagens.com.br/imagens/movimentos-png-da97c994-33fe-425b-912
Fiz uns testes aqui e é sempre na última coluna que não é realizado o cálculo, meu código ficou assim:
  1. <?php 
  2. if ($objects)
  3.             {
  4.                 $dt_movimento ''
  5.                 $total_data 0
  6.                foreach ($objects as $object)
  7.                 {
  8.                     if ($dt_movimento != $object->dt_movimento AND $dt_movimento)
  9.                         {
  10.                             $obj = new stdclass();
  11.                             $obj->dt_movimento $dt_movimento;
  12.                             $obj->vl_total $total_data;
  13.                             $obj->descricao '';
  14.                             $obj->qt_total '';
  15.                             $obj->codigo '';
  16.                             $obj->vl_unitario_total '';
  17.                             $obj->vl_tot_desconto '';
  18.                             $this->datagrid->addItem($obj);
  19.                                         
  20.                             $total_data 0;
  21.                           
  22.                         }
  23.                     
  24.                   $total_data += $object->vl_total;
  25.                   $dt_movimento $object->dt_movimento
  26.                   $this->datagrid->addItem($object); 
  27.                 }
  28.             }
  29. ?>


Agradeço a atenção!
NR

O último grupo não entra no if. Chame a addItem com o total após o foreach.
CG

Sim! Fiz isso depois e deu certo!
Muito obrigado Nataniel, :)

Estou concatenando o resultado assim para dar um estilo mas sem sucesso:
  1. <?php
  2.                             $obj = new stdclass();
  3.                             $obj->vl_total '<b>.'$total_data'</b>';
  4.                             $this->datagrid->addItem($obj);
  5. ?>

Nada que eu coloque funciona.
Estou usando um setTransformer em algumas colunas, mas não consigo concatenar HMTL no resultado... tem uma maneira de fazer isso?
Obrigado mais um vez!!!!