lokesh341 commited on
Commit
6459fb3
·
verified ·
1 Parent(s): ca7c265

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -68
app.py CHANGED
@@ -3,7 +3,6 @@ from simple_salesforce import Salesforce
3
  from dotenv import load_dotenv
4
  import os
5
  import logging
6
- import uuid
7
 
8
  # Load environment variables
9
  load_dotenv()
@@ -36,7 +35,7 @@ sf = get_salesforce_connection()
36
  def index():
37
  return render_template('index.html')
38
 
39
- # Fetch items from Sector_Detail__c for dietary preferences
40
  @app.route('/get_menu_items', methods=['POST'])
41
  def get_menu_items():
42
  global sf
@@ -48,31 +47,63 @@ def get_menu_items():
48
 
49
  dietary_preference = request.json.get('dietary_preference', 'both').lower()
50
  try:
51
- soql = "SELECT Name, Image_URL__c, Category__c, Description__c FROM Sector_Detail__c"
 
52
  if dietary_preference == 'vegetarian':
53
- soql += " WHERE Category__c = 'Veg'"
54
  elif dietary_preference == 'non-vegetarian':
55
- soql += " WHERE Category__c = 'Non-Veg'"
56
- soql += " LIMIT 200"
57
 
58
- logger.info(f"Executing SOQL query: {soql}")
59
- result = sf.query(soql)
60
- items = [
61
  {
62
  "name": record['Name'],
63
  "image_url": record.get('Image_URL__c', ''),
64
  "category": record.get('Category__c', ''),
65
- "description": record.get('Description__c', 'No description available')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
- for record in result['records'] if 'Name' in record
68
  ]
69
- logger.info(f"Fetched {len(items)} items from Sector_Detail__c for {dietary_preference}")
 
 
70
  return jsonify({"menu_items": items})
71
  except Exception as e:
72
- logger.error(f"Failed to fetch items from Sector_Detail__c: {str(e)}")
73
  return jsonify({"error": f"Failed to fetch items from Salesforce: {str(e)}"}), 500
74
 
75
- # Fetch suggestions from Ingredient_Object__c and Menu_Item__c
76
  @app.route('/suggest_items', methods=['POST'])
77
  def suggest_items():
78
  global sf
@@ -86,24 +117,13 @@ def suggest_items():
86
  return jsonify({"error": "Search term is required"}), 400
87
 
88
  try:
89
- # Query Ingredient_Object__c
90
- soql_ingredient = f"SELECT Ingredient_Name__c, Image_URL__c FROM Ingredient_Object__c WHERE Ingredient_Name__c LIKE '%{search_term}%' LIMIT 5"
91
- logger.info(f"Executing SOQL query for Ingredient_Object__c: {soql_ingredient}")
92
- result_ingredient = sf.query(soql_ingredient)
93
  suggestions = [
94
- {"name": record['Ingredient_Name__c'], "image_url": record.get('Image_URL__c', ''), "source": "Ingredient_Object__c"}
95
- for record in result_ingredient['records'] if 'Ingredient_Name__c' in record
96
  ]
97
-
98
- # Query Menu_Item__c
99
- soql_menu = f"SELECT Name, Image1__c, Veg_NonVeg__c FROM Menu_Item__c WHERE Name LIKE '%{search_term}%' LIMIT 5"
100
- logger.info(f"Executing SOQL query for Menu_Item__c: {soql_menu}")
101
- result_menu = sf.query(soql_menu)
102
- suggestions += [
103
- {"name": record['Name'], "image_url": record.get('Image1__c', ''), "source": "Menu_Item__c", "veg_nonveg": record.get('Veg_NonVeg__c', '')}
104
- for record in result_menu['records'] if 'Name' in record
105
- ]
106
-
107
  logger.info(f"Fetched {len(suggestions)} suggestions for '{search_term}'")
108
  return jsonify({"suggestions": suggestions})
109
  except Exception as e:
@@ -124,13 +144,7 @@ def get_menu_item_details():
124
  return jsonify({"error": "Item name is required"}), 400
125
 
126
  try:
127
- soql = f"""
128
- SELECT Name, Description__c, Image1__c, Ingredientsinfo__c, NutritionalInfo__c, Price__c,
129
- Sector__c, Spice_Levels__c, Veg_NonVeg__c, Category__c, Dynamic_Dish__c
130
- FROM Menu_Item__c
131
- WHERE Name LIKE '%{item_name}%'
132
- LIMIT 1
133
- """
134
  logger.info(f"Executing SOQL query: {soql}")
135
  result = sf.query(soql)
136
 
@@ -141,15 +155,16 @@ def get_menu_item_details():
141
  item_details = {
142
  "name": record.get('Name', ''),
143
  "description": record.get('Description__c', 'No description available'),
144
- "image_url": record.get('Image1__c', 'https://via.placeholder.com/100'),
145
- "ingredients": record.get('Ingredientsinfo__c', 'No ingredients info'),
146
- "nutritional_info": record.get('NutritionalInfo__c', 'No nutritional info'),
147
  "price": record.get('Price__c', 0.0),
148
- "sector": record.get('Sector__c', 'Unknown'),
149
- "spice_levels": record.get('Spice_Levels__c', 'Not specified'),
150
- "veg_nonveg": record.get('Veg_NonVeg__c', 'Unknown'),
151
- "category": record.get('Category__c', 'Unknown'),
152
- "dynamic_dish": record.get('Dynamic_Dish__c', False)
 
153
  }
154
  logger.info(f"Fetched details for '{item_name}' from Menu_Item__c")
155
  return jsonify({"item_details": item_details})
@@ -157,7 +172,42 @@ def get_menu_item_details():
157
  logger.error(f"Failed to fetch item details from Menu_Item__c: {str(e)}")
158
  return jsonify({"error": f"Failed to fetch item details from Salesforce: {str(e)}"}), 500
159
 
160
- # Submit selected items to Ingredient_Object__c or Menu_Item__c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  @app.route('/submit_items', methods=['POST'])
162
  def submit_items():
163
  global sf
@@ -173,28 +223,12 @@ def submit_items():
173
  try:
174
  for item in items:
175
  logger.info(f"Submitting item: {item}")
176
- # Check if item is from Menu_Item__c or Ingredient_Object__c
177
- if item.get('source') == 'Menu_Item__c':
178
- sf.Menu_Item__c.create({
179
- 'Name': item['name'],
180
- 'Description__c': item.get('description', 'No description available'),
181
- 'Image1__c': item.get('image_url', ''),
182
- 'Ingredientsinfo__c': item.get('ingredients', 'No ingredients info'),
183
- 'NutritionalInfo__c': item.get('nutritional_info', 'No nutritional info'),
184
- 'Price__c': item.get('price', 0.0),
185
- 'Sector__c': item.get('sector', 'Unknown'),
186
- 'Spice_Levels__c': item.get('spice_levels', 'Not specified'),
187
- 'Veg_NonVeg__c': item.get('veg_nonveg', 'Unknown'),
188
- 'Category__c': item.get('category', 'Unknown'),
189
- 'Dynamic_Dish__c': item.get('dynamic_dish', False)
190
- })
191
- else:
192
- sf.Ingredient_Object__c.create({
193
- 'Ingredient_Name__c': item['name'],
194
- 'Category__c': item.get('category', 'Unknown'),
195
- 'Description__c': item.get('description', 'No description available')
196
- })
197
- logger.info(f"Successfully submitted item to {item.get('source', 'Ingredient_Object__c')}: {item['name']}")
198
  return jsonify({"success": f"Successfully submitted {len(items)} items to Salesforce"})
199
  except Exception as e:
200
  logger.error(f"Failed to submit items: {str(e)}")
 
3
  from dotenv import load_dotenv
4
  import os
5
  import logging
 
6
 
7
  # Load environment variables
8
  load_dotenv()
 
35
  def index():
36
  return render_template('index.html')
37
 
38
+ # Fetch items from Sector_Detail__c and Menu_Item__c for dietary preferences
39
  @app.route('/get_menu_items', methods=['POST'])
40
  def get_menu_items():
41
  global sf
 
47
 
48
  dietary_preference = request.json.get('dietary_preference', 'both').lower()
49
  try:
50
+ # Query Sector_Detail__c
51
+ soql_sector = "SELECT Name, Image_URL__c, Category__c, Description__c FROM Sector_Detail__c"
52
  if dietary_preference == 'vegetarian':
53
+ soql_sector += " WHERE Category__c = 'Veg'"
54
  elif dietary_preference == 'non-vegetarian':
55
+ soql_sector += " WHERE Category__c = 'Non-Veg'"
56
+ soql_sector += " LIMIT 200"
57
 
58
+ logger.info(f"Executing SOQL query for Sector_Detail__c: {soql_sector}")
59
+ result_sector = sf.query(soql_sector)
60
+ sector_items = [
61
  {
62
  "name": record['Name'],
63
  "image_url": record.get('Image_URL__c', ''),
64
  "category": record.get('Category__c', ''),
65
+ "description": record.get('Description__c', 'No description available'),
66
+ "source": "Sector_Detail__c"
67
+ }
68
+ for record in result_sector['records'] if 'Name' in record
69
+ ]
70
+
71
+ # Query Menu_Item__c
72
+ soql_menu = "SELECT Name, Description__c, Image1__c, Ingredientsinfo__c, NutritionalInfo__c, Price__c, Sector__c, Spice_Levels__c, Veg_NonVeg__c, Category__c, Dynamic_Dish__c FROM Menu_Item__c"
73
+ if dietary_preference == 'vegetarian':
74
+ soql_menu += " WHERE Veg_NonVeg__c = 'Vegetarian'"
75
+ elif dietary_preference == 'non-vegetarian':
76
+ soql_menu += " WHERE Veg_NonVeg__c = 'Non-Vegetarian'"
77
+ soql_menu += " LIMIT 200"
78
+
79
+ logger.info(f"Executing SOQL query for Menu_Item__c: {soql_menu}")
80
+ result_menu = sf.query(soql_menu)
81
+ menu_items = [
82
+ {
83
+ "name": record['Name'],
84
+ "description": record.get('Description__c', 'No description available'),
85
+ "image_url": record.get('Image1__c', ''),
86
+ "ingredients": record.get('Ingredientsinfo__c', ''),
87
+ "nutritional_info": record.get('NutritionalInfo__c', ''),
88
+ "price": record.get('Price__c', 0.0),
89
+ "sector": record.get('Sector__c', ''),
90
+ "spice_levels": record.get('Spice_Levels__c', ''),
91
+ "veg_nonveg": record.get('Veg_NonVeg__c', ''),
92
+ "category": record.get('Category__c', ''),
93
+ "dynamic_dish": record.get('Dynamic_Dish__c', False),
94
+ "source": "Menu_Item__c"
95
  }
96
+ for record in result_menu['records'] if 'Name' in record
97
  ]
98
+
99
+ items = sector_items + menu_items
100
+ logger.info(f"Fetched {len(items)} items (Sector_Detail__c: {len(sector_items)}, Menu_Item__c: {len(menu_items)}) for {dietary_preference}")
101
  return jsonify({"menu_items": items})
102
  except Exception as e:
103
+ logger.error(f"Failed to fetch items: {str(e)}")
104
  return jsonify({"error": f"Failed to fetch items from Salesforce: {str(e)}"}), 500
105
 
106
+ # Fetch suggestions from Ingredient_Object__c
107
  @app.route('/suggest_items', methods=['POST'])
108
  def suggest_items():
109
  global sf
 
117
  return jsonify({"error": "Search term is required"}), 400
118
 
119
  try:
120
+ soql = f"SELECT Ingredient_Name__c, Image_URL__c FROM Ingredient_Object__c WHERE Ingredient_Name__c LIKE '%{search_term}%' LIMIT 10"
121
+ logger.info(f"Executing SOQL query: {soql}")
122
+ result = sf.query(soql)
 
123
  suggestions = [
124
+ {"name": record['Ingredient_Name__c'], "image_url": record.get('Image_URL__c', '')}
125
+ for record in result['records'] if 'Ingredient_Name__c' in record
126
  ]
 
 
 
 
 
 
 
 
 
 
127
  logger.info(f"Fetched {len(suggestions)} suggestions for '{search_term}'")
128
  return jsonify({"suggestions": suggestions})
129
  except Exception as e:
 
144
  return jsonify({"error": "Item name is required"}), 400
145
 
146
  try:
147
+ soql = f"SELECT Name, Description__c, Image1__c, Ingredientsinfo__c, NutritionalInfo__c, Price__c, Sector__c, Spice_Levels__c, Veg_NonVeg__c, Category__c, Dynamic_Dish__c FROM Menu_Item__c WHERE Name LIKE '%{item_name}%' LIMIT 1"
 
 
 
 
 
 
148
  logger.info(f"Executing SOQL query: {soql}")
149
  result = sf.query(soql)
150
 
 
155
  item_details = {
156
  "name": record.get('Name', ''),
157
  "description": record.get('Description__c', 'No description available'),
158
+ "image_url": record.get('Image1__c', 'https://via.placeholder.com/30'),
159
+ "ingredients": record.get('Ingredientsinfo__c', ''),
160
+ "nutritional_info": record.get('NutritionalInfo__c', ''),
161
  "price": record.get('Price__c', 0.0),
162
+ "sector": record.get('Sector__c', ''),
163
+ "spice_levels": record.get('Spice_Levels__c', ''),
164
+ "veg_nonveg": record.get('Veg_NonVeg__c', ''),
165
+ "category": record.get('Category__c', ''),
166
+ "dynamic_dish": record.get('Dynamic_Dish__c', False),
167
+ "source": "Menu_Item__c"
168
  }
169
  logger.info(f"Fetched details for '{item_name}' from Menu_Item__c")
170
  return jsonify({"item_details": item_details})
 
172
  logger.error(f"Failed to fetch item details from Menu_Item__c: {str(e)}")
173
  return jsonify({"error": f"Failed to fetch item details from Salesforce: {str(e)}"}), 500
174
 
175
+ # Fetch item details from Sector_Detail__c by name
176
+ @app.route('/get_sector_item_details', methods=['POST'])
177
+ def get_sector_item_details():
178
+ global sf
179
+ if not sf:
180
+ sf = get_salesforce_connection()
181
+ if not sf:
182
+ return jsonify({"error": "Unable to connect to Salesforce"}), 500
183
+
184
+ item_name = request.json.get('item_name', '').strip()
185
+ if not item_name:
186
+ return jsonify({"error": "Item name is required"}), 400
187
+
188
+ try:
189
+ soql = f"SELECT Name, Image_URL__c, Category__c, Description__c FROM Sector_Detail__c WHERE Name LIKE '%{item_name}%' LIMIT 1"
190
+ logger.info(f"Executing SOQL query: {soql}")
191
+ result = sf.query(soql)
192
+
193
+ if result['totalSize'] == 0:
194
+ return jsonify({"error": f"No item found matching '{item_name}' in Sector_Detail__c"}), 404
195
+
196
+ record = result['records'][0]
197
+ item_details = {
198
+ "name": record.get('Name', ''),
199
+ "image_url": record.get('Image_URL__c', 'https://via.placeholder.com/30'),
200
+ "category": record.get('Category__c', 'Unknown'),
201
+ "description": record.get('Description__c', 'No description available'),
202
+ "source": "Sector_Detail__c"
203
+ }
204
+ logger.info(f"Fetched details for '{item_name}' from Sector_Detail__c")
205
+ return jsonify({"item_details": item_details})
206
+ except Exception as e:
207
+ logger.error(f"Failed to fetch item details from Sector_Detail__c: {str(e)}")
208
+ return jsonify({"error": f"Failed to fetch item details from Salesforce: {str(e)}"}), 500
209
+
210
+ # Submit selected items to Ingredient_Object__c
211
  @app.route('/submit_items', methods=['POST'])
212
  def submit_items():
213
  global sf
 
223
  try:
224
  for item in items:
225
  logger.info(f"Submitting item: {item}")
226
+ sf.Ingredient_Object__c.create({
227
+ 'Ingredient_Name__c': item['name'],
228
+ 'Category__c': item.get('category', 'Unknown'),
229
+ 'Description__c': item.get('description', 'No description available')
230
+ })
231
+ logger.info(f"Successfully submitted item to Ingredient_Object__c: {item['name']}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  return jsonify({"success": f"Successfully submitted {len(items)} items to Salesforce"})
233
  except Exception as e:
234
  logger.error(f"Failed to submit items: {str(e)}")