import frappe, os os.chdir('/home/frappe/frappe-bench') frappe.init('frontend', sites_path='/home/frappe/frappe-bench/sites') frappe.connect() SCRIPT = """ frappe.ui.form.on('Dispatch Job', { setup(frm) { frm._addr_bound = false; }, refresh(frm) { if (frm._addr_bound) return; frappe.run_serially([ () => frappe.timeout(1), () => { try { _bind_address_autocomplete(frm); } catch(e) { console.warn('Address autocomplete deferred:', e.message); } } ]); } }); function _bind_address_autocomplete(frm) { var ctrl = frm.fields_dict && frm.fields_dict.address; if (!ctrl) return; var input = ctrl.input || (ctrl.$input && ctrl.$input[0]); if (!input) return; if (frm._addr_bound) return; frm._addr_bound = true; var dropdown = document.createElement('div'); dropdown.style.cssText = 'position:absolute;z-index:1000;background:#fff;border:1px solid #d1d5db;border-radius:6px;max-height:250px;overflow-y:auto;width:100%;box-shadow:0 4px 12px rgba(0,0,0,0.15);display:none;'; input.parentElement.style.position = 'relative'; input.parentElement.appendChild(dropdown); var timer = null; input.addEventListener('input', function() { clearTimeout(timer); var q = this.value.trim(); if (q.length < 3) { dropdown.style.display = 'none'; return; } timer = setTimeout(function() { frappe.call({ method: 'search_address', args: { q: q }, callback: function(r) { dropdown.innerHTML = ''; var results = (r && r.results) || (r && r.message && r.message.results) || []; if (!results.length) { dropdown.innerHTML = '