prodis / correios-frete

Gem para cálculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices).
http://prodis.blog.br/correios-frete-gem-para-calculo-de-frete-dos-correios
132 stars 54 forks source link

Controle adicional no limite de dimensões #20

Open aramisf opened 8 years ago

aramisf commented 8 years ago

Este pull request sugere um refinamento no tratamento das dimensões de um pacote com mais de um item

1. Itens com dimensões maiores que o permitido pelos Correios:

Um item criado com parâmetros como:

item = Correios::Frete::PacoteItem.new( :altura => 110, :largura => 20, :comprimento => 20, :peso => 0.1 )

é recusado por exceder o limite de altura aceito pelos Correios (o limite atual é de 105 cm).

Ao adicionar dois ou mais desses itens em um pacote, o cálculo do volume total afeta o valor das dimensões, inclusive da altura. Fazendo com que o pacote seja aceito pelos Correios :scream:

Este caso só se torna um problema quando os itens de um pacote não podem ser dobrados ou compactados de forma a ter suas dimensões reduzidas.

Este pull request sugere uma alternativa (mas desconsidera itens dobráveis).

2. Um pacote contendo itens em que ao menos uma dimensão é zero:

Ao adicionar um item com ao menos uma dimensão igual a zero:

item = Correios::Frete::PacoteItem.new( :altura => 110, :largura => 0, :comprimento => 0, :peso => 0.1 )

O pacote fica com altura 2.0, pois ao menos uma de suas duas outras dimensões é 0. O problema aqui é que novamente a altura será alterada para um valor menor que o real, e para os casos de objetos que não podem ser compactados, dobrados, etc., isso pode ser um inconveniente.

Este pull request sugere manter os valores mais altos quando os mesmos ultrapassarem os limites máximos aceitos pelos Correios.

TODO:

Ainda resta um problema a ser resolvido, que é o caso de um item como este:

item = Correios::Frete::PacoteItem.new( :altura => 100, :largura => 100, :comprimento => 1, :peso => 0.1 )

ao adicionar um item, os Correios anunciam que não é permitido que a soma das dimensões ultrapasse 200 cm. Ao adicionar dois itens, as dimensões caem novamente no cálculo do volume total, baixando para um valor aceito pelos Correios.

Os commits foram todos feitos em inglês porque esse é o padrão aqui na firma. Mas procurei manter os padrões de código, nomenclatura de variáveis, etc.

prodis commented 8 years ago

@aramisf In review ASAP.

prodis commented 8 years ago

@aramisf Você poderia mostrar exemplos da sua implementação, com valores e resultados de cada situação que você citou? Algo semelhante aos exemplos de uso de pacotes na documentação: https://github.com/prodis/correios-frete#usando-pacotes

Pelos testes que você adicionou não consegui identificar todas as situações e resultados.

Obrigado.

aramisf commented 8 years ago

@prodis Cara, desculpa a demora, só vim ver hoje os seus comentários.

Posso fazer isso sim. Vou aproveitar a oportunidade e fazer mais uma alteração, algo que eu gostaria de ter feito na lib, mas que ficou em espera por causa da correria.

Vou pegar esses commits e pullar no fork do meu repositório pessoal, e fazer isso nas minhas horas vagas. Dae comito em português também.

aramisf commented 8 years ago

@prodis dá uma olhada no README.