Open ciromendoncajr opened 7 years ago
Ola boa tarde,
Encontrou alguma solução? Estou com o mesmo problema.
Prezados, Bom dia. Eu utilizo o módulo do Pedro Teixeira e também estava com o mesmo problema. A seguinte solução resolveu para mim:
1)Adicionei um novo atributo no módulo do Pedro Teixeira. Para isso, modifiquei o arquivo system.xml que fica no diretorio 'app/code/community/PedroTeixeira/Correios/etc'. Logo após a tag
<free_method_2 translate="label">
<label>2° Serviço Para Entrega Gratuita</label>
<frontend_type>select</frontend_type>
<frontend_class>free-method</frontend_class>
<source_model>PedroTeixeira_Correios_Model_Source_PostMethods</source_model>
<sort_order>31</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Se o primeiro serviço de entrega gratuita não estiver disponível,
o sistema tentará a segunda opção.
Lembre-se de habilitar o serviço.
</comment>
</free_method_2>
Isso permitirá que eu selecione na adm do magento qual o outro método de entrega dos correios que deve ser usado, caso o primeiro não esteja disponível. Na verdade, a lógica irá sempre usar como serviço de entrega gratuita, o de menor custo;
2)Fiz uma modificação no arquivo Abstract.php que fica em 'html/app/code/core/Mage/Shipping/Model/Carrier'. IMPORTANTE: não modificar o arquivo diretamente nesse diretório. Copiar o arquivo para o diretório 'html/app/code/local/Mage/Shipping/Model/Carrier' e ai sim fazer as seguintes modificações: 2.1) Localizar o método 'protected function _updateFreeMethodQuote($request)'. Está mais ou menos na linha 337. Dentro do método, substituir o código (começa mais ou menos na linha 349):
if (is_object($this->_result)) {
foreach ($this->_result->getAllRates() as $i=>$item) {
if ($item->getMethod() == $freeMethod) {
$freeRateId = $i;
break;
}
}
}
Por esse:
$freeMethodAlt = Mage::getStoreConfig('carriers/pedroteixeira_correios/free_method_2');
//Variáveis para fazer o teste de qual serviço é o mais barato e deve ser o de entrega gratuita
$valorFreteAtual = 10000;
$nomeMetodo = '';
if (is_object($this->_result)) {
//varre todos os métodos de entrega disponíveis
foreach ($this->_result->getAllRates() as $i=>$item) {
//pega o nome do método. se estiver preenchido, significa que é válido
$nomeMetodo = $item->getMethod();
if ($nomeMetodo != ''){
//verifica se o metodo de envio é mais barato do que o já setado atualmente. se sim, seta ele.
if ($valorFreteAtual > $item->getPrice()){
if (($item->getMethod() == $freeMethod) || ($item->getMethod() == $freeMethodAlt)){
$valorFreteAtual = $item->getPrice();
$freeRateId = $i;
}
}
}
}
}
Pronto! Depois disso é só rodar novamente o cálculo de frete e ver se resolveu.
Abraços!
Acho que pode fechar esta issue @pedro-teixeira
Pessoal, boa noite!
Estou com o mesmo problema. A solução apresentada pelo @arleifc resolveu o problema?
Boa tarde Galera,
Desde a atualização de política de fretes do correios estou tendo problemas pelo seguinte:
O Módulo tem a opção de escolher qual a forma de entrega será gratuita (No meu caso eu setava o PAC) porém agora com a nova política dos correios algumas regiões o sedex é mais em conta que o PAC e portanto extinguiu o serviço de PAC. Assim a minha política de frete free parou de funcionar, pois oferece frete grátis Brasil acima de determinado valor ( não posso colocar o sedex ) e se deixo o PAC as cidades que teriam vantagem ficam sem a opção de frete gratuito! Alguém sabe como solucionar isso?
abs