def __build_acciones(self): """ Construye una lista de acciones de menú compatible con UIManager. """ from framework import pclases acciones = [] for modulo in [m for m in pclases.Modulo.select(orderBy = "nombre") if len([p.ventana for p in self.__usuario.permisos if p.permiso and p.ventana.modulo == m]) > 0]: acciones.append(("M%d"%(modulo.id), None, "_%s" % (modulo.nombre))) ventanas = [p.ventana for p in self.__usuario.permisos if p.permiso and p.ventana.modulo == modulo] ventanas = utils.unificar(ventanas) for ventana in ventanas: pixbuf = None # Tiene que ser un gtk_stock por fuerza, # no admite pixbufs acciones.append(("V%d" % (ventana.id), pixbuf, "_%s" % (ventana.descripcion), None, None, self._abrir)) # Acciones especiales: acciones.append(("Salir", gtk.STOCK_QUIT, "_Salir")) acciones.append(("Cerrarventana", None, "_Cerrar ventana", "<Control>q", "Cierra la ventana actual.", self._cerrar_ventana)) acciones.append(("Cerrartodo", None, "_Cerrar todo", None, "Cierra todas las ventanas abiertas.", self._cerrar_todo)) return acciones
def guardar(self, widget): """ Guarda el contenido de los entry y demás widgets de entrada de datos en el objeto y lo sincroniza con la BD. """ albaran = self.objeto # Campos del objeto que hay que guardar: numalbaran = self.wids['e_numalbaran'].get_text() fecha = self.wids['e_fecha'].get_text() # Desactivo el notificador momentáneamente albaran.notificador.set_func(lambda: None) # Actualizo los datos del objeto albaran.numalbaran = numalbaran proveedor_id = utils.combo_get_value(self.wids['cmbe_proveedor']) try: proveedor = pclases.Proveedor.get(proveedor_id) except: proveedor = None error_proveedor = False proveedores_de_pedidos = utils.unificar( [p.proveedor for p in albaran.get_pedidos()]) if proveedores_de_pedidos and proveedor not in proveedores_de_pedidos: # Si el proveedor es diferente al del pedido, no dejo guardarlo. proveedor = albaran.proveedor error_proveedor = True albaran.proveedor = proveedor albaran.almacen = utils.combo_get_value(self.wids['cbe_almacenID']) try: albaran.fecha = utils.parse_fecha(fecha) except: albaran.fecha = datetime.date.today() utils.dialogo_info(titulo = "ERROR GUARDANDO FECHA", texto = "La fecha %s no es correcta." % (fecha), padre = self.wids['ventana']) # Fuerzo la actualización de la BD y no espero a que SQLObject lo # haga por mí: albaran.syncUpdate() # Vuelvo a activar el notificador albaran.notificador.set_func(self.aviso_actualizacion) self.actualizar_ventana() self.wids['b_guardar'].set_sensitive(False) if error_proveedor: utils.dialogo_info(titulo = "PROVEEDOR NO GUARDADO", texto = "El proveedor no se guardó porque no coincide con\n"\ "el del pedido del que procede.", padre = self.wids['ventana'])
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_vencimientos_pago.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_csv/clicked': self.exportar, 'ch_formapago/toggled': lambda ch: self.wids['cb_formapago'].set_sensitive(ch.get_active()), } self.wids['cb_formapago'].set_sensitive(self.wids['ch_formapago'].get_active()) formaspago = [p.documentodepago.strip().split(" ")[0] for p in pclases.Proveedor.select()] formaspago = filtrar_tildes_lista(formaspago) formaspago = [e.lower() for e in formaspago] formaspago = utils.unificar(formaspago) formaspago.sort() self.formaspago = zip(range(len(formaspago)), formaspago) utils.rellenar_lista(self.wids['cb_formapago'], self.formaspago) 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, False, None), ('Visto bueno','gobject.TYPE_STRING', False, True, False, None), ('Fecha vto.','gobject.TYPE_STRING', False, True, False, None), ('Importe','gobject.TYPE_STRING', False, False, False, None), ('Pendiente','gobject.TYPE_STRING', False, False, False, None), ('Fecha fra.','gobject.TYPE_STRING', False, True, False, None), ('Observaciones/Forma de pago','gobject.TYPE_STRING', False, True, False, None), ('Proveedor', 'gobject.TYPE_STRING', False, True, True, None), ('Doc. de pago del proveedor', 'gobject.TYPE_STRING', False, True, True, None), ('id','gobject.TYPE_STRING',False,False,False,None)) utils.preparar_listview(self.wids['tv_datos'], cols) self.wids['tv_datos'].get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.wids['tv_datos'].connect("row-activated", self.abrir_factura) self.colorear(self.wids['tv_datos']) col = self.wids['tv_datos'].get_column(3) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) col = self.wids['tv_datos'].get_column(4) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) self.wids['tv_datos'].connect('button_release_event', self.button_clicked) cols = (('Año y mes','gobject.TYPE_STRING', False,True, True, None), ('Total','gobject.TYPE_STRING', False, True, False, None), ('nada','gobject.TYPE_STRING', False, False, False, None)) utils.preparar_treeview(self.wids['tv_totales'], cols) col = self.wids['tv_totales'].get_column(1) for cell in col.get_cell_renderers(): cell.set_property("xalign", 1) temp = time.localtime() self.fin = mx.DateTime.DateTimeFrom(day = temp[2], month = temp[1], year = temp[0]) self.wids['e_fechafin'].set_text(utils.str_fecha(temp)) gtk.main()
def buscar(self,boton): """ Lista los productos bajo mínimos """ self.resultado = [] if self.wids['r_compra'].get_active(): proveedorid = utils.combo_get_value(self.wids['cbe_proveedor']) if proveedorid == 0 or proveedorid is None: proveedor = None else: proveedor = pclases.Proveedor.get(proveedorid) self.wids['b_crear_pedido'].set_sensitive(True) if not proveedor: self.resultado = pclases.ProductoCompra.select( pclases.AND( pclases.ProductoCompra.q.existencias < pclases.ProductoCompra.q.minimo, pclases.ProductoCompra.q.controlExistencias == True, pclases.ProductoCompra.q.obsoleto == False), orderBy = 'descripcion') else: PC = pclases.ProductoCompra PDC = pclases.PedidoCompra LDPDC = pclases.LineaDePedidoDeCompra ADE = pclases.AlbaranEntrada FDC = pclases.FacturaCompra LDC = pclases.LineaDeCompra tiene_pedidos_del_proveedor = pclases.AND( PC.q.id == LDPDC.q.productoCompraID, LDPDC.q.pedidoCompraID == PDC.q.id, PDC.q.proveedorID == proveedor.id) tiene_albaranes_del_proveedor = pclases.AND( PC.q.id == LDC.q.productoCompraID, LDC.q.albaranEntradaID == ADE.q.id, ADE.q.proveedorID == proveedor.id) tiene_facturas_del_proveedor = pclases.AND( PC.q.id == LDC.q.productoCompraID, LDC.q.facturaCompraID == FDC.q.id, FDC.q.proveedorID == proveedor.id) self.resultado0 = PC.select(pclases.AND( PC.q.existencias < PC.q.minimo, PC.q.controlExistencias == True, PC.q.obsoleto == False, tiene_pedidos_del_proveedor, )) self.resultado1 = PC.select(pclases.AND( PC.q.existencias < PC.q.minimo, PC.q.controlExistencias == True, PC.q.obsoleto == False, tiene_albaranes_del_proveedor, )) self.resultado2 = PC.select(pclases.AND( PC.q.existencias < PC.q.minimo, PC.q.controlExistencias == True, PC.q.obsoleto == False, tiene_facturas_del_proveedor )) self.resultado = list(self.resultado0) self.resultado += [r for r in self.resultado1 if r not in self.resultado] self.resultado += [r for r in self.resultado2 if r not in self.resultado] self.resultado = utils.unificar(self.resultado) self.rellenar_tabla(self.resultado, False) else: self.wids['b_crear_pedido'].set_sensitive(False) # NOTA: Se cuenta el mínimo como UNIDADES (bala completa o # rollo completo), no en kilos ni m². productos = pclases.ProductoVenta.select(""" producto_venta.minimo > ( SELECT COUNT(*) FROM articulo WHERE articulo.producto_venta_id = producto_venta.id AND articulo.albaran_salida_id = NULL)""") for p in productos: articulos_en_almacen = pclases.Articulo.select( pclases.AND(pclases.Articulo.q.productoVentaID == p.id, pclases.Articulo.q.albaranSalidaID == None)) self.resultado.append((p, articulos_en_almacen.count())) self.rellenar_tabla(self.resultado,True)