예제 #1
0
 def actualizar_porcentaje_tarifa(self, celleditable, path, nuevotexto):
     """
     Se recibe la celda que ha cambiado.
     El contenido se toma como nuevo precio para la tarifa
     actual y el producto de la fila a la que pertenezca
     la fila.
     """
     idprecio = self.wids['tabla_productos'].get_model()[path][-1]
     precio = pclases.Precio.get(idprecio)
     producto = precio.producto
     tarifa = self.objeto
       # OJO: No se debería devolver ni más ni menos de un producto.
     try:
         porcentaje = utils.parse_porcentaje(nuevotexto, True)
     except ValueError:
         utils.dialogo_info(titulo = 'VALOR INCORRECTO', 
                            texto = 'El texto tecleado (%s) no es un porcentaje correcto' % (nuevotexto), 
                            padre = self.wids['ventana'])
     else:
         nuevoprecio = producto.preciopordefecto * (1 + porcentaje)
         tarifa.asignarTarifa(producto, float(nuevoprecio))
         #self.actualizar_ventana()
         model = self.wids['tabla_productos'].get_model()
         model[path][-3] = precio.precio
         model[path][-2] = "%s %%" % (porcentaje * 100)
예제 #2
0
 def cambiar_descuento_ldc(self, cell, path, texto):
     try:
         descuento = utils.parse_porcentaje(texto, True)
     except:
         utils.dialogo_info(titulo = "ERROR", 
                            texto = "La cantidad %s no es un número válido." % (texto), 
                            padre = self.wids['ventana'])
         return
     model = self.wids['tv_ldvs'].get_model()
     idldc = model[path][-1]
     ldc = pclases.LineaDeCompra.get(idldc)
     ldc.descuento = descuento
     self.rellenar_widgets()
예제 #3
0
 def cambiar_descuento_srv(self, cell, path, texto):
     """
     Cambia el descuento del servicio.
     """
     try:
         descuento = utils.parse_porcentaje(texto, fraccion = True)
     except ValueError:
         utils.dialogo_info(titulo = "ERROR", 
                            texto = 'El texto "%s" no es un número.'%texto, 
                            padre = self.wids['ventana'])
     else:
         model = self.wids['tv_servicios'].get_model()
         srv = pclases.Servicio.get(model[path][-1])
         srv.descuento = descuento
         self.rellenar_tablas()
예제 #4
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.
     """
     # Desactivo el notificador momentáneamente
     self.objeto.notificador.activar(lambda: None)
     # Actualizo los datos del objeto
     for colname in self.dic_campos:
         col = self.clase._SO_columnDict[colname]
         try:
             valor_ventana = self.leer_valor(col, self.dic_campos[colname])
             if valor_ventana == -1 and colname == "comercialID":
                 valor_ventana = None
             setattr(self.objeto, colname, valor_ventana)
         except (ValueError, mx.DateTime.RangeError, TypeError):
             if colname == "numpresupuesto":
                 txt = self.wids[self.dic_campos[colname]].get_text()
                 if txt.strip() != "":
                     utils.dialogo_info(titulo = "NÚMERO INCORRECTO", 
                             texto = "El texto «%s» es incorrecto."\
                                        "\n\nDebe usar solo números." % txt, 
                             padre = self.wids['ventana'])
                 else:
                     setattr(self.objeto, colname, None)
             pass    # TODO: Avisar al usuario o algo. El problema es que no hay una forma "limpia" de obtener el valor que ha fallado.
     try:
         dto = utils.parse_porcentaje(self.wids['e_descuento'].get_text(), 
                                      fraccion = True)
     except (TypeError, ValueError):
         utils.dialogo_info(titulo = "VALOR INCORRECTO", 
                            texto = "Escriba un valor correcto par"\
                                    "a el porcentaje de descuento global", 
                            padre = self.wids['ventana'])
     else:
         self.objeto.descuento = dto
     # Fuerzo la actualización de la BD y no espero a que SQLObject lo haga por mí:
     self.objeto.syncUpdate()
     self.objeto.sync()
     # Vuelvo a activar el notificador
     self.objeto.notificador.activar(self.aviso_actualizacion)
     self.actualizar_ventana()
     self.wids['b_guardar'].set_sensitive(False)
예제 #5
0
파일: adapter.py 프로젝트: pacoqueen/upy
def convertir_a_flotante(valor, vdefecto = 0.0, col = None):
    """
    Devuelve el valor por defecto "vdefecto" en caso de excepción.
    Antes de lanzarla, prueba como número flotante y como flotante con 
    símbolo de porcentaje.
    Fuerza la comprobación de porcentaje si col es distinto de None y 
    está entre las columnas a tratar así.
    """
    from utils import _float, parse_porcentaje
    try:
        if col != None and col.name in NOMBRES_COLUMNAS_PORCENTAJE:
            raise Exception, "Forzando comprobación de porcentaje."
        return _float(valor)
    except:
        try:
            # 5 decimales de precisión es bastante para un porcentaje. Es lo 
            # que uso también para mostrar en pantalla (ver el getter arriba).
            return round(parse_porcentaje(valor, fraccion = True), 5)
        except:
            return vdefecto
예제 #6
0
    def cambiar_precio_tarifa(self, cell, path, texto, numcol):
        # Chequeo permiso de escritura para camibar precios, existencias y demás:
        try:
            ventana = pclases.Ventana.select(pclases.Ventana.q.fichero == "productos.py")[0]
            if self.usuario and (not self.usuario.get_permiso(ventana).escritura or self.usuario.nivel >= 2):
                utils.dialogo_info(titulo = "USUARIO SIN PRIVILEGIOS", 
                                   texto = "Necesita permiso de escritura para modificar el precio.", 
                                   padre = self.wids['ventana'])
                return
        except IndexError:
            if self.usuario and self.usuario.nivel >= 2:
                utils.dialogo_info(titulo = "USUARIO SIN PRIVILEGIOS", 
                                   texto = "No tiene permisos suficientes para modificar el precio.", 
                                   padre = self.wids['ventana'])
                return

        model = self.wids['tv_datos'].get_model()
        id = model[path][-1]
        if "PC" in model[path][0]:
            producto = pclases.ProductoCompra.get(id)
        elif "PV" in model[path][0]:
            producto = pclases.ProductoVenta.get(id)
        else:
            return
        try:
            precio = utils._float(texto)
        except ValueError:
            try:
                porcentaje = utils.parse_porcentaje(texto, True)
                precio = producto.precioDefecto * (1.0 + porcentaje) * 1.18
            except ValueError:
                utils.dialogo_info(titulo = "ERROR DE FORMATO", 
                                   texto = "El texto %s no es correcto." % (texto), 
                                   padre = self.wids['ventana'])
                return
        tarifa = self.__tarifas[numcol - 5]
        precio_tarifa, porcentaje = calcular_precio(precio, producto.precioDefecto)
        tarifa.asignarTarifa(producto, precio_tarifa)
        precio_tarifa *= 1.18
        model[path][numcol] = "%s (%s %%)" % (utils.float2str(precio_tarifa), utils.float2str(porcentaje, 1))
예제 #7
0
 def leer_valor(self, widget):
     """
     Intenta leer el valor como si fuera un Entry. Si no lo 
     consigue lo hace suponiendo que es un TextView.
     Devuelve el valor leído _como cadena_.
     """
     try:
         if isinstance(widget, gtk.CheckButton): 
             res = widget.get_active()
         elif hasattr(widget, "child"):
             res = widget.child.get_text()
         else:
             res = widget.get_text()
             if "iva" in widget.name:    # es feo, lo sé.
                 try:
                     res = utils.parse_porcentaje(res, fraccion = True)
                 except ValueError:
                     res = 0.18
     except AttributeError:
         buffer = widget.get_buffer()
         res = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())
     return res
예제 #8
0
 def cambiar_descuento_ldp(self, cell, path, texto):
     """
     Cambia el descuento de la LDP conforme al texto recibido.
     """
     try:
         descuento = utils.parse_porcentaje(texto, fraccion = True)
     except:
         utils.dialogo_info(titulo = "ERROR", 
                            texto = 'El texto "%s" no es un número válido.' 
                                 % (texto), 
                            padre = self.wids['ventana'])
     else:
         model = self.wids['tv_ldps'].get_model()
         ldp = pclases.LineaDePedido.get(model[path][-1])
         if ldp.descuento != descuento:
             ldp.descuento = descuento
             if ldp.get_lineas_de_venta() != [] \
                and utils.dialogo(
                     titulo = "¿CAMBIAR PRODUCTOS SERVIDOS?", 
                              texto = """
             Al cambiar el descuento de una parte del presupuesto ofertado, 
             se cambian automáticamente los precios de los pedidos      
             involucrados. También puede cambiar los albaranes y facturas 
             si el pedido ya ha sido servido. 
                                                                         
             ¿Desea cambiar el descuento de todos los artículos servidos   
             de este producto?                                         
                                                                      
             Si lo hace, se cambiará también en la factura en caso de 
             que se haya facturado el albarán o albaranes             
             correspondientes.                                         
             """, 
                     padre = self.wids['ventana']):
                 for ldv in ldp.get_lineas_de_venta():
                     ldv.descuento = ldp.descuento
         self.rellenar_tablas()