Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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();
 }
Ejemplo n.º 3
0
 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'));
 }