Ejemplo n.º 1
0
# GET FUN !

config = ConfigConexion()

#conn = '%s://%s:%s@%s/%s' % (config.get_tipobd(), 
#                             config.get_user(), 
#                             config.get_pass(), 
#                             config.get_host(), 
#                             config.get_dbname())

# HACK: No reconoce el puerto en el URI y lo toma como parte del host. Lo 
# añado detrás y colará en el dsn cuando lo parsee. 
if config.get_tipobd() == "sqlite":
    # OJO: No soportado completamente por el momento.
    ruta_bdsqlite = os.path.join("..", "db", config.get_dbname())
    ruta_bdsqlite = os.path.abspath(ruta_bdsqlite)
    conn = "%s://%s" % (config.get_tipobd(), 
                       ruta_bdsqlite)
else:
    conn = '%s://%s:%s@%s/%s port=%s' % (config.get_tipobd(), 
                                         config.get_user(), 
                                         config.get_pass(), 
                                         config.get_host(), 
                                         config.get_dbname(), 
                                         config.get_puerto()) 
if DEBUG:
    conndebug = connectionForURI(conn)
    #conndebug.autoCommit = False
    conndebug.debug = True
Ejemplo n.º 2
0
 def __init__(self, glade, objeto = None, usuario = None):
     """
     Constructor.
     glade es una cadena con el nombre del fichero .glade a cargar.
     objeto es el objeto principal de la ventana.
     Si usuario se recibe, se guarda en un atributo privado de la 
     clase que servirá únicamente para crear un menú superior en 
     la ventana con las opciones de menú disponibles para el usuario.
     Si el usuario es None, no se crea ningún menú.
     """
     if isinstance(usuario, int):
         usuario = pclases.Usuario.get(usuario)
     self.__usuario = usuario
     self._is_fullscreen = False
     import logging
     self.logger = logging.getLogger('GINN')
     hdlr = logging.FileHandler('ginn.log')
     formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
     hdlr.setFormatter(formatter)
     self.logger.addHandler(hdlr)
     # self.logger.setLevel(logging.INFO)
     self.wids = Widgets(glade)
     self.handlers_id = dict([(w, {}) for w in self.wids.keys()])
     for w in self.wids.keys():
         if isinstance(self.wids[w], gtk.Entry):
             h_id = self.wids[w].connect("activate", self.refocus_entry)
             try:
                 self.handlers_id[w]["activate"].append(h_id)
             except KeyError:
                 self.handlers_id[w]["activate"] = [h_id]
     try:
         self.wids['ventana'].set_border_width(5)
         # TODO:Cambiar por uno correspondiente al logo de la configuración. 
         logo_xpm = gtk.gdk.pixbuf_new_from_file('logo_w.xpm')
         self.wids['ventana'].set_icon(logo_xpm)
         self.wids['barra_estado'] = gtk.Statusbar()
         label_statusbar = self.wids['barra_estado'].get_children()[0].child
         font = pango.FontDescription("Monospace oblique 7")
         label_statusbar.modify_font(font)
         label_statusbar.modify_fg(gtk.STATE_NORMAL, 
             label_statusbar.get_colormap().alloc_color("darkgray"))
         contenido_anterior = self.wids['ventana'].get_child()
         self.wids['ventana'].remove(contenido_anterior)
         self.wids['contenedor_exterior'] = gtk.VBox()
         self.wids['ventana'].add(self.wids['contenedor_exterior'])
         self.wids['menu_superior'] = self.build_menu_superior()
         self.wids['contenedor_exterior'].pack_start(
             self.wids['menu_superior'], False)
         self.wids['contenedor_exterior'].add(contenido_anterior)
         self.wids['contenedor_exterior'].pack_end(
             self.wids['barra_estado'], False)
         self.wids['contenedor_exterior'].show()
         self.wids['barra_estado'].show()
         config = ConfigConexion()
         info_conexion = "%s://%s:xxxxxxxx@%s:%s/%s" % (config.get_tipobd(), 
                                                        config.get_user(), 
                                                        config.get_host(), 
                                                        config.get_puerto(), 
                                                        config.get_dbname())
         info_usuario = ""
         if hasattr(self, "usuario") and self.usuario != None:
             info_usuario = " usuario: %s." % (self.usuario.usuario)
         if self.__usuario != None:
             info_usuario = " __usuario: %s." % (self.__usuario.usuario)
         utils.escribir_barra_estado(self.wids['barra_estado'], 
             "Conectado a %s.%s" % (info_conexion, info_usuario))
     except Exception, msg:
         txt = "ventana.py::__init__ -> No se pudo establecer ancho de "\
               "borde, icono de ventana o barra de estado. "\
               "Excepción: %s." % (msg)
         self.logger.warning(txt)
Ejemplo n.º 3
0
def pruebas_periodicas():
    path_framework = os.path.join("..", "framework")
    if path_framework not in sys.path:
        sys.path.append(path_framework)
    from configuracion import ConfigConexion
    import tests

    tasks = [{"nombre": "Cantidades de caché son correctas.", 
              "func": tests.comprobar_caches, 
              "params": []}, 
             {"nombre": "Fibra consumida antes de fecha de fabricación.", 
              "func": tests.comprobar_fibra_consumida_antes_de_fecha_de_fabricacion, 
              "params": [True, ARTICULOS_A_IGNORAR]}, 
             {"nombre": "Artículos vendidos antes de su fecha de fabricación.", 
              "func": tests.comprobar_articulos_vendidos_antes_de_fecha_de_fabricacion, 
              "params": [True, ARTICULOS_A_IGNORAR]}, 
             {"nombre": "Fibra en partida de carga y albarán de salida a la vez.", 
              "func": tests.comprobar_fibra_en_partida_de_carga_y_albaran_de_salida_a_la_vez, 
              "params": [True, ARTICULOS_A_IGNORAR]}, 
             {"nombre": "Artículos con albarán de salida y en líneas de devolución con albarán de entrada de abono a la vez.", 
              "func": tests.comprobar_articulos_con_albaran_salida_y_albaran_abono, 
              "params": [True, ARTICULOS_A_IGNORAR]}, 
             {"nombre": "Objetos artículo sin bala, rollo, bigbag, balaCable o rolloDefectuoso; con más de uno, o apuntados por más de un registro artículo.", 
              "func": tests.comprobar_articulos_con_enlaces_incorrectos, 
              "params": []}, 
             {"nombre": "Cantidades en líneas de venta coinciden con artículos en albarán.", 
              "func": tests.comprobar_cantidades_albaran, 
              "params": []}, 
             {"nombre": "Partes de producción no solapados.", 
              "func": tests.comprobar_partes_solapados, 
              "params": [True, PARTES_A_IGNORAR]}, 
             {"nombre": "Partes de producción consecutivos sin huecos.", 
              "func": tests.comprobar_huecos_partes, 
              "params": [True, PARTES_A_IGNORAR]}, 
             {"nombre": 'Coherencia entre fecha y horas con "fechahoras" en partes de producción.', 
              "func": tests.comprobar_coherencia_fecha_y_fechahoras_partes, 
              "params": [True]}, 
             {"nombre": "Sumatorio de duración de incidencias no supera duración de su parte de producción.", 
              "func": tests.comprobar_duracion_incidencias, 
              "params": [True]}, 
             {"nombre": "Horas trabajadas de empleados no supera duración de su parte de producción.", 
              "func": tests.comprobar_horas_trabajadas_en_partes, 
              "params": []}, 
             {"nombre": "Empleados en un único parte de producción a la misma hora o bien horas trabajadas menor o igual que duración total de horas no simultáneas.", 
              "func": tests.comprobar_partes_simultaneos_empleados, 
              "params": []}, 
             {"nombre": "Partidas de geotextiles con un único producto fabricado.", 
              "func": tests.comprobar_partidas_con_mas_de_un_producto, 
              "params": []}, 
             {"nombre": "Partidas de carga con producción pero sin fibra relacionada, o con carga pero sin producción, sin estar entre las últimas.", 
              "func": tests.comprobar_partidas_de_carga_sin_fibra_o_sin_produccion, 
              "params": []}, 
             {"nombre": "Suma de consumos de fibra entre fechas coincide con consumos por día entre mismas fechas.", 
              "func": tests.comprobar_consumos_entre_fechas, 
              "params": []}, 
             {"nombre": "Fecha partida carga menor o igual que fecha de inicio de producción y mayor que fecha fabricación de sus balas.", 
              "func": tests.comprobar_fecha_partidas_carga, 
              "params": []}, 
             {"nombre": "Partes de fibra con consumos de granza inferiores a producción.", 
              "func": tests.comprobar_consumos_granza, 
              "params": [True, PARTES_A_IGNORAR]}, 
             {"nombre": 'Artículos con "fechahora" fuera de las "fechahoras" de su parte de producción.', 
              "func": tests.comprobar_fechahora_de_articulos, 
              "params": [True]}, 
             {"nombre": "Balas en albaranes internos sin partida de carga y balas en partidas de carga sin albaranes internos.", 
              "func": tests.comprobar_balas_en_albaranes_internos_sin_partidacarga, 
              "params": [False, mx.DateTime.DateTimeFrom(2007, 1, 1)]}, 
             {"nombre": "Códigos de balas [cable], rollos [defectuoso] y bigbags coinciden con número.", 
              "func": tests.comprobar_codificacion_articulos, 
              "params": [True]}, 
             {"nombre": "Numeración de balas [cable], rollos [defectuosos] y bigbags es consecutiva.", 
              "func": tests.comprobar_numeracion_articulos, 
              "params": [True, ARTICULOS_A_IGNORAR]}, 
             {"nombre": "Albaranes internos de consumo solo contienen balas o productos de compra.", 
              "func": tests.comprobar_albaranes_internos, 
              "params": [True, ALBARANES_A_IGNORAR]}, 
             {"nombre": "Todos los pedidos, albaranes y facturas de compra y venta tienen cliente/proveedor.", 
              "func": tests.comprobar_clientes_proveedores_en_pedidos_albaranes_facturas, 
              "params": [True, 
                         IGNORADOS_SIN_PROVEEDOR_O_CLIENTE]}, 
             {"nombre": "Producción estándar de partes coinciden con producción estándar de productos.", 
              "func": tests.comprobar_producciones_estandar, 
              "params": [True, PARTES_A_IGNORAR]}, 
             {"nombre": "Existencias en silos coincide con existencias de productos.", 
              "func": tests.comprobar_existencias_silos, 
              "params": [True]}, 
             {"nombre": "Códigos de productos de compra únicos.", 
              "func": tests.comprobar_codigos_unicos_en_productos_compra, 
              "params": [True]},
             {"nombre": "Mismo cliente en pedidos, albaranes y facturas relacionadas.", 
              "func": tests.comprobar_mismo_cliente_pedidos_albaranes_facturas, 
              "params": [True, 
                         PEDIDOS_ALBARANES_Y_FACTURAS_A_IGNORAR_MISMO_C_O_P]},
             {"nombre": "Todos los números de tickets, {pedidos, albaranes,} y facturas son consecutivos.", 
              "func": tests.comprobar_saltos_facturas_albaranes_pedidos_y_tickets, 
              "params": [True, True, False, False, True, TICKETS_A_IGNORAR]},  
             {"nombre": "Todos los objetos artículo y sus correspondientes\nrollos, balas, etc. están emparejados", 
              "func": tests.comprobar_pares_articulos, 
              "params": []},  
             {"nombre": "Albaranes de salida y entrada tienen almacén origen y destino respectivamente", 
              "func": tests.comprobar_almacenes_albaranes, 
              "params": []},  
             {"nombre": "Balas en partidas de carga no deben tener almacén asignado", 
              "func": tests.comprobar_almacen_partidas_carga, 
              "params": []} 
            ]
    chkwin = ChecklistWindow(tasks, "PRUEBAS PERIÓDICAS DE COHERENCIA DE DATOS")
    config = ConfigConexion()
    info_conexion = "%s://%s:xxxxxxxx@%s:%s/%s" % (config.get_tipobd(), 
                                                   config.get_user(), 
                                                   config.get_host(), 
                                                   config.get_puerto(), 
                                                   config.get_dbname())
    chkwin.set_texto_estado("Conectado a %s." % (info_conexion))
    chkwin.main()
Ejemplo n.º 4
0
    if os.path.realpath(os.path.curdir).split(os.path.sep)[-1] == "utils":
        sys.path.append("..")
    root, dirs, files = os.walk(".").next()
    if "utils" in dirs:
        sys.path.insert(0, ".")


config = ConfigConexion()

# HACK: No reconoce el puerto en el URI y lo toma como parte del host. Lo 
# añado detrás y colará en el dsn cuando lo parsee. 
conn = '%s://%s:%s@%s/%s port=%s' % (config.get_tipobd(), 
                                     config.get_user(), 
                                     config.get_pass(), 
                                     config.get_host(), 
                                     config.get_dbname(), 
                                     config.get_puerto()) 

sqlhub.processConnection = connectionForURI(conn)

# HACK:
# Hago todas las consultas case-insensitive machacando la función de 
# sqlbuilder:
_CONTAINSSTRING = sqlbuilder.CONTAINSSTRING
def CONTAINSSTRING(expr, pattern):
    try:
        nombre_clase = SQLObject.sqlmeta.style.dbTableToPythonClass(
                        expr.tableName)
        clase = globals()[nombre_clase]
        columna = clase.sqlmeta.columns[expr.fieldName]
    except (AttributeError, KeyError):