File size: 5,102 Bytes
5eb18e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7f05403
5eb18e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"""
Create a Gradio interface for the complete code of the above case study.
The interface should allow users to add items to the cart, remove items, display the cart, and calculate the total cost interactively.
"""
import gradio as gr

from gradio import Blocks, Number, Button, Textbox

Inventory = [
    (1, "Apples", 250),
    (2, "Cherry", 650),
    (3, "Chickoo", 50),
    (4, "Grapes", 90),
    (5, "Mangoes", 150),
]

Your_Cart = []

def add_item_to_cart(item_id, Inventory):
    """
    Adds an item from the Inventory to the shopping cart.
    """
    try:
        item = Inventory[item_id - 1]
        Your_Cart.append(item)
        return f"{'>'*10} '{item[1]}' has been added to the cart. {'<'*10} \n\n"
    except IndexError:
        return f"Invalid item ID: {item_id}"

def remove_item(cart_index, cart_items):
    """
    Removes an item from the shopping cart.
    """
    try:
        removed_item = cart_items.pop(cart_index - 1)
        return f"{'>'*10} The item '{removed_item[1]}' has been removed from the cart, and your shopping cart has been updated. {'<'*10} \n\n"
    except IndexError:
        return "Invalid cart index or cart is empty."

def display_cart(Your_Cart):
    """
    Displays the items in the shopping cart.
    """
    if Your_Cart:
        cart_str = ""  # Initialize an empty string to store the cart display
        cart_str += "+" * 50 + "\n"
        cart_str += f"{'Your Cart'.center(40)}" + "\n"
        cart_str += "+" * 50 + "\n"
        cart_str += f"{'Index':<10} {'Name':<20} {'Quantity':<10} {'Price Per KG':<10}" + "\n"
        cart_str += "-" * 50 + "\n"
        unique_items = set(Your_Cart)  # Get unique items in the cart
        total_cost = 0
        for index, item in enumerate(unique_items):
            quantity = Your_Cart.count(item)
            price_per_kg = item[2]
            total_price = price_per_kg * quantity
            cart_str += f"{index+1:<10} {item[1]:<20} {quantity:<10} ${total_price:<10.2f}" + "\n"
            total_cost += total_price
        cart_str += "-" * 50 + "\n"
        cart_str += f"{'Total Cost':<40} ${total_cost:<10.2f}"  # Display grand total
        return cart_str  # Return the string representation of the cart
    else:
        return f"{'>'*10} Your cart is empty ! Buy something! {'<'*10} \n\n"

def total_cost(cart_items):
    """
    Calculates the total cost of all items in the shopping cart.
    """
    total = 0
    for item in cart_items:
        total += item[2]  # Assuming quantity is 1 for now
    return f"~"*40 + "\n" + f"Total cost: {total}".center(40) + "\n" + "~"*40 + "\n\n"

def gradio_interface(item_id, cart_index):
    """
    Handles adding/removing items, displaying the cart, and calculating the total cost.

    Args:
        item_id (int): The product ID to add to the cart (if any).
        cart_index (int): The product ID to remove from the cart (if any).

    Returns:
        tuple: A tuple containing the updated cart display, add message, remove message, and total cost.
    """

    # Add item
    add_msg = ""
    if item_id:
        add_msg = add_item_to_cart(item_id, Inventory)

    # Remove item
    remove_msg = ""
    if cart_index:
        remove_msg = remove_item(cart_index, Your_Cart)

    # Display the cart and calculate total cost
    cart_display = display_cart(Your_Cart)
    cost_msg = total_cost(Your_Cart)

    return cart_display, add_msg, remove_msg, cost_msg

# Gradio interface creation
def launch_gradio():
    """
    Launches the Gradio interface for the fruit shopping cart system.
    """

    with gr.Blocks() as demo:
        gr.Markdown("### Fruit Shopping Cart System")

        with gr.Row():
            item_id_input = gr.Number(label="Enter Product ID to Add to Cart", interactive=True)
            cart_index_input = gr.Number(label="Enter Index ID to Remove from Cart", interactive=True)

        with gr.Row():
            add_button = gr.Button("Add to Cart")
            remove_button = gr.Button("Remove from Cart")

        cart_display_output = gr.Textbox(label="Your Cart", interactive=False)
        add_message_output = gr.Textbox(label="Add Item Message", interactive=False)
        remove_message_output = gr.Textbox(label="Remove Item Message", interactive=False)
        total_cost_output = gr.Textbox(label="Total Cost", interactive=False)

        # Add item button click behavior
        add_button.click(
            gradio_interface,
            inputs=[item_id_input, gr.Number(visible=False, value=0)],  # Pass a hidden Number component for cart_index
            outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
        )

        # Remove item button click behavior
        remove_button.click(
            gradio_interface,
            inputs=[gr.Number(visible=False, value=0), cart_index_input],  # Pass a hidden Number component for item_id
            outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
        )
    demo.launch()

# Run the Gradio interface
if __name__ == "__main__":
    launch_gradio()