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)
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)
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)
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)
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)
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)
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)
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=" ")), "{0:5.2f}".format(nota), nota)) else: relatorio_intermediario.append((" - ", 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=" ")), "{0:5.2f}".format(nota), nota)) else: relatorio_final.append((" - ", None, 0)) else: relatorio_intermediario.append((" - ", None, 0)) relatorio_final.append((" - ", 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=" ")), "{0:5.2f}".format(nota_banca_final), nota_banca_final)) else: banca_final.append((" - ", 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=" ")), "{0:5.2f}".format(nota_banca_intermediaria), nota_banca_intermediaria)) else: banca_intermediaria.append((" - ", 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=" ")), "{0:5.2f}".format(nota_banca_falconi), nota_banca_falconi)) else: banca_falconi.append((" - ", 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)