pedro-teixeira / correios

Módulo de frete para Magento com tracking
https://pedroteixeira.io
MIT License
110 stars 72 forks source link

Política de Frete Grátis #302

Open ciromendoncajr opened 7 years ago

ciromendoncajr commented 7 years ago

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

rafaeldimas commented 7 years ago

Ola boa tarde,

Encontrou alguma solução? Estou com o mesmo problema.

arleifc commented 7 years ago

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 , adicionei o seguinte:

                      <free_method_2 translate="label">
                        <label>2&#176; 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!

williangringo commented 6 years ago

Acho que pode fechar esta issue @pedro-teixeira

maurofilhobh commented 6 years ago

Pessoal, boa noite!

Estou com o mesmo problema. A solução apresentada pelo @arleifc resolveu o problema?