Skip to content
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

add min_weight value #33

Closed
wants to merge 6 commits into from
Closed

add min_weight value #33

wants to merge 6 commits into from

Conversation

gfabrizio
Copy link
Contributor

@gfabrizio gfabrizio commented Feb 6, 2017

@@ -331,6 +331,9 @@ def validate(cls,
if service and service.max_weight and weight > service.max_weight:
raise InvalidPackageWeightError("Max weight exceeded {!r}g (max. {!r}g)".format(weight, service.max_weight))

if service and service.min_weight and weight > service.min_weight:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui não deveria ser weight < service.min_weight

@allisson
Copy link
Contributor

allisson commented Feb 6, 2017

É bom adicionar um ou mais testes no test_posting_models.py para esse valor mínimo

@gfabrizio
Copy link
Contributor Author

👍 escrevendo os testes.

@@ -208,6 +209,7 @@ def test_basic_service():
assert service.get_symbol_filename("png") == os.path.join(DATADIR, "premium.png")
assert isinstance(service.symbol_image, Image)
assert service.max_weight == 10000
assert service min_weight == 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

não tá faltando um . aqui?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HUAHsduhaushduahsudhASD

@georgeyk georgeyk added the wip label Feb 6, 2017
@@ -331,6 +331,9 @@ def validate(cls,
if service and service.max_weight and weight > service.max_weight:
raise InvalidPackageWeightError("Max weight exceeded {!r}g (max. {!r}g)".format(weight, service.max_weight))

if service and service.min_weight and weight > service.min_weight:
raise InvalidPackageWeightError("The minimum weight is {!r}g".format(service.min_weight))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a correios sempre trabalha com "gramas" como unidade fixada ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parece que sim, pelo que olhei no código inteiro sim.

@gfabrizio
Copy link
Contributor Author

@allison adicionado testes e corrigido mais uma porradinha de coisas.

@gfabrizio gfabrizio removed the wip label Feb 7, 2017
@@ -273,6 +273,7 @@
'description': 'SEDEX 10',
'category': 'SERVICO_COM_RESTRICAO',
'max_weight': 10000,
'min_weight': 1,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esse valor 1 ta na listagem do SEDEX? Porque se eu não me engano abaixo de 500g a pesagem fica com a tabela de cartas e mala direta.

http://www.correios.com.br/para-voce/consultas-e-solicitacoes/precos-e-prazos/servicos-nacionais_pasta/carta

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

foi o que é pedido na task.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e sedex e encomenda é um serviço que você compra, tem peso maximo, e esse minimo.

Copy link
Contributor

@rhenter rhenter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@lamenezes
Copy link
Contributor

Olhando a documentação sobre limites dos correios [1] não existe peso mínimo para os serviços de entregas. Então, ao meu ver, colocar o dado min_weight no dict de infos dos serviços não é a solução certa.

Ao meu ver o correto seria fazer essa mesma validação de peso sem alterar os dicts.

@@ -140,6 +140,7 @@ def __init__(self,
display_name: Optional[str] = "",
symbol: Optional[str] = None,
max_weight: Optional[int] = None,
min_weight: Optional[int] = None,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acho que mudaria pra zero como default.

@georgeyk
Copy link
Contributor

georgeyk commented Feb 7, 2017

@lamenezes acho meio inofensiva essa mudança, só alteraria o default do peso mínimo ser 0 ao invés de None (se entendi bem o código).
O peso mínimo nos correios pode ser ímplícito, por ex, as menores dimensões de pacote dão um peso volumétrico de 500g (que é tb a primeira faixa de peso para frete) e é usando sempre que o peso real seja menor que o volumétrico.

@gfabrizio
Copy link
Contributor Author

já mudei o valor default p/ zero

@lamenezes
Copy link
Contributor

a questão é que quando se altera o dict de serviços no módulo data para colocar o min_weight igual a 1 fica parecendo que existe uma regra dos correios que obriga o peso do pacote ser 1g ou maior para todos os serviços, mas não é isso o que acontece.

@lamenezes
Copy link
Contributor

essa validação de peso é realmente necessária e importante para o serviço, só acho que deve ser feita diretamente no posting.Package sem alterar o módulo data

@georgeyk
Copy link
Contributor

georgeyk commented Feb 7, 2017

bom, é um regra "prática"..
Não sei se jogar no posting.Package seja melhor, ai vc tem um regra de max_weight aqui e outra de min_weight lá ?

@gfabrizio
Copy link
Contributor Author

exato @georgeyk foi exatamente por isso que alterei os dicts, p/ a regra não ficar só em um lugar.

@lamenezes
Copy link
Contributor

mas as duas regras (de max e min) já estão no posting.Package.validate (que é o método responsável por todas as validações de pacote) a diferença é que a de max_package utiliza dados do módulo data que, na minha concepção, representa as regras de negócios como está nos correios. Enquanto a de min_package me parece mais uma validação de peso inválido do que uma obrigação dos correios.

@lamenezes
Copy link
Contributor

a impressão que eu tenho desse PR é: "a olist não aceita pacotes (ou produtos) com peso menor que 1g, então vamos mudar a lib dos correios para injetar uma regra nos serviços SEDEX, PAC, E-SEDEX etc. dizendo que eles não aceitam pacotes com peso de 1g ou menos"

@lamenezes
Copy link
Contributor

vou tirar meu review daqui, façam como achar melhor.

@gfabrizio
Copy link
Contributor Author

sua sugestão recapitulando é; retirar do "data" e manter a vlidação somente no posting.package? posso fazer essa alteração, o seu último comentário fez sentido, parece o correto a se fazer.

Sem stress @lamenezes , estamos discutindo pq é o que gostamos de fazer :)

@georgeyk
Copy link
Contributor

georgeyk commented Feb 7, 2017

Não é "façam como achar melhor", somos um time, nós fazemos o que time acha melhor =)

Eu quero entender o que tem de errado com isso, pode não ser uma regra escrita nos docs dos correios, mas é uma regra que tá implícita físicamente (afinal, uma folha A4 > 4g).

@georgeyk
Copy link
Contributor

georgeyk commented Feb 7, 2017

jovem

@osantana
Copy link
Contributor

osantana commented Feb 7, 2017

Lembrem-se que esse projeto é OSS e aberto... vamos limitar as referências à questões internas da olist aqui nesse espaço, ok? (referência à regras de negócio interna ou à tickets no nosso jira não são boas idéias).

Se for o caso podemos fazer um fork private e exportar para cá somente o resultado final dos PRs, ok?

@gfabrizio gfabrizio changed the title [BP-190] add min_weight value add min_weight value Feb 7, 2017
@osantana
Copy link
Contributor

osantana commented Feb 7, 2017

Olhando a documentação sobre limites dos correios [1] não existe peso mínimo para os serviços de entregas. Então, ao meu ver, colocar o dado min_weight no dict de infos dos serviços não é a solução certa.

Veja... existe peso mínimo para encomendas dos correios para fins de tarifação apenas. Eu posso enviar um pacote de 100g mas pagarei por 300g porque é o valor mínimo para preço.

Então, IMHO, a lib dos correios deveria levantar uma exception para peso <=0 porque isso realmente é fisicamente impossível (e isso não precisa ficar nos dicts porque peso > 0 é o limite para qualquer objeto real em um ambiente com gravidade).

Ao mesmo tempo eu sou 👍 para adicionar a informação de peso mínimo para cobrança na lib. Essa informação pode ser usada por serviços de cálculo de frete e como limitador mínimo para cálculos de peso cúbico.

@@ -65,6 +65,10 @@ class InvalidPackageWeightError(InvalidPackageError):
pass


class InvalidMinPackageWeightError(InvalidPackageError):
pass
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

acho que talvez seja bom usar InvalidPackageWeightError e colocar uma mensagem indicando o peso mínimo na hora de fazer o raise.

@gfabrizio
Copy link
Contributor Author

Bom, eu vou fechar esse PR, seguindo a sugestão do @georgeyk por dois motivos:

  1. não chegamos a conclusão alguma do que é melhor
  2. Temos meta na nossa sprint, então vou fazer essa validação diretamente na nossa API interna, e em momento oportuno, quando necessário, verificamos o que fazer na lib dos correios.

@gfabrizio gfabrizio closed this Feb 8, 2017
@osantana osantana deleted the BP-198 branch February 8, 2017 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants