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 = '
Aucun resultat
'; } else { results.forEach(function(addr) { var item = document.createElement('div'); item.style.cssText = 'padding:8px 12px;cursor:pointer;font-size:13px;border-bottom:1px solid #f3f4f6;'; var html = '' + addr.address_full + ''; if (addr.ville) html += ' ' + addr.ville + ''; item.innerHTML = html; item.addEventListener('mousedown', function(e) { e.preventDefault(); frm.set_value('address', addr.address_full); if (addr.latitude) frm.set_value('latitude', parseFloat(addr.latitude)); if (addr.longitude) frm.set_value('longitude', parseFloat(addr.longitude)); dropdown.style.display = 'none'; frm.dirty(); }); item.addEventListener('mouseenter', function() { this.style.background = '#f3f4f6'; }); item.addEventListener('mouseleave', function() { this.style.background = ''; }); dropdown.appendChild(item); }); } dropdown.style.display = 'block'; } }); }, 300); }); input.addEventListener('blur', function() { setTimeout(function() { dropdown.style.display = 'none'; }, 200); }); } """ cs = frappe.get_doc('Client Script', 'Dispatch Job Address Autocomplete') cs.enabled = 1 cs.script = SCRIPT cs.save(ignore_permissions=True) frappe.db.commit() print('Client Script fixed and re-enabled') frappe.destroy()