diff --git a/pyboleto/data.py b/pyboleto/data.py index 1b1b0bd..b0f022a 100644 --- a/pyboleto/data.py +++ b/pyboleto/data.py @@ -41,6 +41,7 @@ class CustomProperty(object): :type length: integer """ + def __init__(self, name, length): self.name = name self.length = length @@ -117,6 +118,8 @@ class BoletoData(object): **Parâmetros não obrigatórios**: + :param codigo_barras: Se o codigo de barras for informado, não calcula + :param linha_digitavel_ext: Se a linha digitável for informada (com espaços), não calcula :param quantidade: :param especie: Nunca precisa mudar essa opção *(default: 'R$')* :param especie_documento: @@ -161,6 +164,8 @@ def __init__(self, **kwargs): self.sacado_endereco = kwargs.pop('sacado_endereco', "") self.sacado_bairro = kwargs.pop('sacado_bairro', "") self.sacado_cep = kwargs.pop('sacado_cep', "") + self.codigo_barras = kwargs.pop('codigo_barras', "") + self.linha_digitavel_ext = kwargs.pop('linha_digitavel_ext', "") if kwargs: raise TypeError("Paramêtro(s) desconhecido: %r" % (kwargs, )) self._cedente_endereco = None @@ -187,6 +192,9 @@ def barcode(self): Total 44 """ + if self.codigo_barras != "": + return self.codigo_barras + for attr, length, data_type in [ ('codigo_banco', 3, str), ('moeda', 1, str), @@ -435,6 +443,10 @@ def linha_digitavel(self): Esta é a linha que o cliente pode utilizar para digitar se o código de barras não estiver legível. """ + + if self.linha_digitavel_ext != "": + return self.linha_digitavel_ext + linha = self.barcode if not linha: raise BoletoException("Boleto doesn't have a barcode") diff --git a/pyboleto/pdf.py b/pyboleto/pdf.py index c6fdc37..d05d8a9 100644 --- a/pyboleto/pdf.py +++ b/pyboleto/pdf.py @@ -780,7 +780,7 @@ def drawBoletoCarneDuplo(self, boletoDados1, boletoDados2=None): d = self.drawBoletoCarne(boletoDados1, y) y += d[1] + 6 * mm # self._drawHorizontalCorteLine(0, y, d[0]) - y += 7 * mm + # y += 7 * mm if boletoDados2: self.drawBoletoCarne(boletoDados2, y) diff --git a/tests/test_banco_itau_com_dados_calculados.py b/tests/test_banco_itau_com_dados_calculados.py new file mode 100644 index 0000000..3322502 --- /dev/null +++ b/tests/test_banco_itau_com_dados_calculados.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +import unittest +import datetime + +from pyboleto.bank.itau import BoletoItau + +from .testutils import BoletoTestCase + + +class TestBancoItauComDadosCalculados(unittest.TestCase): + def setUp(self): + self.dados = [] + for i in range(3): + d = BoletoItau() + d.carteira = '109' + d.agencia_cedente = '0293' + d.conta_cedente = '01328' + d.conta_cedente_dv = '1' + d.data_vencimento = datetime.date(2009, 10, 19) + d.data_documento = datetime.date(2009, 10, 19) + d.data_processamento = datetime.date(2009, 10, 19) + d.valor_documento = 29.80 + d.nosso_numero = str(157 + i) + d.numero_documento = str(456 + i) + d.linha_digitavel_ext = "34191.09008 00015.710296 30132.810000 4 43950000002888" + d.codigo_barras = "34194439500000029801090000015710293013281999" + self.dados.append(d) + + def test_linha_digitavel(self): + self.assertEqual( + self.dados[0].linha_digitavel, + '34191.09008 00015.710296 30132.810000 4 43950000002888' + ) + + def test_codigo_de_barras(self): + self.assertEqual( + self.dados[0].barcode, + '34194439500000029801090000015710293013281999' + ) + + def test_agencia(self): + self.assertEqual(self.dados[0].agencia_cedente, '0293') + + def test_conta(self): + self.assertEqual(self.dados[0].conta_cedente, '01328') + + def test_dv_nosso_numero(self): + self.assertEqual(self.dados[0].dv_nosso_numero, 1) + + def test_dv_agencia_conta_cedente(self): + self.assertEqual(self.dados[0].dv_agencia_conta_cedente, 0) + + +suite = unittest.TestLoader().loadTestsFromTestCase( + TestBancoItauComDadosCalculados) + +if __name__ == '__main__': + unittest.main()