neerajkalyank commited on
Commit
50d16cc
·
verified ·
1 Parent(s): e802a66

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -98
app.py CHANGED
@@ -6,10 +6,9 @@ def load_menu_data():
6
  try:
7
  with open("menu.json", "r") as file:
8
  data = json.load(file)
9
- return data.get("menu", [])
10
  except Exception as e:
11
- print(f"Error loading menu: {e}")
12
- return []
13
 
14
  menu_data = load_menu_data()
15
 
@@ -17,21 +16,16 @@ menu_data = load_menu_data()
17
  current_order = []
18
  preferences = {}
19
 
20
-
21
  # Functions
22
  def login_user(name, phone):
23
- if not name.strip(): # Ensure name is not empty
24
- return "Name cannot be empty. Please enter your name.", gr.Tabs.update(selected=0)
25
- if len(phone) != 10 or not phone.isdigit(): # Ensure phone number is valid
26
- return "Invalid phone number. Please enter a valid 10-digit number.", gr.Tabs.update(selected=0)
27
- return f"Welcome, {name}! Please proceed to set your preferences.", gr.Tabs.update(selected=1)
28
-
29
 
30
  def save_preferences(pref_type, allergies):
31
  preferences["type"] = pref_type
32
  preferences["allergies"] = allergies
33
- return "Preferences saved successfully! Proceed to the menu.", gr.Tabs.update(selected=2)
34
-
35
 
36
  def get_filtered_menu():
37
  if not preferences.get("type"):
@@ -42,101 +36,83 @@ def get_filtered_menu():
42
  ]
43
  return filtered_menu
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  def add_to_order(item_name):
47
  current_order.append(item_name)
48
  return "\n".join(current_order)
49
 
50
-
51
  def place_order():
52
  if not current_order:
53
- return "No items in the order. Please add items to your order before placing it.", gr.Tabs.update(selected=2)
54
- return f"Order placed successfully! Items: {', '.join(current_order)}.", gr.Tabs.update(selected=4)
55
-
56
-
57
- def load_menu():
58
- filtered_menu = get_filtered_menu()
59
- if isinstance(filtered_menu, str): # Check for error message
60
- return gr.update(value=filtered_menu)
61
- return [
62
- f"{item['name']} - ₹{item['price']}" for item in filtered_menu
63
- ]
64
-
65
 
66
  # App Interface
67
  with gr.Blocks() as app:
68
- # Tabs for navigation
69
- with gr.Tabs() as tabs:
70
- # Login Screen
71
- with gr.Tab("Login"):
72
- with gr.Row():
73
- name = gr.Textbox(label="Name", placeholder="Enter your name")
74
- phone = gr.Textbox(label="Phone", placeholder="Enter your 10-digit phone number")
75
- login_button = gr.Button("Login")
76
- login_output = gr.Label()
77
- login_button.click(
78
- login_user,
79
- inputs=[name, phone],
80
- outputs=[login_output, tabs]
81
- )
82
-
83
- # Preferences Screen
84
- with gr.Tab("Preferences"):
85
- pref_type = gr.Radio(
86
- ["Vegetarian", "Non-Vegetarian", "Complete Menu"],
87
- label="Select Preference"
88
- )
89
- allergies = gr.CheckboxGroup(
90
- ["Peanuts", "Cheese", "Pork", "Custom"],
91
- label="Allergies (if any)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  )
93
- save_pref_button = gr.Button("Save Preferences")
94
- pref_output = gr.Label()
95
- save_pref_button.click(
96
- save_preferences,
97
- inputs=[pref_type, allergies],
98
- outputs=[pref_output, tabs]
99
- )
100
-
101
- # Menu Screen
102
- with gr.Tab("Menu"):
103
- menu_list = gr.Textbox(label="Menu Items", interactive=False, lines=10)
104
- load_menu_button = gr.Button("Load Menu")
105
- load_menu_button.click(
106
- lambda: "\n".join(load_menu()),
107
- inputs=None,
108
- outputs=menu_list
109
- )
110
-
111
- current_order_display = gr.Textbox(label="Current Order", interactive=False)
112
- item_name = gr.Textbox(label="Enter Item Name to Add")
113
- add_item_button = gr.Button("Add to Order")
114
- add_item_button.click(
115
- add_to_order,
116
- inputs=item_name,
117
- outputs=current_order_display
118
- )
119
-
120
- proceed_to_summary = gr.Button("Proceed to Order Summary")
121
- proceed_to_summary.click(
122
- lambda: gr.Tabs.update(selected=3),
123
- inputs=None,
124
- outputs=[tabs]
125
- )
126
-
127
- # Order Summary Screen
128
- with gr.Tab("Order Summary"):
129
- order_summary = gr.Textbox(label="Your Order", interactive=False)
130
- place_order_button = gr.Button("Place Order")
131
- order_output = gr.Label()
132
- place_order_button.click(
133
- place_order,
134
- inputs=None,
135
- outputs=[order_output, tabs]
136
- )
137
-
138
- # Thank You Screen
139
- with gr.Tab("Thank You"):
140
- thank_you_message = gr.Label("Thank you for placing your order!")
141
-
142
  app.launch()
 
6
  try:
7
  with open("menu.json", "r") as file:
8
  data = json.load(file)
9
+ return data["menu"]
10
  except Exception as e:
11
+ return f"Error loading menu: {e}"
 
12
 
13
  menu_data = load_menu_data()
14
 
 
16
  current_order = []
17
  preferences = {}
18
 
 
19
  # Functions
20
  def login_user(name, phone):
21
+ if len(phone) != 10 or not phone.isdigit():
22
+ return "Invalid phone number. Please enter a 10-digit number."
23
+ return f"Welcome, {name}! Please proceed to set your preferences."
 
 
 
24
 
25
  def save_preferences(pref_type, allergies):
26
  preferences["type"] = pref_type
27
  preferences["allergies"] = allergies
28
+ return "Preferences saved successfully! Proceed to the menu."
 
29
 
30
  def get_filtered_menu():
31
  if not preferences.get("type"):
 
36
  ]
37
  return filtered_menu
38
 
39
+ def generate_menu_buttons():
40
+ menu_items = get_filtered_menu()
41
+ if isinstance(menu_items, str):
42
+ return [gr.Label(value=menu_items)]
43
+
44
+ buttons = []
45
+ for item in menu_items:
46
+ buttons.append(
47
+ gr.Button(
48
+ value=f"{item['name']} - ₹{item['price']}",
49
+ elem_id=f"menu_item_{item['id']}",
50
+ variant="primary"
51
+ )
52
+ )
53
+ return buttons
54
 
55
  def add_to_order(item_name):
56
  current_order.append(item_name)
57
  return "\n".join(current_order)
58
 
 
59
  def place_order():
60
  if not current_order:
61
+ return "No items in the order. Please add items to your order before placing it."
62
+ return f"Order placed successfully! Items: {', '.join(current_order)}."
 
 
 
 
 
 
 
 
 
 
63
 
64
  # App Interface
65
  with gr.Blocks() as app:
66
+ # Login Screen
67
+ with gr.Tab("Login"):
68
+ name = gr.Textbox(label="Name", placeholder="Enter your name")
69
+ phone = gr.Textbox(label="Phone", placeholder="Enter your 10-digit phone number")
70
+ login_button = gr.Button("Login")
71
+ login_output = gr.Label()
72
+ login_button.click(login_user, inputs=[name, phone], outputs=login_output)
73
+
74
+ # Preferences Screen
75
+ with gr.Tab("Preferences"):
76
+ pref_type = gr.Radio(
77
+ ["Vegetarian", "Non-Vegetarian", "Complete Menu"],
78
+ label="Select Preference"
79
+ )
80
+ allergies = gr.CheckboxGroup(
81
+ ["Peanuts", "Cheese", "Pork", "Custom"],
82
+ label="Allergies (if any)"
83
+ )
84
+ save_pref_button = gr.Button("Save Preferences")
85
+ pref_output = gr.Label()
86
+ save_pref_button.click(save_preferences, inputs=[pref_type, allergies], outputs=pref_output)
87
+
88
+ # Menu Screen
89
+ with gr.Tab("Menu"):
90
+ menu_buttons = gr.Column(elem_id="menu_buttons")
91
+ current_order_display = gr.Textbox(label="Current Order")
92
+ proceed_to_summary = gr.Button("Proceed to Order Summary")
93
+
94
+ # Dynamically generate menu buttons after saving preferences
95
+ save_pref_button.click(generate_menu_buttons, outputs=menu_buttons)
96
+
97
+ # Handle adding items to order
98
+ for item in menu_data:
99
+ menu_buttons.append(
100
+ gr.Button(
101
+ value=f"{item['name']} - ₹{item['price']}",
102
+ elem_id=f"item-{item['id']}"
103
+ ).click(
104
+ add_to_order,
105
+ inputs=None,
106
+ outputs=current_order_display
107
+ )
108
  )
109
+
110
+ # Order Summary Screen
111
+ with gr.Tab("Order Summary"):
112
+ order_summary = gr.Textbox(label="Your Order", interactive=False)
113
+ place_order_button = gr.Button("Place Order")
114
+ order_output = gr.Label()
115
+ place_order_button.click(place_order, inputs=None, outputs=order_output)
116
+
117
+ # Launch App
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  app.launch()