示例#1
0
文件: examen.py 项目: eadomenech/agis
def notas_reporte():
    '''Reporte de las notas de los estudiantes para este examen'''
    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(T('Reporte de resultados'))

    C.titulo = "{} - {}".format(db.examen._format(C.examen), C.evento.nombre)
    from agiscore.db import nota as nota_model
    nota_model.crear_entradas(C.examen.id)
    
    query  = (db.nota.examen_id == C.examen.id)
    query &= (db.nota.estudiante_id == db.estudiante.id)
    query &= (db.estudiante.persona_id == db.persona.id)
    query &= (db.candidatura.estudiante_id == db.nota.estudiante_id)
    
    # preparar campos
    for f in db.nota:
        f.readable = False
    for f in db.persona:
        f.readable = False
    for f in db.estudiante:
        f.readable = False
    for f in db.candidatura:
        f.readable = False
    db.candidatura.numero_inscripcion.readable = True
    db.candidatura.numero_inscripcion.label = T('#INS')
    db.persona.nombre_completo.readable = True
    db.persona.nombre_completo.label = T("Nombre")
    db.nota.valor.readable = True
    db.nota.valor.label = T("Nota")
    
    campos = [db.candidatura.numero_inscripcion,
              db.persona.nombre_completo,
              db.nota.valor]
    text_lengths={'persona.nombre_completo': 50}
    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'))
    
    if request.vars._export_type:
        response.context = C
    
    C.grid = grid_simple(query,
                         orderby=[db.persona.nombre_completo],
                         maxtextlengths=text_lengths,
                         exportclasses=exportadores,
                         csv=True,
                         fields=campos,
                         create=False,
                         editable=False,
                         deletable=False,
                         history=False,
                         args=request.args[:1])
    
    
    return dict(C=C)
示例#2
0
文件: nota.py 项目: eadomenech/agis
def grid_asignar_nota(examen):
    """Retorna un grid para manejo de las notas de un examen"""
    co = CAT()
    if not examen:
        return co
    auth = current.auth
    if not auth.user:
        return co
    db = current.db
    T = current.T
    conf = current.conf
    request = current.request
    rol_admin = conf.take('roles.admin')
    rol_profesor = conf.take('roles.profesor')
    nota_model.definir_tabla()
    nota_model.crear_entradas(examen.id)
    db.nota.examen_id.readable = False
    q = (db.nota.examen_id == examen.id)
    q &= (db.nota.estudiante_id == db.estudiante.id)
    q &= (db.persona.uuid == db.estudiante.uuid)
    campos = [db.persona.uuid]
    if auth.has_membership(role=rol_admin):
        campos.append(db.persona.nombre_completo)
    campos.append(db.nota.valor)
    campos.append(db.nota.id)
    # configurar campos
    persona_model.esconder_campos()
    estudiante_model.esconder_campos()
    db.nota.estudiante_id.readable = False
    db.persona.uuid.readable = True
    db.persona.nombre_completo.label = T('Nombre')
    db.persona.uuid.label = "UUID"
    if auth.has_membership(role=rol_admin):
        db.persona.nombre_completo.readable = True
    # enlaces en el GRID ------------------------------------------------------
    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)
    # -------------------------------------------------------------------------
    g_links = [dict(header='', body=enlaces)]
    
    text_lengths = {'persona.nombre_completo': 50,
                  'persona.uuid': 100}
    
    manejo = grid_simple(q,
                         fields=campos,
                         create=False,
                         deletable=False,
                         editable=False,
                         maxtextlengths=text_lengths,
                         links=g_links,
                         args=request.args[:1])
    
    co.append(DIV(
        DIV(H3(T("Asignación de notas para"), " ",
               examen_model.examen_format(examen),
            _class="panel-title"), _class="panel-heading"),
        DIV(manejo, _class="panel-body"),
        _class="panel panel-default"))
    return co