OCA / l10n-brazil

Localização brasileira oficial do Odoo.
https://odoo-community.org/psc-teams/brazil-66
GNU Affero General Public License v3.0
245 stars 246 forks source link

[12.0][BUG] - l10n_br_account_payment_brcobranca #1721

Closed marcos-mendez closed 2 years ago

marcos-mendez commented 2 years ago

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.

marcelsavegnago commented 2 years ago

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

marcelsavegnago commented 2 years ago

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

marcos-mendez commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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

https://github.com/erpbrasil/erpbrasil.assinatura/pull/26

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

marcos-mendez commented 2 years ago

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 commented 2 years ago

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

marcelsavegnago commented 2 years ago

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

https://github.com/OCA/l10n-brazil/blob/36ff03268439849d69ff46fa68ea5717903576f0/l10n_br_account_payment_brcobranca/constants/br_cobranca.py#L59

marcos-mendez commented 2 years ago

Rsrs beleza mas clarmente não funciona e tem algum erro bem grave no que ele diz que não funciona pois o BRCOBRANCA API esta declarado de tudo quanto é jeito, e ele não retorna um erro lógico de o porque não funciona a comunicação nem no LOG nem na interface nem com debug ativado nem com nada 🤕🤕🤕🤕

Em qua., 24 de nov. de 2021 às 00:52, Marcel Savegnago < @.***> escreveu:

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

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/OCA/l10n-brazil/issues/1721#issuecomment-977487186, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJEVVIDZHS4UGFGCD7KH3G3UNROPBANCNFSM5IU43HZA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

marcelsavegnago commented 2 years ago

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 commented 2 years ago

@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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

Morri na praia então

marcelsavegnago commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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.

https://github.com/OCA/l10n-brazil/blob/36ff03268439849d69ff46fa68ea5717903576f0/l10n_br_account_payment_brcobranca/constants/br_cobranca.py#L59

marcos-mendez commented 2 years ago

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

marcelsavegnago commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

SIM reiniciei e continua dando a mesma coisa

marcelsavegnago commented 2 years ago

depurar é preciso. :D

marcelsavegnago commented 2 years ago

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

marcelsavegnago commented 2 years ago

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

marcos-mendez commented 2 years ago

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 commented 2 years ago

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

marcos-mendez commented 2 years ago

@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 commented 2 years ago

@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 commented 2 years ago

@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 commented 2 years ago

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 commented 2 years ago

@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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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

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

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.

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 https://github.com/OCA/l10n-brazil/commit/0983ef8e0273b5d4aa0359cfc376092ba49b4426#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

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 é 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

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 commented 2 years ago

Magno, obrigado pelas respostas, fica claro que agora dá pra entender como funciona a arquitetura do sistema. Vou fazer tudo isso que você me pede para tentar aportar mais alguma coisa/informação ao diagnóstico do problema.

Sobre a questão do chumbar a URL quando faço isso via ir.config ele vai. Funciona perfeito.

Sobre a questão do windows digo pois o export dos parametros de ambiente é completamente diferente e o windows é suportado pelo Odoo.

Sobre você dar o suporte ou não não cogito isso, só acho que deveriamos alterar para algo mais compatível com outros sistemas.

Vou te mantendo informado sobre o andamento do meu lado.

marcos-mendez commented 2 years ago

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 commented 2 years ago

@marcos-mendez vou responder no PR https://github.com/OCA/l10n-brazil/pull/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 https://github.com/OCA/l10n-brazil/pull/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