gigapix / frete-correios

Cálculo de frete em PHP com transbordo de caixas.
MIT License
12 stars 13 forks source link

Situação não considerada no código do transbordo #3

Open filhocodes opened 8 years ago

filhocodes commented 8 years ago

Se a medida dos lados (raiz cúbica do volume total) for maior que 66, mas o peso não, não existe condição que trata esse caso ("Medida excede, Peso não").

https://github.com/gigapix/freteCorreios/blob/4e6c9d8e12ba540bb681b9fb037613433ca8b04c/Frete.php#L87

mtsalcova commented 7 years ago

Olá,

Talvez o meu projeto acabe caindo nessa situação, pois terá vendas de camisetas, portanto não pesará tanto e também a cubagem poderá ser maior que 66.

Aproveitando, gostaria de saber como chegou no número 66, para definir se a postagem precisará ser agrupada ou individual?

No momento, estou tentando entender e arrumar essa condição que está faltando. O que pude compreender é que caso o $pesoTotal <= 30 && $medida > 66, terei que ir separando em "caixas" e sempre verificando se a $medida < 66.

Alguém já encontrou alguma solução pra esse bug?

No aguardo, valeu!

filhocodes commented 7 years ago

cc/ @gabsprates

gabsprates commented 7 years ago

Primeiramente, agradeço ao @mtsalcova pelo interesse e a vontade de ajudar. Obrigado mesmo!! :+1:

No método calcular(), após achar o peso e volume total do que seria o pacote dos produtos, eu tirei uma medida ($_medida) padrão, porque ali eu começo a tratar o pacote como um cubo, uma vez que em termos de volume, não importa quais são as dimensões, mas qual o valor delas.


Relembrando a regra dos Correios para pacotes e caixas:

Especificações Mínimo Máximo
Comprimento (C) 16 cm 105 cm
Largura (L) 11 cm 105 cm
Altura (A) 2 cm 105 cm
Soma (C+L+A) 29 cm 200

A soma resultante do comprimento + largura + altura não deve superar 200 cm.

A soma resultante do comprimento + o dobro do diâmetro não pode ser menor que 28 cm.


O maior "valor mínimo" é o de comprimento, que são 16cm (lembre-se que aqui já estamos trabalhando com um cubo, as 3 medidas são iguais), por isso, $medida deve receber pelo menos o valor 16.

Como o máximo das somas das medidas é 200, 200 / 3 = 66.6666..., e é daqui que vem o 66.

O meu raciocínio aqui foi que quando essa medida passar de 66cm, deveria haver algo como um transbordo de caixas (ou pacotes).

Conseguiu entender?

Qualquer outra dúvida pode perguntar.

mtsalcova commented 7 years ago

@gabsprates imagina cara, obrigado vcs por terem compartilhado o código e obrigado pela ótima explicação, consegui entender agora.

Então caso a medida caia na condição $pesoTotal <= 30 && $medida > 66, terei que separar em caixas, igual os métodos transbordoDePeso() e transbordoDePesoEMedida() fazem né?

gabsprates commented 7 years ago

@mtsalcova exato!