Пример #1
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 --dbname=postgres://Siradex:Siradex@localhost/Siradex -w < ./applications/SiraDex/SQLScripts/dropSIRADEx.sql && psql --dbname=postgres://Siradex:Siradex@localhost/Siradex -w < ./applications/SiraDex/backup/" + archivo

    resp = os.system(comando)
    #resp = 0
    if (resp == 0):
        insertar_log(db, 'BACKUP', datetime.datetime.now(), request.client,
                     'RESTAURACIÓN DEL SISTEMA DESDE DE BACKUP EXITOSA',
                     session.usuario['usbid'])
        session.flash = "Restaurado."
    else:
        insertar_log(db, 'BACKUP', datetime.datetime.now(), request.client,
                     'RESTAURACIÓN DEL SISTEMA DESDE DE BACKUP FALLIDA',
                     session.usuario['usbid'])
        session.flash = "No se pudo restaurar."

    redirect(URL('index'))
Пример #2
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()):
                if ((db(db.PRODUCTO.usbid_usu_creador == request.args[0]).isempty()) \
                        and ((db(db.PARTICIPA_PRODUCTO.usbid_usuario == request.args[0]).isempty()))\
                        and ((db(db.PROGRAMA.usbid_usu_modificador == request.args[0]).isempty()))) :
                    db(db.USUARIO.usbid == request.args[0]).delete()
                    insertar_log(db, 'USUARIO', datetime.datetime.now(),
                                 request.client,
                                 'ELIMINACION DE USUARIO ' + request.args[0],
                                 session.usuario['usbid'])
                    session.message = T("Usuario eliminado exitosamente.")
                    redirect(URL('gestionar'))
                else:
                    session.message = T(
                        "No puede eliminar usuarios que hayan creado productos, programas o actividades. En caso de ser necesario, puede bloquear al usuario para evitar el ingreso al sistema."
                    )
                    redirect(URL('gestionar'))
        else:
            session.message = T(
                "Para eliminar su cuenta, por favor comuníquese con un administrador"
            )
            redirect(URL('gestionar'))
Пример #3
0
def eliminarCatalogo():

    admin = get_tipo_usuario(session)

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

    # Obtengo el id del Catalogo a eliminar
    id_catalogo = request.args[0]

    #eliminamos todos los campos de ese catalogo
    campos_del_catalogo = db(
        db.CAMPO_CATALOGO.id_catalogo == id_catalogo).delete()

    #Buscamos todas las actividades que tengan relacionado este catalogo
    #y eliminamos las referencias a este.
    campos_en_tipos_actividades = db(
        db.CAMPO.id_catalogo == id_catalogo).select()
    for campo in campos_en_tipos_actividades:
        campo.id_catalogo = None
        campo.update_record()

    #eliminarmos el catalogo.
    del db.CATALOGO[id_catalogo]

    insertar_log(db, 'CATALOGO', datetime.datetime.now(), request.client,
                 'ELIMINADO CATALOGO CON ID ' + (id_catalogo),
                 session.usuario['usbid'])

    redirect(URL('vGestionarCatalogos.html'))
Пример #4
0
def eliminar():
    archivo = request.args[0]
    comando = "rm ./applications/SiraDex/backup/" + archivo
    resp = os.system(comando)
    insertar_log(db, 'BACKUP', datetime.datetime.now(), request.client,
                 'ELIMINACIÓN DE BACKUP', session.usuario['usbid'])
    session.flash = "Backup eliminado exitosamente"
    redirect(URL('index'))
Пример #5
0
def descargar_backup():
    nombre_archivo = str(request.args[0])
    direccion = os.path.join('applications', 'SiraDex', 'backup',
                             nombre_archivo)
    response.headers['ContentType'] = "application/octet-stream"
    response.headers[
        'Content-Disposition'] = "attachment; filename=" + nombre_archivo
    insertar_log(db, 'BACKUP', datetime.datetime.now(), request.client,
                 'DESCARGA DE BACKUP', session.usuario['usbid'])
    return response.stream(open(direccion), chunk_size=4096)
Пример #6
0
def validar(id_producto):

    admin = get_tipo_usuario(session)

    if (admin == 0):
        redirect(url)

    db(db.PRODUCTO.id_producto == id_producto).update(estado='Validado')
    insertar_log(db, 'VALIDACION', datetime.datetime.now(), request.client,
                 'PRODUCTO CON ID ' + str(id_producto) + ' VALIDADO',
                 session.usuario['usbid'])

    ## INICIO NOTIFICACION ##

    # obtenemos el producto a validar
    producto = db(db.PRODUCTO.id_producto == id_producto).select().first()

    # obtenemos el usuario que realizo el producto
    usuario = db(
        db.USUARIO.usbid == producto.usbid_usu_creador).select().first()

    # parseamos los datos para la notificacion
    datos_usuario = {'nombres': usuario.nombres + ' ' + usuario.apellidos}
    datos_usuario['correo_inst'] = usuario.correo_inst
    datos_usuario['correo_alter'] = None
    if usuario.correo_alter != None and usuario.correo_alter != '':
        datos_usuario['correo_alter'] = usuario.correo_alter

    producto = {'nombre': producto.nombre}

    # enviamos la notificacion al usuario creador
    enviar_correo_validacion(mail, datos_usuario, producto)

    # enviamos notificacion a los coautores (si existen)
    participaciones = db(
        db.PARTICIPA_PRODUCTO.id_producto == id_producto).select()
    for participacion in participaciones:
        #obtenemos el coautor
        usuario = db(
            db.USUARIO.usbid == participacion.usbid_usuario).select().first()

        datos_coautor = {'nombres': usuario.nombres + ' ' + usuario.apellidos}
        datos_coautor['correo_inst'] = usuario.correo_inst
        datos_coautor['correo_alter'] = None
        if usuario.correo_alter != None and usuario.correo_alter != '':
            datos_coautor['correo_alter'] = usuario.correo_alter
        # Enviamos el correo.
        enviar_correo_validacion_coautor(mail, datos_coautor, datos_usuario,
                                         producto)

    ## FIN NOTIFICACION ##

    session.message = 'Producto validado exitosamente'
    redirect(URL('gestionar_validacion.html'))
Пример #7
0
def rechazar(id_producto):
    print "entre a rechazar"
    admin = get_tipo_usuario(session)

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

    db(db.PRODUCTO.id_producto == id_producto).update(estado='No Validado')
    insertar_log(db, 'VALIDACION', datetime.datetime.now(), request.client,
                 'PRODUCTO CON ID ' + str(id_producto) + ' NO VALIDADO',
                 session.usuario['usbid'])
    session.message = 'Producto rechazado'
    print "\n\n\nA redirigir en rechazar"
    redirect(URL('gestionar_validacion.html'))
Пример #8
0
def restaurar_tipo():

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

    id_tipo = request.args[0]
    tipo_actividad = db(db.TIPO_ACTIVIDAD.id_tipo == id_tipo).select(
        db.TIPO_ACTIVIDAD.ALL).first()
    tipo_actividad.update(papelera=False)
    tipo_actividad.update_record()
    insertar_log(db, 'PAPELERA', datetime.datetime.now(), request.client,
                 'RESTAURADO TIPO DE ACTIVIDAD CON ID ' + str(id_tipo),
                 session.usuario['usbid'])
    redirect(URL('gestionar.html'))
Пример #9
0
def generar_backup():

    admin = get_tipo_usuario(session)

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

    fecha = time.asctime(time.localtime(time.time()))
    archivo = "_".join(fecha.split()[1:]).replace(":", "") + ".sql"
    comando = "pg_dump --dbname=postgres://Siradex:Siradex@localhost/Siradex -w > ./applications/SiraDex/backup/backup_" + archivo
    resp = os.system(comando)
    session.flash = "Backup generado exitosamente"
    insertar_log(db, 'BACKUP', datetime.datetime.now(), request.client,
                 'GENERACIÓN DE BACKUP EXITOSA', session.usuario['usbid'])
    redirect(URL('index'))
Пример #10
0
def eliminar_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()[0]

    programa.papelera           = True
    programa.modif_fecha        = request.now
    programa.usbid_usu_modificador = session.usuario['usbid']
    programa.update_record()
    insertar_log(db, 'PROGRAMA', datetime.datetime.now(), request.client, 'ENVIO DE PROGRAMA '+ programa.nombre.upper() + ' A PAPELERA', session.usuario['usbid'])
    redirect(URL('gestionar_programas.html'))
Пример #11
0
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'))
Пример #12
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)
Пример #13
0
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'))
Пример #14
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'))
Пример #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]))
Пример #16
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()
Пример #17
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)
Пример #18
0
def eliminar_programa_papelera():

    id_programa = int(request.args[0])

    # Determino si existen tipos de actividad con ese programa
    # Si existen, entonces no borro al programa
    hayTiposDeActividad = not db(
        db.TIPO_ACTIVIDAD.id_programa == id_programa).isempty()
    if hayTiposDeActividad:
        session.message = 'No se puede eliminar un \
                          programa con tipos de \
                          actividades asociados'

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

    db(db.PROGRAMA.id_programa == id_programa).delete()

    insertar_log(db, 'PAPELERA', datetime.datetime.now(), request.client,
                 'ELIMINADO PROGRAMA CON ID ' + str(id_programa),
                 session.usuario['usbid'])
    # Guardo mensaje de exito
    session.message = 'Programa Eliminado'
    redirect(URL('gestionar.html'))
Пример #19
0
def modificar():

    admin = get_tipo_usuario(session)

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

    message = ""
    form = SQLFORM.factory(Field("USBID",
                                 default=request.args[0],
                                 writable=False),
                           readonly=True)

    forma = SQLFORM(db.USUARIO,
                    button=['Actualizar'],
                    fields=['tipo'],
                    labels={'tipo': 'TIPO'})
    forma.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    forma.element(_type='submit')['_value'] = "Actualizar"

    if len(request.vars) != 0:
        if (not db(db.USUARIO.usbid == request.args[0]).isempty()):
            if (request.args[0] != session.usuario["usbid"]):
                db(db.USUARIO.usbid == request.args[0]).update(
                    tipo=request.vars.tipo)
                insertar_log(
                    db, 'USUARIO', datetime.datetime.now(), request.client,
                    'CAMBIO DE USUARIO ' + request.args[0] + ' A TIPO ' +
                    request.vars.tipo.upper(), session.usuario['usbid'])
                if request.vars.tipo.upper() == "BLOQUEADO":
                    asunto = "Su usuario ha sido bloqueado."
                    mensaje = "Atención: Cumplimos con comunicarle que su usuario en el sistema SIRADEx ha sido bloqueado.\n Si cree que esto ha sido un error, por favor contacte al Decanato de Extesión."
                    ## Obtenemos el usuario al que deseamos contactar.
                    usuario = db(
                        db.USUARIO.usbid == request.args[0]).select().first()

                    ## parseamos los datos para la notificacion
                    datos_usuario = {
                        'nombres': usuario.nombres + ' ' + usuario.apellidos
                    }
                    if usuario.correo_alter != None and usuario.correo_alter != '':
                        datos_usuario['email'] = usuario.correo_alter
                        ## Enviamos la notificacion al correo alternativo
                        enviar_correo_contacto(mail, datos_usuario, asunto,
                                               mensaje)

                    datos_usuario['email'] = usuario.correo_inst
                    ## Enviamos la notificacion al correo institucional
                    enviar_correo_contacto(mail, datos_usuario, asunto,
                                           mensaje)

                redirect(URL('gestionar'))
            else:
                message = T(
                    "Para cambiar sus permisos, por favor comuníquese con un administrador"
                )
        else:
            message = T("El Usuario no se encuentra registrado")

    return dict(forma=form,
                form=forma,
                message=message,
                admin=get_tipo_usuario(session))
Пример #20
0
def gestionar():

    admin = get_tipo_usuario(session)

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

    message = session.message
    session.message = ""
    aux = db(db.USUARIO).select(db.USUARIO.usbid, db.USUARIO.nombres,
                                db.USUARIO.apellidos, db.USUARIO.tipo)

    form_editar = SQLFORM(db.USUARIO,
                          button=['Actualizar'],
                          fields=['tipo'],
                          labels={'tipo': 'TIPO'})
    form_editar.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    form_editar.element(_type='submit')['_value'] = "Actualizar"

    ## Formulario para colocar el mensaje.
    formulario_contactar = SQLFORM.factory(
        Field('asunto', type="string", requires=[IS_LENGTH(50)]),
        Field('mensaje',
              type="text",
              requires=[
                  IS_NOT_EMPTY(error_message='El mensaje no puede estar vacío')
              ]),
        Field('usbid', type="string"),
        submit_button='Enviar')

    hayErrores = {}

    if formulario_contactar.accepts(request.vars,
                                    session,
                                    formname="formulario_contactar"):
        usbid = request.vars.usbid
        asunto = request.vars.asunto
        mensaje = request.vars.mensaje

        ## Obtenemos el usuario al que deseamos contactar.
        usuario = db(db.USUARIO.usbid == usbid).select().first()

        ## parseamos los datos para la notificacion
        datos_usuario = {'nombres': usuario.nombres + ' ' + usuario.apellidos}
        if usuario.correo_alter != None and usuario.correo_alter != '':
            datos_usuario['email'] = usuario.correo_alter
            ## Enviamos la notificacion al correo alternativo
            enviar_correo_contacto(mail, datos_usuario, asunto, mensaje)

        datos_usuario['email'] = usuario.correo_inst
        ## Enviamos la notificacion al correo institucional
        enviar_correo_contacto(mail, datos_usuario, asunto, mensaje)

        insertar_log(db, 'CONTACTO', datetime.datetime.now(), request.client,
                     'ENVIO DE MENSAJE A ' + usbid, session.usuario['usbid'])

        session.message = 'Correo enviado satisfactoriamente'
        redirect(URL('gestionar'))

    # En caso de que el formulario no sea aceptado
    elif formulario_contactar.errors:
        hayErrores = formulario_contactar.errors

    return dict(form_editar=form_editar,
                hayErrores=hayErrores,
                formulario_contactar=formulario_contactar,
                usuarios=aux,
                message=message,
                admin=get_tipo_usuario(session))
Пример #21
0
def vGestionarCatalogos():
    message = session.message
    session.message = ""
    admin = get_tipo_usuario(session)

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

    #Si hay que agregar un campo a un catalogo

    #Obtenemos todos los catalogos.
    listaCatalogos = db().select(db.CATALOGO.ALL)
    catalogos = []

    #Para cada catalogo, obtenemos sus campos.
    for catalogo in listaCatalogos:
        campos_guardados = db(
            db.CAMPO_CATALOGO.id_catalogo == catalogo.id).select()
        catalogos.append([catalogo, campos_guardados])

    #chequeamos si se esta gestionando un catalogo en particular
    catalogo_actual = None
    if request.args:
        catalogo_actual = int(request.args[0])
    else:
        #Si no es ninguno en especifico,
        #Tomamos como actual el primer catalogo de la lista, si Existe.
        if catalogos != []:
            catalogo_actual = catalogos[0][0].id_catalogo

    #Formulario para agregar un catalogo.
    formulario_agregar_catalogo = AgregarCatalogo()
    formulario_agregar_campo = AgregarCampo()
    formulario_editar_campo = EditarCampo()
    formulario_cambiar_nombre = cambiarNombreCatalogo()

    if formulario_agregar_catalogo.process(
            formname="formulario_agregar_catalogo").accepted:
        # Creamos el catalogo y obtenemos su id, para pasarlo al controlador de agregar campo.
        id_catalogo = db.CATALOGO.insert(
            nombre=request.vars.nombre)['id_catalogo']
        insertar_log(db, 'CATALOGO', datetime.datetime.now(), request.client,
                     'CREACION DE CATALOGO ' + request.vars.nombre.upper(),
                     session.usuario['usbid'])
        redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
    # En caso de que el formulario no sea aceptado
    else:
        message = ''

    #Formulario para agregar un campo a un catalogo
    if formulario_agregar_campo.process(
            formname="formulario_agregar_campo").accepted:
        nombre_campo_nuevo = request.vars.nombre
        id_catalogo = request.vars.id_catalogo
        nombre_repetido = False
        campos_guardados = db(
            db.CAMPO_CATALOGO.id_catalogo == id_catalogo).select()
        for campo in campos_guardados:
            if campo.nombre == nombre_campo_nuevo:
                nombre_repetido = True
                break

        # Si el nombre no esta repetido, lo eliminamos.
        if nombre_repetido:
            message = 'Ya existe el campo'
        else:
            db.CAMPO_CATALOGO.insert(id_catalogo=id_catalogo,
                                     nombre=nombre_campo_nuevo,
                                     tipo_campo=request.vars.tipo_campo,
                                     obligatorio=request.vars.obligatorio)
            message = ""
        # Redirijo a la misma pagina para seguir agregando campos
        insertar_log(
            db, 'CAMPO', datetime.datetime.now(), request.client,
            'NUEVO CAMPO ' + nombre_campo_nuevo.upper() +
            ' PARA CATALOGO CON ID ' + id_catalogo, session.usuario['usbid'])
        redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
    # En caso de que el formulario no sea aceptado
    else:
        message = ''

    if formulario_editar_campo.process(
            formname="formulario_editar_campo").accepted:
        nombre_nuevo = request.vars.nombre
        id_catalogo = request.vars.id_catalogo
        id_campo = int(request.vars.id_campo_cat)
        nombre_repetido = False

        #Bucamos los campos que esten guardados
        campos_guardados = db(
            db.CAMPO_CATALOGO.id_catalogo == id_catalogo).select()

        #Si existe un campo que tenga el mismo nombre
        #Y no sea el campo que estamos modificando.
        #Entonces existe un campo con nombre repetido.

        for campo in campos_guardados:
            if (campo.nombre == nombre_nuevo
                    and campo.id_campo_cat != id_campo):
                nombre_repetido = True
                break

        # Si el nombre no esta repetido, modificamos el campo
        if nombre_repetido:
            message = 'Ya existe un campo llamado "' + nombre_nuevo + '" en el catálogo.'
        else:
            #Actualizamos el campo
            db.CAMPO_CATALOGO[id_campo] = dict(
                nombre=nombre_nuevo,
                tipo_campo=request.vars.tipo_campo,
                obligatorio=request.vars.obligatorio)
            insertar_log(db, 'CAMPO', datetime.datetime.now(), request.client,
                         'MODIFICACION DE CAMPO CON ID ' + str(id_campo),
                         session.usuario['usbid'])
            session.msgErr = 0
        # Redirijo a la misma pagina para seguir agregando campos
        redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
    else:
        message = ''

    if formulario_cambiar_nombre.process(
            formname="formulario_cambiar_nombre").accepted:
        nombre_nuevo = request.vars.nombre
        id_catalogo = request.vars.id_catalogo

        #Actualizamos el nombre
        db.CATALOGO[id_catalogo] = dict(nombre=nombre_nuevo)
        insertar_log(
            db, 'CATALOGO', datetime.datetime.now(), request.client,
            'CATALOGO CON ID ' + str(id_catalogo) + ' RENOMBRADO A ' +
            nombre_nuevo.upper(), session.usuario['usbid'])
        redirect(URL('vGestionarCatalogos', args=[id_catalogo]))
    else:
        message = ''

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

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

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

    formulario_cambiar_nombre.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    formulario_cambiar_nombre.element(
        _type='submit')['_value'] = "Renombrar Catálogo"

    return dict(catalogos=catalogos,
                catalogo_actual=catalogo_actual,
                formulario_agregar_catalogo=formulario_agregar_catalogo,
                formulario_agregar_campo=formulario_agregar_campo,
                formulario_editar_campo=formulario_editar_campo,
                formulario_cambiar_nombre=formulario_cambiar_nombre,
                hayErroresAgregar=formulario_agregar_catalogo.errors,
                hayErroresEditarNombre=formulario_cambiar_nombre.errors,
                hayErroresEditarCampo=formulario_editar_campo.errors,
                hayErroresAgregarCampo=formulario_agregar_campo.errors,
                admin=admin,
                message=message)
Пример #22
0
def gestionar():

    admin = get_tipo_usuario(session)
    session.message = ""
    formulario_agregar_tipo = construir_formulario_agregar_tipo()
    formulario_editar_tipo = construir_formulario_editar_tipo()

    # Vista básica
    if formulario_editar_tipo.accepts(request.vars,
                                      session,
                                      formname="formulario_editar_tipo"):
        tipo = db(
            db.TIPO_ACTIVIDAD.id_tipo == request.vars.Id_tipo).select()[0]
        tipo.nombre = request.vars.Nombre
        tipo.codigo = request.vars.Codigo
        tipo.tipo_p_r = request.vars.Tipo
        tipo.descripcion = request.vars.Descripcion
        id_programa = request.vars.Programa
        tipo.id_programa = id_programa
        tipo.update_record()  # Se actualiza el tipo de actividad.
        insertar_log(
            db, 'ACTIVIDAD', datetime.datetime.now(), request.client,
            'MODIFICACION DE TIPO DE ACTIVIDAD CON ID ' +
            str(request.vars.Id_tipo), session.usuario['usbid'])

    if formulario_agregar_tipo.accepts(request.vars,
                                       session,
                                       formname="formulario_agregar_tipo"):
        id_programa = request.vars.Programa
        db.TIPO_ACTIVIDAD.insert(nombre=request.vars.Nombre,
                                 codigo=request.vars.Codigo,
                                 tipo_p_r=request.vars.Tipo,
                                 descripcion=request.vars.Descripcion,
                                 id_programa=id_programa)
        insertar_log(db, 'ACTIVIDAD', datetime.datetime.now(), request.client,
                     'NUEVO TIPO DE ACTIVIDAD ' + request.vars.Nombre.upper(),
                     session.usuario['usbid'])

    if (len(request.args) == 0) or (request.args[0] == 'None'):

        listaTipoActividades = db(db.TIPO_ACTIVIDAD.papelera == False).select(
            db.TIPO_ACTIVIDAD.ALL)
        programa = dict()
        programa["nombre"] = None
        programa["descripcion"] = None
        id_programa = None

    elif (request.args[0] != None):

        id_programa = request.args[0]

        listaTipoActividades = db(
            (db.TIPO_ACTIVIDAD.papelera == False)
            & (db.TIPO_ACTIVIDAD.id_programa == id_programa)).select(
                db.TIPO_ACTIVIDAD.ALL)

        programa = db(db.PROGRAMA.id_programa == id_programa).select(
            db.PROGRAMA.ALL).first()

    return dict(admin=get_tipo_usuario(session),
                listaTipoActividades=listaTipoActividades,
                programa_nombre=programa["nombre"],
                programa_descripcion=programa["descripcion"],
                formulario_agregar_tipo=formulario_agregar_tipo,
                formulario_editar_tipo=formulario_editar_tipo,
                hayErroresAgregar=formulario_agregar_tipo.errors,
                hayErroresEditar=formulario_editar_tipo.errors,
                id_programa=id_programa)
Пример #23
0
def agregar_tipo():
    session.message = ""
    admin = get_tipo_usuario(session)

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

    # Configuro widgets para el formulario de Agregar Tipo Actividad
    db.TIPO_ACTIVIDAD.nombre.widget = SQLFORM.widgets.string.widget
    db.TIPO_ACTIVIDAD.descripcion.widget = SQLFORM.widgets.text.widget
    db.TIPO_ACTIVIDAD.producto.widget = SQLFORM.widgets.text.widget
    db.TIPO_ACTIVIDAD.nro_campos.widget = SQLFORM.widgets.integer.widget

    def horizontal_radio(f, v):
        return SQLFORM.widgets.radio.widget(f, v, cols=2)

    db.TIPO_ACTIVIDAD.tipo_p_r.widget = horizontal_radio

    # 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.append(programa.nombre)

    # AQUI VA UN CONDICIONAL.
    # Para agregar un tipo de actividad se debe tener al menos un programa.
    formulario_agregar_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)
            ]),
        Field(
            'Tipo',
            default='Seleccione...',
            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)
            ]),
        Field('Programa',
              requires=IS_IN_SET(
                  programas,
                  zero="Seleccione...",
                  error_message='Debe elegir uno de los programas listados.')),
        submit_button='Agregar',
        labels={'Descripcion': 'Descripción'})

    hayPrograma = len(programas) != 0

    # Metodos POST
    # En caso de que los datos del formulario sean aceptados
    if hayPrograma and formulario_agregar_tipo.accepts(
            request.vars, session, formname="formulario_agregar_tipo"):
        session.form_nombre = request.vars.Nombre
        programa = db(db.PROGRAMA.nombre == request.vars.Programa).select()
        id_programa = programa[0].id_programa
        db.TIPO_ACTIVIDAD.insert(nombre=request.vars.Nombre,
                                 tipo_p_r=request.vars.Tipo,
                                 descripcion=request.vars.Descripcion,
                                 id_programa=id_programa)
        insertar_log(db, 'ACTIVIDAD', datetime.datetime.now(), request.client,
                     'NUEVO TIPO DE ACTIVIDAD ' + request.vars.Nombre.upper(),
                     session.usuario['usbid'])
    elif not hayPrograma:
        session.message = 'Lo sentimos, no existen programas.'
    # En caso de que el formulario no sea aceptado
    elif formulario_agregar_tipo.errors:
        session.message = 'Lo sentimos, todos los campos son obligatorios.'
    # Metodo GET
    else:
        session.message = ''

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

    return dict(formulario=formulario_agregar_tipo,
                admin=get_tipo_usuario(session),
                mensaje=session.message,
                hayPrograma=hayPrograma)
Пример #24
0
def EditarPerfil():
    if session.usuario != None:
        admin = get_tipo_usuario(session)

        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)

        # Modificar datos del perfil
        usuario = db(
            db.USUARIO.ci == session.usuario['cedula']).select().first()
        print usuario
        alternativo = session.usuario[
            "alternativo"] if session.usuario["alternativo"] != None else ''
        telefono = session.usuario[
            "phone"] if session.usuario["phone"] != None else ''

        forma = SQLFORM.factory(
            Field('telefono',
                  requires=[
                      IS_LENGTH(20),
                      IS_MATCH('^\(0[0-9]{3}\)[0-9]{3}-[0-9]{4}$|^$',
                               error_message="Formato inválido")
                  ]),
            Field('correo_alter',
                  requires=[
                      IS_MATCH('^[.A-z0-9À-ÿŸ\s-]+@[.A-z0-9À-ÿŸ\s-]+$|^$',
                               error_message="Formato inválido")
                  ]),
            submit_button='Agregar',
            labels={
                'telefono': 'Teléfono',
                'correo_alter': 'Correo alternativo'
            },
            col3={
                'telefono': 'Ej: (0212)123-1234',
                'correo_alter': 'Ej: [email protected]'
            })

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

        if forma.accepts(request.vars, session, formname="forma"):
            nuevoTelefono = request.vars.telefono
            nuevoCorreoAlter = request.vars.correo_alter

            valor_telefono = "" if (nuevoTelefono == None) else nuevoTelefono
            session.usuario["phone"] = valor_telefono

            valor_correo = "" if (nuevoCorreoAlter
                                  == None) else nuevoCorreoAlter
            session.usuario["alternativo"] = valor_correo

            db(db.USUARIO.ci == session.usuario["cedula"]).update(
                telefono=valor_telefono, correo_alter=valor_correo)

            insertar_log(db, 'PERFIL', datetime.datetime.now(), request.client,
                         'ACT. PERFIL SATISFACTORIA', session.usuario['usbid'])
            redirect(URL('perfil'))
        else:
            message = T("Debe colocar su teléfono y correo alternativo.")

        return dict(form1=form,
                    form=forma,
                    admin=admin,
                    telefono=telefono,
                    alternativo=alternativo)
    else:
        redirect(URL("index"))
Пример #25
0
def agregar():

    admin = get_tipo_usuario(session)

    # Para la fecha maxima de realizacion
    now = datetime.datetime.now()
    if now.month < 10:
        mes = "-0" + str(now.month)
    else:
        mes = "-" + str(now.month)
    if now.day < 10:
        dia = "-0" + str(now.day)
    else:
        dia = "-" + str(now.month)
    fecha_max = str(now.year) + mes + dia

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

    campos_id = db(db.ACT_POSEE_CAMPO.id_tipo_act == tipo).select()
    tipo_actividad = db(db.TIPO_ACTIVIDAD.id_tipo == tipo).select().first()

    nombre_actividad = tipo_actividad.nombre
    descripcion_actividad = tipo_actividad.descripcion

    fields = []

    # Otros Autores de la Actividad
    lista_usuarios = db(db.USUARIO.tipo == 'Usuario').select()
    usuarios = {}

    # Se crea un diccionario para almacenar unicamente los nombres de los usuarios
    for usuario in lista_usuarios:
        if usuario.usbid != session.usuario['usbid']:
            usuarios[usuario.usbid] = usuario.nombres + ' ' + usuario.apellidos

    for i in range(5):
        fields.append(
            Field(
                "autor_" + str(i + 1),
                label='Autor ',
                requires=IS_EMPTY_OR(
                    IS_IN_SET(usuarios,
                              zero="Seleccione usuario",
                              error_message=
                              'Debes elegir uno de los usuarios listados.'))))

    obl = {}
    no_obl = {}
    for row in campos_id:
        rows_campo = db(db.CAMPO.id_campo == row.id_campo).select().first()
        nombre = rows_campo.nombre_interno.replace(" ", "_")
        try:
            if int(nombre[0]):
                nombre = "c4mp0_" + nombre
        except:
            pass

        print(nombre)

        obligatorio = rows_campo.obligatorio
        tipo_campo = rows_campo.tipo_campo.replace(" ", "_")

        if obligatorio:
            obl[nombre] = tipo_campo
            if tipo_campo in ['Fecha']:
                fields.append(
                    Field(nombre,
                          'date',
                          label=rows_campo.nombre + "  (**)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_DATE(format=T('%Y-%m-%d'),
                                      error_message=
                                      'Fecha inválida, debe ser: AAA-MM-DD')
                          ]))
            elif tipo_campo in ['Texto_Corto']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(error_message='Inserte texto')
                          ]))
            elif tipo_campo in ['Cedula']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_MATCH('\d{2}.\d{3}.\d{3}$',
                                       error_message=
                                       'CI inválida, debe ser: XX.XXX.XXX')
                          ]))
            elif tipo_campo in ['Documento']:
                fields.append(
                    Field(nombre,
                          'upload',
                          label=rows_campo.nombre + " (*)",
                          uploadfolder=os.path.join(request.folder, 'uploads'),
                          requires=[
                              IS_NOT_EMPTY(
                                  error_message='Debe subirse un archivo')
                          ]))
            elif tipo_campo in ['Telefono']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre + " (*)",
                        requires=[
                            IS_NOT_EMPTY(),
                            IS_MATCH(
                                '\(0\d{3}\)\d{3}-\d{4}$',
                                error_message=
                                'Teléfeno invélido, debe ser: (0xxx)xxx-xxxx')
                        ]))
            elif tipo_campo in ['Cantidad_Entera']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_INT_IN_RANGE(-9223372036854775800,
                                              9223372036854775807)
                          ]))
            elif tipo_campo in ['Cantidad_Decimal']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre + " (*)",
                        requires=[
                            IS_NOT_EMPTY(),
                            IS_DECIMAL_IN_RANGE(
                                -9223372036854775800,
                                9223372036854775807,
                                dot=".",
                                error_message=
                                'El numero debe ser de la forma X.X, donde X esta entre -9223372036854775800 y 9223372036854775807'
                            )
                        ]))
            elif tipo_campo in ['Texto_Largo']:
                fields.append(
                    Field(nombre,
                          'text',
                          label=rows_campo.nombre + " (*)",
                          requires=IS_NOT_EMPTY()))

        else:
            no_obl[nombre] = tipo_campo
            if tipo_campo in ['Fecha']:
                fields.append(
                    Field(nombre,
                          'date',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_DATE(format=T('%Y-%m-%d'),
                                      error_message=
                                      'Fecha inválida, debe ser: AAA-MM-DD'))))
            elif tipo_campo in ['Texto_Corto']:
                fields.append(Field(nombre, 'string', label=rows_campo.nombre))
            elif tipo_campo in ['Cedula']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_MATCH('\d{2}.\d{3}.\d{3}$',
                                       error_message=
                                       'CI inválida, debe ser: XX.XXX.XXX'))))
            elif tipo_campo in ['Documento']:
                fields.append(
                    Field(nombre,
                          'upload',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(IS_UPLOAD_FILENAME()),
                          uploadfolder=os.path.join(request.folder,
                                                    'uploads')))
            elif tipo_campo in ['Telefono']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_MATCH(
                                  '\(0\d{3}\)\d{3}-\d{4}$',
                                  error_message=
                                  'Teléfeno inválido, debe ser: (0xxx)xxx-xxxx'
                              ))))
            elif tipo_campo in ['Cantidad_Entera']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_INT_IN_RANGE(-9223372036854775800,
                                              9223372036854775807))))
            elif tipo_campo in ['Cantidad_Decimal']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre,
                        requires=IS_EMPTY_OR(
                            IS_DECIMAL_IN_RANGE(
                                -9223372036854775800,
                                9223372036854775807,
                                dot=".",
                                error_message=
                                'El número debe ser de la forma X.X, donde X esta entre -9223372036854775800 y 9223372036854775807'
                            ))))
            elif tipo_campo in ['Texto_Largo']:
                fields.append(Field(nombre, 'text', label=rows_campo.nombre))

    for i in range(5):
        fields.append(
            Field("c0mpr0bant3_" + str(i + 1),
                  'upload',
                  autodelete=True,
                  uploadseparate=True,
                  uploadfolder=os.path.join(request.folder, 'uploads'),
                  label=''))
        fields.append(
            Field("d3scr1pc10n_comprobante_" + str(i + 1),
                  'string',
                  label="Descripción (*)"))

    #fields.append(Field(nombre,requires=IS_IN_SET([(1,'Method1'), (2,'Method2'), (3,'Method3')], zero='Select')))
    url = URL('download')

    form = SQLFORM.factory(
        *fields,
        upload=url,
        buttons=[
            INPUT(_value='Guardar como Borrador',
                  _type="submit",
                  _class="btn blue-add btn-block btn-border ",
                  _name="borrador"),
            INPUT(_value='Enviar Producto',
                  _type="submit",
                  _class="btn blue-add btn-block btn-border ")
        ])
    form.element()

    #fix para el datepicker de las fechas:
    for i in obl.keys():
        form.element(_name=i)['_class'] = form.element(
            _name=i)['_class'] + " obligatoria " + obl[i]

    for i in no_obl.keys():
        form.element(_name=i)['_class'] = form.element(
            _name=i)['_class'] + ' ' + no_obl[i]

    if form.process().accepted:
        no = [
            'nombre', 'descripcion', 'fecha_realizacion', 'lugar',
            'colaboradores'
        ]

        estado = "Por Validar"
        if request.vars.borrador:
            #Verificamos si se quiere es un borrador.
            estado = "Borrador"
        dicc_producto = db.PRODUCTO.insert(id_tipo = tipo,nombre=form.vars.nombre, descripcion=form.vars.descripcion,\
                                      estado= estado, fecha_realizacion=form.vars.fecha_realizacion, fecha_modificacion=now, \
                                      lugar = form.vars.lugar,colaboradores=form.vars.colaboradores,
                                      usbid_usu_creador= session.usuario['usbid'])
        id_producto = dicc_producto['id_producto']

        if request.vars.borrador:
            insertar_log(db, 'PRODUCTO', datetime.datetime.now(),
                         request.client,
                         'NUEVO BORRADOR CON ID ' + str(id_producto),
                         session.usuario['usbid'])
        else:
            insertar_log(db, 'PRODUCTO', datetime.datetime.now(),
                         request.client,
                         'NUEVO PRODUCTO CON ID ' + str(id_producto),
                         session.usuario['usbid'])

        for var in form.vars:
            if not (var in no):
                #Buscamos los autores
                try:
                    if (var[0:5] == "autor"):
                        usbid_autor = getattr(form.vars, var)
                        if usbid_autor != None:
                            db.PARTICIPA_PRODUCTO.insert(
                                id_producto=id_producto,
                                usbid_usuario=usbid_autor)
                except Exception, e:
                    print "Exception Autor: "
                    print e

                try:
                    if (var[0:11] == "c0mpr0bant3"):
                        numero_comprobante = var[12:13]
                        descripcion = getattr(
                            form.vars,
                            'd3scr1pc10n_comprobante_' + numero_comprobante)
                        nombre = getattr(form.vars, var)
                        if nombre != '':
                            db.COMPROBANTE.insert(archivo=nombre,
                                                  descripcion=descripcion,
                                                  producto=id_producto)
                        continue

                    elif (var[0:11] == "d3scr1pc10n"):
                        continue

                except Exception, e:
                    print "Exception: "
                    print e

                try:
                    if (var[0:6] == "c4mp0_"):
                        campo = var[6:]
                    else:
                        campo = var
                except Exception, e:
                    print "Exception: "
                    print e
                    campo = var

                #Ignora campos de autor
                if campo[0:5] != 'autor' and campo[0:8] != 'borrador':
                    print campo
                    campo = campo.replace("_", " ")
                    id_camp = db(db.CAMPO.nombre_interno ==
                                 campo).select().first().id_campo
                    valor = getattr(form.vars, var)
                    db.PRODUCTO_TIENE_CAMPO.insert(id_prod=id_producto,
                                                   id_campo=id_camp,
                                                   valor_campo=valor)
Пример #26
0
def modificar():
    admin = get_tipo_usuario(session)

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

    now = datetime.datetime.now()
    if now.month < 10:
        mes = "-0" + str(now.month)
    else:
        mes = "-" + str(now.month)
    if now.day < 10:
        dia = "-0" + str(now.day)
    else:
        dia = "-" + str(now.month)
    fecha_max = str(now.year) + mes + dia

    # Obtenemos los productos para mostrarlos en el html
    producto = db(db.PRODUCTO.id_producto == id_producto).select().first()

    # Si el producto no existe
    if not producto:
        redirect(URL('gestionar'))
        # Si no soy el creador del producto
    elif producto["usbid_usu_creador"] != session.usuario["usbid"]:
        redirect(URL('gestionar'))

    query = "SELECT id_comprobante, descripcion FROM COMPROBANTE WHERE producto=" + str(
        id_producto) + ";"
    comprobantes = db.executesql(query)

    temp = "SELECT id_comprobante, descripcion FROM COMPROBANTE WHERE producto=" + str(
        id_producto) + "AND ;"
    tipo_actividad = db(
        db.TIPO_ACTIVIDAD.id_tipo == producto.id_tipo).select().first()

    nombre_actividad = tipo_actividad.nombre
    descripcion_actividad = tipo_actividad.descripcion

    # Creamos el formulario
    rows = db(db.PRODUCTO_TIENE_CAMPO.id_prod == id_producto).select()
    fields = []

    obl = {}
    no_obl = {}

    valores = {}
    valores['nombre'] = producto.nombre
    valores['descripcion'] = producto.descripcion
    valores['fecha_realizacion'] = producto.fecha_realizacion
    valores['lugar'] = producto.lugar
    valores['colaboradores'] = producto.colaboradores
    documentos = []

    # Otros Autores de la Actividad
    lista_usuarios = db(db.USUARIO.tipo == 'Usuario').select()
    usuarios = {}

    # Se crea un diccionario para almacenar unicamente los nombres de los usuarios
    for usuario in lista_usuarios:
        if usuario.usbid != session.usuario['usbid']:
            usuarios[usuario.usbid] = usuario.nombres + ' ' + usuario.apellidos

    for i in range(5):
        fields.append(
            Field(
                "autor_" + str(i + 1),
                label='Autor ',
                requires=IS_EMPTY_OR(
                    IS_IN_SET(usuarios,
                              zero="Seleccione usuario",
                              error_message=
                              'Debes elegir uno de los usuarios listados.'))))

    #Obtenemos los valores de los otros autores, si exiten
    otros_autores = db(
        db.PARTICIPA_PRODUCTO.id_producto == producto.id_producto).select()
    num_aut = 0
    for autor in otros_autores:
        autorAux = db(db.USUARIO.usbid == autor.usbid_usuario).select().first()
        valores['autor_' + str(num_aut + 1)] = autorAux.usbid
        num_aut += 1

    # Los tipos documento tienen que ser tratados diferente y cargados los enlaces con js
    hay_uploads = False
    for row in rows:
        rows_campo = db(db.CAMPO.id_campo == row.id_campo).select().first()
        nombre = rows_campo.nombre_interno.replace(" ", "_")
        try:
            if int(nombre[0]):
                nombre = "campo_" + nombre
        except:
            pass
        obligatorio = rows_campo.obligatorio
        tipo_campo = rows_campo.tipo_campo

        if obligatorio:
            obl[nombre.replace(" ", "_")] = tipo_campo
            if tipo_campo in ['Fecha']:
                fields.append(
                    Field(nombre,
                          'date',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_DATE(format=T('%Y-%m-%d'),
                                      error_message=
                                      'Fecha inválida, debe ser: AAA-MM-DD')
                          ]))
            elif tipo_campo in ['Texto Corto']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(error_message='Inserte texto')
                          ]))
            elif tipo_campo in ['Cedula']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_MATCH('\d{2}.\d{3}.\d{3}$',
                                       error_message=
                                       'CI inválida, debe ser: XX.XXX.XXX')
                          ]))
            elif tipo_campo in ['Documento']:
                if (row.valor_campo != ''):
                    temp = [
                        str(rows_campo.id_campo),
                        str(row.id_prod), rows_campo.nombre + " (*)", nombre
                    ]
                    documentos += [temp]
                fields.append(
                    Field(nombre,
                          'upload',
                          label=rows_campo.nombre + " (*)",
                          uploadfolder=os.path.join(request.folder, 'uploads'),
                          requires=[
                              IS_NOT_EMPTY(
                                  error_message='Debe subirse un archivo')
                          ]))
            elif tipo_campo in ['Telefono']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre + " (*)",
                        requires=[
                            IS_NOT_EMPTY(),
                            IS_MATCH(
                                '\(0\d{3}\)\d{3}-\d{4}$',
                                error_message=
                                'Teléfeno inválido, debe ser: (0xxx)xxx-xxxx')
                        ]))
            elif tipo_campo in ['Cantidad Entera']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre + " (*)",
                          requires=[
                              IS_NOT_EMPTY(),
                              IS_INT_IN_RANGE(-9223372036854775800,
                                              9223372036854775807)
                          ]))
            elif tipo_campo in ['Cantidad Decimal']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre + " (*)",
                        requires=[
                            IS_NOT_EMPTY(),
                            IS_DECIMAL_IN_RANGE(
                                -9223372036854775800,
                                9223372036854775807,
                                dot=".",
                                error_message=
                                'El número debe ser de la forma X.X, donde X está entre -9223372036854775800 y 9223372036854775807'
                            )
                        ]))
            elif tipo_campo in ['Texto Largo']:
                fields.append(
                    Field(nombre,
                          'text',
                          label=rows_campo.nombre + " (*)",
                          requires=IS_NOT_EMPTY()))

        else:
            no_obl[nombre.replace(" ", "_")] = tipo_campo
            if tipo_campo in ['Fecha']:
                fields.append(
                    Field(nombre,
                          'date',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_DATE(format=T('%Y-%m-%d'),
                                      error_message=
                                      'Fecha inválida, debe ser: AAA-MM-DD'))))
            elif tipo_campo in ['Texto Corto']:
                fields.append(Field(nombre, 'string', label=rows_campo.nombre))
            elif tipo_campo in ['Cedula']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_MATCH('\d{2}.\d{3}.\d{3}$',
                                       error_message=
                                       'CI inválida, debe ser: XX.XXX.XXX'))))
            elif tipo_campo in ['Documento']:
                if (row.valor_campo != ''):
                    temp = [
                        str(rows_campo.id_campo), row.id_prod,
                        rows_campo.nombre, nombre
                    ]
                    documentos += [temp]
                fields.append(
                    Field(nombre,
                          'upload',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(IS_UPLOAD_FILENAME()),
                          uploadfolder=os.path.join(request.folder,
                                                    'uploads')))
            elif tipo_campo in ['Telefono']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_MATCH(
                                  '\(0\d{3}\)\d{3}-\d{4}$',
                                  error_message=
                                  'Teléfeno inválido, debe ser: (0xxx)xxx-xxxx'
                              ))))
            elif tipo_campo in ['Cantidad Entera']:
                fields.append(
                    Field(nombre,
                          'string',
                          label=rows_campo.nombre,
                          requires=IS_EMPTY_OR(
                              IS_INT_IN_RANGE(-9223372036854775800,
                                              9223372036854775807))))
            elif tipo_campo in ['Cantidad Decimal']:
                fields.append(
                    Field(
                        nombre,
                        'string',
                        label=rows_campo.nombre,
                        requires=IS_EMPTY_OR(
                            IS_DECIMAL_IN_RANGE(
                                -9223372036854775800,
                                9223372036854775807,
                                dot=".",
                                error_message=
                                'El número debe ser de la forma X.X, donde X está entre -9223372036854775800 y 9223372036854775807'
                            ))))
            elif tipo_campo in ['Texto Largo']:
                fields.append(Field(nombre, 'text', label=rows_campo.nombre))

        valores[nombre] = row.valor_campo
    print documentos
    for i in range(5):
        fields.append(
            Field("c0mpr0bant3_" + str(i + 1),
                  'upload',
                  autodelete=True,
                  uploadseparate=True,
                  uploadfolder=os.path.join(request.folder, 'uploads'),
                  label=''))
        fields.append(
            Field("d3scr1pc10n_comprobante_" + str(i + 1),
                  'string',
                  label="Descripción"))

    form = SQLFORM.factory(
        *fields,
        upload=URL('download'),
        buttons=[
            INPUT(_value='Guardar como Borrador',
                  _type="submit",
                  _class="btn blue-add btn-block btn-border ",
                  _name="borrador"),
            INPUT(_value='Enviar Producto',
                  _type="submit",
                  _class="btn blue-add btn-block btn-border ")
        ])
    form.element()

    # Le escribimos la informacion a las vistas
    for nombre_campo in valores.keys():
        setattr(form.vars, nombre_campo, valores[nombre_campo])
    #fix para el datepicker de las fechas:
    for i in obl.keys():
        form.element(_name=i)['_class'] = form.element(
            _name=i)['_class'] + " obligatoria " + obl[i].replace(" ", "_")

    for i in no_obl.keys():
        form.element(_name=i)['_class'] = form.element(
            _name=i)['_class'] + ' ' + no_obl[i].replace(" ", "_")

    # Al aceptar el formulario
    if form.process().accepted:
        no = [
            'nombre', 'descripcion', 'fecha_realizacion', 'fecha_modificacion',
            'lugar', 'colaboradores'
        ]
        sql = ''
        if request.vars.borrador:
            sql = "UPDATE PRODUCTO SET estado = 'Borrador' WHERE id_producto = '" + str(
                id_producto) + "';"
            insertar_log(db, 'PRODUCTO', datetime.datetime.now(),
                         request.client,
                         'MODICIFACION DE BORRADOR CON ID ' + str(id_producto),
                         session.usuario['usbid'])
        else:
            sql = "UPDATE PRODUCTO SET estado = 'Por Validar' WHERE id_producto = '" + str(
                id_producto) + "';"
            insertar_log(db, 'PRODUCTO', datetime.datetime.now(),
                         request.client,
                         'NUEVO PRODUCTO CON ID ' + str(id_producto),
                         session.usuario['usbid'])

        sql2 = "UPDATE PRODUCTO SET fecha_modificacion='" + str(
            now.date()) + "' WHERE id_producto = '" + str(id_producto) + "';"
        db.executesql(sql)
        db.executesql(sql2)

        # Eliminamos los autores anteriores.
        db(db.PARTICIPA_PRODUCTO.id_producto == id_producto).delete()

        for var in form.vars:
            #Buscamos los autores
            try:
                if (var[0:5] == "autor"):
                    usbid_autor = getattr(form.vars, var)
                    if usbid_autor != None:
                        db.PARTICIPA_PRODUCTO.insert(id_producto=id_producto,
                                                     usbid_usuario=usbid_autor)
            except Exception, e:
                print "Exception Autor: "
                print e
            try:
                if (var[0:11] == "c0mpr0bant3"):
                    numero_comprobante = var[12:13]
                    descripcion = getattr(
                        form.vars,
                        'd3scr1pc10n_comprobante_' + numero_comprobante)
                    nombre = getattr(form.vars, var)
                    if nombre != '':
                        db.COMPROBANTE.insert(archivo=nombre,
                                              descripcion=descripcion,
                                              producto=id_producto)
                    continue

                elif (var[0:11] == "d3scr1pc10n"):
                    continue

            except Exception, e:
                print "Exception: "
                print e

            if var[0:5] != 'autor' and var[0:8] != 'borrador':
                valor_anterior = valores[var]
                if not (var in no):

                    try:
                        if (var[0:6] == "campo_"):
                            campo = var[6:]
                        else:
                            campo = var
                    except Exception, e:
                        print "Exception: "
                        print e
                        campo = var

                    valor_nuevo = getattr(form.vars, var)
                    if valor_nuevo != valor_anterior:
                        campo = campo.replace("_", " ")
                        id_campo = db(db.CAMPO.nombre_interno ==
                                      campo).select().first().id_campo

                        sql = "UPDATE PRODUCTO_TIENE_CAMPO SET valor_campo = '" + str(
                            valor_nuevo)
                        sql = sql + "' WHERE id_prod = '" + str(
                            id_producto) + "' AND id_campo = '" + str(
                                id_campo) + "';"
                        db.executesql(sql)

                    else:
                        pass
                else:
                    valor_nuevo = getattr(form.vars, var)
                    if valor_nuevo != valor_anterior:
                        sql = "UPDATE PRODUCTO SET "+var+"= '"+str(valor_nuevo)+\
                              "' WHERE id_producto = '"+str(id_producto)+"';"
                        db.executesql(sql)

                    else:
                        pass
Пример #27
0
def agregar():
    # (0212)363-7827
    admin = get_tipo_usuario(session)

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

    message = ""
    forma = SQLFORM.factory(
        Field('usbid',
              requires=[
                  IS_NOT_EMPTY(error_message='El USBID no puede quedar vacío.')
              ]),
        Field('telefono',
              requires=[
                  IS_LENGTH(20),
                  IS_MATCH('^\(0[0-9]{3}\)[0-9]{3}-[0-9]{4}$|^$',
                           error_message="El formato es inválido")
              ]),
        Field(
            'correo_alter',
            requires=[
                IS_MATCH(
                    '^[.A-z0-9À-ÿŸ\s-]+@[.A-z0-9À-ÿŸ\s-]+\.[.A-z0-9À-ÿŸ\s-]+$|^$',
                    error_message="El formato inválido")
            ]),
        Field('tipo',
              requires=IS_IN_SET(
                  {
                      'Usuario': 'Usuario',
                      'DEX': 'DEX',
                      'Administrador': 'Administrador',
                      'Bloqueado': 'Bloqueado'
                  },
                  zero=T('Seleccione...'),
                  error_message='Debe elegir un tipo de usuario')),
        submit_button='Agregar',
        labels={
            'usbid': 'USBID (*)',
            'telefono': 'Teléfono',
            'correo_alter': 'Correo alternativo',
            'tipo': 'Tipo (*)'
        },
        col3={
            'telefono': 'Ej: (0212)123-1234',
            'correo_alter': 'Ej: [email protected]'
        })
    """
    forma=SQLFORM(                              # Se hace un formulario para introducir un USBID.
        db.USUARIO,
        button=['Agregar'],
        fields=['usbid','tipo','telefono','correo_alter'],
        submit_button='Agregar',
        labels={'usbid':'USBID','telefono':'Teléfono', 'correo_alter':'Correo alternativo','tipo':'Tipo'})
    """

    # Estilo del boton
    forma.element(
        _type='submit')['_class'] = "btn blue-add btn-block btn-border"
    forma.element(_type='submit')['_value'] = "Agregar"

    if forma.accepts(request.vars, session, formname="forma"):

        # En usbidAux almacenamos el usbid proporcionado por el administrador
        # En buscarUser revisamos si el usuario a agregar efectivamente esta en el CAS
        usbidAux = request.vars.usbid
        buscasUser = os.popen(
            "ldapsearch -x -h ldap.usb.ve -b \"dc=usb,dc=ve\" uid=" +
            usbidAux + " |grep numEntries")

        if buscasUser.read() == '':
            message = T("El usuario no está registrado en el CAS")
        else:
            user = get_ldap_data(usbidAux)
            print(user)
            print("----\n")
            telefonoAux = request.vars.telefono
            correo_alterAux = request.vars.correo_alter
            tipoAux = request.vars.tipo
            print("AQUI AQUI:", telefonoAux)
            print("AQUI AQUI:", correo_alterAux)

            # Primero verificamos que el usuario que intenta agregarse no esta en la base de datos
            if db(db.USUARIO.usbid == usbidAux).isempty():
                # Luego de insertar al usuario, mostramos un formulario al administrador con los datos de la persona agregada
                form = SQLFORM.factory(Field("USBID",
                                             default=usbidAux,
                                             writable=False),
                                       Field('Nombres',
                                             default=user["first_name"],
                                             writable=False),
                                       Field('Apellidos',
                                             default=user["last_name"],
                                             writable=False),
                                       readonly=True)
                if len(tipoAux) >= 3:
                    # Lo insertamos en la base de datos.
                    db.USUARIO.insert(ci=user["cedula"],
                                      usbid=usbidAux,
                                      nombres=user["first_name"],
                                      apellidos=user["last_name"],
                                      correo_inst=user["email"],
                                      telefono=telefonoAux,
                                      correo_alter=correo_alterAux,
                                      tipo=tipoAux)
                    insertar_log(db, 'USUARIO', datetime.datetime.now(),
                                 request.client,
                                 'CREACION DE USUARIO ' + usbidAux,
                                 session.usuario['usbid'])
                    return dict(form=form,
                                message=message,
                                errores=forma.errors,
                                bool=1,
                                admin=get_tipo_usuario(session))
                else:
                    message = T("Debe Especificar un Tipo")

            else:
                message = T("El usuario ya está registrado")

    else:
        print("ERRORES: ", forma.errors)

    return dict(form=forma,
                message=message,
                errores=forma.errors,
                admin=get_tipo_usuario(session))
Пример #28
0
    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

    set_tiene_campo = db(db.PRODUCTO_TIENE_CAMPO.id_prod == id_act)
    set_tiene_campo.delete()
    producto = db(db.PRODUCTO.id_producto == id_act)
    producto.delete()

    insertar_log(db, 'PRODUCTO', datetime.datetime.now(), request.client,
                 'PRODUCTO CON ID ' + str(id_act) + ' ELIMINADO',
                 session.usuario['usbid'])
    redirect(URL('gestionar'))

    #return "producto {} eliminada".format(producto)
    return locals()


# Funcion utilizada para el ajax en el agregar
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()
Пример #29
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)
Пример #30
0
def logout_cas():
    insertar_log(db, 'LOGOUT', datetime.datetime.now(), request.client,
                 'LOGOUT SATISFACTORIO', session.usuario['usbid'])
    session.usuario = None
    return response.render()