Exemple #1
0
def descargar_documento():
    admin = get_tipo_usuario(session)

    if not request.args:
        raise HTTP(404)
    query = "SELECT valor_campo FROM PRODUCTO_TIENE_CAMPO WHERE id_campo=" + request.args(
        0) + ";"
    documento = db.executesql(query)

    pdf = os.path.join(request.folder, 'uploads', documento[0][0])
    data = open(pdf, "rb").read()

    response.headers['Content-Type'] = 'application/pdf'
    response.headers[
        "Content-Disposition"] = "attachment; filename=%s" % documento[0][0]
    return data
def restaurar_programa():

    admin = get_tipo_usuario(session)
    if (admin == 0):
        redirect(URL(c="default", f="index"))

    id_programa = request.args[0]
    programa = db(db.PROGRAMA.id_programa == id_programa).select().first()

    programa.papelera = False
    programa.update_record()
    session.message = 'Programa Restaurado.'
    insertar_log(db, 'PAPELERA', datetime.datetime.now(), request.client,
                 'RESTAURADO PROGRAMA CON ID ' + str(id_programa),
                 session.usuario['usbid'])
    redirect(URL('gestionar.html'))
Exemple #3
0
def editar_programa():

    admin = get_tipo_usuario(session) # Obtengo el tipo del usuario actual.

    if (admin==0):
        redirect(URL(c ="default",f="index"))

    id = request.args[0]        # Se identifica cual programa se identificará.

    # Se busca el programa en la base de datos.
    programa = db(db.PROGRAMA.id_programa == id).select()[0]

    # Se presenta el formulario donde se modificarán los valores del programa.
    formulario = SQLFORM.factory(
                        Field('Nombre',
                              default = programa.nombre,
                              requires = [IS_NOT_EMPTY(error_message='El nombre del programa no puede quedar vacío.'),
                                          IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales.")]),
                        Field('Abreviacion',
                            requires = [IS_NOT_EMPTY(error_message='La abreviación del programa no puede quedar vacía.')]),
                        Field('Descripcion', type="text",
                              default = programa.descripcion,
                              requires=IS_NOT_EMPTY(error_message='La descripción del programa no puede quedar vacía.')),
                        submit_button = 'Actualizar',
                        labels = {'Descripcion' : 'Descripción',
                                  'Nombre' : 'Nombre del Programa',
                                  'Abreviacion' : 'Abreviación del Programa'}
                        )

    # Se verifica si los campos están llenos correctamente.
    if formulario.accepts(request.vars, session):
        session.form_nombre = request.vars.Nombre
        programa.nombre = request.vars.Nombre
        programa.abreviacion = request.vars.Abreviacion
        programa.descripcion = request.vars.Descripcion
        programa.update_record()                    # Se actualiza el programa.
        insertar_log(db, 'PROGRAMA', datetime.datetime.now(), request.client, 'MODIFICACION DE PROGRAMA '+ request.vars.Nombre.upper(), session.usuario['usbid'])
        redirect(URL('gestionar_programas.html'))   # Se redirige a la vista de gestión.

    # En caso de que el formulario no sea aceptado
    elif formulario.errors:
        session.message = 'Error en los datos del formulario, por favor intente nuevamente.'
    # Metodo GET
    else:
        session.message = ''

    return dict(formulario=formulario, admin = admin)
def eliminar_tipo_papelera():

    admin = get_tipo_usuario(session)
    if (admin == 0):
        redirect(URL(c="default", f="index"))

    id_tipo = int(request.args[0])

    # Determino si existen productos con ese tipo de actividad
    # Si existen, entonces no borro al tipo de actividad
    hayProductos = not db(db.PRODUCTO.id_tipo == id_tipo).isempty()
    if hayProductos:
        session.message = 'No se puede eliminar un \
                          tipo de actividad con \
                          productos asociados'

        return redirect(URL('gestionar.html'))

    query = reduce(lambda a, b: (a & b), [
        db.TIPO_ACTIVIDAD.papelera == True, db.TIPO_ACTIVIDAD.id_tipo
        == id_tipo, db.TIPO_ACTIVIDAD.id_tipo
        == db.ACT_POSEE_CAMPO.id_tipo_act, db.ACT_POSEE_CAMPO.id_campo
        == db.CAMPO.id_campo
    ])

    # Guardo los reusltados en 'aux'
    aux = db(query).select(db.ACT_POSEE_CAMPO.ALL)

    # Borro las relaciones
    if (len(aux) > 0):
        db(db.ACT_POSEE_CAMPO.id_tipo_act == aux[0].id_tipo_act).delete()

    # Borro los campos
    for row in aux:
        db(db.CAMPO.id_campo == row.id_campo).delete()

    # Borro el tipo_activdad
    db(db.TIPO_ACTIVIDAD.id_tipo == id_tipo).delete()

    insertar_log(db, 'PAPELERA', datetime.datetime.now(), request.client,
                 'ELIMINADO TIPO DE ACTIVIDAD CON ID ' + str(id_tipo),
                 session.usuario['usbid'])

    # Guardo mensaje de exito
    session.message = 'Tipo Eliminado'
    redirect(URL('gestionar.html'))
Exemple #5
0
def eliminarCampos():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    # Obtengo el id del campo que se eliminara
    id_campo_cat = request.args[0]
    id_catalogo = db(db.CAMPO_CATALOGO.id_campo_cat ==
                     id_campo_cat).select().first().id_catalogo

    # Elimino el campo del catalogo. Esto no afecta los tipos de actividades
    # Que estan definidas ya, ni los productos ya listos.
    del db.CAMPO_CATALOGO[id_campo_cat]

    redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
Exemple #6
0
def descargar_comprobante():
    admin = get_tipo_usuario(session)

    if not request.args:
        raise HTTP(404)
    query = "SELECT archivo FROM COMPROBANTE WHERE id_comprobante=" + request.args(
        0) + ";"
    comprobante = db.executesql(query)

    pdf = os.path.join(request.folder, 'uploads', comprobante[0][0][0:22],
                       comprobante[0][0][23:25], comprobante[0][0])
    data = open(pdf, "rb").read()

    response.headers['Content-Type'] = 'application/pdf'
    response.headers[
        "Content-Disposition"] = "attachment; filename=%s" % comprobante[0][0]
    return data
Exemple #7
0
def eliminar():
    admin = get_tipo_usuario(session)

    id_act = int(request.args(0))

    query = "SELECT archivo FROM COMPROBANTE WHERE producto=" + str(
        id_act) + ";"
    comprobantes = db.executesql(query)

    for i in range(len(comprobantes)):
        pdf = os.path.join(request.folder, 'uploads', comprobantes[i][0][0:22],
                           comprobantes[i][0][23:25], comprobantes[i][0])
        try:
            os.unlink(pdf)
        except Exception, e:
            print "Exception: "
            print e
Exemple #8
0
def eliminar_documento():

    if not request.args:
        raise HTTP(404)
    id_documento = request.args(0)

    admin = get_tipo_usuario(session)

    query = "SELECT valor_campo FROM PRODUCTO_TIENE_CAMPO WHERE id_campo=" + id_documento + ";"
    documento = db.executesql(query)

    pdf = os.path.join(request.folder, 'uploads', documento[0][0])
    try:
        os.unlink(pdf)
    except Exception, e:
        print "Exception: "
        print e
Exemple #9
0
def eliminar_comprobante():
    if not request.args:
        raise HTTP(404)
    id_comprobante = request.args(0)

    admin = get_tipo_usuario(session)

    query = "SELECT archivo FROM COMPROBANTE WHERE id_comprobante=" + id_comprobante + ";"
    comprobante = db.executesql(query)

    pdf = os.path.join(request.folder, 'uploads', comprobante[0][0][0:22],
                       comprobante[0][0][23:25], comprobante[0][0])
    try:
        os.unlink(pdf)
    except Exception, e:
        print "Exception: "
        print e
Exemple #10
0
def get_documento():
    admin = get_tipo_usuario(session)

    if not request.args:
        raise HTTP(404)
    print "request:"
    print request.args
    query = "SELECT valor_campo FROM PRODUCTO_TIENE_CAMPO WHERE id_campo    =" + request.args(
        0) + " AND id_prod =" + request.args(1) + ";"
    documento = db.executesql(query)
    print query
    print documento

    pdf = os.path.join(request.folder, 'uploads', documento[0][0])
    data = open(pdf, "rb").read()

    response.headers['Content-Type'] = 'application/pdf'
    return data
Exemple #11
0
def enviar_tipo_papelera():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    id_tipo = int(request.args[0])
    tipo = db(db.TIPO_ACTIVIDAD.id_tipo == id_tipo).select(
        db.TIPO_ACTIVIDAD.ALL).first()
    tipo.update(papelera=True)
    tipo.update_record()
    insertar_log(
        db, 'ACTIVIDAD', datetime.datetime.now(), request.client,
        'TIPO DE ACTIVIDAD CON ID ' + str(id_tipo) + ' ENVIADO A LA PAPELERA',
        session.usuario['usbid'])
    session.message = 'Tipo Enviado a la Papelera'
    redirect(URL('gestionar.html'))
Exemple #12
0
def eliminar():

    admin = get_tipo_usuario(session)

    if (admin == 0 or admin == 2):
        redirect(URL(c="default", f="index"))

    if len(request.args) != 0:
        if request.args[0] != session.usuario["usbid"]:
            session.message = ""
            print request.args[0]
            if (not db(db.USUARIO.usbid == request.args[0]).isempty()):
                db(db.USUARIO.usbid == request.args[0]).delete()
                redirect(URL('gestionar'))
        else:
            session.message = T(
                "Para eliminar su cuenta, por favor comuníquese con un administrador"
            )
            redirect(URL('gestionar'))
Exemple #13
0
def obtener_actividades():
    admin = get_tipo_usuario(session)

    programa = db(db.PROGRAMA.nombre == request.vars.programa).select().first()
    tiposA = db(db.TIPO_ACTIVIDAD.id_programa == programa.id_programa).select(
        db.TIPO_ACTIVIDAD.nombre, db.TIPO_ACTIVIDAD.id_tipo,
        db.TIPO_ACTIVIDAD.papelera).as_list()

    concat = '<option></option>'

    for tipo in tiposA:
        if tipo['papelera'] == False:
            concat += '<option value=' + str(
                tipo['id_tipo']) + '>' + tipo['nombre'] + '</option>'

    aux = programa.descripcion.split('\r\n')[0]
    descripcion = "<div class=\"col-sm-offset-1\"><h4>Descripción del Programa:</h4><p>" + aux + "</p></div>"
    html = "jQuery('#lista_tipos').empty().append('" + concat + "');jQuery('#descripcion_programa').empty().append('" + descripcion + "')"
    return html
Exemple #14
0
def restaurar_backup():

    admin = get_tipo_usuario(session)

    if (admin == 0 or admin == 2):
        redirect(URL(c="default", f="index"))

    archivo = request.args[0]

    comando = "psql -d Siradex -U Siradex -h localhost -w < ./applications/SiraDex/SQLScripts/dropSIRADEx.sql && psql -d Siradex -U Siradex -h localhost -w < ./applications/SiraDex/backup/" + archivo

    resp = os.system(comando)
    #resp = 0
    if (resp == 0):
        response.flash = "Restaurado."
    else:
        response.flash = "No se pudo restaurar."

    redirect(URL('index'))
Exemple #15
0
def eliminarCampos():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    # Obtengo el id del campo que se eliminara
    id_campo_cat = request.args[0]
    id_catalogo = db(db.CAMPO_CATALOGO.id_campo_cat ==
                     id_campo_cat).select().first().id_catalogo

    # Elimino el campo del catalogo. Esto no afecta los tipos de actividades
    # Que estan definidas ya, ni los productos ya listos.
    del db.CAMPO_CATALOGO[id_campo_cat]

    insertar_log(db, 'CAMPO', datetime.datetime.now(), request.client,
                 'ELIMINACION DE CAMPO CON ID ' + str(id_campo_cat),
                 session.usuario['usbid'])
    redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
Exemple #16
0
def eliminar_campo():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    id_tipo = int(request.args[0])
    id_campo = int(request.args[1])

    # Busco los productos que tengan asociado ese campo, y lo elimino.
    db(db.PRODUCTO_TIENE_CAMPO.id_campo == id_campo).delete()

    # Busco la relacion ACT_POSEE_CAMPO y la elimino
    db(db.ACT_POSEE_CAMPO.id_campo == id_campo).delete()

    # Busco el campo y lo elimno de los campos
    db(db.CAMPO.id_campo == id_campo).delete()

    redirect(URL('ver_tipo_actividad.html', args=[id_tipo]))
Exemple #17
0
def gestionar_validacion():

    admin = get_tipo_usuario(session)

    if (admin==0):
        redirect(URL(c ="default",f="index"))


    # Hago el query Espera

    sqlValidadas = "select producto.id_producto, producto.nombre, tipo_actividad.nombre from producto inner join tipo_actividad"\
    + " on producto.id_tipo=tipo_actividad.id_tipo where producto.estado='Validado';"
    sqlEspera = "select producto.id_producto, producto.nombre, tipo_actividad.nombre from producto inner join tipo_actividad"\
    + " on producto.id_tipo=tipo_actividad.id_tipo where producto.estado='Por Validar';"
    sqlRechazadas = "select producto.id_producto, producto.nombre, tipo_actividad.nombre from producto inner join tipo_actividad"\
    + " on producto.id_tipo=tipo_actividad.id_tipo where producto.estado='No Validado';"
    productosV= db.executesql(sqlValidadas)
    productosE = db.executesql(sqlEspera)
    productosR = db.executesql(sqlRechazadas)

    return locals()
Exemple #18
0
def download():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    periodo = request.args[0]
    if periodo == "0":
        query = "SELECT * FROM LOG_SIRADEX;"
    elif periodo == "1":
        date = datetime.date.today()
        query = "SELECT * FROM LOG_SIRADEX WHERE accion_fecha = '" + str(
            date) + "';"
    elif periodo == "2":
        date = datetime.date.today() - datetime.timedelta(days=7)
        query = "SELECT * FROM LOG_SIRADEX WHERE accion_fecha >= '" + str(
            date) + "';"
    elif periodo == "3":
        date = datetime.date.today() - datetime.timedelta(days=31)
        query = "SELECT * FROM LOG_SIRADEX WHERE accion_fecha >= '" + str(
            date) + "';"
    elif periodo == "4":
        date = datetime.date.today() - datetime.timedelta(days=93)
        query = "SELECT * FROM LOG_SIRADEX WHERE accion_fecha >= '" + str(
            date) + "';"

    insertar_log(db, 'LOG', datetime.datetime.now(), request.client,
                 'DESCARGA DE LOG', session.usuario['usbid'])

    #Excecute query
    rows = db.executesql(query, fields=db.LOG_SIRADEX)

    #convert query to csv
    tempfile = StringIO.StringIO()
    rows.export_to_csv_file(tempfile)
    response.headers['Content-Type'] = 'text/csv'
    attachment = 'attachment; filename="LOGSIRADEX.csv"'
    response.headers['Content-Disposition'] = attachment
    return tempfile.getvalue()
Exemple #19
0
def formulario_restaurar_backup():

    admin = get_tipo_usuario(session)

    if (admin == 0 or admin == 2):
        redirect(URL(c="default", f="index"))

    fields = []

    fields.append(
        Field("backup",
              'upload',
              autodelete=True,
              uploadfolder="./applications/SiraDex/backup/",
              label=''))

    form = SQLFORM.factory(*fields, upload=URL('download'))
    form.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    form.element(_type='submit')['_value'] = "Agregar"

    return form
Exemple #20
0
def agregar_programa():

    admin = get_tipo_usuario(session)
    if (admin==0):
        redirect(URL(c ="default",f="index"))

    formulario = SQLFORM.factory(
                        Field('Nombre',
                              requires = [IS_NOT_EMPTY(error_message='El nombre del programa no puede quedar vacío.'),
                                          IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales.")]),
                        Field('Abreviacion',
                              requires = [IS_NOT_EMPTY(error_message='La abreviación del programa no puede quedar vacía.'),
                                          IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales.")]),
                        Field('Descripcion', type="text",
                              requires=IS_NOT_EMPTY(error_message='La descripción del programa no puede quedar vaca.')),
                        submit_button = 'Agregar',
                        labels = {'Descripcion' : 'Descripción',
                                  'Nombre' : 'Nombre del Programa',
                                  'Abreviacion' : 'Abreviación'},
                        )

    # Metodos POST
    # En caso de que los datos del formulario sean aceptados
    if formulario.accepts(request.vars, session):
        session.form_nombre = request.vars.Nombre
        db.PROGRAMA.insert(nombre = request.vars.Nombre,
                           abreviacion = request.vars.Abreviacion,
                           descripcion = request.vars.Descripcion
                           )
        insertar_log(db, 'PROGRAMA', datetime.datetime.now(), request.client, 'CREACION DE PROGRAMA '+ request.vars.Nombre.upper(), session.usuario['usbid'])
        redirect(URL('gestionar_programas.html'))
    # En caso de que el formulario no sea aceptado
    elif formulario.errors:
        session.message = 'Error en los datos del formulario, por favor intente nuevamente.'
    # Metodo GET
    else:
        session.message = ''

    return dict(formulario=formulario, admin = admin)
Exemple #21
0
def formulario_descargar_log_periodo():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    # Genero formulario para los campos
    formulario = SQLFORM.factory(Field(
        'periodo',
        requires=[
            IS_IN_SET(
                ["Hoy", "Semana pasada", "Mes pasado", "Hace 3 meses", "Todo"],
                zero='Seleccione...',
                error_message=
                "Debe seleccionar un periodo para descargar el Log.")
        ],
        widget=SQLFORM.widgets.options.widget),
                                 labels={'periodo': 'Periodo'},
                                 submit_button='Descargar')

    return formulario
Exemple #22
0
def EditarCampo():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    formulario = SQLFORM.factory(
        Field(
            'nombre',
            requires=[
                IS_NOT_EMPTY(
                    error_message='El nombre del campo no puede quedar vacio.'
                ),
                IS_MATCH(
                    '^[A-zÀ-ÿŸ\s]*$',
                    error_message=
                    "Use solo letras, sin numeros ni caracteres especiales.")
            ]),
        Field('tipo_campo',
              requires=[
                  IS_IN_SET(
                      tipo_campos,
                      zero='Seleccione...',
                      error_message="Debe seleccionar un tipo para el campo.")
              ],
              widget=SQLFORM.widgets.options.widget),
        Field('obligatorio', type='boolean', default=False),
        Field('id_catalogo', type="string", default=''),
        Field('id_campo_cat', type="string", default=''),
        labels={
            'nombre': 'Nombre',
            'tipo_campo': 'Tipo',
            'obligatorio': 'Obligatorio'
        },
        submit_button='Guardar')

    return formulario
Exemple #23
0
def consultar():
    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    formulario = formulario_descargar_log_periodo()

    if formulario.process(
            formname="formulario_descargar_log_periodo").accepted:
        periodo = request.vars.periodo
        if periodo == "Todo":
            redirect(URL(c="log", f="download", args=[0]))
        elif periodo == "Hoy":
            redirect(URL(c="log", f="download", args=[1]))
        elif periodo == "Semana pasada":
            redirect(URL(c="log", f="download", args=[2]))
        elif periodo == "Mes pasado":
            redirect(URL(c="log", f="download", args=[3]))
        elif periodo == "Hace 3 meses":
            redirect(URL(c="log", f="download", args=[4]))

    #log_entries =  db().select(db.LOG_SIRADEX.ALL, orderby=~db.LOG_SIRADEX.id_log)

    if len(request.args):
        page = int(request.args[0])
    else:
        page = 0

    items_per_page = 20

    limitby = (page * items_per_page, (page + 1) * items_per_page + 1)

    log_entries = db().select(db.LOG_SIRADEX.ALL,
                              orderby=~db.LOG_SIRADEX.id_log,
                              limitby=limitby)
    return dict(admin=admin, log_entries = log_entries, formulario_periodo = formulario, \
                page=page,items_per_page=items_per_page)
Exemple #24
0
def cambiarNombreCatalogo():

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(URL(c="default", f="index"))

    formulario = SQLFORM.factory(Field(
        'nombre',
        requires=[
            IS_NOT_EMPTY(
                error_message='El nombre del catálogo no puede quedar vacío.'),
            IS_MATCH('^[A-zÀ-ÿŸ\s]*$',
                     error_message=
                     "Use sólo letras, sin números ni caracteres especiales."),
            IS_NOT_IN_DB(db,
                         'CATALOGO.nombre',
                         error_message="Ya existe un catálogo con ese nombre.")
        ]),
                                 Field('id_catalogo', type='string'),
                                 submit_button='Cambiar Nombre',
                                 labels={'nombre': 'Nuevo Nombre'})
    return formulario
Exemple #25
0
def vRegistroUsuario():
    if session.usuario != None:
        # Se usa un formulario que muestre los datos no modificables.
        form = SQLFORM.factory(Field("USBID",
                                     default=session.usuario["usbid"],
                                     writable=False),
                               Field('Nombres',
                                     default=session.usuario["first_name"],
                                     writable=False),
                               Field('Apellidos',
                                     default=session.usuario["last_name"],
                                     writable=False),
                               readonly=True)

        #Realiza las modificaciones sobre la base de datos en funcion de lo que introduzca el usuario.
        usuarios = db(db.USUARIO).select()
        for raw in usuarios:
            if raw.ci == session.usuario["cedula"]:
                forma = SQLFORM(db.USUARIO,
                                raw,
                                button=['Registrarse'],
                                fields=['telefono', 'correo_alter'],
                                submit_button='Registrarse',
                                labels={
                                    'telefono': 'Teléfono',
                                    'correo_alter': 'Correo alternativo'
                                })
                break
        if len(request.vars) != 0:
            nuevoTelefono = request.vars.telefono
            nuevoCorreoAlter = request.vars.correo_alter
            db(db.USUARIO.ci == session.usuario["cedula"]).update(
                telefono=nuevoTelefono, correo_alter=nuevoCorreoAlter)
            redirect(URL('perfil'))  # Redirige al usuario al menu principal.
        return dict(form1=form, form=forma, admin=get_tipo_usuario(session))
    else:
        redirect(URL("index"))
Exemple #26
0
def index():

    admin = get_tipo_usuario(session)

    if (admin == 0 or admin == 2):
        redirect(URL(c="default", f="index"))

    backups = os.listdir("./applications/SiraDex/backup")

    form = formulario_restaurar_backup()

    if form.process(formname="form", table_name='archivos').accepted:

        print form.vars.backup
        #        comando = "psql -d Siradex -U Siradex -h localhost -w < ./applications/SiraDex/backup/" + archivo

        #        resp = os.system(comando)

        redirect(URL('index'))

    elif form.errors:
        response.flash = 'el formulario tiene errores'

    return locals()
Exemple #27
0
def gestionar_programas():

    admin = get_tipo_usuario(session)

    
    # Obtengo todos los programas almacenados en la base de datos.
    programas = db(db.PROGRAMA.papelera == False).select()

    # Para agregar un programa.
    formulario = SQLFORM.factory(
        Field('Nombre',
              requires = [IS_NOT_EMPTY(error_message='El nombre del programa no puede quedar vacío.'),
                          IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales."),
                          IS_LENGTH(256),
                          IS_NOT_IN_DB(db, 'PROGRAMA.nombre', error_message="Ya existe un programa con ese nombre.")]),
        Field('Abreviacion',
                requires = [IS_NOT_EMPTY(error_message='La abreviación del programa no puede quedar vacía.'),
                            IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales.")]),
        Field('Descripcion', type="text",
              requires=[IS_NOT_EMPTY(error_message='La descripción del programa no puede quedar vacía.'),
                        IS_LENGTH(2048)]),
        submit_button = 'Agregar',
        labels = {'Descripcion' : 'Descripción',
                  'Nombre' : 'Nombre del Programa',
                  'Abreviacion' : 'Abreviación del Programa'},
        )
    formulario.element(_type='submit')['_class']="btn blue-add btn-block btn-border"
    formulario.element(_type='submit')['_value']="Agregar"

    # Para editar un programa.
    formulario_editar  = SQLFORM.factory(
        Field('Nombre',
              requires = [IS_NOT_EMPTY(error_message='El nombre del programa no puede quedar vacío.'),
                          IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use sólo letras, sin números ni caracteres especiales."),
                          IS_LENGTH(256),
                          IS_NOT_IN_DB(db(db.PROGRAMA.id_programa != request.vars['id_programa']), 'PROGRAMA.nombre',
                                            error_message= ('Ya existe un programa con el nombre "' + request.vars['Nombre'] + '".') if not(request.vars['Nombre'] is None) else 'Ya existe un programa con el nombre ')]),
        Field('Abreviacion',
                requires = [IS_NOT_EMPTY(error_message='La abreviación del programa no puede quedar vacía.'),
                            IS_MATCH('^[A-zÀ-ÿŸ\s]*$', error_message="Use solo letras, sin números ni caracteres especiales.")]),
        Field('Descripcion', type="text",
              requires=IS_NOT_EMPTY(error_message='La descripción del programa no puede quedar vacía.')),
        Field('id_programa', type="string"),
        submit_button = 'Agregar',
        labels = {'Descripcion' : 'Descripción',
                  'Nombre' : 'Nombre del Programa',
                  'Abreviacion' : 'Abreviación del Programa'},
        )
    formulario_editar.element(_type='submit')['_class']="btn blue-add btn-block btn-border"
    formulario_editar.element(_type='submit')['_value']="Editar"

    # MÉTODO POST FORMULARIO AGREGAR:
    # En caso de que los datos del formulario agregar estén correctos:
    if formulario.accepts(request.vars, session, formname="formulario"):
        # Se agrega el programa deseado a la base de datos.
        db.PROGRAMA.insert(nombre = request.vars.Nombre,
                            abreviacion = request.vars.Abreviacion,
                           descripcion = request.vars.Descripcion)
        # Se redirige a la vista de getión de programas.
        insertar_log(db, 'PROGRAMA', datetime.datetime.now(), request.client, 'CREACION DE PROGRAMA '+ request.vars.Nombre.upper(), session.usuario['usbid'])
        redirect(URL('gestionar_programas.html'))
    # En caso de que el formulario no sea aceptado:
    elif (formulario.errors):
        session.message = "Los datos del programa son inválidos. Inténtelo nuevamente."

    # Se verifica si los campos están llenos correctamente.
    if formulario_editar.accepts(request.vars, session, formname="formulario_editar"):
        id_programa = request.vars.id_programa
        programa = db(db.PROGRAMA.id_programa == id_programa).select().first()
        session.form_nombre = request.vars.Nombre
        programa.nombre = request.vars.Nombre
        programa.abreviacion = request.vars.Abreviacion
        programa.descripcion = request.vars.Descripcion
        programa.update_record()                    # Se actualiza el programa.

        insertar_log(db, 'PROGRAMA', datetime.datetime.now(), request.client, 'MODIFICACION DE PROGRAMA '+ request.vars.Nombre.upper(), session.usuario['usbid'])
        redirect(URL('gestionar_programas.html'))   # Se redirige a la vista de gestión.

    # En caso de que el formulario no sea aceptado
    elif formulario_editar.errors:
        session.message = 'Error en los datos del formulario, por favor intente nuevamente.'

    # MÉTODO POST FORMULARIO EDITAR:
    return dict(admin=admin, programas=programas, hayErroresAgregar=formulario.errors,
                hayErroresEditar=formulario_editar.errors, formulario=formulario,
                formulario_editar=formulario_editar)
Exemple #28
0
def construir_formulario_editar_tipo():

    admin = get_tipo_usuario(session)

    lista_programas = db(db.PROGRAMA.papelera == False).select()
    programas = {}

    # Se crea un diccionario para almacenar unicamente los nombres de los programas almacenados.
    for programa in lista_programas:
        programas[programa.id_programa] = programa.nombre

    formulario_editar_tipo = SQLFORM.factory(
        Field(
            'Nombre',
            requires=[
                IS_NOT_EMPTY(
                    error_message=
                    'El nombre del tipo de actividad no puede quedar vacío.'),
                IS_MATCH(
                    '^[A-zÀ-ÿŸ\s]*$',
                    error_message=
                    "Use sólo letras, sin números ni caracteres especiales."),
                IS_LENGTH(128, error_message="Use como máximo 128 caracteres")
            ]),
        Field(
            'Codigo',
            requires=[
                IS_NOT_EMPTY(
                    error_message='El tipo de actividad debe tener un codigo.'
                ),
                IS_MATCH(
                    '^[A-z0-9À-ÿŸ\s-]*$',
                    error_message="Use solo letras, el caracter '-' y números."
                ),
                IS_LENGTH(10, error_message="Use como máximo diez caracteres")
            ]),
        Field(
            'Tipo',
            requires=IS_IN_SET(
                {
                    'P': 'Evaluables por pares académicos',
                    'R': 'No evaluables por pares académicos'
                },
                zero=T('Seleccione...'),
                error_message=
                'Debe elegir entre "Evaluables por pares académicos" o "No evaluables por pares académicos"'
            )),
        Field(
            'Descripcion',
            type="text",
            requires=[
                IS_NOT_EMPTY(
                    error_message=
                    'La descripción del tipo de actividad no puede quedar vacía.'
                ),
                IS_LENGTH(2048,
                          error_message="Use como máximo 2048 caracteres")
            ]),
        Field('Programa',
              requires=IS_IN_SET(
                  programas,
                  zero="Seleccione...",
                  error_message='Debe elegir uno de los programas listados.')),
        Field('Id_tipo', type="hidden"),
        submit_button='Actualizar',
        labels={
            'Descripcion': 'Descripción',
            'Codigo': 'Código'
        })

    formulario_editar_tipo.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    formulario_editar_tipo.element(_type='submit')['_value'] = "Guardar"

    return formulario_editar_tipo
Exemple #29
0
def editar_tipo():
    session.message = ""

    id = request.args[
        0]  # Se identifica cual tipo de actividad se identificará.

    session.tipo_id_editar = id

    # Se busca el tipo de actividad en la base de datos.
    tipo = db(db.TIPO_ACTIVIDAD.id_tipo == id).select()[0]

    # Se obtienen todos los programas almacenados en la base de datos.
    lista_programas = db().select(db.PROGRAMA.ALL)
    programas = {}

    # Se crea un diccionario para almacenar unicamente los nombres de los programas almacenados.
    for programa in lista_programas:
        programas[programa.id_programa] = programa.nombre

    # Para modificar un tipo de actividad se debe tener al menos un programa.
    formulario_editar_tipo = SQLFORM.factory(
        Field(
            'Nombre',
            default=tipo.nombre,
            requires=[
                IS_NOT_EMPTY(
                    error_message=
                    'El nombre del tipo de actividad no puede quedar vacío.'),
                IS_MATCH(
                    '^[A-zÀ-ÿŸ\s]*$',
                    error_message=
                    "Use sólo letras, sin números ni caracteres especiales."),
                IS_LENGTH(128)
            ]),
        Field(
            'Tipo',
            default=tipo.tipo_p_r,
            requires=IS_IN_SET(
                {
                    'P': 'Evaluables por pares académicos',
                    'R': 'No evaluables por pares académicos'
                },
                zero=T('Seleccione...'),
                error_message=
                'Debes elegir entre "Evaluables por pares académicos" o "No evaluables por pares académicos"'
            )),
        Field(
            'Descripcion',
            type="text",
            default=tipo.descripcion,
            requires=[
                IS_NOT_EMPTY(
                    error_message=
                    'La descripción del tipo de actividad no puede quedar vacía.'
                ),
                IS_LENGTH(2048)
            ]),
        Field('Programa',
              default=tipo.id_programa,
              requires=IS_IN_SET(
                  programas,
                  zero="Seleccione...",
                  error_message='Debe elegir uno de los programas listados.')),
        submit_button='Actualizar',
        labels={'Descripcion': 'Descripción'})

    # Metodos POST
    # En caso de que los datos del formulario sean aceptados

    if formulario_editar_tipo.accepts(request.vars,
                                      session,
                                      formname="formulario_editar_tipo"):
        session.form_nombre = request.vars.Nombre
        tipo.nombre = request.vars.Nombre
        tipo.tipo_p_r = request.vars.Tipo
        tipo.descripcion = request.vars.Descripcion
        tipo.id_programa = request.vars.Programa
        tipo.update_record()  # Se actualiza el tipo de actividad.

        tipo_nombre = 'Evaluables por pares académicos' if tipo.tipo_p_r == 'P' else 'No evaluables por pares académicos'
        programa_nombre = programas[int(request.vars.Programa)]

        #redirect(URL('ver_tipo_actividad.html', args=[id, tipo_nombre, programa_nombre]))  # Se redirige a la vista del preview del T.A. modificado.

    # En caso de que el formulario no sea aceptado
    elif formulario_editar_tipo.errors:
        session.message = 'Error en el formulario'
    # Metodo GET
    else:
        session.message = ''

    formulario_editar_tipo.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    formulario_editar_tipo.element(_type='submit')['_value'] = "Editar"

    return dict(tipo=tipo,
                formulario=formulario_editar_tipo,
                admin=get_tipo_usuario(session))
Exemple #30
0
def ver_tipo_actividad():
    #session.message = ""
    admin = get_tipo_usuario(session)

    # if (admin==0):
    #     redirect(URL(c ="default",f="index"))

    if not request.args:
        raise HTTP(404)
    id_tipo = request.args[0]

    query = reduce(lambda a, b: (a & b), [
        db.TIPO_ACTIVIDAD.id_tipo == id_tipo, db.TIPO_ACTIVIDAD.id_tipo
        == db.ACT_POSEE_CAMPO.id_tipo_act, db.ACT_POSEE_CAMPO.id_campo
        == db.CAMPO.id_campo
    ])

    campos_guardados = db(query).select(db.CAMPO.ALL)

    tipo = db(db.TIPO_ACTIVIDAD.id_tipo == id_tipo).select(
        db.TIPO_ACTIVIDAD.ALL).first()
    programa = db(db.PROGRAMA.id_programa == tipo.id_programa).select(
        db.PROGRAMA.ALL).first()

    # Se determina si hay productos con este tipo de actividad
    # De haber, entonces no se puede editar porque se alteran los demas
    # productos
    editable = not db((db.PRODUCTO_TIENE_CAMPO.id_campo == db.ACT_POSEE_CAMPO.id_campo) & \
                  (db.ACT_POSEE_CAMPO.id_tipo_act == id_tipo)).select()

    # Formularios para agregar campos o catalogos
    formSimple, formMultiple = formulario_agregar_tipo_campos()
    formulario_editar_campo = formularioEditarCampo()

    if formSimple.accepts(request.vars, session, formname="formSimple"):
        session.message = ""
        # Verifico si se seleccionó el campo "Obligatorio".
        if request.vars.Obligatorio == None:
            request.vars.Obligatorio = 'f'

        # Determina si el campo ya ha sido registrado en esta actividad
        queryCampo = reduce(lambda a, b: (a & b),
                            [db.CAMPO.nombre == request.vars.Nombre])
        id_camposEnBaseDeDatos = db(queryCampo).select(db.CAMPO.id_campo)
        id_campo = None
        for id_campoEnBD in id_camposEnBaseDeDatos:
            id_campo = int(id_campoEnBD.id_campo)
            if db((db.ACT_POSEE_CAMPO.id_tipo_act == id_tipo)
                  & (db.ACT_POSEE_CAMPO.id_campo == id_campo)).select():
                print("id_tipo", id_tipo)
                print("id_campo", id_campo)
                session.message = "Nombre de campo ya existe en la actividad."
                redirect(URL("ver_tipo_actividad", args=[id_tipo]))

        # Se inserta el campo, en la base de datos, que se desea utilizar.
        db.CAMPO.insert(nombre=request.vars.Nombre,
                        nombre_interno="C" +
                        str(abs(convertToNumber(request.vars.Nombre))),
                        obligatorio=request.vars.Obligatorio,
                        tipo_campo=request.vars.Tipo,
                        id_catalogo=None)

        # Se busca el id del campo.
        queryCampo = reduce(lambda a, b: (a & b), [
            db.CAMPO.nombre == request.vars.Nombre, db.CAMPO.tipo_campo
            == request.vars.Tipo, db.CAMPO.obligatorio
            == request.vars.Obligatorio, db.CAMPO.nombre_interno
            == "C" + str(abs(convertToNumber(request.vars.Nombre)))
        ])

        #id_campo = db(queryCampo).select(db.CAMPO.id_campo).first()
        id_campo = None
        id_camposEnBaseDeDatos = db(queryCampo).select(db.CAMPO.id_campo)
        for id_campoEnBD in id_camposEnBaseDeDatos:
            id_campo = int(id_campoEnBD.id_campo)
            if db((db.ACT_POSEE_CAMPO.id_tipo_act == id_tipo)
                  & (db.ACT_POSEE_CAMPO.id_campo != id_campo)).select():
                break

        # Se almacena la relación entre el campo añadido y el tipo de actividad
        # correspondiente.
        db.ACT_POSEE_CAMPO.insert(id_tipo_act=id_tipo, id_campo=id_campo)

        # Se redirige a la vista permitiendo agregar más campos.
        redirect(URL('ver_tipo_actividad.html', args=[id_tipo]))

    if formMultiple.accepts(request.vars, session, formname="formMultiple"):
        session.message = ""
        query = reduce(lambda a, b: (a & b), [
            db.TIPO_ACTIVIDAD.id_tipo == id_tipo, db.TIPO_ACTIVIDAD.id_tipo
            == db.ACT_POSEE_CAMPO.id_tipo_act, db.ACT_POSEE_CAMPO.id_campo
            == db.CAMPO.id_campo
        ])

        # Guardo los resultados de dicho query en 'campos_guardados'
        campos_guardados = db(query).select(db.CAMPO.ALL,
                                            db.ACT_POSEE_CAMPO.ALL)

        # Busco el id del catálogo que se deseó utilizar.
        id_catalogo = request.vars.Catalogo

        # Se determina si los campos del catálogo ya habían sido agregados
        for campo_guardado in campos_guardados:
            if str(campo_guardado.CAMPO.id_catalogo) == id_catalogo:
                session.message = "El catálogo seleccionado ya había sido agregado."
                redirect(URL('ver_tipo_actividad.html', args=[id_tipo]))

        campos_catalogo = db(
            db.CAMPO_CATALOGO.id_catalogo == id_catalogo).select(
                db.CAMPO_CATALOGO.ALL)

        # Duplico los campos del catálogo
        for campo in campos_catalogo:

            db.CAMPO.insert(nombre=campo.nombre,
                            nombre_interno="C" +
                            str(abs(convertToNumber(campo.nombre))),
                            obligatorio=campo.obligatorio,
                            tipo_campo=campo.tipo_campo,
                            id_catalogo=id_catalogo)

            queryCampo = reduce(lambda a, b: (a & b), [
                db.CAMPO.nombre == campo.nombre, db.CAMPO.tipo_campo
                == campo.tipo_campo, db.CAMPO.obligatorio == campo.obligatorio,
                db.CAMPO.id_catalogo == id_catalogo
            ])

            id_campo = db(queryCampo).select(db.CAMPO.id_campo).first()
            db.ACT_POSEE_CAMPO.insert(id_tipo_act=id_tipo, id_campo=id_campo)

        redirect(URL('ver_tipo_actividad.html', args=[id_tipo]))

    if formulario_editar_campo.accepts(request.vars,
                                       session,
                                       formname="formulario_editar_campo"):
        session.message = ""
        id_campo = request.vars.id_campo

        # Verifico si se seleccionó el campo "Obligatorio".
        if request.vars.obligatorio == None:
            request.vars.obligatorio = 'f'

        # Los atributos del campo son puestos por defecto en el formulario
        campo = db(db.CAMPO.id_campo == id_campo).select(db.CAMPO.ALL).first()

        campo.update_record(nombre=request.vars.nombre,
                            tipo_campo=request.vars.tipo_campo,
                            obligatorio=request.vars.obligatorio,
                            nombre_interno="C" +
                            str(abs(convertToNumber(request.vars.nombre))))

        # Se obtiene el id del tipo de actividad asociado al campo para
        # hacer un redirect

        redirect(URL("ver_tipo_actividad", args=[id_tipo]))

    formulario_editar_campo.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    formulario_editar_campo.element(_type='submit')['_value'] = "Editar"

    return dict(campos=campos_guardados,
                tipo=tipo,
                admin=get_tipo_usuario(session),
                tipo_nombre=tipo.nombre,
                programa_nombre=programa.nombre,
                formSimple=formSimple,
                formMultiple=formMultiple,
                formulario_editar_campo=formulario_editar_campo,
                editable=editable)