Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
import os | |
# Initialize order and customer database | |
DATA_FILE = "customer_data.xlsx" | |
if not os.path.exists(DATA_FILE): | |
df = pd.DataFrame(columns=["Name", "Phone", "Preferences", "Allergies", "Order"]) | |
df.to_excel(DATA_FILE, index=False) | |
ORDER_NOTIFICATION_FILE = "orders.xlsx" | |
if not os.path.exists(ORDER_NOTIFICATION_FILE): | |
orders_df = pd.DataFrame(columns=["Name", "Phone", "Order"]) | |
orders_df.to_excel(ORDER_NOTIFICATION_FILE, index=False) | |
# Save customer data | |
def save_customer_data(name, phone, preferences, allergies): | |
df = pd.read_excel(DATA_FILE) | |
new_entry = {"Name": name, "Phone": phone, "Preferences": preferences, "Allergies": allergies, "Order": ""} | |
df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True) | |
df.to_excel(DATA_FILE, index=False) | |
# Save order for notification | |
def save_order_notification(name, phone, order): | |
orders_df = pd.read_excel(ORDER_NOTIFICATION_FILE) | |
new_order = {"Name": name, "Phone": phone, "Order": order} | |
orders_df = pd.concat([orders_df, pd.DataFrame([new_order])], ignore_index=True) | |
orders_df.to_excel(ORDER_NOTIFICATION_FILE, index=False) | |
# Menu data | |
menu = [ | |
{"name": "Paneer Butter Masala", "type": "Vegetarian"}, | |
{"name": "Chicken Biryani", "type": "Non-Vegetarian"}, | |
{"name": "Dal Tadka", "type": "Vegetarian"}, | |
{"name": "Fish Curry", "type": "Non-Vegetarian"} | |
] | |
# Get filtered menu based on preferences | |
def get_filtered_menu(preferences): | |
if preferences == "Vegetarian": | |
return [item["name"] for item in menu if item["type"] == "Vegetarian"] | |
elif preferences == "Non-Vegetarian": | |
return [item["name"] for item in menu if item["type"] == "Non-Vegetarian"] | |
return [item["name"] for item in menu] | |
# Gradio app | |
with gr.Blocks() as app: | |
# Variables to store user data across screens | |
user_name = gr.State() | |
user_phone = gr.State() | |
user_preferences = gr.State() | |
user_allergies = gr.State() | |
user_order = gr.State([]) | |
# Login Screen | |
with gr.Tab("Login"): | |
gr.Markdown("# Welcome to BH Restaurant") | |
name_input = gr.Textbox(label="Name", placeholder="Enter your name") | |
phone_input = gr.Textbox(label="Phone Number", placeholder="Enter your 10-digit phone number") | |
login_btn = gr.Button("Login") | |
login_output = gr.Textbox(visible=False) | |
def login(name, phone): | |
if not name or not phone: | |
return "Please enter both Name and Phone Number.", None, None | |
return "Login successful! Redirecting to preferences...", name, phone | |
login_btn.click(login, inputs=[name_input, phone_input], outputs=[login_output, user_name, user_phone]) | |
# Preferences Screen | |
with gr.Tab("Preferences"): | |
gr.Markdown("# Set Your Preferences") | |
preferences_input = gr.Radio( | |
["Vegetarian", "Non-Vegetarian", "Complete Menu"], label="Food Preferences" | |
) | |
allergies_input = gr.Textbox(label="Any Allergies?") | |
save_pref_btn = gr.Button("Save Preferences") | |
pref_output = gr.Textbox(visible=False) | |
def save_preferences(preferences, allergies, name, phone): | |
save_customer_data(name, phone, preferences, allergies) | |
return "Preferences saved! Redirecting to menu...", preferences, allergies | |
save_pref_btn.click( | |
save_preferences, | |
inputs=[preferences_input, allergies_input, user_name, user_phone], | |
outputs=[pref_output, user_preferences, user_allergies], | |
) | |
# Menu Screen | |
with gr.Tab("Menu"): | |
gr.Markdown("# Menu") | |
menu_dropdown = gr.Dropdown(choices=[], label="Select an Item") | |
add_to_order_btn = gr.Button("Add to Order") | |
order_summary = gr.Textbox(label="Current Order", interactive=False) | |
def load_menu(preferences): | |
return gr.update(choices=get_filtered_menu(preferences)) | |
def add_to_order(item, order_list): | |
if item: | |
order_list.append(item) | |
return ", ".join(order_list), order_list | |
menu_dropdown.change(load_menu, inputs=[user_preferences], outputs=[menu_dropdown]) | |
add_to_order_btn.click(add_to_order, inputs=[menu_dropdown, user_order], outputs=[order_summary, user_order]) | |
# Order Summary Screen | |
with gr.Tab("Order Summary"): | |
gr.Markdown("# Order Summary") | |
final_order_summary = gr.Textbox(label="Your Final Order", interactive=False) | |
place_order_btn = gr.Button("Place Order") | |
thank_you_output = gr.Textbox(visible=False) | |
def place_order(order_list, name, phone): | |
order_str = ", ".join(order_list) | |
save_order_notification(name, phone, order_str) | |
return "Thank you for your order! Redirecting to Thank You page." | |
place_order_btn.click( | |
place_order, | |
inputs=[user_order, user_name, user_phone], | |
outputs=[thank_you_output], | |
) | |
# Thank You Page | |
with gr.Tab("Thank You"): | |
gr.Markdown("# Thank You!") | |
gr.Markdown("Your order has been placed successfully. Please wait while the chef prepares your meal.") | |
# Chef/Waiter Notification Screen | |
with gr.Tab("Chef/Waiter Notifications"): | |
gr.Markdown("# Order Notifications") | |
refresh_btn = gr.Button("Refresh Orders") | |
order_list = gr.Textbox(label="Orders", interactive=False) | |
def load_orders(): | |
orders_df = pd.read_excel(ORDER_NOTIFICATION_FILE) | |
return orders_df.to_string(index=False) | |
refresh_btn.click(load_orders, outputs=[order_list]) | |
# Launch the app | |
app.launch() | |