IAMTFRMZA's picture
Update app.py
2f4c490 verified
raw
history blame
4.82 kB
import gradio as gr
import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime, timedelta
# -------------------- AUTH --------------------
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("deep-mile-461309-t8-0e90103411e0.json", scope)
client = gspread.authorize(creds)
sheet_url = "https://docs.google.com/spreadsheets/d/1if4KoVQvw5ZbhknfdZbzMkcTiPfsD6bz9V3a1th-bwQ"
# -------------------- UTILS --------------------
def load_sheet(sheet_name):
try:
sheet = client.open_by_url(sheet_url).worksheet(sheet_name)
df = pd.DataFrame(sheet.get_all_records())
return df
except Exception as e:
return pd.DataFrame([{"Error": str(e)}])
def get_current_week_range():
today = datetime.now()
start = today - timedelta(days=today.weekday())
end = start + timedelta(days=6)
return start.date(), end.date()
def compose_date(year, month, day):
try:
return str(datetime(int(year), int(month), int(day)).date())
except:
return None
def filter_week(df, column, rep=None):
df[column] = pd.to_datetime(df[column], errors='coerce').dt.date
start, end = get_current_week_range()
filtered = df[(df[column] >= start) & (df[column] <= end)]
if rep:
filtered = filtered[filtered['Rep'].fillna('').str.lower() == rep.lower()]
return filtered
def filter_by_date(df, column, y, m, d, rep=None):
date_str = compose_date(y, m, d)
if not date_str:
return pd.DataFrame([{"Error": "Invalid date"}])
df[column] = pd.to_datetime(df[column], errors='coerce').dt.date.astype(str)
result = df[df[column] == date_str]
if rep:
result = result[result['Rep'].fillna('').str.lower() == rep.lower()]
return result
# -------------------- FUNCTIONS --------------------
def current_week_calls(rep=None):
df = load_sheet("Calls")
if "Call Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Call Date' column"}])
return filter_week(df, "Call Date", rep)
def current_week_appointments(rep=None):
df = load_sheet("Appointments")
if "Appointment Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Appointment Date' column"}])
return filter_week(df, "Appointment Date", rep)
def custom_date_calls(y, m, d, rep=None):
df = load_sheet("Calls")
return filter_by_date(df, "Call Date", y, m, d, rep)
def custom_date_appointments(y, m, d, rep=None):
df = load_sheet("Appointments")
return filter_by_date(df, "Appointment Date", y, m, d, rep)
def appointed_leads():
df = load_sheet("AllocatedLeads")
if "Assigned Rep" not in df.columns or "Company Name" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Assigned Rep' or 'Company Name' column"}])
return df.groupby("Assigned Rep")["Company Name"].apply(list).reset_index()
# -------------------- UI --------------------
with gr.Blocks(title="Graffiti Admin Dashboard") as app:
gr.Markdown("## πŸ“… Graffiti Admin Dashboard")
with gr.Tab("Calls Report"):
calls_rep = gr.Textbox(label="Optional Rep Filter")
calls_btn = gr.Button("Load Current Week Calls")
calls_table = gr.Dataframe()
calls_btn.click(fn=current_week_calls, inputs=calls_rep, outputs=calls_table)
gr.Markdown("### πŸ” Search Calls by Specific Date")
y, m, d = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
call_rep = gr.Textbox(label="Optional Rep Filter")
date_calls_btn = gr.Button("Search Calls by Date")
date_calls_table = gr.Dataframe()
date_calls_btn.click(fn=custom_date_calls, inputs=[y, m, d, call_rep], outputs=date_calls_table)
with gr.Tab("Appointments Report"):
appt_rep = gr.Textbox(label="Optional Rep Filter")
appt_btn = gr.Button("Load Current Week Appointments")
appt_table = gr.Dataframe()
appt_btn.click(fn=current_week_appointments, inputs=appt_rep, outputs=appt_table)
gr.Markdown("### πŸ” Search Appointments by Specific Date")
ay, am, ad = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
appt_rep2 = gr.Textbox(label="Optional Rep Filter")
date_appt_btn = gr.Button("Search Appointments by Date")
date_appt_table = gr.Dataframe()
date_appt_btn.click(fn=custom_date_appointments, inputs=[ay, am, ad, appt_rep2], outputs=date_appt_table)
with gr.Tab("Appointed Leads"):
leads_btn = gr.Button("View Appointed Leads")
leads_table = gr.Dataframe()
leads_btn.click(fn=appointed_leads, outputs=leads_table)
app.launch(share=True)