Пример #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)
 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):
     model = self.wids['tv_servicios'].get_model()
     idsrv = model[path][-1]
     srv = pclases.Servicio.get(idsrv)
     try:
         try:
             srv.descuento = utils.parse_porcentaje(texto)
         except ValueError:
             srv.descuento = 0
         if srv.descuento > 1.0:
             srv.descuento /= 100.0
         self.rellenar_servicios()
         self.rellenar_vencimientos()
             # Para que verifique si los totales coinciden
     except:
         utils.dialogo_info(titulo = "ERROR DE FORMATO", 
                            texto = 'Formato numérico incorrecto', 
                            padre = self.wids['ventana'])
Пример #4
0
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 formularios.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
Пример #5
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()
        ide = model[path][-1]
        if "PC" in model[path][0]:
            producto = pclases.ProductoCompra.get(ide)
        elif "PV" in model[path][0]:
            producto = pclases.ProductoVenta.get(ide)
        else:
            return
        try:
            precio = utils.parse_float(texto)
        except ValueError:
            try:
                porcentaje = utils.parse_porcentaje(texto, True)
                precio = producto.precioDefecto * (1.0 + porcentaje) * 1.21
            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.21
        model[path][numcol] = "%s (%s %%)" % (utils.float2str(precio_tarifa), utils.float2str(porcentaje, 1))
Пример #6
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.21
     except AttributeError:
         buff = widget.get_buffer()
         res = buff.get_text(buff.get_start_iter(), buff.get_end_iter())
     return res
Пример #7
0
     minimo = utils._float(minimo)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para mínimo: %s" % (msg, minimo)
     minimo = 0.0
 try:
     existencias = utils._float(existencias)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para existencias: %s" % (msg, existencias)
     existencias = 0.0
 try:
     preciocosto = utils._float(preciocosto)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para preciocosto: %s" % (msg, preciocosto)
     preciocosto = 0.0
 try:
     ganancia = utils.parse_porcentaje(ganancia, True)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para ganancia: %s" % (msg, ganancia)
     ganancia = 0.0
 try:
     tarifa1 = utils.parse_porcentaje(tarifa1, True)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para tarifa1: %s" % (msg, tarifa1)
     tarifa1 = 0.0
 try:
     tarifa2 = utils.parse_porcentaje(tarifa2, True)
 except ValueError, msg:
     print "Excepción capturada: %s. Valor erróneo para tarifa2: %s" % (msg, tarifa2)
     tarifa2 = 0.0
 try:
     tarifa3 = utils.parse_porcentaje(tarifa3, True)