Ejemplo n.º 1
0
def certificados_submetidos(request):
    """Lista os Certificados Emitidos."""
    edicoes = []

    if request.is_ajax():
        if 'edicao' in request.POST:
            edicao = request.POST['edicao']
            if edicao == 'todas':
                certificados = Certificado.objects.all()
            else:
                ano, semestre = request.POST['edicao'].split('.')
                certificados = Certificado.objects\
                    .filter(projeto__ano=ano, projeto__semestre=semestre)
        else:
            return HttpResponse("Algum erro não identificado.", status=401)
    else:
        edicoes, ano, semestre = get_edicoes(Certificado)
        certificados = Certificado.objects\
            .filter(projeto__ano=ano, projeto__semestre=semestre)

    context = {
        'certificados': certificados,
        'edicoes': edicoes,
    }

    return render(request, 'documentos/certificados_submetidos.html', context)
Ejemplo n.º 2
0
def propostas_apresentadas(request):
    """Lista todas as propostas de projetos."""
    configuracao = get_object_or_404(Configuracao)

    ano = configuracao.ano
    semestre = configuracao.semestre
    edicoes = []

    if request.is_ajax():
        if 'edicao' in request.POST:
            edicao = request.POST['edicao']
            if edicao == 'todas':
                propostas_filtradas = Proposta.objects.all()
            else:
                ano, semestre = request.POST['edicao'].split('.')
                propostas_filtradas = Proposta.objects\
                    .filter(ano=ano,
                            semestre=semestre)

            propostas_filtradas = propostas_filtradas.order_by(
                "ano",
                "semestre",
                "organizacao",
                "titulo",
            )

            ternario_aprovados = retorna_ternario(
                propostas_filtradas.filter(disponivel=True))
            ternario_pendentes = retorna_ternario(
                propostas_filtradas.filter(disponivel=False))

            dic_organizacoes = {}
            for proposta in propostas_filtradas:
                if proposta.organizacao and\
                  proposta.organizacao not in dic_organizacoes:
                    dic_organizacoes[proposta.organizacao] = 0
            num_organizacoes = len(dic_organizacoes)
            context = {
                'propostas': propostas_filtradas,
                'num_organizacoes': num_organizacoes,
                'ternario_aprovados': ternario_aprovados,
                'ternario_pendentes': ternario_pendentes,
                'configuracao': configuracao,
                "edicao": edicao,
            }

        else:
            return HttpResponse("Algum erro não identificado.", status=401)
    else:
        edicoes, _, _ = get_edicoes(Proposta)
        context = {
            "edicoes": edicoes,
        }

    return render(request, 'propostas/propostas_apresentadas.html', context)
Ejemplo n.º 3
0
def bancas_lista(request, periodo_projeto):
    """Lista as bancas agendadas, conforme periodo ou projeto pedido."""
    context = {'periodo': periodo_projeto}

    if periodo_projeto == "proximas":
        # Coletando bancas agendadas a partir de hoje
        hoje = datetime.date.today()
        bancas = Banca.objects.filter(startDate__gt=hoje).order_by("startDate")

        # checando se projetos atuais tem banca marcada
        configuracao = get_object_or_404(Configuracao)
        projetos = Projeto.objects.filter(ano=configuracao.ano,
                                          semestre=configuracao.semestre)
        for banca in bancas:
            projetos = projetos.exclude(id=banca.projeto.id)
        context["sem_banca"] = projetos

    elif periodo_projeto == "todas":
        bancas = Banca.objects.all().order_by("startDate")

    elif '.' in periodo_projeto:
        periodo = periodo_projeto.split('.')
        try:
            ano = int(periodo[0])
            semestre = int(periodo[1])
        except ValueError:
            return HttpResponseNotFound('<h1>Erro em!</h1>')

        bancas = Banca.objects.filter(projeto__ano=ano)\
            .filter(projeto__semestre=semestre).order_by("startDate")

    else:
        projeto = get_object_or_404(Projeto, id=periodo_projeto)
        context["projeto"] = projeto
        bancas = Banca.objects.filter(projeto=projeto).order_by("startDate")

    context["bancas"] = bancas

    edicoes, _, _ = get_edicoes(Projeto)
    context["edicoes"] = edicoes
    
    return render(request, 'professores/bancas_lista.html', context)
Ejemplo n.º 4
0
def dinamicas_lista(request):
    """Mostra os horários de dinâmicas."""

    if request.is_ajax():
        if 'edicao' in request.POST:

            encontros = Encontro.objects.all().order_by('startDate')

            edicao = request.POST['edicao']
            if edicao == 'todas':
                pass  # segue com encontros
            elif edicao == 'proximas':
                hoje = datetime.date.today()
                encontros = encontros.filter(startDate__gt=hoje)
            else:
                periodo = request.POST['edicao'].split('.')
                ano = int(periodo[0])
                semestre = int(periodo[1])
                encontros = encontros.filter(startDate__year=ano)
                if semestre == 1:
                    encontros = encontros.filter(startDate__month__lt=8)
                else:
                    encontros = encontros.filter(startDate__month__gt=7)

            context = {
                'encontros': encontros,
            }

        else:
            return HttpResponse("Algum erro não identificado.", status=401)

    else:

        edicoes, _, _ = get_edicoes(Projeto)
        context = {
                "edicoes": edicoes,
            }

    return render(request, 'professores/dinamicas_lista.html', context)
Ejemplo n.º 5
0
def emails(request):
    """Gera listas de emails, com alunos, professores, parceiros, etc."""
    membros_comite = PFEUser.objects.filter(membro_comite=True)
    lista_todos_alunos = Aluno.objects.filter(trancado=False).\
        filter(user__tipo_de_usuario=PFEUser.TIPO_DE_USUARIO_CHOICES[0][0])
    lista_todos_professores = Professor.objects.all()
    lista_todos_parceiros = Parceiro.objects.all()

    edicoes, _, _ = get_edicoes(Aluno)

    configuracao = get_object_or_404(Configuracao)
    atual = str(configuracao.ano) + "." + str(configuracao.semestre)

    context = {
        'membros_comite': membros_comite,
        'todos_alunos': lista_todos_alunos,
        'todos_professores': lista_todos_professores,
        'todos_parceiros': lista_todos_parceiros,
        'edicoes': edicoes,
        'atual': atual,
    }

    return render(request, 'administracao/emails.html', context=context)
Ejemplo n.º 6
0
def mapeamento_estudantes_propostas(request):
    """Faz o mapeamento entre estudantes e propostas do próximo semestre."""
    configuracao = get_object_or_404(Configuracao)

    ano = configuracao.ano
    semestre = configuracao.semestre
    edicoes, ano, semestre = get_edicoes(Proposta)

    if request.is_ajax():
        if 'edicao' in request.POST:
            ano, semestre = request.POST['edicao'].split('.')
        else:
            return HttpResponse("Algum erro não identificado.", status=401)

        lista_propostas = list(zip(*ordena_propostas(False, ano, semestre)))
        if lista_propostas:
            propostas = lista_propostas[0]
        else:
            propostas = []

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

        opcoes = []
        for aluno in alunos:
            opcoes_aluno = []
            alocacaos = Alocacao.objects.filter(aluno=aluno)
            for proposta in propostas:
                opcao = Opcao.objects.filter(aluno=aluno,
                                             proposta=proposta).last()
                if opcao:
                    opcoes_aluno.append(opcao)
                else:
                    try:
                        proj = Projeto.objects.get(proposta=proposta,
                                                   ano=ano,
                                                   semestre=semestre)
                        if alocacaos.filter(projeto=proj):
                            # Cria uma opção temporaria
                            opc = Opcao()
                            opc.prioridade = 0
                            opc.proposta = proposta
                            opc.aluno = aluno
                            opcoes_aluno.append(opc)
                        else:
                            opcoes_aluno.append(None)
                    except Projeto.DoesNotExist:
                        opcoes_aluno.append(None)

            opcoes.append(opcoes_aluno)

        # checa para empresas repetidas, para colocar um número para cada uma
        repetidas = {}
        for proposta in propostas:
            if proposta.organizacao:
                if proposta.organizacao.sigla in repetidas:
                    repetidas[proposta.organizacao.sigla] += 1
                else:
                    repetidas[proposta.organizacao.sigla] = 0
            else:
                if proposta.nome_organizacao in repetidas:
                    repetidas[proposta.nome_organizacao] += 1
                else:
                    repetidas[proposta.nome_organizacao] = 0
        repetidas_limpa = {}
        for repetida in repetidas:
            if repetidas[repetida] != 0:  # tira zerados
                repetidas_limpa[repetida] = repetidas[repetida]
        proposta_indice = {}
        for proposta in reversed(propostas):
            if proposta.organizacao:
                if proposta.organizacao.sigla in repetidas_limpa:
                    proposta_indice[proposta.id] = \
                        repetidas_limpa[proposta.organizacao.sigla] + 1
                    repetidas_limpa[proposta.organizacao.sigla] -= 1
            else:
                if proposta.nome_organizacao in repetidas_limpa:
                    proposta_indice[proposta.id] = \
                        repetidas_limpa[proposta.nome_organizacao] + 1
                    repetidas_limpa[proposta.nome_organizacao] -= 1

        estudantes = zip(alunos, opcoes)
        context = {
            'estudantes': estudantes,
            'propostas': propostas,
            'configuracao': configuracao,
            'ano': ano,
            'semestre': semestre,
            'loop_anos': range(2018, configuracao.ano + 1),
            'proposta_indice': proposta_indice,
            'edicoes': edicoes,
        }

    else:
        context = {
            "edicoes": edicoes,
        }

    return render(request, 'propostas/mapeamento_estudante_projeto.html',
                  context)
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
def resultado_projetos(request):
    """Mostra os resultados das avaliações (Bancas)."""
    edicoes, ano, semestre = get_edicoes(Projeto)
    context = {
        "edicoes": edicoes,
    }

    if request.is_ajax():
        if 'edicao' in request.POST:
            edicao = request.POST['edicao']
            if edicao == 'todas':
                projetos = Projeto.objects.all()
            else:
                ano, semestre = request.POST['edicao'].split('.')
                projetos = Projeto.objects.filter(ano=ano, semestre=semestre)

            relatorio_intermediario = []
            relatorio_final = []
            banca_intermediaria = []
            banca_final = []
            banca_falconi = []

            for projeto in projetos:

                aval_banc_final = Avaliacao2.objects.filter(projeto=projeto, tipo_de_avaliacao=2)  # Rel. Intermediário
                nota_banca_final, peso = Aluno.get_banca(None, aval_banc_final)

                alocacoes = Alocacao.objects.filter(projeto=projeto)
                
                if alocacoes:

                    primeira = alocacoes.first()
                    medias = primeira.get_media

                    if medias["peso_grupo_inter"] is not None and medias["peso_grupo_inter"] > 0:
                        nota = medias["nota_grupo_inter"]/medias["peso_grupo_inter"]
                        relatorio_intermediario.append(("{0}".format(converte_letra(nota, espaco="&nbsp;")),
                                            "{0:5.2f}".format(nota),
                                            nota))
                    else:
                        relatorio_intermediario.append(("&nbsp;-&nbsp;", None, 0))

                    if medias["peso_grupo_final"] is not None and medias["peso_grupo_final"] > 0:
                        nota = medias["nota_grupo_final"]/medias["peso_grupo_final"]
                        relatorio_final.append(("{0}".format(converte_letra(nota, espaco="&nbsp;")),
                                            "{0:5.2f}".format(nota),
                                            nota))
                    else:
                        relatorio_final.append(("&nbsp;-&nbsp;", None, 0))

                else:
                    relatorio_intermediario.append(("&nbsp;-&nbsp;", None, 0))
                    relatorio_final.append(("&nbsp;-&nbsp;", None, 0))



                aval_banc_final = Avaliacao2.objects.filter(projeto=projeto, tipo_de_avaliacao=2)  # B. Final
                nota_banca_final, peso = Aluno.get_banca(None, aval_banc_final)
                if peso is not None:
                    banca_final.append(("{0}".format(converte_letra(nota_banca_final, espaco="&nbsp;")),
                                        "{0:5.2f}".format(nota_banca_final),
                                        nota_banca_final))
                else:
                    banca_final.append(("&nbsp;-&nbsp;", None, 0))

                aval_banc_interm = Avaliacao2.objects.filter(projeto=projeto, tipo_de_avaliacao=1)  # B. Int.
                nota_banca_intermediaria, peso = Aluno.get_banca(None, aval_banc_interm)
                if peso is not None:
                    banca_intermediaria.append(("{0}".format(converte_letra(nota_banca_intermediaria,
                                                                            espaco="&nbsp;")),
                                                "{0:5.2f}".format(nota_banca_intermediaria),
                                                nota_banca_intermediaria))
                else:
                    banca_intermediaria.append(("&nbsp;-&nbsp;", None, 0))

                aval_banc_falconi = Avaliacao2.objects.filter(projeto=projeto, tipo_de_avaliacao=99)  # Falc.
                nota_banca_falconi, peso = Aluno.get_banca(None, aval_banc_falconi)
                if peso is not None:
                    banca_falconi.append(("{0}".format(converte_letra(nota_banca_falconi, espaco="&nbsp;")),
                                          "{0:5.2f}".format(nota_banca_falconi),
                                          nota_banca_falconi))
                else:
                    banca_falconi.append(("&nbsp;-&nbsp;", None, 0))

            tabela = zip(projetos,
                        relatorio_intermediario,
                        relatorio_final,
                         banca_intermediaria,
                         banca_final,
                         banca_falconi)

            context['tabela'] = tabela

        else:
            return HttpResponse("Algum erro não identificado.", status=401)

    return render(request, 'professores/resultado_projetos.html', context)