Example #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
Example #2
0
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)
Example #3
0
class BoletoItau109(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 4 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(BoletoItau109, self).__init__()

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

    @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
Example #4
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
Example #5
0
class BoletoCaixaCs(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Caixa
        Economica Federal - Carteira CS
    '''

    conta_cedente = CustomProperty('conta_cedente', 19)
    '''
        Este numero tem o inicio fixo
    '''
    nosso_numero = CustomProperty('nosso_numero', 8)

    def __init__(self):
        super(BoletoCaixaCs, 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('9' + 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 = '8'  \
                  + self.nosso_numero.strip()   \
                  + self.agencia_cedente.strip() \
                  + self.conta_cedente[7:10] \
                  + self.conta_cedente[11:19]        
        return content

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

    @property
    def agencia_conta_cedente(self):
        resultado = self.conta_cedente[2:]
        return resultado
                             
Example #6
0
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, carteira='06', **kwargs):
        """
            :param carteira: Supports (06 - not registered) and
        (09 - registered).
        """
        super(BoletoBradesco, self).__init__()

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

        self.local_pagamento = kwargs.pop(
            'local_pagamento',
            "Pagável Preferencialmente na rede Bradesco ou no 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 = "%4s%2s%11s%7s%1s" % (self.agencia_cedente.split('-')[0],
                                        self.carteira, self.nosso_numero,
                                        self.conta_cedente.split('-')[0], '0')
        return content
Example #7
0
File: caixa.py Project: softlog/web
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)
Example #8
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.jpg"
        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,
            self.nosso_numero,
            self._dv_nosso_numero(),
            self.ios,
            self.carteira,
        ])
        return content
Example #9
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
Example #10
0
class BoletoCaixaSig14(BoletoData):
    '''
        Gera Dados necessários para criação de boleto para o banco Caixa
        Economica Federal

    '''

    conta_cedente = CustomProperty('conta_cedente', 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', 15)

    def __init__(self):
        super(BoletoCaixaSig14, 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_agencia_conta_cedente(self):
        conta_cedente = "%s" % (self.conta_cedente)
        dv = self.modulo11(conta_cedente)
        return dv

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

    @property
    def dv_nosso_numero(self):
        resto2 = self.modulo11('14' + self.nosso_numero, 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
        nosso_numero = '14' + self.nosso_numero
        content = "%6s%1s%3s%1s%3s%1s%9s" % (
            self.conta_cedente.split('-')[0],
            self.modulo11(self.conta_cedente.split('-')[0]), nosso_numero[2:5],
            nosso_numero[0:1], nosso_numero[5:8], nosso_numero[1:2],
            nosso_numero[8:17])
        dv_content = self.modulo11(content)

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

    def format_nosso_numero(self):
        return "14%s-%s" % (self.nosso_numero, str(self.dv_nosso_numero))
Example #11
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 "%7s%10s" % (self.convenio, 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)
        elif self.format_convenio in (7, 8):
            content = "000000%s%s%s" % (self.convenio, self.nosso_numero,
                                        self.carteira)
        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)
            if self.format_nnumero == 2:
                content = "%s%s%s" % (self.convenio, self.nosso_numero, '21'
                                      )  # numero do serviço

        return content
Example #12
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.zfill(10))

    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.strip(),
                                             self.modalidade,
                                             self.codigo_beneficiario,
                                             self.nosso_numero[:7],
                                             self.dv_nosso_numero,
                                             '000')
        

        return content