Ejemplo n.º 1
0
 def imprimir(self, boton):
     """
     Prepara la vista preliminar para la impresión del informe
     """
     import sys, os
     sys.path.append(os.path.join("..", "informes"))
     from treeview2pdf import treeview2pdf
     from informes import abrir_pdf
     idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
     if idcliente == None:
         utils.dialogo_info(titulo = 'ERROR',
                            texto = 'Seleccione un cliente',
                            padre = self.wids['ventana'])
     else:
         idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
         self.cliente = pclases.Cliente.get(idcliente)
         cliente = self.cliente
         if self.inicio == None:            
             fechaInforme = 'Hasta ' + utils.str_fecha(time.strptime(self.fin, "%Y/%m/%d"))
         else:
             fechaInforme = utils.str_fecha(time.strptime(self.inicio, "%Y/%m/%d")) + ' - ' + utils.str_fecha(time.strptime(self.fin, "%Y/%m/%d"))
     
         strfecha = fechaInforme
         informe = treeview2pdf(self.wids['tv_datos'], 
                     titulo = "Productos comprados por " + cliente.nombre, 
                     fecha = strfecha) 
         if informe:
             abrir_pdf(informe)
Ejemplo n.º 2
0
 def buscar(self, boton):
     """
     Dadas fecha de inicio y de fin, lista todos los albaranes
     pendientes de facturar.
     """
     idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
     if idcliente == None:
         utils.dialogo_info(titulo = 'ERROR',
                            texto = 'Seleccione un cliente',
                            padre = self.wids['ventana'])
     else:
         idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
         self.cliente = pclases.Cliente.get(idcliente)
         cliente = self.cliente
         if self.inicio == None:
             pedidos = pclases.PedidoVenta.select(pclases.AND(
                             pclases.PedidoVenta.q.fecha <= self.fin,
                             pclases.PedidoVenta.q.clienteID == cliente.id),
                         orderBy = 'fecha')
         else:
             pedidos = pclases.PedidoVenta.select(pclases.AND(
                             pclases.PedidoVenta.q.fecha >= self.inicio,
                             pclases.PedidoVenta.q.fecha <= self.fin,
                             pclases.PedidoVenta.q.clienteID == cliente.id),
                         orderBy='fecha')
         self.resultado = pedidos
         self.rellenar_tabla(self.resultado)
Ejemplo n.º 3
0
 def buscar(self, boton):
     """
     Dadas fecha de inicio y de fin, lista todos los albaranes
     pendientes de facturar.
     """
     idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
     if idcliente == None:
         utils.dialogo_info(titulo = 'ERROR',
                            texto = 'Seleccione un cliente',
                            padre = self.wids['ventana'])
     else:
         idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
         self.cliente = pclases.Cliente.get(idcliente)
         cliente = self.cliente
         if self.inicio == None:
             facturas = pclases.FacturaVenta.select(pclases.AND(
                             pclases.FacturaVenta.q.clienteID == cliente.id, 
                             pclases.FacturaVenta.q.fecha <= self.fin), 
                         orderBy = 'fecha')
         else:
             facturas = pclases.FacturaVenta.select(pclases.AND(
                             pclases.FacturaVenta.q.fecha >= self.inicio,
                             pclases.FacturaVenta.q.fecha <= self.fin,
                             pclases.FacturaVenta.q.clienteID == cliente.id),
                         orderBy='fecha')
         productos = []
         for f in facturas:
             for ldv in f.lineasDeVenta:
                 producto = ldv.producto
                 if producto not in productos:
                     productos.append(producto)
         self.rellenar_tabla(productos)
Ejemplo n.º 4
0
 def buscar(self,boton):
     if self.inicio == None:
         vencimientos = pclases.VencimientoCobro.select(
             pclases.VencimientoCobro.q.fecha <= self.fin, 
             orderBy = 'fecha')
     else:
         vencimientos = pclases.VencimientoCobro.select(pclases.AND(
                 pclases.VencimientoCobro.q.fecha >= self.inicio,
                 pclases.VencimientoCobro.q.fecha <= self.fin), 
             orderBy='fecha')       
     
     idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
     if idcliente != None:
         cliente = pclases.Cliente.get(
             utils.combo_get_value(self.wids['cmbe_cliente']))
         vencimientos = [v for v in vencimientos 
                         if (v.facturaVenta 
                             and v.facturaVenta.clienteID == cliente.id) 
                            or 
                            (v.prefactura 
                             and v.prefactura.clienteID == cliente.id)]
     self.resultado = []
     for i in vencimientos:
         if not self.esta_cobrado(i):
             self.resultado.append([i.fecha,i,False])
     # XXX Esto estaba comentado. ¿Por qué? Ya sé el porqué. Porque de 
     # LOGIC solo sacamos las obligaciones de pago, no las de cobro.
     #if idcliente == None:     # Porque en Logic los clientes no son los mismos que 
     #                          # aquí (no están exactamente igual escritos)
     #    vencimientos_logic = self.buscar_vencimientos_logic(self.inicio, self.fin)
     #    for i in vencimientos_logic:
     #        self.resultado.append([i['fecha'],i,True])
     # XXX
     self.resultado.sort(self.por_fecha)
     self.rellenar_tabla(self.resultado)
Ejemplo n.º 5
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
     albaran.proveedor = utils.combo_get_value(self.wids['cmbe_proveedor'])
     albaran.almacen = utils.combo_get_value(self.wids['cbe_almacenID'])
     try:
         albaran.fecha = utils.parse_fecha(fecha)
     except:
         albaran.fecha = time.localtime()
         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)
 def buscar(self,boton):
     """
     Dadas fecha de inicio y de fin, lista todos los albaranes
     pendientes de facturar.
     """
     if self.inicio == None:
         facturas = pclases.FacturaCompra.select(pclases.FacturaCompra.q.fecha <= self.fin, orderBy = 'fecha')
     else:
         facturas = pclases.FacturaCompra.select(sqlobject.AND(pclases.FacturaCompra.q.fecha >= self.inicio,pclases.FacturaCompra.q.fecha <= self.fin), orderBy='fecha')       
     idproveedor = utils.combo_get_value(self.wids['cmbe_proveedor'])
     if idproveedor != None:
         proveedor = pclases.Proveedor.get(utils.combo_get_value(self.wids['cmbe_proveedor']))
         facturas = [v for v in facturas if v.proveedorID == proveedor.id]
     self.resultado = []
     condusuario = self.usuario == None or self.usuario.firmaTotal or self.usuario.firmaUsuario
     condtecnico = self.usuario == None or self.usuario.firmaTotal or self.usuario.firmaTecnico
     condcomercial = self.usuario == None or self.usuario.firmaTotal or self.usuario.firmaComercial
     conddirector = self.usuario == None or self.usuario.firmaTotal or self.usuario.firmaDirector
     for i in facturas:
         if boton.name == "b_pendientes":
             if condusuario and not i.vistoBuenoUsuario and i not in self.resultado:
                 self.resultado.append(i)
             if condtecnico and not i.vistoBuenoTecnico and i not in self.resultado:
                 self.resultado.append(i)
             if condcomercial and not i.vistoBuenoComercial and i not in self.resultado:
                 self.resultado.append(i)
             if conddirector and not i.vistoBuenoDirector and i not in self.resultado:
                 self.resultado.append(i)
         elif boton.name == "b_todas":
             self.resultado.append(i)
     self.resultado.sort(utils.cmp_fecha_id)
     self.rellenar_tabla(self.resultado)
Ejemplo n.º 7
0
    def buscar(self,boton):
        """
        Dadas fecha de inicio y de fin, lista todos los albaranes
        pendientes de facturar.
        """
        idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
        if idcliente == None:
            # utils.dialogo_info(titulo = 'ERROR', texto = 'Seleccione un cliente', padre = self.wids['ventana'])
            # return
            # Selecciono los albaranes de todos los clientes.
            if self.inicio == None:
                albaranes = pclases.AlbaranSalida.select(pclases.AlbaranSalida.q.fecha <= self.fin,
                                                         orderBy = 'fecha')
            else:
                albaranes = pclases.AlbaranSalida.select(sqlobject.AND(pclases.AlbaranSalida.q.fecha >= self.inicio,
                                                                       pclases.AlbaranSalida.q.fecha <= self.fin), 
                                                         orderBy='fecha')    
        else:
            self.cliente = pclases.Cliente.get(utils.combo_get_value(self.wids['cmbe_cliente']))
            cliente = self.cliente
            if self.inicio == None:
                albaranes = pclases.AlbaranSalida.select(sqlobject.AND(pclases.AlbaranSalida.q.fecha <= self.fin,
                                                                       pclases.AlbaranSalida.q.clienteID == cliente.id), 
                                                         orderBy = 'fecha')

            else:
                albaranes = pclases.AlbaranSalida.select(sqlobject.AND(pclases.AlbaranSalida.q.fecha >= self.inicio,
                                                                       pclases.AlbaranSalida.q.fecha <= self.fin, 
                                                                       pclases.AlbaranSalida.q.clienteID == cliente.id), 
                                                         orderBy='fecha')    
        self.resultado = albaranes
        self.rellenar_tabla(self.resultado)
Ejemplo n.º 8
0
 def es_diferente(self):
     """
     Devuelve True si la información en pantalla es distinta a la
     del objeto en memoria.
     """
     albaran = self.objeto
     if albaran == None: return False    # Si no hay albaran activo, devuelvo que no hay cambio respecto a la ventana
     condicion = (str(albaran.numalbaran) == self.wids['e_numalbaran'].get_text())
     condicion = condicion and (utils.str_fecha(albaran.fecha) == self.wids['e_fecha'].get_text())
     condicion = condicion and (utils.combo_get_value(self.wids['cmbe_proveedor']) == albaran.proveedorID) 
     condicion = condicion and (utils.combo_get_value(self.wids['cbe_almacenID']) == albaran.almacenID)
     return not condicion    # "condicion" verifica que sea igual
Ejemplo n.º 9
0
    def buscar(self,boton):
        """
        Dadas fecha de inicio y de fin, devuelve todos los vencimientos 
        no pagados al completo.
        """
        if self.inicio == None:
            vencimientos = pclases.VencimientoPago.select(
                            pclases.VencimientoPago.q.fecha <= self.fin, 
                            orderBy = 'fecha')
            estimados = pclases.EstimacionPago.select(
                            pclases.EstimacionPago.q.fecha <= self.fin, 
                            orderBy = 'fecha')
        else:
            vencimientos = pclases.VencimientoPago.select(pclases.AND(
                                pclases.VencimientoPago.q.fecha >= self.inicio,
                                pclases.VencimientoPago.q.fecha <= self.fin), 
                            orderBy='fecha') 
            estimados = pclases.EstimacionPago.select(pclases.AND(
                                pclases.EstimacionPago.q.fecha >= self.inicio,
                                pclases.EstimacionPago.q.fecha <= self.fin), 
                            orderBy='fecha')

        idproveedor = utils.combo_get_value(self.wids['cmbe_proveedor'])
        if idproveedor != None:
            idproveedor = utils.combo_get_value(self.wids['cmbe_proveedor'])
            proveedor = pclases.Proveedor.get(idproveedor)
            vencimientos = [v for v in vencimientos 
                            if v.facturaCompra.proveedorID == proveedor.id]
            estimados = [e for e in estimados 
                         if e.facturaCompra.proveedorID == proveedor.id]

        mostrar_solo_pendientes = self.wids['ch_pendientes'].get_active()
        self.resultado = []
        for i in vencimientos:
            if not self.esta_pagado(i):
                if ((mostrar_solo_pendientes and self.pagare_y_no_emitido(i)) 
                    or not mostrar_solo_pendientes):
                    self.resultado.append([i.fecha, i, False])
        if idproveedor == None:     
            # Porque en Logic los proveedores no son los mismos que 
            # aquí (no están exactamente igual escritos)
            vencimientos_logic = self.buscar_vencimientos_logic(self.inicio, 
                                                                self.fin)
            for i in vencimientos_logic:
                self.resultado.append([i['fecha'], i, True])
        self.resultado = self.filtrar_por_forma_de_pago(self.resultado)
        self.resultado.sort(self.por_fecha)
        self.rellenar_tabla(self.resultado)
Ejemplo n.º 10
0
 def cambiar_datos_cliente(self, cbe):
     """
     Machaca la información de los entries de los datos del cliente 
     del presupuesto si están vacíos.
     """
     idcliente = utils.combo_get_value(cbe)
     if not idcliente:
         return
     cliente = pclases.Cliente.get(idcliente)
     if not self.wids["e_persona_contacto"].get_text():
         self.wids["e_persona_contacto"].set_text(cliente.contacto.strip())
     if not self.wids["e_cliente"].get_text():
         self.wids["e_cliente"].set_text(cliente.nombre)
     if not self.wids["e_direccion"].get_text():
         self.wids["e_direccion"].set_text(cliente.direccion)
     if not self.wids["e_ciudad"].get_text():
         self.wids["e_ciudad"].set_text(cliente.ciudad)
     if not self.wids["e_provincia"].get_text():
         self.wids["e_provincia"].set_text(cliente.provincia)
     if not self.wids["e_cp"].get_text():
         self.wids["e_cp"].set_text(cliente.cp)
     if not self.wids["e_pais"].get_text():
         self.wids["e_pais"].set_text(cliente.pais)
     if not self.wids["e_telefono"].get_text():
         self.wids["e_telefono"].set_text(cliente.telefono)
     if not self.wids["e_fax"].get_text():
         self.wids["e_fax"].set_text(cliente.fax)
Ejemplo n.º 11
0
 def get_valor(self, w, nombrecampo, tipocampo):
     res = None 
     if isinstance(tipocampo, sqlobject.SOStringCol):  # Cadena: el widget es un entry
         res = w.get_text()
     elif isinstance(tipocampo, sqlobject.SOIntCol):   # Entero: el widget es un entry
         res = w.get_text()
         try:
             res = int(res)
         except ValueError:
             txt = "El valor %s no es correcto. Introduzca un número entero." % (res)
             utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = txt, padre = self.wids['ventana'])
             res = 0
     elif isinstance(tipocampo, sqlobject.SOBoolCol):  # Boolean: el widget es un checkbox
         res = w.get_active()
     elif isinstance(tipocampo, sqlobject.SOForeignKey):  # Entero-clave ajena: el widget es un comboboxentry
         res = utils.combo_get_value(w)
     elif isinstance(tipocampo, sqlobject.SOCol):      # Clase base, casi seguro Float: el widget es un entry
         res = w.get_text()
         try:
             res = float(res)
         except ValueError:
             txt = "El valor %s no es correcto. Introduzca un número." % (res)
             utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = txt, padre = self.wids['ventana'])
             res = 0.0
     else:
         txt = "motivos_ausencia.py: No se pudo obtener el valor de %s para %s <%s>." \
                % (w, nombrecampo, tipocampo)
         print txt
         self.logger.error(txt)
     return res
Ejemplo n.º 12
0
 def buscar(self, boton):
     """
     Dadas fecha de inicio y de fin, busca todas las ventas 
     (facturadas) entre esas dos fechas.
     """
     from ventana_progreso import VentanaProgreso
     vpro = VentanaProgreso(padre = self.wids['ventana'])
     vpro.mostrar()
     # print self.fin, self.inicio
     vpro.set_valor(0.0, "Analizando prefacturas...")
     idcliente = utils.combo_get_value(self.wids['cbe_cliente'])
     self.resultado = []
     fechafin = datetime.date(day = int(self.fin.split("/")[2]), 
                                         month = int(self.fin.split("/")[1]), 
                                         year = int(self.fin.split("/")[0]))
     if self.inicio == None:
         prefacturas = pclases.Prefactura.select(pclases.Prefactura.q.fecha <= fechafin, orderBy = 'fecha')
         vpro.set_valor(0.5, "Analizando prefacturas...")
     else:
         fechainicio = datetime.date(day = int(self.inicio.split("/")[2]), 
                                                month = int(self.inicio.split("/")[1]), 
                                                year = int(self.inicio.split("/")[0]))
         prefacturas = pclases.Prefactura.select(pclases.AND(pclases.Prefactura.q.fecha >= fechainicio,
                                                             pclases.Prefactura.q.fecha <= fechafin), orderBy='fecha')
         vpro.set_valor(0.5, "Analizando prefacturas...")
     self.resultado = list(prefacturas)
     vpro.set_valor(0.8, "Analizando prefacturas...")
     self.resultado.sort(self.por_fecha)
     vpro.set_valor(0.9, "Analizando prefacturas...")
     vpro.ocultar()
     self.rellenar_tabla(self.resultado)
Ejemplo n.º 13
0
 def es_diferente(self):
     """
     Devuelve True si la información en pantalla es distinta a la
     del objeto en memoria.
     """
     # NOTA: No hay que preocuparse por el exceso de cómputo. Estas comparaciones
     # son bastante rápidas al tener python -como los lenguajes de verdad y no
     # los jueguetes tipo VB- las operaciones lógicas cortocircuitadas, de forma
     # que si condición pasa a False no se evalúa lo que esté detrás del and en
     # las instrucciones posteriores.
     albaran = self.objeto
     if albaran == None: return False    # Si no hay albaran activo, devuelvo que no hay cambio respecto a la ventana
     condicion = (str(albaran.numalbaran) == self.wids['e_numalbaran'].get_text())
     condicion = condicion and (utils.str_fecha(albaran.fecha) == self.wids['e_fecha'].get_text())
     condicion = condicion and (utils.combo_get_value(self.wids['cmbe_proveedor']) == albaran.proveedorID) 
     condicion = condicion and (utils.combo_get_value(self.wids['cbe_almacenID']) == albaran.almacenID)
     return not condicion    # "condicion" verifica que sea igual
Ejemplo n.º 14
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 buscar(self,boton):
     """
     """
     idproducto = utils.combo_get_value(self.wids['cmbe_producto'])
     if idproducto == None:
         utils.dialogo_info(titulo = 'ERROR', 
                            texto = 'Seleccione un producto', 
                            padre = self.wids['ventana'])
         return
     producto = pclases.ProductoVenta.get(idproducto)
     and_fecha_inicio = "AND parte_de_produccion.fecha >= '%s'" % (self.get_unambiguous_fecha(self.inicio))
     if producto.es_rollo():
         parte_where_de_consulta = """
 partida.id IN 
     (SELECT rollo.partida_id 
      FROM rollo 
      WHERE rollo.id IN 
         (SELECT articulo.rollo_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ % (producto.id, 
              self.get_unambiguous_fecha(self.fin), 
              self.inicio and and_fecha_inicio or "")
     else:
         parte_where_de_consulta = """
 partida.id IN 
     (SELECT bala.partida_carga_id 
      FROM bala 
      WHERE bala.id IN 
         (SELECT articulo.rollo_id 
          FROM articulo 
          WHERE articulo.producto_venta_id = %d AND articulo.parte_de_produccion_id IN 
             (SELECT parte_de_produccion.id 
              FROM parte_de_produccion 
              WHERE parte_de_produccion.fecha <= '%s' %s
              ORDER BY parte_de_produccion.fecha
             )
         )
     ) """ % (producto.id, 
              self.get_unambiguous_fecha(self.fin), 
              self.inicio and and_fecha_inicio or "")
     partidas = pclases.Partida.select(parte_where_de_consulta, distinct = True)
     # Hasta aquí la consulta optimizada para obtener las partidas. Pasamos a recuperar los datos en sí:
     vpro = VentanaActividad(padre = self.wids['ventana'])
     vpro.mostrar()
     self.resultado = []
     for p in partidas:
         vpro.mover()
         self.resultado.append(p)
     vpro.ocultar()
     self.resultado = partidas        
     self.rellenar_tabla(self.resultado)
Ejemplo n.º 16
0
 def imprimir(self,boton):
     """
     Prepara la vista preliminar para la impresión del informe
     """
     from treeview2pdf import treeview2pdf
     from informes import abrir_pdf
     strfecha = "%s - %s" % (self.wids['e_fechainicio'].get_text(), self.wids['e_fechafin'].get_text())
     resp = utils.dialogo(titulo = "¿IMPRIMIR DESGLOSE?", 
                          texto = "Puede imprimir únicamente los albaranes o toda la información de la ventana.\n¿Desea imprimir también el contenido de los albaranes?", 
                          padre = self.wids['ventana'])
     if resp:
         tv = self.wids['tv_datos']
         tv.expand_all()
         while gtk.events_pending(): gtk.main_iteration(False)
         itertotal = tv.get_model().append(None, ("",)*8 + ("TOTAL", self.wids['e_total'].get_text()) + ("", )*2 + (0, ))
     else:
         tv = self.wids['tv_datos']
         tv.collapse_all()
         while gtk.events_pending(): gtk.main_iteration(False)
         tv = convertir_a_listview(tv)
         # Me sobran algunas columnas
         tv.remove_column(tv.get_columns()[2])
         tv.remove_column(tv.get_columns()[3])
         tv.remove_column(tv.get_columns()[3])
         tv.remove_column(tv.get_columns()[3])
         tv.remove_column(tv.get_columns()[3])
         tv.remove_column(tv.get_columns()[3])
         tv.remove_column(tv.get_columns()[-1])
         tv.remove_column(tv.get_columns()[-1])
         tv.get_column(2).set_title("Proveedor")
         model = tv.get_model()
         # Chapuza para mover los datos de la columna, pensaba que se eliminaban al quitar las columnas del TV.
         for fila in model:
             fila[2], fila[3] = fila[3],fila[9]
         itertotal = model.append(("", "", "TOTAL", self.wids['e_total'].get_text()) + ("", )*8 + (0, ) )
     idproveedor = utils.combo_get_value(self.wids['cbe_proveedor'])
     if idproveedor > 1:
         try:
             nomproveedor = pclases.Proveedor.get(idproveedor).nombre
         except:
             nomproveedor = "?"
     else:
         nomproveedor = "proveedores"
     abrir_pdf(treeview2pdf(tv, titulo = "Compras a %s" % (nomproveedor), fecha = strfecha))
     tv.get_model().remove(itertotal)
     if self.wids['notebook1'].get_current_page() == 0:
         self.wids['notebook1'].next_page()
         self.wids['notebook1'].realize()
         while gtk.events_pending(): gtk.main_iteration(False)
         self.wids['notebook1'].prev_page()
     abrir_pdf(treeview2pdf(self.wids['tv_proveedor'], 
                            titulo = "Compras por proveedor y producto", 
                            fecha = strfecha))
Ejemplo n.º 17
0
 def filtrar_por_forma_de_pago(self, r):
     res = r[:]
     if self.wids['ch_formapago'].get_active():
         formapago = utils.combo_get_value(self.wids['cb_formapago'])
         if formapago != None:
             txtformapago = self.formaspago[formapago][1]
             res = []
             for v in r: # v es una tupla con fecha, vencimiento o estimación y un boolean para indicar si es de LOGIC.
                 # Las formas de pago en el combo están todas en minúsuclas y sin tildes:
                 if not v[2] and txtformapago in utils.filtrar_tildes(v[1].observaciones).lower():
                     res.append(v)
     return res
Ejemplo n.º 18
0
 def actualizar(self, *args, **kw):
     """
     Wrapper para actualizar_ventana.
     """
     id = utils.combo_get_value(self.wids['cb_empleadoID'])
     if id > 0:
         self.lista_empleados = [pclases.Empleado.get(id)]
     elif id == 0:
         self.lista_empleados = [e for e in pclases.Empleado.select()]
     else:
         self.lista_empleados = None
     #self.actualizar_ventana()
     self.rellenar_widgets()
Ejemplo n.º 19
0
 def add_ventana_a_modulo(self, b):
     model, iter = self.wids['tv_modulos'].get_selection().get_selected()
     if iter == None or model[iter].parent != None:
         utils.dialogo_info(titulo = 'SELECCIONE MÓDULO', texto = 'Debe seleccionar un módulo al que añadir la ventana.')
         return
     idventana = utils.combo_get_value(self.wids['cb_add_ventana'])
     if idventana == None:
         utils.dialogo_info(titulo = 'SELECCIONE VENTANA', texto = 'Debe seleccionar una ventana para añadir al módulo.')
     idmodulo = model[iter][-1]
     modulo = pclases.Modulo.get(idmodulo)
     ventana = pclases.Ventana.get(idventana)
     ventana.modulo = modulo
     self.rellenar_tab_modulos()
Ejemplo n.º 20
0
 def rellenar_widgets(self):
     """
     Rellena la información de los widgets, que es básicamente el 
     TreeView de alumnos a través del evento "changed" del profesor.
     """
     id = utils.combo_get_value(self.wids['cb_empleadoID'])
     if id > 0:
         self.lista_empleados = [pclases.Empleado.get(id)]
     elif id == 0:
         self.lista_empleados = [e for e in pclases.Empleado.select()]
     else:
         self.lista_empleados = []
     fecha = self.get_fecha_mostrada()
     dict_clases = self.rellenar_asistencias(fecha)
     self.actualizar_grafica(dict_clases)
     self.wids['tv_asistencias'].expand_all()
Ejemplo n.º 21
0
 def imprimir(self, boton):
     """
     Imprime la información en dos documentos: fibra y geotextiles.
     """
     import informes
     idcliente = utils.combo_get_value(self.wids['cbe_cliente'])
     if idcliente > 0:
         nombrecliente = pclases.Cliente.get(idcliente).nombre
     else:
         nombrecliente = ""
     if self.gpped != None and self.gpped != []:
         informes.abrir_pdf(geninformes.pendiente_servir("geotextiles", self.gpped, self.gppro, nombrecliente))
     if self.fpped != None and self.fpped != []:
         informes.abrir_pdf(geninformes.pendiente_servir("fibra", self.fpped, self.fppro, nombrecliente))
     if self.opped != None and self.opped != []:
         informes.abrir_pdf(geninformes.pendiente_servir("otros", self.opped, self.oppro, nombrecliente))
Ejemplo n.º 22
0
 def add_cobro(self, b):
     pagare = self.objeto
     idcliente = utils.combo_get_value(self.wids['cbe_cliente'])
     if idcliente > 0:
         cliente = pclases.Cliente.get(idcliente)
     else:
         cliente = self.buscar_cliente()
     if cliente == None:
         return
     facturas = self.buscar_factura(cliente)
     if facturas == None:
         return
     for factura in facturas:
         if factura.id in [c.facturaVentaID or c.prefacturaID for c in self.objeto.cobros] and len(factura.vencimientosCobro) < 2:
             utils.dialogo_info(titulo = "FACTURA YA INCLUIDA", 
                                texto = "La factura %s ya ha sido incluida en este pagaré." % (factura.numfactura), 
                                padre = self.wids['ventana'])
             continue
             # TODO: No controlo que no se pueda pagar el mismo vencimiento de la misma factura en dos pagarés diferentes.
         vencimiento = self.buscar_vencimiento(factura)
         if vencimiento == None:
             continue
         antes = sum([c.importe for c in pagare.cobros])
         if antes == pagare.cantidad:
             actualizar_cantidad = True  # Como el importe es la suma de los cobros, el nuevo que añado ahora tiene que actualizar la cantidad.
                                         # Si no fuera así (el importe es distinto a la suma de los cobros) es que se ha introducido a mano
                                         # y por tanto debo respetarlo.
         else:
             actualizar_cantidad = False
         observaciones = "Pagaré %s con fecha %s y vencimiento %s" % (
                             self.objeto.codigo, 
                             utils.str_fecha(self.objeto.fechaRecepcion), 
                             utils.str_fecha(self.objeto.fechaCobro))
         cobro = pclases.Cobro(facturaVenta = vencimiento.facturaVenta,
                               prefactura = vencimiento.prefactura, 
                               pagareCobro = self.objeto,
                               fecha = vencimiento.fecha,
                               importe = vencimiento.importe,
                               #observaciones = 'Cubierto por el pagaré con fecha %s.' % utils.str_fecha(self.objeto.fechaRecepcion), 
                               observaciones = observaciones)
         if actualizar_cantidad:
             if pagare.cobrado == pagare.cantidad:
                 pagare.cobrado = sum([c.importe for c in pagare.cobros])
                 pagare.cantidad = pagare.cobrado
             else:
                 pagare.cantidad = sum([c.importe for c in pagare.cobros])
         self.actualizar_ventana()
 def buscar(self, boton):
     """
     Busca todos los productos e introduce en los TreeViews las existencias 
     de los mismos. En total y por almacén.
     El total no lo calcula, se obtiene del total global (que debería 
     coincidir con el sumatorio de...).
     """
     tipo = utils.combo_get_value(self.wids['cbe_tipo'])
     from ventana_progreso import VentanaProgreso
     vpro = VentanaProgreso(padre = self.wids['ventana'])
     vpro.mostrar()
     txtvpro = "Recuperando existencias por almacén..."
     i = 0.0
     vpro.set_valor(i, txtvpro)
     almacenes = pclases.Almacen.select(orderBy = "id")
     itotal = pclases.ProductoCompra.select().count() 
     model = self.wids['tv_por_producto'].get_model()
     model.clear()
     for a in almacenes:
         self.wids['tv_%d' % a.id].get_model().clear()
     if tipo in (0, -2) or tipo > 0:
         for pc in pclases.ProductoCompra.select():
             if ((tipo > 0 and pc.tipoDeMaterialID == tipo) 
                 or tipo in (0, -2)):
                 fila = [pc.codigo, pc.descripcion]
                 total = pc.existencias
                 for a in almacenes:
                     existencias_almacen = a.get_existencias(pc)
                     if existencias_almacen == None:
                         existencias_almacen = 0
                     fila.append(utils.float2str(existencias_almacen))
                     if existencias_almacen != 0:
                         self.wids['tv_%d' % a.id].get_model().append(
                             (pc.codigo, pc.descripcion, 
                              utils.float2str(existencias_almacen), 
                              pc.get_puid()))
                 fila.append(utils.float2str(total))
                 fila.append(pc.get_puid())
                 model.append(fila)
             txtvpro = "Recuperando existencias por almacén... (%s)" % (
                 pc.get_puid())
             i += 1
             vpro.set_valor(i/itotal, txtvpro)
     else:
         i += pclases.ProductoCompra.select().count()
     txtvpro = "Recuperando existencias por almacén..."
     vpro.ocultar()
Ejemplo n.º 24
0
 def buscar(self, boton):
     idproducto = utils.combo_get_value(self.wids['cbe_producto'])
     fechaini = utils.parse_fecha(self.wids['e_fechaini'].get_text())
     fechafin = utils.parse_fecha(self.wids['e_fechafin'].get_text())
     if idproducto > 1:
         try:
             producto = pclases.ProductoVenta.get(idproducto)
         except:
             utils.dialogo_info(titulo = "ERROR", 
                 texto = "El producto seleccionado no se encontró.\n"
                         "Probablemente fue eliminado.\nCierre y vuelva "
                         "a abrir esta ventana antes de volver a "
                         "intentarlo.", 
                 padre = self.wids['ventana'])
         else:
             partidas = producto.get_partidas(fechaini = fechaini, 
                                              fechafin = fechafin)
             if pclases.DEBUG:
                 print "consulta_marcado_ce.py::len(partidas", len(partidas)
             if self.wids['ch_gramaje'].get_active():
                 gramaje = producto.camposEspecificosRollo.gramos
                 cers = pclases.CamposEspecificosRollo.select(
                         pclases.CamposEspecificosRollo.q.gramos == gramaje)
                 for cer in cers:
                     try:
                         cerproducto = cer.productosVenta[0]
                     except IndexError, msg:
                         txt = "%sconsulta_marcado_ce::buscar -> "\
                               "El registro CER ID %d no tiene producto "\
                               "asociado. Mensaje de la excepción: %s" % (
                                 self.usuario 
                                     and self.usuario.usuario + ": " or "", 
                                 cer.id, msg)
                         print txt
                         self.logger.error(txt)
                         continue
                     if cerproducto != producto:   # Porque ya lo he 
                                                   # contado antes
                         for partida in cerproducto.get_partidas():
                             if (partida not in partidas 
                                 and fechaini 
                                     <= partida.get_fecha_fabricacion() 
                                     <= fechafin):
                                 partidas.append(partida)
             self.rellenar_tabla(partidas)
    def rellenar_vencimientos(self):
        model = self.wids['tv_cobros'].get_model()
        model.clear()
        idcliente = utils.combo_get_value(self.wids['cbe_cliente'])
        total = 0
        vencido = 0
        if idcliente > 0:
            cliente = pclases.Cliente.get(idcliente)
            for f in cliente.facturasVenta:
                total, vencido = self.agregar_factura(f, model, total, vencido)
        elif idcliente == 0:
            for cliente in pclases.Cliente.select(orderBy = "nombre"):
                for f in cliente.facturasVenta:
                    total, vencido = self.agregar_factura(f, model, total, 
                                                          vencido)

        self.wids['e_total'].set_text("%s €" % utils.float2str(total))
        self.wids['e_vencido'].set_text("%s €" % utils.float2str(vencido))
Ejemplo n.º 26
0
 def comparar_ajena(self, col):
     res = None
     try:
         valor_ventana = utils.combo_get_value(self.wids[col])
     except KeyError:
         txt_error = "categorias_laborales.py: No se pudo obtener el valor de la ventana para %s." % col
         print txt_error
         self.logger.error(txt_error)
         valor_ventana = None
     try:
         valor_campo = self.objeto._SO_getValue(col) # Es un ID -es decir, un entero-, no un objeto sqlobject.
     except KeyError:
         txt_error = "categorias_laborales.py: No se pudo obtener el valor del objeto para %s." % col
         print txt_error
         self.logger.error(txt_error)
         valor_campo = None
     res = valor_ventana == valor_campo
     return res
Ejemplo n.º 27
0
 def rellenar_tabla(self):
     idcliente = utils.combo_get_value(self.wids['cbe_cliente'])
     if idcliente >= 0:
         if idcliente != 0:
             # Filtrar el cliente.
             self.fpped, self.fppro, self.gpped, self.gppro, self.opped, self.oppro = buscar_pendiente_servir(cliente = pclases.Cliente.get(idcliente), padre = self.wids['ventana'])
         else:
             # No filtrarlo
             self.fpped, self.fppro, self.gpped, self.gppro, self.opped, self.oppro = buscar_pendiente_servir(cliente = None, padre = self.wids['ventana'])
         tvs = []
         if pclases.ProductoVenta.select().count() > 0:
             tvs += [(self.fpped, 'tv_fibra_por_pedido'), 
                     (self.fppro, 'tv_fibra_por_producto'), 
                     (self.gpped, 'tv_gtx_por_pedido'), 
                     (self.gppro, 'tv_gtx_por_producto')]
         tvs += [(self.opped, 'tv_otros_por_pedido'), 
                 (self.oppro, 'tv_otros_por_producto')]
         for datos, tv in tvs:
             self.rellenar_tv(datos, tv)
Ejemplo n.º 28
0
 def actualizar_turno(self, cbe):
     dia, idgrupo = map(int, cbe.get_name().split("_"))
     mes = int(self.wids['sp_mes'].get_value())
     anno = int(self.wids['sp_anno'].get_value())
     grupo = pclases.Grupo.get(idgrupo)
     idturno = utils.combo_get_value(cbe)
     if idturno != None:
         turno = pclases.Turno.get(idturno)
     else:
         turno = None
     laborable = [l for l in self.objeto.laborables if l.fecha.day == dia and l.grupo == grupo]
     if laborable == []:
         nuevolaborable = pclases.Laborable(turno = turno, 
                                            grupo = grupo, 
                                            calendarioLaboral = self.objeto, 
                                            fecha = mx.DateTime.DateTimeFrom(day = dia, month = mes, year = anno))
     else:
         laborable = laborable[0]
         laborable.turno = turno
     cbe.child.modify_base(gtk.STATE_NORMAL, cbe.child.get_colormap().alloc_color(get_color_turno(idturno)))
Ejemplo n.º 29
0
 def rellenar_tabla(self, items):
     """
     Rellena el model con los items de la consulta
     """
     model = self.wids['tv_datos'].get_model()
     model.clear()
     idcliente = utils.combo_get_value(self.wids['cmbe_cliente'])
     if idcliente != None:
         cliente = pclases.Cliente.get(idcliente)
         tarifa = cliente.tarifa
         for i in items:
             if tarifa:
                 precio_tarifa = tarifa.obtener_precio(i, 
                                                       sincronizar = True)
             else:
                 precio_tarifa = i.precioDefecto
             model.append((i.codigo,
                           i.descripcion,
                           utils.float2str(precio_tarifa),
                           i.get_puid()))
Ejemplo n.º 30
0
 def crear_bala(self, boton = None, peso = None):
     """
     Crea una bala del producto mostrado en pantalla e introduce 
     su información en el TreeView. El peso lo solicita en una 
     ventana de diálogo.
     Si se recibe peso, debe ser un float.
     """
     # TODO: Hacer que el peso lo tome del puerto serie y se le pase a 
     # esta función.
     producto = utils.combo_get_value(self.wids['cbe_producto'])
     if producto == None:
         utils.dialogo_info(titulo = "SELECCIONE UN PRODUCTO", 
                 texto = "Debe seleccionar un producto en el desplegable.", 
                 padre = self.wids['ventana'])
     else:
         if peso == None:
             peso = utils.dialogo_entrada(titulo = "PESO", 
                                          texto = "Introduzca peso:", 
                                          padre = self.wids['ventana'], 
                                          valor_por_defecto = "0")
             try:
                 peso = utils._float(peso)
             except ValueError:
                 utils.dialogo_info(titulo = "ERROR", 
                                    texto = "El valor tecleado %s no es correcto." % (peso), 
                                    padre = self.wids['ventana'])
                 peso = 0
         nueva_bala = self.crear_objeto_bala(producto, peso)
         if nueva_bala == None:
             utils.dialogo_info(titulo = "ERROR", 
                                texto = "La bala no se pudo crear. Inténtelo de nuevo.", 
                                padre = self.wids['ventana'])
         else:
             self.add_nueva_bala_tv(nueva_bala)
             try:
                 totpantalla = utils.parse_float(
                     self.wids['e_pantalla'].get_text())
             except:
                 totpantalla = 0.0
             totpantalla += peso
             self.rellenar_totales(totpantalla)