/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Itempedido::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['idPedido' => $this->idPedido, 'idProduto' => $this->idProduto, 'quantidade' => $this->quantidade, 'total' => $this->total]); return $dataProvider; }
/** * Calcula o lucro do Pedido * @param $idPedido * @return float */ public function calculaValorLucroPedido($idPedido) { $itensPedido = Itempedido::find()->where(['idPedido' => $idPedido])->all(); $lucroTotal = 0; if (count($itensPedido) > 0) { foreach ($itensPedido as $ip) { $produto = Produto::findOne($ip->idProduto); if ($produto != null) { $quantidade = $ip->quantidade; $valorProduto = $produto->valorVenda; $precoCustoProduto = $produto->calculoPrecoProduto($produto->idProduto); $diferenca = $valorProduto * $quantidade - $precoCustoProduto * $quantidade; $lucroTotal += $diferenca; } } } return number_format($lucroTotal, 2); }
/** * Retorna os itens do pedido para o index de Pedido * @return array|null */ public function getItensPedido() { $itensPedido = Itempedido::findAll($this->idPedido); $aux = []; if (count($itensPedido) > 0) { //Guarda os nomes e quantidades dos itens pedido $aux = []; foreach ($itensPedido as $ip) { $produto = Produto::findOne($ip->idProduto); if ($produto != null) { array_push($aux, [$produto->nome, $ip->quantidade]); } } return $aux; } else { return null; } }
/** * 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]); }
/** * Finds the Itempedido model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $idPedido * @param integer $idProduto * @return Itempedido the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($idPedido, $idProduto) { if (($model = Itempedido::findOne(['idPedido' => $idPedido, 'idProduto' => $idProduto])) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
/** * Gera um gráfico com as vendas de um Produto Venda * @param $idproduto * @return string * @throws NotFoundHttpException */ public function actionAvaliacaoproduto($idproduto) { $modelProduto = $this->findModel($idproduto); if (Yii::$app->request->post()) { $groupbyavaliacao = Yii::$app->request->post()['Produto']['groupbyavaliacao']; $datainicioavaliacao = Yii::$app->request->post()['datainicioavaliacao']; $datafimavaliacao = Yii::$app->request->post()['datafimavaliacao']; switch ($groupbyavaliacao) { case 'DAY': $formatdate = 'd'; break; case 'MONTH': $formatdate = 'm'; break; case 'YEAR': $formatdate = 'Y'; break; default: $formatdate = 'd'; break; } $vendas = Itempedido::find(); $vendas->select('*, sum(quantidade) as total, ' . $groupbyavaliacao . '(dataHora) as periodo')->joinWith('produto')->joinWith('pedido.pagamento.contasareceber.conta')->andFilterWhere(['produto.idProduto' => $idproduto])->andFilterWhere(['>=', 'dataHora', $datainicioavaliacao])->andFilterWhere(['<=', 'dataHora', $datafimavaliacao])->groupBy('periodo')->orderBy('dataHora ASC'); $qtdvendas = array(); $datasvendas = array(); foreach ($vendas->all() as $key => $v) { array_push($qtdvendas, intval($v->total)); if ($formatdate == 'm') { array_push($datasvendas, Yii::t('app', date('F', strtotime($v->pedido->pagamento->contasareceber->dataHora)))); } elseif ($formatdate == 'Y') { array_push($datasvendas, date('Y', strtotime($v->pedido->pagamento->contasareceber->dataHora))); } else { array_push($datasvendas, date('d/m/Y', strtotime($v->pedido->pagamento->contasareceber->dataHora))); } } return $this->render('avaliacaoproduto', ['qtdvendas' => $qtdvendas, 'datasvendas' => $datasvendas, 'datainicio' => $datainicioavaliacao, 'datafim' => $datafimavaliacao, 'datainicioavaliacao' => date('d/m/Y', strtotime($datainicioavaliacao)), 'datafimavaliacao' => date('d/m/Y', strtotime($datafimavaliacao)), 'modelProduto' => $modelProduto]); } else { return $this->render('avaliacaoproduto', ['modelProduto' => $modelProduto]); } }
/** * @return \yii\db\ActiveQuery */ public function getItempedidos() { return $this->hasMany(Itempedido::className(), ['idProduto' => 'idProduto']); }