Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

#65149
Primeiramente gostaria de falar que esta nova opção de adicionar valor para frete grátis no módulo dos Correios ficou muito boa, muito clientes meus já ficaram confusos com a opção de frete grátis junto com os Correios. No entanto surgiu uma pequena necessidade para mim:

Na minha loja a partir de R$199 eu ofereço Sedex grátis apenas para o estado de São Paulo e PAC para os demais estados, pra isso fiz uma pequena modificação no código do módulo (versão 4.3). Pra quem interessar:

Modificações no arquivo catalog\model\shipping\correios.php

Onde era:
Código: Selecionar todos
// frete grátis
if(trim($this->config->get('correios_total_' . $codigo)) != "" && $total_compra >= $this->config->get('correios_total_' . $codigo)) {
	// zera o valor
	$this->quote_data[$codigo]['cost'] = 0;
	// novo texto 
	$this->quote_data[$codigo]['text'] = $this->language->get('text_free');
}
Ficou:
Código: Selecionar todos
// frete grátis
if(trim($this->config->get('correios_total_' . $codigo)) != "" && $total_compra >= $this->config->get('correios_total_' . $codigo)) {
	if($codigo == $this->correios['SEDEX']){
		$cep_destino_eu_uso = preg_replace ("/[^0-9]/", '', $address['postcode']);
		if(($cep_destino_eu_uso>=01000000)&&($cep_destino_eu_uso<=19999999)){
			// zera o valor
			$this->quote_data[$codigo]['cost'] = 0;
			// novo texto 
			$this->quote_data[$codigo]['text'] = $this->language->get('text_free');
		}
	}
	else{
		// zera o valor
		$this->quote_data[$codigo]['cost'] = 0;
		// novo texto 
		$this->quote_data[$codigo]['text'] = $this->language->get('text_free');
	}
}
Se for Sedex, o código verifica se o cep está dentro da faixa de SP (de 01000-000 a 19999-999), se estiver troca para grátis, se estiver fora da faixa aplica o preço normal para o Sedex, habilitando grátis apenas para o PAC.
Se não for Sedex, segue normalmente (else).

Acredito que seja possível adaptar este exemplo para diversas situações.