예제 #1
0
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
예제 #2
0
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,
    })
예제 #3
0
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,
    })
예제 #4
0
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,
        })
예제 #5
0
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,
        })
예제 #6
0
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,
        })
예제 #7
0
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,
    })