| import gradio as gr |
| from simple_salesforce import Salesforce |
| from dotenv import load_dotenv |
| import os |
|
|
| |
| load_dotenv() |
|
|
| |
| try: |
| sf = Salesforce( |
| username=os.getenv("SF_USERNAME"), |
| password=os.getenv("SF_PASSWORD"), |
| security_token=os.getenv("SF_SECURITY_TOKEN"), |
| domain="login" |
| ) |
| print("Salesforce connection successful!") |
| except Exception as e: |
| print(f"Salesforce connection failed: {e}") |
| sf = None |
|
|
| |
| def authenticate_user(email, password): |
| if not sf: |
| return "Salesforce connection failed. Please check credentials and try again.", None, None, gr.update(visible=False), gr.update(visible=False) |
|
|
| 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", None, None, gr.update(visible=False), gr.update(visible=False) |
|
|
| customer = result['records'][0] |
| reward_points = customer['Reward_Points__c'] |
|
|
| return f"Welcome, you have {reward_points} points. Proceed to rewards.", customer['Id'], reward_points, gr.update(visible=True), gr.update(visible=True) |
| except Exception as e: |
| return f"Error during authentication: {e}", None, None, gr.update(visible=False), gr.update(visible=False) |
|
|
| |
| 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 |
| 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 |
| message = f"You earned {earned_points:.2f} reward points!" |
|
|
| |
| sf.Customer_Login__c.update(customer_id, {'Reward_Points__c': updated_points}) |
|
|
| return message, final_bill, updated_points |
| except Exception as e: |
| return f"Error applying rewards: {e}", 0, 0 |
|
|
| |
| 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") |
| customer_id_output = gr.Textbox(label="Customer ID", visible=False) |
| reward_points_output = gr.Textbox(label="Available Reward Points", visible=False) |
| |
| |
| reward_section = gr.Column(visible=False) |
| gr.Markdown("### Reward Points Section", elem_id="reward_section") |
| bill_amount_input = gr.Number(label="Enter Bill Amount", value=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") |
|
|
| |
| login_button.click(authenticate_user, inputs=[email_input, password_input], outputs=[login_output, customer_id_output, reward_points_output, reward_section, bill_amount_input]) |
|
|
| |
| rewards_button.click(handle_rewards, |
| inputs=[customer_id_output, bill_amount_input, apply_rewards_checkbox], |
| outputs=[rewards_message, final_bill_output, remaining_points_output]) |
| |
| return demo |
|
|
| |
| if __name__ == "__main__": |
| demo = create_interface() |
| demo.launch() |
|
|
|
|