rewards_app / app.py
Yaswanth56's picture
Update app.py
590c509 verified
raw
history blame
4.73 kB
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
@app.route('/')
def login():
return render_template('login.html')
# Route to process login
@app.route('/auth', methods=['POST'])
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
@app.route('/rewards/<customer_id>')
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
@app.route('/apply_rewards', methods=['POST'])
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)