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

[14.0] l10n_br_base, l10n_br_account: Cadastro de chaves PIX no Parceiro. #2123

Merged
merged 3 commits into from
Sep 30, 2022

Conversation

antoniospneto
Copy link
Contributor

@antoniospneto antoniospneto commented Sep 11, 2022

Permite o cadastro de chaves PIX no Parceiro.

image
O cadastro fica dentro do cadastro do Parceiro, na aba invoicing a baixo do cadastro das contas bancárias.

As chaves são tratadas e validadas conforme o seu tipo.

@OCA-git-bot
Copy link
Contributor

Hi @rvalyi, @renatonlima,
some modules you are maintaining are being modified, check this out!

Copy link

@marcos-mendez marcos-mendez left a comment

Choose a reason for hiding this comment

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

Maravilha em parabens

@antoniospneto antoniospneto force-pushed the 14.0-add-partner-pix branch 2 times, most recently from c2b4dd9 to 5900857 Compare September 11, 2022 21:27
@antoniospneto
Copy link
Contributor Author

testes e dados demos incluído ✔️
tudo verde ✔️

@antoniospneto antoniospneto marked this pull request as ready for review September 12, 2022 12:22
@antoniospneto
Copy link
Contributor Author

antoniospneto commented Sep 12, 2022

ah esqueci de comentar, os commits da PR #2124 estão incluídos aqui, ao fazer o merge dele eu faço o rebase aqui pra eles sumirem.

@rvalyi
Copy link
Member

rvalyi commented Sep 12, 2022

Eu acho tranquilo fazer o merge do #2124 porem para esse eu acho bom eu e o @renatonlima revisar com calma. Mas valeu pelo trabalho, vai servir isso ja temos certeza.

Copy link
Member

@douglascstd douglascstd left a comment

Choose a reason for hiding this comment

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

[APROVADO] Testes Funcionais, com uma sugestão de melhoria no final deste review.

Screenshots:
image

Seleção de n chaves:
image

Utilização de uma tabela com relação:
image

Validação de CPF/CNPJ e email:
image
image
image

SUGESTÃO:

Incluir um campo de seleção de qual é a chave Pix PADRÃO para o parceiro. Para que assim seja utilizado em uma execução de pagamento.

@antoniospneto
Copy link
Contributor Author

antoniospneto commented Sep 12, 2022

Obrigado pela revisão @douglascstd !

Sobre a sugestão, essa implementação já existe, funciona assim:

a listagem ela é ordenável, vc pode arrastar pra cima ou pra baixo, a chave que estiver em primeiro será o preferencial.
é o mesmo funcionamento que é aplicado nas contas bancárias.

Vou incluir uma observação sobre isso no help do campo para deixar claro ;)

@marcelsavegnago
Copy link
Member

marcelsavegnago commented Sep 12, 2022

Itens para considerar:

  • Possibilidade ser um módulo separado talvez
  • Outros meios de pagamento tipo PIX que podem surgir a qualquer momento tanto dentro como fora do país. Talvez seja válido deixar mais generico. Gostei do nome Instant Payment Keys.. talvez caberia um selecition para definir o tipo de chave (generic instant key, pix, xyz...)
  • Caberia começar uma base em algum outro módulo/repo ? account_payment_mode ? ou até mesmo implementar um novo módulo no reposítório bank-payment. Exemplo: account_payment_mode_instant_payment com um boolean na tabel de modos de pagamento com valor default igual FALSE para definir se aquele modo de pagamento é instantaneo ou não, cria uma tabela res.partner.payment.instant.key com um campo selection para definir o tipo da chave (pix, generic e afins). Inclusive deixar até configurado na empresa se a mesma trabalha ou não com pagamento intantaneo através de chave afim de definir se deve ou não aparecer a tabela de chaves no cadastro do parceiro.

cc @rvalyi @mileo

@rvalyi
Copy link
Member

rvalyi commented Sep 12, 2022

Itens para considerar:

  • Possibilidade ser um módulo separado talvez

Esse é o X da questão que eu queria avaliar melhor. Talvez vale a pena no mesmo modulo, mas no passado a gente acabou dando mole demais para a enfiação de funcionalidades e por examplo no modulo fiscal ficou abusado e hoje ainda temos trabalho para limpar. Então temos que pensar com calma...

@antoniospneto
Copy link
Contributor Author

antoniospneto commented Sep 12, 2022

Sobre por em um módulo separado:
Hoje o PIX já é a forma de pagamento mais utilizada no brasil, acredito por ser comum a todos os negócios do Brasil, poderia ser implementado no base, o que pode ser uma desvantagem é que essa PR adiciona duas dependências externas, caso decidam que é melhor fazer um módulo externo eu me comprometo em fazer a alteração.

Outros meios de pagamento tipo PIX que podem surgir a qualquer momento tanto dentro como fora do país. Talvez seja válido deixar mais generico. Gostei do nome Instant Payment Keys.. talvez caberia um selecition para definir o tipo de chave (generic instant key, pix, xyz...)

Particularmente eu prefiro ter o modelo bem definido, outros meios de pagamento podem ter seu próprio modelo, pois as regras de negócio podem mudar bastante, por exemplo no PIX temos os tipos, validações e o uso bem especifico.

Caberia começar uma base em algum outro módulo/repo ? account_payment_mode ? ou até mesmo implementar um novo módulo no reposítório bank-payment. Exemplo: account_payment_mode_instant_payment com um boolean na tabel de modos de pagamento com valor default igual FALSE para definir se aquele modo de pagamento é instantaneo ou não, cria uma tabela res.partner.payment.instant.key com um campo selection para definir o tipo da chave (pix, generic e afins). Inclusive deixar até configurado na empresa se a mesma trabalha ou não com pagamento intantaneo através de chave afim de definir se deve ou não aparecer a tabela de chaves no cadastro do parceiro.

Eu pensei nessas informações como algo básico, assim como temos as contas bancárias no parceiro, podemos ter as chaves pix, mesmo que seja para uso manual, por exemplo um usuário pode consultar no cadastro quando precisar fazer um deposito, mesmo que seja direto no banco dele de forma manual.

@marcelsavegnago
Copy link
Member

marcelsavegnago commented Sep 12, 2022

Hoje o PIX já é a forma de pagamento mais utilizada no brasil, acredito por ser comum a todos os negócios do Brasil, poderia ser implementado no base, o que pode ser uma desvantagem é que essa PR adiciona duas dependências externas, caso decidam que é melhor fazer um módulo externo eu me comprometo em fazer a alteração.

Show.. acho valido considerar como um módulo separado fica mais fácil porque de certa forma fica opcional.. mas vamos ver o que dizem os colegas.

@rvalyi
Copy link
Member

rvalyi commented Sep 12, 2022

As vezes não é nem pela questão de ficar opcional, mas sim de deixar as camadas de código separadas, de forma que fica explícito o que depende de que em vez de ficar uma hidra gigantesca. Mas vou olhar melhor ainda logo que eu puder.

@antoniospneto
Copy link
Contributor Author

Certo, obrigado pela revisão! aguardo o feedback, se precisar separar em um outro módulo faço sem problemas ;)


@api.model
def create(self, vals):
self.check_vals(vals)
Copy link
Member

Choose a reason for hiding this comment

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

Ao invés de chamar o check_vals nos métodos create e write você pode adicionar a notação @api.constrains no método check_vals

Copy link
Member

Choose a reason for hiding this comment

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

@netosjb, você chegou a ver essa mudança? Daria para usar o api.constraints() no método check_vals e não sobre escrever os método create e write...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

que estranho, eu tinha respondido essa questão, mas meu comentário sumiu.

Sim, eu tentei fazer com a notação, porém no meu uso não deu certo, é que além de fazer a validação eu faço a normalização dos campos que altera o valor do mesmo. pelo fato do valor está sendo alterado, com o api.constraints() o método entra em um loop infinito, fica chamando de forma recursiva até atingir o maximo e estourar uma exception.

l10n_br_base/models/res_partner_pix.py Show resolved Hide resolved
l10n_br_base/security/ir.model.access.csv Outdated Show resolved Hide resolved
@renatonlima
Copy link
Member

@netosjb, @rvalyi e @marcelsavegnago,

Eu não vejo problema nas informações de pix ficarem no l10n_br_base porque no módulo base do core do Odoo já existe informações bancárias como a lista de bancos (res.bank) e das contas bancárias (res.partner.bank). Só se justificaria criar outro módulo se nós não quiséssemos deixar a dependência externa do phonenumbers e email_validator" no l10n_br_base, que na minha opinião não vejo problema já que se tratam de dependências de baixa complexidade.

Sobre a criação de um módulo mais genérico a nível da OCA como account_instant_payment, é válido pensar no caso a médio prazo, porque pesquisando rapidamente sobre pagamento instantâneo em outros países, eu acredito que deveríamos observar se vai ser implementado algo pelo banco central europeu (que provavelmente seria compatível com os países da união europeia), mas como eu falei no inicio deveríamos pensar nisso a medio prazo talvez fazer esse trabalho na 16.0 e na 14.0 implementar algo na nível da localização mesmo.

@rvalyi
Copy link
Member

rvalyi commented Sep 13, 2022

@netosjb uma precaução: vc não iria se opor caso a gente for propor de mudar a licença do modulo l10n_br_base para LGPL-3 no futuro como explicamos aqui #1374 ? Seria bom opinar aqui ou isso poderia ser sim um motivo de deixar separado. Feito essa observação eu ainda não olhei bem o código mas eu pretendo fazer logo...

@antoniospneto antoniospneto marked this pull request as draft September 17, 2022 21:56
@antoniospneto
Copy link
Contributor Author

Pelo que pude verificar o protótipo do mileo visa a implementação para receber pagamentos via pix, qr code, pix conbranca, integração com o pagseguro, Que aí realmente nesse caso seria melhor um módulo separado.

A implementação que estou propondo nesta pr é apenas para armazenar as informações de chaves pix nos cadastros dos parceiros, com as validações devidas.

@mileo ficarei grato pela revisão.

@rvalyi
Copy link
Member

rvalyi commented Sep 19, 2022

sim @netosjb foi assim que entendemos tb na Akretion por isso vemos essa PR de forma positiva, mas valeu a pena vc ter explicitado.

@mileo
Copy link
Member

mileo commented Sep 19, 2022

Dei uma olhada rápida não testei.

Vocês cogitaram a possibilidade de implementar dentro do modelo res.partner.bank e não implementar o modelo res.partner.pix?

Isso facilitaria a integração com outros módulos que usam o campo conta bancária, obviamente os dados como banco, agencia e outros ficariam em branco.

Mas por exemplo na integração com o account_payment_order funcionaria sem muitos problemas.

@netosjb

@antoniospneto
Copy link
Contributor Author

antoniospneto commented Sep 19, 2022

Dei uma olhada rápida não testei.

Vocês cogitaram a possibilidade de implementar dentro do modelo res.partner.bank e não implementar o modelo res.partner.pix?

Isso facilitaria a integração com outros módulos que usam o campo conta bancária, obviamente os dados como banco, agencia e outros ficariam em branco.

Mas por exemplo na integração com o account_payment_order funcionaria sem muitos problemas.

@netosjb

Pensamos nessa possibilidade, mas no fim não ajuda muito, com os objetos separado fica melhor de fazer os tratamentos do fluxo e as validações, além que na visão fica um pouco estranho uma conta bancária sem banco e sem numero.

Eu já tenho o tratamento quase pronto para lidar com o PIX no account_payment_order, pretendo submeter uma PR logo após a aprovação desta.

@antoniospneto
Copy link
Contributor Author

Dei uma olhada rápida não testei.

Vocês cogitaram a possibilidade de implementar dentro do modelo res.partner.bank e não implementar o modelo res.partner.pix?

Isso facilitaria a integração com outros módulos que usam o campo conta bancária, obviamente os dados como banco, agencia e outros ficariam em branco.

Mas por exemplo na integração com o account_payment_order funcionaria sem muitos problemas.

@netosjb

Pensamos nessa possibilidade, mas no fim não ajuda muito, com os objetos separado fica melhor de fazer os tratamentos do fluxo e as validações, além que na visão fica um pouco estranho uma conta bancária sem banco e sem numero.

Eu já tenho o tratamento quase pronto para lidar com o PIX no account_payment_order, pretendo submeter uma PR logo após a aprovação desta.

Outro detalhe, a chave pix pode ser referenciada dentro da conta bancária, porém é opcional, qualquer coisa é só tornar essa relação obrigatória.

@douglascstd
Copy link
Member

E vale lembrar que uma das opções de pix é o uso da conta/agencia do destinatário
Entao o uso vinculado a conta bancária faz sentido

@rvalyi
Copy link
Member

rvalyi commented Sep 29, 2022

@netosjb @felipemotter por mim esta aprovado, mas fiz um PR para incluir o @netosjb nos contribuidores do modulo Engenere#11 . Logo apos o merge aprovo aqui.

@rvalyi
Copy link
Member

rvalyi commented Sep 30, 2022

/ocabot merge major

@OCA-git-bot
Copy link
Contributor

Hey, thanks for contributing! Proceeding to merge this for you.
Prepared branch 14.0-ocabot-merge-pr-2123-by-rvalyi-bump-major, awaiting test results.

@rvalyi
Copy link
Member

rvalyi commented Sep 30, 2022

(os testes falharam sem motivo por cause do JS nos testes Pagseguro, aqueles bugs inconsistentes, nada de blocar o merge)

@OCA-git-bot OCA-git-bot merged commit 6b760a5 into OCA:14.0 Sep 30, 2022
@OCA-git-bot
Copy link
Contributor

Congratulations, your PR was merged at 9c5b38c. Thanks a lot for contributing to OCA. ❤️

@mbcosta
Copy link
Contributor

mbcosta commented Sep 30, 2022

Pessoal tem um detalhe que parece não ter sido visto é que nos novos arquivos incluídos está faltando o cabeçalho de licença e o autor, acredito que isso é um padrão e consta na maioria dos arquivos python, exceção os init.py, em alguns casos até mesmo nos arquivos XML, por isso @netosjb minha opinião é que isso deve ser corrigido nos seguintes arquivos:

https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/models/res_partner_pix.py#L1
https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/tests/test_partner_bank.py#L1
https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/tests/test_valid_pix.py#L1

Um exemplo com o formato pode ser visto aqui https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_account_nfe/models/document_workflow.py#L1

Copyright (C) 2022-Today - Engenere (https://engenere.one).
@author Antônio S. Pereira Neto [email protected]
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

@antoniospneto
Copy link
Contributor Author

opa! vou fazer a correção, obrigado @mbcosta

@antoniospneto
Copy link
Contributor Author

Pessoal tem um detalhe que parece não ter sido visto é que nos novos arquivos incluídos está faltando o cabeçalho de licença e o autor, acredito que isso é um padrão e consta na maioria dos arquivos python, exceção os init.py, em alguns casos até mesmo nos arquivos XML, por isso @netosjb minha opinião é que isso deve ser corrigido nos seguintes arquivos:

https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/models/res_partner_pix.py#L1 https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/tests/test_partner_bank.py#L1 https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_base/tests/test_valid_pix.py#L1

Um exemplo com o formato pode ser visto aqui https://github.com/OCA/l10n-brazil/blob/14.0/l10n_br_account_nfe/models/document_workflow.py#L1

Copyright (C) 2022-Today - Engenere (https://engenere.one). @author Antônio S. Pereira Neto [email protected] License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Feito #2148

@@ -176,3 +188,13 @@ def _address_fields(self):
@api.onchange("city_id")
def _onchange_city_id(self):
self.city = self.city_id.name

def _compute_show_l10n_br(self):
Copy link
Member

@marcelsavegnago marcelsavegnago Sep 29, 2023

Choose a reason for hiding this comment

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

@antoniospneto Estou com dúvida sobre este método já que a principio por default os parceiros não tem um company_id definido. Talvez possamos incrementar testando se o pais do parceiro é diferente de BR. Fora isso, acredita que seja válido considerar a empresa selecionada no momento também?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Realmente, a validação que fiz na época não é uma boa.
Acho que o código do país do parceiro vai ser melhor 👍🏻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.