Explorer
/proc/thread-self/root/tmp/patch_customer_project_metrics.py
← Zurück ↓ Download
from pathlib import Path
p=Path('/opt/struktur/projects-dashboard/app.py')
s=p.read_text()
metrics={
"sop-agent-system":("23–48 h","schnell · Pilot vorhanden","9,5/10","Setup + 150–500 €/Monat"),
"prozess-human-loop":("40–80 h","mittel","9,0/10","Projekt + 200–1.000 €/Monat"),
"ai-rezeptionist-lead-agent":("30–60 h Standard","mittel · Vorarbeit vorhanden","8,5/10","Setup + 250–800 €/Monat"),
"skill-library-orchestration":("80–200 h","aufwendig · parallel","strategisch 10/10","indirekter Umsatzhebel"),
"content-landingpage-service":("20–50 h","schnell","7,5/10","300–1.000 €/Monat")}
for pid,vals in metrics.items():
    marker=f"        'id': '{pid}',"
    start=s.index(marker)
    desc_end=s.index("\n        'fields': {", start)
    block=s[start:desc_end]
    if "'metrics':" not in block:
        insert="\n        'metrics': {'Aufbau': '%s', 'Umsetzung': '%s', 'Potenzial': '%s', 'Erlös': '%s'}," % vals
        s=s[:desc_end]+insert+s[desc_end:]
css_old='.desc{font-size:.85rem;color:#94a3b8;line-height:1.5;min-height:3.8rem}.btn{display:inline-block;'
css_new='.desc{font-size:.85rem;color:#94a3b8;line-height:1.5;min-height:3.8rem}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:.55rem;margin-top:1rem}.metric{background:#0f1420;border:1px solid #263044;border-radius:8px;padding:.6rem}.metric-label{display:block;color:#64748b;font-size:.68rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.2rem}.metric-value{display:block;color:#e2e8f0;font-size:.8rem;font-weight:650;line-height:1.3}.plan-note{margin-top:.7rem;color:#64748b;font-size:.7rem}.btn{display:inline-block;'
s=s.replace(css_old,css_new,1)
html_old='<div class="desc">{{p.desc}}</div><a class="btn" href="/kundenprojekte/{{p.id}}">Details</a>'
html_new='<div class="desc">{{p.desc}}</div><div class="metrics">{% for label,value in p.metrics.items() %}<div class="metric"><span class="metric-label">{{label}}</span><span class="metric-value">{{value}}</span></div>{% endfor %}</div><div class="plan-note">Planwerte zur internen Bewertung</div><a class="btn" href="/kundenprojekte/{{p.id}}">Details</a>'
if html_old not in s: raise SystemExit('card html marker missing')
s=s.replace(html_old,html_new,1)
p.write_text(s)
print('PATCH_OK')