public function searchInsumos($params)
 {
     $query = Insumo::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $query->joinWith('produtoInsumo');
     $query->andFilterWhere(['isInsumo' => 1]);
     return $dataProvider;
 }
 /**
  * Displays a single Cardapio model.
  * @param integer $id
  * @return mixed
  */
 public function actionView($id)
 {
     //Recebe os itens do cardápio
     $itensCardapio = Itemcardapio::find()->where(['idCardapio' => $id])->orderBy('ordem ASC')->all();
     //Recebe os insumos do Produto Venda do item do Cardápio
     $insumosProdutos = [];
     foreach ($itensCardapio as $ic) {
         //Array para guardar os nomes dos insumos do Produto Venda
         $aux = [];
         $produtoVenda = Produto::findOne($ic->idProduto);
         if ($produtoVenda != null) {
             $insumos = Insumo::findAll(['idProdutoVenda' => $produtoVenda->idProduto]);
             foreach ($insumos as $i) {
                 array_push($aux, $i->produtoInsumo->nome);
             }
             //Adiciona os insumos produtos na lista de insumos do produto
             //do item do cardápio
             array_push($insumosProdutos, $aux);
         }
     }
     return $this->render('view', ['modelCardapio' => $this->findModel($id), 'itensCardapio' => $itensCardapio, 'insumosProdutos' => $insumosProdutos]);
 }
 /**
  * Deletes an existing Pedido model.
  * If deletion is successful, the browser will be redirected to the 'index' page.
  * @param integer $id
  * @return mixed
  */
 public function actionDelete($id)
 {
     //Guarda a mensagem
     $mensagem = "";
     $transaction = \Yii::$app->db->beginTransaction();
     try {
         $itenspedido = Itempedido::find()->where(['idPedido' => $id])->all();
         foreach ($itenspedido as $p) {
             Insumo::atualizaQtdNoEstoqueDelete($p->idProduto, $p->quantidade);
         }
         if ($this->findModel($id)->delete()) {
             $transaction->commit();
         }
     } catch (\Exception $exception) {
         $transaction->rollBack();
         $mensagem = "Ocorreu uma falha inesperada ao tentar salvar ";
     }
     $searchModel = new PedidoSearch();
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
     return $this->render('index', ['searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'mensagem' => $mensagem]);
 }
 /**
  * Updates an existing Produto model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     $modelProduto = $this->findModel($id);
     $modelInsumo = new Insumo();
     $mensagem = "";
     //Informa ao usuário mensagens de erro na view
     $categorias = ArrayHelper::map(Categoria::find()->all(), 'idCategoria', 'nome');
     if (!$modelProduto->isInsumo) {
         $insumos = ArrayHelper::map(Produto::find()->where(['isInsumo' => 1])->all(), 'idProduto', 'nome');
         $modelsInsumos = Insumo::find()->where(['idprodutoVenda' => $id])->all();
         $modelProdutoVenda = $this::findModel($id);
     }
     if (Yii::$app->request->post()) {
         //Inicia a transação:
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             //Tenta salvar um registro :
             $itensInseridos = true;
             $modelProduto->imageFile = UploadedFile::getInstance($modelProduto, 'imageFile');
             if (isset($modelProduto->imageFile)) {
                 //Converte a imagem em binário
                 $modelProduto->foto = file_get_contents($modelProduto->imageFile->tempName);
             }
             if (!$modelProduto->isInsumo) {
                 if (isset(Yii::$app->request->post()['produto-valorvenda-disp'])) {
                     $modelProduto->valorVenda = Yii::$app->request->post()['Produto']['valorVenda'];
                     $modelProduto->idCategoria = Yii::$app->request->post()['Produto']['idCategoria'];
                     $modelProduto->save();
                 }
                 $aux = Yii::$app->request->post()['Insumo'];
                 $numeroDeInsumo = count($aux['idprodutoInsumo']);
                 Yii::$app->db->createCommand("DELETE FROM insumo WHERE idprodutoVenda = :idprodutoVenda", [':idprodutoVenda' => $id])->execute();
                 for ($i = 0; $i < $numeroDeInsumo; $i++) {
                     if ($aux['idprodutoInsumo'][$i] > 0) {
                         Yii::$app->db->createCommand("INSERT INTO insumo\n                    (idprodutoVenda, idprodutoInsumo,\n                      quantidade,unidade ) \n                  VALUES (:idprodutoVenda, :idprodutoInsumo,\n                    :quantidade,:unidade)", [':idprodutoVenda' => $id, ':idprodutoInsumo' => $aux['idprodutoInsumo'][$i], ':quantidade' => $aux['quantidade'][$i], ':unidade' => $aux['unidade'][$i]])->execute();
                     }
                 }
                 $modelProduto->valorVenda = $modelProduto->calculoPrecoProduto($modelProduto->idProduto);
                 if (!$modelProduto->save()) {
                     $mensagem = "Não foi possível salvar os dados";
                     $transaction->rollBack();
                     //desfaz alterações no BD
                     $itensInseridos = false;
                 }
             } else {
                 $modelProduto->load(Yii::$app->request->post());
                 if (!$modelProduto->save()) {
                     $mensagem = "Não foi possível salvar os dados";
                     $transaction->rollBack();
                     //desfaz alterações no BD
                     $itensInseridos = false;
                 }
             }
             if ($itensInseridos) {
                 $transaction->commit();
                 return $this->redirect(['view', 'id' => $modelProduto->idProduto]);
             }
         } catch (\Exception $exception) {
             $transaction->rollBack();
             $mensagem = "Ocorreu uma falha inesperada ao tentar salvar ";
         }
     }
     if (!$modelProduto->isInsumo) {
         return $this->render('update', ['modelProduto' => $modelProduto, 'modelsInsumos' => $modelsInsumos, 'categorias' => $categorias, 'insumos' => $insumos, 'insumo' => $modelInsumo, 'modelProdutoVenda' => $modelProdutoVenda, 'mensagem' => $mensagem, 'idprodutoVenda' => $id]);
     }
     return $this->render('update', ['modelProduto' => $modelProduto, 'mensagem' => $mensagem, 'categorias' => $categorias]);
 }
 /**
  * Deletes an existing Itempedido model.
  * If deletion is successful, the browser will be redirected to the 'index' page.
  * @param integer $idPedido
  * @param integer $idProduto
  * @return mixed
  */
 public function actionDelete($idPedido, $idProduto)
 {
     $model = $this->findModel($idPedido, $idProduto);
     Insumo::atualizaQtdNoEstoqueDelete($idProduto, $model->quantidade);
     $this->findModel($idPedido, $idProduto)->delete();
     return $this->redirect(['index']);
 }
Example #6
0
 /**
  * @param $idprodutoVenda
  * @return float|int
  * Calcula os custos de um Produto Venda, de acordo com o preço de compra(Valor da compra mais
  * atual) de um insumo e também de acordo com os custos fixos(Total de produtos vendidos/ total consumo
  * em um mês)
  *
  */
 public function calculoPrecoProduto($idprodutoVenda)
 {
     //Busca e guarda todos os insumos do Produto Venda
     $insumos = Insumo::find()->where(['idprodutoVenda' => $idprodutoVenda])->all();
     $precosugerido = 0;
     //Model para a busca dos dados de Produto
     $searchModel = new ProdutoSearch();
     //Guarda a soma da quantidade de Produtos Venda vendidos no mês
     $sumQuantidadeVendaProdutoVenda = $searchModel->searchQuantidadeProdutosEmVendas($idprodutoVenda);
     //Busca e guarda todos os tipos de Custo Fixo
     $tiposCustoFixo = Tipocustofixo::find()->all();
     $consumosCustoFixo = [];
     //Model para a busca dos dados de Custo Fixo
     $searchModelCustoFixo = new CustofixoSearch();
     $arrayTipoCustoFixoZero = [];
     //Guarda o consumo mensal de cada tipo de Custo Fixo
     foreach ($tiposCustoFixo as $custoFixo) {
         $consumoCustoFixo = $searchModelCustoFixo->searchConsumoCustoFixoporTipoMensal($custoFixo->idtipocustofixo);
         array_push($consumosCustoFixo, $consumoCustoFixo);
         if ($consumoCustoFixo > 0) {
             $ct = $sumQuantidadeVendaProdutoVenda / $consumoCustoFixo;
             $precosugerido += $ct;
         } else {
             array_push($arrayTipoCustoFixoZero, $custoFixo->tipocustofixo);
         }
     }
     if ($arrayTipoCustoFixoZero != null) {
         Yii::$app->session->setFlash('custofixozerados', "<div class=\"alert alert-warning\">\n               Não foram calculados os custos fixos de " . implode(",", $arrayTipoCustoFixoZero) . " pois não\n                há registro(s) dele(s) no mês anterior\n            </div>");
     }
     //Soma o(s) valor(es) do(s) insumo(s) do produto venda ao custo do produto
     foreach ($insumos as $key => $insumo) {
         $produtoCompra = $searchModel->searchProdutosCompra($insumo->idprodutoInsumo);
         if ($insumo != null && $produtoCompra != null) {
             $precosugerido += $produtoCompra->valorCompra * $insumo->quantidade / $produtoCompra->quantidade;
         }
     }
     return $precosugerido;
 }
Example #7
0
 /**
  * Atualiza a quantidade de estoque do Produto
  * @param $newIdProdVnd
  * @param $oldIdProdVnd
  * @param int $qtdProdVnd
  * @param $oldQtdProdVnd
  */
 public function atualizaQtdNoEstoqueUpdate($newIdProdVnd, $oldIdProdVnd, $qtdProdVnd = 1, $oldQtdProdVnd)
 {
     $produto = new Produto();
     if ($newIdProdVnd != $oldIdProdVnd) {
         $insumos = Insumo::find()->where(['idProdutoVenda' => $oldIdProdVnd])->all();
         foreach ($insumos as $key => $ins) {
             $qtdInsumo = $ins->quantidade * $qtdProdVnd;
             $qtdEstoque = $produto::find()->where(['idProduto' => $ins->idprodutoInsumo])->one()->quantidadeEstoque;
             Yii::$app->db->createCommand("UPDATE produto SET quantidadeEstoque =\n            (quantidadeEstoque + :qtd_insumo)\n            where idProduto = :idprodutoInsumo", [':qtd_insumo' => $qtdInsumo, ':idprodutoInsumo' => $ins->idprodutoInsumo])->execute();
         }
         $insumos = Insumo::find()->where(['idProdutoVenda' => $newIdProdVnd])->all();
         foreach ($insumos as $key => $ins) {
             $qtdInsumo = $ins->quantidade * $qtdProdVnd;
             $qtdEstoque = $produto::find()->where(['idProduto' => $ins->idprodutoInsumo])->one()->quantidadeEstoque;
             if ($qtdEstoque - $qtdInsumo > 0) {
                 Yii::$app->db->createCommand("UPDATE produto SET quantidadeEstoque =\n            (quantidadeEstoque - :qtd_insumo)\n            where idProduto = :idprodutoInsumo", [':qtd_insumo' => $qtdInsumo, ':idprodutoInsumo' => $ins->idprodutoInsumo])->execute();
             }
         }
     } else {
         $insumos = Insumo::find()->where(['idProdutoVenda' => $newIdProdVnd])->all();
         if ($qtdProdVnd > $oldQtdProdVnd) {
             foreach ($insumos as $key => $ins) {
                 $aux = $qtdProdVnd - $oldQtdProdVnd;
                 $qtdInsumo = $ins->quantidade * $aux;
                 $qtdEstoque = $produto::find()->where(['idProduto' => $ins->idprodutoInsumo])->one()->quantidadeEstoque;
                 if ($qtdEstoque - $qtdInsumo > 0) {
                     Yii::$app->db->createCommand("UPDATE produto SET quantidadeEstoque =\n                (quantidadeEstoque - :qtd_insumo)\n                where idProduto = :idprodutoInsumo", [':qtd_insumo' => $qtdInsumo, ':idprodutoInsumo' => $ins->idprodutoInsumo])->execute();
                 }
             }
         } else {
             foreach ($insumos as $key => $ins) {
                 $aux = $oldQtdProdVnd - $qtdProdVnd;
                 $qtdInsumo = $ins->quantidade * $aux;
                 $qtdEstoque = $produto::find()->where(['idProduto' => $ins->idprodutoInsumo])->one()->quantidadeEstoque;
                 if ($qtdEstoque - $qtdInsumo > 0) {
                     Yii::$app->db->createCommand("UPDATE produto SET quantidadeEstoque =\n                (quantidadeEstoque + :qtd_insumo)\n                where idProduto = :idprodutoInsumo", [':qtd_insumo' => $qtdInsumo, ':idprodutoInsumo' => $ins->idprodutoInsumo])->execute();
                 }
             }
         }
     }
 }
 public function searchInsumosProdutosVenda($idProdutoVenda)
 {
     $query = Insumo::find()->joinWith('idprodutoInsumo')->where(['idprodutoVenda' => $idProdutoVenda])->all();
     return $query;
 }
Example #9
0
 /**
  * Verifica a quantidade no estoque antes de efetuar um
  * pedido
  * @params $idProduto int, $qtdProdutoPedido int
  * @return array
  */
 public function verificaQtdEstProdutoPedido($idProduto, $qtdProdutoPedido)
 {
     //Receba o produto
     $produto = Produto::findOne($idProduto);
     //Recebe o insumo que está com o estoque com quantidade mínima
     $insumoFaltando = [];
     if ($produto != null & $qtdProdutoPedido > 0) {
         $insumosProduto = Insumo::findAll(['idprodutoVenda' => $idProduto]);
         if (count($insumosProduto) > 0) {
             foreach ($insumosProduto as $inspro) {
                 $insumo = Produto::findOne($inspro->idprodutoInsumo);
                 if ($insumo != null) {
                     if ($insumo->quantidadeEstoque - $inspro->quantidade * $qtdProdutoPedido < $insumo->quantidadeMinima) {
                         array_push($insumoFaltando, $insumo);
                     }
                 }
             }
         }
     }
     return $insumoFaltando;
 }
 /**
  * Finds the Insumo model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return Insumo the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($idprodutoVenda, $idprodutoInsumo)
 {
     if (($model = Insumo::findOne(['idprodutoVenda' => $idprodutoVenda, 'idprodutoInsumo' => $idprodutoInsumo])) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }