예제 #1
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getSituacaopedido()
 {
     return $this->hasOne(Situacaopedido::className(), ['idSituacaoPedido' => 'idSituacaoAtual']);
 }
예제 #2
0
 /**
  * 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]);
 }