| import gradio as gr | |
| from ocr_utils import process_image | |
| from salesforce_utils import push_data_to_salesforce, fetch_inventory_data | |
| from viz_utils import generate_stock_chart | |
| import pandas as pd | |
| uploaded_data = [] | |
| def handle_upload(image, mode, entry_type): | |
| global uploaded_data | |
| data = process_image(image) | |
| df = pd.DataFrame(data) | |
| uploaded_data = df | |
| return df | |
| def update_salesforce(dataframe, mode, entry_type): | |
| df = pd.DataFrame(dataframe) | |
| status = push_data_to_salesforce(df, mode, entry_type) | |
| return status | |
| def download_inventory(): | |
| inventory = fetch_inventory_data() | |
| return inventory, inventory.to_csv(index=False) | |
| def show_chart(): | |
| df = fetch_inventory_data() | |
| chart_path = generate_stock_chart(df) | |
| return chart_path | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## π Salesforce Inventory OCR App") | |
| with gr.Row(): | |
| image = gr.Image(type="filepath", label="Upload Invoice or Label") | |
| mode = gr.Dropdown(["Entry", "Exit"], label="Select Mode") | |
| entry_type = gr.Dropdown(["Sales", "Non-Sales"], label="Entry Type") | |
| upload_btn = gr.Button("Extract & Show Data") | |
| table = gr.Dataframe(label="Editable Product Table", interactive=True) | |
| upload_btn.click(handle_upload, inputs=[image, mode, entry_type], outputs=table) | |
| update_btn = gr.Button("Update Salesforce") | |
| update_status = gr.Textbox(label="Update Status") | |
| update_btn.click(update_salesforce, inputs=[table, mode, entry_type], outputs=update_status) | |
| download_btn = gr.Button("Download Inventory from Salesforce") | |
| inventory_table = gr.Dataframe() | |
| csv_file = gr.File() | |
| download_btn.click(download_inventory, inputs=[], outputs=[inventory_table, csv_file]) | |
| chart_btn = gr.Button("Visualize Stock Levels") | |
| chart_output = gr.Image() | |
| chart_btn.click(show_chart, inputs=[], outputs=chart_output) | |
| demo.launch() | |