Exemplo n.º 1
0
 def acerca_de(self):
     """
     Calcado de menu.py. Modificado ligeramente para hacerlo funcionar aquí.
     """
     vacerca = gtk.AboutDialog()
     vacerca.set_name('Geotex-INN')
     from menu import __version__
     vacerca.set_version(__version__)
     vacerca.set_name('BB-INN')
     vacerca.set_version(__version__)
     vacerca.set_comments('Software de gestión para BitBlue')
     vacerca.set_authors(['Francisco José Rodríguez Bogado '
                          '<*****@*****.**>'])
     config = ConfigConexion()
     logo = gtk.gdk.pixbuf_new_from_file(
         os.path.join('..', 'imagenes', config.get_logo()))
     logo = escalar_a(300, 200, logo)
     vacerca.set_logo(logo)
     vacerca.set_license(open(os.path.join('..', 'gpl.txt')).read())
     vacerca.set_website('https://github.com/pacoqueen/bbinn')
     vacerca.set_artists(['Iconos gartoon por Kuswanto (a.k.a. Zeus) '
                          '<*****@*****.**>'])
     vacerca.set_copyright('Copyright 2005-2012  Francisco José Rodríguez'
                           ' Bogado, Diego Muñoz Escalante.')
     vacerca.run()
     vacerca.destroy()
Exemplo n.º 2
0
 def acerca_de(self):
     gtk.about_dialog_set_email_hook(self.launch_browser_mailer, 'email')
     gtk.about_dialog_set_url_hook(self.launch_browser_mailer, 'web')
     vacerca = gtk.AboutDialog()
     vacerca.set_name('Universal Pilates')
     vacerca.set_version(__version__)
     vacerca.set_comments('Software para Universal Pilates Vitality Studio')
     vacerca.set_authors(
         ['Francisco José Rodríguez Bogado <*****@*****.**>', 
          'Algunas partes del código por: Diego Muñoz Escalante <*****@*****.**>'])
     config = ConfigConexion()
     logo = gtk.gdk.pixbuf_new_from_file(
         os.path.join('..', 'imagenes', config.get_logo()))
     vacerca.set_logo(logo)
     vacerca.set_license(open(os.path.join('..', 'gpl.txt')).read())
     vacerca.set_website('http://informatica.novaweb.es')
     vacerca.set_artists(['Iconos gartoon por Kuswanto (a.k.a. Zeus) <*****@*****.**>'])
     vacerca.set_copyright('Copyright 2009-2010  Francisco José Rodríguez Bogado.')
     vacerca.run()
     vacerca.destroy()
Exemplo n.º 3
0
    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(
            'Universal Pilates Vitality Studio - Menú principal')
        self.ventana.set_icon(gtk.gdk.pixbuf_new_from_file('logo.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('..', '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>        
        """ % (config.get_title(), __version__))
        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"))
        self.cabecera.pack_start(event_box)
        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)
Exemplo n.º 4
0
 def acerca_de(self):
     gtk.about_dialog_set_email_hook(self.launch_browser_mailer, 'email')
     gtk.about_dialog_set_url_hook(self.launch_browser_mailer, 'web')
     vacerca = gtk.AboutDialog()
     vacerca.set_name('BB-INN')
     vacerca.set_version(__version__)
     vacerca.set_comments('Software de gestión para BitBlue')
     vacerca.set_authors(['Francisco José Rodríguez Bogado '
                          '<*****@*****.**>'])
     config = ConfigConexion()
     logo = gtk.gdk.pixbuf_new_from_file(
         os.path.join('..', 'imagenes', config.get_logo()))
     logo = escalar_a(300, 200, logo)
     vacerca.set_logo(logo)
     vacerca.set_license(open(os.path.join('..', 'gpl.txt')).read())
     vacerca.set_website('https://github.com/pacoqueen/bbinn')
     vacerca.set_artists(['Iconos gartoon por Kuswanto (a.k.a. Zeus) '
                          '<*****@*****.**>'])
     vacerca.set_copyright('Copyright 2005-2012  Francisco José Rodríguez'
                           ' Bogado, Diego Muñoz Escalante.')
     vacerca.run()
     vacerca.destroy()
Exemplo n.º 5
0
    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)
        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()
Exemplo n.º 6
0
        import notificacion
    except:
        sys.path.append('.')
        import notificacion
  
import threading#, psycopg
from select import select

from configuracion import ConfigConexion

#import mx, mx.DateTime
import datetime

# 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)
Exemplo n.º 7
0
def main():
    # Si hay ficheros de estilo gtk, los cargo por orden: General de la 
    # aplicación y específico del usuario en WIN y UNIX. Se machacan opciones 
    # de por ese orden.
    GTKRC = "gtkrc"
    gtk.rc_parse(os.path.join("..", GTKRC))
    if "HOME" in os.environ:
        gtk.rc_parse(os.path.join(os.environ["HOME"], GTKRC))
    if "HOMEPATH" in os.environ:
        gtk.rc_parse(os.path.join(os.environ["HOMEPATH"], GTKRC))
    # Ver http://www.pygtk.org/docs/pygtk/class-gtkrcstyle.html para la 
    # referencia de estilos. Ejemplo: 
    # bogado@cpus006:~/Geotexan/geotexinn02/formularios$ cat ../gtkrc 
    # style 'blanco_y_negro' { bg[NORMAL] = '#FFFFFF'
    #                          fg[NORMAL] = '#000000' 
    #                          base[NORMAL] = '#FFFFFF' 
    #                          text[NORMAL] = '#000000' 
    #                        }
    # class '*' style 'blanco_y_negro'
    ##
    fconfig = None
    user = None
    passwd = None
    if len(sys.argv) > 1:
        from optparse import OptionParser
        usage = "uso: %prog [opciones] usuario contraseña"
        parser = OptionParser(usage = usage)
        parser.add_option("-c", "--config", 
                          dest = "fichconfig", 
                          help = "Usa una configuración alternativa "
                                 "almacenada en FICHERO", 
                          metavar="FICHERO")
        (options, args) = parser.parse_args()
        fconfig = options.fichconfig
        if len(args) >= 1:
            user = args[0]
        if len(args) >= 2:
            passwd = args[1]
        # HACK
        if fconfig:
            config = ConfigConexion()
            config.set_file(fconfig)
        # Lo hago así porque en todos sitios se llama al constructor sin 
        # parámetros, y quiero instanciar al singleton por primera vez aquí. 
        # Después pongo la configuración correcta en el archivo y en sucesivas 
        # llamadas al constructor va a devolver el objeto que acabo de crear y 
        # con la configuración que le acabo de asignar. En caso de no recibir 
        # fichero de configuración, la siguiente llamada al constructor será 
        # la que cree el objeto y establezca la configuración del programa. 
        # OJO: Dos llamadas al constructor con parámetros diferentes crean 
        # objetos diferentes.
    #salida = MetaF()
    #sys.stdout = salida
    errores = MetaF()
    sys.stderr = errores

    m = Menu(user, passwd)
    m.mostrar()

    if not errores.vacio():
        print "Se han detectado algunos errores en segundo plano durante "\
              "la ejecución."
        enviar_correo('Errores en segundo plano. La stderr contiene:\n%s' 
                        % (errores), 
                      m.get_usuario())
Exemplo n.º 8
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()
Exemplo n.º 9
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)
Exemplo n.º 10
0
from sqlobject import * 
import threading, datetime
from select import select
from configuracion import ConfigConexion
import notificacion
try:
    import utils
except ImportError:
    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: