public function afterSave() { $return = parent::afterSave(); // Atualizar ItemPromocao::model()->updateAll(array('ativo' => 0), 'promocao_id = ' . $this->id); foreach ($this->mergerItemPromocao() as $tipo => $item) { $criteria = new CDbCriteria(); $criteria->compare('produto_id', $item); $criteria->compare('tamanho_sabor_id', $item, false, 'OR'); $criteria->addCondition('promocao_id = ' . $this->id); $modelItemPromocaoExist = ItemPromocao::model()->find($criteria); if (!empty($modelItemPromocaoExist)) { $modelItemPromocaoExist->ativo = 1; $modelItemPromocaoExist->save(); } else { $modelItemPromocao = new ItemPromocao(); if (key($item) == 'produto_id') { $modelItemPromocao->produto_id = $item['produto_id']; } else { $modelItemPromocao->tamanho_sabor_id = $item['tamanho_sabor_id']; } $modelItemPromocao->promocao_id = $this->id; $modelItemPromocao->ativo = 1; $modelItemPromocao->save(); } } return $return; }
public function beforeSave() { $retorno = parent::beforeSave(); $modelPizzaria = new Pizzaria(); if (!$this->isNewRecord) { return $retorno; } // Se tiver promoção, direcionar os itens as suas propriedades. if (isset($this->_promocoes)) { foreach ($this->_promocoes as &$promocao) { $modelIP = ItemPromocao::model()->ativos()->findByPk($promocao['item_promocao']); if (!empty($modelIP->produto_id)) { $this->_produtos[] = array('produto_id' => $modelIP->produto_id, 'promocao' => 1, 'quantidade' => !empty($promocao['quantidade']) ? $promocao['quantidade'] : null, 'preco' => $modelIP->promocoes->valor); } else { $this->_pizzas[] = array('sabores' => array($modelIP->tamanhoSabores->sabor_id), 'tamanho_id' => $modelIP->tamanhoSabores->tamanho_id, 'preco' => $modelIP->promocoes->valor, 'promocao' => 1); } } } else { $this->_promocoes = null; } if (isset($this->_produtos)) { foreach ($this->_produtos as &$produto) { $modelProduto = Produto::model()->ativos()->findByPk($produto['produto_id']); // Se for um produto promocional é o valor da promocao $this->preco_total += !isset($produto['promocao']) ? $modelProduto->preco * $produto['quantidade'] : $produto['preco']; } } if (isset($this->_combinados)) { foreach ($this->_combinados as &$combinado) { // Se for um combinado promocional é o valor da promocao if (!empty($combinado['combinado_id'])) { $modelCombinado = Combinado::model()->ativos()->findByPk($combinado['combinado_id']); $combinado['preco'] = $modelCombinado->preco; } else { foreach ($combinado['itens_combinado'] as $produto) { $modelProduto = Produto::model()->ativos()->findByPk($produto['produto_id']); $combinado['preco'] += $modelProduto->preco * $produto['quantidade']; } } $this->preco_total += $combinado['preco']; } } if (isset($this->_pizzas) && $modelPizzaria->tipo_restaurante == TipoRestaurante::_TIPO_PIZZARIA_) { foreach ($this->_pizzas as &$pizza) { $modelTamanho = Tamanho::model()->ativos()->findByPk($pizza['tamanho_id']); if (count($pizza['sabores']) > $modelTamanho->max_qtd_sabor) { return false; } $valorTamanhoBorda = 0; // Valida se a pizza tem borda recheada (se não tiver permitido ignora). if (isset($pizza['tamanho_borda_id']) && !empty($pizza['tamanho_borda_id']) && $modelPizzaria->borda_pizza) { $modelTamanhoBorda = TamanhoBorda::model()->ativos()->findByAttributes(array('tamanho_id' => $modelTamanho->id, 'borda_id' => $pizza['tamanho_borda_id'])); $pizza['tamanho_borda_id'] = $modelTamanhoBorda->id; $valorTamanhoBorda = $modelTamanhoBorda->preco; } $valorTipoMassa = 0; // Valida se a pizza tem massa diferenciada (se não tiver permitido ignora). if (isset($pizza['tamanho_tipo_massa_id']) && !empty($pizza['tamanho_tipo_massa_id']) && $modelPizzaria->massa_pizza) { $modelTamanhoTipoMassa = TamanhoTipoMassa::model()->ativos()->findByAttributes(array('tamanho_id' => $modelTamanho->id, 'tipo_massa_id' => $pizza['tamanho_tipo_massa_id'])); $pizza['tamanho_tipo_massa_id'] = $modelTamanhoTipoMassa->id; $valorTipoMassa = $modelTamanhoTipoMassa->preco; } $valorAdicionais = 0; $valorSabor = 0; $i = 0; foreach ($pizza['sabores'] as &$sabor) { $modelTamanhoSabor = TamanhoSabor::model()->ativos()->findByAttributes(array('tamanho_id' => $modelTamanho->id, 'sabor_id' => $sabor)); $sabor = $modelTamanhoSabor->id; // Se for uma pizza promocional, considere apenas o valor da promoção e só é permitido um sabor por pizza. if (isset($pizza['promocao'])) { $valorSabor = $pizza['preco']; break; } if ($modelTamanhoSabor->preco > $valorSabor) { $valorSabor = $modelTamanhoSabor->preco; } if ($i > $modelTamanho->max_qtd_sabor) { break; } $i++; } if (isset($pizza['adicionais']) && $modelPizzaria->adicional_pizza) { foreach ($pizza['adicionais'] as &$adicional) { $modelTA = TamanhoAdicional::model()->naoExcluido()->findByAttributes(array('tamanho_id' => $modelTamanho->id, 'adicional_id' => $adicional)); $adicional = $modelTA->id; $valorAdicionais += $modelTA->preco; } } $pizza['preco_total'] = $valorSabor + $valorAdicionais + $valorTipoMassa + $valorTamanhoBorda; $this->preco_total += $pizza['preco_total']; } } if ($this->forma_pagamento_id != FormaPagamento::_TIPO_DINHEIRO_ || $this->valor_pago == 0) { $this->valor_pago = $this->preco_total; } else { if ($this->preco_total > floatval($this->valor_pago)) { return false; } } return parent::beforeSave(); }
public function actionUpdateStatus($id) { $model = $this->loadModel($id); $status = $model->ativa ? 0 : 1; $model->ativa = $status; if ($model->save()) { ItemPromocao::model()->updateAll(array('ativo' => $status), 'produto_id = ' . $id); } $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index')); }