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