public function searchInsumos($params) { $query = Insumo::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $query->joinWith('produtoInsumo'); $query->andFilterWhere(['isInsumo' => 1]); return $dataProvider; }
/** * 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]); }
/** * 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(); } } } } }
/** * @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; }
public function searchInsumosProdutosVenda($idProdutoVenda) { $query = Insumo::find()->joinWith('idprodutoInsumo')->where(['idprodutoVenda' => $idProdutoVenda])->all(); return $query; }