rewards_app / app.py
Yaswanth56's picture
Update app.py
87b76f3 verified
raw
history blame
3.87 kB
import gradio as gr
from simple_salesforce import Salesforce
from dotenv import load_dotenv
import os
# Load environment variables
load_dotenv()
# Salesforce connection
try:
sf = Salesforce(
username=os.getenv("[email protected]"),
password=os.getenv("Sati@1020"),
security_token=os.getenv("sSSjyhInIsUohKpG8sHzty2q"),
domain="login" # Use "test" for sandbox
)
print("Salesforce connection successful!")
except Exception as e:
print(f"Salesforce connection failed: {e}")
sf = None
# Function to handle user authentication and Salesforce login
def authenticate_user(email, password):
if not sf:
return "Salesforce connection failed. Please check credentials and try again."
try:
query = f"SELECT Id, Reward_Points__c FROM Customer_Login__c WHERE Email__c = '{email}' AND Password__c = '{password}'"
result = sf.query(query)
if result['totalSize'] == 0:
return "Invalid Login Details"
customer = result['records'][0]
reward_points = customer['Reward_Points__c']
return f"Welcome, you have {reward_points} points. Proceed to rewards."
except Exception as e:
return f"Error during authentication: {e}"
# Function to handle reward points logic
def handle_rewards(customer_id, bill_amount, apply_rewards):
try:
customer = sf.Customer_Login__c.get(customer_id)
points = customer['Reward_Points__c']
gst = 0.18 * bill_amount
if points >= 500 and apply_rewards:
discount = 0.1 * bill_amount
final_bill = bill_amount - discount + gst
updated_points = points - 500
sf.Customer_Login__c.update(customer_id, {'Reward_Points__c': updated_points})
message = "You saved 10% on your total bill!"
else:
discount = 0
earned_points = 0.1 * bill_amount
final_bill = bill_amount + gst
updated_points = points + earned_points
sf.Customer_Login__c.update(customer_id, {'Reward_Points__c': updated_points})
message = f"You earned {earned_points:.2f} reward points!"
return message, final_bill, updated_points
except Exception as e:
return f"Error applying rewards: {e}", 0, 0
# Define the Gradio interface
def create_interface():
with gr.Blocks() as demo:
gr.Markdown("### Login to your account")
email_input = gr.Textbox(label="Email", placeholder="Enter your email")
password_input = gr.Textbox(label="Password", placeholder="Enter your password", type="password")
login_button = gr.Button("Login")
login_output = gr.Textbox(label="Status")
# Action for login button
login_button.click(authenticate_user, inputs=[email_input, password_input], outputs=login_output)
# Reward points section
gr.Markdown("### Reward Points Section")
customer_id_input = gr.Textbox(label="Customer ID", placeholder="Enter Customer ID")
bill_amount_input = gr.Number(label="Enter Bill Amount", min=0)
apply_rewards_checkbox = gr.Checkbox(label="Apply Reward Points", value=True)
rewards_button = gr.Button("Calculate Bill")
rewards_message = gr.Textbox(label="Message")
final_bill_output = gr.Textbox(label="Final Bill Amount")
remaining_points_output = gr.Textbox(label="Remaining Points")
# Action for rewards calculation
rewards_button.click(handle_rewards,
inputs=[customer_id_input, bill_amount_input, apply_rewards_checkbox],
outputs=[rewards_message, final_bill_output, remaining_points_output])
return demo
# Run the Gradio interface
if __name__ == "__main__":
demo = create_interface()
demo.launch()