def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ global fin Ventana.__init__(self, 'consulta_lotes_por_producto.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin, "b_exportar/clicked": self.exportar} self.add_connections(connections) cols = (('Num. Lote','gobject.TYPE_INT64',False,True,False,None), ('Código','gobject.TYPE_STRING',False,True,False,None), ('Tenacidad','gobject.TYPE_STRING',False,True,False,None), ('Elongación','gobject.TYPE_STRING',False,True,False,None), ('Rizo','gobject.TYPE_STRING',False,True,False,None), ('Encogimiento','gobject.TYPE_STRING',False,True,False,None), ('Grasa','gobject.TYPE_STRING',False,True,False,None), ('Idlote','gobject.TYPE_INT64',False,False,False,None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.wids['tv_datos'].connect("row-activated", self.abrir_parte_tv) utils.rellenar_lista(self.wids['cmbe_producto'], [(p.id, p.nombre) for p in pclases.ProductoVenta.select(pclases.ProductoVenta.q.camposEspecificosBalaID != None, orderBy = 'nombre')]) temp = time.localtime() self.fin = mx.DateTime.localtime() self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) gtk.main()
def crear_listview(self, tv): # Primero hay que crear el TreeView que mostrará # el contenido de cada solapa. cols = (('Resultado', 'gobject.TYPE_FLOAT', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols) return tv
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ global fin Ventana.__init__(self, 'consulta_albaranesFacturados.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin, "b_exportar/clicked": self.exportar} self.add_connections(connections) cols = (('Fecha','gobject.TYPE_STRING', False, True, False, None), ('Nº Albarán','gobject.TYPE_STRING', False, True, True, None), ('Cliente','gobject.TYPE_STRING', False, True, False, None), ('Num. Factura','gobject.TYPE_STRING', False, True, False,None), ('Idalbaran','gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.wids['tv_datos'].connect("row-activated", self.abrir_albaran) temp = time.localtime() self.fin = str(temp[0])+'/'+str(temp[1])+'/'+str(temp[2]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) self.wids['rb_salida'].set_active(True) gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario global fin Ventana.__init__(self, 'consulta_pedidos_clientes.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin, 'b_exportar/clicked': self.exportar} self.add_connections(connections) utils.rellenar_lista(self.wids['cmbe_cliente'], [(c.id, c.nombre) for c in pclases.Cliente.select(orderBy='nombre')]) cols = (('Código', 'gobject.TYPE_STRING', False, True, False, None), ('Descripción', 'gobject.TYPE_STRING', False,True,False,None), ('Precio s/IVA', 'gobject.TYPE_STRING', False,True,False,None), ('ID', 'gobject.TYPE_STRING', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) col = self.wids['tv_datos'].get_column(2) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) self.wids['tv_datos'].connect("row-activated", self.abrir_producto) temp = time.localtime() self.fin = str(temp[0])+'/'+str(temp[1])+'/'+str(temp[2]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) if objeto != None: utils.combo_set_from_db(self.wids["cmbe_cliente"], objeto.id) self.wids["b_buscar"].clicked() self.wids['hbox4'].set_property("visible", False) self.wids['ventana'].set_title("Productos facturados al cliente") gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario Ventana.__init__(self, 'lineas_sin_pedido.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_agregar/clicked': self.crear_nuevo_pedido, 'b_borrar/clicked': self.eliminar_linea_sin_pedido, 'b_modificar/clicked': self.agregar_a_pedido} self.add_connections(connections) cols = [('Nombre','gobject.TYPE_STRING',False,True,False,None), ('Descripción','gobject.TYPE_STRING',False,True,False,None), ('Cantidad','gobject.TYPE_DOUBLE',False,True,False,None), ('Fecha Hora','gobject.TYPE_STRING',False,True,False,None), ('Albarán', 'gobject.TYPE_STRING', False, True, False, None), ('Factura', 'gobject.TYPE_STRING', False, True, False, None), ('Idlinea_sin_pedido','gobject.TYPE_INT64',False,False,False,None)] if pclases.Ticket.select().count(): cols.insert(-2, ('Ticket', 'gobject.TYPE_STRING', False, True, False, None)) utils.preparar_listview(self.wids['tv_tipos'], cols) self.rellenar_tabla() gtk.main()
def inicializar_ventana(self): """ Inicializa los controles de la ventana, estableciendo sus valores por defecto, deshabilitando los innecesarios, rellenando los combos, formateando el TreeView -si lo hay-... """ cols = (('Concepto', 'gobject.TYPE_STRING', False, False, False, None), ("Valor en euros", "gobject.TYPE_STRING", False, False, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) # La última columna (oculta en la Vista) siempre es el id. utils.preparar_listview(self.wids['tv_datos'], cols) cols = [("Código", "gobject.TYPE_STRING", False, True, True, None), ("Descripción", "gobject.TYPE_STRING", False, True, False, None), ("Existencias", "gobject.TYPE_STRING", False, True, False, None), ("Precio valoración", "gobject.TYPE_STRING", False, True, False, None), ("Total", "gobject.TYPE_STRING", False, True, True, None), ("ID", "gobject.TYPE_INT", False, False, False, None)] utils.preparar_listview(self.wids['tv_detalle'], cols) tv = self.wids['tv_detalle'] for col in tv.get_columns()[2:5]: for cell in col.get_cell_renderers(): cell.set_property("xalign", 1.0) col.set_alignment(0.5)
def inicializar_tv_geotextil(self): cols = (('Fecha', 'gobject.TYPE_STRING', False, True, False, None), ('Código', 'gobject.TYPE_STRING', False, True, True, None), ('Observaciones', 'gobject.TYPE_STRING', False, True, False, None), ('Partida', 'gobject.TYPE_STRING', False, True, False, None), ('Pendiente', 'gobject.TYPE_BOOLEAN', True, True, False, self.cambiar_pendiente_g), ('Longitudinal', 'gobject.TYPE_FLOAT', False, True, False, None), ('Transversal', 'gobject.TYPE_FLOAT', False, True, False, None), ('CBR', 'gobject.TYPE_FLOAT', False, True, False, None), ('Perforación', 'gobject.TYPE_FLOAT', False, True, False, None), ('Permeabilidad', 'gobject.TYPE_FLOAT', False, True, False, None), ('Punzonado piramidal', 'gobject.TYPE_FLOAT', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, True, False, None) ) utils.preparar_listview(self.wids['tv_geotextil'], cols) self.wids['tv_geotextil'].connect("row-activated", self.abrir_resultados_geo) self.colorear_geotextil(self.wids['tv_geotextil'])
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ global fin Ventana.__init__(self, 'consulta_entradas_almacen.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_producto/clicked': self.buscar_producto, 'b_fecha_fin/clicked': self.set_fin} self.add_connections(connections) utils.rellenar_lista(self.wids['cmbe_proveedor'], [(c.id, c.nombre) for c in pclases.Proveedor.select(orderBy='nombre')]) cols = (('Proveedor', 'gobject.TYPE_STRING', False, True, False, None), ('Albarán', 'gobject.TYPE_STRING', False, True, True, None), ('Fecha', 'gobject.TYPE_STRING', False, True, False, None), ('Producto', 'gobject.TYPE_STRING', False, True, True, None), ('Cantidad', 'gobject.TYPE_FLOAT', False, True, False, None), ('Precio', 'gobject.TYPE_FLOAT', False, True, False, None), ('Subtotal', 'gobject.TYPE_FLOAT', False, True, False, None), ('idldc','gobject.TYPE_STRING',False,False,False,None)) utils.preparar_listview(self.wids['tv_datos'], cols) for ncol in (4, 5, 6): col = self.wids['tv_datos'].get_column(ncol) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) temp = time.localtime() self.fin = datetime.date(day = temp[2], month = temp[1], year = temp[0]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) self.producto = None gtk.main()
def crear_listviewes(self): tv = self.wids['tv_pruebas'] #cols = (('Fecha análisis', 'gobject.TYPE_STRING', True, True, True, self.cambiar_fecha), # ('MFI proveedor', 'gobject.TYPE_STRING', True, True, False, self.cambiar_mfi), # ('Lote', 'gobject.TYPE_STRING', True, True, False, self.cambiar_lote), # ('Silo', 'gobject.TYPE_STRING', True, True, False, self.cambiar_silo), # ('MFI laboratorio 1', 'gobject.TYPE_STRING', True, True, False, self.cambiar_resultado), # ('MFI laboratorio 2', 'gobject.TYPE_STRING', True, True, False, self.cambiar_resultado), # ('Media MFI laboratorio', 'gobject.TYPE_STRING', True, True, False, self.cambiar_resultado), # ('ID1:ID2', 'gobject.TYPE_STRING', False, False, False, None)) cols = (('Fecha análisis', 'gobject.TYPE_STRING', False, True, True, None), ('MFI proveedor', 'gobject.TYPE_STRING', False, True, False, None), ('Lote', 'gobject.TYPE_STRING', False, True, False, None), ('Silo', 'gobject.TYPE_STRING', False, True, False, None), ('MFI laboratorio 1', 'gobject.TYPE_STRING', False, True, False, None), ('MFI laboratorio 2', 'gobject.TYPE_STRING', False, True, False, None), ('Media MFI lab.', 'gobject.TYPE_STRING', False, True, False, None), ('ID1:ID2', 'gobject.TYPE_STRING', False, False, False, None)) utils.preparar_listview(tv, cols) tv.get_column(1).get_cell_renderers()[0].set_property('xalign', 1) tv.get_column(2).get_cell_renderers()[0].set_property('xalign', 0.5) tv.get_column(3).get_cell_renderers()[0].set_property('xalign', 0.5) tv.get_column(4).get_cell_renderers()[0].set_property('xalign', 0.9) tv.get_column(5).get_cell_renderers()[0].set_property('xalign', 0.9) tv.get_column(6).get_cell_renderers()[0].set_property('xalign', 0.9) self.colorear(tv) tv = self.wids['tv_media'] cols = (('Lote', 'gobject.TYPE_STRING', False, True, True, None), ('Fluidez media', 'gobject.TYPE_FLOAT', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols) tv.get_column(1).get_cell_renderers()[0].set_property('xalign', 0.1)
def preparar_tab_modulos(self): cols = (('Módulo/Ventanas', 'gobject.TYPE_STRING', True, True, True, self.cambiar_nombre_modulo), ('Descripción', 'gobject.TYPE_STRING', True, True, False, self.cambiar_descripcion_modulo), ('Icono', 'gobject.TYPE_STRING', True, True, False, self.cambiar_icono_modulo), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_treeview(self.wids['tv_modulos'], cols) model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gtk.gdk.Pixbuf, gobject.TYPE_INT64) self.wids['tv_modulos'].set_model(model) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn('', cell, pixbuf = 3) self.wids['tv_modulos'].insert_column(column, 3) cols = (('Descripción', 'gobject.TYPE_STRING', True, True, True, self.cambiar_descripcion_ventana), ('Fichero', 'gobject.TYPE_STRING', True, True, False, self.cambiar_fichero_ventana), ('Clase', 'gobject.TYPE_STRING', True, True, False, self.cambiar_clase_ventana), ('Icono', 'gobject.TYPE_STRING', True, True, False, self.cambiar_icono_ventana), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_ventanas'], cols) model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gtk.gdk.Pixbuf, gobject.TYPE_INT64) self.wids['tv_ventanas'].set_model(model) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn('', cell, pixbuf = 4) self.wids['tv_ventanas'].insert_column(column, 4)
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ global fin Ventana.__init__(self, 'consulta_incidencias.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin, "b_exportar/clicked": self.exportar} self.add_connections(connections) cols = (('Tipo','gobject.TYPE_STRING',False,True,False,None), ('Inicio','gobject.TYPE_STRING',False,True,False,None), ('Fin','gobject.TYPE_STRING',False,True,False,None), ('Fecha parte','gobject.TYPE_STRING',False,True,False,None), ('Turno parte','gobject.TYPE_STRING',False,True,False,None), ('Observaciones','gobject.TYPE_STRING',False,True,False,None), ('Idincidencia','gobject.TYPE_INT64',False,False,False,None)) utils.preparar_listview(self.wids['tv_datos'], cols) cols = (('Tipo', 'gobject.TYPE_STRING', False, True, True, None), ('Tiempo', 'gobject.TYPE_STRING', False, True, False, None), ('NADA', 'gobject.TYPE_STRING', False, False, False, None)) utils.preparar_listview(self.wids['tv_resumen'], cols) temp = time.localtime() self.fin = str(temp[0])+'/'+str(temp[1])+'/'+str(temp[2]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) import custom_widgets self.wids['velocimetro'] = custom_widgets.Velocimetro(0.0, 100.0, 0.0) self.wids['hbox8'].pack_end(self.wids['velocimetro'], False, False, 5) self.wids['velocimetro'].show_all() gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario Ventana.__init__(self, 'contadores.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_agregar/clicked': self.crear_nuevo_contador, 'b_borrar/clicked': self.eliminar_contador, 'b_modificar/clicked': self.modificar_contador, 'b_actualizar_contador/clicked': self.cambiar_contador} self.add_connections(connections) cols = (('Prefijo', 'gobject.TYPE_STRING', False, True, False, None), ('Valor actual', 'gobject.TYPE_STRING', True, True, False, self.cambiar_valor_contador), ('Sufijo', 'gobject.TYPE_STRING', False, True, False, None), ('Siguiente factura', 'gobject.TYPE_STRING', False, True, False, None), ('Última creada', 'gobject.TYPE_STRING', False, True, False, None), ('Fecha última factura', 'gobject.TYPE_STRING', False, True, False, None), ('Facturas de la serie', 'gobject.TYPE_INT64', False, True, False, None), ('Clientes asignados', 'gobject.TYPE_INT64', False, True, False, None), ('Idcontador', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_tipos'], cols) self.rellenar_widgets() gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ Ventana.__init__(self, 'busca_lote.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_ayuda/clicked': self.ayuda} self.add_connections(connections) cols = (('Num. Lote','gobject.TYPE_INT64',False,True,False,None), ('Código','gobject.TYPE_STRING',False,True,False,None), ('Tenacidad','gobject.TYPE_STRING',False,True,False,None), ('Elongación','gobject.TYPE_STRING',False,True,False,None), ('Rizo','gobject.TYPE_STRING',False,True,False,None), ('Encogimiento','gobject.TYPE_STRING',False,True,False,None), ('Idlote','gobject.TYPE_INT64',False,False,False,None)) utils.preparar_listview(self.wids['tv_resultado'], cols) utils.rellenar_lista(self.wids['cmbe_producto'], [(p.id, p.nombre) for p in pclases.ProductoVenta.select(pclases.ProductoVenta.q.camposEspecificosBalaID != None, orderBy = 'nombre')]) self.rellenar_tabla() # Valores por defecto: self.wids['e_tenacidad'].set_text('A') self.wids['e_elongacion'].set_text('A') self.wids['e_rizo'].set_text('6-7') self.wids['e_encogimiento'].set_text('A') self.wids['chk_tenacidad'].set_active(True) self.wids['chk_elongacion'].set_active(True) self.wids['chk_rizo'].set_active(True) self.wids['chk_encogimiento'].set_active(True) self.wids['chk_producto'].set_active(True) gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario global fin Ventana.__init__(self, 'listado_productos.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_limpiar/clicked': self.limpiar_tv, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_exportar/clicked': self.exportar} self.add_connections(connections) cols = (('Código', 'gobject.TYPE_STRING', False, True, False, None), ('Descripción', 'gobject.TYPE_STRING', False,True,False,None), ('PVP', 'gobject.TYPE_STRING', False,True,False,None), ('ID', 'gobject.TYPE_STRING', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) col = self.wids['tv_datos'].get_column(2) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) self.wids['tv_datos'].connect("row-activated", self.abrir_producto) self.wids['e_buscar'].grab_focus() gtk.main()
def __init__(self, pclase, tv, objeto_clave_ajena = None, cols_a_ignorar = [], nombres_col = [], seleccion_multiple = False, orden = None): """ Si se recibe un "objeto_clave_ajena" filtrará los datos mostrados en el treeview a los relacionados con él. Sin embargo si se recibiera un filtro en rellenar_tabla, éste prevalecerá sobre el del constructor. Las columnas cuyos nombres estén en cols_a_ignorar no se mostrarán. Si se recibe algo en «orden», las columnas se montarán en ese orden. Debe ser una lista o una tupla de los nombres de las columnas en estilo CamelCase. Si alguna está en la lista de ignorar, se ingorará aunque esté incluida en el orden. Si alguna columna no está en la lista de orden, se añadirá al final. """ self.clase = pclase self.tv = tv self.funciones = {} self.cols_a_ignorar = cols_a_ignorar self.__columnas = self.clase._SO_columns cols = self.crear_cols(nombres_col, orden) utils.preparar_listview(self.tv, cols, multi = seleccion_multiple) if objeto_clave_ajena: nombrefk = (objeto_clave_ajena.__class__.__name__[0].lower() + objeto_clave_ajena.__class__.__name__[1:] + "ID") ajeno_id = objeto_clave_ajena.id self.filtro = lambda o: getattr(o, nombrefk) == ajeno_id else: self.filtro = lambda o: True
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ global fin Ventana.__init__(self, 'consulta_albaranes_clientes.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin, 'b_exportar/clicked': self.exportar} self.add_connections(connections) utils.rellenar_lista(self.wids['cmbe_cliente'], [(c.id, c.nombre) for c in pclases.Cliente.select(orderBy='nombre')]) cols = (('Cliente','gobject.TYPE_STRING',False,True,False,None), ('Fecha','gobject.TYPE_STRING',False,True,False,None), ('Albarán','gobject.TYPE_STRING',False,True,False,None), ('Destinatario','gobject.TYPE_STRING',False,True,False,None), ('Facturado', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('Facturas', 'gobject.TYPE_STRING', False, True, False, None), ('Idalbaran','gobject.TYPE_INT64',False,False,False,None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.wids['tv_datos'].connect("row-activated", self.abrir_albaran) temp = time.localtime() self.fin = str(temp[0])+'/'+str(temp[1])+'/'+str(temp[2]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) gtk.main()
def __init__(self, objeto = None, usuario = None): self.usuario = usuario Ventana.__init__(self, 'partes_no_bloqueados.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_editar/clicked': self.abrir_parte, 'b_actualizar/clicked': self.actualizar} self.add_connections(connections) cols = (('Producto', 'gobject.TYPE_STRING', False, True, True, None), ('Fecha','gobject.TYPE_STRING', False, True, False, None), ('Inicio turno','gobject.TYPE_STRING', False, True, False, None), ('Fin turno','gobject.TYPE_STRING', False, True, False, None), ('Visto','gobject.TYPE_BOOLEAN', True, True, False, self.bloquear), ('Lote/Partida', 'gobject.TYPE_STRING', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_partes'], cols) self.wids['tv_partes'].connect("row-activated", self.abrir_parte_tv) self.wids['tv_partes'].connect("cursor-changed", self.mostrar_info_parte) self.colorear(self.wids['tv_partes']) try: ventanas_con_permiso = [p.ventana.fichero for p in usuario.permisos if p.permiso] # and p.escritura] # STILL UNIMPLEMENTED except AttributeError: print "De momento esta ventana sólo se puede abrir desde el menú." sys.exit(1) for w in ("rb_bolsas", "rb_balas", "rb_rollos", "rb_todos"): self.wids[w].set_sensitive(False) tiene_al_menos_un_permiso = False if ('partes_de_fabricacion_balas.py' in ventanas_con_permiso and 'partes_de_fabricacion_rollos.py' in ventanas_con_permiso and 'partes_de_fabricacion_bolsas.py' in ventanas_con_permiso): self.wids['rb_todos'].set_active(True) for w in ("rb_bolsas", "rb_balas", "rb_rollos", "rb_todos"): self.wids[w].set_sensitive(True) tiene_al_menos_un_permiso = True else: if 'partes_de_fabricacion_balas.py' in ventanas_con_permiso: self.wids['rb_balas'].set_sensitive(True) self.wids['rb_balas'].set_active(True) tiene_al_menos_un_permiso = True if 'partes_de_fabricacion_rollos.py' in ventanas_con_permiso: self.wids['rb_rollos'].set_sensitive(True) self.wids['rb_rollos'].set_active(True) tiene_al_menos_un_permiso = True if 'partes_de_fabricacion_bolsas.py' in ventanas_con_permiso: self.wids['rb_bolsas'].set_sensitive(True) self.wids['rb_bolsas'].set_active(True) tiene_al_menos_un_permiso = True if tiene_al_menos_un_permiso: self.rellenar_partes() gtk.main() else: utils.dialogo_info(titulo = "USUARIO SIN PERMISOS", texto = "No tiene permisos suficientes para bloquear partes.", padre = self.wids['ventana'])
def crear_listview(self, tv): cols = ( ("Fecha", "gobject.TYPE_STRING", True, True, True, self.cambiar_fecha), ("Resultado", "gobject.TYPE_FLOAT", True, True, False, self.cambiar_resultado), ("ID", "gobject.TYPE_INT64", False, False, False, None), ) utils.preparar_listview(tv, cols) tv.get_column(1).get_cell_renderers()[0].set_property("xalign", 0.1)
def crear_listview_calendario(self, tv): cols = (('Nombre', 'gobject.TYPE_STRING', False, True, False, None), ('Apellidos', 'gobject.TYPE_STRING', False, True, True, None), ('Grupo', 'gobject.TYPE_STRING', False, True, False, None), ('Cat. laboral', 'gobject.TYPE_STRING', False, True, False, None), ('Centro de trabajo', 'gobject.TYPE_STRING', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols) tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE) tv.connect('row-activated', self.abrir_calendario)
def crear_treeview_muestras(self, tv): cols = (('Código', 'gobject.TYPE_STRING', False, True, True, None), ('Observaciones', 'gobject.TYPE_STRING', False, True, False, None), ('Pendiente', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('Envío', 'gobject.TYPE_STRING', False, True, False, None), ('Recepción', 'gobject.TYPE_STRING', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols)
def crear_listview(self, tv): cols = (('Nombre', 'gobject.TYPE_STRING', False, True, False, None), ('Apellidos', 'gobject.TYPE_STRING', False, True, True, None), ('H. entrada', 'gobject.TYPE_STRING', True, True, False, self.cambiar_horainicio), ('H. salida', 'gobject.TYPE_STRING', True, True, False, self.cambiar_horafin), ('Duración', 'gobject.TYPE_STRING', True, True, False, self.cambiar_horas), ('Trabajo realizado', 'gobject.TYPE_STRING', True, True, False, self.cambiar_trabajo), ('Centro de trabajo', 'gobject.TYPE_STRING', False, True, False, None), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols) self.cambiar_por_combo(tv, 6)
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario global fin Ventana.__init__(self, 'consulta_pendientes_vto_bueno.glade', objeto, usuario = self.usuario) connections = {'b_salir/clicked': self.salir, 'b_pendientes/clicked': self.buscar, 'b_todas/clicked': self.buscar, 'b_fecha_inicio/clicked': self.set_inicio, 'b_fecha_fin/clicked': self.set_fin} self.add_connections(connections) utils.rellenar_lista(self.wids['cmbe_proveedor'], [(c.id, c.nombre) for c in pclases.Proveedor.select(orderBy='nombre')]) cols = (('Factura', 'gobject.TYPE_STRING', False, True, True, None), ('Código vto. bueno', 'gobject.TYPE_STRING', False, True, False, None), ('Proveedor', 'gobject.TYPE_STRING', False, True, False, None), ('Importe', 'gobject.TYPE_STRING', False, False, False, None), ('Fecha fra.', 'gobject.TYPE_STRING', False, True, False, None), ('Fecha recepción', 'gobject.TYPE_STRING', False, True, False, None), ('Automático', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('Usuario', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('Técnico', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('Comercial', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('D. General', 'gobject.TYPE_BOOLEAN', False, True, False, None), ('id', 'gobject.TYPE_STRING', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.wids['tv_datos'].connect("row-activated", self.abrir_factura) self.colorear(self.wids['tv_datos']) temp = time.localtime() self.fin = datetime.date(day = temp[2], month = temp[1], year = temp[0]) self.inicio = self.fin - datetime.timedelta(days = 4 * 7) self.wids['e_fechafin'].set_text(utils.str_fecha(self.fin)) self.wids['e_fechainicio'].set_text(utils.str_fecha(self.inicio)) sens = (self.usuario == None or self.usuario.firmaUsuario or self.usuario.firmaComercial # or self.usuario.firmaTecnico or self.usuario.firmaDirector or self.usuario.firmaTotal) self.wids['b_pendientes'].set_sensitive(sens) self.wids['b_pendientes'].child.child.get_children()[1].set_text("Ver pendientes de mi firma (%s)" % (self.usuario and self.usuario.usuario or "cualquiera")) gtk.main()
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario self.inicio = None self.fin = None Ventana.__init__(self, 'consulta_existenciasBolsas.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_fecha/clicked': self.set_fecha, 'b_actualizar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_exportar/clicked': self.exportar, 'e_fecha/focus-out-event': act_fecha} self.add_connections(connections) cols = (('Código', 'gobject.TYPE_STRING', False, True, False, None), ('Descripción', 'gobject.TYPE_STRING', False,True,False,None), ('Existencias\ntotales', 'gobject.TYPE_STRING', False, True, False, None), ('Bultos\ntotales', 'gobject.TYPE_STRING', False, True, False, None), ('Existencias (A)', 'gobject.TYPE_STRING', False, True, False, None), ('Bultos (A)', 'gobject.TYPE_STRING', False, True, False, None), ('Existencias (B)', 'gobject.TYPE_STRING', False, True, False, None), ('Bultos (B)', 'gobject.TYPE_STRING', False, True, False, None), ('Existencias (C)', 'gobject.TYPE_STRING', False, True, False, None), ('Bultos (C)', 'gobject.TYPE_STRING', False, True, False, None), ('PUID', 'gobject.TYPE_STRING', False, False, False, None)) self.tvs = [(self.wids["tv_datos"], self.wids['e_total_kilos'], self.wids['e_total_bultos'], None)] nb = self.wids['nb_almacenes'] for a in pclases.Almacen.select(orderBy = "id"): tv, e_kg, e_bultos, box = build_tv(a) self.tvs.append((tv, e_kg, e_bultos, a)) nb.append_page(box, gtk.Label(a.nombre)) nb.show_all() for tv, e_kg, e_bultos, box in self.tvs: utils.preparar_listview(tv, cols) for ncol in range(2, 10): col = self.wids['tv_datos'].get_column(ncol) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) tv.connect("row-activated", self.abrir_producto) self.wids['b_actualizar'].grab_focus() gtk.main()
def inicializar_ventana(self): """ Inicializa los controles de la ventana, estableciendo sus valores por defecto, deshabilitando los innecesarios, rellenando los combos, formateando el TreeView -si lo hay-... """ # Inicialmente no se muestra NADA. Sólo se le deja al # usuario la opción de buscar o crear nuevo. cols = [('ID', 'gobject.TYPE_STRING', False, True, False, None), ('Código', 'gobject.TYPE_STRING', False, True, True, None), ('Descripción', 'gobject.TYPE_STRING', True, True, False, self.cambiar_descripcion), ('Existencias', 'gobject.TYPE_STRING', True, True, False, self.cambiar_existencias), ('Precio defecto (s/IVA)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_precio_defecto)] self.__tarifas = [t for t in pclases.Tarifa.select(orderBy = "nombre") if t.vigente] for tarifa in self.__tarifas: cols.append(("%s (c/IVA)" % tarifa.nombre, "gobject.TYPE_STRING", None, True, False, None)) cols.append(('id', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) for numcol in [3, 4] + [5 + i for i in range(len(self.__tarifas))]: col = self.wids['tv_datos'].get_column(numcol) if col != None: for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) if numcol in [5 + i for i in range(len(self.__tarifas))]: cell.set_property("editable", True) cell.connect("edited", self.cambiar_precio_tarifa, numcol) else: txt = "productos.py::inicializar_ventana -> La columna %d "\ "es None. No formateo ni hago editable en TreeView." % ( numcol) if pclases.DEBUG: print txt self.logger.warning(txt) col = self.wids['tv_datos'].get_column(1) for cell in col.get_cell_renderers(): cell.set_property("xalign", 0.5) self.wids['tv_datos'].connect("row-activated", self.abrir_producto) self.wids['e_a_buscar'].connect("key_press_event", pasar_foco_enter, self.wids['b_buscar']) self.wids['e_a_buscar'].grab_focus() self.wids['ventana'].resize(640, 480)
def crear_fake_listview(tvorig, filtrar_nulos = False, cols_a_ignorar = []): """ Crea un TreeView idéntico al recibido (model clonado, mismas columnas y cabeceras, etc.). Si «filtrar_nulos» es True, ignora todas las columnas cuyo valor en todas las filas sea "nulo" (cero, lista vacía, False, "", etc.). Las columnas cuyo índice esté en cols_a_ignorar, no se copian. """ tv = gtk.TreeView() tv.set_name(tvorig.get_name()) modelorig = tvorig.get_model() cols = [] origcols = tvorig.get_columns() colsnulas = [] anchos = [] aligns = [] for col, i in zip(origcols, range(len(origcols))): valores_no_nulos = [fila[i] for fila in modelorig if fila[i] and fila[i] not in ("0", "0,0", "0,00")] if ((filtrar_nulos and not valores_no_nulos) # Hay que filtrar nulos y no tiene no-nulos. Ingnoro. or (i in cols_a_ignorar)): colsnulas.append(i) continue cols.append((col.get_title(), #modelorig.get_column_type(i), "gobject.TYPE_STRING", # Por aquí traga todo. False, False, False, None)) anchos.append(col.get_width()) aligns.append(col.get_cell_renderers()[0].get_property("xalign")) cols.append(("ID", "gobject.TYPE_STRING", False, False, False, None)) utils.preparar_listview(tv, cols) #for col, ancho in zip(tv.get_columns(), anchos): # col.set_fixed_width(ancho) # Estos anchos son los del tv original. # No valen si está filtrado for col, align in zip(tv.get_columns(), aligns): col.get_cell_renderers()[0].set_property("xalign", align) model = tv.get_model() for fila in modelorig: if filtrar_nulos: _fila = [] for indice in range(len(fila)): if indice not in colsnulas: _fila.append(fila[indice]) fila = _fila model.append(fila) return tv
def __init__(self, objeto = None, usuario = None): """ Constructor. objeto puede ser un objeto de pclases con el que comenzar la ventana (en lugar del primero de la tabla, que es el que se muestra por defecto). """ self.usuario = usuario Ventana.__init__(self, 'consulta_totales_geotextiles.glade', objeto, usuario = usuario) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_exportar/clicked': self.exportar } self.add_connections(connections) cols = (('Mes', 'gobject.TYPE_STRING', False, False, False, None), ('Producción: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Producción: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Producción: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Existencias: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Existencias: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Existencias: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: total: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: total: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: total: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. nac.: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. nac.: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. nac.: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. int.: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. int.: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: C. int.: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: G.: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: G.: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: G.: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: Otros: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: Otros: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Salidas: Otros: kg', 'gobject.TYPE_STRING', False, False, False, None), ('Peds. pendientes: rollos', 'gobject.TYPE_STRING', False, False, False, None), ('Peds. pendientes: m²', 'gobject.TYPE_STRING', False, False, False, None), ('Peds. pendientes: kg', 'gobject.TYPE_STRING', False, False, False, None), ('mes', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) for numcol in xrange(1, 25): col = self.wids['tv_datos'].get_column(numcol) for cell in col.get_cell_renderers(): cell.set_property('xalign', 1.0) anno_ini, anno_fin = buscar_annos_ini_fin() opciones = [(anno, anno) for anno in xrange(anno_ini, anno_fin + 1)] utils.rellenar_lista(self.wids['cbe_year'], opciones) utils.combo_set_from_db(self.wids['cbe_year'], -1) gtk.main()
def __init__(self, objeto = None, usuario = None, ventana_padre = None, locals_adicionales = {}, fichero_log = "ginn.log"): self.fichero_log = fichero_log self.filtro = [""] try: Ventana.__init__(self, 'trazabilidad.glade', objeto) # Me vale el mismo glade. Modificaré dinámicamente lo que me # estorbe. except: # Tal vez me estén llamando desde otro directorio Ventana.__init__(self, os.path.join('..', 'formularios', 'trazabilidad.glade'), objeto) connections = {'b_salir/clicked': self._salir} self.add_connections(connections) self.wids['hbox1'].set_property("visible", False) cols = (('Fecha', 'gobject.TYPE_STRING', False, True, True, None), ('Hora', 'gobject.TYPE_STRING', False, True, False, None), ('Tipo', 'gobject.TYPE_STRING', False, True, False, None), ('Usuario', 'gobject.TYPE_STRING', False, True, False, None), ('Texto', 'gobject.TYPE_STRING', False, True, False, None), ('Línea', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.colorear(self.wids['tv_datos']) import pyconsole vars_locales = locals() for k in locals_adicionales: vars_locales[k] = locals_adicionales[k] consola = pyconsole.attach_console(self.wids['contenedor_consola'], banner = "Consola python de depuración GINN", script_inicio = """import sys, os, pygtk, gtk, gtk.glade, utils sys.path.append(os.path.join("..", "framework")) import pclases, mx, mx.DateTime dir() """, locals = vars_locales) self.wids['frame2'].set_property("visible", False) self.wids['ventana'].set_title("LogViewer") self.wids['ventana'].resize(800, 600) self.wids['ventana'].set_position(gtk.WIN_POS_CENTER) self.wids['vpaned1'].set_position(500) self.tamanno_log = self.rellenar_widgets() gobject.timeout_add(1000, self.check_log) try: self.wids['e_search'].set_property("primary-icon-stock", gtk.STOCK_FIND) self.wids['e_search'].set_property("secondary-icon-stock", gtk.STOCK_CLEAR) self.wids['e_search'].connect("icon-press", self.both_buttons) except TypeError: self.wids['e_search'].connect("changed", self.mancatrlt2) gtk.main()
def preparar_tv(self, tv): """ Prepara las columnas del TreeView. """ cols = (('Fecha y hora', 'gobject.TYPE_STRING', False, True, False, None), ('Código', 'gobject.TYPE_STRING', False, True, True, None), ('Peso', 'gobject.TYPE_STRING', True, True, False, self.cambiar_peso), ('Color', 'gobject.TYPE_STRING', False, False, False, None), ('Observaciones', 'gobject.TYPE_STRING', True, False, False, self.cambiar_observaciones), ('ID', 'gobject.TYPE_INT64', False, False, False, None)) utils.preparar_listview(tv, cols) for col in tv.get_columns()[2:3]: for cell in col.get_cell_renderers(): cell.set_property("xalign", 1.0) col.set_alignment(0.5) self.wids['tv_balas'].get_selection().set_mode(gtk.SELECTION_MULTIPLE)
def crear_listview(self, tv): cols = (('Fecha', 'gobject.TYPE_STRING', True, True, True, self.cambiar_fecha), ('Título (DTEX)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_titulo), ('Alargamiento (%)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_alargamiento), ('Tenacidad (cN/tex)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_tenacidad), ('Grasa (%)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_grasa), ('Encogimiento (%)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_encogimiento), ('Humedad (%)', 'gobject.TYPE_STRING', True, True, False, self.cambiar_humedad), ('ID', 'gobject.TYPE_STRING', False, False, False, None)) # Contiene los ID de los resultados separados por ',' utils.preparar_listview(tv, cols) tv.get_column(1).get_cell_renderers()[0].set_property('xalign', 0.1) tv.get_column(2).get_cell_renderers()[0].set_property('xalign', 0.1) tv.get_column(3).get_cell_renderers()[0].set_property('xalign', 0.1) tv.get_column(4).get_cell_renderers()[0].set_property('xalign', 0.1) tv.get_column(5).get_cell_renderers()[0].set_property('xalign', 0.1) tv.get_column(6).get_cell_renderers()[0].set_property('xalign', 0.1)
def __init__(self, objeto = None, usuario = None): self.usuario = usuario Ventana.__init__(self, 'up_estadisticas_clientes.glade', objeto) connections = {'b_salir/clicked': self.salir, 'b_buscar/clicked': self.buscar, 'b_imprimir/clicked': self.imprimir, 'b_exportar/clicked': self.exportar} self.add_connections(connections) cols = (('Variable', 'gobject.TYPE_STRING', False, True, True, None), ('Frecuencia', 'gobject.TYPE_INT', False, True, False, None), ('Porcentaje', 'gobject.TYPE_STRING', False, True, False, None), ('PUID', 'gobject.TYPE_STRING', False, False, False, None)) self.nombres_tv = ("tv_edad", "tv_profesion", "tv_sexo", "tv_clases", "tv_padecimientos") for nombre_tv in self.nombres_tv: utils.preparar_listview(self.wids[nombre_tv], cols) self.g_edad = charting.add_grafica_simple(self.wids['h_graficas1'], STR_RANGOS_EDAD, [0] * len(RANGOS_EDAD)) #profesiones = [c.profesion.upper().strip() # for c in pclases.Cliente.select()] profesiones = [] self.g_profesion = charting.add_grafica_barras_verticales( self.wids['h_grafica_p'], profesiones, [0] * len(profesiones), ver_botones_colores = False) self.g_sexo = charting.add_grafica_barras_horizontales( self.wids['h_graficas1'], ("Masculino", "Femenino"), [0, 0]) #productos = [p.descripcion for p in pclases.ProductoCompra.select()] productos = [] self.g_clases = charting.add_grafica_barras_verticales( self.wids['h_grafica_c'], productos, [0] * len(productos), ver_botones_colores = False) #padecimientos = [p.texto.upper().strip() # for p in pclases.Padecimiento.select()] padecimientos = [] self.g_padecimientos = charting.add_grafica_barras_verticales( self.wids['h_grafica_d'], padecimientos, [0] * len(padecimientos), ver_botones_colores = False) self.wids['ventana'].maximize() gtk.main()