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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +129 -99
app.py CHANGED
@@ -1,118 +1,148 @@
1
  import gradio as gr
2
- import json
3
-
4
- # Load menu data
5
- def load_menu_data():
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
-
15
- # Globals
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"):
32
- return "Please set preferences first."
33
- filtered_menu = [
34
- item for item in menu_data
35
- if item["type"] == preferences["type"] or preferences["type"] == "Complete Menu"
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()
 
1
  import gradio as gr
2
+ import pandas as pd
3
+ import os
4
+
5
+ # Initialize order and customer database
6
+ DATA_FILE = "customer_data.xlsx"
7
+ if not os.path.exists(DATA_FILE):
8
+ df = pd.DataFrame(columns=["Name", "Phone", "Preferences", "Allergies", "Order"])
9
+ df.to_excel(DATA_FILE, index=False)
10
+
11
+ ORDER_NOTIFICATION_FILE = "orders.xlsx"
12
+ if not os.path.exists(ORDER_NOTIFICATION_FILE):
13
+ orders_df = pd.DataFrame(columns=["Name", "Phone", "Order"])
14
+ orders_df.to_excel(ORDER_NOTIFICATION_FILE, index=False)
15
+
16
+
17
+ # Save customer data
18
+ def save_customer_data(name, phone, preferences, allergies):
19
+ df = pd.read_excel(DATA_FILE)
20
+ new_entry = {"Name": name, "Phone": phone, "Preferences": preferences, "Allergies": allergies, "Order": ""}
21
+ df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)
22
+ df.to_excel(DATA_FILE, index=False)
23
+
24
+
25
+ # Save order for notification
26
+ def save_order_notification(name, phone, order):
27
+ orders_df = pd.read_excel(ORDER_NOTIFICATION_FILE)
28
+ new_order = {"Name": name, "Phone": phone, "Order": order}
29
+ orders_df = pd.concat([orders_df, pd.DataFrame([new_order])], ignore_index=True)
30
+ orders_df.to_excel(ORDER_NOTIFICATION_FILE, index=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
 
 
 
32
 
33
+ # Menu data
34
+ menu = [
35
+ {"name": "Paneer Butter Masala", "type": "Vegetarian"},
36
+ {"name": "Chicken Biryani", "type": "Non-Vegetarian"},
37
+ {"name": "Dal Tadka", "type": "Vegetarian"},
38
+ {"name": "Fish Curry", "type": "Non-Vegetarian"}
39
+ ]
40
 
41
+ # Get filtered menu based on preferences
42
+ def get_filtered_menu(preferences):
43
+ if preferences == "Vegetarian":
44
+ return [item["name"] for item in menu if item["type"] == "Vegetarian"]
45
+ elif preferences == "Non-Vegetarian":
46
+ return [item["name"] for item in menu if item["type"] == "Non-Vegetarian"]
47
+ return [item["name"] for item in menu]
48
+
49
+
50
+ # Gradio app
51
  with gr.Blocks() as app:
52
+ # Variables to store user data across screens
53
+ user_name = gr.State()
54
+ user_phone = gr.State()
55
+ user_preferences = gr.State()
56
+ user_allergies = gr.State()
57
+ user_order = gr.State([])
58
+
59
  # Login Screen
60
  with gr.Tab("Login"):
61
+ gr.Markdown("# Welcome to BH Restaurant")
62
+ name_input = gr.Textbox(label="Name", placeholder="Enter your name")
63
+ phone_input = gr.Textbox(label="Phone Number", placeholder="Enter your 10-digit phone number")
64
+ login_btn = gr.Button("Login")
65
+ login_output = gr.Textbox(visible=False)
66
+
67
+ def login(name, phone):
68
+ if not name or not phone:
69
+ return "Please enter both Name and Phone Number.", None, None
70
+ return "Login successful! Redirecting to preferences...", name, phone
71
+
72
+ login_btn.click(login, inputs=[name_input, phone_input], outputs=[login_output, user_name, user_phone])
73
 
74
  # Preferences Screen
75
  with gr.Tab("Preferences"):
76
+ gr.Markdown("# Set Your Preferences")
77
+ preferences_input = gr.Radio(
78
+ ["Vegetarian", "Non-Vegetarian", "Complete Menu"], label="Food Preferences"
79
  )
80
+ allergies_input = gr.Textbox(label="Any Allergies?")
81
+ save_pref_btn = gr.Button("Save Preferences")
82
+ pref_output = gr.Textbox(visible=False)
83
+
84
+ def save_preferences(preferences, allergies, name, phone):
85
+ save_customer_data(name, phone, preferences, allergies)
86
+ return "Preferences saved! Redirecting to menu...", preferences, allergies
87
+
88
+ save_pref_btn.click(
89
+ save_preferences,
90
+ inputs=[preferences_input, allergies_input, user_name, user_phone],
91
+ outputs=[pref_output, user_preferences, user_allergies],
92
  )
 
 
 
93
 
94
  # Menu Screen
95
  with gr.Tab("Menu"):
96
+ gr.Markdown("# Menu")
97
+ menu_dropdown = gr.Dropdown(choices=[], label="Select an Item")
98
+ add_to_order_btn = gr.Button("Add to Order")
99
+ order_summary = gr.Textbox(label="Current Order", interactive=False)
100
+
101
+ def load_menu(preferences):
102
+ return gr.update(choices=get_filtered_menu(preferences))
103
+
104
+ def add_to_order(item, order_list):
105
+ if item:
106
+ order_list.append(item)
107
+ return ", ".join(order_list), order_list
108
+
109
+ menu_dropdown.change(load_menu, inputs=[user_preferences], outputs=[menu_dropdown])
110
+ add_to_order_btn.click(add_to_order, inputs=[menu_dropdown, user_order], outputs=[order_summary, user_order])
111
+
 
 
 
 
112
  # Order Summary Screen
113
  with gr.Tab("Order Summary"):
114
+ gr.Markdown("# Order Summary")
115
+ final_order_summary = gr.Textbox(label="Your Final Order", interactive=False)
116
+ place_order_btn = gr.Button("Place Order")
117
+ thank_you_output = gr.Textbox(visible=False)
118
+
119
+ def place_order(order_list, name, phone):
120
+ order_str = ", ".join(order_list)
121
+ save_order_notification(name, phone, order_str)
122
+ return "Thank you for your order! Redirecting to Thank You page."
123
+
124
+ place_order_btn.click(
125
+ place_order,
126
+ inputs=[user_order, user_name, user_phone],
127
+ outputs=[thank_you_output],
128
+ )
129
+
130
+ # Thank You Page
131
+ with gr.Tab("Thank You"):
132
+ gr.Markdown("# Thank You!")
133
+ gr.Markdown("Your order has been placed successfully. Please wait while the chef prepares your meal.")
134
+
135
+ # Chef/Waiter Notification Screen
136
+ with gr.Tab("Chef/Waiter Notifications"):
137
+ gr.Markdown("# Order Notifications")
138
+ refresh_btn = gr.Button("Refresh Orders")
139
+ order_list = gr.Textbox(label="Orders", interactive=False)
140
+
141
+ def load_orders():
142
+ orders_df = pd.read_excel(ORDER_NOTIFICATION_FILE)
143
+ return orders_df.to_string(index=False)
144
+
145
+ refresh_btn.click(load_orders, outputs=[order_list])
146
 
147
+ # Launch the app
148
  app.launch()