Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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.             
  9.             $data $this->form->getData();
  10.             $this->form->validate();
  11.             
  12.             $master = new ProdutosSaida;
  13.             $master->fromArray( (array) $data);
  14.             
  15.             //Grava na tabela a unidade logada
  16.             $master->system_unit_id TSession::getValue('userunitid');
  17.                         
  18.             $master->store();
  19.             
  20.             ProdutosSaidaItens::where('produtos_saida_id''='$master->id)->delete();
  21.             
  22.             $total_itens 0;
  23.             if( $param['ProdutosSaidaItens_list_produtos_id'] )
  24.             {
  25.                 foreach( $param['ProdutosSaidaItens_list_produtos_id'] as $key => $item_id )
  26.                 {
  27.                     $detail = new ProdutosSaidaItens;
  28.                     $detail->produtos_id  $param['ProdutosSaidaItens_list_produtos_id'][$key];
  29.                     $detail->valor_uni  $param['ProdutosSaidaItens_list_valor_uni'][$key];
  30.                     $detail->qtd_itens  $param['ProdutosSaidaItens_list_qtd_itens'][$key];
  31.                     $detail->produtos_saida_id $master->id;
  32.                     //Grava na tabela a unidade logada
  33.                     $detail->system_unit_id TSession::getValue('userunitid');
  34.                     //Soma o SubTotal do item
  35.                     $detail->sub_total $detail->qtd_itens $detail->valor_uni;
  36.                     $detail->data_saida $master->data_saida;
  37.                             
  38.                     $detail->store();
  39.                     //AQUI ATUALIZO O ESTOQUE DO PRODUTO
  40.                     $produto Produtos::find($detail->produtos_id);
  41.                     $produto->qtd_esto_atual $produto->qtd_esto_atual $detail->qtd_itens;
  42.                     $produto->store(); 
  43.                     
  44.                     //Atualiza o Total da venda
  45.                     $master->total_saida += $detail->sub_total;
  46.                     $total_itens $total_itens '1';
  47.                     
  48.                 }
  49.                 //Grava no banco o Total da venda
  50.                 $master->qtde_itens $total_itens;
  51.                 $master->store();
  52.             }
  53.             TTransaction::close(); // close the transaction
  54.             
  55.             TForm::sendData('form_ProdutosSaida', (object) ['id' => $master->id]);
  56.             
  57.             $voltar = new TAction(array('ProdutosSaidaLista','onReload'));
  58.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'), $voltar);
  59.         }
  60.         catch (Exception $e// in case of exception
  61.         {
  62.             new TMessage('error'$e->getMessage());
  63.             $this->form->setData$this->form->getData() ); // keep form data
  64.             TTransaction::rollback();
  65.         }
  66.     }
  67. ?>


Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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.