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()
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)