File size: 2,844 Bytes
9ec3e62
 
a774f23
9ec3e62
f6b0b56
 
 
 
 
 
 
 
 
 
 
 
9ec3e62
 
 
 
 
 
 
5cca356
9ec3e62
 
 
 
 
fe01032
9ec3e62
 
 
 
 
 
 
 
 
 
bdaf833
a774f23
 
 
9ec3e62
a774f23
9ec3e62
a774f23
fe01032
f6b0b56
 
 
 
 
9ec3e62
5cca356
f6b0b56
5cca356
 
 
f6b0b56
5cca356
 
fe01032
 
 
70773ec
 
fe01032
 
 
 
f6b0b56
fe01032
 
9ec3e62
bdaf833
 
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
import gradio as gr
import pandas as pd
import tempfile

# Preloaded fallback data
default_accounts = pd.read_csv("accounts.csv")
default_contacts = pd.read_csv("contacts.csv")

def extract_contacts(accounts_file, contacts_file, selected_status, selected_sites, contact_type):
    # Decide source: uploaded or default
    if accounts_file is not None and contacts_file is not None:
        final_accounts = pd.read_csv(accounts_file.name)
        final_contacts = pd.read_csv(contacts_file.name)
    else:
        final_accounts = default_accounts
        final_contacts = default_contacts

    # Filter accounts
    filtered_accounts = final_accounts[
        (final_accounts['OVERALL_STATUS'].isin(selected_status)) &
        (final_accounts['SITE'].isin(selected_sites))
    ]

    # Filter contacts
    filtered_contacts = final_contacts[
        (final_contacts['STATUS'].str.upper() == contact_type.upper()) &
        (final_contacts['ACCOUNT_NAME'].isin(filtered_accounts['ACCOUNT_NAME']))
    ]

    # Prepare output
    contacts = ", ".join(filtered_contacts['CONTACT'].dropna().astype(str))
    emails = ", ".join(filtered_contacts['EMAIL'].dropna().astype(str))
    sfids = ", ".join(filtered_contacts['SALESFORCE_EXTERNAL_ID'].dropna().astype(str))

    df_out = pd.DataFrame({
        'CONTACTS': [contacts if contacts else f"No {contact_type} Contacts"],
        'EMAILS': [emails if emails else f"No {contact_type} Emails"],
        'SF_IDS': [sfids if sfids else f"No {contact_type} IDs"]
    })

    # Save to temporary file for download
    tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".csv", mode='w', encoding='utf-8')
    df_out.to_csv(tmp_file, index=False)
    tmp_file.close()

    return df_out, tmp_file.name

# Gradio UI
with gr.Blocks() as demo:
    gr.Markdown("## 🗂️ Contact Extractor - Optional Upload (Stealth Mode)")

    with gr.Row():
        accounts_file = gr.File(label="Upload Accounts CSV (optional)", file_types=[".csv"])
        contacts_file = gr.File(label="Upload Contacts CSV (optional)", file_types=[".csv"])

    status_dropdown = gr.CheckboxGroup(
        choices=list(default_accounts['OVERALL_STATUS'].unique()), 
        label="Select OVERALL_STATUS"
    )
    site_dropdown = gr.CheckboxGroup(
        choices=list(default_accounts['SITE'].unique()), 
        label="Select SITE"
    )
    contact_type = gr.Radio(["Active", "Inactive"], label="Contact Type")

    submit_btn = gr.Button("Extract Contacts")

    output_table = gr.Dataframe(label="Filtered Contact Data")
    download_csv = gr.File(label="Download CSV")

    submit_btn.click(
        extract_contacts,
        inputs=[accounts_file, contacts_file, status_dropdown, site_dropdown, contact_type],
        outputs=[output_table, download_csv]
    )

if __name__ == "__main__":
    demo.launch(share=True)