File size: 3,420 Bytes
b3b9008
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import gradio as gr
import json

# Global Cart State to Save Selected Items
cart = {"selected_items": [], "customizations": []}

# Menu Items
menu = {
    "Breads": ["Roti", "Butter Naan", "Plain Naan", "Garlic Naan", "Chilly Naan"],
    "Veg Curries": ["Paneer Butter Masala", "Kadai Paneer", "Dum Ka Paneer", "Mixed Veg Curry", "Dal Makhani"],
    "Non-Veg Curries": ["Chicken Curry", "Mutton Curry", "Fish Curry", "Prawns Curry"],
    "Biryanis": ["Veg Biryani", "Paneer Biryani", "Chicken Biryani", "Mutton Biryani", "Fish Biryani", "Prawns Biryani"]
}

# Dynamic Suggestions Based on Selection
def get_suggestions(selected_items):
    suggestions = set()

    for item in selected_items:
        if item in menu["Breads"]:
            suggestions.update(menu["Veg Curries"] + menu["Non-Veg Curries"] + menu["Biryanis"])
        elif item in menu["Veg Curries"] or item in menu["Non-Veg Curries"]:
            suggestions.update(menu["Breads"] + menu["Biryanis"])
        elif item in menu["Biryanis"]:
            suggestions.update(menu["Breads"] + menu["Veg Curries"] + menu["Non-Veg Curries"])

    # Exclude already selected items
    return list(suggestions - set(selected_items))

# Add Items to Cart
def add_to_cart(selected_items, suggestions_selected, customizations, custom_text):
    cart["selected_items"].extend(selected_items + suggestions_selected)
    cart["customizations"].append({
        "ingredients": customizations,
        "custom_text": custom_text
    })
    return f"Items added to cart: {', '.join(cart['selected_items'])}", gr.update(visible=True)

# Show Cart Summary
def show_cart():
    summary = "**Your Order Summary:**\n"
    summary += f"**Selected Items:** {', '.join(cart['selected_items'])}\n"
    for idx, customization in enumerate(cart["customizations"]):
        summary += f"\n**Customization {idx+1}:**\n"
        summary += f"Ingredients: {', '.join(customization['ingredients'])}\n"
        summary += f"Custom Dish Preference: {customization['custom_text']}\n"
    return summary

# Gradio App
with gr.Blocks() as app:
    gr.Markdown("# Restaurant Ordering System")
    
    # Section for Dropdown Menus
    with gr.Row():
        breads = gr.CheckboxGroup(menu["Breads"], label="Select Breads")
        curries = gr.CheckboxGroup(menu["Veg Curries"] + menu["Non-Veg Curries"], label="Select Curries")
        biryanis = gr.CheckboxGroup(menu["Biryanis"], label="Select Biryanis")

    # Submit Button for Items
    submit_btn = gr.Button("Proceed with Selection")
    suggestion_box = gr.CheckboxGroup([], label="Suggestions", interactive=True)
    custom_ingredients = gr.CheckboxGroup(["Extra Cheese", "Extra Spicy", "Less Oil", "No Onions", "No Garlic"], 
                                          label="Customize Your Dish")
    custom_text = gr.Textbox(label="Write Your Custom Dish Preference")

    # Cart and Final Order Section
    cart_output = gr.Textbox(label="Cart Status", interactive=False)
    final_order_btn = gr.Button("Show Final Order")
    order_summary = gr.Markdown()

    # Actions
    submit_btn.click(
        get_suggestions, inputs=[breads, curries, biryanis], outputs=[suggestion_box]
    )
    suggestion_box.change(
        add_to_cart, inputs=[breads, suggestion_box, custom_ingredients, custom_text], outputs=[cart_output]
    )
    final_order_btn.click(
        show_cart, inputs=[], outputs=[order_summary]
    )

app.launch()