public function getQuote($address) { $method_data = array(); // anulando a sessão do correios Yii::app()->user->setState('correios', null); // pegando os produtos da sessão $produtos = json_decode(Yii::app()->user->getState('carrinho')); // obtém só a parte numérica do CEP $this->cep_origem = preg_replace("/[^0-9]/", '', $address['cep_origem']); $this->cep_destino = preg_replace("/[^0-9]/", '', $address['cep_destino']); // ajusta os códigos dos serviços foreach ($this->correiosUtilizar as $codigo) { $this->nCdServico[] = $this->correios[$codigo]; } // 'empacotando' o carrinho em caixas $caixas = $this->organizarEmCaixas($produtos); // obtém o frete de cada caixa foreach ($caixas as $caixa) { $this->setQuoteData($caixa); } // ajustes finais if ($this->quote_data) { foreach ($this->quote_data as $codigo => $data) { if (is_numeric(trim(textoestatico('correios_adicional')))) { $valor_adicional = trim(textoestatico('correios_adicional')); } elseif (preg_match('/%/', trim(textoestatico('correios_adicional')))) { $valor_adicional = $this->quote_data[$codigo]['cost'] * number_format(preg_replace('/%/', '', trim(textoestatico('correios_adicional'))) / 100, 2); } else { $valor_adicional = 0; } // soma o valor adicional ao valor final do frete - não aplicado ao Sedex a Cobrar if ($codigo != $this->correios['Sedex a Cobrar']) { $new_cost = $this->quote_data[$codigo]['cost'] + $valor_adicional; // novo custo $this->quote_data[$codigo]['cost'] = $new_cost; // novo texto $this->quote_data[$codigo]['text'] = $new_cost; } else { // zera o valor do frete do Sedex a Cobrar para evitar de ser adiconado ao valor do carrinho $this->quote_data[$codigo]['cost'] = 0; } } $method_data = array('code' => 'correios', 'title' => 'Correios', 'quote' => $this->quote_data, 'sort_order' => 0, 'error' => false); Yii::app()->user->setState('correios', $method_data); if (textoestatico('frete_gratis') > 0.0 && Carrinho::model()->getTotal()->_total > textoestatico('frete_gratis')) { $this->quote_data['gratis']['code'] = 'correios.gratis'; $this->quote_data['gratis']['title'] = 'Nenhum valor será cobrado'; $this->quote_data['gratis']['cost'] = 0.0; $method_data = array('code' => 'correios', 'title' => 'Correios', 'quote' => $this->quote_data, 'sort_order' => 0, 'error' => false); Yii::app()->user->setState('correios', $method_data); } } return $method_data; }