/** * @return \yii\db\ActiveQuery */ public function getSituacaopedido() { return $this->hasOne(Situacaopedido::className(), ['idSituacaoPedido' => 'idSituacaoAtual']); }
/** * Updates an existing Pedido model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { $modelPedido = $this->findModel($id); $mensagem = ""; //Informa ao usuário mensagens de erro na view $situacaopedido = ArrayHelper::map(Situacaopedido::find()->all(), 'idSituacaoPedido', 'titulo'); $produtosVenda = ArrayHelper::map(Produto::find()->where(['isInsumo' => 0])->all(), 'idProduto', 'nome'); $itensPedido = Itempedido::find()->where(['idPedido' => $id])->all(); $formasPagamento = ArrayHelper::map(Formapagamento::find()->all(), 'idTipoPagamento', 'titulo'); $antigaSituacao = $modelPedido->idSituacaoAtual; $historicoSituacao = Historicosituacao::findOne([$modelPedido->idPedido, $modelPedido->idSituacaoAtual, Yii::$app->getUser()->id]); $historicoSituacao = Historicosituacao::find()->where(['idPedido' => $modelPedido->idPedido, 'user_id' => Yii::$app->getUser()->id])->orderBy('dataHora')->one(); //Recebe todas as mesas registradas $mesa = ArrayHelper::map(Mesa::find()->all(), 'idMesa', 'numeroDaMesa'); if ($modelPedido->load(Yii::$app->request->post()) && count($itensPedido) > 0) { //Carrega demais modelos //Inicia a transação: $transaction = \Yii::$app->db->beginTransaction(); try { //Tenta salvar um registro de Pedido: if ($modelPedido->save()) { //Carrega os dados dos itens do Pedido: $itemPedidoPost = Yii::$app->request->post()['Itempedido']; $itensInseridos = true; for ($i = 0; $i < count($itensPedido); $i++) { $itemPedido = Itempedido::findOne(['idPedido' => $id, 'idProduto' => $itensPedido[$i]->idProduto]); if ($itemPedido != null || $modelPedido->idSituacaoAtual == Pedido::CANCELADO) { $itemPedido->removerItemPedido(); } } //AQUI 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)); $itemPedido->idPedido = $modelPedido->idPedido; //Tenta salvar os itens do Pedido: if ($modelPedido->idSituacaoAtual != Pedido::CANCELADO) { //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 { $mensagem = "Não foi possível salvar os dados de algum item do Pedido"; $transaction->rollBack(); //desfaz alterações no BD $itensInseridos = false; break; //encerra o laço for } } 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 } } } if ($antigaSituacao != $modelPedido->idSituacaoAtual || $historicoSituacao->user_id != Yii::$app->getUser()->id) { $modelPedido->cadastrarNovaHistoricoSituacaoPedido($modelPedido->idPedido, $modelPedido->idSituacaoAtual, Yii::$app->getUser()->id); } if ($modelPedido->idSituacaoAtual == Pedido::CONCLUIDO) { $caixa = new Caixa(); $caixa = $caixa->getCaixaAberto(); if ($caixa != null) { $caixa = Caixa::findOne($caixa->idcaixa); $caixa->valoremcaixa += floatval($modelPedido->totalPedido); $caixa->valorapurado += floatval($modelPedido->totalPedido); $caixa->valorlucro += number_format($caixa->calculaValorLucroPedido($modelPedido->idPedido), 2); if (!$caixa->save()) { $mensagem = "Não foi possível salvar os dados do Pedido"; $transaction->rollBack(); //desfaz alterações no BD $itensInseridos = false; } } else { $mensagem = "Não foi possível concluir o Pedido, pois Caixa não está aberto"; $transaction->rollBack(); //desfaz alterações no BD $itensInseridos = false; } } //Testa se todos os itens foram inseridos (ou tudo ou nada): if ($itensInseridos) { $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"; } } return $this->render('update', ['modelPedido' => $modelPedido, 'situacaopedido' => $situacaopedido, 'produtosVenda' => $produtosVenda, 'itemPedido' => $itensPedido, 'formasPagamento' => $formasPagamento, 'mensagem' => $mensagem, 'mesa' => $mesa]); }