Spaces:
Sleeping
Sleeping
File size: 6,709 Bytes
4ee4ce0 54f831b 641a1a6 91f1be6 641a1a6 e11a47c 012d61e 641a1a6 012d61e e11a47c 012d61e 9da809b e767e0f 012d61e 641a1a6 e767e0f e11a47c a57b5d2 e767e0f a088b71 e767e0f a088b71 d59f645 9da809b 15d82c2 d59f645 a088b71 a57b5d2 9da809b e767e0f 9da809b f9601e7 45a308e a088b71 45a308e 3e01568 54f831b e767e0f a088b71 e767e0f 3e01568 91f1be6 3e01568 641a1a6 91f1be6 641a1a6 012d61e e11a47c 012d61e e767e0f a088b71 3e01568 641a1a6 e11a47c 3e01568 e11a47c 641a1a6 91f1be6 e11a47c a088b71 91f1be6 a088b71 e11a47c a088b71 641a1a6 e11a47c 54f831b a088b71 |
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
import bcrypt
import gradio as gr
from simple_salesforce import Salesforce
# Salesforce Connection
sf = Salesforce(username='diggavalli98@gmail.com', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
# Function to Hash Password
def hash_password(password):
return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
# Function to Verify Password
def verify_password(plain_password, hashed_password):
return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password.encode('utf-8'))
# Signup function
def signup(name, email, phone, password):
try:
email = email.strip()
# Check if the email already exists in Salesforce
query = f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'"
result = sf.query(query)
if len(result['records']) > 0:
return "Email already exists! Please use a different email."
# Hash the password
hashed_password = hash_password(password)
# Create the new user record
sf.Customer_Login__c.create({
'Name': name.strip(),
'Email__c': email,
'Phone_Number__c': phone.strip(),
'Password__c': hashed_password
})
return "Signup successful! You can now login."
except Exception as e:
return f"Error during signup: {str(e)}"
# Login function
def login(email, password):
try:
email = email.strip()
password = password.strip()
# Query Salesforce for user details
query = f"SELECT Name, Password__c FROM Customer_Login__c WHERE Email__c = '{email}'"
result = sf.query(query)
if len(result['records']) == 0:
return "Invalid email or password.", None
user = result['records'][0]
stored_password = user['Password__c']
# Verify the entered password with the stored hash
if verify_password(password, stored_password):
return "Login successful!", user['Name']
else:
return "Invalid email or password.", None
except Exception as e:
return f"Error during login: {str(e)}", None
# Function to load menu data
def load_menu_from_salesforce():
try:
query = "SELECT Name, Price__c, Description__c, Image1__c, Veg_NonVeg__c, Section__c FROM Menu_Item__c"
result = sf.query(query)
return result['records']
except Exception as e:
return []
# Function to filter menu items
def filter_menu(preference):
menu_data = load_menu_from_salesforce()
filtered_data = {}
for item in menu_data:
if "Section__c" not in item or "Veg_NonVeg__c" not in item:
continue
if item["Section__c"] not in filtered_data:
filtered_data[item["Section__c"]] = []
if preference == "All" or (preference == "Veg" and item["Veg_NonVeg__c"] in ["Veg", "Both"]) or (preference == "Non-Veg" and item["Veg_NonVeg__c"] in ["Non veg", "Both"]):
filtered_data[item["Section__c"].strip()].append(item)
html_content = '<div style="padding: 20px; max-width: 1200px; margin: auto;">'
for section, items in filtered_data.items():
if items:
html_content += f"<h2 style='text-align: center;'>{section}</h2>"
html_content += '<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; justify-content: center;">'
for item in items:
html_content += f"""
<div style="border: 1px solid #ddd; border-radius: 10px; box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); overflow: hidden;">
<img src="{item.get('Image1__c', '')}" style="width: 100%; height: 250px; object-fit: cover;">
<div style="padding: 10px;">
<h3 style='font-size: 1.2em; text-align: center;'>{item['Name']}</h3>
<p style='font-size: 1.1em; color: green; text-align: center;'>${item['Price__c']}</p>
<p style='font-size: 0.9em; text-align: justify;'>{item['Description__c']}</p>
</div>
</div>
"""
html_content += '</div>'
html_content += '</div>'
if not any(filtered_data.values()):
return "<p>No items match your filter.</p>"
return html_content
# Gradio App
with gr.Blocks() as app:
with gr.Row():
gr.HTML("<h1 style='text-align: center;'>Welcome to Biryani Hub</h1>")
with gr.Row(visible=True) as login_page:
with gr.Column():
login_email = gr.Textbox(label="Email")
login_password = gr.Textbox(label="Password", type="password")
login_button = gr.Button("Login")
signup_button = gr.Button("Go to Signup")
login_output = gr.Textbox(label="Status")
with gr.Row(visible=False) as signup_page:
with gr.Column():
signup_name = gr.Textbox(label="Name")
signup_email = gr.Textbox(label="Email")
signup_phone = gr.Textbox(label="Phone")
signup_password = gr.Textbox(label="Password", type="password")
submit_signup = gr.Button("Signup")
login_redirect = gr.Button("Go to Login")
signup_output = gr.Textbox(label="Status")
with gr.Row(visible=False) as menu_page:
preference = gr.Radio(choices=["All", "Veg", "Non-Veg"], label="Filter Preference", value="All")
menu_output = gr.HTML()
with gr.Row(visible=False) as footer:
gr.HTML("<footer style='text-align: center;'>Thank you! Welcome again!</footer>")
def handle_login(email, password):
status, user = login(email, password)
if status == "Login successful!":
content = filter_menu("All") # Default to "All" on login
return gr.update(visible=False), gr.update(visible=True), gr.update(visible=True), gr.update(value=content), status
else:
return gr.update(), gr.update(), gr.update(), gr.update(), status
def handle_signup(name, email, phone, password):
return signup(name, email, phone, password)
def handle_menu(preference):
content = filter_menu(preference)
return content
login_button.click(
handle_login, [login_email, login_password], [login_page, menu_page, footer, menu_output, login_output]
)
signup_button.click(lambda: (gr.update(visible=False), gr.update(visible=True)), None, [login_page, signup_page])
submit_signup.click(handle_signup, [signup_name, signup_email, signup_phone, signup_password], signup_output)
preference.change(handle_menu, [preference], menu_output)
app.launch()
|