Beispiel #1
0
def organizacoes_prospect(request):
    """Exibe as organizações prospectadas e a última comunicação."""
    todas_organizacoes = Organizacao.objects.all()
    configuracao = get_object_or_404(Configuracao)
    ano = configuracao.ano  # Ano atual
    semestre = configuracao.semestre  # Semestre atual

    # Vai para próximo semestre
    ano, semestre = adianta_semestre(ano, semestre)

    disponiveis = []
    submetidas = []
    contato = []
    organizacoes = []

    periodo = 60
    if request.is_ajax() and 'periodo' in request.POST:
        periodo = int(request.POST['periodo']) * 30  # periodo vem em meses

    for organizacao in todas_organizacoes:
        propostas = Proposta.objects.filter(organizacao=organizacao)\
            .order_by("ano", "semestre")
        ant = Anotacao.objects.filter(organizacao=organizacao)\
            .order_by("momento").last()

        if (periodo > 366) or \
           (ant and (datetime.date.today() - ant.momento.date() <
                     datetime.timedelta(days=periodo))):

            organizacoes.append(organizacao)
            contato.append(ant)

            if configuracao.semestre == 1:
                propostas_submetidas = propostas\
                    .filter(ano__gte=configuracao.ano)\
                    .exclude(ano=configuracao.ano, semestre=1).distinct()
            else:
                propostas_submetidas = propostas\
                    .filter(ano__gt=configuracao.ano).distinct()

            submetidas.append(propostas_submetidas.count())
            disponiveis.append(
                propostas_submetidas.filter(disponivel=True).count())

    organizacoes_list = zip(organizacoes, disponiveis, submetidas, contato)
    total_organizacoes = len(organizacoes)
    total_disponiveis = sum(disponiveis)
    total_submetidas = sum(submetidas)

    context = {
        'organizacoes_list': organizacoes_list,
        'total_organizacoes': total_organizacoes,
        'total_disponiveis': total_disponiveis,
        'total_submetidas': total_submetidas,
        'ano': ano,
        'semestre': semestre,
        'filtro': "todas",
    }
    return render(request, 'organizacoes/organizacoes_prospectadas.html',
                  context)
Beispiel #2
0
def pre_alocar_estudante(request):
    """Ajax para pre-alocar estudates em propostas."""
    user = get_object_or_404(PFEUser, pk=request.user.pk)

    if user.tipo_de_usuario == 4:  # admin

        # Código a seguir não estritamente necessário mas pode deixar mais seguro
        administrador = get_object_or_404(Administrador,
                                          pk=request.user.administrador.pk)

        if not administrador:
            return HttpResponse("Administrador não encontrado.", status=401)

        estudante = request.GET.get('estudante', None)
        estudante_id = int(estudante[len("estudante"):])

        proposta = request.GET.get('proposta', None)
        proposta_id = int(proposta[len("proposta"):])

        configuracao = get_object_or_404(Configuracao)
        ano = configuracao.ano
        semestre = configuracao.semestre

        # Vai para próximo semestre
        ano, semestre = adianta_semestre(ano, semestre)

        proposta = get_object_or_404(Proposta, id=proposta_id)

        estudante = get_object_or_404(Aluno, id=estudante_id)
        estudante.pre_alocacao = proposta
        estudante.save()

        data = {
            'atualizado': True,
        }

    elif user.tipo_de_usuario == 2:  # professor

        # atualizações não serão salvas

        data = {
            'atualizado': False,
        }

    else:
        return HttpResponseNotFound('<h1>Usuário sem privilérios!</h1>')

    return JsonResponse(data)
Beispiel #3
0
def selecionar_orientadores(request):
    """Selecionar Orientadores para os Projetos."""
    configuracao = get_object_or_404(Configuracao)
    ano = configuracao.ano
    semestre = configuracao.semestre
    # try:
    #     configuracao = Configuracao.objects.get()
    #     ano = configuracao.ano
    #     semestre = configuracao.semestre
    # except Configuracao.DoesNotExist:
    #     return HttpResponse("Falha na configuracao do sistema.", status=401)

    mensagem = ""

    if 'mensagem' in request.session:
        mensagem = request.session['mensagem']

    # Vai para próximo semestre
    ano, semestre = adianta_semestre(ano, semestre)

    projetos = Projeto.objects.filter(ano=ano, semestre=semestre)

    professores = PFEUser.objects.filter(tipo_de_usuario=2)  # (2, 'professor')
    administradores = PFEUser.objects.filter(
        tipo_de_usuario=4)  # (4, 'administrador')
    orientadores = (professores | administradores).order_by(
        Lower("first_name"), Lower("last_name"))

    # Checa se usuário é administrador ou professor
    user = get_object_or_404(PFEUser, pk=request.user.pk)
    # try:
    #     user = PFEUser.objects.get(pk=request.user.pk)
    # except PFEUser.DoesNotExist:
    #     return HttpResponse("Usuário não encontrado.", status=401)

    if user and user.tipo_de_usuario != 4:  # admin
        mensagem = "Sua conta não é de administrador, "
        mensagem += "você pode mexer na tela, contudo suas modificações não serão salvas."

    context = {
        'mensagem': mensagem,
        'projetos': projetos,
        'orientadores': orientadores,
    }

    return render(request,
                  'administracao/selecionar_orientadores.html',
                  context=context)
Beispiel #4
0
def preenche_proposta_pdf(campos, proposta):
    """Preenche um proposta a partir de um dicionario PDF."""
    if proposta is None:  # proposta nova
        proposta = Proposta.create()

        try:
            configuracao = Configuracao.objects.get()
            ano = configuracao.ano              # Ano atual
            semestre = configuracao.semestre    # Semestre atual
        except Configuracao.DoesNotExist:
            return None

        # Vai para próximo semestre
        ano, semestre = adianta_semestre(ano, semestre)

        proposta.ano = ano
        proposta.semestre = semestre

    proposta.nome = campos["nome"]
    proposta.email = campos["email"]

    proposta.website = decodificar("site", campos)
    proposta.nome_organizacao = decodificar("organizacao", campos)
    proposta.endereco = decodificar("endereco", campos)
    proposta.contatos_tecnicos = decodificar("contatos_tecnicos", campos)
    proposta.contatos_administrativos = decodificar("contatos_administrativos", campos)
    proposta.descricao_organizacao = decodificar("descricao_organizacao", campos)
    proposta.departamento = decodificar("departamento", campos)

    proposta.titulo = decodificar("titulo", campos)
    proposta.descricao = decodificar("descricao", campos)
    proposta.expectativas = decodificar("expectativas", campos)

    proposta.recursos = decodificar("recursos", campos)
    proposta.observacoes = decodificar("observacoes", campos)

    # tipo = request.POST.get("interesse", "")
    # if tipo != "":
    #     proposta.tipo_de_interesse = int(tipo)

    proposta.save()

    cria_area_proposta_pdf(campos, proposta)

    return proposta
Beispiel #5
0
def index_estudantes(request):
    """Mostra página principal do usuário estudante."""
    usuario = get_object_or_404(PFEUser, pk=request.user.pk)
    configuracao = get_object_or_404(Configuracao)

    context = {
        'configuracao': configuracao,
        'vencido': timezone.now() > configuracao.prazo
    }

    ano = configuracao.ano
    semestre = configuracao.semestre

    # Caso estudante
    if usuario.tipo_de_usuario == 1:
        estudante = get_object_or_404(Aluno, pk=request.user.aluno.pk)

        context['projeto'] = Projeto.objects\
            .filter(alocacao__aluno=estudante).last()

        # Estudantes de processos passados sempre terrão seleção vencida
        if semestre == 1:
            context['vencido'] |= estudante.anoPFE < ano
            context['vencido'] |= estudante.anoPFE == ano and \
                estudante.semestrePFE == 1
        else:
            context['vencido'] |= (estudante.anoPFE <= ano)

    # Caso professor ou administrador
    elif usuario.tipo_de_usuario == 2 or usuario.tipo_de_usuario == 4:
        context['professor_id'] = get_object_or_404(
            Professor, pk=request.user.professor.pk).id

    # Caso parceiro
    else:
        return HttpResponse("Usuário sem acesso.", status=401)

    context['ano'], context['semestre'] = adianta_semestre(ano, semestre)

    return render(request, 'estudantes/index_estudantes.html', context=context)
Beispiel #6
0
def recupera_orientadores_por_semestre(configuracao):
    """Recupera listas de orientadores de projetos ordenadas por semestre."""
    professores_pfe = []
    periodo = []

    ano = 2018  # Ano de início do PFE
    semestre = 2  # Semestre de início do PFE
    while True:
        professores = []
        grupos = []
        for professor in Professor.objects.all().order_by(
                Lower("user__first_name"), Lower("user__last_name")):
            count_grupos = []
            grupos_pfe = Projeto.objects.filter(orientador=professor).\
                                        filter(ano=ano).\
                                        filter(semestre=semestre)
            if grupos_pfe:
                for grupo in grupos_pfe:  # garante que tem alunos no projeto
                    alunos_pfe = Aluno.objects.filter(alocacao__projeto=grupo)
                    if alunos_pfe:
                        count_grupos.append(grupo)
                if count_grupos:
                    professores.append(professor)
                    grupos.append(count_grupos)

        if professores:  # Se não houver nenhum orientador não cria entrada na lista
            professores_pfe.append(zip(professores, grupos))
            periodo.append(str(ano) + "." + str(semestre))

        # Para de buscar depois do semestre atual
        if ((semestre == configuracao.semestre + 1) and (ano == configuracao.ano)) or \
           (ano > configuracao.ano):
            break

        # Avança um semestre
        ano, semestre = adianta_semestre(ano, semestre)

    return zip(professores_pfe[::-1],
               periodo[::-1])  # inverti lista deixando os mais novos primeiro
Beispiel #7
0
def montar_grupos(request):
    """Montar grupos para projetos."""
    configuracao = get_object_or_404(Configuracao)
    ano = configuracao.ano
    semestre = configuracao.semestre

    ano, semestre = adianta_semestre(ano, semestre)

    propostas = Proposta.objects.filter(ano=ano,
                                        semestre=semestre,
                                        disponivel=True)

    estudantes = Aluno.objects.filter(trancado=False).\
        filter(anoPFE=ano, semestrePFE=semestre).\
        order_by(Lower("user__first_name"), Lower("user__last_name"))

    opcoes = []
    for estudante in estudantes:
        opcao = Opcao.objects.filter(aluno=estudante).\
                              filter(proposta__ano=ano, proposta__semestre=semestre).\
                              order_by("prioridade")
        opcoes.append(opcao)

        # Caso haja um pré-alocação de anos anteriores, limpar a pré-alocação
        if estudante.pre_alocacao and estudante.pre_alocacao not in propostas:
            estudante.pre_alocacao = None

    estudantes_opcoes = zip(estudantes, opcoes)

    # Checa se usuário é administrador ou professor
    user = get_object_or_404(PFEUser, pk=request.user.pk)

    mensagem = ""

    if request.method == 'POST' and user and user.tipo_de_usuario == 4:  # admin

        if 'limpar' in request.POST:
            for estudante in estudantes:
                estudante.pre_alocacao = None
                estudante.save()

        if 'fechar' in request.POST:
            for proposta in propostas:
                alocados = []
                for estudante in estudantes:
                    if estudante.pre_alocacao:
                        if estudante.pre_alocacao.id == proposta.id:
                            alocados.append(estudante)
                    else:
                        op_aloc = Opcao.objects.filter(aluno=estudante).\
                                    filter(proposta__ano=ano, proposta__semestre=semestre).\
                                    filter(prioridade=1).first()
                        if op_aloc and op_aloc.proposta == proposta:
                            alocados.append(estudante)
                if alocados:  # pelo menos um estudante no projeto
                    try:
                        projeto = Projeto.objects.get(proposta=proposta,
                                                      avancado=None)
                    except Projeto.DoesNotExist:
                        projeto = Projeto.create(proposta)

                    if not projeto.titulo:
                        projeto.titulo = proposta.titulo

                    if not projeto.descricao:
                        projeto.descricao = proposta.descricao

                    if not projeto.organizacao:
                        projeto.organizacao = proposta.organizacao

                    # projeto.avancado = None

                    projeto.ano = proposta.ano
                    projeto.semestre = proposta.semestre

                    projeto.save()

                    alocacoes = Alocacao.objects.filter(projeto=projeto)
                    for alocacao in alocacoes:  # Apaga todas alocacoes que não tiverem nota
                        avals = list(
                            Avaliacao2.objects.filter(alocacao=alocacao))
                        if not avals:
                            alocacao.delete()
                        else:
                            mensagem += "- " + str(alocacao.aluno) + "\n"

                    for alocado in alocados:  # alocando estudantes no projeto
                        alocacao = Alocacao.create(alocado, projeto)
                        alocacao.save()

                else:
                    projetos = Projeto.objects.filter(proposta=proposta,
                                                      avancado=None)
                    if not projetos:
                        continue

                    for projeto in projetos:
                        alocacoes = Alocacao.objects.filter(projeto=projeto)
                        for alocacao in alocacoes:  # Apaga todas alocacoes que não tiverem nota
                            alocacao.delete()

                        projeto.delete()

            if mensagem:
                request.session[
                    'mensagem'] = 'Estudantes possuiam alocações com notas:\n'
                request.session['mensagem'] += mensagem

            return redirect('/administracao/selecionar_orientadores/')

    if user and user.tipo_de_usuario != 4:  # admin
        mensagem = "Sua conta não é de administrador, "
        mensagem += "você pode mexer na tela, contudo suas modificações não serão salvas."

    context = {
        'mensagem': mensagem,
        'configuracao': configuracao,
        'propostas': propostas,
        'estudantes_opcoes': estudantes_opcoes,
    }

    return render(request, 'administracao/montar_grupos.html', context=context)
Beispiel #8
0
def proposta_editar(request, slug):
    """Formulário de Edição de Propostas de Projeto por slug."""
    try:
        user = PFEUser.objects.get(pk=request.user.pk)
    except PFEUser.DoesNotExist:
        user = None

    parceiro = None
    professor = None
    administrador = None

    if user:
        if user.tipo_de_usuario == 1:  # alunos
            mensagem = "Você não está cadastrado como parceiro!"
            context = {
                "area_principal": True,
                "mensagem": mensagem,
            }
            return render(request, 'generic.html', context=context)

        if user.tipo_de_usuario == 3:  # parceiro
            parceiro = get_object_or_404(Parceiro, pk=request.user.parceiro.pk)
        elif user.tipo_de_usuario == 2:  # professor
            professor = get_object_or_404(Professor,
                                          pk=request.user.professor.pk)
        elif user.tipo_de_usuario == 4:  # admin
            administrador = get_object_or_404(Administrador,
                                              pk=request.user.administrador.pk)

    proposta = get_object_or_404(Proposta, slug=slug)

    configuracao = get_object_or_404(Configuracao)
    liberadas_propostas = configuracao.liberadas_propostas

    configuracao = get_object_or_404(Configuracao)
    ano, semestre = adianta_semestre(configuracao.ano, configuracao.semestre)

    vencida = proposta.ano != ano or proposta.semestre != semestre

    if request.method == 'POST':
        if (not liberadas_propostas) or (user.tipo_de_usuario == 4):
            if vencida:
                proposta = preenche_proposta(request, None)
            else:
                preenche_proposta(request, proposta)

            enviar = "mensagem" in request.POST  # Por e-mail se enviar
            mensagem = envia_proposta(proposta, enviar)
            resposta = "Submissão de proposta de projeto "
            resposta += "atualizada com sucesso.<br>"

            if enviar:
                resposta += "Você deve receber um e-mail de confirmação "
                resposta += "nos próximos instantes.<br>"

            resposta += "<br><hr>"
            resposta += mensagem

            context = {
                "voltar": True,
                "mensagem": resposta,
            }
            return render(request, 'generic.html', context=context)

        return HttpResponse("Propostas não liberadas para edição.", status=401)

    areas = Area.objects.filter(ativa=True)

    context = {
        'liberadas_propostas': liberadas_propostas,
        'full_name': proposta.nome,
        'email': proposta.email,
        'organizacao': proposta.nome_organizacao,
        'website': proposta.website,
        'endereco': proposta.endereco,
        'descricao_organizacao': proposta.descricao_organizacao,
        'parceiro': parceiro,
        'professor': professor,
        'administrador': administrador,
        'contatos_tecnicos': proposta.contatos_tecnicos,
        'contatos_adm': proposta.contatos_administrativos,
        'info_departamento': proposta.departamento,
        'titulo': proposta.titulo,
        'desc_projeto': proposta.descricao,
        'expectativas': proposta.expectativas,
        'areast': areas,
        'recursos': proposta.recursos,
        'observacoes': proposta.observacoes,
        'proposta': proposta,
        'edicao': True,
        'interesses': Proposta.TIPO_INTERESSE,
        'tipo_de_interesse': proposta.tipo_de_interesse,
        'ano_semestre': str(proposta.ano) + "." + str(proposta.semestre),
        'vencida': vencida,
    }
    return render(request, 'organizacoes/proposta_submissao.html', context)
Beispiel #9
0
def procura_propostas(request):
    """Exibe um histograma com a procura das propostas pelos estudantes."""
    configuracao = get_object_or_404(Configuracao)
    ano = configuracao.ano
    semestre = configuracao.semestre
    # try:
    #     configuracao = Configuracao.objects.get()
    #     ano = configuracao.ano
    #     semestre = configuracao.semestre
    # except Configuracao.DoesNotExist:
    #     return HttpResponse("Falha na configuracao do sistema.", status=401)

    curso = "T"  # por padrão todos os cursos

    ano, semestre = adianta_semestre(ano, semestre)

    if request.is_ajax():

        if 'anosemestre' in request.POST:

            if request.POST['anosemestre'] == 'todas':
                ano = 0
            else:
                anosemestre = request.POST['anosemestre'].split(".")
                ano = int(anosemestre[0])
                semestre = int(anosemestre[1])

            if 'curso' in request.POST:
                curso = request.POST['curso']

        else:
            return HttpResponse("Erro não identificado (POST incompleto)",
                                status=401)

    mylist = ordena_propostas_novo(True,
                                   ano=ano,
                                   semestre=semestre,
                                   curso=curso)

    propostas = []
    prioridades = [[], [], [], [], []]
    estudantes = [[], [], [], [], []]

    if len(mylist) > 0:
        unzipped_object = zip(*mylist)

        propostas,\
            prioridades[0], prioridades[1], prioridades[2],\
            prioridades[3], prioridades[4],\
            estudantes[0], estudantes[1], estudantes[2],\
            estudantes[3], estudantes[4]\
            = list(unzipped_object)

    # Para procurar as áreas mais procuradas nos projetos
    opcoes = Opcao.objects.filter(aluno__user__tipo_de_usuario=1,
                                  aluno__trancado=False)

    if ano > 0:  # Ou seja não são todos os anos e semestres
        opcoes = opcoes.filter(aluno__anoPFE=ano, aluno__semestrePFE=semestre)
        opcoes = opcoes.filter(proposta__ano=ano, proposta__semestre=semestre)

    opcoes = opcoes.filter(prioridade=1)

    # Caso não se deseje todos os cursos, se filtra qual se deseja
    if curso != "T":
        opcoes = opcoes.filter(aluno__curso=curso)

    areaspfe = {}
    areas = Area.objects.filter(ativa=True)
    for area in areas:
        count = 0
        for opcao in opcoes:
            if AreaDeInteresse.objects.filter(proposta=opcao.proposta,
                                              area=area):
                count += 1
        areaspfe[area.titulo] = (count, area.descricao)

    # conta de maluco para fazer diagrama ficar correto
    tamanho = len(propostas)
    if tamanho <= 4:
        tamanho *= 9
    else:
        tamanho *= 5

    edicoes, _, _ = get_edicoes(Proposta)

    context = {
        'tamanho': tamanho,
        'propostas': propostas,
        'prioridades': prioridades,
        'estudantes': estudantes,
        'ano': ano,
        'semestre': semestre,
        'areaspfe': areaspfe,
        'opcoes': opcoes,
        "edicoes": edicoes,
    }

    return render(request, 'propostas/procura_propostas.html', context)
Beispiel #10
0
def carrega_proposta(request):
    """Página para carregar Proposta de Projetos em PDF."""
    try:
        user = PFEUser.objects.get(pk=request.user.pk)
    except PFEUser.DoesNotExist:
        user = None

    configuracao = get_object_or_404(Configuracao)
    ano, semestre = adianta_semestre(configuracao.ano, configuracao.semestre)

    full_name = ""
    email_sub = ""

    if user:

        if user.tipo_de_usuario == 1:  # alunos
            mensagem = "Você não está cadastrado como parceiro!"
            context = {
                "area_principal": True,
                "mensagem": mensagem,
            }
            return render(request, 'generic.html', context=context)

        full_name = user.get_full_name()
        email_sub = user.email

    if request.method == 'POST':

        if 'arquivo' in request.FILES:
            arquivo = simple_upload(request.FILES['arquivo'],
                                    path=get_upload_path(None, ""))

            fields = get_form_fields(arquivo[1:])

            mensagem = ""

            fields["nome"] = request.POST.get("nome", "").strip()
            fields["email"] = request.POST.get("email", "").strip()

            proposta = preenche_proposta_pdf(fields, None)

            enviar = "mensagem" in request.POST  # Por e-mail se enviar
            mensagem = envia_proposta(proposta, enviar)

            resposta = "Submissão de proposta de projeto realizada "
            resposta += "com sucesso.<br>"

            if enviar:
                resposta += "Você deve receber um e-mail de confirmação "
                resposta += "nos próximos instantes.<br>"

        else:
            mensagem = "Arquivo não identificado"

        resposta = mensagem
        context = {
            "voltar": True,
            "mensagem": resposta,
        }
        return render(request, 'generic.html', context=context)

    context = {
        'full_name': full_name,
        'email': email_sub,
        'ano_semestre': str(ano) + "." + str(semestre),
    }
    return render(request, 'organizacoes/carrega_proposta.html', context)
Beispiel #11
0
def proposta_submissao(request):
    """Formulário de Submissão de Proposta de Projetos."""
    try:
        user = PFEUser.objects.get(pk=request.user.pk)
    except PFEUser.DoesNotExist:
        user = None

    configuracao = get_object_or_404(Configuracao)
    ano, semestre = adianta_semestre(configuracao.ano, configuracao.semestre)

    parceiro = None
    professor = None
    administrador = None
    organizacao = ""
    website = "http://"
    endereco = ""
    descricao_organizacao = ""
    full_name = ""
    email_sub = ""

    if user:

        if user.tipo_de_usuario == 1:  # alunos
            mensagem = "Você não está cadastrado como parceiro!"
            context = {
                "area_principal": True,
                "mensagem": mensagem,
            }
            return render(request, 'generic.html', context=context)

        full_name = user.get_full_name()
        email_sub = user.email

        if user.tipo_de_usuario == 3:  # parceiro
            parceiro = get_object_or_404(Parceiro, pk=request.user.parceiro.pk)
            organizacao = parceiro.organizacao
            website = parceiro.organizacao.website
            endereco = parceiro.organizacao.endereco
            descricao_organizacao = parceiro.organizacao.informacoes
        elif user.tipo_de_usuario == 2:  # professor
            professor = get_object_or_404(Professor,
                                          pk=request.user.professor.pk)
        elif user.tipo_de_usuario == 4:  # admin
            administrador = get_object_or_404(Administrador,
                                              pk=request.user.administrador.pk)

    if request.method == 'POST':
        proposta = preenche_proposta(request, None)
        enviar = "mensagem" in request.POST  # Por e-mail se enviar
        mensagem = envia_proposta(proposta, enviar)

        resposta = "Submissão de proposta de projeto realizada "
        resposta += "com sucesso.<br>"

        if enviar:
            resposta += "Você deve receber um e-mail de confirmação "
            resposta += "nos próximos instantes.<br>"

        resposta += mensagem
        context = {
            "voltar": True,
            "mensagem": resposta,
        }
        return render(request, 'generic.html', context=context)

    areas = Area.objects.filter(ativa=True)

    organizacao_str = request.GET.get('organizacao', None)
    if organizacao_str:
        try:
            organizacao_id = int(organizacao_str)
            organizacao = Organizacao.objects.get(id=organizacao_id)
        except (ValueError, Organizacao.DoesNotExist):
            return HttpResponseNotFound('<h1>Organização não encontrado!</h1>')

    context = {
        'full_name': full_name,
        'email': email_sub,
        'organizacao': organizacao,
        'website': website,
        'endereco': endereco,
        'descricao_organizacao': descricao_organizacao,
        'parceiro': parceiro,
        'professor': professor,
        'administrador': administrador,
        'contatos_tecnicos': "",
        'contatos_adm': "",
        'info_departamento': "",
        'titulo': "",
        'desc_projeto': "",
        'expectativas': "",
        'areast': areas,
        'recursos': "",
        'observacoes': "",
        'edicao': False,
        'interesses': Proposta.TIPO_INTERESSE,
        'ano_semestre': str(ano) + "." + str(semestre),
        'tipo_de_interesse': 0  # Não existe na verdade
    }
    return render(request, 'organizacoes/proposta_submissao.html', context)