Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -29,7 +29,8 @@ def load_tab(sheet_name):
|
|
29 |
def load_field_sales():
|
30 |
df = load_tab("Field Sales")
|
31 |
if df.empty:
|
32 |
-
return pd.DataFrame(columns=["Date", "Rep", "Order Value", "Order Received", "Current/Prospect
|
|
|
33 |
df['Date'] = pd.to_datetime(df.get("Date", datetime.today()), errors='coerce')
|
34 |
df = df.dropna(subset=["Date"])
|
35 |
df['DateStr'] = df['Date'].dt.date.astype(str)
|
@@ -45,12 +46,13 @@ def generate_summary(date_str):
|
|
45 |
df = load_field_sales()
|
46 |
if df.empty:
|
47 |
return pd.DataFrame([["No data"]], columns=["Message"]), pd.DataFrame(), pd.DataFrame()
|
48 |
-
|
49 |
all_reps = sorted(df['Rep'].dropna().unique())
|
|
|
50 |
day_df = df[df['DateStr'] == date_str]
|
51 |
total_visits = day_df.groupby("Rep").size().reset_index(name="Total Visits")
|
52 |
|
53 |
-
col = "Current/Prospect
|
54 |
if col not in df.columns:
|
55 |
df[col] = ""
|
56 |
|
@@ -72,6 +74,7 @@ def get_order_summary(date_str):
|
|
72 |
if df.empty:
|
73 |
return pd.DataFrame([["No data"]], columns=["Message"])
|
74 |
|
|
|
75 |
day_df = df[df['DateStr'] == date_str]
|
76 |
if "Order Received" not in df.columns:
|
77 |
df["Order Received"] = ""
|
@@ -105,7 +108,6 @@ def get_telesales_summary():
|
|
105 |
|
106 |
df["Date"] = pd.to_datetime(df.get("Date", datetime.today()), errors='coerce')
|
107 |
df["DateStr"] = df["Date"].dt.date.astype(str)
|
108 |
-
|
109 |
grouped = df.groupby(["Rep Email", "DateStr"]).size().reset_index(name="Calls Made")
|
110 |
return grouped.rename(columns={"Rep Email": "Rep"})
|
111 |
|
@@ -200,6 +202,12 @@ with gr.Blocks() as app:
|
|
200 |
users_refresh = gr.Button("π Refresh Users")
|
201 |
users_refresh.click(fn=get_users, outputs=users_table)
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
def do_login(user, pw):
|
204 |
if VALID_USERS.get(user) == pw:
|
205 |
return gr.update(visible=False), gr.update(visible=True), ""
|
@@ -208,4 +216,4 @@ with gr.Blocks() as app:
|
|
208 |
|
209 |
login_btn.click(fn=do_login, inputs=[email, password], outputs=[login_ui, main_ui, login_msg])
|
210 |
|
211 |
-
app.launch()
|
|
|
29 |
def load_field_sales():
|
30 |
df = load_tab("Field Sales")
|
31 |
if df.empty:
|
32 |
+
return pd.DataFrame(columns=["Date", "Rep", "Order Value", "Order Received", "Current/Prospect Customer", "Customer Type & Status", "DateStr"])
|
33 |
+
|
34 |
df['Date'] = pd.to_datetime(df.get("Date", datetime.today()), errors='coerce')
|
35 |
df = df.dropna(subset=["Date"])
|
36 |
df['DateStr'] = df['Date'].dt.date.astype(str)
|
|
|
46 |
df = load_field_sales()
|
47 |
if df.empty:
|
48 |
return pd.DataFrame([["No data"]], columns=["Message"]), pd.DataFrame(), pd.DataFrame()
|
49 |
+
|
50 |
all_reps = sorted(df['Rep'].dropna().unique())
|
51 |
+
date_str = date_str.strip()
|
52 |
day_df = df[df['DateStr'] == date_str]
|
53 |
total_visits = day_df.groupby("Rep").size().reset_index(name="Total Visits")
|
54 |
|
55 |
+
col = "Current/Prospect Customer"
|
56 |
if col not in df.columns:
|
57 |
df[col] = ""
|
58 |
|
|
|
74 |
if df.empty:
|
75 |
return pd.DataFrame([["No data"]], columns=["Message"])
|
76 |
|
77 |
+
date_str = date_str.strip()
|
78 |
day_df = df[df['DateStr'] == date_str]
|
79 |
if "Order Received" not in df.columns:
|
80 |
df["Order Received"] = ""
|
|
|
108 |
|
109 |
df["Date"] = pd.to_datetime(df.get("Date", datetime.today()), errors='coerce')
|
110 |
df["DateStr"] = df["Date"].dt.date.astype(str)
|
|
|
111 |
grouped = df.groupby(["Rep Email", "DateStr"]).size().reset_index(name="Calls Made")
|
112 |
return grouped.rename(columns={"Rep Email": "Rep"})
|
113 |
|
|
|
202 |
users_refresh = gr.Button("π Refresh Users")
|
203 |
users_refresh.click(fn=get_users, outputs=users_table)
|
204 |
|
205 |
+
# --- Field Sales Raw Data ---
|
206 |
+
with gr.Tab("π§Ύ Field Sales Raw Data"):
|
207 |
+
field_df = gr.Dataframe(value=load_field_sales, label="Full Field Sales Data", interactive=False)
|
208 |
+
field_btn = gr.Button("π Refresh Field Sales")
|
209 |
+
field_btn.click(fn=load_field_sales, outputs=field_df)
|
210 |
+
|
211 |
def do_login(user, pw):
|
212 |
if VALID_USERS.get(user) == pw:
|
213 |
return gr.update(visible=False), gr.update(visible=True), ""
|
|
|
216 |
|
217 |
login_btn.click(fn=do_login, inputs=[email, password], outputs=[login_ui, main_ui, login_msg])
|
218 |
|
219 |
+
app.launch()
|