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'))
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'))
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]))
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
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
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
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
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
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'))
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'))
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
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'))
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]))
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]))
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()
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()
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
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)
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
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
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)
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
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"))
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()
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)
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
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))
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)