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)