ElPierrito commited on
Commit
cba1684
·
verified ·
1 Parent(s): f4f4ce7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -48
app.py CHANGED
@@ -5,50 +5,28 @@ import plotly.express as px
5
  import plotly.io as pio
6
  import gradio as gr
7
 
 
8
  users = {"PM": "Promo123"}
9
  campaigns = []
10
  sessions = {}
11
 
12
- with gr.Blocks() as app:
13
- ### Startseite ###
14
- with gr.Column(visible=True) as start_page:
15
- gr.Image("/mnt/data/1595297d-4de2-4607-b7e4-94bfac1ecc49.png", label="Logo", show_label=False, scale=0.3)
16
- gr.Markdown("## 👋 Willkommen beim Promo-Planer")
17
- gr.Markdown("Planen, verwalten und visualisieren Sie Ihre Marketingkampagnen effizient.")
18
-
19
- with gr.Row():
20
- info_btn = gr.Button("ℹ️ Mehr Infos")
21
- start_to_login_btn = gr.Button("🚀 Loslegen")
22
-
23
- info_popup = gr.Textbox(value="📌 Mit diesem Tool können Sie Marketingkampagnen mit Start- und Enddatum, Budgets und Zuständigkeiten planen und verwalten. Nutzen Sie die KI-Vorschläge für Ideen und visualisieren Sie Zeitverläufe mit Gantt-Charts.", visible=False, interactive=False, lines=5)
24
-
25
- # Pop-up beim Klick auf „Mehr Infos“
26
- def show_info():
27
- return gr.update(visible=True)
28
-
29
- info_btn.click(show_info, outputs=info_popup)
30
-
31
- def process_dates(start, end):
32
- start_str = start.strftime("%Y-%m-%d")
33
- end_str = end.strftime("%Y-%m-%d")
34
- return f"Startdatum: {start_str}, Enddatum: {end_str}"
35
-
36
  def login(username, password):
37
  if users.get(username) == password:
38
  sessions["user"] = username
39
- return gr.update(visible=True), f"Willkommen {username}"
40
- return gr.update(visible=False), "❌ Login fehlgeschlagen"
41
 
 
42
  def suggest_campaign(product, goal, channel):
43
  return f"""💡 Idee:
44
  Produkt: {product}
45
  Ziel: {goal}
46
  Kanal: {channel}
47
-
48
  🚀 Vorschlag:
49
- Eine kreative {channel}-Kampagne für {product}, z. B. mit exklusiven Angeboten oder Rabattaktionen.
50
- """
51
 
 
52
  def add_campaign(name, goal, product, channel, start, end, budget, responsible):
53
  try:
54
  if isinstance(start, str):
@@ -57,6 +35,7 @@ def add_campaign(name, goal, product, channel, start, end, budget, responsible):
57
  end = datetime.datetime.strptime(end, "%Y-%m-%d")
58
  except Exception as e:
59
  return pd.DataFrame(campaigns), f"❌ Ungültiges Datum: {e}"
 
60
  campaigns.append({
61
  "Name": name,
62
  "Ziel": goal,
@@ -71,11 +50,13 @@ def add_campaign(name, goal, product, channel, start, end, budget, responsible):
71
  total = df["Budget (CHF)"].sum()
72
  return df, f"💰 Gesamtbudget: CHF {total:.2f}"
73
 
 
74
  def export_csv():
75
  path = "kampagnen.csv"
76
  pd.DataFrame(campaigns).to_csv(path, index=False)
77
  return path
78
 
 
79
  def generate_gantt():
80
  if not campaigns:
81
  return "<i>Keine Kampagnen zum Anzeigen</i>"
@@ -86,30 +67,56 @@ def generate_gantt():
86
  fig = px.timeline(df, x_start="Start", x_end="Ende", y="Name", color="Verantwortlich", title="📊 Kampagnenübersicht")
87
  fig.update_yaxes(autorange="reversed")
88
  fig.update_layout(height=400, margin=dict(l=20, r=20, t=30, b=20))
89
- html = pio.to_html(fig, full_html=False, include_plotlyjs='cdn')
90
- return html
91
  except Exception as e:
92
  return f"<b>Fehler:</b> {e}"
93
 
 
 
 
 
 
 
 
 
 
94
  with gr.Blocks() as app:
95
- gr.Markdown("## 📣 Promo-Planer mit Visualisierung")
96
- with gr.Row():
97
- user = gr.Textbox(label="Benutzer")
98
- pw = gr.Textbox(label="Passwort", type="password")
99
- login_btn = gr.Button("🔓 Login")
100
- login_status = gr.Textbox(interactive=False, visible=False)
101
- with gr.Column(visible=False) as planner:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  with gr.Row():
103
  name = gr.Textbox(label="Kampagnenname")
104
- goal = gr.Dropdown(["Verkaufsförderung","Werbung", "Event"], label="Ziel")
105
  product = gr.Textbox(label="Produkt")
106
  with gr.Row():
107
- channel = gr.Dropdown(["Tisch","Instagram", "E-Mail", "Plakat"], label="Kanal")
108
  start = Calendar(type="datetime", label="Startdatum")
109
  end = Calendar(type="datetime", label="Enddatum")
110
  with gr.Row():
111
  budget = gr.Number(label="Budget (CHF)")
112
- responsible = gr.Dropdown(["Markthalle","Marketing", "PM", "PED"], label="Verantwortlich")
113
  suggest_btn = gr.Button("💡 KI-Vorschlag")
114
  idea = gr.Textbox(label="Kampagnenidee")
115
  submit_btn = gr.Button("✅ Speichern")
@@ -119,10 +126,11 @@ with gr.Blocks() as app:
119
  gr.Markdown("### 📈 Gantt-Visualisierung")
120
  gantt_html = gr.HTML()
121
  update_chart = gr.Button("🔄 Visualisierung aktualisieren")
122
-
123
- login_btn.click(login, [user, pw], [planner, login_status])
124
- suggest_btn.click(suggest_campaign, [product, goal, channel], idea)
125
- submit_btn.click(add_campaign, [name, goal, product, channel, start, end, budget, responsible], [output_table, budget_total])
126
- export_btn.click(export_csv, outputs=None)
127
- update_chart.click(generate_gantt, outputs=gantt_html)
128
- app.launch(share=True)
 
 
5
  import plotly.io as pio
6
  import gradio as gr
7
 
8
+ # Benutzer
9
  users = {"PM": "Promo123"}
10
  campaigns = []
11
  sessions = {}
12
 
13
+ # Login-Funktion
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  def login(username, password):
15
  if users.get(username) == password:
16
  sessions["user"] = username
17
+ return gr.update(visible=False), gr.update(visible=True), f"Willkommen {username}"
18
+ return gr.update(visible=True), gr.update(visible=False), "❌ Login fehlgeschlagen"
19
 
20
+ # Vorschlag mit KI
21
  def suggest_campaign(product, goal, channel):
22
  return f"""💡 Idee:
23
  Produkt: {product}
24
  Ziel: {goal}
25
  Kanal: {channel}
 
26
  🚀 Vorschlag:
27
+ Eine kreative {channel}-Kampagne für {product}, z. B. mit exklusiven Angeboten oder Rabattaktionen."""
 
28
 
29
+ # Kampagne speichern
30
  def add_campaign(name, goal, product, channel, start, end, budget, responsible):
31
  try:
32
  if isinstance(start, str):
 
35
  end = datetime.datetime.strptime(end, "%Y-%m-%d")
36
  except Exception as e:
37
  return pd.DataFrame(campaigns), f"❌ Ungültiges Datum: {e}"
38
+
39
  campaigns.append({
40
  "Name": name,
41
  "Ziel": goal,
 
50
  total = df["Budget (CHF)"].sum()
51
  return df, f"💰 Gesamtbudget: CHF {total:.2f}"
52
 
53
+ # CSV Export
54
  def export_csv():
55
  path = "kampagnen.csv"
56
  pd.DataFrame(campaigns).to_csv(path, index=False)
57
  return path
58
 
59
+ # Gantt-Chart
60
  def generate_gantt():
61
  if not campaigns:
62
  return "<i>Keine Kampagnen zum Anzeigen</i>"
 
67
  fig = px.timeline(df, x_start="Start", x_end="Ende", y="Name", color="Verantwortlich", title="📊 Kampagnenübersicht")
68
  fig.update_yaxes(autorange="reversed")
69
  fig.update_layout(height=400, margin=dict(l=20, r=20, t=30, b=20))
70
+ return pio.to_html(fig, full_html=False, include_plotlyjs='cdn')
 
71
  except Exception as e:
72
  return f"<b>Fehler:</b> {e}"
73
 
74
+ # Mehr Infos anzeigen
75
+ def show_info():
76
+ return gr.update(visible=True)
77
+
78
+ # Navigation zur Login-Seite
79
+ def go_to_login():
80
+ return gr.update(visible=False), gr.update(visible=True)
81
+
82
+ # Gradio UI
83
  with gr.Blocks() as app:
84
+ ### STARTSEITE ###
85
+ with gr.Column(visible=True) as start_page:
86
+ gr.Image("/mnt/data/1595297d-4de2-4607-b7e4-94bfac1ecc49.png", show_label=False, scale=0.3)
87
+ gr.Markdown("## 👋 Willkommen beim Promo-Planer")
88
+ gr.Markdown("Planen, verwalten und visualisieren Sie Ihre Marketingkampagnen effizient.")
89
+ with gr.Row():
90
+ info_btn = gr.Button("ℹ️ Mehr Infos")
91
+ start_btn = gr.Button("🚀 Loslegen")
92
+ info_popup = gr.Textbox(value="📌 Mit diesem Tool können Sie Marketingkampagnen mit Start- und Enddatum, Budgets und Zuständigkeiten planen und verwalten. Nutzen Sie die KI-Vorschläge für Ideen und visualisieren Sie Zeitverläufe mit Gantt-Charts.", visible=False, interactive=False, lines=5)
93
+ info_btn.click(show_info, outputs=info_popup)
94
+ start_btn.click(go_to_login, outputs=[start_page, login_page])
95
+
96
+ ### LOGIN ###
97
+ with gr.Column(visible=False) as login_page:
98
+ gr.Markdown("## 🔐 Login")
99
+ with gr.Row():
100
+ user = gr.Textbox(label="Benutzer")
101
+ pw = gr.Textbox(label="Passwort", type="password")
102
+ login_btn = gr.Button("🔓 Login")
103
+ login_status = gr.Textbox(interactive=False)
104
+ login_btn.click(login, [user, pw], [login_page, planner_page, login_status])
105
+
106
+ ### HAUPTSEITE ###
107
+ with gr.Column(visible=False) as planner_page:
108
+ gr.Markdown("## 📣 Kampagnen-Planung")
109
  with gr.Row():
110
  name = gr.Textbox(label="Kampagnenname")
111
+ goal = gr.Dropdown(["Verkaufsförderung", "Werbung", "Event"], label="Ziel")
112
  product = gr.Textbox(label="Produkt")
113
  with gr.Row():
114
+ channel = gr.Dropdown(["Tisch", "Instagram", "E-Mail", "Plakat"], label="Kanal")
115
  start = Calendar(type="datetime", label="Startdatum")
116
  end = Calendar(type="datetime", label="Enddatum")
117
  with gr.Row():
118
  budget = gr.Number(label="Budget (CHF)")
119
+ responsible = gr.Dropdown(["Markthalle", "Marketing", "PM", "PED"], label="Verantwortlich")
120
  suggest_btn = gr.Button("💡 KI-Vorschlag")
121
  idea = gr.Textbox(label="Kampagnenidee")
122
  submit_btn = gr.Button("✅ Speichern")
 
126
  gr.Markdown("### 📈 Gantt-Visualisierung")
127
  gantt_html = gr.HTML()
128
  update_chart = gr.Button("🔄 Visualisierung aktualisieren")
129
+
130
+ suggest_btn.click(suggest_campaign, [product, goal, channel], idea)
131
+ submit_btn.click(add_campaign, [name, goal, product, channel, start, end, budget, responsible], [output_table, budget_total])
132
+ export_btn.click(export_csv, outputs=None)
133
+ update_chart.click(generate_gantt, outputs=gantt_html)
134
+
135
+ # App starten
136
+ app.launch(share=True)