#!/usr/bin/env python3 path = "/var/www/html/wevia-ia/wevia-admin-crm-v68.php" with open(path, "r", encoding="utf-8") as f: c = f.read() if 'data-p="weval"' in c: print("ALREADY_PATCHED") exit(0) # 1. Add WEVAL CRM tab (between Twenty and Lookup) old_tab = '
🔍 Triple Lookup
' new_tabs = '
💼 WEVAL CRM Deals
\n
🔍 Quadruple Lookup
' c = c.replace(old_tab, new_tabs, 1) # 2. Add WEVAL CRM pane (before Lookup pane) old_pane = '' new_pane = '''

Deals Pipeline (6 deals, 104k€ weighted)

TitleCompanyStageValueProbPartner

Breakdown by Stage

''' c = c.replace(old_pane, new_pane, 1) # 3. Add loadWeval to loadPane switcher and loadWeval function old_loader = "if (p === 'twenty') loadTwenty();" new_loader = """if (p === 'twenty') loadTwenty(); if (p === 'weval') loadWeval();""" c = c.replace(old_loader, new_loader, 1) # 4. Add loadWeval function (before doLookup) old_doLookup = "async function doLookup() {" new_weval_fn = """async function loadWeval() { const r = await fetch(API + '&action=weval_crm_deals').then(r => r.json()); document.getElementById('weval-stats').innerHTML = `
${r.deals.length}
Deals total
${r.companies_count}
Companies
${r.contacts_count}
Contacts
${Math.round(r.pipeline_weighted).toLocaleString()}
Pipeline pondéré
${r.won}
Won
`; const stageColors = {prospect:'#94a3b8', qualified:'#22d3ee', proposal:'#a78bfa', negotiation:'#f59e0b', won:'#10b981', lost:'#ef4444'}; document.getElementById('weval-deals-body').innerHTML = r.deals.map(d => ` ${d.title} ${d.company_name||'-'} ${d.stage} ${Number(d.value).toLocaleString()} ${d.currency} ${d.probability}% ${d.partner||'-'} `).join(''); document.getElementById('weval-stages').innerHTML = r.stats_by_stage.map(s => `
${s.stage}
${Number(s.v).toLocaleString()} · ${s.c} deals
`).join('
'); } async function doLookup() {""" c = c.replace(old_doLookup, new_weval_fn, 1) # 5. Add weval_crm section to doLookup result (after forms) old_result = "${r.forms.length ? `

📝 Form submissions" new_result = """${r.weval_crm && r.weval_crm.length ? `

💼 WEVAL CRM Deals (${r.weval_crm.length})

${r.weval_crm.map(d=>`
${d.title} · ${d.company} · Stage: ${d.stage} · ${Number(d.value).toLocaleString()} ${d.currency} · Prob: ${d.probability}% · Partner: ${d.partner||'-'}
`).join('')}`:''} ${r.forms.length ? `

📝 Form submissions""" c = c.replace(old_result, new_result, 1) with open(path, "w", encoding="utf-8") as f: f.write(c) print(f"PATCHED ok - size now {len(c)}")