<commit_before>import csv
import xlwt
from datetime import timedelta
from threading import Thread

from django.shortcuts import render, redirect
from django.http import Http404, HttpResponse
from django.views.generic.edit import CreateView, UpdateView
from django.views.generic import ListView, DetailView
from django.core.urlresolvers import reverse_lazy, reverse
from django.core.mail import send_mail
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from django.template.loader import render_to_string
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.models import Q, Count

from adesao.models import Municipio, Responsavel, Secretario, Usuario, Historico, Uf, Cidade
from planotrabalho.models import Conselheiro, PlanoTrabalho
from adesao.forms import CadastrarUsuarioForm, CadastrarMunicipioForm
from adesao.forms import CadastrarResponsavelForm, CadastrarSecretarioForm
from adesao.utils import enviar_email_conclusao, verificar_anexo

from wkhtmltopdf.views import PDFTemplateView


# Create your views here.
def index(request):
    if request.user.is_authenticated():
        return redirect('adesao:home')
    return render(request, 'index.html')


def fale_conosco(request):
    return render(request, 'fale_conosco.html')


@login_required
def home(request):
    ente_federado = request.user.usuario.municipio
    secretario = request.user.usuario.secretario
    responsavel = request.user.usuario.responsavel
    situacao = request.user.usuario.estado_processo
    historico = Historico.objects.filter(usuario=request.user.usuario)
    historico = historico.order_by('-data_alteracao')

    if request.user.is_staff:
        return redirect('gestao:acompanhar_adesao')

    if ente_federado and secretario and responsavel and int(situacao) < 1:
        request.user.usuario.estado_processo = '1'
        request.user.usuario.save()
        message_txt = render_to_string('conclusao_cadastro.txt',
                                       {'request': request})
        message_html = render_to_string('conclusao_cadastro.email',
                                        {'request': request})
        enviar_email_conclusao(request.user, message_txt, message_html)
    return render(request, 'home.html', {'historico': historico})


def ativar_usuario(request, codigo):
    usuario = Usuario.objects.get(codigo_ativacao=codigo)

    if usuario is None:
        raise Http404()

    if timezone.now() > (usuario.data_cadastro + timedelta(days=3)):
        raise Http404()

    usuario.user.is_active = True
    usuario.save()
    usuario.user.save()

    return render(request, 'confirmar_email.html')


def sucesso_usuario(request):
    return render(request, 'usuario/mensagem_sucesso.html')


def sucesso_responsavel(request):
    return render(request, 'responsavel/mensagem_sucesso.html')


def exportar_csv(request):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.csv"'
    response.write('\uFEFF')

    writer = csv.writer(response)
    writer.writerow(['UF', 'Município', 'Cod.IBGE', 'Situação', 'Endereço', 'Bairro', 'CEP', 'Telefone', 'Email'])

    for municipio in Municipio.objects.all():
        uf = municipio.estado.sigla
        if municipio.cidade:
            cidade = municipio.cidade.nome_municipio
            cod_ibge = municipio.cidade.codigo_ibge
        else:
            cidade = municipio.estado.nome_uf
            cod_ibge = ''
        try:
            estado_processo = municipio.usuario.get_estado_processo_display()
            if estado_processo != 'Publicado no DOU':
                continue
        except ObjectDoesNotExist:
            estado_processo = 'Publicado no DOU'
        endereco = municipio.endereco
        bairro = municipio.bairro
        cep = municipio.cep
        telefone = municipio.telefone_um
        email = municipio.email_institucional_prefeito
        writer.writerow([uf, cidade, cod_ibge, estado_processo, endereco, bairro, cep, telefone, email])

    return response


def exportar_ods(request):
    response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet .ods')
    response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.ods"'

    workbook = xlwt.Workbook()
    planilha = workbook.add_sheet('SNC')
    planilha.write(0, 0, 'UF')
    planilha.write(0, 1, 'Ente Federado')
    planilha.write(0, 2, 'Cod.IBGE')
    planilha.write(0, 3, 'Situação')
    planilha.write(0, 4, 'Endereço')
    planilha.write(0, 5, 'Bairro')
    planilha.write(0, 6, 'CEP')
    planilha.write(0, 7, 'Telefone')
    planilha.write(0, 8, 'Email')
    planilha.write(0, 9, 'Localização do processo')
    planilha.write(0, 10, 'Possui Lei do Sistema de Cultura')
    planilha.write(0, 11, 'Possui Órgão Gestor')
    planilha.write(0, 12, 'Possui Conselho de Política Cultural')
    planilha.write(0, 13, 'Possui Fundo de Cultura')
    planilha.write(0, 14, 'Possui Plano de Cultura')

    for i, municipio in enumerate(Municipio.objects.all().order_by('-cidade'), start=1):
        uf = municipio.estado.sigla
        if municipio.cidade:
            cidade = municipio.cidade.nome_municipio
            cod_ibge = municipio.cidade.codigo_ibge
        else:
            cidade = municipio.estado.nome_uf
            cod_ibge = municipio.estado.codigo_ibge
        try:
            estado_processo = municipio.usuario.get_estado_processo_display()
            if estado_processo != 'Publicado no DOU':
                continue
        except ObjectDoesNotExist:
            estado_processo = 'Publicado no DOU'
        endereco = municipio.endereco
        bairro = municipio.bairro
        cep = municipio.cep
        telefone = municipio.telefone_um
        email = municipio.email_institucional_prefeito
        local = municipio.localizacao

        planilha.write(i, 0, uf)
        planilha.write(i, 1, cidade)
        planilha.write(i, 2, cod_ibge)
        planilha.write(i, 3, estado_processo)
        planilha.write(i, 4, endereco)
        planilha.write(i, 5, bairro)
        planilha.write(i, 6, cep)
        planilha.write(i, 7, telefone)
        planilha.write(i, 8, email)
        planilha.write(i, 9, local)
        planilha.write(i, 10, verificar_anexo(municipio, 'criacao_sistema', 'lei_sistema_cultura'))
        planilha.write(i, 11, verificar_anexo(municipio, 'orgao_gestor', 'relatorio_atividade_secretaria'))
        planilha.write(i, 12, verificar_anexo(municipio, 'conselho_cultural', 'ata_regimento_aprovado'))
        planilha.write(i, 13, verificar_anexo(municipio, 'fundo_cultura', 'lei_fundo_cultura'))
        planilha.write(i, 14, verificar_anexo(municipio, 'plano_cultura', 'lei_plano_cultura'))

    workbook.save(response)

    return response


def exportar_xls(request):
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.xls"'

        workbook = xlwt.Workbook()
        planilha = workbook.add_sheet('SNC')
        planilha.write(0, 0, 'UF')
        planilha.write(0, 1, 'Ente Federado')
        planilha.write(0, 2, 'Cod.IBGE')
        planilha.write(0, 3, 'Situação')
        planilha.write(0, 4, 'Endereço')
        planilha.write(0, 5, 'Bairro')
        planilha.write(0, 6, 'CEP')
        planilha.write(0, 7, 'Telefone')<commit_msg>[FIX] resolvendo misterioso bug das linhas em branco ^-^<commit_after>import csv
import xlwt
from datetime import timedelta
from threading import Thread

from django.shortcuts import render, redirect
from django.http import Http404, HttpResponse
from django.views.generic.edit import CreateView, UpdateView
from django.views.generic import ListView, DetailView
from django.core.urlresolvers import reverse_lazy, reverse
from django.core.mail import send_mail
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from django.template.loader import render_to_string
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.models import Q, Count

from adesao.models import Municipio, Responsavel, Secretario, Usuario, Historico, Uf, Cidade
from planotrabalho.models import Conselheiro, PlanoTrabalho
from adesao.forms import CadastrarUsuarioForm, CadastrarMunicipioForm
from adesao.forms import CadastrarResponsavelForm, CadastrarSecretarioForm
from adesao.utils import enviar_email_conclusao, verificar_anexo

from wkhtmltopdf.views import PDFTemplateView


# Create your views here.
def index(request):
    if request.user.is_authenticated():
        return redirect('adesao:home')
    return render(request, 'index.html')


def fale_conosco(request):
    return render(request, 'fale_conosco.html')


@login_required
def home(request):
    ente_federado = request.user.usuario.municipio
    secretario = request.user.usuario.secretario
    responsavel = request.user.usuario.responsavel
    situacao = request.user.usuario.estado_processo
    historico = Historico.objects.filter(usuario=request.user.usuario)
    historico = historico.order_by('-data_alteracao')

    if request.user.is_staff:
        return redirect('gestao:acompanhar_adesao')

    if ente_federado and secretario and responsavel and int(situacao) < 1:
        request.user.usuario.estado_processo = '1'
        request.user.usuario.save()
        message_txt = render_to_string('conclusao_cadastro.txt',
                                       {'request': request})
        message_html = render_to_string('conclusao_cadastro.email',
                                        {'request': request})
        enviar_email_conclusao(request.user, message_txt, message_html)
    return render(request, 'home.html', {'historico': historico})


def ativar_usuario(request, codigo):
    usuario = Usuario.objects.get(codigo_ativacao=codigo)

    if usuario is None:
        raise Http404()

    if timezone.now() > (usuario.data_cadastro + timedelta(days=3)):
        raise Http404()

    usuario.user.is_active = True
    usuario.save()
    usuario.user.save()

    return render(request, 'confirmar_email.html')


def sucesso_usuario(request):
    return render(request, 'usuario/mensagem_sucesso.html')


def sucesso_responsavel(request):
    return render(request, 'responsavel/mensagem_sucesso.html')


def exportar_csv(request):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.csv"'
    response.write('\uFEFF')

    writer = csv.writer(response)
    writer.writerow(['UF', 'Município', 'Cod.IBGE', 'Situação', 'Endereço', 'Bairro', 'CEP', 'Telefone', 'Email'])

    for municipio in Municipio.objects.all():
        uf = municipio.estado.sigla
        if municipio.cidade:
            cidade = municipio.cidade.nome_municipio
            cod_ibge = municipio.cidade.codigo_ibge
        else:
            cidade = municipio.estado.nome_uf
            cod_ibge = ''
        try:
            estado_processo = municipio.usuario.get_estado_processo_display()
            if estado_processo != 'Publicado no DOU':
                continue
        except ObjectDoesNotExist:
            estado_processo = 'Publicado no DOU'
        endereco = municipio.endereco
        bairro = municipio.bairro
        cep = municipio.cep
        telefone = municipio.telefone_um
        email = municipio.email_institucional_prefeito
        writer.writerow([uf, cidade, cod_ibge, estado_processo, endereco, bairro, cep, telefone, email])

    return response


def exportar_ods(request):
    response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet .ods')
    response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.ods"'

    workbook = xlwt.Workbook()
    planilha = workbook.add_sheet('SNC')
    planilha.write(0, 0, 'UF')
    planilha.write(0, 1, 'Ente Federado')
    planilha.write(0, 2, 'Cod.IBGE')
    planilha.write(0, 3, 'Situação')
    planilha.write(0, 4, 'Endereço')
    planilha.write(0, 5, 'Bairro')
    planilha.write(0, 6, 'CEP')
    planilha.write(0, 7, 'Telefone')
    planilha.write(0, 8, 'Email Prefeito')
    planilha.write(0, 9, 'Email do Cadastrador')
    planilha.write(0, 10, 'Email do Responsável')
    planilha.write(0, 11, 'Localização do processo')
    planilha.write(0, 12, 'Possui Lei do Sistema de Cultura')
    planilha.write(0, 13, 'Possui Órgão Gestor')
    planilha.write(0, 14, 'Possui Conselho de Política Cultural')
    planilha.write(0, 15, 'Possui Fundo de Cultura')
    planilha.write(0, 16, 'Possui Plano de Cultura')

    for i, municipio in enumerate(Municipio.objects.all().order_by('-cidade'), start=1):
        uf = municipio.estado.sigla
        if municipio.cidade:
            cidade = municipio.cidade.nome_municipio
            cod_ibge = municipio.cidade.codigo_ibge
        else:
            cidade = municipio.estado.nome_uf
            cod_ibge = municipio.estado.codigo_ibge
        try:
            estado_processo = municipio.usuario.get_estado_processo_display()
        except ObjectDoesNotExist:
            #Documentando: isso foi colocado aqui pois, os municipios migrados
            #fizeram adesão sem cadastrador e consequentemente estado do processo
            estado_processo = 'Publicado no DOU'
        endereco = municipio.endereco
        bairro = municipio.bairro
        cep = municipio.cep
        telefone = municipio.telefone_um
        email_prefeito = municipio.email_institucional_prefeito
        try:
            #email_cadastrador = Usuario.objects.get(municipio_id=municipio.id).user.email
            email_cadastrador = municipio.usuario.user.email
            print(Usuario.objects.get(municipio_id=municipio.id).user.email)
        except ObjectDoesNotExist:
            email_cadastrador = ""
        local = municipio.localizacao

        planilha.write(i, 0, uf)
        planilha.write(i, 1, cidade)
        planilha.write(i, 2, cod_ibge)
        planilha.write(i, 3, estado_processo)
        planilha.write(i, 4, endereco)
        planilha.write(i, 5, bairro)
        planilha.write(i, 6, cep)
        planilha.write(i, 7, telefone)
        planilha.write(i, 8, email_prefeito)
        planilha.write(i, 9, email_cadastrador)
        planilha.write(i, 10, email_prefeito)
        planilha.write(i, 11, local)
        planilha.write(i, 12, verificar_anexo(municipio, 'criacao_sistema', 'lei_sistema_cultura'))
        planilha.write(i, 13, verificar_anexo(municipio, 'orgao_gestor', 'relatorio_atividade_secretaria'))
        planilha.write(i, 14, verificar_anexo(municipio, 'conselho_cultural', 'ata_regimento_aprovado'))
        planilha.write(i, 15, verificar_anexo(municipio, 'fundo_cultura', 'lei_fundo_cultura'))
        planilha.write(i, 16, verificar_anexo(municipio, 'plano_cultura', 'lei_plano_cultura'))

    workbook.save(response)

    return response


def exportar_xls(request):
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response['Content-Disposition'] = 'attachment; filename="dados-municipios-cadastrados-snc.xls"'

        workbook = xlwt.Workbook()
        planilha = workbook.add_sheet('SNC')
        planilha.write(0, 0, 'UF')
        planilha.write(0, 1, 'Ente Federado')
        planilha.write(0, 2, 'Cod.IBGE')
        planilha.write(0, 3, 'Situação')
        planilha.write(0, 4, 'Endereço')
        planilha.write(0, 5, 'Bairro')
        planilha.write(0, 6, 'CEP')
        planilha.write(0, 7, 'Telefone')
{'fraction_non_alphanumeric': 0.10448525177554546, 'fraction_numerical': 0.011389084394395035, 'mean_word_length': 3.3806053811659194, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3254309', 'n_tokens_mistral': 5539, 'n_tokens_neox': 5329, 'n_words': 1013}