File size: 4,428 Bytes
3f07c1a
959e504
 
b62c794
959e504
b62c794
 
 
0453c5c
b62c794
0453c5c
5882a0b
959e504
 
 
b62c794
959e504
 
 
5882a0b
959e504
b62c794
 
5882a0b
 
 
b62c794
959e504
 
 
5882a0b
 
959e504
b62c794
 
 
 
 
 
 
 
 
5882a0b
959e504
 
 
 
5882a0b
959e504
 
5882a0b
 
 
959e504
b62c794
63060b7
b62c794
5882a0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0453c5c
 
 
 
 
 
5882a0b
 
0453c5c
 
 
5882a0b
0453c5c
5882a0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import gradio as gr
import json

# Load menu data
def load_menu_data():
    try:
        with open("menu.json", "r") as file:
            data = json.load(file)
        return data.get("menu", [])
    except Exception as e:
        print(f"Error loading menu: {e}")
        return []

menu_data = load_menu_data()

# Globals
current_order = []
preferences = {}


# Functions
def login_user(name, phone):
    if len(phone) != 10 or not phone.isdigit():
        return gr.update(value="Invalid phone number. Please enter a 10-digit number."), gr.Tabs.update(selected=0)
    return gr.update(value=f"Welcome, {name}! Please proceed to set your preferences."), gr.Tabs.update(selected=1)


def save_preferences(pref_type, allergies):
    preferences["type"] = pref_type
    preferences["allergies"] = allergies
    return gr.update(value="Preferences saved successfully! Proceed to the menu."), gr.Tabs.update(selected=2)


def get_filtered_menu():
    if not preferences.get("type"):
        return "Please set preferences first."
    filtered_menu = [
        item for item in menu_data
        if item["type"] == preferences["type"] or preferences["type"] == "Complete Menu"
    ]
    return filtered_menu


def add_to_order(item_name):
    current_order.append(item_name)
    return "\n".join(current_order)


def place_order():
    if not current_order:
        return "No items in the order. Please add items to your order before placing it.", gr.Tabs.update(selected=2)
    return f"Order placed successfully! Items: {', '.join(current_order)}.", gr.Tabs.update(selected=4)


# App Interface
with gr.Blocks() as app:
    # Login Screen
    with gr.Tabs() as tabs:
        with gr.Tab("Login"):
            name = gr.Textbox(label="Name", placeholder="Enter your name")
            phone = gr.Textbox(label="Phone", placeholder="Enter your 10-digit phone number")
            login_button = gr.Button("Login")
            login_output = gr.Label()
            login_button.click(
                login_user,
                inputs=[name, phone],
                outputs=[login_output, tabs]
            )

        # Preferences Screen
        with gr.Tab("Preferences"):
            pref_type = gr.Radio(
                ["Vegetarian", "Non-Vegetarian", "Complete Menu"],
                label="Select Preference"
            )
            allergies = gr.CheckboxGroup(
                ["Peanuts", "Cheese", "Pork", "Custom"],
                label="Allergies (if any)"
            )
            save_pref_button = gr.Button("Save Preferences")
            pref_output = gr.Label()
            save_pref_button.click(
                save_preferences,
                inputs=[pref_type, allergies],
                outputs=[pref_output, tabs]
            )

        # Menu Screen
        with gr.Tab("Menu"):
            menu_display = gr.Column()
            current_order_display = gr.Textbox(label="Current Order", interactive=False)
            proceed_to_summary = gr.Button("Proceed to Order Summary")
            proceed_to_summary.click(
                lambda: gr.Tabs.update(selected=3),
                inputs=None,
                outputs=[tabs]
            )

            def load_menu():
                filtered_menu = get_filtered_menu()
                if not filtered_menu:
                    return [gr.Text("No items available for the selected preferences.")]
                menu_buttons = []
                for item in filtered_menu:
                    button = gr.Button(f"{item['name']} - ₹{item['price']}")
                    button.click(
                        lambda name=item["name"]: add_to_order(name),
                        inputs=None,
                        outputs=current_order_display
                    )
                    menu_buttons.append(button)
                return menu_buttons

            menu_display.children = load_menu()

        # Order Summary Screen
        with gr.Tab("Order Summary"):
            order_summary = gr.Textbox(label="Your Order", interactive=False)
            place_order_button = gr.Button("Place Order")
            order_output = gr.Label()
            place_order_button.click(
                place_order,
                inputs=None,
                outputs=[order_output, tabs]
            )

        # Thank You Screen
        with gr.Tab("Thank You"):
            thank_you_message = gr.Label("Thank you for placing your order!")