File size: 7,283 Bytes
a755aa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Blueprint, render_template, session, redirect, url_for
from salesforce import get_salesforce_connection
from flask import Blueprint, render_template, request, session, jsonify, redirect, url_for
import os
import re
from salesforce import get_salesforce_connection


combined_summary_blueprint = Blueprint('combined_summary', __name__)

# Initialize Salesforce connection
sf = get_salesforce_connection()

def escape_soql(value):
    """Escape single quotes in SOQL query values to prevent injection."""
    if value:
        return value.replace("'", "\\'")
    return value

@combined_summary_blueprint.route('/combined_summary')
def combined_summary():
    email = session.get('user_email')
    if not email:
        print("No user email in session, redirecting to login")
        return redirect(url_for('login'))

    try:
        # Sanitize email for SOQL query
        safe_email = escape_soql(email)

        # ====== FETCH REWARDS ======
        reward_query = f"SELECT Id, Reward_Points__c FROM Customer_Login__c WHERE Email__c = '{safe_email}'"
        reward_data = sf.query_all(reward_query)
        if not reward_data.get("records"):
            print(f"No reward info found for email: {email}")
            return "Reward info not found", 404

        user_points = reward_data["records"][0].get("Reward_Points__c", 0)

        # Determine tier
        tiers = {
            "Bronze": 100,
            "Silver": 200,
            "Gold": 300,
            "Platinum": 500
        }
        current_tier, next_tier = "Bronze", "Silver"
        start_point, end_point = 0, 100
        if user_points >= 100 and user_points < 200:
            current_tier, next_tier = "Silver", "Gold"
            start_point, end_point = 100, 200
        elif user_points >= 200 and user_points < 300:
            current_tier, next_tier = "Gold", "Platinum"
            start_point, end_point = 200, 300
        elif user_points >= 300:
            current_tier, next_tier = "Platinum", "N/A"
            start_point, end_point = 300, 500

        progress_percentage = ((user_points - start_point) / (end_point - start_point)) * 100 if end_point != start_point else 100
        points_needed_for_next_tier = max(0, end_point - user_points)

        # ====== FETCH ORDER SUMMARY ======
        order_query = f"""
            SELECT Id, Customer_Name__c, Customer_Email__c, Total_Amount__c, Order_Details__c, 
                   Order_Status__c, Discount__c, Total_Bill__c
            FROM Order__c
            WHERE Customer_Email__c = '{safe_email}'
            ORDER BY CreatedDate DESC
            LIMIT 1
        """
        order_result = sf.query_all(order_query)
        if not order_result.get("records"):
            print(f"No order found for email: {email}")
            return "No order found", 404

        order = order_result["records"][0]
        order_details = order.get("Order_Details__c", "")
        order_items = []
        sector_names = set()  # Use a set to ensure sector names are unique

        for line in order_details.split('\n'):
            item_parts = line.split('|')
            if len(item_parts) >= 5:
                item_name_raw = item_parts[0].strip()
                item_name = ' '.join(item_name_raw.split(' ')[:-1]).strip()
                safe_item_name = escape_soql(item_name)

                menu_query = f"""
                    SELECT Name, Price__c, Image1__c,
                        Ingredient_1__r.Ingredient_Name__c, Ingredient_1__r.Ingredient_Image__c, 
                        Ingredient_1__r.Health_Benefits__c, Ingredient_1__r.Fun_Facts__c,
                        Ingredient_2__r.Ingredient_Name__c, Ingredient_2__r.Ingredient_Image__c, 
                        Ingredient_2__r.Health_Benefits__c, Ingredient_2__r.Fun_Facts__c,
                        Sector__c  
                    FROM Menu_Item__c
                    WHERE Name = '{safe_item_name}'
                """
                menu_result = sf.query_all(menu_query)
                ingredients = []

                if menu_result.get("records"):
                    menu_item = menu_result["records"][0]

                    # Process Ingredient 1 if it exists
                    if menu_item.get('Ingredient_1__r') is not None:
                        ingredients.append({
                            "name": menu_item['Ingredient_1__r'].get('Ingredient_Name__c', ''),
                            "image": menu_item['Ingredient_1__r'].get('Ingredient_Image__c', ''),
                            "health_benefits": menu_item['Ingredient_1__r'].get('Health_Benefits__c', ''),
                            "fun_facts": menu_item['Ingredient_1__r'].get('Fun_Facts__c', '')
                        })

                    # Process Ingredient 2 if it exists
                    if menu_item.get('Ingredient_2__r') is not None:
                        ingredients.append({
                            "name": menu_item['Ingredient_2__r'].get('Ingredient_Name__c', ''),
                            "image": menu_item['Ingredient_2__r'].get('Ingredient_Image__c', ''),
                            "health_benefits": menu_item['Ingredient_2__r'].get('Health_Benefits__c', ''),
                            "fun_facts": menu_item['Ingredient_2__r'].get('Fun_Facts__c', '')
                        })

                    # Process the Sector__c field from Menu_Item__c
                    if menu_item.get('Sector__c'):
                        sector_names.update(menu_item['Sector__c'].split(','))  # Add sectors to the set

                    # Only add the item if ingredients are present
                    order_items.append({
                        "name": item_name,
                        "price": menu_item.get("Price__c", 0),
                        "image_url": menu_item.get("Image1__c", ''),
                        "ingredients": ingredients
                    })

        # Fetch the sector details from the Sector_Detail__c object
        sector_details = {}
        for sector_name in sector_names:
            safe_sector_name = escape_soql(sector_name.strip())
            sector_query = f"""
                SELECT Name, Image_URL__c, Description__c
                FROM Sector_Detail__c
                WHERE Name = '{safe_sector_name}'
            """
            sector_result = sf.query_all(sector_query)
            if sector_result.get("records"):
                sector_record = sector_result["records"][0]
                sector_details[sector_name] = {
                    "image_url": sector_record.get('Image_URL__c', ''),
                    "description": sector_record.get('Description__c', '')
                }

        return render_template(
            'combined_summary.html',
            user_points=round(user_points),
            current_tier=current_tier,
            next_tier=next_tier,
            start_point=start_point,
            end_point=end_point,
            progress_percentage=round(progress_percentage),
            points_needed_for_next_tier=round(points_needed_for_next_tier),
            order_items=order_items,
            sector_details=sector_details
        )

    except Exception as e:
        print(f"Error in combined_summary: {str(e)}")
        return f"Error: {str(e)}", 500