PS
Diferenciar inserção de edição
Boa tarde pessoal, estou preenchendo uma tabela de saída de produtos e gostaria de atualizar via programação o estoque do produto, porém, só queria diminuir o estoque no ato da inserção da saída. Meu código abaixo faz essa operação tanto na inserção quanto na alteração.
Desde já agradeço.
Desde já agradeço.
- <?php
- public function onSave($param)
- {
- try
- {
- // open a transaction with database
- TTransaction::open('construir');
- $data = $this->form->getData();
- $this->form->validate();
- $master = new ProdutosSaida;
- $master->fromArray( (array) $data);
- //Grava na tabela a unidade logada
- $master->system_unit_id = TSession::getValue('userunitid');
- $master->store();
- ProdutosSaidaItens::where('produtos_saida_id', '=', $master->id)->delete();
- $total_itens = 0;
- if( $param['ProdutosSaidaItens_list_produtos_id'] )
- {
- foreach( $param['ProdutosSaidaItens_list_produtos_id'] as $key => $item_id )
- {
- $detail = new ProdutosSaidaItens;
- $detail->produtos_id = $param['ProdutosSaidaItens_list_produtos_id'][$key];
- $detail->valor_uni = $param['ProdutosSaidaItens_list_valor_uni'][$key];
- $detail->qtd_itens = $param['ProdutosSaidaItens_list_qtd_itens'][$key];
- $detail->produtos_saida_id = $master->id;
- //Grava na tabela a unidade logada
- $detail->system_unit_id = TSession::getValue('userunitid');
- //Soma o SubTotal do item
- $detail->sub_total = $detail->qtd_itens * $detail->valor_uni;
- $detail->data_saida = $master->data_saida;
- $detail->store();
- //AQUI ATUALIZO O ESTOQUE DO PRODUTO
- $produto = Produtos::find($detail->produtos_id);
- $produto->qtd_esto_atual = $produto->qtd_esto_atual - $detail->qtd_itens;
- $produto->store();
- //Atualiza o Total da venda
- $master->total_saida += $detail->sub_total;
- $total_itens = $total_itens + '1';
- }
- //Grava no banco o Total da venda
- $master->qtde_itens = $total_itens;
- $master->store();
- }
- TTransaction::close(); // close the transaction
- TForm::sendData('form_ProdutosSaida', (object) ['id' => $master->id]);
- $voltar = new TAction(array('ProdutosSaidaLista','onReload'));
- new TMessage('info', AdiantiCoreTranslator::translate('Record saved'), $voltar);
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- ?>
Pessoal, depois de observar o código, percebi essa linha que deleta os registros para inserir-los novamente:
Consegui resolver no Banco criando duas TRIGGER, uma para delete e outra para insert.
Mas como eu faria essa solução via código? Estou usando o Adianti Studio 7.0.