def context_processors(request): """ Função para a inclusão de variáveis de contexto nos templates """ ret = {} if request.user.is_authenticated: usuario = Perfil.objects.get(user=request.user.id) perAtual = periodo_atual() proxPer = proximo_periodo(1) ret['matricula'] = usuario.matricula ret['idusuario'] = usuario.idusuario ret['tipo'] = tipo_usuario(usuario.matricula, 0) ret['membro'] = Membro.objects.filter( professor=usuario.idusuario).values_list('comissao') ret['ano'] = perAtual[0] ret['periodo'] = perAtual[1] ret['periodoatual'] = perAtual[2] ret['proxperiodo'] = proxPer[2] else: ret['matricula'] = '' ret['idusuario'] = '' ret['tipo'] = '' ret['membro'] = '' ret['ano'] = '' ret['periodo'] = '' ret['periodoatual'] = '' ret['proxperiodo'] = '' return ret
def lista_planos_avaliar(request): """ Função para a listagem dos alunos e seus planos de estudo cadastrados """ usuario = Perfil.objects.get(user=request.user.id) periodoAtual = periodo_atual() proximoPeriodo = proximo_periodo(1) membro = Membro.objects.filter(professor=usuario.idusuario, ativo=1).values_list('comissao', flat=True) # Para saber as comissões que o membro logado faz parte comissoes = list( Comissao.objects.filter(id__in=membro).values_list('curso', flat=True)) # Para saber os cursos que o membro logado pode atuar cursos = Curso.objects.using('sca').filter(id__in=comissoes).values_list( 'id', flat=True) # Para saber as versões de cursos que o membro logado pode atuar versoes = Versaocurso.objects.using('sca').filter(curso__in=cursos) # Para saber os alunos que ainda estão cursando itens = Itemhistoricoescolar.objects.using('sca').filter( ano=periodoAtual[0], periodo=periodoAtual[1] - 1).values_list('historico_escolar', flat=True) # Para saber os alunos cujo plano de estudos encontra-se cadastrado e em # situação 'Montado' para o próximo semestre planos = list( Plano.objects.using('default').filter(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], situacao='M').values_list( 'aluno', flat=True)) # Dados dos alunos com a junção das informações selecionadas alunos = Aluno.objects.using('sca').filter(historico__in=itens, versaocurso__in=versoes, id__in=planos).order_by('nome') return render(request, 'cadd/lista_plano_estudos_avaliar.html', { 'ativoPlanos': True, 'alunos': alunos, })
def lista_planos(request): """ Função para a listagem dos planos de estudo cadastrados """ planoAtual = "" itensAtual = "" planosFuturos = "" itensFuturos = "" avaliacao = "" proximoPeriodo = proximo_periodo(1) usuario = Perfil.objects.get(user=request.user.id) try: planoAtual = Plano.objects.get(aluno=usuario.idusuario, ano=proximoPeriodo[0], periodo=proximoPeriodo[1] ) if planoAtual: avaliacao = planoAtual.avaliacao itensAtual = ItemPlanoAtual.objects.filter(plano=planoAtual) planosFuturos = PlanoFuturo.objects.filter(plano=planoAtual) if planosFuturos: itensFuturos = ItemPlanoFuturo.objects.filter( planofuturo__in=planosFuturos ) except: pass return render(request, 'cadd/lista_plano_estudos.html', { 'ativoPlanos': True, 'planoAtual': planoAtual, 'itensAtual': itensAtual, 'planosFuturos': planosFuturos, 'itensFuturos': itensFuturos, # 'avaliacao': avaliacao, })
def novo_plano_previa(request): """ Função de criação de um novo plano de estudos para o próximo semestre """ # TODO: Verificar os pré-requisitos para cursar cada uma das disciplinas escolhidas usuario = Perfil.objects.get(user=request.user.id) prox_periodo = proximo_periodo(1) aluno = Aluno.objects.get(id=usuario.idusuario) # Leitura de informações da vida acadêmica do usuário logado no sistema vidaacademica = vida_academica(usuario.idusuario) disciplinas_aprovadas = vidaacademica[0] criticidade = vidaacademica[4] maxcreditos = vidaacademica[6] periodoscursados = vidaacademica[7] curso = nome_sigla_curso(usuario.idusuario) nomecurso = curso[0] versaocurso = versao_curso(usuario.idusuario) # Define que o aluno não pode passar à definição do plano futuro continua = False # Recupera o horário com as prévias cadastradas para o próximo período do aluno horario = Horario.objects.filter(ano=prox_periodo[0], periodo=prox_periodo[1], curso=curso[2]) # Recupera as prévias cadastradas para o próximo período do aluno # Remove as disciplinas que o aluno já foi aprovado # Retorna as disciplinas presente nas prévias que o aluno deve cursar previas = list( ItemHorario.objects.filter(horario__in=horario).values_list( 'disciplina', flat=True).exclude(disciplina__in=disciplinas_aprovadas)) previas.sort() disciplinas_pendentes = ItemHorario.objects.filter( disciplina__in=previas).order_by('diasemana', 'periodo') # Recupera o plano cadastrado para o aluno referente ao próximo período plano = Plano.objects.filter(ano=prox_periodo[0], periodo=prox_periodo[1], aluno=aluno) # Verifica se o plano consultado existe # Se o plano existir habilita o aluno a passar à definição do plano futuro if plano: continua = True # TODO: Recuperar todos os itens do plano existente para permitir a edição do mesmo # Verifica se foi enviada uma requisição do tipo POST if request.method == 'POST': disciplinas = request.POST.get('discip') if disciplinas: disciplinas = disciplinas.split("_") if continua: plano.delete() plano = Plano.objects.create(ano=prox_periodo[0], periodo=prox_periodo[1], situacao='M', aluno=aluno) for d in disciplinas: disc = int(d) itemhorario = ItemHorario.objects.get(id=disc) i = ItemPlanoAtual.objects.create(plano=plano, itemhorario=itemhorario) return render( request, 'cadd/novo_plano_estudos_atual.html', { 'ativoPlanos': True, 'ativoPlanos2': True, 'prox_periodo': prox_periodo[2], 'disciplinas_pendentes': disciplinas_pendentes, 'criticidade': criticidade, 'maxcreditos': maxcreditos, 'nomecurso': nomecurso, 'versaocurso': versaocurso[0], 'periodoscursados': periodoscursados, 'continua': continua, })
def avalia_plano(request, id_aluno): """ Função para a avaliação do plano de estudos dos alunos pelos membros das comissões """ # Variáveis versaocurso = "" criticidade = "" periodos = "" trancamentos = "" cargaeletivas = "" reprovadas = "" planoAtual = "" itensAtual = "" planosFuturos = "" itensFuturos = "" avaliacao = "" # Processamento da vida acadêmica do aluno logado e obtidos o nome do aluno, # versão do curso, faixa de criticidade, periodos, disciplinas reprovadas vidaacademica = vida_academica(id_aluno) aluno = vidaacademica[8] criticidade = vidaacademica[4] periodos = vidaacademica[7] reprovadas = vidaacademica[3] versaocurso = versao_curso(id_aluno) trancamentos = vidaacademica[9] cargaeletivas = vidaacademica[10] proximoPeriodo = proximo_periodo(1) # Planos atual e futuro para visualização try: planoAtual = Plano.objects.get(aluno=id_aluno, ano=proximoPeriodo[0], periodo=proximoPeriodo[1]) if planoAtual: itensAtual = ItemPlanoAtual.objects.filter(plano=planoAtual) planosFuturos = PlanoFuturo.objects.filter(plano=planoAtual) if planosFuturos: itensFuturos = ItemPlanoFuturo.objects.filter( planofuturo__in=planosFuturos) except: pass if planoAtual.avaliacao: avaliacao = planoAtual.avaliacao if request.method == 'POST': t_avaliacao = request.POST.get('avaliacao') if t_avaliacao: planoAtual.avaliacao = t_avaliacao planoAtual.situacao = 'A' try: planoAtual.save() messages.success(request, 'Avaliação salva com sucesso!') except: messages.error(request, 'Houve algum problema técnico e o ' + \ 'salvamento não foi realizado!') return render( request, 'cadd/avalia_plano_estudos.html', { 'aluno': aluno, 'versaocurso': versaocurso[0], 'periodos': periodos, 'trancamentos': trancamentos, 'cargaeletivas': cargaeletivas, 'totaleletivas': versaocurso[1], 'totalatividades': versaocurso[2], 'criticidade': criticidade, 'reprovadas': reprovadas, 'planoAtual': planoAtual, 'itensAtual': itensAtual, 'planosFuturos': planosFuturos, 'itensFuturos': itensFuturos, 'avaliacao': avaliacao, 'id_aluno': id_aluno, })
def novo_plano_futuro(request): """ Função para a criação de plano novo plano de estudos para os semestres subsequentes TODO: Falta ver as disciplinas da prévia e seus equivalentes """ prerequisitos = '' usuario = Perfil.objects.get(user=request.user.id) # processamento da vida acadêmica do aluno logado vidaacademica = vida_academica(usuario.idusuario) # Verificação do nome do curso, versão do curso e faixa de criticidade versaocurso = versao_curso(usuario.idusuario) criticidade = vidaacademica[4] maxcreditos = vidaacademica[6] periodos = vidaacademica[7] proximoPeriodo = proximo_periodo(1) plano = Plano.objects.get(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], aluno=usuario.idusuario) # Prévias e afins aluno = Aluno.objects.using('sca').get(nome__exact=request.user.username) disciplinas_aprovadas = vidaacademica[0] disciplinas_pendentes = Disciplina.objects.using('sca').exclude( id__in=disciplinas_aprovadas).filter( versaocurso=aluno.versaocurso).order_by('optativa', 'departamento') # Criação dos planos futuros conforme inclusão do aluno listaperiodos = [proximo_periodo(x + 2) for x in range(periodos)] if request.method == 'POST': disciplinas = request.POST.get('discip') if disciplinas: disciplinas = disciplinas.split("_") for d in disciplinas: ano = d[0:4] periodo = d[5:6] disc = d[7:] disciplina = Disciplina.objects.using('sca').get(id=disc) try: planofuturo = PlanoFuturo.objects.get(ano=ano, periodo=periodo, plano=plano) except: planofuturo = PlanoFuturo.objects.create(ano=ano, periodo=periodo, plano=plano) i = ItemPlanoFuturo.objects.create(planofuturo=planofuturo, disciplina=disciplina) return redirect('cadd:lista_planos') return render( request, 'cadd/novo_plano_estudos_futuro.html', { 'ativoPlanos': True, 'ativoPlanos3': True, 'aLecionar': disciplinas_pendentes, 'plano': plano, 'listaperiodos': listaperiodos, })
def novo_plano(request): """ Função de criação de um novo plano de estudos para o próximo semestre """ # TODO: Verificar os pré-requisitos para cursar cada uma das disciplinas escolhidas # Prévias e afins # Criação dos planos futuros conforme inclusão do aluno # listaperiodos = [proximo_periodo(x + 2) for x in range(periodos)] usuario = Perfil.objects.get(user=request.user.id) proximoPeriodo = proximo_periodo(1) aluno = Aluno.objects.get(id=usuario.idusuario) # Leitura de informações da vida acadêmica do usuário logado no sistema vidaacademica = vida_academica(usuario.idusuario) disciplinas_aprovadas = vidaacademica[0] criticidade = vidaacademica[4] maxcreditos = vidaacademica[6] periodoscursados = vidaacademica[7] min_periodos_curso = min_periodos(aluno.id) max_periodos_integralização = 4 * (min_periodos(aluno.id) // 2) - 3 curso = nome_sigla_curso(usuario.idusuario) nomecurso = curso[0] versaocurso = versao_curso(usuario.idusuario) plano = Plano.objects.get(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], aluno=usuario.idusuario ) disciplinas_pendentes = Disciplina.objects.using('sca').exclude(id__in=disciplinas_aprovadas).filter( versaocurso=aluno.versaocurso ).order_by('optativa', 'departamento') # Define que o aluno não pode passar à definição do plano futuro continua = False # Recupera o horário com as prévias cadastradas para o próximo período do aluno horario = Horario.objects.filter(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], curso=curso[2] ) # Recupera as prévias cadastradas para o próximo período do aluno # Remove as disciplinas que o aluno já foi aprovado # Retorna as disciplinas presente nas prévias que o aluno deve cursar previas = list(ItemHorario.objects.filter( horario__in=horario).values_list( 'disciplina', flat=True).exclude( disciplina__in=disciplinas_aprovadas) ) previas.sort() disciplinas_pendentes = ItemHorario.objects.filter( disciplina__in=previas ).order_by('diasemana', 'inicio') # Recupera o plano cadastrado para o aluno referente ao próximo período plano = Plano.objects.get(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], aluno=aluno ) # Verifica se o plano consultado existe # Se o plano existir habilita o aluno a passar à definição do plano futuro if plano: continua = True # TODO: Recuperar todos os itens do plano existente para permitir a edição do mesmo if plano: itens_plano_proximo_periodo = ItemPlanoAtual.objects.filter(plano_id=plano.id) disciplinas_plano_proximo_periodo = [] for h in itens_plano_proximo_periodo: item_temp = ItemHorario.objects.filter(id=h.id) disciplinas_plano_proximo_periodo.append(item_temp) # Verifica se foi enviada uma requisição do tipo POST if request.method == 'POST': disciplinas = request.POST.get('discip') if disciplinas: disciplinas = disciplinas.split("_") if continua: plano.delete() plano = Plano.objects.create(ano=proximoPeriodo[0], periodo=proximoPeriodo[1], situacao='M', aluno=aluno ) for d in disciplinas: disc = int(d) itemhorario = ItemHorario.objects.get(id=disc) i = ItemPlanoAtual.objects.create( plano=plano, itemhorario=itemhorario ) numero_abas_periodos_int = max_periodos_integralização - periodoscursados if numero_abas_periodos_int < 1: numero_abas_periodos_int = 5 abas_periodos = [] for x in range(numero_abas_periodos_int): if x == 0: "Não Faz Nada!" else: abas_periodos.append(proximo_periodo(x)) return render(request, 'cadd/novo_plano.html', { 'ativoPlanos': True, 'ativoPlanos2': True, 'prox_periodo': proximoPeriodo[2], 'disciplinas_pendentes': disciplinas_pendentes, 'criticidade': criticidade, 'maxcreditos': maxcreditos, 'nomecurso': nomecurso, 'versaocurso': versaocurso[0], 'periodoscursados': periodoscursados, 'continua': continua, 'minperiodos': min_periodos_curso, 'maxperiodos': max_periodos_integralização, 'abasperiodos': abas_periodos, 'itensplano': disciplinas_plano_proximo_periodo, })