-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Serviços por Produto, Validação por Serviço, Grandes Formatos, Carta Registrada, Cache #47
Conversation
… de postagem por produto.
… de postagem por produto.
… frontend e backend" This reverts commit a9058b7.
…serviços de postagem por produto." This reverts commit 0b6384c.
This reverts commit 53c67ed.
… de postagem por produto.
Adição de Servicos por produto
Conflicts: app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php
… de postagem por produto.
Adicionada opção de produtos que se encaixam
dd14ffa
to
9358424
Compare
@jarjar123, você já está usando essas modificações em produção? Desculpe pela demora no review, estou realmente sem tempo. |
Bom dia, gostaria de informar que testei esta PR nas seguintes situações:
Todos os recursos descritos na PR foram testados. |
Perfeito @jarjar123, obrigado! |
$this->_loadMidSize(); | ||
$tmpMethods = $this->_postMethodsExplode; | ||
foreach ($tmpMethods as $key => $method) { | ||
$isOverSize = ($this->_midSize > $this->getConfigData("validate/serv_{$method}/max/size")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Não estou conseguindo entender o que você está fazendo aqui e na _loadMidSize()
, pode me explicar?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Criei a _loadMidSize
para calcular a dimensão média (ou lado médio, ou média dos lados).
Ao invés de percorrer todos os produtos novamente, e somar cada altura, largura, etc, usei o peso cúbico total _volumeWeight
, previamente calculado em _generateVolumeWeight
.
Com o peso cúbico em mãos, apenas removi o coeficiente dos Correios, e extraí a raiz cúbica. O resultado foi a média dos lados.
Antes de guardar o resultado, ajustei para que superasse os limites inferiores dos Correios...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Já a função _removeInvalidServices
remove os serviços inválidos para o carrinho, baseando-se no peso e soma dos lados.
- Ex.: 10cm + 20cm + 30cm = 60cm
- Ex.: 20cm * 3 = 60cm (usando o lado médio)
Ao término, apenas com o serviços válidos serão cotados.
Mas se todos os serviços forem removidos, é necessário dividir o pacote, para não perder a venda. Nesse caso chamamos o método_splitPack
.
O que ele faz é apenas dividir os pesos do carrinho, e reiniciar a validação em_removeInvalidServices
.
Então _loadMidSize
é novamente chamada, pois o tamanho da encomenda agora é menor, e a dimensão média precisa ser recalculada.
E devido a recursividade...
Criei a _loadMidSize
para calcular a dimensão média (ou lado médio, ou média dos lados).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mas tem uma chance de pegar algumas das dimensões padrões e usar para todas as dimensões:
$pow = round(pow((int) $volumeTotal, (1/3)));
$x1 = $this->getConfigData('altura_padrao');
$x2 = $this->getConfigData('largura_padrao');
$x3 = $this->getConfigData('comprimento_padrao');
$this->_midSize = max($pow, $x1, $x2, $x3);
Isso significa que em alguns casos pode ter um peso volumétrico completamente diferente, não?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Considerando as medidas padrão nulas (ou mínimas 2 x 16 x 11), não haverá qualquer variação no resultado.
Até 39cm de lado (ou 117cm de soma) não há qualquer mudança na cotação, pois os Correios consideram somente o peso físico.
Particularmente preferiria descartar altura_padrao
, larg...
e comp...
.
É tão simples setar esses atributos em massa, que creio serem desnecessários.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Só pra esclarecer melhor...
$client->setParameterGet('nVlComprimento', $this->_midSize);
$client->setParameterGet('nVlAltura', $this->_midSize);
$client->setParameterGet('nVlLargura', $this->_midSize);
Com midSize até 39cm, não faz diferença. Os Correios só vão considerar o peso.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
O único ajuste que midSize realmente precisaria é "ser maior que 16cm".
Enviar um valor menor q 16cm geraria erro.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sim, um máximo de 105 também seria bom, não?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Na verdade não.
Essa validação é aplicável somente aos serviços 41068, 81019, etc. E já foi aplicada pelo logista. Além disso não é válida para 10065, 10138, 41300.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Saquei, então só a 16cm.
E aew galera, tem previsão para a versão 4.4? |
Sem previsão @joridos |
@jarjar123, assim que der vou dar uma olhada nas modificações, obrigado! |
Serviços por Produto, Validação por Serviço, Grandes Formatos, Carta Registrada, Cache
@jarjar123, muito obrigado por todas as contribuições, fiz algumas modificações, então faz um merge no seu branch. Fiz um agradecimento especial aqui: https://pedroteixeira.io/modulo-de-frete-para-magento-com-tracking-v4-4-0/ |
Segue uma pequena ilustração, pro pessoal entender o comportamento da Cache. |
Perfeito @jarjar123, vou adicionar esse gráfico na #70. |
Closes #3, closes #21, closes #43: Validação de Peso e Dimensões.
Closes #17: Adicionados os serviços de Carta Comercial e Carta Comercial Registrada.
Também é possível adicionar qualquer outro serviço, bastando cadastrá-lo em config.xml, de acordo com o exemplo a seguir:
Através do modelo acima também é possível corrigir uma cotação equivocada. Apesar de incomum, já me deparei com uma resposta dos Correios, informando 1 dia onde o prazo era 11. Enfim este modelo permite que você substitua os valores de Preço e Prazo, de uma cotação válida.
Closes #32: Fretes de mil reais não são mais exibidos como 1 real.
Closes #39: Permite configurar os serviços de entrega separadamente, para cada produto.
Closes #42: Corrige o cálculo do peso cúbico, para pedidos feitos via backend.
Closes #45: Adicionado serviço de PAC Grandes Formatos, com limite de 150 cm de lado, e 300 cm de soma.
Closes #46: Considera produtos que possam ser encaixados, reajustando as dimensões da encomenda.
Closes #59: Corrige o erro
99Input string was not in a correct format
, para valores declarados superiores a mil reais.Closes #16: Adicionada opção de cache para as cotações de frete dos Correios.
Entretanto foi adicionado um algoritmo de aproximação do CEP, para sistemas que aceitam o uso de Tags, como Files e Redis.
Closes #15: Adicionada opção de dividir a entrega em mais de um pacote.
Segue os prints: