示例#1
0
def distribuir_candidaturas(examen_id):
    """Distribuye candidatos por aulas para examen de acceso"""
    db = current.db
    ex = db.examen(examen_id)
    assert ex is not None
    # eliminar cualquier asignación anterior para ese examen
    db(db.examen_aula_estudiante.examen_id == examen_id).delete()
    db.commit()
    # buscar todos los estudiantes que deben realizar el examen
    cand_ids = examen.obtener_candidaturas(ex.id) # candidaturas, hay que convertirlos en estudiantes
    estudiantes = [(db.candidatura(c.id)).estudiante_id for c in cand_ids]
    # buscar las aulas definidas para el examen
    aulas = examen.obtener_aulas(ex.id)
    # comprobar que los espacios disponibles en las aulas sean los suficientes
    # para acomodar a los estudiantes.
    total = aula.capacidad_total(aulas)
    if len(estudiantes) <= total:
        """asignarle las aulas a los estudianes"""
        for est in estudiantes:
            aula_disponible = buscar_aula_dispobible(examen_id)
            if aula_disponible:
                db.examen_aula_estudiante.insert(
                    examen_id = ex.id,
                    aula_id = aula_disponible.id,
                    estudiante_id = est.id
                    )
                db.commit()
示例#2
0
文件: examen.py 项目: eadomenech/agis
def index():
    """Configuración de las aulas"""
    C = Storage()
    C.examen = db.examen(int(request.args(0)))
    C.asignatura = C.examen.asignatura_id
    C.evento = db.evento(C.examen.evento_id)
    C.ano = db.ano_academico(C.evento.ano_academico_id)
    C.unidad = db.unidad_organica(C.ano.unidad_organica_id)
    C.escuela = db.escuela(C.unidad.escuela_id)

    # breadcumbs
    u_link = Accion(C.unidad.abreviatura or C.unidad.nombre,
                    URL('unidad', 'index', args=[C.unidad.id]),
                    True)  # siempre dentro de esta funcion
    menu_migas.append(u_link)
    a_links = Accion(T('Años académicos'),
                     URL('unidad', 'index', args=[C.unidad.id]),
                     True)
    menu_migas.append(a_links)
    e_link = Accion(C.evento.nombre,
                    URL('evento','index', args=[C.evento.id]),
                    True)
    menu_migas.append(e_link)
    menu_migas.append(db.examen._format(C.examen))
    menu_migas.append(T('Asignación de aulas'))
    
    # -- permisos
    puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))
    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
    
    # -- configurar grid
    tbl = db.examen_aula
    query = (tbl.id > 0) & (tbl.examen_id == C.examen.id)
    
    if 'new' in request.args:
        tbl.examen_id.default = C.examen.id
        tbl.examen_id.writable = False
        
        estan_set = (db.aula.id > 0) & (db.aula.id == db.examen_aula.aula_id)
        estan_set &= (db.examen_aula.examen_id == C.examen.id)
        estan = [a.id for a in db(estan_set).select(db.aula.id)]
        a_set  = (db.aula.id > 0) & (db.aula.disponible == True)
        a_set &= (~db.aula.id.belongs(estan))
        posibles = IS_IN_DB(db(a_set), db.aula.id, '%(nombre)s', zero=None)
        db.examen_aula.aula_id.requires = posibles
    
    C.titulo = "{}: {}".format(T("Aulas para el exámen"),
                               db.examen._format(C.examen))
    # -- configurar los campos
    tbl.id.readable = False
    tbl.examen_id.readable = False
    
    # -- datos de capacidad
    from agiscore.db.examen import obtener_candidaturas, obtener_aulas
    from agiscore.db.aula import capacidad_total
    C.a_examinar = len(obtener_candidaturas(C.examen.id))
    C.a_capacidad = capacidad_total(obtener_aulas(C.examen.id))
    
    C.grid = grid_simple(query,
                         create=puede_crear,
                         editable=puede_editar,
                         deletable=puede_borrar,
                         searchable=False,
                         history=False,
                         args=request.args[:1])
    
    return dict(C=C)