예제 #1
0
class BoletoCaixaSigcb(BoletoData):
    """
    Gera Dados necessários para criação de boleto para o banco Caixa
    Economica Federal
    """

    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 6)
    nosso_numero = CustomProperty('nosso_numero', 17)

    def __init__(self):
        super(BoletoCaixaSigcb, self).__init__()

        self.codigo_banco = "104"
        self.local_pagamento = ("Preferencialmente nas Casas Lotéricas e "
                                "Agências da Caixa")
        self.logo_image = "logo_bancocaixa.jpg"

    @property
    def campo_livre(self):  # 24 digits
        content = "%6s%1s%3s%1s%3s%1s%9s" % (
            self.conta_cedente.split('-')[0],
            self.modulo11(self.conta_cedente.split('-')[0]),
            self.nosso_numero[2:5],
            self.nosso_numero[0:1],
            self.nosso_numero[5:8],
            self.nosso_numero[1:2],
            self.nosso_numero[8:17]
        )
        dv_content = self.modulo11(content)

        return "%24s%1s" % (content, dv_content)

    def format_nosso_numero(self):
        return self.nosso_numero
class BoletoBanrisul(BoletoData):
    conta_cedente = CustomProperty('conta_cedente', 6)
    nosso_numero = CustomProperty('nosso_numero', 8)

    def __init__(self):
        BoletoData.__init__(self)
        self.codigo_banco = "041"
        self.logo_image = "logo_banrisul.jpg"

    @property
    def campo_livre(self):
        content = '21%04d%07d%08d40' % (int(
            self.agencia_cedente), int(
                self.conta_cedente), int(self.nosso_numero))
        return '%s%s' % (content, self._dv_campo_livre(content))

    # From http://jrimum.org/bopepo/browser/trunk/src/br/com/nordestefomento/
    # jrimum/bopepo/campolivre/AbstractCLBanrisul.java
    def _dv_campo_livre(self, campo_livre):
        dv = self.modulo10(campo_livre)
        while True:
            restoMod11 = self.modulo11(campo_livre + str(dv), 7, 1)
            if restoMod11 != 1:
                break
            dv += 1
            dv %= 10

        return str(dv) + str(11 - restoMod11)
예제 #3
0
class BoletoSicoob(BoletoData):
    '''Implementa Boleto Sicoob

        Gera Dados necessários para criação de boleto para o banco Sicoob
    '''

    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 6)
    codigo_beneficiario = CustomProperty('codigo_beneficiario', 7)
    nosso_numero = CustomProperty('nosso_numero', 7)

    carteira = CustomProperty('carteira', 1)

    def __init__(self):
        super(BoletoSicoob, self).__init__()

        self.codigo_banco = "756"
        self.logo_image = "logo_sicoob.jpg"
        self.especie_documento = 'DM'
        self.label_cedente = 'Coop Contr/Cód Beneficiário'
        self.local_pagamento = 'Pagável Preferencialmente nas Cooperativas ' +\
            'da Rede Sicoob ou Qualquer Banco até o Vencimento.'

    @property
    def modalidade(self):
        return '01' if self.carteira == '1' else '03'

    @property
    def dv_nosso_numero(self):
        composto = "%4s%10s%7s" % (self.agencia_cedente,
                                   self.codigo_beneficiario.zfill(10),
                                   self.nosso_numero)
        constante = '319731973197319731973'
        soma = 0
        for i in range(21):
            soma += int(composto[i]) * int(constante[i])
        resto = soma % 11
        return '0' if (resto == 1 or resto == 0) else 11 - resto

    @property
    def agencia_conta_cedente(self):
        return "%s/%s" % (self.agencia_cedente, self.codigo_beneficiario)

    def format_nosso_numero(self):
        return "%8s-%1s" % (self.nosso_numero, self.dv_nosso_numero)

    @property
    def codigo_dv_banco(self):
        return self.codigo_banco

    @property
    def campo_livre(self):
        content = "%1s%4s%2s%7s%7s%1s%3s" % (
            self.carteira, self.agencia_cedente, self.modalidade,
            self.codigo_beneficiario, self.nosso_numero, self.dv_nosso_numero,
            '001')
        return content
예제 #4
0
class BoletoCaixa(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Caixa
        Economica Federal

    '''
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 6)
    codigo_beneficiario = CustomProperty('codigo_beneficiario', 6)
    '''
        Este numero tem o inicio fixo
        Carteira SR: 80, 81 ou 82
        Carteira CR: 90 (Confirmar com gerente qual usar)

    '''
    nosso_numero = CustomProperty('nosso_numero', 10)

    def __init__(self):
        super(BoletoCaixa, self).__init__()

        self.codigo_banco = "104"
        self.local_pagamento = "Preferencialmente nas Casas Lotéricas e \
Agências da Caixa"

        self.logo_image = "logo_bancocaixa.jpg"

    @property
    def agencia_conta_cedente(self):
        return "%s/%s-%s" % (self.agencia_cedente, self.codigo_beneficiario,
                             self.modulo11(self.codigo_beneficiario))

    @property
    def dv_nosso_numero(self):
        numero = "%1s4%15s" % (self.carteira, self.nosso_numero.zfill(15))
        return self.modulo11(numero)

    @property
    def campo_livre(self):
        nosso_numero_completo = self.format_nosso_numero()
        content = "%6s%1s%3s%1s%3s%1s%9s" % (
            self.codigo_beneficiario,
            self.modulo11(self.codigo_beneficiario),
            nosso_numero_completo[2:5],
            self.carteira,
            nosso_numero_completo[5:8],
            '4',  # Beneficiário emite,
            nosso_numero_completo[8:17],
        )
        return "%s%s" % (content, self.modulo11(content))

    def format_nosso_numero(self):
        content = "%1s4%15s-%1s" % (
            self.carteira,
            self.nosso_numero.zfill(15),
            self.dv_nosso_numero,
        )
        return content
예제 #5
0
class BoletoItau(BoletoData):
    """
    Implementa Boleto Itaú

    Gera Dados necessários para criação de boleto para o banco Itau
    Todas as carteiras com excessão das que utilizam 15 dígitos: (106,107,
    195,196,198)
    """

    # Nosso numero (sem dv) com 8 digitos
    nosso_numero = CustomProperty('nosso_numero', 8)
    # Conta (sem dv) com 5 digitos
    conta_cedente = CustomProperty('conta_cedente', 5)
    #  Agência (sem dv) com 4 digitos
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    carteira = CustomProperty('carteira', 3)

    def __init__(self):
        super(BoletoItau, self).__init__()

        self.codigo_banco = "341"
        self.logo_image = "logo_itau.jpg"
        self.especie_documento = 'DM'

    @property
    def dv_nosso_numero(self):
        composto = "%4s%5s%3s%8s" % (self.agencia_cedente, self.conta_cedente,
                                     self.carteira, self.nosso_numero)
        return self.modulo10(composto)

    @property
    def dv_agencia_conta_cedente(self):
        agencia_conta = "%s%s" % (self.agencia_cedente, self.conta_cedente)
        return self.modulo10(agencia_conta)

    @property
    def agencia_conta_cedente(self):
        return "%s/%s-%s" % (self.agencia_cedente, self.conta_cedente,
                             self.dv_agencia_conta_cedente)

    def format_nosso_numero(self):
        return "%3s/%8s-%1s" % (self.carteira, self.nosso_numero,
                                self.dv_nosso_numero)

    @property
    def campo_livre(self):
        content = "%3s%8s%1s%4s%5s%1s%3s" % (self.carteira,
                                             self.nosso_numero,
                                             self.dv_nosso_numero,
                                             self.agencia_cedente,
                                             self.conta_cedente,
                                             self.dv_agencia_conta_cedente,
                                             '000'
                                             )
        return content
예제 #6
0
class BoletoSicredi(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o Banco Sicredi
    '''
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 5)
    posto = CustomProperty('posto', 2)
    carteira = CustomProperty('carteira', 1)
    # Nosso numero (sem dv) com 8 digitos
    # AA/BXXXXX-DV
    # Pag. 6 manual cnab 400
    nosso_numero = CustomProperty('nosso_numero', 8)

    def __init__(self):
        '''
            Construtor para boleto do Banco Sicredi

            Args:
                format_convenio Formato do convenio 6, 7 ou 8
                format_nnumero Formato nosso numero 1 ou 2
        '''
        super(BoletoSicredi, self).__init__()

        self.codigo_banco = "748"
        self.local_pagamento = u'Pagável prefencialmente nas Coop. de Crédito Sicredi'
        self.logo_image = "logo_sicredi.jpg"

    def format_ano(self):
        ano = str(self.data_vencimento.strftime('%y'))
        ano = ano.zfill(2)
        return ano

    @property
    def dv_nosso_numero(self):
        composto = "%s%s%s%s" % (self.agencia_cedente, self.posto,
                                 self.conta_cedente, self.nosso_numero)
        composto = self.modulo11(composto)
        return composto

    def format_nosso_numero(self):
        return "%s/%s-%s" % (self.nosso_numero[:2], self.nosso_numero[2:],
                             self.dv_nosso_numero)

    @property
    def campo_livre(self):
        content = "1%s%s%s%s%s%s%s" % (
            self.carteira, self.nosso_numero, self.dv_nosso_numero,
            self.agencia_cedente, self.posto, self.conta_cedente, '10')
        content += str(self.modulo11(content))
        return content
예제 #7
0
class BoletoHsbcComRegistro(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco HSBC
        com registro
    '''
    # Nosso numero (sem dv) sao 10 digitos
    nosso_numero = CustomProperty('nosso_numero', 10)

    def __init__(self):
        super(BoletoHsbcComRegistro, self).__init__()

        self.codigo_banco = "399"
        self.logo_image = "logo_bancohsbc.jpg"
        self.carteira = 'CSB'
        self.especie_documento = 'PD'

    @property
    def dv_nosso_numero(self):
        resto = self.modulo11(self.nosso_numero, 7, 1)
        if resto == 0 or resto == 1:
            return 0
        else:
            return 11 - resto

    @property
    def campo_livre(self):
        content = "%10s%1s%4s%7s001" % (self.nosso_numero,
                                        self.dv_nosso_numero,
                                        self.agencia_cedente.split('-')[0],
                                        self.conta_cedente.split('-')[0])
        return content
예제 #8
0
class BoletoBankOfAmerica(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Bank Of America
    '''

    nosso_numero = CustomProperty('nosso_numero', 11)
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 7)

    #     numero_conveio = CustomProperty('numero_convenio', 10)

    def __init__(self):
        super(BoletoBankOfAmerica, self).__init__()

        self.codigo_banco = "755"
        self.logo_image = "logo_bankofamerica.jpg"
        self.carteira = '02'
        self.local_pagamento = 'PAGAVEL EM QUALQUER BANCO ATE O VENCIMENTO'

    def format_nosso_numero(self):
        print "passou format_nosso_numero"
        return "%s" % (str(self.nosso_numero[1:len(self.nosso_numero) - 1] +
                           "024"))

    @property
    def dv_nosso_numero(self):
        resto2 = self.modulo11(self.carteira + self.nosso_numero, 7, 1)
        digito = 11 - resto2
        if digito == 10:
            dv = 'P'
        elif digito == 11:
            dv = 0
        else:
            dv = digito
        return ''

    @property
    def campo_livre(self):
        #         content = '{0:.10}{2:.11}{3:.7}{4:.1}'.format(
        #             #self.numero_convenio[0],
        #             "0349026921")
        #             self.nosso_numero.zfill(11),
        #             self.conta_cedente.split('-')[0],
        #             )
        print self.nosso_numero
        content = "000349026921" + self.nosso_numero[1:-1] + "024"
        return content
예제 #9
0
class BoletoSantander(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Santander
    '''

    nosso_numero = CustomProperty('nosso_numero', 12)

    #: Também chamado de "ponto de venda"
    agencia_cedente = CustomProperty('agencia_cedente', 4)

    #: Também chamdo de código do cedente, se for uma conta de 9 dígitos
    #: ignorar os 2 primeiros
    conta_cedente = CustomProperty('conta_cedente', 7)

    def __init__(self):
        super(BoletoSantander, self).__init__()

        self.codigo_banco = "033"
        self.logo_image = "logo_santander.png"
        self.carteira = '102'
        # IOS - somente para Seguradoras (Se 7% informar 7, limitado 9%)
        # Demais clientes usar 0 (zero)
        self.ios = "0"

    def format_nosso_numero(self):
        return "%s-%s" % (self.nosso_numero, self._dv_nosso_numero())

    def _dv_nosso_numero(self):
        return str(self.modulo11(self.nosso_numero, 9, 0))

    @property
    def campo_livre(self):
        content = "".join([
            '9',
            self.conta_cedente[-7:],
            self.nosso_numero,
            self._dv_nosso_numero(),
            self.ios,
            self.carteira,
        ])
        return content

    @property
    def agencia_conta_cedente(self):
        return "%s/%s" % (self.agencia_cedente, self.conta_cedente[-7:])
예제 #10
0
class BoletoCaixa(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Caixa
        Economica Federal

    '''

    conta_cedente = CustomProperty('conta_cedente', 11)
    '''
        Este numero tem o inicio fixo
        Carteira SR: 80, 81 ou 82
        Carteira CR: 90 (Confirmar com gerente qual usar)

    '''
    nosso_numero = CustomProperty('nosso_numero', 10)

    def __init__(self):
        super(BoletoCaixa, self).__init__()

        self.codigo_banco = "104"
        self.local_pagamento = "Preferencialmente nas Casas Lotéricas e \
Agências da Caixa"
        self.logo_image = "logo_bancocaixa.jpg"

    @property
    def dv_nosso_numero(self):
        resto2 = self.modulo11(self.nosso_numero.split('-')[0], 9, 1)
        digito = 11 - resto2
        if digito == 10 or digito == 11:
            dv = 0
        else:
            dv = digito
        return dv

    @property
    def campo_livre(self):
        content = "%10s%4s%11s" % (self.nosso_numero,
                                   self.agencia_cedente,
                                   self.conta_cedente.split('-')[0])
        return content

    def format_nosso_numero(self):
        return self.nosso_numero + '-' + str(self.dv_nosso_numero)
class BoletoBradesco(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Bradesco
    '''

    nosso_numero = CustomProperty('nosso_numero', 11)
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 7)

    def __init__(self):
        super(BoletoBradesco, self).__init__()

        self.codigo_banco = "237"
        self.logo_image = "logo_bancobradesco.jpg"
        self.carteira = '06'
        self.local_pagamento = 'Pagável Preferencialmente ' +\
            'na Rede Bradesco ou Bradesco Expresso.'

    def format_nosso_numero(self):
        return "%s/%s-%s" % (self.carteira, self.nosso_numero,
                             self.dv_nosso_numero)

    @property
    def dv_nosso_numero(self):
        resto2 = self.modulo11(self.carteira + self.nosso_numero, 7, 1)
        digito = 11 - resto2
        if digito == 10:
            dv = 'P'
        elif digito == 11:
            dv = 0
        else:
            dv = digito
        return dv

    @property
    def campo_livre(self):
        content = '{0:.4}{1:.2}{2:.11}{3:.7}{4:.1}'.format(
            self.agencia_cedente.split('-')[0], self.carteira.zfill(2),
            self.nosso_numero.zfill(11),
            self.conta_cedente.split('-')[0], '0')
        return content
예제 #12
0
파일: bradesco.py 프로젝트: trumae/pyboleto
class BoletoBradesco(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Bradesco
    '''

    nosso_numero = CustomProperty('nosso_numero', 11)
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 7)

    def __init__(self):
        super(BoletoBradesco, self).__init__()

        self.codigo_banco = "237"
        self.logo_image = "logo_bancobradesco.jpg"
        self.carteira = '06'

    def format_nosso_numero(self):
        return "%s/%s-%s" % (self.carteira, self.nosso_numero,
                             self.dv_nosso_numero)

    @property
    def dv_nosso_numero(self):
        numero = self.carteira + self.nosso_numero
        resto = self.modulo11(num=numero, base=7, r=1)

        if resto == 1:
            digito = 'P'
        elif resto == 0:
            digito = resto
        else:
            digito = 11 - resto

        return digito

    @property
    def campo_livre(self):
        content = "%4s%2s%11s%7s%1s" % (self.agencia_cedente.split('-')[0],
                                        self.carteira, self.nosso_numero,
                                        self.conta_cedente.split('-')[0], '0')
        return content
class BoletoCecred(BoletoData):
    '''Implementa Boleto Cecred

        Gera Dados necessários para criação de boleto para o banco Cecred
    '''

    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 6)
    codigo_beneficiario = CustomProperty('codigo_beneficiario', 6)
    nosso_numero = CustomProperty('nosso_numero', 9)

    carteira = CustomProperty('carteira', 1)

    def __init__(self):
        super(BoletoCecred, self).__init__()

        self.codigo_banco = "085"
        self.logo_image = "logo_cecred.jpg"
        self.especie_documento = 'DM'
        self.label_cedente = u'Agência/Código Beneficiário'
        self.local_pagamento = u'Pagável Preferencialmente nas Cooperativas '\
            u'do sistema Cecred. Após venc. somente na cooperativa'

    @property
    def codigo_dv_banco(self):
        return self.codigo_banco + '-1'

    def format_nosso_numero(self):
        return u"%s%s" % (re.sub('[^0-9]', '',
                                 self.conta_cedente), self.nosso_numero)

    @property
    def campo_livre(self):
        content = "%6s%8s%9s%2s" % (
            self.codigo_beneficiario.zfill(6),
            re.sub('[^0-9]', '', self.conta_cedente),
            self.nosso_numero[len(self.nosso_numero.zfill(9)) - 9:],
            self.carteira.zfill(2))
        return content
예제 #14
0
class BoletoHsbc(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco HSBC
    '''

    numero_documento = CustomProperty('numero_documento', 13)

    def __init__(self):
        super(BoletoHsbc, self).__init__()

        self.codigo_banco = "399"
        self.logo_image = "logo_bancohsbc.jpg"
        self.carteira = 'CNR'

    def format_nosso_numero(self):
        nosso_numero = self.nosso_numero
        # Primeiro DV
        nosso_numero += str(self.modulo11(nosso_numero))
        # Cobrança com vencimento = 4
        nosso_numero += "4"
        # Segundo DV
        sum_params = int(nosso_numero) + int(self.conta_cedente)
        sum_params += int(self.data_vencimento.strftime('%d%m%y'))
        sum_params = str(sum_params)
        nosso_numero += str(self.modulo11(sum_params))
        return nosso_numero

    @property
    def data_vencimento_juliano(self):
        data_vencimento = str(self.data_vencimento.timetuple().tm_yday)
        data_vencimento += str(self.data_vencimento.year)[-1:]
        return data_vencimento.zfill(4)

    @property
    def campo_livre(self):
        content = "%7s%13s%4s2" % (self.conta_cedente,
                                   self.nosso_numero,
                                   self.data_vencimento_juliano)
        return content
예제 #15
0
class BoletoBB(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o Banco do Brasil
    '''

    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 8)

    def __init__(self, format_convenio, format_nnumero):
        '''
            Construtor para boleto do Banco deo Brasil

            Args:
                format_convenio Formato do convenio 4, 6, 7 ou 8
                format_nnumero Formato nosso numero 1 ou 2
                    (apenas para convenio 6)
        '''
        super(BoletoBB, self).__init__()

        self.codigo_banco = "001"
        self.carteira = 18
        self.logo_image = "logo_bb.jpg"

        # Size of convenio 4, 6, 7 or 8
        self.format_convenio = format_convenio

        #  Nosso Numero format. 1 or 2
        #  Used only for convenio=6
        #  1: Nosso Numero with 5 positions
        #  2: Nosso Numero with 17 positions
        self.format_nnumero = format_nnumero

        self._convenio = ""
        self._nosso_numero = ""

    def format_nosso_numero(self):
        if self.format_convenio == 7:
            return '{:.7}'.format(self.convenio.zfill(7)) + '{:.10}'.format(
                self.nosso_numero)
        else:
            return "%s%s-%s" % (self.convenio, self.nosso_numero,
                                self.dv_nosso_numero)

    # Nosso numero (sem dv) sao 11 digitos
    def _get_nosso_numero(self):
        return self._nosso_numero

    def _set_nosso_numero(self, val):
        val = str(val)
        if self.format_convenio == 4:
            nn = val.zfill(7)
        elif self.format_convenio == 6:
            if self.format_nnumero == 1:
                nn = val.zfill(5)
            elif self.format_nnumero == 2:
                nn = val.zfill(17)
        elif self.format_convenio == 7:
            nn = val.zfill(10)
        elif self.format_convenio == 8:
            nn = val.zfill(9)
        self._nosso_numero = nn

    nosso_numero = property(_get_nosso_numero, _set_nosso_numero)

    def _get_convenio(self):
        return self._convenio

    def _set_convenio(self, val):
        self._convenio = str(val).ljust(self.format_convenio, '0')

    convenio = property(_get_convenio, _set_convenio)

    @property
    def agencia_conta_cedente(self):
        return "%s-%s / %s-%s" % (
            self.agencia_cedente, self.modulo11(self.agencia_cedente),
            self.conta_cedente, self.modulo11(self.conta_cedente))

    @property
    def dv_nosso_numero(self):
        '''
            This function uses a modified version of modulo11
        '''
        num = self.convenio + self.nosso_numero
        base = 2
        fator = 9
        soma = 0
        for c in reversed(num):
            soma += int(c) * fator
            if fator == base:
                fator = 10
            fator -= 1
        r = soma % 11
        if r == 10:
            return 'X'
        return r

    @property
    def campo_livre(self):
        if self.format_convenio == 4:
            content = "%s%s%s%s%s" % (self.convenio, self.nosso_numero,
                                      self.agencia_cedente, self.conta_cedente,
                                      self.carteira[:2])
        elif self.format_convenio in (7, 8):
            content = "000000%s%s%s" % (self.convenio, self.nosso_numero,
                                        self.carteira[:2])
        elif self.format_convenio == 6:
            if self.format_nnumero == 1:
                content = "%s%s%s%s%s" % (
                    self.convenio, self.nosso_numero, self.agencia_cedente,
                    self.conta_cedente, self.carteira[:2])
            if self.format_nnumero == 2:
                content = "%s%s%s" % (self.convenio, self.nosso_numero, '21'
                                      )  # numero do serviço

        return content
class BoletoSicredi(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o Banco Sicredi
    '''
    agencia_cedente = CustomProperty('agencia_cedente', 4)
    conta_cedente = CustomProperty('conta_cedente', 8)
    posto = CustomProperty('posto', 2)
    convenio = CustomProperty('convenio', 4)
    # Nosso numero (sem dv) com 8 digitos
    nosso_numero = CustomProperty('nosso_numero', 8)

    def __init__(self):
        '''
            Construtor para boleto do Banco Sicredi

            Args:
                format_convenio Formato do convenio 6, 7 ou 8
                format_nnumero Formato nosso numero 1 ou 2
        '''
        super(BoletoSicredi, self).__init__()

        self.codigo_banco = "748"
        self.carteira = 3
        self.posto = "05"
        self.logo_image = "logo_sicredi.jpg"

        # Size of convenio 6, 7 or 8
        self.format_convenio = 5

        #  Nosso Numero format. 1 or 2
        #  1: Nosso Numero with 5 positions
        #  2: Nosso Numero with 17 positions
        self.format_nnumero = 1  # self.nosso_numero

    def format_ano(self):
        ano = str(self.data_vencimento.strftime('%y'))
        ano = ano.zfill(2)
        return ano

    def format_nosso_numero(self):

        # 14 ano + 2 : Nosso Número deve ser apresentado no formato
        # AA/BXXXXX-D, onde:
        return "%s/2%s-%s" % (self.format_ano(), self.nosso_numero,
                              self.dv_nosso_numero)

    # Nosso numero (sem dv) sao 11 digitos
    def _get_nosso_numero(self):
        return self._nosso_numero

    def _set_nosso_numero(self, val):
        val = str(val)
        if self.format_convenio == 5:
            if self.format_nnumero == 1:
                nn = val.zfill(5)
            elif self.format_nnumero == 2:
                nn = val.zfill(17)
        elif self.format_convenio == 7:
            nn = val.zfill(10)
        elif self.format_convenio == 8:
            nn = val.zfill(9)
        self._nosso_numero = nn

    nosso_numero = property(_get_nosso_numero, _set_nosso_numero)

    def _get_convenio(self):
        return self._convenio

    def _set_convenio(self, val):
        self._convenio = str(val).rjust(self.format_convenio, '0')

    convenio = property(_get_convenio, _set_convenio)

    @property
    def agencia_conta_cedente(self):
        return "%s.%s.%s" % (self.agencia_cedente, self.posto, self.convenio)

    @property
    def dv_nosso_numero(self):
        dv = "%s%s%s%s2%s" % (self.agencia_cedente, self.posto, self.convenio,
                              self.format_ano(), self.nosso_numero)
        dv = self.modulo11(dv)
        return dv

    @property
    def campo_livre(self):
        content = str("")
        if self.format_nnumero == 1:
            #        "3027050000414205586")
            # 14 ano + 2 : Nosso Número deve ser apresentado no formato
            # AA/BXXXXX-D, onde:
            content = "%s1%s2%s%s%s%s%s10" % (self.carteira, self.format_ano(
            ), self.nosso_numero, self.dv_nosso_numero, self.agencia_cedente,
                                              self.posto, self.convenio)
            n = self.modulo11(content)
            if n > 9:
                n = 1
            content += str(n)
        return str(content)

    @property
    def codigo_dv_banco(self):
        cod = "%s-X" % (self.codigo_banco)
        return cod
예제 #17
0
class BoletoCaixa(BoletoData):
    '''
    Gera Dados necessários para criação de boleto para o banco Caixa
    Economica Federal

    '''

    emissao_cliente = None

    nosso_numero_cliente = None

    conta_cedente = CustomProperty('conta_cedente', 6)

    _nosso_numero = CustomProperty('nosso_numero', 15)

    def __init__(self):
        super(BoletoCaixa, self).__init__()

        self.codigo_banco = "104"
        self.local_pagamento = "Preferencialmente nas Casas Lotéricas e agências da Caixa"
        self.logo_image = "logo_bancocaixa.jpg"

        self.conta_cedente = self.conta_cedente + '-' + str(
            self.modulo11(self.conta_cedente, 9, 1))

    @property
    def nosso_numero(self):
        if self.nosso_numero_cliente == None or self.emissao_cliente == None:
            raise ValueError(
                "nosso_numero_cliente e emissao_cliente must be set")
        if not self.nosso_numero_cliente:
            return ''.zfill(15)
        else:
            return ('14' if self.emissao_cliente else
                    '11') + self.nosso_numero_cliente.zfill(15)

    @nosso_numero.setter
    def nosso_numero(self, n):
        self._nosso_numero = n

    @property
    def dv_nosso_numero(self):
        resto2 = self.modulo11(self.nosso_numero.split('-')[0], 9, 1)
        digito = 11 - resto2

        if digito == 10 or digito == 11:
            dv = 0
        else:
            dv = digito

        return dv

    @property
    def campo_livre(self):  # 24 digits
        content = "%6s%1s%3s%1s%3s%1s%9s" % (
            self.conta_cedente.split('-')[0],
            self.modulo11(
                self.conta_cedente.split('-')[0]), self.nosso_numero[2:5],
            self.nosso_numero[0:1], self.nosso_numero[5:8],
            self.nosso_numero[1:2], self.nosso_numero[8:17])
        dv_content = self.modulo11(content)

        return "%24s%1s" % (content, dv_content)

    def format_nosso_numero(self):
        return self.nosso_numero + '-' + str(self.dv_nosso_numero)