示例#1
0
def gera_boleto_bradesco_inscricao(resp_usuario_id, days=7):
    '''
    Receives a dict filled with the data that will be sent to the billet generator
    and returns a permalink to the billet generated.
    '''
    from gestorpsi import settings
    
    user = User.objects.get( pk=int(resp_usuario_id) )
    profile = user.get_profile()
    person = profile.person

    d = Document()
    t = TypeDocument.objects.get(description='CPF')
    try:
        cpf = person.document.get(typeDocument__id=t.id).document
    except:
        cpf = ''
    try:
        addr = endereco = person.address.all()[0]
    except:
        addr = endereco = None
    if BradescoBilletData.objects.all(): # condicacao adicionada para evitar interrupcao no formulario de cadastro em 15/04/2013 (czd)
        data = BradescoBilletData.objects.all()[0]
    else:
        data = None
    
    
    org = Organization.objects.filter(organization__isnull=True).filter(person__profile__user=user)[0]
    inv = Invoice(organization=org, status=1)
    due_date = (datetime.now() + timedelta(days=days))
    inv.due_date = due_date.strftime("%Y-%m-%d")
    expiry_date = (due_date + relativedelta(months=1)).replace(day=org.default_payment_day)
    inv.expiry_date = expiry_date.strftime("%Y-%m-%d")
    try:
        if float(data.inscription_default_value) > 0:
            inv.ammount = str(data.inscription_default_value)
        else:
            inv.ammount = str(INSCRIPTION_DEFAULT_VALUE)
    except:
        inv.ammount = str(INSCRIPTION_DEFAULT_VALUE)
    
    inv.save()
    
    org.current_invoice = inv
    org.save()



    if inv.billet_url is not None and len(inv.billet_url) > 5:
        return inv.billet_url
    else:
        if data: # condicacao adicionada para evitar interrupcao no formulario de cadastro em 15/04/2013 (czd)
            dados = {}
            #INFORMANDO DADOS SOBRE O CEDENTE (quem vai receber).
            dados['cedente_nome'] = data.cedente_nome
            dados['cedente_cnpj'] = data.cedente_cnpj
            
            #INFORMANDO DADOS SOBRE O SACADO (quem vai pagar).
            dados['sacado_nome'] = person.name
            dados['sacado_cpf'] = cpf
            
            #Informando o endereço do sacado.
            try:
                dados['enderecosac_uf'] = str(endereco.city.state.shortName)
            except:
                dados['enderecosac_uf'] = ''
            try:
                dados['enderecosac_localidade'] = endereco.city.name
            except:
                dados['enderecosac_localidade'] = ''
            try:
                dados['enderecosac_cep'] = endereco.zipCode
            except:
                dados['enderecosac_cep'] = ''
            try:
                dados['enderecosac_bairro'] = str(endereco.neighborhood)
            except:
                dados['enderecosac_bairro'] = ''
            try:
                dados['enderecosac_logradouro'] = endereco.addressLine1
            except:
                dados['enderecosac_logradouro'] = ''
            try:
                dados['enderecosac_numero'] = endereco.addressNumber
            except:
                dados['enderecosac_numero'] = ''
            
            #INFORMANDO DADOS SOBRE O SACADOR AVALISTA (aquele que é contactado em caso de problemas).
            dados['sacadoravalista_nome'] = data.sacadoravalista_nome
            dados['sacadoravalista_cnpj'] = data.sacadoravalista_cnpj
            
            #Informando o endereço do sacador avalista.
            dados['enderecosacaval_uf'] = None if not hasattr(data.enderecosacaval_uf, "shortName") else data.enderecosacaval_uf.shortName
            dados['enderecosacaval_localidade'] = data.enderecosacaval_localidade 
            dados['enderecosacaval_cep'] = data.enderecosacaval_cep
            dados['enderecosacaval_bairro'] = data.enderecosacaval_bairro
            dados['enderecosacaval_logradouro'] = data.enderecosacaval_logradouro
            dados['enderecosacaval_numero'] = data.enderecosacaval_numero
            
            #INFORMANDO OS DADOS SOBRE O TÍTULO.
            
            #Informando dados sobre a conta bancaria do titulo.
            dados['contabancaria_numerodaconta'] = data.contabancaria_numerodaconta
            dados['contabancaria_numerodaconta_digito'] = data.contabancaria_numerodaconta_digito
            dados['contabancaria_carteira'] = data.contabancaria_carteira
            dados['contabancaria_agencia'] = data.contabancaria_agencia
            dados['contabancaria_agencia_digito'] = data.contabancaria_agencia_digito
            
            #Código fornecido pelo Banco para identificação do título ou identificação 
            #do título atribuído pelo emissor do título de cobrança.
            dados['titulo_nossonumero'] = ("%0.11d") % inv.id
            digito = 0
            for p in str(inv.id):
                digito += int(p)
            digito = digito % 10
            dados['titulo_digitodonossonumero'] = str(digito)
            
            
        
            dados['titulo_deducao'] = "0.00"
            dados['titulo_mora'] = "0.00"
            dados['titulo_acrecimo'] = "0.00"
            dados['titulo_valorcobrado'] = "0.00"
            dados['titulo_desconto'] = "0.00"
            dados['titulo_valor'] = str(inv.ammount)
            dados['titulo_datadodocumento'] = str(inv.date)
            dados['titulo_datadovencimento'] = str(inv.due_date)
            dados['titulo_numerododocumento'] = str(inv.id)
            
            #INFORMANDO OS DADOS SOBRE O BOLETO.
            dados['boleto_localpagamento'] = "Pagável preferencialmente no Bradesco."
            dados['boleto_instrucaoaosacado'] = "Pode ser pago em quaisquer agências."
            dados['boleto_instrucao1'] = "Após vencimento cobrar 50% de multa e 100% de juros ao dia."
            #dados['boleto_instrucao2'] = "PARA PAGAMENTO 2 até Amanhã Não cobre!"
            #dados['boleto_instrucao3'] = "PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."
            #dados['boleto_instrucao4'] = "PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"
            #dados['boleto_instrucao5'] = "PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"
            #dados['boleto_instrucao6'] = "PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"
            #dados['boleto_instrucao7'] = "PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"
            #dados['boleto_instrucao8'] = "APÓS o Vencimento, Pagável Somente na Rede X."   
            
            for p in dados.keys():
                dados[p] = smart_str(dados[p])
          
          
            url = URL_GERADOR_BOLETOS
            data = urllib.urlencode(dados)
            #print datetime.now().strftime("%y-%m-%d %H:%M:%S") 
            #raise Exception(url)
            req = urllib2.Request(url, data) #if the data parameter is here, it's a POST request
            response = urllib2.urlopen(req)
            the_page = response.read()
        
            if len(the_page) == 40:
                inv.billet_url = url+the_page
                inv.save()
                return url+the_page
            else:
                return False
    def run(self, **kwargs):
        logger = self.get_logger(**kwargs)
        logger.info("CheckAndCharge Started.")

        orgs = Organization.objects.filter(
            organization__isnull=True, active=True)
        # for p in Invoice.objects.all():
        #    p.expiry_date = p.expiry_date
        #    p.save()

        '''
        INVOICE_STATUS_CHOICES = (
            (1, _('Emitido')),
            (2, _('Pago')),
            (3, _('Excluido')),
        )
        INVOICE_TYPES = (
            (1, _('Inscription')),
            (2, _('Monthly fee')),
        )
        '''
        for org in orgs:
            last_invoice = org.current_invoice

            # correcao temporaria para evitar problemas no desenvolvimento
            try:
                len(last_invoice.status)
            except:
                last_invoice = Invoice.objects.filter(
                    organization=org).order_by('-date')[0]

            if last_invoice.status == 1:  # check if the last invoice isn't paid
                check = last_invoice.due_date > datetime.now()  # check if the invoice is not due
            elif last_invoice.status == 2:
                # check if this company last paid invoice is going to expire in
                # ten days
                check = last_invoice.expiry_date < datetime.today() + timedelta(days=10)
            else:
                check = True

            if check:  # no need to do anything with this organization
                continue
            else:  # send an email to the person responsible for the organization with a new billet to pay
                person = ProfessionalResponsible.objects.get(
                    organization=org).person
                user = person.user

                # create the new invoice
                inv = Invoice()
                inv.organization = org

                # prefered plan
                pplan = org.prefered_plan

                # verifica se ha um invoice passado para extrair um plano, caso nao,
                # atribui um plano de um mes para a quantia de funcionarios
                # cadastrados
                staff_count = org.person_set.all().count()
                if pplan is not None:
                    inv.plan = pplan
                elif last_invoice.plan is not None:
                    inv.plan = last_invoice.plan
                else:
                    inv.plan = None

                # define a data de vencimento(pagamento) do boleto
                dday = org.default_payment_day
                inv.due_date = last_invoice.expiry_date.replace(day=dday)

                # define a data de vencimento(acesso ao sistema) do boleto
                pplan = org.prefered_plan
                inv.expiry_date = inv.due_date + \
                    relativedelta(months=pplan.duration)
                inv.save()

                org.current_invoice = inv
                org.save()
                url_boleto = gera_boleto_bradesco(user.id, inv)

                email = user.email
                if email is not None and len(email) > 0:
                    bcc_list = ['*****@*****.**', user.email]
                else:
                    bcc_list = ['*****@*****.**']
                msg = EmailMessage()
                msg.subject = 'Teste: Cobrança de mensalidade'
                #temp = request.META
                # if request is None:
                msg.body = render_to_string(
                    'async_tasks/email_cobranca_mensalidade.html', locals())
                # else:
                #    from celery.schedules import discard_all
                #    discard_all()
                #    return render_to_response('async_tasks/email_cobranca_mensalidade.html', locals())
                # msg.from = 'GestoPSI <*****@*****.**>'
                msg.to = ['*****@*****.**', ]
                msg.bcc = bcc_list
                msg.content_subtype = "html"  # Main content is now text/html
                msg.send()

        logger.info("CheckAndCharge Finished.\n\n")
示例#3
0
    def run(self, **kwargs):
        logger = self.get_logger(**kwargs)
        logger.info("CheckAndCharge Started.")

        orgs = Organization.objects.filter(organization__isnull=True,
                                           active=True)
        #for p in Invoice.objects.all():
        #    p.expiry_date = p.expiry_date
        #    p.save()
        '''
        INVOICE_STATUS_CHOICES = (
            (1, _('Emitido')),
            (2, _('Pago')),
            (3, _('Excluido')),
        )
        INVOICE_TYPES = (
            (1, _('Inscription')),
            (2, _('Monthly fee')),
        )
        '''
        for org in orgs:
            last_invoice = org.current_invoice

            #correcao temporaria para evitar problemas no desenvolvimento
            try:
                len(last_invoice.status)
            except:
                last_invoice = Invoice.objects.filter(
                    organization=org).order_by('-date')[0]

            if last_invoice.status == 1:  #check if the last invoice isn't paid
                check = last_invoice.due_date > datetime.now(
                )  #check if the invoice is not due
            elif last_invoice.status == 2:
                #check if this company last paid invoice is going to expire in ten days
                check = last_invoice.expiry_date < datetime.today(
                ) + timedelta(days=10)
            else:
                check = True

            if check:  #no need to do anything with this organization
                continue
            else:  #send an email to the person responsible for the organization with a new billet to pay
                person = ProfessionalResponsible.objects.get(
                    organization=org).person
                user = person.user

                #create the new invoice
                inv = Invoice()
                inv.organization = org

                #prefered plan
                pplan = org.prefered_plan

                #verifica se ha um invoice passado para extrair um plano, caso nao,
                #atribui um plano de um mes para a quantia de funcionarios cadastrados
                staff_count = org.person_set.all().count()
                if pplan is not None:
                    inv.plan = pplan
                elif last_invoice.plan is not None:
                    inv.plan = last_invoice.plan
                else:
                    inv.plan = None

                #define a data de vencimento(pagamento) do boleto
                dday = org.default_payment_day
                inv.due_date = last_invoice.expiry_date.replace(day=dday)

                #define a data de vencimento(acesso ao sistema) do boleto
                pplan = org.prefered_plan
                inv.expiry_date = inv.due_date + relativedelta(
                    months=pplan.duration)
                inv.save()

                org.current_invoice = inv
                org.save()
                url_boleto = gera_boleto_bradesco(user.id, inv)

                email = user.email
                if email is not None and len(email) > 0:
                    bcc_list = ['*****@*****.**', user.email]
                else:
                    bcc_list = ['*****@*****.**']
                msg = EmailMessage()
                msg.subject = 'Teste: Cobrança de mensalidade'
                #temp = request.META
                #if request is None:
                msg.body = render_to_string(
                    'async_tasks/email_cobranca_mensalidade.html', locals())
                #else:
                #    from celery.schedules import discard_all
                #    discard_all()
                #    return render_to_response('async_tasks/email_cobranca_mensalidade.html', locals())
                #msg.from = 'GestoPSI <*****@*****.**>'
                msg.to = [
                    '*****@*****.**',
                ]
                msg.bcc = bcc_list
                msg.content_subtype = "html"  # Main content is now text/html
                msg.send()

        logger.info("CheckAndCharge Finished.\n\n")
示例#4
0
def make_second_copy(request, invoice):
    user = request.user

    invoice = Invoice.objects.get(pk=invoice)
    aux = Invoice.objects.filter(status=1, organization=invoice.organization, due_date__gt=datetime.now()).count()
    if aux <= 0:
        inv = Invoice()
        inv.organization = invoice.organization
        inv.due_date = datetime.now() + timedelta(days=7)
        inv.expiry_date = invoice.expiry_date
        inv.ammount = invoice.ammount
        inv.discount = invoice.discount
        inv.status = 1
        inv.plan = invoice.plan
        inv.save()

        invoice.status = 3
        invoice.save()

        data = BradescoBilletData.objects.all()[0]
        billet_url = gera_boleto_bradesco(request.user.id, inv, days=data.default_second_copy_days, second_copy=True)
        inv.billet_url = billet_url
        inv.save()
        aux = True
        message = 'Second copy details saved successfully'
    else:
        message = 'Second copy not generated: there are billets that still requiring payment.'
        aux = False

    return render_to_response('organization/second_copy.html', locals(), context_instance=RequestContext(request))
示例#5
0
def make_second_copy(request, invoice):
    user = request.user

    invoice = Invoice.objects.get(pk=invoice)
    aux = Invoice.objects.filter(status=1,
                                 organization=invoice.organization,
                                 due_date__gt=datetime.now()).count()
    if aux <= 0:
        inv = Invoice()
        inv.organization = invoice.organization
        inv.due_date = datetime.now() + timedelta(days=7)
        inv.expiry_date = invoice.expiry_date
        inv.ammount = invoice.ammount
        inv.discount = invoice.discount
        inv.status = 1
        inv.plan = invoice.plan
        inv.save()

        invoice.status = 3
        invoice.save()

        data = BradescoBilletData.objects.all()[0]
        billet_url = gera_boleto_bradesco(request.user.id,
                                          inv,
                                          days=data.default_second_copy_days,
                                          second_copy=True)
        inv.billet_url = billet_url
        inv.save()
        aux = True
        message = 'Second copy details saved successfully'
    else:
        message = 'Second copy not generated: there are billets that still requiring payment.'
        aux = False

    return render_to_response('organization/second_copy.html',
                              locals(),
                              context_instance=RequestContext(request))