IAMTFRMZA commited on
Commit
1ec30a9
Β·
verified Β·
1 Parent(s): 16ba360

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -81
app.py CHANGED
@@ -3,6 +3,7 @@ import gspread
3
  import gradio as gr
4
  from oauth2client.service_account import ServiceAccountCredentials
5
  from datetime import datetime
 
6
 
7
  # ------------------ AUTH ------------------
8
  VALID_USERS = {
@@ -17,14 +18,19 @@ creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", sco
17
  client = gspread.authorize(creds)
18
  sheet_file = client.open("userAccess")
19
 
20
- # ------------------ HELPERS ------------------
21
- def load_tab(sheet_name):
22
- try:
23
- df = pd.DataFrame(sheet_file.worksheet(sheet_name).get_all_records())
24
- return df
25
- except:
26
- return pd.DataFrame([["⚠️ Could not load sheet."]], columns=["Error"])
 
 
 
 
27
 
 
28
  def get_combined_orders(date_str):
29
  df_field = load_tab("Field Sales")
30
  df_ts = load_tab("TeleSales")
@@ -66,48 +72,7 @@ def get_combined_orders(date_str):
66
  else:
67
  return pd.DataFrame([["No orders on this date"]], columns=["Message"])
68
 
69
- def get_requests():
70
- df = load_tab("Customer Requests")
71
- return df if not df.empty else pd.DataFrame([["No requests yet."]], columns=["Message"])
72
-
73
- def get_listings():
74
- df = load_tab("CustomerListings")
75
- return df if not df.empty else pd.DataFrame([["No listings found."]], columns=["Message"])
76
-
77
- def get_users():
78
- df = load_tab("Users")
79
- return df if not df.empty else pd.DataFrame([["No users configured."]], columns=["Message"])
80
-
81
- def get_telesales_summary():
82
- df = load_tab("TeleSales")
83
- if df.empty or "Rep" not in df.columns:
84
- return pd.DataFrame([["No Telesales data available"]], columns=["Message"])
85
- return df.groupby("Rep").size().reset_index(name="Total Calls Made")
86
-
87
- def get_oem_summary():
88
- df = load_tab("OEM Visit")
89
- if df.empty or "Rep" not in df.columns:
90
- return pd.DataFrame([["No OEM data available"]], columns=["Message"])
91
- return df.groupby("Rep").size().reset_index(name="Total OEM Visits")
92
-
93
- def get_escalations():
94
- df = load_tab("Field Sales")
95
- if df.empty:
96
- return pd.DataFrame([["No data in Field Sales"]], columns=["Message"])
97
- col = "Customer Type & Status"
98
- if col in df.columns:
99
- flagged = df[df[col].str.contains("Second", na=False)]
100
- return flagged if not flagged.empty else pd.DataFrame([["No second-hand dealerships flagged."]], columns=["Message"])
101
- else:
102
- return pd.DataFrame([["⚠️ Column 'Customer Type & Status' not found."]], columns=["Message"])
103
-
104
- def load_field_sales():
105
- df = load_tab("Field Sales")
106
- if df.empty:
107
- return pd.DataFrame()
108
- df["Date"] = pd.to_datetime(df.get("Date", datetime.today()), errors='coerce')
109
- df["DateStr"] = df["Date"].dt.date.astype(str)
110
- return df
111
 
112
  # ------------------ GRADIO APP ------------------
113
  with gr.Blocks() as app:
@@ -122,52 +87,27 @@ with gr.Blocks() as app:
122
  with gr.Column(visible=False) as main_ui:
123
  gr.Markdown("## πŸ—‚οΈ CarMat Dashboard")
124
 
125
- df_initial = load_field_sales()
126
- unique_dates = sorted(df_initial["DateStr"].unique(), reverse=True) if not df_initial.empty else []
127
 
128
  # --- Tabs ---
129
  with gr.Tab("πŸ“Š Summary"):
130
  gr.Markdown("Summary content coming soon...")
131
 
132
  with gr.Tab("πŸ“‚ Field Sales"):
133
- field_df = gr.Dataframe(value=load_field_sales, label="πŸ“‚ Field Sales Records", interactive=False)
134
- field_btn = gr.Button("πŸ”„ Refresh Field Sales")
135
- field_btn.click(fn=load_field_sales, outputs=field_df)
136
 
137
  with gr.Tab("πŸ“ž TeleSales"):
138
- ts_table = gr.Dataframe(value=get_telesales_summary, label="πŸ“ž TeleSales Summary")
139
- ts_refresh = gr.Button("πŸ”„ Refresh")
140
- ts_refresh.click(fn=get_telesales_summary, outputs=ts_table)
141
 
142
  with gr.Tab("πŸ“¦ Orders Summary"):
143
  order_date = gr.Dropdown(label="Select Date", choices=unique_dates, interactive=True)
144
  order_table = gr.Dataframe(label="🧾 Combined Order Summary")
145
  order_date.change(fn=get_combined_orders, inputs=order_date, outputs=order_table)
146
 
147
- with gr.Tab("🚨 Escalations"):
148
- esc_table = gr.Dataframe(value=get_escalations, label="🚨 Used Dealership Escalations")
149
- esc_btn = gr.Button("πŸ”„ Refresh Escalations")
150
- esc_btn.click(fn=get_escalations, outputs=esc_table)
151
-
152
- with gr.Tab("🏭 OEM Visits"):
153
- oem_table = gr.Dataframe(value=get_oem_summary, label="🏭 OEM Visit Summary")
154
- oem_refresh = gr.Button("πŸ”„ Refresh")
155
- oem_refresh.click(fn=get_oem_summary, outputs=oem_table)
156
-
157
- with gr.Tab("πŸ“¬ Customer Requests"):
158
- req_table = gr.Dataframe(value=get_requests, label="πŸ“¬ Customer Requests", interactive=False)
159
- req_refresh = gr.Button("πŸ”„ Refresh Requests")
160
- req_refresh.click(fn=get_requests, outputs=req_table)
161
-
162
- with gr.Tab("πŸ“‹ Dealership Directory"):
163
- listings_table = gr.Dataframe(value=get_listings, label="πŸ“‹ Customer Listings")
164
- listings_refresh = gr.Button("πŸ”„ Refresh Listings")
165
- listings_refresh.click(fn=get_listings, outputs=listings_table)
166
-
167
- with gr.Tab("πŸ‘€ Users"):
168
- users_table = gr.Dataframe(value=get_users, label="πŸ‘₯ Users")
169
- users_refresh = gr.Button("πŸ”„ Refresh Users")
170
- users_refresh.click(fn=get_users, outputs=users_table)
171
 
172
  def do_login(user, pw):
173
  if VALID_USERS.get(user) == pw:
 
3
  import gradio as gr
4
  from oauth2client.service_account import ServiceAccountCredentials
5
  from datetime import datetime
6
+ import time
7
 
8
  # ------------------ AUTH ------------------
9
  VALID_USERS = {
 
18
  client = gspread.authorize(creds)
19
  sheet_file = client.open("userAccess")
20
 
21
+ # ------------------ RETRY LOGIC ------------------
22
+ def load_tab(sheet_name, retries=3, delay=5):
23
+ for attempt in range(retries):
24
+ try:
25
+ df = pd.DataFrame(sheet_file.worksheet(sheet_name).get_all_records())
26
+ return df
27
+ except gspread.exceptions.APIError as e:
28
+ if attempt < retries - 1:
29
+ time.sleep(delay)
30
+ else:
31
+ return pd.DataFrame([[f"⚠️ API Error: {str(e)}"]], columns=["Error"])
32
 
33
+ # ------------------ HELPERS ------------------
34
  def get_combined_orders(date_str):
35
  df_field = load_tab("Field Sales")
36
  df_ts = load_tab("TeleSales")
 
72
  else:
73
  return pd.DataFrame([["No orders on this date"]], columns=["Message"])
74
 
75
+ # Define other helper functions similarly using load_tab...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  # ------------------ GRADIO APP ------------------
78
  with gr.Blocks() as app:
 
87
  with gr.Column(visible=False) as main_ui:
88
  gr.Markdown("## πŸ—‚οΈ CarMat Dashboard")
89
 
90
+ df_initial = load_tab("Field Sales")
91
+ unique_dates = sorted(df_initial["Date"].astype(str).unique(), reverse=True) if not df_initial.empty else []
92
 
93
  # --- Tabs ---
94
  with gr.Tab("πŸ“Š Summary"):
95
  gr.Markdown("Summary content coming soon...")
96
 
97
  with gr.Tab("πŸ“‚ Field Sales"):
98
+ field_df = gr.Dataframe(value=load_tab("Field Sales"), label="πŸ“‚ Field Sales Records", interactive=False)
99
+ gr.Button("πŸ”„ Refresh").click(fn=lambda: load_tab("Field Sales"), outputs=field_df)
 
100
 
101
  with gr.Tab("πŸ“ž TeleSales"):
102
+ ts_table = gr.Dataframe(value=load_tab("TeleSales"), label="πŸ“ž TeleSales Summary")
103
+ gr.Button("πŸ”„ Refresh").click(fn=lambda: load_tab("TeleSales"), outputs=ts_table)
 
104
 
105
  with gr.Tab("πŸ“¦ Orders Summary"):
106
  order_date = gr.Dropdown(label="Select Date", choices=unique_dates, interactive=True)
107
  order_table = gr.Dataframe(label="🧾 Combined Order Summary")
108
  order_date.change(fn=get_combined_orders, inputs=order_date, outputs=order_table)
109
 
110
+ # Continue similarly for other tabs...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
  def do_login(user, pw):
113
  if VALID_USERS.get(user) == pw: