Fórum OpenCart Brasil

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

#74305
Prezados amigos,

Temos alguns produtos que excedem o peso e as dimensões dos Correios, onde deveria ser mostrado apenas o frete via transportadora, não mostrando os valores encontrados via PAC e SEDEX.

Ocorre que o frete está aparecendo normalmente (PAC e SEDEX com valores ok) para esses produtos.
Pelos testes, se colocar peso acima de 30kg ele funciona corretamente, mas usando dimensões acima do permitido, continua mostrando.

Um detalhe interessante é que na versão 4.5.2 o log acusava o erro que excedia as dimensões e o frete era mostrado mesmo assim. Agora na versão 4.5.3 o log fica limpo.

Como exemplo para um produto:
Peso: 21kg
Dimensões: 170cm x 100cm x 20cm

Alguma ideia?
#74420
Se o seu opencart for 2.3.x.x acesse o catalog/model/extension/shipping/correios.php e faça a mudança abaixo;

Substitua:
Código: Selecionar todos
	public function getQuote($address) {
Por:
Código: Selecionar todos
	public function getQuote($address) {

		if($this->cart->getWeight() > 30){
			return false;
		}
#74682
OK; Faz um teste com o script que desenvolvi, creio que irá solucionar seu problema, ele soma as dimensões do produto e checa por tipo de frete, coloquei 30kg para pac e 20kg para sedex, dimensões e peso você pode personalizar do seu jeito;

Abra o arquivo catalog/model/extension/shipping/correios.php

Adicione o código abaixo após a linha $correios_servicos = $this->config->get('correios_servicos');
Código: Selecionar todos
		$prod_altura       = "";
		$prod_comprimento  = "";
		$prod_largura      = "";
		
		foreach($this->cart->getProducts() as $value){
			$prod_altura      += (float)$value['height'];
			$prod_comprimento += (float)$value['length'];
			$prod_largura     += (float)$value['width'];
		}	
		
		foreach($correios_servicos as $key => $value){
			if((preg_match('/pac/i', $value['nome']) and $this->cart->getWeight() > 30) or (preg_match('/pac/i', $value['nome']) and $prod_altura > 105 or $prod_comprimento > 105 or $prod_largura > 105 or ($prod_altura+$prod_comprimento+$prod_largura) > 200)){
				unset($correios_servicos[$key]);
			}
			
			if((preg_match('/sedex/i', $value['nome']) and $this->cart->getWeight() > 20) or (preg_match('/sedex/i', $value['nome']) and $prod_altura > 105 or $prod_comprimento > 105 or $prod_largura > 105 or ($prod_altura+$prod_comprimento+$prod_largura) > 200)){
				unset($correios_servicos[$key]);
			}
		}

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]