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

[12.0][BUG] - l10n_br_account_payment_brcobranca #1721

Closed
marcos-mendez opened this issue Nov 24, 2021 · 38 comments
Closed

[12.0][BUG] - l10n_br_account_payment_brcobranca #1721

marcos-mendez opened this issue Nov 24, 2021 · 38 comments
Labels

Comments

@marcos-mendez
Copy link

** Descreva o bug **
Ao tentar gerar um boleto dentro de um ambiente DEBIAN 10 Buster com todos os erros que a instalação gera de incompatibilidade com o XMLSEC 2016.7 e 2019.2 e depois de seguir todos os passos descritos

aqui: https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_brcobranca/README.rst

É gerado o erro:

Screenshot from 2021-11-23 22-44-18

Apesar de meu arquivo de configuração estar assim

Screenshot from 2021-11-23 17-37-21

E apesar ainda de ter seguido as recomendações do sr @marcelsavegnago PSC deste repositório em relação a isto:

https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/
isto:
https://bash.cyberciti.biz/guide/Export_Variables
e também isto:
https://bash.cyberciti.biz/guide/Export_Variables

Estou colocando todas as referencias pois assim como diz a documentação meus return e moves estão assim
Screenshot from 2021-11-23 22-49-50
Screenshot from 2021-11-23 22-49-47

Segui a documentação que esta descrita no módulo com o qual os modos e metodos de pagamento e diários estão corretamentew configurados

Screenshot from 2021-11-23 22-50-06
Screenshot from 2021-11-23 22-49-54

Ainda assim e mesmo não usando um DOCKER e graças novamente ao SR Marcel tenho uma instância do BRCOBRANCA_API rodando localmente dentro de uma LXC que apesar de estar gerando boletos não está se comunicando com o Odoo como é possível ver AQUI:

Screenshot from 2021-11-23 22-44-18

Assim que houver alguma explicação factivel para o problema seria interessante saber o que é possivel fazer para sanar este problema

Desculpem mais uma vez a minha burrice e minha ignorância.

@marcos-mendez marcos-mendez changed the title [BUG] - l10n_br_account_payment_brcobranca [12.0][BUG] - l10n_br_account_payment_brcobranca Nov 24, 2021
@marcelsavegnago
Copy link
Member

@marcos-mendez vc fala de incompatibilidade com o xmlsec mas não vi nenhuma referencia mostrando esta incompatibilidade nos teus prints..

@marcelsavegnago
Copy link
Member

@marcos-mendez pergunta besta.. ta conseguindo pingar do Odoo no teu container brcobranca ? acredito que sim mas não custa perguntar.

@marcos-mendez
Copy link
Author

Sim estou conseguindo pingar

Screenshot from 2021-11-24 00-28-07

Sobre o XMLSEC não seja por isso

Screenshot from 2021-11-24 00-24-44

@marcelsavegnago
Copy link
Member

A porta é a 9292 mesmo ? fora isso, lah do servidor do Odoo tenta fazer uma chamada curl ao brcobranca.

https://github.com/akretion/boleto_cnab_api#examplos-de-como-consumir-o-servi%C3%A7o-usando-sua-linguagem-preferida

@marcelsavegnago
Copy link
Member

marcelsavegnago commented Nov 24, 2021

Sobre o XMLSEC tenta instalar a lib com esta branch do @renatonlima.

erpbrasil/erpbrasil.assinatura#26

Pode ser este o problema.. se não me engano estamos aguardando o @mileo para poder fazer o merge desta PR.

@marcos-mendez
Copy link
Author

A porta é a 9292 mesmo ? fora isso, lah do servidor do Odoo tenta fazer uma chamada curl ao brcobranca.

https://github.com/akretion/boleto_cnab_api#examplos-de-como-consumir-o-servi%C3%A7o-usando-sua-linguagem-preferida

Cara ao testar o curl funciona perfeitamente
Screenshot from 2021-11-24 00-47-57

E digo mais realizei um nmap no 192.168.1.230 e ele tem um monte de porta esquisita ja testei em todas

Screenshot from 2021-11-24 00-49-00
Nenhuma funciona

@marcelsavegnago
Copy link
Member

Bom.. mas se do servidor Odoo vc conseguiu executar via curl.. meio caminho andando.

@marcelsavegnago
Copy link
Member

Tenta depurar este trecho do código se possível.

brcobranca_api_url = os.environ.get("BRCOBRANCA_API_URL")

@marcos-mendez
Copy link
Author

marcos-mendez commented Nov 24, 2021 via email

@marcelsavegnago
Copy link
Member

Confere o nome da variavel.. ve se ta batendo tbm... da um echo em $BRCOBRANCA_API_URL pra ver se está trazendo o resultado esperado

@marcos-mendez
Copy link
Author

@marcelsavegnago eu já tinha feito isto e já tinha colocado o print mas coloco de novo

Screenshot from 2021-11-24 00-56-30

Sobre depurar a linha que você indica eu não faço a mais minima ideia de como faço isso, você tem alguma documentação referente a este procedimento?

@marcelsavegnago
Copy link
Member

Não tenho não.. mas vc pode pesquisar em como fazer com o pycharm ou até mesmo usar o material dos cursos que fez com o @mileo .

No caso vc faria no teu ambiente local.. mas dá para fazer remoto (ai ja depende de outras cosias e não sou o mais indicado)

@marcelsavegnago
Copy link
Member

Outra coisa.. confirma se o teu Odoo não está sendo executado por outro usuário.. vc me disse que é pelo root.. tbm.. procede ? qualquer coisa tenta definir como variavel global eda um restart ai no container.. (caso nao tenha feito)

@marcos-mendez
Copy link
Author

Morri na praia então

@marcelsavegnago
Copy link
Member

Confere tbm se teu código bate bate com o código atual ai do módulo brcobranca.. principalmente a linha que te falei para depurar..

@marcelsavegnago
Copy link
Member

Morri na praia então

ahhh em poucos minutos vc resolve.. tem um video lah que se nao me engano te mostra certinho como preparar o ambiente.. acho que vai gastar menos tempo do que já gastou até agora.

@marcelsavegnago
Copy link
Member

marcelsavegnago commented Nov 24, 2021

Se vc observar a linha do código que passei vai ver q o teste é simples.. o sistema usa um método do python soh para buscar o valor de uma variavel de sistema.. ou seja, se ele nao acha é bem provavel que nao esteja ai disponivel para o usuário ou para o ambiente onde o Odoo está em execução.

brcobranca_api_url = os.environ.get("BRCOBRANCA_API_URL")

@marcos-mendez
Copy link
Author

marcos-mendez commented Nov 24, 2021

Screenshot from 2021-11-24 01-02-30
Veja só eu coloquei na marra aqui e ele continua apontando o erro

@marcelsavegnago
Copy link
Member

Enfim, veja que o testeé simples e por isso é bem mais provavel de fato que seja teu ambiente e nao o código. Compreende ? Entendo que fique frustrado, massssssss falta subisidio para considerar que o erro está no código.

@marcelsavegnago
Copy link
Member

Screenshot from 2021-11-24 01-02-30 Veja só eu coloquei na marra aqui e ele continua apontando o erro Screenshot from 2021-11-24 01-02-30

sim.. eh uma forma de contornar.. vc reiniciou o servico ?

@marcos-mendez
Copy link
Author

SIM reiniciei e continua dando a mesma coisa

@marcelsavegnago
Copy link
Member

depurar é preciso. :D

@marcelsavegnago
Copy link
Member

Bora lah.. sobe isso ai em algum lugar e debug nele..

@marcelsavegnago
Copy link
Member

marcelsavegnago commented Nov 24, 2021

Com certeza tem algo errado que não está certo hehehehe

@marcos-mendez
Copy link
Author

Olha só que lindo esse software, é uma paulada atrás da outra agora que fiz isso ele começou a dar a doida e não funciona mais porra nenhuma saudades do wordpress

Screenshot from 2021-11-24 01-12-15

@marcos-mendez
Copy link
Author

E este outro aqui ao dar um update no módulo nossa é uma beleza
Screenshot from 2021-11-24 01-14-15

@marcos-mendez
Copy link
Author

@marcelsavegnago veja e agora consegui ter um erro novo que parece ser menos pior, que é o fato dele pedir 2 digitos na carteira, isso eu fiz porque injetei a URL do BRCOBRANCA no código do Odoo
Screenshot from 2021-11-24 01-21-10

EU nem imagino o que é essa carteira, mas vou pesquisar

@marcos-mendez
Copy link
Author

@marcelsavegnago meti um 02 la na carteira tipo um numero aleatório que veio a cabeça e to quase chorando
Screenshot from 2021-11-24 01-25-19

Bom claramente tem erro de código ai, porque eu mexi no código pra corrigir isso dele não comunicar né. Variável de ambiente é que não é porque testei aqui em outro servidor e realmente isso aconteceu com outro servidor que ta numa VM e não numa LXC

@marcelsavegnago
Copy link
Member

@marcelsavegnago veja e agora consegui ter um erro novo que parece ser menos pior, que é o fato dele pedir 2 digitos na carteira, isso eu fiz porque injetei a URL do BRCOBRANCA no código do Odoo Screenshot from 2021-11-24 01-21-10

EU nem imagino o que é essa carteira, mas vou pesquisar

blz.. dá uma pesquisada.

@marcos-mendez
Copy link
Author

Vou deixar esta Issue aberta porque claramente isso de definir no arquivo de configuração tá mal feito, imagina se eu começar a aceitar pagamento de varios gateways que fazem isso para se configurar, vou ter um .conf gigante. É uma gambiarra claramente

Deveriamos fazer algo do tipo como é feito com o pagseguro que ele exige que use um SYSTEM parameters do próprio odoo ou algo assim como o web.base.url.freeze = True que fica salvo em banco. Amanhã isso pode ser alterado facilmente via interface e sem a necessidade de um usuário root com acesso ao terminal (aliás outra vulnerabilidade que se deu no caso dos cartões no GW Cielo)

Só que ao envés disso usar algo como essa API ai e resolver a pau como qualquer operador de recebimento do Odoo faz.

De qualquer maneira fica claro que falta muita documentação sobre o assunto ainda e este módulo apesar de comunicar bem no docker não é o caso em outras instancias LXC LXD CENTOS e um Windows que eu testei

Isso da Carteira não é falado em lugar nenhum, aliás não faço ideia do que seja e precisaria ser inserido na documentação.

E também é obvio que os testes são feitos só na caixa de areia do docker o dia que meter um Centos ou um LXC pura de alta performance as coisas não funcionam como deveriam.

@marcos-mendez
Copy link
Author

@marcelsavegnago mais uma vez obrigado por sua disponibilidade, coleguismo e presença mesmo em horas tão sombrias e obscuras. Fico feliz de mesmo com uma gambiarra ter resolvido o problema, De qualquer maneira vou ver como posso fazer para arrumar tudo isso com calma mais pra frente.

Abraço e boa noite

@marcelsavegnago
Copy link
Member

Vou deixar esta Issue aberta porque claramente isso de definir no arquivo de configuração tá mal feito, imagina se eu começar a aceitar pagamento de varios gateways que fazem isso para se configurar, vou ter um .conf gigante. É uma gambiarra claramente

Deveriamos fazer algo do tipo como é feito com o pagseguro que ele exige que use um SYSTEM parameters do próprio odoo ou algo assim como o web.base.url.freeze = True que fica salvo em banco. Amanhã isso pode ser alterado facilmente via interface e sem a necessidade de um usuário root com acesso ao terminal (aliás outra vulnerabilidade que se deu no caso dos cartões no GW Cielo)

Só que ao envés disso usar algo como essa API ai e resolver a pau como qualquer operador de recebimento do Odoo faz.

De qualquer maneira fica claro que falta muita documentação sobre o assunto ainda e este módulo apesar de comunicar bem no docker não é o caso em outras instancias LXC LXD CENTOS e um Windows que eu testei

Isso da Carteira não é falado em lugar nenhum, aliás não faço ideia do que seja e precisaria ser inserido na documentação.

E também é obvio que os testes são feitos só na caixa de areia do docker o dia que meter um Centos ou um LXC pura de alta performance as coisas não funcionam como deveriam.

Marcão.. toda ajuda é bem vinda..

@marcelsavegnago
Copy link
Member

Sobre o XMLSEC tenta instalar a lib com esta branch do @renatonlima.

erpbrasil/erpbrasil.assinatura#26

Pode ser este o problema.. se não me engano estamos aguardando o @mileo para poder fazer o merge desta PR.

@marcos-mendez nao esquece disso aqui.. em tese resolve o problema com o xmlsec

@marcelsavegnago
Copy link
Member

Desinstala o erpbrasil.assinatura e roda esse comando

pip install -e git+https://github.com/akretion/erpbrasil.assinatura.git@remove-xmlsec#egg=erpbrasil.assinatura

@mbcosta
Copy link
Contributor

mbcosta commented Nov 24, 2021

@marcos-mendez eu fui responsável por uma parte da implementação do CNAB, por isso gostaria de esclarecer algumas questões:

  • "Olha só que lindo esse software, é uma paulada atrás da outra agora que fiz isso ele começou a dar a doida e não funciona mais porra nenhuma saudades do wordpress" "E este outro aqui ao dar um update no módulo nossa é uma beleza"

Sempre que é feita a atualização dos repositórios e existem alterações de visões, campos, etc é preciso rodar em um Banco da Dados já existente um "update" do(s) modulo(s) alterado(s), a exceção dessa necessidade é alteração apenas de métodos ( como no exemplo abaixo do print ), por isso caso você acabe atualizando algum repositório e por algum motivo não sabe quais módulos foram alterados você precisa rodar um "-u all" que é o mesmo de "--update=all", isso não tem relação com o problema reportado

  • "Bom claramente tem erro de código ai, porque eu mexi no código pra corrigir isso dele não comunicar né. Variável de ambiente é que não é porque testei aqui em outro servidor e realmente isso aconteceu com outro servidor que ta numa VM e não numa LXC"

Coloca um "print" da variável no seu código vai aparecer no LOG do odoo quando o método for chamado, assim você vai saber o que está vindo

image

image

O que aparece no seu caso?

Veja que na linha logo abaixo a do "print" existe a linha de LOG da comunicação com a API:

Connecting to http://boleto_cnab_api:9292/api/boleto/multi to get Boleto of invoice Teste Unicred CNAB400

O que aparece quando você consegue a conexão "chumbando" a URL direto no código?

Veja que o comando os.environ.get("BRCOBRANCA_API_URL") usa um "import os" em teoria isso deveria funcionar independente de ser docker, vm, lxc, ou OS puro já que é algo do próprio python e se houvesse um problema seria algo geral com o "os", mas pode ser que nos outros casos de virtualização exista algo que deve ser feito.

  • "Vou deixar esta Issue aberta porque claramente isso de definir no arquivo de configuração tá mal feito, imagina se eu começar a aceitar pagamento de varios gateways que fazem isso para se configurar, vou ter um .conf gigante. É uma gambiarra claramente
    Deveriamos fazer algo do tipo como é feito com o pagseguro que ele exige que use um SYSTEM parameters do próprio odoo ou algo assim como o web.base.url.freeze = True que fica salvo em banco. Amanhã isso pode ser alterado facilmente via interface e sem a necessidade de um usuário root com acesso ao terminal (aliás outra vulnerabilidade que se deu no caso dos cartões no GW Cielo)"

Isso não é uma gambiarra, a informação do endereço antes era um parâmetro do Odoo e depois passou a ser uma variável de ambiente 0983ef8#diff-efd55e98d65b3050e28b1d914968b53fe8606c8f321223456859467d58154247 , não vejo como um problema e não é o mesmo caso de uma conexão com um "webservice" de pagamento, cada caso é um caso, nesse caso é uma questão de infra-estrutura onde é possível tanto conectar com um servidor na "nuvem" quanto local e é desnecessário configurar ou mesmo ter isso no odoo, não é comum serem feitas alterações no endereço depois de configurado e esse tipo de acesso é algo restrito ao administrador responsável pelo servidor, usuários comuns não possuem e nem devem ter esse tipo de acesso, sobre o root não é recomendado usa-lo para rodar o odoo( na v8 havia até uma restrição para não permitir executar o odoo como root, acredito que isso se manteve na v12 ) portanto não é necessário ser o root para fazer isso, o recomendado e ter um usuário exemplo odoo para gerenciar todo o serviço. Essa alteração foi aprovada por outros desenvolvedores, e além disso não acredito que exista um tamanho especifico para o arquivo .conf

  • "De qualquer maneira fica claro que falta muita documentação sobre o assunto ainda e este módulo apesar de comunicar bem no docker não é o caso em outras instancias LXC LXD CENTOS e um Windows que eu testei"

Como escrevi acima é preciso confirmar se existe um problema com o "os" do python nos casos LXC, LXD e CENTOS. Eu não recomendo windows para uso profissional em nenhum caso onde houver possibilidade de se usar Linux/GNU e mesmo que exista necessidade por uma aplicação especifica recomendo tentar emular ou virtualizar, EU acredito que nem a Odoo nem a OCA deveriam recomendar ou mesmo gastar tempo para viabilizar e dar suporte para o uso com servidor windows por questões de segurança, desempenho e estabilidade portanto da minha parte não pretendo dar suporte ou mesmo analisar problemas referentes ao windows.

  • "Isso da Carteira não é falado em lugar nenhum, aliás não faço ideia do que seja e precisaria ser inserido na documentação."

Isso é uma informação que o Banco fornece além de outras e varia entre eles, o modulo possui dados de demonstração de mais de um Banco onde você pode olhar o que está sendo configurado https://github.com/OCA/l10n-brazil/blob/12.0/l10n_br_account_payment_order/demo/account_payment_mode.xml ou consultar na tela de uma banco de dados de demonstração e já tem na documentação do modulo l10n_br_account_payment_order
image

  • "E também é obvio que os testes são feitos só na caixa de areia do docker o dia que meter um Centos ou um LXC pura de alta performance as coisas não funcionam como deveriam."

Os testes do modulo validam a funcionalidade do CNAB com essa questão de comunicação com API já resolvida, não temos como saber a forma que cada um decide implementar, tem várias, a implementação do Odoo é composta da integração de vários projetos e cada um é isolado e se restringe a um escopo, isso é um padrão em grandes projetos porque facilita a manutenção e identificação de problemas, por isso existe uma diferença entre um problema de comunicação com a API que é de infra-estrutura de um problema com a aplicação, a funcionalidade em si, tanto dentro do odoo( os modulos da localização ) quanto na própria biblioteca BRCobranca https://github.com/kivanio/brcobranca, é preciso separar e identificar o que é e onde está o problema para poder buscar uma solução, dizer que "Tem um BUG no l10n_br_account_payment_brcobranca" é muito genérico além de ter questões e reclamações aqui que não tem referencia com o problema relatado, se alguém pretende implementar o CNAB é fundamental entender ou procurar se informar sobre os campos que são usados para parametrização como a Carteira e os outros campos que devem ou não ser preenchidos principalmente os Códigos de Instrução e de Retorno do Movimento, mais uma vez existem dados de demonstração de mais de um banco que você pode olhar e comparar para saber o que é preenchido ou as diferenças entre os CNABs, ao iniciar o processo em um cliente é preciso homologar junto ao banco tanto o arquivo gerado quanto validar o arquivo de retorno dentro do programa, isso é um padrão. A documentação sempre pode melhorar para deixar isso mais claro para quem for implementar.

@marcos-mendez
Copy link
Author

marcos-mendez commented Nov 24, 2021 via email

@marcos-mendez
Copy link
Author

Estou encerrando a Issue porque não consegui fazer isso de outra forma que não chumbando no código dentro da LXC, hj fiz a primeira transmissão de boleto e deu certo, não consigo importar o retorno ainda, deve ser por conta da espera de 24 hrs do banco. De qualquer maneira vou fechar porque vou começar a chumbar no código manualmente cada URL porque não consegui fazer que isso acontecesse direto no codigo pelo ir.config da maneira que estava antes. O erro que tenho é um index null e não imagino o que seja isso.

@mbcosta
Copy link
Contributor

mbcosta commented Jan 6, 2022

@marcos-mendez vou responder no PR #1726 posso ver de implementar da forma como foi orientado ser a melhor, isso é ter a possibilidade de informar tanto pela Variável de Ambiente quanto por um Parâmetro do Odoo, mas é importante, se for possível, você esclarecer essa questão da limitação/problema com Variáveis de Ambiente no LXC.

"não consigo importar o retorno ainda, deve ser por conta da espera de 24 hrs do banco." Sim os Bancos processam anoite o CNAB tem um atraso/delay de 24hrs

Sobre o Retorno é importante verificar dependendo do Banco e CNAB como esta vindo o "Valor Pago" precisa ser o Valor Liquido + Tarifa para correta Contabilização e Reconciliação veja esse PR #1737

"O erro que tenho é um index null e não imagino o que seja isso." é preciso ver em que modulo e objeto isso acontece o LOG tem essa informação

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

No branches or pull requests

3 participants