Spaces:
Sleeping
Sleeping
File size: 6,078 Bytes
598343f 00c07d1 598343f 8b23ace 598343f 8b23ace 598343f c6854f4 598343f 8b23ace 598343f 8b23ace 598343f cba1684 598343f 8b23ace 598343f b2ea4ec c6854f4 b2ea4ec c6854f4 598343f cb94e87 598343f 31ef7c3 598343f 8b23ace 400b909 9a1c576 418e77b 9a1c576 8b23ace 598343f e3b35b0 598343f 5f132f9 598343f 8b23ace 598343f 18cff6e 598343f 1cc5547 18cff6e 1cc5547 3d7a722 1cc5547 3d7a722 18cff6e 3d7a722 1cc5547 8b23ace 1cc5547 946c118 399ad9e 1cc5547 8b23ace 3c5c182 1cc5547 8b23ace 1cc5547 14e4292 1fa93e1 9a1c576 14e4292 1cc5547 400b909 1cc5547 e3b35b0 14e4292 1cc5547 733f5b0 1cc5547 14e4292 1cc5547 14e4292 1cc5547 400b909 14e4292 400b909 14e4292 400b909 e3b35b0 400b909 1cc5547 8b23ace 3d7a722 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import pandas as pd
from gradio_calendar import Calendar
import datetime
import plotly.express as px
import plotly.io as pio
import gradio as gr
# Benutzer und Kampagnen-Daten
users = {"PM": "Promo123"}
campaigns = []
sessions = {}
# Login-Funktion
def login(username, password):
if users.get(username) == password:
sessions["user"] = username
return gr.update(visible=False), gr.update(visible=False), gr.update(visible=True), f"Willkommen {username}"
return gr.update(), gr.update(), gr.update(), "❌ Login fehlgeschlagen"
# Kampagnenvorschlag generieren
def suggest_campaign(product, goal, channel):
return f"""💡 Idee:
Produkt: {product}
Ziel: {goal}
Kanal: {channel}
🚀 Vorschlag:
Eine kreative {channel}-Kampagne für {product}, z. B. mit exklusiven Angeboten oder Rabattaktionen."""
# Kampagne hinzufügen
def add_campaign(name, goal, product, channel, start, end, budget, responsible):
try:
if isinstance(start, str):
start = datetime.datetime.strptime(start, "%Y-%m-%d")
if isinstance(end, str):
end = datetime.datetime.strptime(end, "%Y-%m-%d")
except Exception as e:
return pd.DataFrame(campaigns), f"❌ Ungültiges Datum: {e}"
campaigns.append({
"Name": name,
"Ziel": goal,
"Produkt": product,
"Kanal": channel,
"Start": start.strftime("%Y-%m-%d"),
"Ende": end.strftime("%Y-%m-%d"),
"Budget (CHF)": budget,
"Verantwortlich": responsible
})
df = pd.DataFrame(campaigns)
total = df["Budget (CHF)"].sum()
return df, f"💰 Gesamtbudget: CHF {total:.2f}"
# Kampagne löschen
def delete_campaign_by_name(name):
global campaigns
campaigns = [c for c in campaigns if c["Name"] != name]
df = pd.DataFrame(campaigns)
total = df["Budget (CHF)"].sum() if not df.empty else 0
names = [c["Name"] for c in campaigns]
return df, f"💰 Gesamtbudget: CHF {total:.2f}", gr.update(choices=names, value=None)
# CSV-Export
def export_csv():
df = pd.DataFrame(campaigns)
path = "kampagnen.csv"
df.to_csv(path, index=False, sep=";", encoding="utf-8-sig")
return path
# Gantt-Diagramm generieren
def generate_gantt():
if not campaigns:
return "<i>Keine Kampagnen zum Anzeigen</i>"
df = pd.DataFrame(campaigns)
df["Start"] = pd.to_datetime(df["Start"])
df["Ende"] = pd.to_datetime(df["Ende"])
try:
fig = px.timeline(df, x_start="Start", x_end="Ende", y="Name", color="Verantwortlich", title="📊 Kampagnenübersicht")
fig.update_yaxes(autorange="reversed")
fig.update_layout(height=400, margin=dict(l=20, r=20, t=30, b=20))
# Diagramm als HTML exportieren
html = pio.to_html(fig, full_html=False, include_plotlyjs='cdn')
return html
except Exception as e:
return f"<b>Fehler:</b> {e}"
# Gradio-App
with gr.Blocks() as app:
# Startseite
with gr.Column(visible=True) as start_page:
gr.Image("LA_black.png", label="", show_label=False, interactive=False)
gr.Markdown("# 👋 Willkommen beim Promo-Planer")
start_btn = gr.Button("➡️ Starten")
# Login-Seite
with gr.Column(visible=False) as login_page:
gr.Markdown("## 🔐 Login")
user = gr.Textbox(label="Benutzer")
pw = gr.Textbox(label="Passwort", type="password")
login_btn = gr.Button("Login")
login_status = gr.Textbox(interactive=False, visible=False)
# Kampagnenplaner-Seite
with gr.Column(visible=False) as planner_page:
gr.Markdown("## 📣 Kampagnenplanung")
with gr.Row():
name = gr.Textbox(label="Kampagnenname")
goal = gr.Dropdown(["Verkaufsförderung", "Werbung", "Event"], label="Ziel")
product = gr.Textbox(label="Produkt")
with gr.Row():
channel = gr.Dropdown(["Tisch", "Instagram", "E-Mail", "Plakat"], label="Kanal")
start = Calendar(type="date", label="Startdatum")
end = Calendar(type="date", label="Enddatum")
with gr.Row():
budget = gr.Number(label="Budget (CHF)")
responsible = gr.Dropdown(["Markthalle", "Marketing", "PM", "PED"], label="Verantwortlich")
suggest_btn = gr.Button("💡 KI-Vorschlag")
idea = gr.Textbox(label="Kampagnenidee")
submit_btn = gr.Button("✅ Speichern")
delete_name = gr.Dropdown(label="Kampagne zum Löschen", choices=[], interactive=True)
delete_btn = gr.Button("🗑️ Kampagne löschen")
output_table = gr.Dataframe()
budget_total = gr.Textbox(label="Budget Gesamt", interactive=False)
export_btn = gr.Button("📤 Export CSV")
csv_file = gr.File(label="📄 Herunterladen", interactive=False)
gr.Markdown("### 📈 Gantt-Visualisierung")
gantt_html = gr.HTML()
update_chart = gr.Button("🔄 Visualisierung aktualisieren")
# Seitenwechsel
def go_to_login():
return gr.update(visible=False), gr.update(visible=True)
def go_to_start():
return gr.update(visible=True), gr.update(visible=False)
# Button-Logik
start_btn.click(go_to_login, outputs=[start_page, login_page])
login_btn.click(login, [user, pw], outputs=[start_page, login_page, planner_page, login_status])
suggest_btn.click(suggest_campaign, [product, goal, channel], idea)
# Speichern + Dropdown aktualisieren
submit_btn.click(
add_campaign,
[name, goal, product, channel, start, end, budget, responsible],
[output_table, budget_total]
).then(
lambda: gr.update(choices=[c["Name"] for c in campaigns], value=None),
None,
delete_name
)
# Kampagne löschen
delete_btn.click(delete_campaign_by_name, [delete_name], [output_table, budget_total, delete_name])
# CSV Export
export_btn.click(export_csv, outputs=csv_file)
# Gantt aktualisieren
update_chart.click(generate_gantt, outputs=gantt_html)
# App starten
app.launch(share=True)
|