| 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() |
|
|