示例#1
0
 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;
 }