neerajkalyank commited on
Commit
63060b7
·
verified ·
1 Parent(s): c6364b3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +134 -115
app.py CHANGED
@@ -1,129 +1,148 @@
1
  import gradio as gr
2
  import pandas as pd
3
- import json
4
  import os
5
 
6
- # Load menu data
7
- with open("menu.json", "r") as f:
8
- menu = json.load(f)
9
-
10
- # Initialize customer database
11
  DATA_FILE = "customer_data.xlsx"
12
  if not os.path.exists(DATA_FILE):
13
- df = pd.DataFrame(columns=["Name", "Phone", "Preferences", "Allergies", "Table", "Order"])
14
  df.to_excel(DATA_FILE, index=False)
15
 
16
- # Function to save customer data
17
- def save_customer_data(name, phone, preferences, allergies, table):
 
 
 
 
 
 
18
  df = pd.read_excel(DATA_FILE)
19
- new_entry = {
20
- "Name": name,
21
- "Phone": phone,
22
- "Preferences": preferences,
23
- "Allergies": allergies,
24
- "Table": table,
25
- "Order": ""
26
- }
27
  df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)
28
  df.to_excel(DATA_FILE, index=False)
29
 
30
- # Function to get menu based on preferences
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  def get_filtered_menu(preferences):
32
- if preferences == "Complete Menu":
33
- return menu
34
- return [item for item in menu if item["type"] == preferences]
35
-
36
- # Function to display item details
37
- def show_item_details(item_name):
38
- item = next((x for x in menu if x["name"] == item_name), None)
39
- if item:
40
- return (
41
- item["image"], # Image
42
- f"**{item['name']}**\nPortion: {item['portion']}\nNutrition: {item['nutrition']}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  )
44
- return None, "Item not found."
45
-
46
- # Main application workflow
47
- def main_workflow(table_id):
48
- # Define Gradio blocks
49
- with gr.Blocks() as app:
50
- login_tab = gr.Tab("Login")
51
- preferences_tab = gr.Tab("Preferences")
52
- menu_tab = gr.Tab("Menu")
53
- order_tab = gr.Tab("Order Summary")
54
-
55
- # Login Tab
56
- with login_tab:
57
- gr.Markdown("# Welcome to BH Restaurant")
58
- with gr.Row():
59
- name = gr.Textbox(label="Name", placeholder="Enter your name") # Removed required=True
60
- phone = gr.Textbox(label="Phone Number", placeholder="Enter your 10-digit phone number") # Removed required=True
61
- login_btn = gr.Button("Login")
62
- login_output = gr.Textbox(visible=False)
63
-
64
- # Update the login function to manually check if the fields are filled
65
- def login(name, phone):
66
- if not name or not phone:
67
- return "Please enter both Name and Phone Number.", None # Check if inputs are empty
68
- # Check for existing user
69
- df = pd.read_excel(DATA_FILE)
70
- if not df[df["Phone"] == phone].empty:
71
- return "Welcome back! Proceeding to the menu...", preferences_tab
72
- return "New user detected. Proceed to preferences.", preferences_tab
73
-
74
- login_btn.click(login, inputs=[name, phone], outputs=[login_output, preferences_tab])
75
-
76
- # Preferences Tab
77
- with preferences_tab:
78
- gr.Markdown("# Preferences")
79
- preferences = gr.Radio(["Vegetarian", "Vegan", "Halal", "Complete Menu"], label="Food Preferences")
80
- allergies = gr.Textbox(label="Any Allergies?")
81
- save_pref_btn = gr.Button("Save Preferences")
82
-
83
- def save_preferences(name, phone, preferences, allergies):
84
- save_customer_data(name, phone, preferences, allergies, table_id)
85
- return f"Preferences saved for {name}. Proceeding to menu..."
86
-
87
- save_pref_btn.click(save_preferences, inputs=[name, phone, preferences, allergies], outputs=[menu_tab])
88
-
89
- # Menu Tab
90
- with menu_tab:
91
- gr.Markdown("# Menu")
92
- menu_dropdown = gr.Dropdown(label="Menu", choices=[])
93
- menu_details_btn = gr.Button("Show Details")
94
- menu_image = gr.Image()
95
- menu_info = gr.Markdown()
96
- menu_add_btn = gr.Button("Add to Order")
97
- order_summary = gr.Textbox(placeholder="Order summary")
98
-
99
- def display_menu(preferences):
100
- filtered_menu = get_filtered_menu(preferences)
101
- return gr.update(choices=[item["name"] for item in filtered_menu])
102
-
103
- menu_details_btn.click(show_item_details, inputs=menu_dropdown, outputs=[menu_image, menu_info])
104
- menu_add_btn.click(lambda selected_items: order_summary.update(value=", ".join(selected_items)), inputs=menu_dropdown, outputs=order_summary)
105
-
106
- # Order Tab
107
- with order_tab:
108
- gr.Markdown("# Order Summary")
109
- order_output = gr.Textbox(label="Your Order", interactive=False)
110
- place_order_btn = gr.Button("Place Order")
111
- order_status = gr.Textbox(visible=False)
112
-
113
- def place_order(selected_items):
114
- # Save order to the customer data file
115
- df = pd.read_excel(DATA_FILE)
116
- customer_data = df[df["Table"] == table_id].iloc[0]
117
- order = selected_items
118
- df.loc[df["Table"] == table_id, "Order"] = ", ".join(order)
119
- df.to_excel(DATA_FILE, index=False)
120
- return "Order placed successfully! The kitchen has been notified."
121
-
122
- place_order_btn.click(place_order, inputs=order_summary, outputs=order_status)
123
-
124
- return app
125
-
126
- # Create Gradio app for table 1
127
- if __name__ == "__main__":
128
- app = main_workflow(table_id=1)
129
- 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()