コード例 #1
0
 public function store(Request $request, $id)
 {
     $compra = Compra::find($id);
     $saldo = [];
     foreach ($compra->compra_itens as $key => $it) {
         if ($it->quantidade > $request->item[$key]['quantidade']) {
             $saldo[$key]['produto_id'] = $it->produto_id;
             $saldo[$key]['preco_compra'] = $it->preco_compra;
             $saldo[$key]['quantidade'] = $it->quantidade - $request->item[$key]['quantidade'];
         }
     }
     $new_compra = new Compra();
     if (count($saldo) > 0) {
         $new_compra->fornecedor_id = $compra->fornecedor_id;
         $new_compra->user_id = Auth::user()->id;
         $new_compra->data_compra = date('d/m/Y');
         $new_compra->save();
         foreach ($saldo as $s) {
             $it = new CompraItem();
             $it->compra_id = $new_compra->id;
             $it->produto_id = $s['produto_id'];
             $it->quantidade = $s['quantidade'];
             $it->save();
         }
     }
     DB::beginTransaction();
     try {
         foreach ($request->item as $item) {
             $p = Produto::find($item['produto_id']);
             $p->estoque += $item['quantidade'];
             $p->save();
         }
         $compra->status = 2;
         $compra->save();
         DB::commit();
     } catch (\Exception $e) {
         DB::rollBack();
         throw $e;
     }
     if ($this->reenviaEmail($new_compra)) {
         flash()->success('Confirmação de compra efetuada com sucesso e e-mail com itens que faltaram reenviado para o fornecedor');
     } else {
         flash()->success('Confirmação de compra efetuada com sucesso, mas email não foi enviado, envie o mesmo manualmente.');
     }
     return redirect()->route('compras.index');
 }
コード例 #2
0
 /**
  * Creates a new Compra model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $modelCompra = new Compra();
     $mensagem = "";
     //Informa ao usuário mensagens de erro na view
     $produtosValorAlterado = [];
     $conta = new Conta();
     $compraProduto = new Compraproduto();
     $produtos = ArrayHelper::map(Produto::find()->where(['isInsumo' => 1])->orderBy('nome ASC')->all(), 'idProduto', 'nome');
     //Recebe o valor total da compra
     $valorTotalDaCompra = 0;
     $categorias = ArrayHelper::map(Categoria::find()->all(), 'idCategoria', 'nome');
     $novoProduto = new Produto();
     $arrayFinal = [];
     $arrayIds = [];
     //Setando valor padrão para a compra
     $modelCompra->valor = 0;
     //Setando tipo de conta padrão para a compra
     $modelCompra->tipoConta = 'contasapagar';
     //Setando situação de pagamento padrão para a compra
     $modelCompra->situacaoPagamento = 1;
     //Setando o fuso horário
     date_default_timezone_set('America/Recife');
     if (Yii::$app->request->post()) {
         $conta->tipoConta = 'contasapagar';
         $conta->descricao = 'Compra de ' . date('d/m/Y', strtotime(Yii::$app->request->post()['Compra']['dataCompra']));
         $conta->descricao = 'Compra de ' . date('d/m/Y', strtotime(Yii::$app->request->post()['Compra']['dataCompra']));
         $compraprodutos = Yii::$app->request->post()['Compraproduto'];
         $valorescompraprodutos = Yii::$app->request->post()['compraproduto-valorcompra-disp'];
         //Inicia a transação:
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             //Tenta salvar um registro :
             if ($conta->save(false)) {
                 $itensInseridos = true;
                 $modelContasAPagar = new Contasapagar();
                 $modelContasAPagar->idconta = $conta->idconta;
                 $arrayIdsProdutoVenda = [];
                 $indice = 0;
                 $modelCompra->idconta = $conta->idconta;
                 $modelCompra->dataCompra = Yii::$app->request->post()['Compra']['dataCompra'];
                 if ($modelContasAPagar->save(false) && $modelCompra->save()) {
                     $compraprodutos = Yii::$app->request->post()['Compraproduto'];
                     $valorescompraprodutos = Yii::$app->request->post()['compraproduto-valorcompra-disp'];
                     for ($i = 0; $i < count($compraprodutos['idProduto']); $i++) {
                         $cp = new Compraproduto();
                         $cp->idCompra = $modelCompra->idconta;
                         $cp->idProduto = $compraprodutos['idProduto'][$i];
                         $cp->quantidade = $compraprodutos['quantidade'][$i];
                         $cp->valorCompra = $valorescompraprodutos[$i];
                         if ($cp->comparaPrecoProduto($cp)) {
                             $lp = $novoProduto->getListaInsumos($cp->idProduto);
                             foreach ($lp as $key) {
                                 $produto = Yii::$app->db->createCommand('SELECT idProduto, nome FROM produto WHERE idProduto = :id ', ['id' => $key['idprodutoVenda']])->queryOne();
                                 array_push($produtosValorAlterado, $produto);
                             }
                         }
                         for ($j = 0; $j < count($produtosValorAlterado); $j++) {
                             array_push($arrayIds, $produtosValorAlterado[$j]['idProduto']);
                         }
                         if (!$cp->save(false)) {
                             $mensagem = "Não foi possível salvar os dados";
                             $transaction->rollBack();
                             //desfaz alterações no BD
                             $itensInseridos = false;
                             break;
                             //encerra o laço for
                         } else {
                             $valorTotalDaCompra += floatval($cp->valorCompra);
                         }
                     }
                     $arrayIds = array_unique($arrayIds);
                     foreach ($arrayIds as $id) {
                         $produto = Yii::$app->db->createCommand('SELECT idProduto, nome FROM produto WHERE idProduto = :id ', ['id' => $id])->queryOne();
                         array_push($arrayFinal, $produto);
                     }
                     $modelCompra->valor = $valorTotalDaCompra;
                     if (!$modelCompra->save(false)) {
                         $mensagem = "Não foi possível salvar os dados ";
                         $transaction->rollBack();
                         //desfaz alterações no BD
                         $itensInseridos = false;
                     } else {
                         $conta->valor = $modelCompra->valor;
                         if (!$conta->save(false)) {
                             $mensagem = "Não foi possível salvar os dados ";
                             $transaction->rollBack();
                             //desfaz alterações no BD
                             $itensInseridos = false;
                         }
                     }
                     if ($itensInseridos) {
                         $transaction->commit();
                         $compraProdutos = Compraproduto::find()->where(['idCompra' => $modelCompra->idconta])->all();
                         return $this->render('view', ['modelCompra' => $this->findModel($modelCompra->idconta), 'compraProdutos' => $compraProdutos, 'produtosValorAlterado' => $arrayFinal]);
                     }
                 } else {
                     $transaction->rollBack();
                     $mensagem = "Ocorreu uma falha inesperada ao tentar salvar ";
                 }
             } else {
                 $transaction->rollBack();
                 $mensagem = "Ocorreu uma falha inesperada ao tentar salvar ";
             }
         } catch (\Exception $exception) {
             $transaction->rollBack();
             $mensagem = "Ocorreu uma falha inesperada ao tentar salvar ";
         }
     }
     $modelCompra->dataCompra = date('Y-m-d');
     return $this->render('create', ['modelCompra' => $modelCompra, 'compraProduto' => $compraProduto, 'produtos' => $produtos, 'mensagem' => $mensagem, 'categorias' => $categorias, 'novoProduto' => $novoProduto]);
 }