File size: 3,262 Bytes
45e90b2
80e8b2f
 
 
45e90b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80e8b2f
fa4e05b
 
 
 
 
 
 
 
0922719
fa4e05b
 
 
 
 
 
 
 
0922719
fa4e05b
45e90b2
fa4e05b
0922719
fa4e05b
 
 
 
0922719
fa4e05b
45e90b2
fa4e05b
6fce031
fa4e05b
 
 
0922719
 
 
 
 
4fa3ff7
 
 
 
 
 
 
 
 
 
45e90b2
4fa3ff7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45e90b2
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
# app.py
import gradio as gr
from datetime import datetime

# Dynamic menu data
menu = {
    "Bread": [
        {"name": "Roti", "price": 2},
        {"name": "Naan", "price": 3}
    ],
    "Veg Curries": [
        {"name": "Paneer Butter Masala", "price": 10},
        {"name": "Mixed Vegetable Curry", "price": 8}
    ],
    "Non-Veg Curries": [
        {"name": "Chicken Curry", "price": 12},
        {"name": "Mutton Curry", "price": 15}
    ],
    "Biryanis": [
        {"name": "Vegetable Biryani", "price": 10},
        {"name": "Chicken Biryani", "price": 12}
    ]
}

# Ensure render_menu is defined before usage
def render_menu():
    rendered_menu = ""
    for category, items in menu.items():
        rendered_menu += f"\n{category}:\n"
        for item in items:
            rendered_menu += f"- {item['name']} (${item['price']})\n"
    return rendered_menu

def generate_invoice(customer_name, table_number, selected_items, wishes):
    try:
        selected_items = [item.strip() for item in selected_items.split(',')]
        items = [
            item for category in menu.values() for item in category if item['name'] in selected_items
        ]
        total = sum(item['price'] for item in items)

        invoice = f"""
        -----------------------------------------
                    Restaurant Invoice
        -----------------------------------------
        Date: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
        Customer Name: {customer_name}
        Table Number: {table_number}
        -----------------------------------------
        Items Ordered:
        """
        for item in items:
            invoice += f"- {item['name']} (${item['price']})\n"

        invoice += f"""
        -----------------------------------------
        Total Amount: ${total:.2f}
        -----------------------------------------
        Customer Wishes:
        """
        for wish in wishes.split(','):
            invoice += f"- {wish.strip()}\n"

        invoice += """
        -----------------------------------------
        Thank you for dining with us!
        Have a great day!
        """
        return invoice
    except Exception as e:
        return f"Error generating invoice: {str(e)}"

with gr.Blocks() as demo:
    gr.Markdown("""# Restaurant Invoice Generator
    ### Welcome to our restaurant!
    Use this app to place your order and generate a customized invoice.
    """)

    with gr.Row():
        customer_name = gr.Textbox(label="Customer Name")
        table_number = gr.Textbox(label="Table Number")

    # Ensure render_menu is called after its definition
    menu_display = gr.Textbox(show_label=False, interactive=False, value=render_menu())

    selected_items = gr.Textbox(label="Selected Items (comma-separated)", placeholder="e.g., Roti, Paneer Butter Masala")
    wishes = gr.Textbox(label="Special Wishes (comma-separated)", placeholder="e.g., Extra spicy, Less salt")

    generate_invoice_btn = gr.Button("Generate Invoice")

    invoice_output = gr.Textbox(label="Generated Invoice", lines=15, interactive=False)

    generate_invoice_btn.click(
        generate_invoice, 
        inputs=[customer_name, table_number, selected_items, wishes], 
        outputs=invoice_output
    )

demo.launch()