terça-feira, 24 de junho de 2014

[OpenCart] Erro no Módulo Correios (prazo diferenciado)

Pessoal, algumas áreas no Brasil estão com problemas de entrega pelos Correios. Isso prejudica o funcionamento do módulo dos correios do OpenCart. O Webservice dos Correios envia a mensagem de que a entrega será diferenciada, mas isso vem no campo de erro. Embora o frete seja calculado, o OpenCart ignora e mostra apenas o erro.

Erro no site: "Atenção: Não há opções de entrega disponíveis. Por favor, contate-nos para assistência!"
Erro ao investigar o webservice dos correios: "Área com entrega temporariamente sujeita a prazo diferenciado".

Esse erro ocorre apenas para alguns CEPs, nem sempre aparece,
E vamos lá aos códigos...

No "catalog/model/shipping/correios.php" altere
if($servico['Erro'] == 0 && $valor_frete_sem_adicionais > 0)
substitua por
if(($servico['Erro'] == 0 || $servico['Erro'] == 10 ) && $valor_frete_sem_adicionais > 0)
(cuidado para não comer a chave "{" do if )

Porém eu acho importante esse erro aparecer para o comprador pois ele deve saber que o produto vai ter problemas na entrega. Então testo se o erro é o 10 e incluo a mensagem no título do tipo da entrega.
Procure os seguintes códigos abaixo no mesmo arquivo e adicione as linhas em laranja:

// texto a ser exibido para Sedex a Cobrar
if($servico['Codigo'] == $this->correios['Sedex a Cobrar']){
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega'], $this->currency->format($cost));
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}
else{
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega']);
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}

Galera, gostaria de contar com a colaboração de vocês para melhorar isso ou até checar se a solução é realmente adequada. Fiz essa alteração a poucos minutos e já estou publicando pois vejo que ela é bem emergencial, mas é sempre bom construir soluções de maneira colaborativa.

Abraços !