Spaces:
Sleeping
Sleeping
File size: 4,501 Bytes
1051212 06faff1 44e7320 93be3f3 1051212 7074721 06faff1 44e7320 ef57a50 dfbe477 d5bcf89 f68916e 06faff1 1051212 06faff1 1051212 06faff1 1051212 06faff1 991e2f4 1051212 c2798b0 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 06faff1 991e2f4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# 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 compose_date(year, month, day):
try:
return str(datetime(int(year), int(month), int(day)).date())
except:
return None
# -------------------- REPORT FUNCTIONS --------------------
def current_week_calls():
df = load_sheet("Calls")
if "Call Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Call Date' column"}])
df["Call Date"] = pd.to_datetime(df["Call Date"], errors='coerce').dt.date
start, end = get_current_week_range()
return df[(df["Call Date"] >= start) & (df["Call Date"] <= end)]
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["Call Date"] = pd.to_datetime(df["Call Date"], errors='coerce').dt.date.astype(str)
return df[df["Call Date"] == date_str]
def current_week_appointments():
df = load_sheet("Appointments")
if "Appointment Date" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Appointment Date' column"}])
df["Appointment Date"] = pd.to_datetime(df["Appointment Date"], errors='coerce').dt.date
start, end = get_current_week_range()
return df[(df["Appointment Date"] >= start) & (df["Appointment Date"] <= end)]
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["Appointment Date"] = pd.to_datetime(df["Appointment Date"], errors='coerce').dt.date.astype(str)
return df[df["Appointment Date"] == date_str]
def appointed_leads():
df = load_sheet("AllocatedLeads")
if "Rep" not in df.columns or "Company Name" not in df.columns:
return pd.DataFrame([{"Error": "Missing 'Rep' or 'Company Name' column"}])
return df.groupby("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_btn = gr.Button("Load Current Week Calls")
calls_table = gr.Dataframe()
calls_btn.click(fn=current_week_calls, outputs=calls_table)
gr.Markdown("### π Search Calls by Specific Date")
cy, cm, cd = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
custom_calls_btn = gr.Button("Search Calls by Date")
custom_calls_table = gr.Dataframe()
custom_calls_btn.click(fn=custom_date_calls, inputs=[cy, cm, cd], outputs=custom_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("### π Search Appointments by Specific Date")
ay, am, ad = gr.Textbox(label="Year"), gr.Textbox(label="Month"), gr.Textbox(label="Day")
custom_appt_btn = gr.Button("Search Appointments by Date")
custom_appt_table = gr.Dataframe()
custom_appt_btn.click(fn=custom_date_appointments, inputs=[ay, am, ad], outputs=custom_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()
|