def __init__(self, objeto = None, usuario = None): config = ConfigConexion() self.CONFIG = {'host': config.get_host(), 'port': 22222, # Parámetros XMLRPC 'user': '******', 'password': '******', 'dir_destino': '/tmp'} #Parámetros SCP # self.CONFIG = {'host': '192.168.1.100', 'port': 22222, # Parámetros XMLRPC # 'user': '******', 'password': '******', 'dir_destino': '/tmp'} #Parámetros SCP ############################################################################################################## ##### You, lamer. This is for you. Read carefully: ##### ##### Don't try to crack this login. See? 192.168.1.100 It's a LAN! Behind a firewall and ##### ##### without extern connections. Don't waste your time. Neither my bandwidth. IT ISN'T MY HOME MACHINE! ##### ############################################################################################################## self.seguir = True Ventana.__init__(self, 'importar_logic.glade', objeto, usuario = usuario) connections = {'b_salir/clicked': self.salir, 'b_abrir/clicked': self.abrir, 'b_abrir_cuentas/clicked': self.abrir_cuentas, 'ch_mismo/toggled': self.usar_mismo, 'b_procesar/clicked': self.procesar} self.add_connections(connections) gtk.main()
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] config = ConfigConexion() 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() 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)
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') # El fichero de log lo voy a plantar en el raíz del proyecto. rutalogger = os.path.join(os.path.dirname(__file__), "..", 'ginn.log') hdlr = logging.FileHandler(rutalogger) formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) self.logger.addHandler(hdlr) # self.logger.setLevel(logging.INFO) try: self.wids = Widgets(glade) # Puede que venga la ruta ya y no # haga falta combinar con os.path.join. except RuntimeError: try: self.wids = Widgets(os.path.join("formularios","glades",glade)) except RuntimeError: try: self.wids = Widgets(os.path.join("glades", glade)) except RuntimeError: try: self.wids = Widgets(os.path.join( "..", "formularios", "glades", glade)) except RuntimeError: if pclases.DEBUG and pclases.VERBOSE: print "ventana.py::Ventana.__init__ -> "\ "No encuentro el glade. Estoy en %s. "\ "Intento cargar de nuevo desde donde "\ "se supone que debería estar." % ( os.path.abspath(os.path.curdir)) self.wids = Widgets(glade) self.refocus_enter() try: self.wids['ventana'].set_border_width(5) # TODO:Cambiar por uno correspondiente al logo de la configuración. ruta_logo = os.path.join("imagenes", 'logo.xpm') logo_xpm = gtk.gdk.pixbuf_new_from_file(ruta_logo) 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) ui.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)
def construir_ventana(self): self.statusbar = gtk.Statusbar() self.ventana = gtk.Window() self.ventana.set_position(gtk.WIN_POS_CENTER) self.ventana.resize(800, 600) self.ventana.set_title('Menú GINN') self.ventana.set_icon(gtk.gdk.pixbuf_new_from_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "imagenes", 'logo_w.xpm'))) self.ventana.set_border_width(10) self.ventana.connect("delete_event", self.salir, True, self.ventana) self.caja = gtk.VBox() self.caja.set_spacing(5) self.ventana.add(self.caja) self.cabecera = gtk.HBox() imagen = gtk.Image() config = ConfigConexion() pixbuf_logo = gtk.gdk.pixbuf_new_from_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'imagenes', config.get_logo())) pixbuf_logo = escalar_a(300, 200, pixbuf_logo) imagen.set_from_pixbuf(pixbuf_logo) self.cabecera.pack_start(imagen, fill=True, expand=False) texto = gtk.Label(""" <big><big><big><b>%s</b></big> <u>Menú de acceso a módulos de la aplicación</u></big> <i>v.%s</i></big> <small><b>%s</b> en <b>%s</b></small> """ % (config.get_title(), __version__, config.get_dbname(), config.get_host())) texto.set_justify(gtk.JUSTIFY_CENTER) texto.set_use_markup(True) event_box = gtk.EventBox() # Porque el gtk.Label no permite cambiar el background. event_box.add(texto) event_box.modify_bg(gtk.STATE_NORMAL, event_box.get_colormap().alloc_color("white")) half_header = gtk.VBox() half_header.add(event_box) txtchangelog = read_changelog() if txtchangelog: marquee_changelog = custom_widgets.MarqueeLabel( txtchangelog, init_long = 61) little_label = gtk.Label( "<small><i>Últimas actualizaciones:</i></small>") little_label.set_use_markup(True) little_label.set_property("xalign", 0.1) half_header.add(little_label) marquee_changelog_event = gtk.EventBox() marquee_changelog_event.add(marquee_changelog) half_header.add(marquee_changelog_event) def reset(*args, **kw): marquee_changelog.rewind() marquee_changelog_event.connect("button-press-event", reset) self.cabecera.pack_start(half_header) self.caja.pack_start(self.cabecera, fill=True, expand=False) self.current_frame = None cuerpo_central = self.create_menu() self.caja.pack_start(cuerpo_central) self.caja.pack_start(self.statusbar, False, True)
def pruebas_periodicas(): from framework.configuracion import ConfigConexion from framework import tests_coherencia as 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()