IAMTFRMZA's picture
Update app.py
ef57a50 verified
raw
history blame
4.35 kB
# app.py
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 filter_current_week(df, date_column):
df[date_column] = pd.to_datetime(df[date_column], errors='coerce').dt.date
start_date, end_date = get_current_week_range()
return df[(df[date_column] >= start_date) & (df[date_column] <= end_date)]
def compose_date(year, month, day):
try:
return str(datetime(int(year), int(month), int(day)).date())
except:
return None
# -------------------- FUNCTIONS --------------------
def current_week_calls():
df = load_sheet("Calls")
if "Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Date' column"}])
return filter_current_week(df, "Date")
def current_week_appointments():
df = load_sheet("Appointments")
if "Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Date' column"}])
return filter_current_week(df, "Date")
def appointed_leads():
df = load_sheet("Appointed Leads")
if "Rep" not in df.columns or "Customer Name" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Rep' or 'Customer Name' column"}])
grouped = df.groupby("Rep")["Customer Name"].apply(list).reset_index()
return grouped
def custom_date_calls(y, m, d):
date_str = compose_date(y, m, d)
if not date_str:
return pd.DataFrame([{"Error": "Invalid date input"}])
df = load_sheet("Calls")
df['Date'] = pd.to_datetime(df['Date'], errors='coerce').dt.date.astype(str)
return df[df['Date'] == date_str]
def custom_date_appointments(y, m, d):
date_str = compose_date(y, m, d)
if not date_str:
return pd.DataFrame([{"Error": "Invalid date input"}])
df = load_sheet("Appointments")
df['Date'] = pd.to_datetime(df['Date'], errors='coerce').dt.date.astype(str)
return df[df['Date'] == date_str]
# -------------------- UI --------------------
with gr.Blocks(title="Graffiti Admin Dashboard") as app:
gr.Markdown("## πŸ“… Graffiti Admin Dashboard")
with gr.Tab("Calls Report"):
calls_btn = gr.Button("Load Current Week Calls")
calls_table = gr.Dataframe()
calls_btn.click(fn=current_week_calls, outputs=calls_table)
gr.Markdown("### πŸ”Ž Check by Specific Date (YYYY-MM-DD via dropdowns)")
y, m, d = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
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], outputs=date_calls_table)
with gr.Tab("Appointments Report"):
appt_btn = gr.Button("Load Current Week Appointments")
appt_table = gr.Dataframe()
appt_btn.click(fn=current_week_appointments, outputs=appt_table)
gr.Markdown("### πŸ”Ž Check by Specific Date")
ay, am, ad = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
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], 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)