def especialidades(): C = Storage() C.carrera = db.carrera_uo(int(request.args(0))) C.unidad = db.unidad_organica(C.carrera.unidad_organica_id) C.escuela = db.escuela(C.unidad.escuela_id) C.carrera_format = carrera_uo_format(C.carrera) # breadcumbs # enlace a la UO 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) # enlace a la opcion carreras de la UO c_link = Accion(T('Carreras'), URL('unidad', 'carreras', args=[C.unidad.id]), True) menu_migas.append(c_link) # planes C.carrera_format = carrera_uo_format(C.carrera) menu_migas.append(C.carrera_format) menu_migas.append(T("Especialidades")) # permisos puede_crear = auth.has_membership(role=myconf.take('roles.admin')) puede_editar, puede_borrar = (puede_crear, puede_crear) tbl = db.especialidad tbl.carrera_id.default = C.carrera.id tbl.carrera_id.readable = False tbl.carrera_id.writable = False tbl.id.readable = False if ('new' in request.args) or ('edit' in request.args): dbset = (tbl.carrera_id == C.carrera.id) tbl.nombre.requires.append(IS_NOT_IN_DB(db(dbset), 'especialidad.nombre')) tbl.abreviatura.requires.append(IS_NOT_IN_DB(db, 'especialidad.abreviatura')) query = (tbl.id > 0) & (tbl.carrera_id == C.carrera.id) C.grid = grid_simple(query, create=puede_crear, editable=puede_editar, deletable=puede_borrar, args=request.args[:1]) return dict(C=C)
def asignaturas(): C = Storage() C.plan = db.plan_curricular(int(request.args(0))) C.carrera = db.carrera_uo(C.plan.carrera_id) C.unidad = db.unidad_organica(C.carrera.unidad_organica_id) C.escuela = db.escuela(C.unidad.escuela_id) # breadcumbs # enlace a la UO 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) # enlace a la opcion carreras de la UO c_link = Accion(T('Carreras'), URL('unidad', 'carreras', args=[C.unidad.id]), True) menu_migas.append(c_link) # planes C.carrera_format = carrera_uo_format(C.carrera) menu_migas.append(C.carrera_format) p_link = Accion(T('Planes'), URL('planes', args=[C.carrera.id]), True) menu_migas.append(p_link) menu_migas.append(C.plan.nombre) # permisos puede_crear = auth.has_membership(role=myconf.take('roles.admin')) puede_borrar = auth.has_membership(role=myconf.take('roles.admin')) # -- contruir el grid tbl = db.asignatura_plan tbl.id.readable = False query = (tbl.id > 0) query &= (tbl.plan_curricular_id == C.plan.id) tbl.plan_curricular_id.readable = False if ('new' in request.args) or ('edit' in request.args): tbl.plan_curricular_id.writable = False tbl.plan_curricular_id.default = C.plan.id if 'edit' in request.args: tbl.asignatura_id.writable = False tbl.nivel_academico_id.writable = False tbl.importancia.default = 100 # validar que no se repitan las asignaturas por nivel def onvalidation(form): if 'new' in request.args: # comprobar que no exista la combinación nivel n_id = tbl.nivel_academico_id.validate(form.vars.nivel_academico_id)[0] a_id = tbl.asignatura_id.validate(form.vars.asignatura_id)[0] row = tbl(nivel_academico_id=n_id, asignatura_id=a_id, plan_curricular_id=C.plan.id) if row: # ya existe en el plan esa asignatura con el mismo nivel de # acceso form.errors.asignatura_id = T("Ya existe en el plan con el mismo nivel") text_lengths = {'asignatura_plan.asignatura_id': 50} C.grid = grid_simple(query, args=request.args[:1], editable=puede_crear, deletable=puede_borrar, create=puede_crear, onvalidation=onvalidation, maxtextlengths=text_lengths, orderby=[tbl.nivel_academico_id, tbl.asignatura_id],) return dict(C=C)
def planes(): '''Manejo de planes para una carrera''' C = Storage() C.carrera = db.carrera_uo(int(request.args(0))) C.unidad = db.unidad_organica(C.carrera.unidad_organica_id) C.escuela = db.escuela(C.unidad.escuela_id) # breadcumbs # enlace a la UO 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) # enlace a la opcion carreras de la UO c_link = Accion(T('Carreras'), URL('unidad', 'carreras', args=[C.unidad.id]), True) menu_migas.append(c_link) # planes C.carrera_format = carrera_uo_format(C.carrera) menu_migas.append(C.carrera_format) menu_migas.append(T("Planes")) # permisos puede_crear = auth.has_membership(role=myconf.take('roles.admin')) puede_editar, puede_borrar = (puede_crear, puede_crear) # -- contruir el grid de los planes tbl = db.plan_curricular query = ((tbl.id > 0) & (tbl.carrera_id == C.carrera.id)) # ver si es la opción de activar plan if 'activar' in request.args: plan = tbl(int(request.args(2))) # desactivar todos los planes db(query).update(estado=False) plan.update_record(estado=True) redirect(URL('carrera', 'planes', args=[C.carrera.id])) tbl.id.readable = False tbl.carrera_id.writable = False if 'new' in request.args: tbl.carrera_id.default = C.carrera.id campos = [tbl.nombre, tbl.estado] def _enlaces(row): co = CAT() link = URL('asignaturas', args=[row.id]) txt = CAT(SPAN('', _class="glyphicon glyphicon-book"), ' ', T('Asignaturas')) co.append(Accion(txt, link, True, _class="btn btn-default btn-sm")) if not row.estado: link = URL('planes', args=[C.carrera.id, 'activar', row.id], user_signature=True) txt = CAT(SPAN('', _class="glyphicon glyphicon-ok-sign"), ' ', T("Activar")) co.append(Accion(txt, link, True, _class="btn btn-default btn-sm")) return co enlaces = [dict(header='', body=_enlaces)] C.grid = grid_simple(query, create=puede_crear, editable=puede_editar, deletable=puede_borrar, fields=campos, links=enlaces, args=request.args[:1]) return dict(C=C)