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

 
  1. <?php
  2. public function onSave($param)
  3. {
  4. try
  5. {
  6. // open a transaction with database
  7. TTransaction::open('construir');
  8. $data = $this->form->getData();
  9. $this->form->validate();
  10. $master = new ProdutosSaida;
  11. $master->fromArray( (array) $data);
  12. //Grava na tabela a unidade logada
  13. $master->system_unit_id = TSession::getValue('userunitid');
  14. $master->store();
  15. ProdutosSaidaItens::where('produtos_saida_id', '=', $master->id)->delete();
  16. $total_itens = 0;
  17. if( $param['ProdutosSaidaItens_list_produtos_id'] )
  18. {
  19. foreach( $param['ProdutosSaidaItens_list_produtos_id'] as $key => $item_id )
  20. {
  21. $detail = new ProdutosSaidaItens;
  22. $detail->produtos_id = $param['ProdutosSaidaItens_list_produtos_id'][$key];
  23. $detail->valor_uni = $param['ProdutosSaidaItens_list_valor_uni'][$key];
  24. $detail->qtd_itens = $param['ProdutosSaidaItens_list_qtd_itens'][$key];
  25. $detail->produtos_saida_id = $master->id;
  26. //Grava na tabela a unidade logada
  27. $detail->system_unit_id = TSession::getValue('userunitid');
  28. //Soma o SubTotal do item
  29. $detail->sub_total = $detail->qtd_itens * $detail->valor_uni;
  30. $detail->data_saida = $master->data_saida;
  31. $detail->store();
  32. //AQUI ATUALIZO O ESTOQUE DO PRODUTO
  33. $produto = Produtos::find($detail->produtos_id);
  34. $produto->qtd_esto_atual = $produto->qtd_esto_atual - $detail->qtd_itens;
  35. $produto->store();
  36. //Atualiza o Total da venda
  37. $master->total_saida += $detail->sub_total;
  38. $total_itens = $total_itens + '1';
  39. }
  40. //Grava no banco o Total da venda
  41. $master->qtde_itens = $total_itens;
  42. $master->store();
  43. }
  44. TTransaction::close(); // close the transaction
  45. TForm::sendData('form_ProdutosSaida', (object) ['id' => $master->id]);
  46. $voltar = new TAction(array('ProdutosSaidaLista','onReload'));
  47. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'), $voltar);
  48. }
  49. catch (Exception $e) // in case of exception
  50. {
  51. new TMessage('error', $e->getMessage());
  52. $this->form->setData( $this->form->getData() ); // keep form data
  53. TTransaction::rollback();
  54. }
  55. }
  56. ?>


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


PS

Pessoal, depois de observar o código, percebi essa linha que deleta os registros para inserir-los novamente:
 
  1. <?php
  2. ProdutosSaidaItens::where('produtos_saida_id', '=', $master->id)->delete();
  3. ?>


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.