import gradio as gr
from simple_salesforce import Salesforce
# Salesforce Connection
sf = Salesforce(username='diggavalli98@gmail.com', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
# Cart to store items
cart = []
# Function to fetch menu items
def fetch_menu_from_salesforce():
query = "SELECT Id, Name, Price__c, Description__c, Image1__c, Section__c, Veg_NonVeg__c FROM Menu_Item__c"
menu_items = sf.query(query)
return menu_items["records"]
# Function to fetch add-ons
def fetch_add_ons_from_salesforce():
query = "SELECT Id, Name, Price__c, Menu_Item__c FROM Add_Ons__c WHERE Available_In_Menu__c = true"
add_ons = sf.query(query)
return add_ons["records"]
# Function to generate menu HTML
def generate_menu_html(menu_items):
html = "
"
for item in menu_items:
html += f"""
{item.get('Name')}
{item.get('Description__c')}
${item.get('Price__c')}
"""
html += "
"
return html
# Function to save order in Salesforce
def save_order_in_salesforce(cart_data, total_cost):
try:
if not cart_data:
return "Cart is empty!"
# Save Order
order = {
"Name": f"Order-{datetime.now().strftime('%Y%m%d%H%M%S')}",
"Total_Amount__c": total_cost,
"Order_Date__c": datetime.now().isoformat(),
}
order_result = sf.Order__c.create(order)
order_id = order_result["id"]
# Save Order Items
for item in cart_data:
order_item = {
"Order__c": order_id,
"Menu_Item__c": item["menu_item_id"],
"Quantity__c": item["quantity"],
"Price__c": item["price"],
"Total_Price__c": item["total_price"],
"Add_Ons__c": ", ".join(addon["name"] for addon in item["add_ons"]),
"Special_Instructions__c": item["instructions"],
}
sf.Order_Item__c.create(order_item)
return "Order placed successfully!"
except Exception as e:
return f"Error saving order: {str(e)}"
# JS for Popup
popup_script = """
"""
# Gradio App
with gr.Blocks() as app:
menu_items = fetch_menu_from_salesforce()
add_ons = fetch_add_ons_from_salesforce()
with gr.Row():
gr.HTML("
Welcome to Biryani Hub
")
with gr.Row():
cart_view = gr.Textbox(label="Cart Items", interactive=False)
total_cost_view = gr.Textbox(label="Total Cost", interactive=False)
with gr.Row():
menu_output = gr.HTML(generate_menu_html(menu_items))
with gr.Row():
submit_order = gr.Button("Proceed to Order")
order_status = gr.Textbox(label="Order Status", interactive=False)
submit_order.click(
lambda: save_order_in_salesforce(cart, sum(item["total_price"] for item in cart)),
inputs=[],
outputs=order_status,
)
gr.HTML("""
""" +
"".join(
f' {addon["Name"]} (+${addon["Price__c"]}) '
for addon in add_ons
) +
"""