def sugerir_productos(self, txt): """ Intenta sugerir productos según el corrector Norving. """ dirutils = os.path.join("..", "utils") if dirutils not in sys.path: sys.path.append(dirutils) import spelling palabras = [] for pc in pclases.ProductoCompra.select(): palabras.append(pc.codigo.lower()) palabras.append(pc.descripcion.lower()) for pc in pclases.ProductoVenta.select(): palabras.append(pc.codigo.lower()) palabras.append(pc.descripcion.lower()) palabras = " ".join(palabras) corrector = spelling.SpellCorrector(palabras) sugerencia = corrector.correct(txt.lower()) if sugerencia != txt: res = utils.dialogo(titulo = "SUGERENCIA DE BÚSQUEDA", texto="No se encontró «%s», ¿tal vez quiso decir «%s»?" % ( txt, sugerencia), padre = self.wids['ventana']) if res: res = ([p for p in utils.buscar_productos_compra(sugerencia)]+ [p for p in utils.buscar_productos_venta(sugerencia)]) else: res = [] else: raise ValueError, "Sin alternativas que sugerir." return res
def pedir_producto_compra(self): """ Devuelve UN producto de compra obtenido a partir de una búsqueda, etc. """ producto = None a_buscar = utils.dialogo_entrada(titulo = "BUSCAR MATERIAL", texto = "Introduzca texto a buscar en productos de compra:", padre = self.wids['ventana']) if a_buscar != None: resultados = utils.buscar_productos_compra(a_buscar) if resultados.count() > 1: ## Refinar los resultados: filas_res = [] for r in resultados: filas_res.append((r.id, r.codigo, r.descripcion)) idproducto = utils.dialogo_resultado(filas_res, titulo = 'Seleccione producto', cabeceras = ('ID Interno', 'Código', 'Descripción'), padre = self.wids['ventana']) if idproducto < 0: return producto = pclases.ProductoCompra.get(idproducto) # id es clave primaria, esta comprensión debería devolver un único producto elif resultados.count() < 1: ## La búsqueda no produjo resultados. utils.dialogo_info('SIN RESULTADOS', 'La búsqueda no produjo ningún resultado.\nIntente una ' 'búsqueda menos restrictiva usando un texto más corto.', padre = self.wids['ventana']) return None else: producto = resultados[0] return producto
def buscar(self, boton): a_buscar = self.wids['e_buscar'].get_text() productos = [] for p in utils.buscar_productos_compra(a_buscar): productos.append(p) for p in utils.buscar_productos_venta(a_buscar): productos.append(p) if not len(productos) and len(a_buscar): # Busca algo de texto pero no se encontró try: productos = self.sugerir_productos(a_buscar) except (ImportError, ValueError): utils.dialogo_info(titulo = "SIN RESULTADOS", texto = "No se encontraron productos con el" "texto «%s»." % a_buscar, padre = self.wids['ventana']) self.rellenar_tabla(productos)