IAMTFRMZA commited on
Commit
98b1c1d
·
verified ·
1 Parent(s): a992c26

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -6
app.py CHANGED
@@ -15,7 +15,7 @@ VALID_USERS = {
15
  scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
16
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
17
  client = gspread.authorize(creds)
18
- sheet_file = client.open("userAccess")
19
 
20
  # ------------------ HELPERS ------------------
21
  def load_tab(sheet_name):
@@ -42,13 +42,19 @@ def generate_summary(date_str):
42
  day_df = df[df['DateStr'] == date_str]
43
 
44
  total_visits = day_df.groupby("Rep").size().reset_index(name="Total Visits")
45
- current = day_df[day_df["Current/Prospect Custor"] == "Current"]
46
- prospect = day_df[day_df["Current/Prospect Custor"] == "Prospect"]
 
 
 
 
 
47
  breakdown = pd.DataFrame({
48
  "Rep": all_reps,
49
  "Current": [len(current[current["Rep"] == rep]) for rep in all_reps],
50
  "Prospect": [len(prospect[prospect["Rep"] == rep]) for rep in all_reps]
51
  })
 
52
  active_list = total_visits['Rep'].tolist()
53
  inactive_list = [rep for rep in all_reps if rep not in active_list]
54
  inactive_df = pd.DataFrame({'Inactive Reps': inactive_list})
@@ -57,6 +63,10 @@ def generate_summary(date_str):
57
  def get_order_summary(date_str):
58
  df = load_field_sales()
59
  day_df = df[df['DateStr'] == date_str]
 
 
 
 
60
  rep_group = day_df.groupby("Rep").agg({
61
  "Order Received": lambda x: (x == "Yes").sum(),
62
  "Order Value": "sum"
@@ -68,8 +78,12 @@ def get_order_summary(date_str):
68
 
69
  def get_escalations():
70
  df = load_field_sales()
71
- flagged = df[df["Customer Type"].str.contains("Second", na=False)]
72
- return flagged if not flagged.empty else pd.DataFrame([["No second-hand dealerships flagged."]], columns=["Status"])
 
 
 
 
73
 
74
  # ------------------ TELESALeS ------------------
75
  def get_telesales_summary():
@@ -110,7 +124,6 @@ with gr.Blocks() as app:
110
  with gr.Column(visible=False) as main_ui:
111
  gr.Markdown("## 🗂️ CarMat Dashboard")
112
 
113
- # preload dates for field sales
114
  df_initial = load_field_sales()
115
  unique_dates = sorted(df_initial["DateStr"].unique(), reverse=True)
116
 
 
15
  scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
16
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
17
  client = gspread.authorize(creds)
18
+ sheet_file = client.open("userAccess") # Ensure this is the exact sheet name in Google Sheets
19
 
20
  # ------------------ HELPERS ------------------
21
  def load_tab(sheet_name):
 
42
  day_df = df[df['DateStr'] == date_str]
43
 
44
  total_visits = day_df.groupby("Rep").size().reset_index(name="Total Visits")
45
+
46
+ curr_col = "Current/Prospect Custor"
47
+ if curr_col not in df.columns:
48
+ df[curr_col] = ""
49
+
50
+ current = day_df[day_df[curr_col] == "Current"]
51
+ prospect = day_df[day_df[curr_col] == "Prospect"]
52
  breakdown = pd.DataFrame({
53
  "Rep": all_reps,
54
  "Current": [len(current[current["Rep"] == rep]) for rep in all_reps],
55
  "Prospect": [len(prospect[prospect["Rep"] == rep]) for rep in all_reps]
56
  })
57
+
58
  active_list = total_visits['Rep'].tolist()
59
  inactive_list = [rep for rep in all_reps if rep not in active_list]
60
  inactive_df = pd.DataFrame({'Inactive Reps': inactive_list})
 
63
  def get_order_summary(date_str):
64
  df = load_field_sales()
65
  day_df = df[df['DateStr'] == date_str]
66
+
67
+ if "Order Received" not in df.columns:
68
+ df["Order Received"] = ""
69
+
70
  rep_group = day_df.groupby("Rep").agg({
71
  "Order Received": lambda x: (x == "Yes").sum(),
72
  "Order Value": "sum"
 
78
 
79
  def get_escalations():
80
  df = load_field_sales()
81
+ col = "Customer Type & Status"
82
+ if col in df.columns:
83
+ flagged = df[df[col].str.contains("Second", na=False)]
84
+ return flagged if not flagged.empty else pd.DataFrame([["No second-hand dealerships flagged."]], columns=["Status"])
85
+ else:
86
+ return pd.DataFrame([["⚠️ Column 'Customer Type & Status' not found."]], columns=["Status"])
87
 
88
  # ------------------ TELESALeS ------------------
89
  def get_telesales_summary():
 
124
  with gr.Column(visible=False) as main_ui:
125
  gr.Markdown("## 🗂️ CarMat Dashboard")
126
 
 
127
  df_initial = load_field_sales()
128
  unique_dates = sorted(df_initial["DateStr"].unique(), reverse=True)
129