Spaces:
Runtime error
Runtime error
from flask import Flask, render_template, redirect, request, url_for | |
from simple_salesforce import Salesforce | |
from dotenv import load_dotenv | |
import os | |
import logging | |
# Set up logging | |
logging.basicConfig(level=logging.DEBUG) | |
# Load environment variables from .env file | |
load_dotenv() | |
app = Flask(__name__) | |
# Get Salesforce credentials from environment variables | |
SF_USERNAME = os.getenv('SF_USERNAME') | |
SF_PASSWORD = os.getenv('SF_PASSWORD') | |
SF_SECURITY_TOKEN = os.getenv('SF_SECURITY_TOKEN') | |
SF_DOMAIN = os.getenv('SF_DOMAIN') | |
# Salesforce connection | |
try: | |
app.logger.debug("Attempting Salesforce connection...") | |
sf = Salesforce(username=SF_USERNAME, | |
password=SF_PASSWORD, | |
security_token=SF_SECURITY_TOKEN, | |
domain=SF_DOMAIN) | |
app.logger.debug("Salesforce connection successful!") | |
except Exception as e: | |
app.logger.error(f"Salesforce connection failed: {e}") | |
sf = None | |
# Route for login page | |
def login(): | |
return render_template('login.html') | |
# Route to process login | |
def auth(): | |
email = request.form['email'] | |
password = request.form['password'] | |
if not sf: | |
app.logger.error("Salesforce connection failed. Please check credentials and try again.") | |
return "Salesforce connection failed. Please check credentials and try again." | |
try: | |
# Query Salesforce for user authentication | |
query = f"SELECT Id, Reward_Points__c FROM Customer_Login__c WHERE Email__c = '{email}' AND Password__c = '{password}' LIMIT 1" | |
result = sf.query(query) | |
if result['totalSize'] == 0: | |
app.logger.error("Invalid Login Details") | |
return "Invalid Login Details" | |
customer = result['records'][0] | |
reward_points = customer['Reward_Points__c'] | |
# Redirect to rewards page | |
app.logger.debug(f"Redirecting to rewards page with customer_id: {customer['Id']} and points: {reward_points}") | |
return redirect(url_for('rewards', customer_id=customer['Id'], points=reward_points)) | |
except Exception as e: | |
app.logger.error(f"Error during authentication: {e}") | |
return f"Error during authentication: {e}" | |
# Route to display rewards page | |
def rewards(customer_id): | |
try: | |
customer = sf.Customer_Login__c.get(customer_id) | |
points = customer['Reward_Points__c'] | |
app.logger.debug(f"Fetched reward points: {points} for customer_id: {customer_id}") | |
# Render the rewards page | |
return render_template('rewards.html', points=points, customer_id=customer_id) | |
except Exception as e: | |
app.logger.error(f"Error fetching rewards: {e}") | |
return f"Error fetching rewards: {e}" | |
# Route to apply rewards | |
def apply_rewards(): | |
customer_id = request.form['customer_id'] | |
bill_amount = float(request.form['bill_amount']) | |
apply_rewards = request.form.get('apply_rewards') | |
try: | |
customer = sf.Customer_Login__c.get(customer_id) | |
points = customer['Reward_Points__c'] | |
gst = 0.18 * bill_amount | |
app.logger.debug(f"Processing bill amount: {bill_amount}, GST: {gst}, Points: {points}") | |
if points >= 500 and apply_rewards: | |
discount = 0.1 * bill_amount | |
final_bill = bill_amount - discount + gst | |
updated_points = points - 500 | |
# Update the customer's reward points in Salesforce | |
sf.Customer_Login__c.update(customer_id, {'Reward_Points__c': updated_points}) | |
message = "You saved 10% on your total bill!" | |
else: | |
# Customers with below 500 points earn 10% of their bill amount as reward points | |
discount = 0 | |
earned_points = 0.1 * bill_amount | |
final_bill = bill_amount + gst | |
updated_points = points + earned_points | |
# Update the customer's reward points in Salesforce | |
sf.Customer_Login__c.update(customer_id, {'Reward_Points__c': updated_points}) | |
message = f"You earned 10% of your bill amount ({earned_points} points) as reward points!" | |
# Render the summary page | |
return render_template( | |
'apply_rewards.html', | |
original_bill=bill_amount, | |
discount=discount, | |
gst=gst, | |
final_bill=final_bill, | |
updated_points=updated_points, | |
message=message | |
) | |
except Exception as e: | |
app.logger.error(f"Error applying rewards: {e}") | |
return f"Error applying rewards: {e}" | |
if __name__ == '__main__': | |
app.run(debug=True, host="0.0.0.0", port=5000) | |