Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Somar valores de Consulta (view) e gravar soma em outra tabela Boa tarde a todos. Tenho um uma grid com vários registros baseados em compras efetuadas, criei um botão para efetuar o fechamento destas compras que até aqui funciona perfeitamente. Fecha todas as compras desta grid que é filtrada por loja. Gostaria que esse mesmo botão fizesse a soma de todas as compras desta grid e gravasse esse valor da soma total em outra tabela. Seria possível? Obri...
CM
Somar valores de Consulta (view) e gravar soma em outra tabela  
Boa tarde a todos.
Tenho um uma grid com vários registros baseados em compras efetuadas, criei um botão para efetuar o fechamento destas compras que até aqui funciona perfeitamente. Fecha todas as compras desta grid que é filtrada por loja.
Gostaria que esse mesmo botão fizesse a soma de todas as compras desta grid e gravasse esse valor da soma total em outra tabela.
Seria possível?
Obrigado a todos.
Segue o código da grid

  1. <?php 
  1. <?php
  2. class ComprasList extends TPage
  3. {
  4.     protected $form;     // registration form
  5.     protected $datagrid// listing
  6.     protected $pageNavigation;
  7.     protected $formgrid;
  8.     protected $deleteButton;
  9.     protected $column_finalizada;
  10.     
  11.     use Adianti\base\AdiantiStandardListTrait;
  12.     
  13.     
  14.     public function __construct()
  15.     {
  16.         parent::__construct();
  17.         
  18.         $Titulo_pg '<b><font color="#3C8DBC" size="4px">LISTA DE COMPRAS NÃO FECHADAS</font> </b>'
  19.         echo "$Titulo_pg <br/> <br/>" ;  
  20.         
  21.         //FILTRA COMPRAS PELO ID DA LOJA
  22.         $criteria = new TCriteria
  23.         $criteria->add(new TFilter('loja_id','='TSession::getValue('userunitid'))); 
  24.         //$this->setCriteria($criteria);
  25.         
  26.         
  27.         $this->setDatabase('ourorio');            // defines the database
  28.         $this->setActiveRecord('ComprasAbertas');   // defines the active record
  29.         $this->setDefaultOrder('data_compra''desc');         // defines the default order
  30.         $this->setLimit(10);
  31.         //$this->setCriteria($criteria); // define a standard filter
  32.         $this->addFilterField('id_compra''like''id_compra'); // filterField, operator, formField
  33.         $this->addFilterField('data_compra''like''data_compra'); // filterField, operator, formField
  34.         $this->addFilterField('cliente_id''like''cliente_id'); // filterField, operator, formField
  35.         $this->addFilterField('loja_id''like''loja_id'); // filterField, operator, formField
  36.         
  37.         // creates the form
  38.         $this->form = new BootstrapFormBuilder('form_search_Compras');
  39.        
  40.         // create the form fields
  41.         $id_compra = new TEntry('id_compra');
  42.         $data_compra = new TDate('data_compra');
  43.         $cliente_id = new TEntry('cliente_id');
  44.         $loja_id = new TDBCombo('loja_id''ourorio''SystemUnit''id''name','name');
  45.         
  46.         // add the fields
  47.         $row $this->form->addFields ([ new TLabel('Número') ], [ $id_compra ] ,
  48.                                        [ new TLabel('Data') ], [ $data_compra ] ,
  49.                                        [ new TLabel('Cliente') ], [ $cliente_id ],
  50.                                        [ new TLabel('Loja') ], [ $loja_id ]);
  51.         $row->layout = ['col-sm-1''col-sm-1','col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-3'];
  52.         // set sizes
  53.         $id_compra->setSize('100%');
  54.         $data_compra->setSize('100%');
  55.         $cliente_id->setSize('100%');
  56.         //mascaras
  57.         $cliente_id->forceUpperCase();
  58.         $data_compra ->setMask('dd/mm/yyyy');
  59.         $data_compra ->setDatabaseMask('yyyy-mm-dd');
  60.         $id_compra->setMask('9!'); // Máscara Numérica Livre
  61.         
  62.         // keep the form filled during navigation with session data
  63.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data') );
  64.         
  65.         // add the search form actions
  66.         $btn_gravar $this->form->addAction('PESQUISAR', new TAction([$this'onSearch']), 'fa:search');
  67.         $btn_gravar->class 'btn btn-sm btn-primary';
  68.         
  69.         
  70.         $btn_nova_compra $this->form->addActionLink('NOVA COMPRA', new TAction(['ComprasFormMaster''onEdit']), 'fa:plus white');
  71.         $btn_nova_compra->class 'btn btn-sm btn-success';
  72.         
  73.         $btn_novo_cliente $this->form->addActionLink('NOVO CLIENTE', new TAction(['ClientesForm''onEdit']), 'fa:plus white');
  74.         $btn_novo_cliente->class 'btn btn-sm btn-success';
  75.         
  76.         $btn_fecha_movimento $this->form->addAction('FECHAR MOVIMENTO', new TAction([$this'onConfirmaFechamento']), 'fa:search'); //  <b>Aqui o botão que faço o Fechamento das Compras. </b>
  77.         $btn_fecha_movimento->class 'btn btn-sm btn-danger';
  78.         
  79.         // creates a Datagrid
  80.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  81.         $this->datagrid->style 'width: 100%';
  82.         $this->datagrid->datatable 'true';
  83.        
  84.         // creates the datagrid columns
  85.         $column_id_compra = new TDataGridColumn('id_compra''Nº Compra''center');
  86.         $column_data_compra = new TDataGridColumn('data_compra''Data Compra''center');
  87.         $column_cliente_id = new TDataGridColumn('{Cliente->nome_cliente}''Cliente''left');
  88.         $column_vendedor_txt = new TDataGridColumn('vendedor_txt''Operador''left');
  89.         $column_loja_id = new TDataGridColumn('loja_txt''Loja''left');
  90.         $column_finalizada = new TDataGridColumn('finalizada''Status''left');
  91.         $column_valor_total = new TDataGridColumn('valor_total''Total''right');
  92.   
  93.         // add the columns to the DataGridF
  94.         $this->datagrid->addColumn($column_id_compra);
  95.         $this->datagrid->addColumn($column_data_compra);
  96.         $this->datagrid->addColumn($column_cliente_id);
  97.         $this->datagrid->addColumn($column_vendedor_txt);
  98.         $this->datagrid->addColumn($column_loja_id);
  99.         $this->datagrid->addColumn($column_valor_total);
  100.         $this->datagrid->addColumn($column_finalizada);   
  101.   
  102.        // define totals
  103.         $column_valor_total->setTotalFunction( function($values) {
  104.             return array_sum((array) $values);
  105.         });
  106.         
  107.         //STATUS DO MOVIMENTO
  108.         $column_finalizada->setTransformer(function($value$object$row) { 
  109.          $lbl = new TLabel(''); 
  110.          if ($value == '1') { 
  111.              $lbl->setValue('ABERTA'); 
  112.              //$lbl->class = 'label label-warning';
  113.              $lbl->class='label label-primary';
  114.              
  115.          } 
  116.          if ($value == '2') { 
  117.              $lbl->setValue('FECHADA'); 
  118.              $lbl->class 'label label-success'
  119.          }  
  120.          if ($value == '3') { 
  121.              $lbl->setValue('ENCERRADA'); 
  122.              $lbl->class 'label label-success'
  123.          }  
  124.          return $lbl
  125.          });
  126.          
  127.         // definir o método do transformador sobre a Data 
  128.         $column_data_compra->setTransformer( function($value$object$row) {
  129.             if ($value)
  130.             {
  131.                 try
  132.                 {
  133.                     $date = new DateTime($value);
  134.                     return $date->format('d/m/Y');
  135.                 }
  136.                 catch (Exception $e)
  137.                 {
  138.                     return $value;
  139.                 }
  140.             }
  141.             return $value;
  142.             });
  143.             
  144.         // definir o método do transformador sobre o Valor
  145.         $column_valor_total->setTransformer( function($value$object$row) {
  146.             if (is_numeric($value))
  147.             {
  148.                 return 'R$ ' number_format($value2',''.');
  149.             }
  150.             return $value;
  151.             
  152.         });
  153.         
  154.         $action1 = new TDataGridAction(['ComprasFormMaster''onEdit'], ['id_compra'=>'{id_compra}']);
  155.         $this->datagrid->addAction($action1_t('Edit'),   'far:edit blue');
  156.         
  157.         $action2 = new TDataGridAction([$this'onDelete'], ['id_compra'=>'{id_compra}']);
  158.         $this->datagrid->addAction($action2 ,_t('Delete'), 'far:trash-alt red');  
  159.         
  160.         // create the datagrid model
  161.         $this->datagrid->createModel();
  162.         
  163.         // creates the page navigation
  164.         $this->pageNavigation = new TPageNavigation;
  165.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  166.         
  167.         
  168.         $panel = new TPanelGroup('''white');
  169.         $panel->add($this->datagrid);
  170.         $panel->addFooter($this->pageNavigation);
  171.         
  172.         // header actions
  173.         $dropdown = new TDropDown(_t('Export'), 'fa:list');
  174.         $dropdown->setPullSide('right');
  175.         $dropdown->setButtonClass('btn btn-info waves-effect dropdown-toggle');
  176.         //$dropdown->addAction( _t('Save as CSV'), new TAction([$this, 'onExportCSV'], ['register_state' => 'false', 'static'=>'1']), 'fa:table blue' );
  177.         $dropdown->addAction('Gerar PDF da Lista', new TAction([$this'onExportPDF'], ['register_state' => 'false''static'=>'1']), 'far:file-pdf red' );
  178.         $panel->addHeaderWidget$dropdown );
  179.         
  180.         // vertical box container
  181.         $container = new TVBox;
  182.         $container->style 'width: 100%';
  183.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  184.         $container->add($this->form);
  185.         $container->add($panel);
  186.         
  187.         parent::add($container);
  188.     }
  189.     
  190.     
  191.     function onConfirmaFechamento($param)
  192.     {
  193.     $action = new TAction(array($this'onFechaMovimento'));
  194.     $action->setParameters($param);
  195.     new TQuestion('Confirma o Fechamento do Movimento ?'$action);
  196.     } 
  197.     
  198.     public function onFechaMovimento($param
  199.     { 
  200.         $loja_id TSession::getValue('userunitid');//loja_id;
  201.         //$data_atual->setValue(date("Y-m-d"));
  202.         
  203.         try 
  204.         { 
  205.             TTransaction::open('ourorio');
  206.             
  207.             // load customers
  208.             $compras Compras::where('loja_id''='$loja_id)->load();
  209.             
  210.             foreach ($compras as $compras
  211.             {
  212.                 // update record
  213.                 $compras->finalizada '2';
  214.                 $compras->movimento_fechado '2';
  215.                 $compras->movimento_fechado_em date("Y-m-d"); 
  216.                 $compras->store(); 
  217.             } 
  218.             new TMessage('info''Movimento Fechado com Sucesso!'); 
  219.             AdiantiCoreApplication::loadPage'ComprasList' ); 
  220.             
  221.             TTransaction::close(); 
  222.         } 
  223.         catch (Exception $e
  224.         { 
  225.             new TMessage('error'$e->getMessage()); 
  226.         } 
  227.     } 
  228. }
  229. ?>




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


NR

  1. <?php
  2. $soma 0;
  3. foreach ($compras as $compra) {
  4.    ... 
  5.    // somar valor de cada item
  6.    $soma += $compra->coluna_valor;
  7. }
  8. // criar objeto da outra tabela para gravar
  9. $object = new OutroModel;
  10. $object->soma $soma;
  11. $object->store();
  12. ?>
CM

Boa noite Nataniel.
Amigo como sempre você é fera demais. Quando posto aqui, já fico na expectativa da sua resposta, nunca falha.
Obrigado por mais essa ajuda irmão.

PS: Sem querer abusar da sua boa vontade (mas já abusando). Será que poderia ajudar nesse tópico? Você já havia respondido uma parte, ficou faltando a segunda. Obrigado.
Segue:
https://www.adianti.com.br/forum/pt/view_6822?confirmar-gravar-abrir-pdf-e-retor