Spaces:
Build error
Build error
| import gradio as gr | |
| import uuid | |
| import json | |
| import os | |
| # File to store registered user data | |
| USER_DATA_FILE = "users.json" | |
| # Load user data from the file | |
| def load_user_data(): | |
| if os.path.exists(USER_DATA_FILE): | |
| with open(USER_DATA_FILE, "r") as file: | |
| return json.load(file) | |
| return {} | |
| # Save user data to the file | |
| def save_user_data(data): | |
| with open(USER_DATA_FILE, "w") as file: | |
| json.dump(data, file, indent=4) | |
| # Initialize user database | |
| customers = load_user_data() | |
| session_data = {} | |
| # Function for user signup | |
| def signup(name, phone): | |
| if phone in customers: | |
| return f"Phone number {phone} is already registered. Please log in." | |
| # Generate unique customer ID | |
| customer_id = f"CUST{str(uuid.uuid4().int)[:6]}" | |
| customers[phone] = {"name": name, "phone": phone, "customer_id": customer_id} | |
| # Save the updated user data | |
| save_user_data(customers) | |
| return f"Signup successful! Welcome {name}. Your customer ID is {customer_id}." | |
| # Function for user login | |
| def login(phone): | |
| if phone in customers: | |
| customer = customers[phone] | |
| session_data['customer_id'] = customer['customer_id'] | |
| session_data['customer_name'] = customer['name'] | |
| return f"Welcome {customer['name']}! You are now logged in." | |
| else: | |
| return "Phone number not found. Please register first." | |
| # Function to add items to the cart | |
| def add_to_cart(item_name): | |
| if 'customer_id' not in session_data: | |
| return "Please log in first to add items to the cart." | |
| # Find the selected item in the menu | |
| selected_item = next((item for item in menu_items if item["name"] == item_name), None) | |
| if not selected_item: | |
| return f"Item '{item_name}' not found in the menu." | |
| # Add item to cart | |
| cart = session_data.get('cart', []) | |
| cart.append({"item_id": selected_item['id'], "name": selected_item['name'], "quantity": 1, "price": selected_item['price']}) | |
| session_data['cart'] = cart | |
| return f"Added 1 x {selected_item['name']} to the cart." | |
| # Function to display the cart | |
| def view_cart(): | |
| if 'customer_id' not in session_data: | |
| return "Please log in first to view your cart." | |
| cart = session_data.get('cart', []) | |
| if not cart: | |
| return "Your cart is empty." | |
| cart_summary = [] | |
| total_price = 0 | |
| for item in cart: | |
| cart_summary.append(f"{item['name']} x {item['quantity']} - ${item['price']:.2f}") | |
| total_price += item['price'] | |
| return "\n".join(cart_summary) + f"\n\nTotal Price: ${total_price:.2f}" | |
| # Function to proceed to order | |
| def proceed_to_order(table_number): | |
| if 'customer_id' not in session_data: | |
| return "Please log in first to proceed with your order." | |
| cart = session_data.get('cart', []) | |
| if not cart: | |
| return "Your cart is empty. Add items to your cart before proceeding." | |
| order_id = str(uuid.uuid4()) # Generate unique order ID | |
| order_details = { | |
| "order_id": order_id, | |
| "customer_id": session_data['customer_id'], | |
| "customer_name": session_data['customer_name'], | |
| "table_number": table_number, | |
| "items": cart | |
| } | |
| session_data['cart'] = [] # Clear cart after order | |
| return f"Order placed successfully!\n\nOrder ID: {order_id}\nTable Number: {table_number}\n\nOrder Details:\n" + "\n".join([f"{item['name']} x {item['quantity']} - ${item['price']:.2f}" for item in cart]) | |
| # Sample menu items | |
| menu_items = [ | |
| {"id": 1, "name": "Burger", "price": 5.99, "description": "Juicy grilled burger with fresh veggies."}, | |
| {"id": 2, "name": "Pizza", "price": 8.99, "description": "Cheesy pizza with a choice of toppings."}, | |
| {"id": 3, "name": "Pasta", "price": 7.99, "description": "Creamy Italian pasta with garlic bread."}, | |
| {"id": 4, "name": "Salad", "price": 4.99, "description": "Fresh garden salad with vinaigrette dressing."}, | |
| {"id": 5, "name": "Soda", "price": 1.99, "description": "Refreshing chilled soda of your choice."} | |
| ] | |
| # Function to generate the styled menu | |
| def generate_menu(): | |
| with gr.Blocks() as menu_interface: | |
| gr.Markdown("# Menu") | |
| output = gr.Textbox(label="Status") # Declare output component only once | |
| for item in menu_items: | |
| with gr.Row(): | |
| with gr.Column(scale=4): | |
| gr.Markdown(f"### {item['name']}\n{item['description']}\n**Price:** ${item['price']:.2f}") | |
| with gr.Column(scale=1): | |
| button = gr.Button("Add") | |
| button.click(fn=add_to_cart, inputs=gr.Textbox(value=item["name"], visible=False), outputs=output) | |
| return menu_interface | |
| # Gradio Interface for Signup | |
| signup_interface = gr.Interface(fn=signup, inputs=["text", "text"], outputs="text", title="Signup") | |
| # Gradio Interface for Login | |
| login_interface = gr.Interface(fn=login, inputs="text", outputs="text", title="Login") | |
| # Gradio Interface for Cart | |
| cart_interface = gr.Interface(fn=view_cart, inputs=None, outputs="text", title="Cart") | |
| # Gradio Interface for Proceed to Order | |
| order_interface = gr.Interface( | |
| fn=proceed_to_order, | |
| inputs=gr.Textbox(label="Table Number"), | |
| outputs="text", | |
| title="Proceed to Order" | |
| ) | |
| # Generate the menu interface | |
| menu_interface = generate_menu() | |
| # Launch Gradio app with multiple tabs | |
| demo = gr.TabbedInterface( | |
| [signup_interface, login_interface, menu_interface, cart_interface, order_interface], | |
| ["Signup", "Login", "Menu", "Cart", "Order"] | |
| ) | |
| demo.launch() | |