Files
weval-l99/patch_ui_v69.py
2026-04-20 04:10:40 +02:00

82 lines
4.4 KiB
Python

#!/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 = '<div class="tab" data-p="lookup">🔍 Triple Lookup</div>'
new_tabs = '<div class="tab" data-p="weval">💼 WEVAL CRM Deals</div>\n <div class="tab" data-p="lookup">🔍 Quadruple Lookup</div>'
c = c.replace(old_tab, new_tabs, 1)
# 2. Add WEVAL CRM pane (before Lookup pane)
old_pane = '<!-- Lookup -->'
new_pane = '''<!-- WEVAL CRM -->
<div class="pane" id="p-weval">
<div class="grid" id="weval-stats"><div class="loading">⏳</div></div>
<div class="section">
<h2><span class="bl"></span>Deals Pipeline (6 deals, 104k€ weighted)</h2>
<table><thead><tr><th>Title</th><th>Company</th><th>Stage</th><th>Value</th><th>Prob</th><th>Partner</th></tr></thead>
<tbody id="weval-deals-body"><tr><td colspan="6" class="loading">⏳</td></tr></tbody></table>
</div>
<div class="section">
<h2><span class="bl"></span>Breakdown by Stage</h2>
<div id="weval-stages"></div>
</div>
</div>
<!-- Lookup -->'''
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 = `
<div class="card c-pri"><div class="v">${r.deals.length}</div><div class="l">Deals total</div></div>
<div class="card c-info"><div class="v">${r.companies_count}</div><div class="l">Companies</div></div>
<div class="card c-suc"><div class="v">${r.contacts_count}</div><div class="l">Contacts</div></div>
<div class="card c-warn"><div class="v">${Math.round(r.pipeline_weighted).toLocaleString()}</div><div class="l">Pipeline pondéré</div></div>
<div class="card c-neu"><div class="v">${r.won}</div><div class="l">Won</div></div>`;
const stageColors = {prospect:'#94a3b8', qualified:'#22d3ee', proposal:'#a78bfa', negotiation:'#f59e0b', won:'#10b981', lost:'#ef4444'};
document.getElementById('weval-deals-body').innerHTML = r.deals.map(d => `<tr>
<td><strong>${d.title}</strong></td>
<td>${d.company_name||'-'}</td>
<td><span class="badge" style="background:${stageColors[d.stage]||'#888'}22;color:${stageColors[d.stage]||'#888'}">${d.stage}</span></td>
<td><strong>${Number(d.value).toLocaleString()} ${d.currency}</strong></td>
<td>${d.probability}%</td>
<td>${d.partner||'-'}</td>
</tr>`).join('');
document.getElementById('weval-stages').innerHTML = r.stats_by_stage.map(s => `
<div class="circle-bar">
<div class="lbl"><span class="badge" style="background:${stageColors[s.stage]||'#888'}22;color:${stageColors[s.stage]||'#888'}">${s.stage}</span></div>
<div class="bar-wrap"><div class="bar" style="width:${(s.v / 500000)*100}%;background:${stageColors[s.stage]||'#888'}"></div></div>
<div class="val">${Number(s.v).toLocaleString()} · ${s.c} deals</div>
</div>`).join('<div style="height:6px"></div>');
}
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 ? `<h3 style=\"margin-top:14px;font-size:13px;color:#22d3ee\">📝 Form submissions"
new_result = """${r.weval_crm && r.weval_crm.length ? `<h3 style="margin-top:14px;font-size:13px;color:#f59e0b">💼 WEVAL CRM Deals (${r.weval_crm.length})</h3>
${r.weval_crm.map(d=>`<div class="mini" style="padding:8px;background:rgba(255,255,255,.02);border-radius:6px;margin-top:6px">
<strong>${d.title}</strong> · ${d.company} · Stage: ${d.stage} · ${Number(d.value).toLocaleString()} ${d.currency} · Prob: ${d.probability}% · Partner: ${d.partner||'-'}
</div>`).join('')}`:''}
${r.forms.length ? `<h3 style="margin-top:14px;font-size:13px;color:#22d3ee">📝 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)}")