def tostr(v): if isinstance(v, float): v = utils.float2str(v) elif isinstance(v, int): v = utils.int2str(v) elif isinstance(v, (list, tuple)): # Recursividad, divino tesoro... v = sanitize(v) return v
def comprobar_dni(self): """ Comprueba la letra del DNI o la asigna en caso de que el texto del entry tenga formato de DNI y no tenga letra. """ adaptadores = self.adaptador.get_adaptadores() col = self.objeto.sqlmeta.columns['dni'] adaptador = adaptadores[col] entry = adaptador['widget'] valor = entry.get_text() import re dni = "[0-9][0-9][\.,]?[0-9]{3}[\.,]?[0-9]{3}[-]?[a-z]?" rexp = re.compile(dni) if rexp.findall(valor): dninum = "".join([i for i in valor if i.isdigit()]) dnivalido = utils.calcularNIF(dninum) entry.set_text(utils.int2str("1" + dninum)[1:] + "-" + dnivalido)
def rellenar_treeviews(self): almacenid = utils.combo_get_value(self.wids['cb_almacen']) if almacenid != 0: almacen = pclases.Almacen.get(almacenid) else: almacen = None vpro = VentanaProgreso(padre = self.wids['ventana']) vpro.mostrar() totales = {'kgA': {}, 'kgB': {}, 'kgC': {}, 'kgTotal': {}, 'mA': {}, 'mB': {}, 'mC': {}, 'mTotal': {}, '#A': {}, '#B': {}, '#C': {}, '#Total': {} } i = 0.0 tot = sum([len(self.productos[k]) for k in self.productos.keys()]) for nombre_tv in ("tv_fibra", "tv_gtx", "tv_cemento"): tv = self.wids[nombre_tv] model = tv.get_model() model.clear() tipo = nombre_tv.split("_")[-1] for pv in self.productos[tipo]: i += 1 vpro.set_valor(i / tot, "Contando existencias de %s (%d) [%s]..." % ( pv.nombre, pv.id, tipo)) kgA = pv.get_stock_A(almacen = almacen) kgB = pv.get_stock_B(almacen = almacen) kgC = pv.get_stock_C(almacen = almacen) bultosA = pv.get_existencias_A(almacen = almacen) bultosB = pv.get_existencias_B(almacen = almacen) bultosC = pv.get_existencias_C(almacen = almacen) total_kg = pv.get_stock(almacen = almacen, contar_defectuosos = True) total_bultos = pv.get_existencias(almacen = almacen, contar_defectuosos = True) if pclases.DEBUG: assert round(kgA + kgB + kgC) == round( total_kg), pv.puid # XXX # Esto de arriba, aunque mezcle metros con kilos, no # debe fallar. Ya que en el total de un producto C, # A y B se quedan a 0.0. Y al contrario. Si el producto # no es C, A y B valdrán algo y C siempre es 0. assert round(bultosA + bultosB + bultosC) == round( total_bultos), pv.puid # XXX if nombre_tv != "tv_gtx": fila = [pv.descripcion, utils.float2str(kgA), utils.int2str(bultosA), utils.float2str(kgB), utils.int2str(bultosB), utils.float2str(kgC), utils.int2str(bultosC), utils.float2str(total_kg), utils.int2str(total_bultos), pv.puid] actualizar_totales(totales, tipo, kgA, kgB, kgC, total_kg, bultosA, bultosB, bultosC, total_bultos) else: # Los metros ya los tenía calculados. Es lo que devuelve # el get_stock. Solo que arriba lo he llamado kg* metrosA = kgA metrosB = kgB metrosC = "N/A" # No aplicable. Solo se mide en kilos. kilosA = pv.get_stock_kg_A(almacen = almacen) kilosB = pv.get_stock_kg_B(almacen = almacen) kilosC = kgC # Ya estaba calculado total_kilos = kilosA + kilosB + kilosC total_metros = metrosA + metrosB # total bultos ya se calcula arriba. fila = [pv.descripcion, utils.float2str(kilosA), utils.float2str(metrosA), utils.int2str(bultosA), utils.float2str(kilosB), utils.float2str(metrosB), utils.int2str(bultosB), utils.float2str(kilosC), metrosC, # No es aplicable. Solo kg. No m² en C. utils.int2str(bultosC), utils.float2str(total_kilos), utils.float2str(total_metros), utils.int2str(total_bultos), pv.puid] actualizar_totales(totales, tipo, kilosA, kilosB, kilosC, total_kilos, bultosA, bultosB, bultosC, total_bultos, metrosA, metrosB, 0.0, total_metros) # m² de C es "N/A". Le paso un 0 aquí para que no pete. model.append(fila) vpro.ocultar() return totales