Open mtsalcova opened 7 years ago
Opa, massa @mtsalcova!
Farei farei testes e respondo o mais rápido possível! :smiley:
Olá @mtsalcova, primeiramente, desculpe pela demora. Foi um fim de ano corrido.
Vamos lá.
Devemos considerar que não sabemos exatamente a forma que os Correios "montam" suas embalagens, mas baseando no modelo que temos seguido aqui, fiz o seguinte teste com os seguintes produtos:
# Produto 1
[qtd] => 3
[peso] => 1.5
[altura] => 39
[largura] => 63
[comprimento] => 25
# Produto 2
[qtd] => 5
[peso] => 2
[altura] => 20
[largura] => 33
[comprimento] => 44
# Produto 3
[qtd] => 2
[peso] => 0.9
[altura] => 38
[largura] => 26
[comprimento] => 46
O volume total é:
184275 #1
145200 #2
+ 90896 #3
-----------
420371
E a medida para esse volume é 420371 ^ (1/3) = 74.9108
. Essa situação faz o programa entrar no seu método (transbordoDeMedida
), mas encontrei pelo menos um problema, que quebra a soma total do frete.
Você incrementa o $i
, índice do array $caixas
, apenas se tiver alguma sobra, mas você está considerando sobra apenas de um conjunto de um mesmo produto, e não do total de produtos.
No exemplo que eu fiz, nenhum conjunto de produto entra nessa condição (apesar da medida total exceder o limite de 66cm), e como não há incremento no índice, ele sempre joga o próximo conjunto de produtos na caixa já existente (nesse caso, $caixas[0]
), o que no final das contas, deixa apenas uma caixa com apenas com um conjunto de produtos (o último a ser analisado).
Infelizmente, não sabemos como os Correios fazem, mas se houvesse uma forma de testar o resultado final, seria bom.
Acredito que só incrementar o $i
também não resolva.
Tente ver o momento que as medidas de um produto excedem a medida limite, talvez isso ajude.
Olá,
conforme conversamos na issue #3 , criei um novo método (
transbordoDeMedida()
) para tratar essa questão.Nesse novo método, passei o array de produtos para calcular novamente a cubagem, só que dessa vez o cálculo é por cada produto, começando pela quantidade, onde vou verificando se a
$medida
é menor que 66 e inserindo em novas$caixas
.Fico no aguardo do feedback e espero ter ajudado galera, valeu!