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']); }
/** * @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; }
/** * 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; }
/** * 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.'); } }