def obtenerRubricaXidRubrica(idRubrica):
    nombreRubrica = Rubrica.obtenerRubrica(idRubrica)
    d = {}
    d['idRubrica'] = idRubrica
    d['nombreRubrica'] = nombreRubrica.nombre
    d['fechaRegistro'] = nombreRubrica.fecha_registro.__str__()
    d['flgRubricaEspecial'] = nombreRubrica.flg_rubrica_especial
    d['idUsuarioCreador'] = nombreRubrica.id_usuario_creador
    d['tipo'] = nombreRubrica.tipo

    aspectos = []
    if nombreRubrica.tipo != 3:
        listaAspectos = Rubrica_aspecto.obtenerAspectos(idRubrica)
    else:
        listaAspectos = Rubrica_aspecto.obtenerAspectosCoev(idRubrica)

    for aspecto in listaAspectos:
        aux = {}
        aux['idAspecto'] = aspecto.id_aspecto
        aux['descripcion'] = aspecto.descripcion
        aux['informacion'] = aspecto.informacion
        aux['puntajeMax'] = aspecto.puntaje_max
        aux['tipoClasificacion'] = aspecto.tipo_clasificacion
        aux['flgGrupal'] = aspecto.flg_grupal
        indicadores = []
        listaIndicadores = Rubrica_aspecto_indicador.obtenerIndicadores(
            idRubrica, aspecto.id_aspecto)
        for indicador in listaIndicadores:
            aux2 = {}
            aux2['idIndicador'] = indicador.id_indicador
            aux2['descripcion'] = indicador.descripcion
            aux2['informacion'] = indicador.informacion
            aux2['puntajeMax'] = indicador.puntaje_max
            #aux2['tipo'] = indicador.tipo
            niveles = []
            listaNiveles = Rubrica_aspecto_indicador_nivel.obtenerNiveles(
                idRubrica, indicador.id_indicador)
            for nivel in listaNiveles:
                aux3 = {}
                aux3['idNivel'] = nivel.id_nivel
                aux3['descripcion'] = nivel.descripcion
                aux3['grado'] = nivel.grado
                aux3['puntaje'] = nivel.puntaje
                niveles.append(aux3)
            aux2['listaNiveles'] = niveles
            aux2['cantNiveles'] = len(niveles)
            indicadores.append(aux2)
        aux['listaIndicadores'] = indicadores
        aux['cantIndicadores'] = len(indicadores)
        aspectos.append(aux)
    d['listaAspectos'] = aspectos
    d['cantAspectos'] = len(aspectos)
    return d
def editarRubrica(idRubrica, idFlgEspecial, idUsuarioCreador, nombreRubrica,
                  listaAspectos, tipo):
    Rubrica().editarRubrica(idRubrica, idFlgEspecial, idUsuarioCreador,
                            nombreRubrica, tipo)
    Rubrica_aspecto_indicador_nivel().borrarNiveles(idRubrica)
    Rubrica_aspecto_indicador().borrarIndicadores(idRubrica)
    Rubrica_aspecto().borrarAspectos(idRubrica)

    for aspecto in listaAspectos:
        aspectoObjeto = Aspecto(
            descripcion=aspecto['descripcion'],
            informacion=aspecto['informacion'],
            puntaje_max=aspecto['puntajeMax'],
            tipo_clasificacion=aspecto['tipoClasificacion'],
            flg_grupal=aspecto['flgGrupal'])
        listaIndicadores = aspecto['listaIndicadores']
        idAspecto = Aspecto().addOne(aspectoObjeto)

        rubricaAspectoObjeto = Rubrica_aspecto(id_rubrica=idRubrica,
                                               id_aspecto=idAspecto)
        aux = Rubrica_aspecto().addOne(rubricaAspectoObjeto)

        for indicador in listaIndicadores:
            indicadorObjeto = Indicador(descripcion=indicador['descripcion'],
                                        informacion=indicador['informacion'],
                                        puntaje_max=indicador['puntajeMax'])
            idIndicador = Indicador().addOne(indicadorObjeto)

            rubricaAspectoIndicadorObj = Rubrica_aspecto_indicador(
                id_rubrica=idRubrica,
                id_aspecto=idAspecto,
                id_indicador=idIndicador)
            aux2 = Rubrica_aspecto_indicador().addOne(
                rubricaAspectoIndicadorObj)

            listaNiveles = indicador['listaNiveles']

            for nivel in listaNiveles:
                nivelObjeto = Nivel(descripcion=nivel['descripcion'],
                                    grado=nivel['grado'],
                                    puntaje=nivel['puntaje'])
                idNivel = Nivel().addOne(nivelObjeto)
                rubricaAspectoIndicadorNivelObj = Rubrica_aspecto_indicador_nivel(
                    id_rubrica=idRubrica,
                    id_aspecto=idAspecto,
                    id_indicador=idIndicador,
                    id_nivel=idNivel)
                Rubrica_aspecto_indicador_nivel().addOne(
                    rubricaAspectoIndicadorNivelObj)

    d = {}
    d['message'] = True
    return d
def crearRubrica(idActividad, idFlgEspecial, idUsuarioCreador, nombreRubrica,
                 listaAspectos, tipo):

    rubricaActual = Rubrica.query.filter(Rubrica.id_actividad == idActividad,
                                         Rubrica.flg_activo == 1,
                                         Rubrica.tipo == tipo).first()

    if rubricaActual is not None:
        Rubrica.desactivarRubrica(rubricaActual.id_rubrica)

    rubricaObjeto = Rubrica(flg_rubrica_especial=idFlgEspecial,
                            id_usuario_creador=idUsuarioCreador,
                            nombre=nombreRubrica,
                            tipo=tipo,
                            id_actividad=idActividad)
    idRubrica = Rubrica().addOne(rubricaObjeto)
    """
    if tipo == 3:
        aspectoObjetoCoev = Aspecto(
            descripcion = "Evaluacion a miembros del grupo",
            puntaje_max = 5,
            tipo_clasificacion = 1,
            flg_grupal = 0
        )
        idAspectoCoev = Aspecto().addOne(aspectoObjetoCoev)
        rubricaAspectoObjetoCoev = Rubrica_aspecto(
            id_rubrica = idRubrica,
            id_aspecto = idAspectoCoev
        )
        Rubrica_aspecto().addOne(rubricaAspectoObjetoCoev)
        
        listaAlumnos = Alumno_actividad.query.filter(Alumno_actividad.id_actividad == idActividad).all()
        for alumno in listaAlumnos:
            alumnoCompanero = Usuario.query.filter(Usuario.id_usuario == alumno.id_alumno).first()
            indicadorObjetoCoev = Indicador(
                descripcion = "¿Que tan bien crees que trabajo " + alumnoCompanero.nombre + " " + alumnoCompanero.apellido_paterno + "?",
                puntaje_max = 5,
                id_alumno = alumno.id_alumno
            )
            idIndicadorCoev = Indicador().addOne(indicadorObjetoCoev)
            
            rubricaAspectoIndicadorCoev = Rubrica_aspecto_indicador(
                id_rubrica = idRubrica,
                id_aspecto = idAspectoCoev,
                id_indicador = idIndicadorCoev
            )
            Rubrica_aspecto_indicador().addOne(rubricaAspectoIndicadorCoev)
            crearNivelesCoev(idRubrica, idAspectoCoev, idIndicadorCoev)
    """
    for aspecto in listaAspectos:
        aspectoObjeto = Aspecto(
            descripcion=aspecto['descripcion'],
            informacion=aspecto['informacion'],
            puntaje_max=aspecto['puntajeMax'],
            tipo_clasificacion=aspecto['tipoClasificacion'],
            flg_grupal=aspecto['flgGrupal'])
        listaIndicadores = aspecto['listaIndicadores']
        idAspecto = Aspecto().addOne(aspectoObjeto)

        rubricaAspectoObjeto = Rubrica_aspecto(id_rubrica=idRubrica,
                                               id_aspecto=idAspecto)
        aux = Rubrica_aspecto().addOne(rubricaAspectoObjeto)

        for indicador in listaIndicadores:
            indicadorObjeto = Indicador(descripcion=indicador['descripcion'],
                                        informacion=indicador['informacion'],
                                        puntaje_max=indicador['puntajeMax'])
            idIndicador = Indicador().addOne(indicadorObjeto)

            rubricaAspectoIndicadorObj = Rubrica_aspecto_indicador(
                id_rubrica=idRubrica,
                id_aspecto=idAspecto,
                id_indicador=idIndicador)
            aux2 = Rubrica_aspecto_indicador().addOne(
                rubricaAspectoIndicadorObj)

            listaNiveles = indicador['listaNiveles']

            for nivel in listaNiveles:
                nivelObjeto = Nivel(descripcion=nivel['descripcion'],
                                    grado=nivel['grado'],
                                    puntaje=nivel['puntaje'])
                idNivel = Nivel().addOne(nivelObjeto)
                rubricaAspectoIndicadorNivelObj = Rubrica_aspecto_indicador_nivel(
                    id_rubrica=idRubrica,
                    id_aspecto=idAspecto,
                    id_indicador=idIndicador,
                    id_nivel=idNivel)
                Rubrica_aspecto_indicador_nivel().addOne(
                    rubricaAspectoIndicadorNivelObj)

    d = {}
    d['idRubrica'] = idRubrica

    return d
def obtenerRubricaCoevaluacion(idActividad, idAlumnoConsultando):
    idRubrica = Rubrica.query.filter(
        and_(Rubrica.id_actividad == idActividad, Rubrica.tipo == 3,
             Rubrica.flg_activo == 1)).first()
    if idRubrica is not None:
        nombreRubrica = Rubrica.obtenerRubrica(idRubrica)
        d = {}
        d['idRubrica'] = idRubrica
        d['nombreRubrica'] = nombreRubrica.nombre
        d['fechaRegistro'] = nombreRubrica.fecha_registro.__str__()
        d['flgRubricaEspecial'] = nombreRubrica.flg_rubrica_especial
        d['idUsuarioCreador'] = nombreRubrica.id_usuario_creador
        d['tipo'] = nombreRubrica.tipo

        aspectos = []
        listaAspectos = Rubrica_aspecto.obtenerAspectos(idRubrica)

        for aspecto in listaAspectos:
            if aspecto.descripcion == "Evaluacion a miembros del grupo":
                grupoAnalizado = Alumno_actividad.query(
                    Alumno_actividad.id_grupo).filter(
                        Alumno_actividad.id_actividad == idActividad,
                        Alumno_actividad.id_alumno ==
                        idAlumnoConsultando).first()
                listaAlumnosCoev = Grupo_alumno_horario.query(
                    Grupo_alumno_horario.id_usuario).filter(
                        and_(
                            Grupo_alumno_horario.id_grupo ==
                            grupoAnalizado.id_grupo,
                            Grupo_alumno_horario.id_usuario !=
                            idAlumnoConsultando)).all()
                aux = {}
                aux['idAspecto'] = aspecto.id_aspecto
                aux['descripcion'] = aspecto.descripcion
                aux['informacion'] = aspecto.informacion
                aux['puntajeMax'] = aspecto.puntaje_max
                aux['tipoClasificacion'] = aspecto.tipo_clasificacion
                aux['flgGrupal'] = aspecto.flg_grupal
                indicadores = []
                for alumno in listaAlumnosCoev:
                    indicadorCoev = Indicador.query(
                        Indicador.id_indicador).join(
                            Rubrica_aspecto_indicador,
                            Rubrica_aspecto_indicador.id_aspecto == aspecto.
                            id_aspecto).filter(Indicador.id_alumno ==
                                               alumno.id_usuario).first()
                    aux2 = {}
                    aux2['idIndicador'] = indicadorCoev.id_indicador
                    aux2['descripcion'] = indicadorCoev.descripcion
                    aux2['informacion'] = indicadorCoev.informacion
                    aux2['puntajeMax'] = indicadorCoev.puntaje_max
                    niveles = []
                    listaNiveles = Rubrica_aspecto_indicador_nivel.obtenerNiveles(
                        idRubrica, indicadorCoev.id_indicador)
                    for nivel in listaNiveles:
                        aux3 = {}
                        aux3['idNivel'] = nivel.id_nivel
                        aux3['descripcion'] = nivel.descripcion
                        aux3['grado'] = nivel.grado
                        aux3['puntaje'] = nivel.puntaje
                        niveles.append(aux3)
                    aux2['listaNiveles'] = niveles
                    aux2['cantNiveles'] = len(niveles)
                    indicadores.append(aux2)
                aux['listaIndicadores'] = indicadores
                aux['cantIndicadores'] = len(indicadores)
                aspectos.append(aux)

            else:
                aux = {}
                aux['idAspecto'] = aspecto.id_aspecto
                aux['descripcion'] = aspecto.descripcion
                aux['informacion'] = aspecto.informacion
                aux['puntajeMax'] = aspecto.puntaje_max
                aux['tipoClasificacion'] = aspecto.tipo_clasificacion
                aux['flgGrupal'] = aspecto.flg_grupal
                indicadores = []
                listaIndicadores = Rubrica_aspecto_indicador.obtenerIndicadores(
                    idRubrica, aspecto.id_aspecto)
                for indicador in listaIndicadores:
                    aux2 = {}
                    aux2['idIndicador'] = indicador.id_indicador
                    aux2['descripcion'] = indicador.descripcion
                    aux2['informacion'] = indicador.informacion
                    aux2['puntajeMax'] = indicador.puntaje_max
                    niveles = []
                    listaNiveles = Rubrica_aspecto_indicador_nivel.obtenerNiveles(
                        idRubrica, indicador.id_indicador)
                    for nivel in listaNiveles:
                        aux3 = {}
                        aux3['idNivel'] = nivel.id_nivel
                        aux3['descripcion'] = nivel.descripcion
                        aux3['grado'] = nivel.grado
                        aux3['puntaje'] = nivel.puntaje
                        niveles.append(aux3)
                    aux2['listaNiveles'] = niveles
                    aux2['cantNiveles'] = len(niveles)
                    indicadores.append(aux2)
                aux['listaIndicadores'] = indicadores
                aux['cantIndicadores'] = len(indicadores)
                aspectos.append(aux)
        d['listaAspectos'] = aspectos
        d['cantAspectos'] = len(aspectos)
        return d

    else:
        d = {}
        d['succeed'] = False
        d['message'] = "No existe Rubrica"
        return d