示例#1
0
文件: ventana.py 项目: Virako/fpinn
 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
示例#2
0
 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()
示例#4
0
 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)