File size: 4,017 Bytes
c053032
33eba6b
 
 
444fe60
c053032
 
444fe60
c053032
 
 
 
 
 
 
 
8f55c48
c053032
 
 
 
 
 
444fe60
c053032
 
 
 
 
 
 
 
 
 
 
444fe60
c053032
 
 
 
444fe60
c053032
 
33eba6b
c053032
444fe60
c053032
 
 
 
 
33eba6b
444fe60
c053032
444fe60
 
33eba6b
 
c053032
444fe60
c053032
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444fe60
c053032
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
import gradio as gr
from models.salesforce import fetch_menu_items, place_order_in_salesforce
from models.cart import add_to_cart, view_cart, clear_cart
from models.user import login_user, signup_user

# Global user state
current_user = {"email": None, "name": None}

# Login Interface
def login(email, password):
    success, message = login_user(email, password)
    if success:
        current_user["email"] = email
        current_user["name"] = message
        return "Login successful! Redirecting to menu..."
    return f"Login failed: {message}"

# Signup Interface
def signup(name, email, phone, password):
    success, message = signup_user(name, email, phone, password)
    if success:
        return "Signup successful! Please login now."
    return f"Signup failed: {message}"

# Load Menu Items
def load_menu(preference):
    items = fetch_menu_items()
    filtered_items = [
        item
        for item in items
        if preference == "All"
        or (preference == "Veg" and item["Veg_NonVeg__c"] == "Veg")
        or (preference == "Non-Veg" and item["Veg_NonVeg__c"] == "Non-Veg")
    ]
    return filtered_items

# Add to Cart
def add_to_cart_interface(item_name, price):
    add_to_cart(item_name, price)
    return f"Added {item_name} to cart!"

# View Cart
def view_cart_interface():
    cart, total = view_cart()
    return cart, total

# Place Order
def place_order_interface():
    email = current_user["email"]
    if not email:
        return "Error: Please login to place an order."
    cart, total = view_cart()
    if not cart:
        return "Error: Cart is empty!"
    order_details = "\n".join([f"{item['Name']} - ${item['Price']} x {item['Quantity']}" for item in cart])
    try:
        place_order_in_salesforce(email, order_details, total)
        clear_cart()
        return f"Order placed successfully! Total: ${total}"
    except Exception as e:
        return f"Error placing order: {str(e)}"

# Gradio Interfaces
with gr.Blocks() as app:
    with gr.Tab("Login"):
        email = gr.Textbox(label="Email", placeholder="Enter your email")
        password = gr.Textbox(label="Password", type="password", placeholder="Enter your password")
        login_button = gr.Button("Login")
        login_output = gr.Textbox(label="Login Status")
        login_button.click(login, inputs=[email, password], outputs=login_output)

    with gr.Tab("Signup"):
        name = gr.Textbox(label="Name", placeholder="Enter your name")
        signup_email = gr.Textbox(label="Email", placeholder="Enter your email")
        phone = gr.Textbox(label="Phone", placeholder="Enter your phone number")
        signup_password = gr.Textbox(label="Password", type="password", placeholder="Create a password")
        signup_button = gr.Button("Signup")
        signup_output = gr.Textbox(label="Signup Status")
        signup_button.click(signup, inputs=[name, signup_email, phone, signup_password], outputs=signup_output)

    with gr.Tab("Menu"):
        preference = gr.Radio(["All", "Veg", "Non-Veg"], label="Filter Menu", value="All")
        menu_output = gr.Dataframe(headers=["Name", "Description", "Price"])
        preference.change(lambda p: load_menu(p), inputs=[preference], outputs=menu_output)
        item_name = gr.Textbox(label="Item Name")
        item_price = gr.Textbox(label="Price")
        add_button = gr.Button("Add to Cart")
        cart_status = gr.Textbox(label="Cart Status")
        add_button.click(add_to_cart_interface, inputs=[item_name, item_price], outputs=cart_status)

    with gr.Tab("Cart"):
        view_button = gr.Button("View Cart")
        cart_output = gr.Dataframe(headers=["Name", "Price", "Quantity"])
        total_output = gr.Textbox(label="Total Amount")
        view_button.click(view_cart_interface, outputs=[cart_output, total_output])

        place_order_button = gr.Button("Place Order")
        order_status = gr.Textbox(label="Order Status")
        place_order_button.click(place_order_interface, outputs=order_status)

app.launch()