import frappe, os os.chdir('/home/frappe/frappe-bench') frappe.init('frontend', sites_path='/home/frappe/frappe-bench/sites') frappe.connect() ss = frappe.get_doc('Server Script', 'Address Autocomplete') ss.script = """ query = frappe.form_dict.get("q", "") if not query or len(query) < 3: frappe.response["results"] = [] else: words = query.strip().split() conditions = [] params = {} for i, w in enumerate(words): key = "w" + str(i) params[key] = "%" + w + "%" conditions.append( "(f_unaccent(address_full) ILIKE f_unaccent(%({k})s) " "OR f_unaccent(rue) ILIKE f_unaccent(%({k})s) " "OR f_unaccent(ville) ILIKE f_unaccent(%({k})s) " "OR numero ILIKE %({k})s)".format(k=key) ) where = " AND ".join(conditions) results = frappe.db.sql( "SELECT address_full, ville, code_postal, latitude, longitude " "FROM rqa_addresses " "WHERE " + where + " " "ORDER BY " "CASE WHEN code_postal LIKE 'J0L%%' THEN 0 WHEN code_postal LIKE 'J0S%%' THEN 1 ELSE 2 END, " "length(address_full) " "LIMIT 10", params, as_dict=True) frappe.response["results"] = results """ ss.save(ignore_permissions=True) frappe.db.commit() print('Fixed: search across address_full, rue, ville, numero') frappe.destroy()