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




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