Code Monkey home page Code Monkey logo

pyboleto's People

Contributors

arloc avatar arturfsousa avatar boondocksaints-debug avatar citec avatar claudiomeinberg avatar crsilveira avatar danimaribeiro avatar dudanogueira avatar eduardocereto avatar joepreludian avatar josecostamartins avatar leandrorolim avatar luanp avatar michelts avatar myhro avatar seocam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyboleto's Issues

AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

Estou obtendo erro ao instalar o pyboleto. Na verdade o erro é por conta da biblioteca distribute. Não vi relavância do uso dessa biblioteca. A ultimo versão desse pacote é do ano de 2013. Talvez deva considerar remover essa biblioteca das dependências.

Estou usando python 3.6.6 na plataforma Linux.

pip install pyboleto
Collecting pyboleto
  Using cached https://files.pythonhosted.org/packages/6f/22/3073b4454e2dba011a95b6a1ee40a8d9fca3f3a3381b0b984b923ea146e2/pyboleto-0.3.1.tar.gz
Collecting distribute (from pyboleto)
  Using cached https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-lcdnxqw7/distribute/setuptools/__init__.py", line 2, in <module>
        from setuptools.extension import Extension, Library
      File "/tmp/pip-install-lcdnxqw7/distribute/setuptools/extension.py", line 5, in <module>
        from setuptools.dist import _get_unpatched
      File "/tmp/pip-install-lcdnxqw7/distribute/setuptools/dist.py", line 7, in <module>
        from setuptools.command.install import install
      File "/tmp/pip-install-lcdnxqw7/distribute/setuptools/command/__init__.py", line 8, in <module>
        from setuptools.command import install_scripts
      File "/tmp/pip-install-lcdnxqw7/distribute/setuptools/command/install_scripts.py", line 3, in <module>
        from pkg_resources import Distribution, PathMetadata, ensure_directory
      File "/tmp/pip-install-lcdnxqw7/distribute/pkg_resources.py", line 1518, in <module>
        register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
    AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

O diretório de testes está sendo distribuído como um pacote

A lib pyboleto possui um problema no MANIFEST.in que está jogando todos os seus testes na raiz do dist-packages, ao instalar via pip.

As opções de resolução incluem não distribuir os testes com a instalação, ou coletar os testes dentro do mesmo namespace da lib.

Respeitar margens de impressoras

O código de barras tem uma margem inferir máxima bem pequena

Eu tento forçar isso no pyboleto porém a maioria das impressoras não é muito confortável com essa margem.

Talvez o melhor seja deixar uma margem maior para a impressora e colocar um tracejado embaixo para cortar.

Documentação em Português ou Inglês?

Originalmente eu estava escrevendo toda a documentação em Inglês. Mas agora resolvi mudar para escrever em Português e deixar apenas o README do repositório em Inglês. O que vocês preferem?

Support Python 3

Eu quero suportar Python 3 mesmo que o reportlab não suporte ainda.

Pra fazer isso vou ter que abandonar o suporte para o Python 2.5.

Eu pessoalmente não ligo para Python 2.5, e acho que hoje em dia é bem difícil ver alguém usando Python 2.5 em algum projeto novo.

Também vou ter que implementar um export em html, já que o reportlab ainda não suporte python3 tem que ter alguma maneira de realmente imprimir o boleto em python3.

Comentários?

Erro banco Itaú Odoo 12

erro ao emitir boleto Itaú.

Erro:
Odoo Server Error

Traceback (most recent call last):
File "/opt/odoo12/odoo12-server/addons/web/controllers/main.py", line 1670, in report_download
response = self.report_routes(reportname, docids=docids, converter=converter)
File "/opt/odoo12/odoo12-server/odoo/http.py", line 517, in response_wrap
response = f(*args, **kw)
File "/opt/odoo12/odoo12-server/addons/web/controllers/main.py", line 1611, in report_routes
pdf = report.with_context(context).render_qweb_pdf(docids, data=data)[0]
File "/opt/odoo12/custom/addons/br_nfe/reports/danfe_report.py", line 33, in render_qweb_pdf
res_ids, data=data)
File "/opt/odoo12/custom/addons/br_boleto/reports/boleto.py", line 21, in render_qweb_pdf
res_ids, data=data)
File "/opt/odoo12/custom/addons/br_boleto/reports/report.py", line 45, in render_qweb_pdf
pdf_string = Boleto.get_pdfs(boleto_list)
File "/opt/odoo12/custom/addons/br_boleto/boleto/document.py", line 145, in get_pdfs
boleto.drawBoleto(boleto_list[i])
File "/usr/local/lib/python3.5/dist-packages/pyboleto-0.3.1-py3.5.egg/pyboleto/pdf.py", line 815, in drawBoleto
d = self._drawReciboCaixa(boleto_dados, x, y)
File "/usr/local/lib/python3.5/dist-packages/pyboleto-0.3.1-py3.5.egg/pyboleto/pdf.py", line 672, in _drawReciboCaixa
boleto_dados.format_nosso_numero()
File "/usr/local/lib/python3.5/dist-packages/pyboleto-0.3.1-py3.5.egg/pyboleto/bank/itau.py", line 46, in format_nosso_numero
self.dv_nosso_numero)
File "/usr/local/lib/python3.5/dist-packages/pyboleto-0.3.1-py3.5.egg/pyboleto/bank/itau.py", line 32, in dv_nosso_numero
return self.modulo10(composto)
File "/usr/local/lib/python3.5/dist-packages/pyboleto-0.3.1-py3.5.egg/pyboleto/data.py", line 459, in modulo10
parcial = int(c) * peso
ValueError: invalid literal for int() with base 10: 'G'

Duvidas geração de boletos Bradesco

Estou trabalhando no desenvolvimento de um sistema e estou utilizando o pyboleto para gerar os boletos para o banco Bradesco.

Eu já consigo gerar boletos de exemplo, porém ainda tenho dúvidas com algumas etapas no processo de pagamento.

Quais valores eu insiro no campo "Nosso numero"?
E o "Numero documento", ele tem alguma regra para ser gerado?

Após o boleto ser gerado, existe algum processo a ser executado para registrar o boleto com o banco ou esse boleto ja esta 100% válido?

Meu cliente questionou que, caso o boleto não seja validado com o banco, uma taxa adicional será paga.

Aguardo retorno!

Dados do sacado não deveriam ser obrigatórios

Nenhum dos dados abaixo deveriam ser obrigatórios no boleto bancário. Todos esses dados deveriam ser opcionais:

:param sacado_nome: Nome do Sacado
:param sacado_documento: CPF ou CNPJ do Sacado
:param sacado_cidade:
:param sacado_uf:
:param sacado_endereco: Endereco do Sacado
:param sacado_bairro:
:param sacado_cep:

Problema com BoletoSantander em pyboletos.bank.__init__.py

O dicionário de bancos implementados está incompleto, faltando o banco santander.
Na prática:

BANCOS_IMPLEMENTADOS = {
    '001': 'bancodobrasil.BoletoBB',
    '041': 'banrisul.BoletoBanrisul',
    '237': 'bradesco.BoletoBradesco',
    '104': 'caixa.BoletoCaixa',
    '399': 'hsbc.BoletoHsbc',
    '341': 'itau.BoletoItau',
    '356': 'real.BoletoReal',
}

Deveria ser (note a última linha):

BANCOS_IMPLEMENTADOS = {
    '001': 'bancodobrasil.BoletoBB',
    '041': 'banrisul.BoletoBanrisul',
    '237': 'bradesco.BoletoBradesco',
    '104': 'caixa.BoletoCaixa',
    '399': 'hsbc.BoletoHsbc',
    '341': 'itau.BoletoItau',
    '356': 'real.BoletoReal',
    '033': 'santander.BoletoSantander',
}

Melhorias para Custom Properties

Eu não gosto da forma que eu lido com as Custom Properties hoje.

Na verdade eu nem gosto de usar customProperties. Mas me pareceu o jeito mais limpo de implementar uma validação e limpeza básica dos campos na époa.

Eu dei uma olhada nas alterações que você (@jdahlin) fez nas CustomProperties [0fdce68] e que eu tive que reverter [5007c2e] porque tinha um bug qdo imprimia vários boletos. Deve ser fácil de reproduzir com os testes de boletos triplos.

Básicamente você não mantinha o estado na instãncia mas sim no próprio descriptor. Eu consertei a sua implementação.

class CustomProperty(object):
    def __init__(self, name, length):
        self.name = '_' + name
        self.length = length
        self.value = '0' * length

    def __get__(self, obj, class_):
        if hasattr(obj, self.name):
            return getattr(obj, self.name)
        return self.value

    def __set__(self, obj, value):
        # Se tiver um DV, só aplica o length para a parte antes do
        # digito verificador
        if '-' in value:
            values = value.split('-')
            values[0] = values[0].zfill(self.length)
            setattr(obj, self.name, '-'.join(values))
        else:
            setattr(obj, self.name, value.zfill(self.length))

Eu não sabia mto como funcionavam descriptors por isso levei um tempo pra entender o q dava de errado.

Porém agora eu não sei se vale a pena implementar esse novo modelo, pq ao meu ver não muda nada pra property em função que eu já uso hoje.

Talvez seja melhor implementar um mecanismo mais completo pra cada campo com umas validações mais robustas.

Infraestrutura para geração de formulários

Para poder usar pyboleto num aplicativo tem que ter formulários, ou pelo menos código que ajuda gerar.
No meu caso usaria pygtk/kiwi, mas html/web também precisa.

Precisa um API que pode responder:

  1. Quais bancos são suportados?
  2. Quais opções precisam para gerar um boleto?
  3. Quais são os valores permitidos para esses opções?

Outro bug seria colocar código que gera os formularios para simplesmente poder imprimir.

Eu resolvi isso no fork do pyboleto do stoqlib, mas não gostei muito como ficou.

Quero ajudar

Olá pessoal,

Quero ajudar em alguma coisa no projeto, mas estou um pouco perdido. O que está precisando? Documentação? Testes unitários? Alguma implementação?

Grato,
Ivan.

Pyboleto_sample nao funciona santander

Quando gerando esse example

https://github.com/eduardocereto/pyboleto/blob/master/bin/pyboleto_sample.py#L154

recebo o erro:

pagamento\views.py", line 104, in print_santander

boleto.drawBoleto(listaDadosSantander[i])

File "C:\Python27\lib\site-packages\pyboleto\pdf.py", line 727, in drawBoleto

d = self.drawReciboCaixa(boletoDados, x, y)

File "C:\Python27\lib\site-packages\pyboleto\pdf.py", line 690, in drawReciboCaixa

boletoDados.linha_digitavel

File "C:\Python27\lib\site-packages\pyboleto\data.py", line 250, in linha_digitavel

linha = self.barcode

File "C:\Python27\lib\site-packages\pyboleto\data.py", line 82, in barcode

'This method has not been implemented by this class'

Alguma dica?

Boleto Registrado

Eae algo a respeito do registro dos boletos? A biblioteca é muito boa, mas vai se tornar quase que inútil se isso não for realizado, alguém já começou? Posso ajudar a desenvolver.

Erro no uso de Decimal() no Python 3.4

No python 3.4 o pyboleto está apresentando um erro afirmando que o argumento opcional da função Decimal deve ser um contexto. Por exemplo, abaixo está o final do resultado de "python setup.py test".

======================================================================
ERROR: test_nosso_numero (tests.test_banco_santander.TestBancoSantander)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "c:\temp\boleto2\pyboleto\build\lib\tests\test_banco_santander.py", line 20, in setUp
    d.valor_documento = 2952.95
  File "c:\temp\boleto2\pyboleto\build\lib\pyboleto\data.py", line 328, in _set_valor_documento
    self._valor_documento = Decimal(str(val), 2)
TypeError: optional argument must be a context

----------------------------------------------------------------------
Ran 111 tests in 0.690s

FAILED (errors=35, skipped=47)

Aqui em http://stackoverflow.com/questions/13194384/instantiate-decimal-class se discute um pouco sobre esta questão.

Geração de boletos com registro do Bradesco (Carteira 09)

O fim do boleto sem registro foi anunciado pela Federação Brasileira dos Bancos (Febraban) no início do ano como parte do Projeto Nova Plataforma de Cobrança, que tem o objetivo de trazer mais transparência para o mercado de pagamento. A aplicação da nova regra será realizada em etapas, de acordo com o cronograma divulgado pela instituição:

Junho de 2015 - Fim da oferta da cobrança sem registros para novos clientes
Agosto de 2015 - Início da operação da base centralizadora de benefícios
Dezembro de 2016 - Término da migração das carteiras de cobrança sem registro para a modalidade registrada
Janeiro de 2017 - Início da operação da base centralizadora de títulos

Arquivos de remessa / retorno

@seocam escreveu uma biblioteca para isso. Acho que faz sentido juntar pyboleto/cnab240 para estar no mesmo projeto.
Talvez podia ser o começo de um biblioteca python business brazil.

Nova implementação boleto Caixa

https://github.com/arthurfurlan/pyboleto

Esse repo não é um fork do repo oficial, então não da pra fazer um simples merge, vou ter que refazer as modificações na mão.

Mas eu fiquei na dúvida se vale a pena ou não. Me parece que o calculo do nosso_numero que ele utiliza eh bem diferente, não sei dizer se está certo ou se está errado. Já que nunca houve um bug reclamando de boletos da Caixa.

Alguém poderia:

Talvez os dois funcionem mas sejam carteiras distintas. Não sei.

Invalid date, must be between 1997/07/01 and 2024/11/15

Olá,
O código fonte do pacote data.py. Vi o seguinte trecho de código:

due_date_days = (self.data_vencimento - _EPOCH).days
        if not (9999 >= due_date_days >= 0):
            raise TypeError(
                "Invalid date, must be between 1997/07/01 and 2024/11/15")

Fiquei curioso. Gostaria de saber por que existe essa validação de vencimento apenas entre 1997/07/01 e 2024/11/15

Homologação Caixa

Estou passando pela homologação da caixa para os boletos não registrados.

Segue algumas observações, que impediram a homologação. Espero em breve fazer o pull request.

Campo Beneficiário
Conteúdo Atual: Cedente
Conteúdo Esperado: Beneficiário

Campo Instruções
Conteúdo Atual: Instruções
Conteúdo Esperado: Instruções (Texto de Responsabilidade do Beneficiário)

Campo Agência / Código Beneficiário
Conteúdo Atual: Agência/Código cedente
Conteúdo Esperado: Agência / Código Beneficiário

Caixa formato SIGCB

Olá.
Primeiramente parabéns pela brilhante iniciativa. Gostaria de saber se a biblioteca possui suporte a geração de boletos da caixa no formato sigcb ao invés do sicob.

Obrigado e até breve!

Retornar valores gerados pela pyboleto

Pessoal, bom dia.

Vocês veem algum problema em retornar valores gerados na pyboleto? (como DV do barcode, por exemplo). Vou precisar desses valores e se não for algo que atrapalhe ou gere alguma vulnerabilidade na biblioteca, já subo pra Pyboleto tbm...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.