Exemplo n.º 1
0
def carreras_me():
    C = Storage()
    C.escuela = db.escuela(1)
    menu_migas.append(T("Descripciones de carreras"))

    tbl = db.descripcion_carrera
    query = (tbl.id > 0)

    tbl.id.readable = False
    text_lengths = {'descripcion_carrera.nombre': 50}

    C.titulo = T("Registro de carreras del Ministerio de Educación")

    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
#     puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))

    C.grid = grid_simple(query,
                         editable=puede_editar,
                         create=puede_crear,
                         maxtextlengths=text_lengths,
                         orderby=[tbl.nombre],
                         args=request.args[:1])

    return dict(C=C)
Exemplo n.º 2
0
def asignaturas():
    '''registro general de asigaturas'''
    C = Storage()
    C.escuela = db.escuela(1)

    menu_migas.append(T("Registro de asignaturas"))

    # -- construir el grid
    tbl = db.asignatura
    query = (tbl.id > 0)

    # permisos
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))
    puede_editar, puede_borrar = (puede_crear, puede_crear)

    tbl.id.readable = False
    text_lengths = {'asignatura.nombre': 50}

    C.grid = grid_simple(query,
                         create=puede_crear,
                         editable=puede_editar,
                         maxtextlengths=text_lengths,
                         deletable=puede_borrar)

    return dict(C=C)
Exemplo n.º 3
0
def index():
    C = Storage()
    C.escuela = db.escuela(1)
    menu_migas.append(T("Tipos de pagos"))

    C.titulo = T("Registro de tipos de pago")

    # permisos
    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
#     puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))

    tbl = db.tipo_pago

    query = (tbl.id > 0)
    tbl.id.readable = False

    if 'edit' in request.args:
        tbl.nombre.writable = False

    text_lengths = {'tipo_pago.nombre': 50}

    C.grid = grid_simple(query,
                         maxtextlengths=text_lengths,
                         create=puede_crear,
                         editable=puede_editar)

    return dict(C=C)
Exemplo n.º 4
0
def manejo_escuelas_medias(db, T, auth=None, request=None, conf=None):
    if auth is None:
        auth = current.auth
    if request is None:
        request = current.request
    if conf is None:
        conf = current.conf

    if 'new' in request.args:
        #preparar el formulario para agregar un elemento.
        if request.vars.provincia_id:
            prov = provincia.obtener(int(request.vars.provincia_id))
        else:
            prov = provincia.obtener() # obtener cualquier provincia
        mun = municipio.obtener(provincia_id=prov.id)
        db.escuela_media.provincia_id.default = prov.id
        db.escuela_media.municipio_id.default = mun.id
        db.escuela_media.municipio_id.requires = IS_IN_DB(
            db(db.municipio.provincia_id == prov.id),
            'municipio.id',"%(nombre)s",zero=None
        )
        db.escuela_media.codigo.comment = T("Código de 4 digitos")
    condq = (db.escuela_media.tipo_escuela_media_id !=
             tipo_escuela.obtener_por_uuid(tipo_escuela.ID_PROTEGIDO).id)
    db.escuela_media.provincia_id.show_if = condq
    db.escuela_media.municipio_id.show_if = condq
    db.escuela_media.id.readable = False
    # esto debe mantenerse lo más proximo posible a la contrucción del GRID
    if ('new' in request.args) or ('edit' in request.args):
        if request.vars.tipo_escuela_media_id:
            # guardando el formulario
            sid = int(request.vars.tipo_escuela_media_id)
            pid = tipo_escuela.obtener_por_uuid(tipo_escuela.ID_PROTEGIDO).id
            if sid == pid: # si es el valor ID_PROTEGIDO
                # asignarle valores a la provincia y municipo
                id_p = db.provincia.obtener_por_uuid(provincia.ID_PROTEGIDO).id
                id_m = db.municipio.obtener_por_uuid(municipio.ID_PROTEGIDO).id
                request.vars.provincia_id = id_p
                request.vars.municipio_id = id_m
                request.post_vars.provincia_id = id_p
                request.post_vars.municipio_id = id_m
                db.escuela_media.provincia_id.default = id_p
                db.escuela_media.municipio_id.default = id_m
                db.escuela_media.municipio_id.requires = []
    
    puede_crear = auth.has_membership(role=conf.take('roles.admin'))
    puede_editar, puede_borrar = (puede_crear, puede_crear)
    
    text_lengths = {'escuela_media.nombre': 100}
    
    manejo = grid_simple((db.escuela_media.id > 0),
                         maxtextlength=text_lengths,
                         create=puede_crear,
                         editable=puede_editar,
                         deletable=puede_borrar)
    
    return manejo
Exemplo n.º 5
0
def carreras():
    '''configuración de las carreras de la unidad organica'''
    from agiscore.db import carrera_uo as model

    C = Storage()
    C.unidad = db.unidad_organica(int(request.args(0)))
    C.escuela = db.escuela(C.unidad.escuela_id)

    # breadcumbs
    u_link = Accion(C.unidad.abreviatura or C.unidad.nombre,
                    URL('index', args=[C.unidad.id]),
                    True)  # siempre dentro de esta funcion
    menu_migas.append(u_link)
    menu_migas.append(T('Carreras'))

    tbl = db.carrera_uo

    query = (tbl.id > 0)
    query &= (tbl.unidad_organica_id == C.unidad.id)

    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))
    puede_editar, puede_borrar = (puede_crear, puede_crear)

    tbl.unidad_organica_id.writable = False
    tbl.carrera_escuela_id.label = T("Carrera")

    if 'view' in request.args:
        planes_link = URL('carrera',
                          'planes',
                          args=[request.args(3)])
        redirect(planes_link)

    if 'new' in request.args:
        tbl.unidad_organica_id.default = C.unidad.id
        posibles = model.obtener_posibles(db, C.unidad.id)
        if not posibles:
            # si no hay carreras para seleccionar, volver al incio
            msg = T('No hay más carreras definidas en la escuela')
            session.flash = msg
            redirect(URL('carreras', args=[C.unidad.id]))
        tbl.carrera_escuela_id.requires = IS_IN_SET(posibles, zero=None)

    campos = [tbl.carrera_escuela_id]
    text_length = {'carrera_uo.carrera_escuela_id': 60}

    C.grid = grid_simple(query,
                       fields=campos,
                       searchable=False,
                       editable=puede_editar,
                       create=puede_crear,
                       deletable=puede_borrar,
                       details=True,
                       maxtextlengths=text_length,
                       args=request.args[:1])

    return dict(C=C)
Exemplo n.º 6
0
def departamentos():
    C = Storage()
    C.unidad = db.unidad_organica(int(request.args(0)))
    C.escuela = db.escuela(C.unidad.escuela_id)

    # breadcumbs
    u_link = Accion(C.unidad.abreviatura or C.unidad.nombre,
                    URL('index', args=[C.unidad.id]),
                    True)  # siempre dentro de esta funcion
    menu_migas.append(u_link)
    menu_migas.append(T('Departamentos'))

    # -- configurar grid
    tbl = db.departamento

    tbl.id.readable = False
    tbl.unidad_organica_id.writable = False
    if 'new' in request.args:
        tbl.unidad_organica_id.default = C.unidad.id

    query = (tbl.id > 0) & (tbl.unidad_organica_id == C.unidad.id)

    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))
    puede_editar, puede_borrar = (puede_crear, puede_crear)

    # callbacks
    def onvalidation(form):
        row = None

        if 'new' in request.args:
            dpto_nombre = tbl.nombre.validate(form.vars.nombre)[0]
            row = tbl(nombre=dpto_nombre, unidad_organica_id=C.unidad.id)
        if 'edit' in request.args:
            dpto_nombre = tbl.nombre.validate(form.vars.nombre)[0]
            dpto_id = int(request.args(3))  # args del grid
            q = ((tbl.id != dpto_id) & (tbl.nombre == dpto_nombre))
            row = db(q).select().first()

        if row:
            form.errors.nombre = T("Ya existe en la Unidad Orgánica")

    if 'view' in request.args:
        redirect(URL('departamento', 'index', args=[request.args(3)]))

    C.grid = grid_simple(query,
                         create=puede_crear,
                         deletable=puede_borrar,
                         editable=puede_editar,
                         fields=[tbl.nombre],
                         orderby=[tbl.nombre],
                         onvalidation=onvalidation,
                         searchable=False,
                         details=(auth is not None),
                         args=request.args[:1])

    return dict(C=C)
Exemplo n.º 7
0
def pagos():
    """Muestra el listado de los pagos realizados"""
    C = Storage()
    C.evento = db.evento(request.args(0))
    C.persona = db.persona(request.args(1))
    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)

    concepto = db(
        db.tipo_pago.nombre == "PROPINA"
    ).select().first()
    assert concepto != None

    query  = (db.pago.id > 0)
    query &= (db.pago.persona_id == C.persona.id)
    query &= (db.pago.evento_id == C.evento.id)
    query &= (db.pago.tipo_pago_id == concepto.id)
    l_pagos = [p.id for p in db(query).select(db.pago.id)]
    sumq = db.pago.cantidad.sum()
    C.total = db(query).select(sumq).first()[sumq] or 0.0
    sumz = db.propina.cantidad.sum()
    pquery  = (db.propina.id > 0)
    pquery &= (db.propina.persona_id == C.persona.id)
    pquery &= (db.propina.ano_academico_id == C.ano.id)
    C.propinas = db(pquery).select(sumz).first()[sumz] or 0.0

    for f in db.pago:
        f.readable = False
    db.pago.id.readable = True
    db.pago.fecha_recivo.readable = True
    db.pago.cantidad.readable = True

    db.pago.id.represent = lambda v,r: A(
        v, _href=URL(c='gcontable',
            f='pagos',
            args=['view', 'pago', v],
            extension=False,
            user_signature=True)
        )

    db.pago.id.label = T("ID Pago")

    C.titulo = T("Registro de pagos")
    C.titulo += " {}".format(C.persona.nombre_completo)
    C.grid = grid_simple(query,
        orderby=[db.pago.fecha_recivo],
        # fields=campos,
        create=False,
        history=False,
        details=False,
        csv=False,
        args=request.args[:2],
        formname="pagos")

    return dict(C=C)
Exemplo n.º 8
0
def personas():
    C = Storage()
    C.escuela = db.escuela(1)
    menu_migas.append(T("Registro general de personas"))

    # permisos
    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))

    tbl = db.persona

    query = (tbl.id > 0)
    campos = [tbl.id,
              tbl.numero_identidad,
              tbl.nombre_completo]

    tbl.numero_identidad.label = "#IDENT"
    tbl.nombre_completo.label = T("Nombre")

    text_lengths = {'persona.nombre_completo': 50}

    def _tipo(row):
        """Para mostrar el tipo de persona que es"""
        per = db.persona(row.id)

        tipo = "OTHER"
        if per.estudiante.select():
            tipo = T("ESTUDIANTE")
        elif per.profesor.select():
            tipo = T("PROFESOR")

        return CAT(tipo)

    enlaces = [dict(header=T('TIPO'), body=_tipo)]

    if 'edit' in request.args or 'new' in request.args:
        enlaces=[]

    C.grid = grid_simple(query,
                         create=puede_crear,
                         deletable=puede_borrar,
                         editable=puede_editar,
                         links=enlaces,
                         maxtextlengths=text_lengths,
                         orderby=[tbl.nombre_completo],
                         fields=campos)

    return dict(C=C)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
def index():
    """Gestor de unidades orgánicas"""
    C = Storage()
    C.escuela = db.escuela(1)
    menu_migas.append(T("Unidades Orgánicas"))

    # permisos
    editar = auth.has_membership(role=myconf.take('roles.admin'))
    crear = auth.has_membership(role=myconf.take('roles.admin'))
    deletable = auth.has_membership(role=myconf.take('roles.admin'))

    # configurar grid
    query = (db.unidad_organica.id > 0)
    query &= (db.unidad_organica.escuela_id == C.escuela.id)
    campos = [db.unidad_organica.id,
              db.unidad_organica.nombre]

    if 'new' in request.args:
        db.unidad_organica.escuela_id.default = C.escuela.id
        db.unidad_organica.escuela_id.writable = False

    if 'edit' in request.args:
        db.unidad_organica.escuela_id.writable = False
    if 'view' in request.args:
        redirect(URL('unidad', 'index', args=[request.args(2)]))

    db.unidad_organica.id.readable = False

    C.unidades = grid_simple(query,
                       orderby=[db.unidad_organica.nombre],
                       fields=campos,
                       maxtextlength=100,
                       editable=editar,
                       create=crear,
                       details=True,
                       history=False,
                       searchable=False,
                       deletable=deletable)

    cantidad = db(query).count()
    if (session.entrada_directa is None) and cantidad == 1:
        session.entrada_directa = True
        u = db(query).select(db.unidad_organica.ALL).first()
        redirect(URL('unidad', 'index', args=[u.id]))


    return dict(C=C)
Exemplo n.º 11
0
def pagos():
    C = Storage()
    C.escuela = db.escuela(1)
    menu_migas.append(T("Control de pagos"))

    C.titulo = T("Registros general de pagos")

    # permisos
    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
#     puede_crear = auth.has_membership(role=myconf.take('roles.admin'))

    tbl = db.pago
    query = (tbl.id > 0) & (db.persona.id == tbl.persona_id)

    campos = [tbl.id,
              db.persona.nombre_completo,
              tbl.cantidad,
              tbl.evento_id,]
    tbl.id.readable = True
    for f in db.persona:
        f.readable = False
    db.persona.nombre_completo.readable = True
    db.persona.nombre_completo.label = T("Nombre")
    tbl.persona_id.readable = False
    if 'edit' in request.args:
        tbl.persona_id.readable = True
        tbl.persona_id.writable = False

    text_lengths = {'persona.nombre_completo': 30}

    C.grid = grid_simple(query,
                         field_id=tbl.id,
                         fields=campos,
                         orderby=[db.persona.nombre_completo],
                         create=False,
                         sortable=True,
                         maxtextlength=text_lengths,
                         editable=puede_editar,
                         deletable=puede_borrar,
                         details=True,
                         args=request.args[:1])

    return dict(C=C)
Exemplo n.º 12
0
def grid_carreras_ies(escuela,
                      db,
                      T,
                      auth=None,
                      conf=None,
                      request=None):
    if auth is None:
        auth = current.auth
    if conf is None:
        conf = current.conf
    if request is None:
        request = current.request
        
    model = db.carrera_escuela
        
    editar = (auth.has_membership(role=conf.take('roles.admin')))
    crear = (auth.has_membership(role=conf.take('roles.admin')))
    deletable = (auth.has_membership(role=conf.take('roles.admin')))
    
    query = (model.id > 0)
    model.id.readable = False
    orden = [model.codigo]
    campos = [model.id,
              model.codigo,
              model.descripcion_id]
    text_length = {"carrera_escuela.descripcion_id": 100}
    
    if 'new' in request.args:
        posibles = carreras_posibles(db)
        model.descripcion_id.requires = IS_IN_SET(posibles, zero=None)
    if 'edit' in request.args:
        model.descripcion_id.writable = False
    
    grid = grid_simple(query,
                       fields=campos,
                       orderby=orden,
                       maxtextlengths=text_length,
                       create=crear,
                       editable=editar,
                       deletable=deletable)
    
    return grid
Exemplo n.º 13
0
def propinas():
    """Muestra el listado de los pagos realizados"""
    C = Storage()
    C.evento = db.evento(request.args(0))
    C.persona = db.persona(request.args(1))
    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)

    concepto = db(
        db.tipo_pago.nombre == "PROPINA"
    ).select().first()
    assert concepto != None

    C.titulo = T("Registro de Propinas")

    query  = (db.propina.id > 0)
    query &= (db.propina.persona_id == C.persona.id)
    query &= (db.propina.ano_academico_id == C.ano.id)

    # configurar campos
    db.propina.id.readable = False
    # db.propina.pago_id.readable = True

    C.grid = grid_simple(query,
        create=False,
        history=False,
        details=False,
        searchable=False,
        paginate=13,
        csv=False,
        args=request.args[:2],
        formname="propinas"
    )

    return dict(C=C)
Exemplo n.º 14
0
def turmas():
    C = Storage()
    C.unidad = db.unidad_organica(int(request.args(0)))
    C.escuela = db.escuela(C.unidad.escuela_id)

    # breadcumbs
    u_link = Accion(C.unidad.abreviatura or C.unidad.nombre,
                    URL('index', args=[C.unidad.id]),
                    True)  # siempre dentro de esta funcion
    menu_migas.append(u_link)
    menu_migas.append(T('Turmas'))

    C.titulo = T("Gestión de Turmas")

    tbl = db.turma
    tbl.id.readable = False
    tbl.unidad_organica_id.readable = False
    tbl.unidad_organica_id.writable = False
    tbl.unidad_organica_id.default = C.unidad.id

    query = (tbl.id > 0) & (tbl.unidad_organica_id == C.unidad.id)

    # permisos
    puede_crear = auth.has_membership(role=myconf.take('roles.admin'))
    puede_borrar = auth.has_membership(role=myconf.take('roles.admin'))
    puede_editar = auth.has_membership(role=myconf.take('roles.admin'))
    text_length = {'turma.carrera_id': 100}

    C.grid = grid_simple(query,
                         editable=puede_editar,
                         deletable=puede_borrar,
                         create=puede_crear,
                         maxtextlength=text_length,
                         args=request.args[:1])

    return dict(C=C)
Exemplo n.º 15
0
def claustro():
    """Gestión del claustro de un departamento"""
    C = Storage()
    C.dpto = db.departamento(int(request.args(0)))
    C.unidad = db.unidad_organica(C.dpto.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("Departamentos"), URL("unidad", "departamentos", args=[C.unidad.id]), True)
    menu_migas.append(c_link)
    menu_migas.append(C.dpto.nombre)

    # permisos
    puede_crear = auth.has_membership(role=myconf.take("roles.admin"))
    puede_editar, puede_borrar = (puede_crear, puede_crear)

    tbl = db.profesor
    query = (tbl.id > 0) & (tbl.persona_id == db.persona.id)
    query &= tbl.departamento_id == C.dpto.id

    # configurar campos
    db.profesor.persona_id.readable = False
    db.persona.nombre_completo.label = T("Nombre")
    text_length = {"persona.nombre_completo": 100}
    campos = [tbl.id, db.persona.nombre_completo, tbl.vinculo, tbl.categoria, tbl.grado]
    db.profesor.departamento_id.default = C.dpto.id
    db.profesor.departamento_id.writable = False

    if "new" in request.args:
        # recoger los datos personales
        back = URL("claustro", args=[C.dpto.id])
        if session.dcpersona is None:
            (C.grid, data) = form_crear_persona_ex(cancel_url=back, db=db, T=T, session=session, request=request)
            if data is None:
                return dict(C=C)
            session.dcpersona = data
        # regoger datos del docente
        form = SQLFORM.factory(db.profesor, submit_button=T("Guardar"))
        title = DIV(H3(T("Datos del docente"), _class="panel-title"), _class="panel-heading")
        c = DIV(title, DIV(form, _class="panel-body"), _class="panel panel-default")
        if form.process(dbio=False).accepted:
            persona_id = db.persona.insert(**db.persona._filter_fields(session.dcpersona))
            form.vars.persona_id = persona_id
            db.profesor.insert(**db.profesor._filter_fields(form.vars))
            session.flash = T("Datos del profesor guardados")
            # session cleanup (iss138)
            session.dcpersona = None
            redirect(back)
        C.grid = c
    else:
        C.grid = grid_simple(
            query,
            searchable=True,
            maxtextlengths=text_length,
            fields=campos,
            deletable=puede_borrar,
            editable=puede_editar,
            create=puede_crear,
            args=request.args[:1],
        )

    return dict(C=C)
Exemplo n.º 16
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)
Exemplo n.º 17
0
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)
Exemplo n.º 18
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)
Exemplo n.º 19
0
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)
Exemplo n.º 20
0
def distribucion():
    '''Distribución de estudiantes por 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('Distribución por aulas'))
    
    C.titulo = "{} - {}".format(T("Distribución de los estudiantes por aulas"),
                               db.examen._format(C.examen))
    
    from agiscore.db.examen_aula_estudiante import distribuir_estudiantes
    
    puede_distribuir  = auth.has_membership(role=myconf.take('roles.oexamen'))
    puede_distribuir |= auth.has_membership(role=myconf.take('roles.admin')) 
    # distribuir a los estudiantes por las aulas que tenemos definidas
    C.distribuir_link = Accion(CAT(SPAN('', _class='glyphicon glyphicon-hand-up'),
                         ' ',
                         T("Distribuir aulas")),
                     URL('distribucion',
                         args=[C.examen.id],
                         vars={'_distribuir': '1'}),
                     puede_distribuir,
                     _class="btn btn-default")
    if request.vars._distribuir:
        distribuir_estudiantes(C.examen.id)
        redirect(URL('distribucion', args=[C.examen.id]))
    
    cantidad = db(db.examen_aula_estudiante.examen_id == C.examen.id).count()
    if cantidad > 0:
        # --configurar el grid
        tbl = db.examen_aula_estudiante
        query = ((db.examen_aula_estudiante.examen_id == C.examen.id) & 
            (db.estudiante.id == db.examen_aula_estudiante.estudiante_id) & 
            (db.persona.id == db.estudiante.persona_id) & 
            (db.candidatura.estudiante_id == \
                db.examen_aula_estudiante.estudiante_id))
        
        # -- conf de los campos
        for fd in db.persona:
            fd.readable = False
        db.persona.nombre_completo.readable = True
        db.persona.numero_identidad.readable = True
        db.persona.numero_identidad.label = T("#IDENT")
        for fd in tbl:
            fd.readable = False
        tbl.aula_id.readable = True
        for fd in db.estudiante:
            fd.readable = False
        for f in db.candidatura:
            f.readable = False
        db.persona.nombre_completo.label = T('Nombre')
        campos=[db.persona.numero_identidad,
                db.persona.nombre_completo,
                tbl.aula_id]
        
        text_lengths={'persona.nombre_completo': 50,
                      'persona.numero_identidad': 15}
        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'),
#                             XLS=(candidatura.EAEXLS, 'XLS')
                           )
        
        if request.vars._export_type:
            if C.examen.fecha is None or C.examen.inicio is None or C.examen.fin is None:
                myvars = Storage(request.vars)
                del myvars["_export_type"]
                session.flash = T('No se han definido los parámetros del exámen')
                redirect(URL('distribucion', vars=myvars, args=[C.examen.id]))
            response.context = C
        
        C.grid = grid_simple(query,
                             orderby=[db.persona.nombre_completo],
                             create=False,
                             maxtextlengths=text_lengths,
                             fields=campos,
                             csv=True,
                             history=False,
                             exportclasses=exportadores,
                             searchable=True,
                             args=request.args[:1])
    else:
        # --poner un mensaje
        msg_t = T("¡Avizo!")
        msg = T('''
        No se han asignado aulas a este examen, las asignadas no son 
        suficiente o no se realizó la distrubución.
        ''')
        msg = CAT(P(msg),P(Accion(T('Configuración de aulas'),
                                  URL('index', args=[request.args(0)]),
                                  True,
                                  _class="btn btn-default alert-link")),
                  P(C.distribuir_link))
        C.grid = DIV(H4(msg_t), msg,_class="alert alert-danger",
                     _role="alert")
    
    return dict(C=C)
Exemplo n.º 21
0
def codificacion():
    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('Codificación de los estudiantes'))
    
    # -- configuración del grid
    query = ((db.examen_aula_estudiante.examen_id == C.examen.id) & 
            (db.estudiante.id == db.examen_aula_estudiante.estudiante_id) & 
            (db.persona.id == db.estudiante.persona_id) & 
            (db.candidatura.estudiante_id == \
                db.examen_aula_estudiante.estudiante_id))
    
    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'))
    
    text_lengths={'persona.nombre_completo': 50,
                  'persona.uuid': 100}
    
    # --conf campos
    for f in db.persona:
        f.readable = False
    db.persona.nombre_completo.readable = True
    db.persona.numero_identidad.readable = True
    db.persona.uuid.readable = True
    db.persona.uuid.label = 'UUID'
    for f in db.examen_aula_estudiante:
        f.readable = False
    db.examen_aula_estudiante.aula_id.readable = True
    for f in db.estudiante:
        f.readable = False
    for f in db.candidatura:
        f.readable = False
    campos=[db.persona.nombre_completo,
            db.persona.numero_identidad,
            db.persona.uuid,
            db.examen_aula_estudiante.aula_id]
    C.titulo = T('Codificación de los estudiantes')
    
    if request.vars._export_type:
        response.context = C
    
    C.grid = grid_simple(query,
                         fields=campos,
                         orderby=[db.persona.nombre_completo,
                                  db.examen_aula_estudiante.aula_id],
                         csv=True,
                         searchable=True,
                         create=False,
                         history=False,
                         maxtextlengths=text_lengths,
                         exportclasses=exportadores,
                         args=request.args[:1])
    
    return dict(C=C)
Exemplo n.º 22
0
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)
Exemplo n.º 23
0
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)
Exemplo n.º 24
0
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