File size: 4,345 Bytes
1051212
06faff1
44e7320
 
93be3f3
1051212
7074721
06faff1
44e7320
ef57a50
dfbe477
d5bcf89
f68916e
06faff1
 
1051212
06faff1
1051212
 
 
 
 
06faff1
 
1051212
 
 
 
06faff1
 
 
 
 
 
 
 
 
 
 
 
1051212
c2798b0
06faff1
 
 
70a3386
1051212
c2798b0
06faff1
 
 
1051212
06faff1
1051212
06faff1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
107
108
# 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)