/** * Creates a new Pedido model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { //Carrega demais modelos $modelPedido = new Pedido(); $itemPedido = new Itempedido(); $mensagem = ""; //Informa ao usuário mensagens de erro na view $totalPedidoPagamento = ""; $situacaopedido = ArrayHelper::map(Situacaopedido::find()->all(), 'idSituacaoPedido', 'titulo'); $produtosVenda = ArrayHelper::map(Produto::find()->where(['isInsumo' => 0])->orderBy('nome ASC')->all(), 'idProduto', 'nome'); $formasPagamento = ArrayHelper::map(Formapagamento::find()->all(), 'idTipoPagamento', 'titulo'); //Recebe todas as mesas registradas $mesa = ArrayHelper::map(Mesa::find()->all(), 'idMesa', 'numeroDaMesa'); //Atribuindo valor padrão para o total pedido $modelPedido->totalPedido = 0; //Guarda o valor somado total dos itens pedido $totalDoPedido = 0; if ($modelPedido->load(Yii::$app->request->post())) { //Carrega demais modelos //Inicia a transação: $transaction = \Yii::$app->db->beginTransaction(); try { //Tenta salvar um registro de Pedido: if ($modelPedido->save() && $modelPedido->cadastrarNovaHistoricoSituacaoPedido(intval($modelPedido->idPedido), intval($modelPedido->idSituacaoAtual), Yii::$app->getUser()->id)) { //alterei //Carrega os dados dos itens do Pedido: $itemPedidoPost = Yii::$app->request->post()['Itempedido']; $itensInseridos = true; for ($i = 0; $i < count($itemPedidoPost['idProduto']); $i++) { $itemPedido = new Itempedido(); $itemPedido->idProduto = $itemPedidoPost['idProduto'][$i]; $itemPedido->quantidade = $itemPedidoPost['quantidade'][$i]; $produtoVenda = Produto::find()->where(['idProduto' => $itemPedido->idProduto])->one(); $itemPedido->total = floatval(number_format($produtoVenda->valorVenda * $itemPedido->quantidade, 2)); $totalPedidoPagamento += $itemPedido->total; $itemPedido->idPedido = $modelPedido->idPedido; $totalDoPedido += $itemPedido->total; //Verifica a quantidade em estoque de insumos $verificaEstoque = $itemPedido->verificaQtdEstProdutoPedido($itemPedido->idProduto, $itemPedido->quantidade); if (count($verificaEstoque) <= 0) { if ($itemPedido->save()) { Insumo::atualizaQtdNoEstoqueInsert($itemPedido->idProduto, $itemPedido->quantidade); } } else { $insumosFaltando = ""; foreach ($verificaEstoque as $i => $insumo) { $insumosFaltando .= $insumo->nome; if ($i < count($verificaEstoque) - 1) { $insumosFaltando .= ", "; } } $mensagem = "<b>Pedido não foi alterado com sucesso! </b>Quantidade dos insumos(" . $insumosFaltando . ")\n ficarão abaixo da quantidade mínima de insumos em estoque."; $transaction->rollBack(); //desfaz alterações no BD $itensInseridos = false; break; //encerra o laço for } } //alterirei aqui if ($modelPedido->idSituacaoAtual == Pedido::CONCLUIDO) { $caixa = new Caixa(); $caixa = $caixa->getCaixaAberto(Yii::$app->user->getId()); if ($caixa != null) { $caixa = Caixa::findOne($caixa->idcaixa); $caixa->valoremcaixa += $totalPedidoPagamento; $caixa->valorapurado += $totalPedidoPagamento; $caixa->valorlucro += number_format($caixa->calculaValorLucroPedido($modelPedido->idPedido), 2); if (!$caixa->save()) { $mensagem = "Não foi possível salvar os dados de algum item do Pedido"; $transaction->rollBack(); //desfaz alterações no BD $itensInseridos = false; echo Json::encode(false); } } //print_r($itemPedido); //return $this->actionFinalizarPedido($formaPagamento, $idPedido); } //Testa se todos os itens foram inseridos (ou tudo ou nada): if ($itensInseridos && $modelPedido->save()) { $transaction->commit(); return $this->redirect(['view', 'id' => $modelPedido->idPedido]); } } else { $mensagem = "Não foi possível salvar os dados do Pedido"; } } catch (\Exception $exception) { $transaction->rollBack(); $mensagem = "Ocorreu uma falha inesperada ao tentar salvar o Pedido"; } } // } else { $modelPedido->idSituacaoAtual = Pedido::EM_ANDAMENTO; return $this->render('create', ['modelPedido' => $modelPedido, 'situacaopedido' => $situacaopedido, 'produtosVenda' => $produtosVenda, 'itemPedido' => $itemPedido, 'formasPagamento' => $formasPagamento, 'mensagem' => $mensagem, 'mesa' => $mesa]); // } }