def enlaces(row): request = current.request c = request.controller f = request.function pars = request.vars e = db.estudiante(uuid=row.persona.uuid) pars['estudiante_id'] = e.id u = db.auth_user(auth.user.id) profesor = None asignacion = None if u.persona.select().first(): profesor = u.persona.select().first().profesor.select().first() if profesor: asignacion = db.profesor_asignatura(profesor_id=profesor.id, asignatura_id=examen.asignatura_id, evento_id=examen.evento_id) nota = db.nota(examen_id=examen.id, estudiante_id=e.id) puede = ((auth.has_membership(role=rol_admin) or \ (asignacion and asignacion.es_jefe))) puede = puede or (auth.has_membership(role=rol_profesor) and \ ((nota.valor is None) and asignacion)) from agiscore.db.evento import esta_activo puede = puede and esta_activo(db.evento(examen.evento_id)) url1 = URL(c=c, f=f, args=[examen.id, 'new'], vars=pars, user_signature=True) a1 = Accion(SPAN('', _class='glyphicon glyphicon-plus-sign'), url1, puede, _class="btn btn-default", _title=T("Poner nota")) return CAT(a1)
def index(): """UI evento de matricua""" C = Storage() C.evento = db.evento(request.args(0)) 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(C.ano.nombre, URL('unidad', 'index', args=[C.unidad.id]), True) menu_migas.append(a_links) e_link = Accion(C.evento.nombre, URL('index', args=[C.evento.id]), True) menu_migas.append(e_link) menu_migas.append(T("Candidatos admitidos")) con_pago = db.tipo_pago(nombre="MATRÍCULA E CONFIRMAÇÃO DE MATRÍCULA") if con_pago is None: raise HTTP(404) C.titulo = T("Candidatos") # configuración del grid tbl = db.candidatura query = (tbl.estudiante_id == db.estudiante.id) query &= (tbl.ano_academico_id == C.ano.id) query &= (tbl.estado_candidatura == ADMITIDO) query &= (db.estudiante.persona_id == db.persona.id) query &= (db.estudiante.unidad_organica_id == C.unidad.id) q2 = (tbl.estudiante_id == db.estudiante.id) q2 &= (tbl.ano_academico_id == C.ano.id) q2 &= (tbl.estado_candidatura == ADMITIDO) q2 &= (db.estudiante.persona_id == db.persona.id) q2 &= (db.estudiante.unidad_organica_id == C.unidad.id) q2 &= (db.matricula.estudiante_id == tbl.estudiante_id) q2 &= (db.matricula.estado_uo.belongs([MATRICULADO, MATRICULADO_CON_DEUDAS])) q2 = [a.estudiante_id for a in db(q2).select(tbl.estudiante_id, distinct=True)] query &= (~tbl.estudiante_id.belongs(q2)) campos = [tbl.numero_inscripcion, db.persona.id, db.persona.numero_identidad, db.persona.nombre_completo, db.estudiante.id] for f in tbl: f.readable = False for f in db.persona: f.readable = False for f in db.estudiante: f.readable = False tbl.numero_inscripcion.readable = True db.persona.numero_identidad.readable = True db.persona.nombre_completo.readable = True tbl.numero_inscripcion.label = T("#INS") db.persona.numero_identidad.label = T("#IDENT") db.persona.nombre_completo.label = T("Nombre") text_lengths = {'persona.nombre_completo': 45} admin_o_cobrador = auth.has_membership(role=myconf.take('roles.admin')) or \ auth.has_membership(role=myconf.take('roles.cobrador_matricula')) adm_co_admdoc = auth.has_membership(role=myconf.take('roles.admin')) adm_co_admdoc |= auth.has_membership(role=myconf.take('roles.confirmador_matricula')) adm_co_admdoc |= auth.has_membership(role=myconf.take('roles.admdocente')) ev_activo = esta_activo(C.evento) def _enlaces(row): co = CAT() mat = db.matricula(ano_academico_id=C.ano.id, estudiante_id=row.estudiante.id) # buscar un pago para la persona if mat is None: # si no ha pagado poner enlace para pagar pago_link = URL('pago', args=[C.evento.id, row.persona.id]) puede_pagar = admin_o_cobrador puede_pagar &= ev_activo co.append(Accion(CAT(SPAN('', _class='glyphicon glyphicon-hand-up'), ' ', T("Falta de pago")), pago_link, puede_pagar, _class="btn btn-default btn-sm", _title=T("Pago confirmación de matricula"))) elif mat.estado_uo == SIN_MATRICULAR: # poner enlace para confirmación de matricula c_link = URL('matricular', args=[C.evento.id, row.persona.id]) puede_confirmar = adm_co_admdoc puede_confirmar &= ev_activo co.append(Accion(CAT(SPAN('', _class='glyphicon glyphicon-hand-up'), ' ', T("Confirmar")), c_link, puede_confirmar, _class="btn btn-default btn-sm", _title=T("Confirmación de matricula"))) return co enlaces = [dict(header='', body=_enlaces)] C.grid = grid_simple(query, create=False, field_id=db.persona.id, searchable=True, fields=campos, links=enlaces, paginate=20, maxtextlengths=text_lengths, args=request.args[:1]) return dict(C=C)
def matriculados(): """UI evento de época normal""" C = Storage() C.evento = db.evento(request.args(0)) 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(C.ano.nombre, URL('unidad', 'index', args=[C.unidad.id]), True) menu_migas.append(a_links) e_link = Accion(C.evento.nombre, URL('index', args=[C.evento.id]), True) menu_migas.append(e_link) menu_migas.append(T("Matriculados")) C.titulo = T("Registro de estudiantes") # configuración del grid tbl = db.estudiante query = (tbl.persona_id == db.persona.id) query &= (tbl.unidad_organica_id == C.unidad.id) query &= (tbl.id == db.matricula.estudiante_id) query &= (db.matricula.ano_academico_id == C.ano.id) query &= (db.matricula.estado_uo.belongs(MATRICULADO, MATRICULADO_CON_DEUDAS)) exportadores = dict(xml=False, html=False, csv_with_hidden_cols=False, csv=False, tsv_with_hidden_cols=False, tsv=False, json=False, PDF=(tools.ExporterPDF, 'PDF')) campos = [tbl.id, tbl.codigo, db.persona.id, db.persona.nombre_completo, db.matricula.estado_uo, db.matricula.regimen_id] for f in tbl: f.readable = False tbl.codigo.readable = True for f in db.persona: f.readable = False db.persona.nombre_completo.readable = True for f in db.matricula: f.readable = False db.matricula.estado_uo.readable = True db.matricula.regimen_id.readable = True db.matricula.carrera_id.readable = True db.matricula.turma_id.readable = True db.matricula.situacion.readable = True for f in db.turma: f.readable = False tbl.codigo.label = T("#MEC") db.persona.nombre_completo.label = T("Nombre") db.matricula.estado_uo.label = T("Estado") text_lengths = {'persona.nombre_completo': 45, 'matricula.estado_uo': 45} es_admin = auth.has_membership(role=myconf.take('roles.admin')) ev_activo = esta_activo(C.evento) r_regular_q = (db.regimen_unidad_organica.regimen_id == db.regimen.id) r_regular_q &= (db.regimen.codigo=='1') r_regular_q &= (db.regimen_unidad_organica.unidad_organica_id == C.unidad.id) r_regular = db(r_regular_q).select(db.regimen_unidad_organica.id).first() def _enlaces(row): co = CAT() # buscar un pago para la persona editar_link = URL('editar', args=[C.evento.id, row.persona.id]) puede_editar = es_admin puede_editar &= ev_activo co.append(Accion(CAT(SPAN('', _class='glyphicon glyphicon-hand-up'), ' ', T("Editar")), editar_link, puede_editar, _class="btn btn-default btn-sm", _title=T("Editar datos del estudiante"))) puede_pagar = es_admin or auth.has_membership(role=myconf.take('roles.cobrador_propina')) puede_pagar &= ev_activo if row.matricula.regimen_id != r_regular.id: # los del regimen regular no pagan propina co.append(pago_link("enormal-content", row.persona.id, C.evento.id, activo=puede_pagar, T=T)) return co enlaces = [dict(header='', body=_enlaces)] if request.vars._export_type: response.context = C C.grid = grid_simple(query, create=False, field_id=db.persona.id, searchable=True, fields=campos, links=enlaces, paginate=20, maxtextlengths=text_lengths, csv=True, exportclasses=exportadores, orderby=[db.persona.nombre_completo], args=request.args[:1]) return dict(C=C)