Beispiel #1
0
 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)
Beispiel #2
0
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)
Beispiel #3
0
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)