Support » Plugin: WooCommerce Shipping Additional Days » Cálculo errado caso não haja Produtos com “Classes de Entrega” no carrinho

  • Resolved diegora

    (@diegora)


    O plugin está mostrando os dias adicionais errados caso nenhum produto no carrinho tenha Classe de Entrega.
    Exemplo:
    * Tenho alguns produtos no carrinho, todos configurados como “Nenhuma Classe de Entrega” que é a config padrão.
    Se nenhuma Classe de entrega for Criada, o plugin funciona como deveria, ignora tudo e mostra os “Dias adicionais” configurados no plugin “Woocommerce Correios”
    Mas se for criada pelo menos uma Classe de Entrega, MESMO QUE NÃO EXISTA NENHUM PRODUTO COM ESTA CLASSE NO CARRINHO, o plugin procura a Classe de Entrega com mais dias adicionais e usa ela caso os produtos do carrinho não tenham classe de entrega.
    Caso algum produto no carrinho possua Classe de Entrega, aí o plugin volta a funcionar como deveria e usa os dias adicionais da classe de entrega do produto presente no carrinho.

Viewing 11 replies - 1 through 11 (of 11 total)
  • Plugin Author Mário Valney

    (@mariovalney)

    Olá, tudo bem?

    Dei uma conferida no código e parece tudo OK.

    Todavia irei fazer alguns testes.
    Se quiser/puder me ajudar:

    • Poderia conferir se não atribuiu um valor à Classe de Entrega padrão, se houver.
    • Poderia conferir também se o bug se repete com os plugins desativados (exceto Woo e esse, claro).

    Se for desenvolver ou possuir naturalidade com a edição de código em plugins, me avise por favor. Podemos adiantar a depuração.

    Obrigado por usar o plugin e comunicar o bug.

    Olá Mário, obrigado pela pronta resposta.
    O teste básico que eu fiz foi colocar um produto “Sem Classe de Entrega” no carrinho e calcular o frete. O cálculo sai normal, inclusive ele passa a usar os “Dias Adicionais” configurados no Woo Correios.
    Basta adicionar uma Classe de Entrega nas configs do Woocommerce que o plugin automaticamente utiliza os Dias Adicionais desta tal Classe de entrega se o(s) produto(s) no Carrinho estiverem “Sem Classe de Entrega”. Inclusive testei se era isso mesmo aumentando os Dias Adicionais desta Classe de Entrega e os dias foram aumentados no Carrinho tbm, confirmando de onde vinha o número.
    Se algum produto tiver Classe de Entrega ou Dias Adicionais configurados nele mesmo, aí o funcionamento é normal. A Solução temporária que eu fiz foi Adicionar uma “Classe de Entrega” extra, dar 1 Dia Adicional a ela e utiliza-la para todos os produtos que anteriormente estavam sem Classe.
    Desativei todos os plugin e o “bug” continuou
    Sim, tenho familiaridade com PHP, funções do WP e Woo.

    Não sei se ficou claro, mas basta 1 dos produtos do carrinho ter Classe de Entrega para o plugin funcionar normalmente e usar os Dias Adicionais daquele produto.
    Mas se NENHUM dos produtos do carrinho tiver Classe de entrega, ele utiliza o maior “Dias Adicionais” que estiver configurado nas Classes entrega.

    Plugin Author Mário Valney

    (@mariovalney)

    Sim, tenho familiaridade com PHP, funções do WP e Woo.

    Legal! No momento não estou com o computador para montar o ambiente e realizar os teste, então, se quiser, podemos adiantar por aqui 🙂

    Por favor, vá no arquivo modules/shipping/includes/class-woocommerce-correios.php e na linha 63 coloque print_r( $shipping_classes_ids ); e na linha 73 print_r( $shipping_class );.

    Fica mais ou menos assim:

    
    print_r( $shipping_classes_ids );
    
    $shipping_class = get_terms( array(
        'taxonomy'      => 'product_shipping_class',
        'hide_empty'    => true,
        'include'       => (array) $shipping_classes_ids,
        'number'        => 1,
        'order'         => 'DESC',
        'orderby'       => 'meta_value_num',
        'meta_key'      => WCSAD_SHIPPING_CLASS_ADDITIONAL_TIME,
    ) );
    
    print_r( $shipping_class );
    

    Depois copie o que foi “printado” num pastebin e responda aqui.

    Deve ser printado na tela ou então dê uma olhada na aba Network do console do navegador, para checar se não foi uma requisição Ajax.

    Plugin Author Mário Valney

    (@mariovalney)

    Não sei se ficou claro, mas basta 1 dos produtos do carrinho ter Classe de Entrega para o plugin funcionar normalmente e usar os Dias Adicionais daquele produto.
    Mas se NENHUM dos produtos do carrinho tiver Classe de entrega, ele utiliza o maior “Dias Adicionais” que estiver configurado nas Classes entrega.

    Sim. Ficou claro. Agradeço a descrição detalhada e os testes executados.

    Por isso pedi para “printar” antes e depois do get_terms. Quero verificar se ele está buscando alguma classes de entrega quando nenhum produto tem classe de entrega.

    Ah! Sobre o teste anterior, só precisa realizar para o caso do bug (NENHUM dos produtos do carrinho tiver Classe de entrega).

    Fiz isso e não printou nada de diferente no Carrinho, que ainda estava calculando o frete como antes. Já no Checkout, ficou girando o Ajax infinito sem nunca dar o Frete, segue o que eu acho que vc queria ver que tirei do Network no Console
    https://pastebin.com/P6m226J1

    Mario, alguma novidade?

    Também estou com este mesmo problema. Ao ter uma classe de entrega em alguns produtos e outros sem nenhuma, os itens sem nenhuma classe assumem o tempo da classe com maiores dias.

    Aproveitei e vi que o PasteBin anterior não existe, e adicionarei abaixo o que foi exibido no teste pedido:
    Array ( ) Array ( [0] => WP_Term Object ( [term_id] => 292 [name] => Personalizados [slug] => personalizados [term_group] => 0 [term_taxonomy_id] => 292 [taxonomy] => product_shipping_class [description] => acrescenta 30 dias a mais [parent] => 0 [count] => 8 [filter] => raw ) ) Array ( ) Array ( [0] => WP_Term Object ( [term_id] => 292 [name] => Personalizados [slug] => personalizados [term_group] => 0 [term_taxonomy_id] => 292 [taxonomy] => product_shipping_class [description] => acrescenta 30 dias a mais [parent] => 0 [count] => 8 [filter] => raw ) )

    Plugin Author Mário Valney

    (@mariovalney)

    Olá, Felipe e Diego.

    Como hoje é feriado em Sampa, consegui tirar um tempo para dar uma olhada aqui.
    Desculpe a demora, mas infelizmente o fim de ano está bastante corrido.

    Vamos lá..

    Com tudo atualizado, fiz os testes:

    Legenda dos Testes:
    Entrega / Classe de Entrega / Dias Adicionais no Plugin de Entrega -> Estimativa

    • PAC / Nenhuma / 0 / CE: 0 P: 0 -> 5 dias para entrega
    • PAC / Nenhuma / 6 / CE: 0 P: 0 -> 11 dias para entrega

    Aí criei a Classe de Entrega “Classe de Entrega Sem Produto” com 7 dias adicionais e testei novamente (o produto no carrinho está sem classes de entrega):

    • PAC / Nenhuma / 0 / CE: 0 P: 0 -> 5 dias para entrega
    • PAC / Nenhuma / 6 / CE: 0 P: 0 -> 11 dias para entrega

    Então não consegui reproduzir o problema.

    Aí resolvi fazer mais um teste: adicionar um produto à classe de entrega “Classe de Entrega Sem Produto”, mas que esse produto não esteja no carrinho. Nesse caso, ocorreu um erro de cálculo:

    • PAC / Nenhuma / 0 / CE: 0 P: 0 -> 12 dias para entrega
    • PAC / Nenhuma / 6 / CE: 0 P: 0 -> 12 dias para entrega

    Checando o código, achei o problema. Era onde a gente estava olhando mesmo: no get_terms, quando não há classes de entrega nos produtos do carrinho, ele tentava buscar todas as classes de entrega com produto, já que o valor para “include” estava vazio.

    Já corrigi e vou subir uma versão nova com a correção.

    Felipe,

    Ao ter uma classe de entrega em alguns produtos e outros sem nenhuma, os itens sem nenhuma classe assumem o tempo da classe com maiores dias.

    Esse é o comportamento esperado. Já que o tempo extra vai ser o maior possível. Por exemplo, se o produto A precisa de 3 dias para ficar pronto e o produto B precisa de 5 dias, o envio só vai acontecer depois de 5 dias, não é?

    Abraços,

    Mario, muito obrigado pela ajuda, resposta e pelo plugin.
    Eu que me expressei mal. O erro que ocorre é justamente o seu terceiro teste, dentro do carrinho, ter apenas produtos sem classe de entrega, e estar assumindo o tempo de uma classe que “não é verdadeira” para aquela seleção de produtos.

    Mas que ótimo que deu certo! Aguardando a atualização. 🙂

    Plugin Author Mário Valney

    (@mariovalney)

    Já está disponível 😀
    É só atualizar no seu site.

    Abraços e se puder, não esqueça de deixar sua avaliação.

Viewing 11 replies - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.