lokeshloki143 commited on
Commit
3ad460d
·
verified ·
1 Parent(s): 864ab9e

Update combined_summary.py

Browse files
Files changed (1) hide show
  1. combined_summary.py +127 -42
combined_summary.py CHANGED
@@ -1,9 +1,7 @@
1
  from flask import Blueprint, render_template, session, redirect, url_for
2
  from salesforce import get_salesforce_connection
3
- from flask import Blueprint, render_template, request, session, jsonify, redirect, url_for
4
- import os
5
- import re
6
  from datetime import datetime
 
7
 
8
  combined_summary_blueprint = Blueprint('combined_summary', __name__)
9
 
@@ -16,6 +14,15 @@ def escape_soql(value):
16
  return value.replace("'", "\\'")
17
  return value
18
 
 
 
 
 
 
 
 
 
 
19
  @combined_summary_blueprint.route('/combined_summary')
20
  def combined_summary():
21
  email = session.get('user_email')
@@ -27,14 +34,29 @@ def combined_summary():
27
  # Sanitize email for SOQL query
28
  safe_email = escape_soql(email)
29
 
30
- # ====== FETCH REWARDS ======
31
- reward_query = f"SELECT Id, Reward_Points__c FROM Customer_Login__c WHERE Email__c = '{safe_email}'"
32
- reward_data = sf.query_all(reward_query)
33
- if not reward_data.get("records"):
34
- print(f"No reward info found for email: {email}")
35
- return "Reward info not found", 404
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
- user_points = reward_data["records"][0].get("Reward_Points__c", 0)
 
38
 
39
  # Determine tier
40
  tiers = {
@@ -61,7 +83,9 @@ def combined_summary():
61
  # ====== FETCH ORDER SUMMARY ======
62
  order_query = f"""
63
  SELECT Id, Customer_Name__c, Customer_Email__c, Total_Amount__c, Order_Details__c,
64
- Order_Status__c, Discount__c, Total_Bill__c
 
 
65
  FROM Order__c
66
  WHERE Customer_Email__c = '{safe_email}'
67
  ORDER BY CreatedDate DESC
@@ -75,7 +99,18 @@ def combined_summary():
75
  order = order_result["records"][0]
76
  order_details = order.get("Order_Details__c", "")
77
  order_items = []
78
- sector_names = set() # Use a set to ensure sector names are unique
 
 
 
 
 
 
 
 
 
 
 
79
 
80
  for line in order_details.split('\n'):
81
  item_parts = line.split('|')
@@ -99,9 +134,22 @@ def combined_summary():
99
 
100
  if menu_result.get("records"):
101
  menu_item = menu_result["records"][0]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
- # Process Ingredient 1 if it exists
104
- if menu_item.get('Ingredient_1__r') is not None:
105
  ingredients.append({
106
  "name": menu_item['Ingredient_1__r'].get('Ingredient_Name__c', ''),
107
  "image": menu_item['Ingredient_1__r'].get('Ingredient_Image__c', ''),
@@ -109,8 +157,7 @@ def combined_summary():
109
  "fun_facts": menu_item['Ingredient_1__r'].get('Fun_Facts__c', '')
110
  })
111
 
112
- # Process Ingredient 2 if it exists
113
- if menu_item.get('Ingredient_2__r') is not None:
114
  ingredients.append({
115
  "name": menu_item['Ingredient_2__r'].get('Ingredient_Name__c', ''),
116
  "image": menu_item['Ingredient_2__r'].get('Ingredient_Image__c', ''),
@@ -118,20 +165,35 @@ def combined_summary():
118
  "fun_facts": menu_item['Ingredient_2__r'].get('Fun_Facts__c', '')
119
  })
120
 
121
- # Process the Sector__c field from Menu_Item__c
122
  if menu_item.get('Sector__c'):
123
- sector_names.update(menu_item['Sector__c'].split(',')) # Add sectors to the set
124
 
125
- # Only add the item if ingredients are present
126
  order_items.append({
127
  "name": item_name,
128
- "price": menu_item.get("Price__c", 0),
 
129
  "image_url": menu_item.get("Image1__c", ''),
130
  "ingredients": ingredients,
131
- "category": "Food" if ingredients else "Soft Drink" # Categorize based on ingredients
132
  })
133
 
134
- # Fetch the sector details from the Sector_Detail__c object
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  sector_details = {}
136
  for sector_name in sector_names:
137
  safe_sector_name = escape_soql(sector_name.strip())
@@ -148,26 +210,49 @@ def combined_summary():
148
  "description": sector_record.get('Description__c', '')
149
  }
150
 
151
- # Set delivery time (static for now, adjust if Salesforce field exists)
152
- delivery_time = 15 # Static value in minutes; replace with dynamic logic if needed
153
-
154
- # Set validity year for rewards (static for now)
155
- validity_year = datetime.now().year
156
-
157
- return render_template(
158
- 'combined_summary.html',
159
- user_points=round(user_points),
160
- current_tier=current_tier,
161
- next_tier=next_tier,
162
- start_point=start_point,
163
- end_point=end_point,
164
- progress_percentage=round(progress_percentage),
165
- points_needed_for_next_tier=round(points_needed_for_next_tier),
166
- order_items=order_items,
167
- sector_details=sector_details,
168
- delivery_time=delivery_time,
169
- validity_year=validity_year
170
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
  except Exception as e:
173
  print(f"Error in combined_summary: {str(e)}")
 
1
  from flask import Blueprint, render_template, session, redirect, url_for
2
  from salesforce import get_salesforce_connection
 
 
 
3
  from datetime import datetime
4
+ from num2words import num2words
5
 
6
  combined_summary_blueprint = Blueprint('combined_summary', __name__)
7
 
 
14
  return value.replace("'", "\\'")
15
  return value
16
 
17
+ def number_to_words(number):
18
+ """Convert a number to words for invoice amount in words."""
19
+ integer_part = int(number)
20
+ decimal_part = int((number - integer_part) * 100)
21
+ words = num2words(integer_part, lang='en_IN').replace(',', '').title() + " Rupees"
22
+ if decimal_part > 0:
23
+ words += " And " + num2words(decimal_part, lang='en_IN').replace(',', '').title() + " Paisa Only"
24
+ return words
25
+
26
  @combined_summary_blueprint.route('/combined_summary')
27
  def combined_summary():
28
  email = session.get('user_email')
 
34
  # Sanitize email for SOQL query
35
  safe_email = escape_soql(email)
36
 
37
+ # ====== FETCH CUSTOMER DETAILS ======
38
+ customer_query = f"""
39
+ SELECT Id, Name, Email__c, Phone_Number__c, Referral__c, Reward_Points__c
40
+ FROM Customer_Login__c
41
+ WHERE Email__c = '{safe_email}'
42
+ LIMIT 1
43
+ """
44
+ customer_result = sf.query_all(customer_query)
45
+ if not customer_result.get("records"):
46
+ print(f"No customer found for email: {email}")
47
+ return "Customer not found", 404
48
+
49
+ customer = customer_result["records"][0]
50
+ customer_data = {
51
+ "name": customer.get("Name", "SATHVIK GANTA"),
52
+ "email": customer.get("Email__c", "[email protected]"),
53
+ "phone": customer.get("Phone_Number__c", "9876543210"),
54
+ "referral_code": customer.get("Referral__c", ""),
55
+ "reward_points": customer.get("Reward_Points__c", 0)
56
+ }
57
 
58
+ # ====== FETCH REWARDS ======
59
+ user_points = customer_data["reward_points"]
60
 
61
  # Determine tier
62
  tiers = {
 
83
  # ====== FETCH ORDER SUMMARY ======
84
  order_query = f"""
85
  SELECT Id, Customer_Name__c, Customer_Email__c, Total_Amount__c, Order_Details__c,
86
+ Order_Status__c, Discount__c, Total_Bill__c, CreatedDate,
87
+ Delivery_Address__c, Place_of_Supply__c, CGST_Rate__c, SGST_Rate__c,
88
+ Payment_Mode__c, Reverse_Charge__c
89
  FROM Order__c
90
  WHERE Customer_Email__c = '{safe_email}'
91
  ORDER BY CreatedDate DESC
 
99
  order = order_result["records"][0]
100
  order_details = order.get("Order_Details__c", "")
101
  order_items = []
102
+ sector_names = set()
103
+
104
+ # Calculate totals
105
+ total_gross_value = 0
106
+ total_discount = order.get("Discount__c", 0)
107
+ total_net_value = 0
108
+ total_cgst = 0
109
+ total_sgst = 0
110
+ total_amount = 0
111
+
112
+ cgst_rate = order.get("CGST_Rate__c", 2.5) / 100 # e.g., 2.5% as 0.025
113
+ sgst_rate = order.get("SGST_Rate__c", 2.5) / 100
114
 
115
  for line in order_details.split('\n'):
116
  item_parts = line.split('|')
 
134
 
135
  if menu_result.get("records"):
136
  menu_item = menu_result["records"][0]
137
+ price = menu_item.get("Price__c", 0)
138
+ discount = 0 # Adjust if discount is per item
139
+ net_value = price - discount
140
+ cgst = net_value * cgst_rate
141
+ sgst = net_value * sgst_rate
142
+ item_total = net_value + cgst + sgst
143
+
144
+ # Update totals
145
+ total_gross_value += price
146
+ total_discount += discount
147
+ total_net_value += net_value
148
+ total_cgst += cgst
149
+ total_sgst += sgst
150
+ total_amount += item_total
151
 
152
+ if menu_item.get('Ingredient_1__r'):
 
153
  ingredients.append({
154
  "name": menu_item['Ingredient_1__r'].get('Ingredient_Name__c', ''),
155
  "image": menu_item['Ingredient_1__r'].get('Ingredient_Image__c', ''),
 
157
  "fun_facts": menu_item['Ingredient_1__r'].get('Fun_Facts__c', '')
158
  })
159
 
160
+ if menu_item.get('Ingredient_2__r'):
 
161
  ingredients.append({
162
  "name": menu_item['Ingredient_2__r'].get('Ingredient_Name__c', ''),
163
  "image": menu_item['Ingredient_2__r'].get('Ingredient_Image__c', ''),
 
165
  "fun_facts": menu_item['Ingredient_2__r'].get('Fun_Facts__c', '')
166
  })
167
 
 
168
  if menu_item.get('Sector__c'):
169
+ sector_names.update(menu_item['Sector__c'].split(','))
170
 
 
171
  order_items.append({
172
  "name": item_name,
173
+ "price": price,
174
+ "discount": discount,
175
  "image_url": menu_item.get("Image1__c", ''),
176
  "ingredients": ingredients,
177
+ "category": "Food" if ingredients else "Soft Drink"
178
  })
179
 
180
+ # Fetch restaurant details
181
+ restaurant_query = f"""
182
+ SELECT Legal_Name__c, Name, Address__c, GSTIN__c, FSSAI__c
183
+ FROM Restaurant__c
184
+ WHERE Name = 'Pista House'
185
+ LIMIT 1
186
+ """
187
+ restaurant_result = sf.query_all(restaurant_query)
188
+ restaurant = restaurant_result["records"][0] if restaurant_result.get("records") else {
189
+ "legal_name": "DOUBLE TREE BY KVP HOSPITALITY LLP",
190
+ "name": "Pista House",
191
+ "address": "52 To 57, 69 & 70, 5-5-162 & 5-5-163, 5-5-164 & 5-5-165, Plot 1, Vanasthali Hills, Saheb Nagar, LB Nagar Circle 4, Vanasthalipuram, Hyderabad",
192
+ "gstin": "36AATFD1209K1Z9",
193
+ "fssai": "13622012000022"
194
+ }
195
+
196
+ # Fetch sector details
197
  sector_details = {}
198
  for sector_name in sector_names:
199
  safe_sector_name = escape_soql(sector_name.strip())
 
210
  "description": sector_record.get('Description__c', '')
211
  }
212
 
213
+ # Format order data
214
+ order_data = {
215
+ "id": order.get("Id", "247JD92F00043965"),
216
+ "created_date": order.get("CreatedDate", "2024-12-12").split("T")[0],
217
+ "delivery_address": order.get("Delivery_Address__c", "Plot no -80, Road no-4, Sharadha Nagar, Vanasthalipuram, 500070"),
218
+ "place_of_supply": order.get("Place_of_Supply__c", "Telangana(36)"),
219
+ "cgst_rate": f"{order.get('CGST_Rate__c', 2.5)}%",
220
+ "sgst_rate": f"{order.get('SGST_Rate__c', 2.5)}%",
221
+ "cgst_rate_float": order.get("CGST_Rate__c", 2.5) / 100,
222
+ "sgst_rate_float": order.get("SGST_Rate__c", 2.5) / 100,
223
+ "payment_mode": order.get("Payment_Mode__c", "Digital"),
224
+ "reverse_charge": order.get("Reverse_Charge__c", "No")
225
+ }
226
+
227
+ # Convert total amount to words
228
+ total_amount_in_words = number_to_words(total_amount)
229
+
230
+ # Prepare template data
231
+ template_data = {
232
+ "order_id": order_data["id"],
233
+ "order_items": order_items,
234
+ "customer": customer_data,
235
+ "restaurant": restaurant,
236
+ "order": order_data,
237
+ "sector_details": sector_details,
238
+ "current_tier": current_tier,
239
+ "next_tier": next_tier,
240
+ "user_points": user_points,
241
+ "progress_percentage": progress_percentage,
242
+ "start_point": start_point,
243
+ "end_point": end_point,
244
+ "points_needed_for_next_tier": points_needed_for_next_tier,
245
+ "validity_year": datetime.now().year,
246
+ "total_gross_value": total_gross_value,
247
+ "total_discount": total_discount,
248
+ "total_net_value": total_net_value,
249
+ "total_cgst": total_cgst,
250
+ "total_sgst": total_sgst,
251
+ "total_amount": total_amount,
252
+ "total_amount_in_words": total_amount_in_words
253
+ }
254
+
255
+ return render_template("combined_summary.html", **template_data)
256
 
257
  except Exception as e:
258
  print(f"Error in combined_summary: {str(e)}")