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/') 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)