Spaces:
Sleeping
Sleeping
File size: 6,668 Bytes
89f955e 6ddba4d d49d2af a1cfef6 6ddba4d 2fab7d3 a1cfef6 2fab7d3 a1cfef6 2fab7d3 d49d2af 6ddba4d d49d2af 9f51b52 6ddba4d a1cfef6 d49d2af e21d37e d49d2af e21d37e a1cfef6 e21d37e a1cfef6 4e9c3dd d49d2af 740b25d d49d2af 740b25d d49d2af 9061545 d49d2af a1cfef6 d49d2af a1cfef6 d49d2af a1cfef6 d49d2af a1cfef6 740b25d a1cfef6 d49d2af 9061545 d49d2af 9061545 d49d2af a0e0bbb a1cfef6 d49d2af a1cfef6 4e9c3dd cd94e4f d49d2af a1cfef6 4e9c3dd cd94e4f d49d2af a1cfef6 d49d2af a1cfef6 740b25d d49d2af 07d483f d49d2af 4e9c3dd 740b25d d49d2af 740b25d d49d2af 740b25d d49d2af 740b25d ce3f28a a1cfef6 2fab7d3 a1cfef6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
import os
import json
import time
from flask import Flask, render_template, request, jsonify, redirect, session
from transformers import pipeline
from gtts import gTTS
from pydub import AudioSegment
from pydub.silence import detect_nonsilent
from waitress import serve
from simple_salesforce import Salesforce
# Initialize Flask app
app = Flask(__name__)
app.secret_key = os.urandom(24) # For session handling
# Salesforce Connection
try:
print("Attempting to connect to Salesforce...")
sf = Salesforce(
username=os.getenv('diggavalli98@gmail.com'),
password=os.getenv('Sati@1020'),
security_token=os.getenv('sSSjyhInIsUohKpG8sHzty2q')
)
print("Connected to Salesforce successfully!")
except Exception as e:
print(f"Failed to connect to Salesforce: {str(e)}")
# Functions for Salesforce operations
def get_customer_by_email(email):
"""Check if customer exists in Salesforce."""
try:
query = f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'"
result = sf.query(query)
if result['records']:
return result['records'][0]['Id']
return None
except Exception as e:
print(f"Error fetching customer: {str(e)}")
return None
def create_salesforce_record(name, email, phone_number):
"""Create customer login record in Salesforce."""
try:
existing_customer = get_customer_by_email(email)
if existing_customer:
return {"id": existing_customer} # Return existing customer ID
customer_login = sf.Customer_Login__c.create({
'Name': name,
'Email__c': email,
'Phone_Number__c': phone_number
})
return customer_login
except Exception as e:
raise Exception(f"Failed to create record: {str(e)}")
def create_salesforce_order(cart_items, total_price, customer_id):
"""Create order in Salesforce."""
try:
order = sf.Order__c.create({
'Total_Price__c': total_price,
'Cart_Items__c': json.dumps(cart_items),
'Customer__c': customer_id
})
return order
except Exception as e:
raise Exception(f"Failed to create order: {str(e)}")
def get_menu_items():
"""Fetch menu items from Salesforce."""
try:
query = "SELECT Name, Price__c, Ingredients__c, Category__c FROM Menu_Item__c"
result = sf.query(query)
return result.get('records', [])
except Exception as e:
print(f"Error fetching menu items: {str(e)}")
return []
# Voice-Related Functions
def generate_audio_prompt(text, filename):
"""Generate speech from text using gTTS."""
try:
tts = gTTS(text)
tts.save(os.path.join("static", filename))
except Exception as e:
print(f"Error: {e}")
print("Retrying after 5 seconds...")
time.sleep(5)
generate_audio_prompt(text, filename)
# Routes and Views
@app.route("/")
def index():
return render_template("index.html")
@app.route("/register", methods=["POST"])
def register():
"""Handles new user registration."""
data = request.json
name = data.get('name')
email = data.get('email')
phone_number = data.get('phone_number')
if not name or not email or not phone_number:
return jsonify({'error': 'Missing required fields'}), 400
try:
customer = create_salesforce_record(name, email, phone_number)
session['customer_id'] = customer['id']
return jsonify({'message': 'User registered successfully', 'customer_id': customer['id']}), 201
except Exception as e:
return jsonify({'error': f'Failed to register user: {str(e)}'}), 500
@app.route("/login", methods=["POST"])
def login():
"""Handles customer login."""
data = request.json
email = data.get('email')
if not email:
return jsonify({'error': 'Email is required'}), 400
customer_id = get_customer_by_email(email)
if customer_id:
session['customer_id'] = customer_id
return jsonify({'message': 'Login successful', 'customer_id': customer_id}), 200
else:
return jsonify({'error': 'User not found'}), 404
@app.route("/menu", methods=["GET"])
def menu_page():
"""Displays the menu from Salesforce."""
menu_items = get_menu_items()
if not menu_items:
return jsonify({'error': 'No menu items found'}), 404
menu_data = [
{"name": item['Name'], "price": item['Price__c'], "ingredients": item.get('Ingredients__c', ''), "category": item.get('Category__c', '')}
for item in menu_items
]
return render_template("menu_page.html", menu_items=menu_data)
@app.route("/cart", methods=["GET"])
def cart():
"""Displays the cart."""
cart_items = session.get('cart_items', [])
return render_template("cart_page.html", cart_items=cart_items)
@app.route("/order-summary", methods=["GET"])
def order_summary():
"""Displays the order summary before finalizing."""
order_details = session.get('cart_items', [])
total_price = sum(item['price'] * item['quantity'] for item in order_details)
return render_template("order_summary.html", order_details=order_details, total_price=total_price)
@app.route("/final_order", methods=["GET"])
def final_order():
"""Handles final order placement."""
if 'cart_items' not in session or 'customer_id' not in session:
return jsonify({'error': 'No order details found'}), 400
cart_items = session.get('cart_items', [])
total_price = sum(item['price'] * item['quantity'] for item in cart_items)
customer_id = session['customer_id']
try:
order = create_salesforce_order(cart_items, total_price, customer_id)
session.pop('cart_items', None)
return render_template("final_order.html", order_details=cart_items, total_price=total_price)
except Exception as e:
return jsonify({'error': f'Failed to create order in Salesforce: {str(e)}'}), 500
@app.route("/add_to_cart", methods=["POST"])
def add_to_cart():
"""Adds an item to the cart."""
data = request.json
item_name = data.get('item_name')
quantity = data.get('quantity')
if not item_name or not quantity:
return jsonify({'error': 'Item name and quantity required'}), 400
cart_items = session.get('cart_items', [])
cart_items.append({"name": item_name, "quantity": quantity, "price": 10}) # Assuming a fixed price
session['cart_items'] = cart_items
return jsonify({"success": True, "message": f"Added {item_name} to cart."})
# Start Production Server
if __name__ == "__main__":
serve(app, host="0.0.0.0", port=7860)
|