br_cnab/febraban/cnab_240/bancos/bradesco.py
# -*- coding: utf-8 -*-
# © 2015 Luis Felipe Mileo
# Fernando Marcato Rodrigues
# Daniel Sadamo Hirayama
# KMEE - www.kmee.com.br
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from ..cnab_240 import Cnab240
import re
import string
from decimal import Decimal
class Bradesco240(Cnab240):
def __init__(self):
super(Cnab240, self).__init__()
from cnab240.bancos import bradesco
self.bank = bradesco
def _prepare_header(self):
vals = super(Bradesco240, self)._prepare_header()
vals['servico_servico'] = 1
vals['cedente_convenio'] = self.order.payment_mode_id.bank_account_id.\
codigo_convenio
vals['controlecob_numero'] = self.order.id
vals['controlecob_data_gravacao'] = self.data_hoje()
vals['nome_do_banco'] = 'BANCO BRADESCO S.A'
return vals
def _prepare_segmento(self, line):
vals = super(Bradesco240, self)._prepare_segmento(line)
if vals['prazo_protesto'] < 3:
vals['prazo_protesto'] = 3
vals['codigo_moeda'] = 9
vals['prazo_baixa'] = unicode(str(
vals['prazo_baixa']), "utf-8")
vals['desconto1_percentual'] = Decimal('0.00')
vals['valor_iof'] = Decimal('0.00')
# vals['cobrancasimples_valor_titulos'] = Decimal('02.00')
vals['identificacao_titulo_banco'] = self.get_identificacao_titulo(
line)
vals['cedente_conta_dv'] = unicode(str(
vals['cedente_conta_dv']), "utf-8")
vals['cedente_agencia_dv'] = unicode(str(
vals['cedente_agencia_dv']), "utf-8")
vals['cedente_dv_ag_cc'] = unicode(str(
vals['cedente_dv_ag_cc']), "utf-8")
vals['cobranca_carteira'] = 1
vals['cobranca_cadastramento'] = 1
vals['cobranca_documentoTipo'] = 1
vals['cobranca_distribuicaoBloqueto'] = 2
vals['juros_cod_mora'] = 2
return vals
# Override cnab_240.nosso_numero. Diferentes números de dígitos entre
# CEF e Itau
def nosso_numero(self, format):
digito = format[-1:]
carteira = format[:3]
nosso_numero = re.sub(
'[%s]' % re.escape(string.punctuation), '', format[3:-1] or '')
return carteira, nosso_numero, digito
def get_identificacao_titulo(self, line):
carteira = line.payment_mode_id.boleto_carteira
return "%s%s%s%s" % (
str(carteira).zfill(3),
'0'.zfill(5),
str(line.nosso_numero).zfill(11),
self.dv_nosso_numero(carteira, line.nosso_numero)
)
def dv_nosso_numero(self, carteira, nosso_numero):
resto2 = self.modulo11(carteira + nosso_numero.zfill(11), 7, 1)
digito = 11 - resto2
if digito == 10:
dv = 'P'
elif digito == 11:
dv = 0
else:
dv = digito
return dv
def modulo11(self, num, base=9, r=0):
if not isinstance(num, basestring):
raise TypeError
soma = 0
fator = 2
for c in reversed(num):
soma += int(c) * fator
if fator == base:
fator = 1
fator += 1
if r == 0:
soma = soma * 10
digito = soma % 11
if digito == 10:
digito = 0
return digito
if r == 1:
resto = soma % 11
return resto
def str_to_unicode(inp_str):
inp_str = unicode(inp_str, "utf-8")
return inp_str