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
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
- <?php
- <?php
- class ComprasList extends TPage
- {
- protected $form; // registration form
- protected $datagrid; // listing
- protected $pageNavigation;
- protected $formgrid;
- protected $deleteButton;
- protected $column_finalizada;
- use Adianti\base\AdiantiStandardListTrait;
- public function __construct()
- {
- parent::__construct();
- $Titulo_pg = '<b><font color="#3C8DBC" size="4px">LISTA DE COMPRAS NÃO FECHADAS</font> </b>';
- echo "$Titulo_pg <br/> <br/>" ;
- //FILTRA COMPRAS PELO ID DA LOJA
- $criteria = new TCriteria;
- $criteria->add(new TFilter('loja_id','=', TSession::getValue('userunitid')));
- //$this->setCriteria($criteria);
- $this->setDatabase('ourorio'); // defines the database
- $this->setActiveRecord('ComprasAbertas'); // defines the active record
- $this->setDefaultOrder('data_compra', 'desc'); // defines the default order
- $this->setLimit(10);
- //$this->setCriteria($criteria); // define a standard filter
- $this->addFilterField('id_compra', 'like', 'id_compra'); // filterField, operator, formField
- $this->addFilterField('data_compra', 'like', 'data_compra'); // filterField, operator, formField
- $this->addFilterField('cliente_id', 'like', 'cliente_id'); // filterField, operator, formField
- $this->addFilterField('loja_id', 'like', 'loja_id'); // filterField, operator, formField
- // creates the form
- $this->form = new BootstrapFormBuilder('form_search_Compras');
- // create the form fields
- $id_compra = new TEntry('id_compra');
- $data_compra = new TDate('data_compra');
- $cliente_id = new TEntry('cliente_id');
- $loja_id = new TDBCombo('loja_id', 'ourorio', 'SystemUnit', 'id', 'name','name');
- // add the fields
- $row = $this->form->addFields ([ new TLabel('Número') ], [ $id_compra ] ,
- [ new TLabel('Data') ], [ $data_compra ] ,
- [ new TLabel('Cliente') ], [ $cliente_id ],
- [ new TLabel('Loja') ], [ $loja_id ]);
- $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'];
- // set sizes
- $id_compra->setSize('100%');
- $data_compra->setSize('100%');
- $cliente_id->setSize('100%');
- //mascaras
- $cliente_id->forceUpperCase();
- $data_compra ->setMask('dd/mm/yyyy');
- $data_compra ->setDatabaseMask('yyyy-mm-dd');
- $id_compra->setMask('9!'); // Máscara Numérica Livre
- // keep the form filled during navigation with session data
- $this->form->setData( TSession::getValue(__CLASS__.'_filter_data') );
- // add the search form actions
- $btn_gravar = $this->form->addAction('PESQUISAR', new TAction([$this, 'onSearch']), 'fa:search');
- $btn_gravar->class = 'btn btn-sm btn-primary';
- $btn_nova_compra = $this->form->addActionLink('NOVA COMPRA', new TAction(['ComprasFormMaster', 'onEdit']), 'fa:plus white');
- $btn_nova_compra->class = 'btn btn-sm btn-success';
- $btn_novo_cliente = $this->form->addActionLink('NOVO CLIENTE', new TAction(['ClientesForm', 'onEdit']), 'fa:plus white');
- $btn_novo_cliente->class = 'btn btn-sm btn-success';
- $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>
- $btn_fecha_movimento->class = 'btn btn-sm btn-danger';
- // creates a Datagrid
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->datatable = 'true';
- // creates the datagrid columns
- $column_id_compra = new TDataGridColumn('id_compra', 'Nº Compra', 'center');
- $column_data_compra = new TDataGridColumn('data_compra', 'Data Compra', 'center');
- $column_cliente_id = new TDataGridColumn('{Cliente->nome_cliente}', 'Cliente', 'left');
- $column_vendedor_txt = new TDataGridColumn('vendedor_txt', 'Operador', 'left');
- $column_loja_id = new TDataGridColumn('loja_txt', 'Loja', 'left');
- $column_finalizada = new TDataGridColumn('finalizada', 'Status', 'left');
- $column_valor_total = new TDataGridColumn('valor_total', 'Total', 'right');
- // add the columns to the DataGridF
- $this->datagrid->addColumn($column_id_compra);
- $this->datagrid->addColumn($column_data_compra);
- $this->datagrid->addColumn($column_cliente_id);
- $this->datagrid->addColumn($column_vendedor_txt);
- $this->datagrid->addColumn($column_loja_id);
- $this->datagrid->addColumn($column_valor_total);
- $this->datagrid->addColumn($column_finalizada);
- // define totals
- $column_valor_total->setTotalFunction( function($values) {
- return array_sum((array) $values);
- });
- //STATUS DO MOVIMENTO
- $column_finalizada->setTransformer(function($value, $object, $row) {
- $lbl = new TLabel('');
- if ($value == '1') {
- $lbl->setValue('ABERTA');
- //$lbl->class = 'label label-warning';
- $lbl->class='label label-primary';
- }
- if ($value == '2') {
- $lbl->setValue('FECHADA');
- $lbl->class = 'label label-success';
- }
- if ($value == '3') {
- $lbl->setValue('ENCERRADA');
- $lbl->class = 'label label-success';
- }
- return $lbl;
- });
- // definir o método do transformador sobre a Data
- $column_data_compra->setTransformer( function($value, $object, $row) {
- if ($value)
- {
- try
- {
- $date = new DateTime($value);
- return $date->format('d/m/Y');
- }
- catch (Exception $e)
- {
- return $value;
- }
- }
- return $value;
- });
- // definir o método do transformador sobre o Valor
- $column_valor_total->setTransformer( function($value, $object, $row) {
- if (is_numeric($value))
- {
- return 'R$ ' . number_format($value, 2, ',', '.');
- }
- return $value;
- });
- $action1 = new TDataGridAction(['ComprasFormMaster', 'onEdit'], ['id_compra'=>'{id_compra}']);
- $this->datagrid->addAction($action1, _t('Edit'), 'far:edit blue');
- $action2 = new TDataGridAction([$this, 'onDelete'], ['id_compra'=>'{id_compra}']);
- $this->datagrid->addAction($action2 ,_t('Delete'), 'far:trash-alt red');
- // create the datagrid model
- $this->datagrid->createModel();
- // creates the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction([$this, 'onReload']));
- $panel = new TPanelGroup('', 'white');
- $panel->add($this->datagrid);
- $panel->addFooter($this->pageNavigation);
- // header actions
- $dropdown = new TDropDown(_t('Export'), 'fa:list');
- $dropdown->setPullSide('right');
- $dropdown->setButtonClass('btn btn-info waves-effect dropdown-toggle');
- //$dropdown->addAction( _t('Save as CSV'), new TAction([$this, 'onExportCSV'], ['register_state' => 'false', 'static'=>'1']), 'fa:table blue' );
- $dropdown->addAction('Gerar PDF da Lista', new TAction([$this, 'onExportPDF'], ['register_state' => 'false', 'static'=>'1']), 'far:file-pdf red' );
- $panel->addHeaderWidget( $dropdown );
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 100%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add($panel);
- parent::add($container);
- }
- function onConfirmaFechamento($param)
- {
- $action = new TAction(array($this, 'onFechaMovimento'));
- $action->setParameters($param);
- new TQuestion('Confirma o Fechamento do Movimento ?', $action);
- }
- public function onFechaMovimento($param)
- {
- $loja_id = TSession::getValue('userunitid');//loja_id;
- //$data_atual->setValue(date("Y-m-d"));
- try
- {
- TTransaction::open('ourorio');
- // load customers
- $compras = Compras::where('loja_id', '=', $loja_id)->load();
- foreach ($compras as $compras)
- {
- // update record
- $compras->finalizada = '2';
- $compras->movimento_fechado = '2';
- $compras->movimento_fechado_em = date("Y-m-d");
- $compras->store();
- }
- new TMessage('info', 'Movimento Fechado com Sucesso!');
- AdiantiCoreApplication::loadPage( 'ComprasList' );
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- }
- ?>
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