def home(request): """ Função de saída para a tela inicial do sistema """ # Variáveis membro = "" comissoes = "" convocacao = "" reunioes = "" matricula = "" nomecurso = "" versaocurso = "" criticidade = "" periodos = "" reprovadas = "" trancamentos = "" cargaeletivas = "" totaleletivas = "" cargaatividades = "" totalatividades = "" usuario = Perfil.objects.get(user=request.user.id) # Verifica o tipo do usuário logado tipousuario = tipo_usuario(usuario.matricula,0) # Caso seja um professor if 'Prof' in tipousuario: membro = Membro.objects.filter( professor=usuario.idusuario ).exclude(ativo=0).values_list('comissao') if membro: comissoes = Comissao.objects.filter(id__in=membro) else: messages.error(request, 'Professor(a), o Sr(a) não está cadastrado(a) em nenhuma ' + \ 'comissão de apoio!' ) if 'Aluno' in tipousuario: convocacao = Convocacao.objects.filter(aluno=usuario.idusuario).values_list('reuniao') reunioes = Reuniao.objects.filter(id__in=convocacao) # processamento da vida acadêmica do aluno logado vidaacademica = vida_academica(usuario.idusuario) reprovadas = vidaacademica[3] # Verificação do nome do curso, versão, faixa de criticidade e periodos nomecurso = nome_sigla_curso(usuario.idusuario)[0] t_versaocurso = versao_curso(usuario.idusuario) versaocurso = t_versaocurso[0] totaleletivas = t_versaocurso[1] totalatividades = t_versaocurso[2] criticidade = vidaacademica[4] periodos = vidaacademica[7] trancamentos = vidaacademica[9] cargaeletivas = vidaacademica[10] # Convocação para alguma reunião if not convocacao: messages.error(request, 'Aluno(a), você não possui nenhuma reunião agendada!') return render(request, 'accounts/home.html', { 'home': home, 'ativoInicio': True, 'membro': membro, 'comissoes': comissoes, 'reunioes': reunioes, 'nomecurso': nomecurso, 'versaocurso': versaocurso, 'periodos': periodos, 'trancamentos': trancamentos, 'cargaeletivas': cargaeletivas, 'totaleletivas': totaleletivas, 'totalatividades': totalatividades, 'criticidade': criticidade, 'reprovadas': reprovadas, })
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 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 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(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, })