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()
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'])
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
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))
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
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)