lokesh341 commited on
Commit
8a4a66c
·
verified ·
1 Parent(s): 29f904e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -132
app.py CHANGED
@@ -1,4 +1,4 @@
1
- from flask import Flask, render_template, request, jsonify
2
  from simple_salesforce import Salesforce
3
  from dotenv import load_dotenv
4
  import os
@@ -37,6 +37,36 @@ sf = get_salesforce_connection()
37
  def index():
38
  return render_template('chef-bot.html')
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  @app.route('/get_menu_items', methods=['POST'])
41
  def get_menu_items():
42
  global sf
@@ -49,160 +79,95 @@ def get_menu_items():
49
  data = request.json
50
  dietary_preference = data.get('dietary_preference', 'both').lower()
51
  search_term = data.get('search_term', '').strip()
 
 
52
  try:
53
  items = []
54
- # Query Sector_Detail__c for dietary preferences
55
- if not search_term:
56
- soql_sector = "SELECT Name, Image_URL__c, Category__c, Description__c FROM Sector_Detail__c"
57
- if dietary_preference == 'vegetarian':
58
- soql_sector += " WHERE Category__c = 'Veg'"
 
59
  elif dietary_preference == 'non-vegetarian':
60
- soql_sector += " WHERE Category__c = 'Non-Veg'"
61
- soql_sector += " LIMIT 200"
62
- logger.info(f"Executing SOQL query for Sector_Detail__c: {soql_sector}")
63
- result_sector = sf.query(soql_sector)
64
- sector_items = [
65
  {
66
  "name": record['Name'],
67
- "image_url": record.get('Image_URL__c', ''),
68
- "category": record.get('Category__c', ''),
69
  "description": record.get('Description__c', 'No description available'),
70
- "source": "Sector_Detail__c"
 
 
 
 
 
 
 
 
 
71
  }
72
- for record in result_sector['records'] if 'Name' in record
73
  ]
74
- items.extend(sector_items)
75
-
76
- # Query Menu_Item__c
77
- 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"
78
- if search_term:
79
- soql_menu += f" WHERE Name LIKE '%{search_term}%'"
80
- elif dietary_preference == 'vegetarian':
81
- soql_menu += " WHERE Veg_NonVeg__c = 'Vegetarian'"
82
- elif dietary_preference == 'non-vegetarian':
83
- soql_menu += " WHERE Veg_NonVeg__c = 'Non-Vegetarian'"
84
- soql_menu += " LIMIT 200"
85
- logger.info(f"Executing SOQL query for Menu_Item__c: {soql_menu}")
86
- result_menu = sf.query(soql_menu)
87
- menu_items = [
88
- {
89
- "name": record['Name'],
90
- "description": record.get('Description__c', 'No description available'),
91
- "image_url": record.get('Image1__c', ''),
92
- "ingredients": record.get('Ingredientsinfo__c', ''),
93
- "nutritional_info": record.get('NutritionalInfo__c', ''),
94
- "price": record.get('Price__c', 0.0),
95
- "sector": record.get('Sector__c', ''),
96
- "spice_levels": record.get('Spice_Levels__c', ''),
97
- "veg_nonveg": record.get('Veg_NonVeg__c', ''),
98
- "category": record.get('Category__c', ''),
99
- "dynamic_dish": record.get('Dynamic_Dish__c', False),
100
- "source": "Menu_Item__c"
101
- }
102
- for record in result_menu['records'] if 'Name' in record
103
- ]
104
- items.extend(menu_items)
105
 
106
- logger.info(f"Fetched {len(items)} items (Sector_Detail__c: {len([i for i in items if i['source'] == 'Sector_Detail__c'])}, Menu_Item__c: {len([i for i in items if i['source'] == 'Menu_Item__c'])}) for {dietary_preference or search_term}")
107
  return jsonify({"menu_items": items})
108
  except Exception as e:
109
  logger.error(f"Failed to fetch items: {str(e)}")
110
  return jsonify({"error": f"Failed to fetch items from Salesforce: {str(e)}"}), 500
111
 
112
- @app.route('/get_sector_item_details', methods=['POST'])
113
- def get_sector_item_details():
114
  global sf
115
  if not sf:
116
  sf = get_salesforce_connection()
117
  if not sf:
118
  return jsonify({"error": "Unable to connect to Salesforce"}), 500
119
 
120
- item_name = request.json.get('item_name', '').strip()
121
- if not item_name:
122
- return jsonify({"error": "Item name is required"}), 400
123
-
124
- try:
125
- soql = f"SELECT Name, Image_URL__c, Category__c, Description__c FROM Sector_Detail__c WHERE Name LIKE '%{item_name}%' LIMIT 1"
126
- logger.info(f"Executing SOQL query: {soql}")
127
- result = sf.query(soql)
128
-
129
- if result['totalSize'] == 0:
130
- return jsonify({"error": f"No item found matching '{item_name}' in Sector_Detail__c"}), 404
131
-
132
- record = result['records'][0]
133
- item_details = {
134
- "name": record.get('Name', ''),
135
- "image_url": record.get('Image_URL__c', 'https://via.placeholder.com/30'),
136
- "category": record.get('Category__c', ''),
137
- "description": record.get('Description__c', 'No description available'),
138
- "source": "Sector_Detail__c"
139
- }
140
- logger.info(f"Fetched details for '{item_name}' from Sector_Detail__c")
141
- return jsonify({"item_details": item_details})
142
- except Exception as e:
143
- logger.error(f"Failed to fetch item details from Sector_Detail__c: {str(e)}")
144
- return jsonify({"error": f"Failed to fetch item details from Salesforce: {str(e)}"}), 500
145
-
146
- @app.route('/suggest_items', methods=['POST'])
147
- def suggest_items():
148
- global sf
149
- if not sf:
150
- sf = get_salesforce_connection()
151
- if not sf:
152
- return jsonify({"error": "Unable to connect to Salesforce"}), 500
153
 
154
- search_term = request.json.get('search_term', '').strip()
155
- if not search_term:
156
- return jsonify({"error": "Search term is required"}), 400
157
 
158
  try:
159
- soql = f"SELECT Ingredient_Name__c, Image_URL__c FROM Ingredient_Object__c WHERE Ingredient_Name__c LIKE '%{search_term}%' LIMIT 10"
160
- logger.info(f"Executing SOQL query: {soql}")
 
 
 
 
 
161
  result = sf.query(soql)
162
- suggestions = [
163
- {"name": record['Ingredient_Name__c'], "image_url": record.get('Image_URL__c', '')}
164
- for record in result['records'] if 'Ingredient_Name__c' in record
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  ]
166
- logger.info(f"Fetched {len(suggestions)} suggestions for '{search_term}'")
167
- return jsonify({"suggestions": suggestions})
168
- except Exception as e:
169
- logger.error(f"Failed to fetch suggestions: {str(e)}")
170
- return jsonify({"error": f"Failed to fetch suggestions: {str(e)}"}), 500
171
-
172
- @app.route('/get_item_details', methods=['POST'])
173
- def get_item_details():
174
- global sf
175
- if not sf:
176
- sf = get_salesforce_connection()
177
- if not sf:
178
- return jsonify({"error": "Unable to connect to Salesforce"}), 500
179
-
180
- item_name = request.json.get('item_name', '').strip()
181
- if not item_name:
182
- return jsonify({"error": "Item name is required"}), 400
183
-
184
- try:
185
- soql = f"SELECT Ingredient_Name__c, Image_URL__c FROM Ingredient_Object__c WHERE Ingredient_Name__c LIKE '%{item_name}%' LIMIT 1"
186
- logger.info(f"Executing SOQL query: {soql}")
187
- result = sf.query(soql)
188
-
189
- if result['totalSize'] == 0:
190
- return jsonify({"error": f"No item found matching '{item_name}' in Ingredient_Object__c"}), 404
191
-
192
- record = result['records'][0]
193
- item_details = {
194
- "name": record.get('Ingredient_Name__c', ''),
195
- "image_url": record.get('Image_URL__c', ''),
196
- "source": "Ingredient_Object__c"
197
- }
198
- logger.info(f"Fetched details for '{item_name}' from Ingredient_Object__c")
199
- return jsonify({"item_details": item_details})
200
  except Exception as e:
201
- logger.error(f"Failed to fetch item details: {str(e)}")
202
- return jsonify({"error": f"Failed to fetch item details: {str(e)}"}), 500
203
 
204
- @app.route('/submit_items', methods=['POST'])
205
- def submit_items():
206
  global sf
207
  if not sf:
208
  sf = get_salesforce_connection()
@@ -211,6 +176,7 @@ def submit_items():
211
 
212
  items = request.json.get('items', [])
213
  custom_order_name = request.json.get('custom_order_name', '')
 
214
  if not items:
215
  return jsonify({"error": "No items to submit"}), 400
216
 
@@ -221,14 +187,15 @@ def submit_items():
221
 
222
  for item in items:
223
  item_description = item['description']
224
- if item.get('additionalIngredients'):
225
- item_description += f", with {', '.join(item['additionalIngredients'])}"
226
  sf.Ingredient_Object__c.create({
227
  'Ingredient_Name__c': ingredient_name,
228
  'Category__c': item.get('category', ''),
229
- 'Description__c': f"{item_description} - {description}",
230
  'Image_URL__c': item.get('image_url', ''),
231
- 'Quantity__c': item.get('quantity', 1)
 
232
  })
233
 
234
  logger.info(f"Submitted {len(items)} items under {ingredient_name}")
 
1
+ from flask import Flask, render_template, request, jsonify, send_from_directory
2
  from simple_salesforce import Salesforce
3
  from dotenv import load_dotenv
4
  import os
 
37
  def index():
38
  return render_template('chef-bot.html')
39
 
40
+ @app.route('/static/<path:filename>')
41
+ def static_files(filename):
42
+ return send_from_directory(app.static_folder, filename)
43
+
44
+ @app.route('/get_ingredients', methods=['POST'])
45
+ def get_ingredients():
46
+ global sf
47
+ if not sf:
48
+ sf = get_salesforce_connection()
49
+ if not sf:
50
+ return jsonify({"error": "Unable to connect to Salesforce"}), 500
51
+
52
+ try:
53
+ soql = "SELECT Name, Category__c FROM Sector_Detail__c WHERE Category__c = 'Both'"
54
+ soql += " LIMIT 200"
55
+ logger.info(f"Executing SOQL query for Sector_Detail__c: {soql}")
56
+ result = sf.query(soql)
57
+ ingredients = [
58
+ {
59
+ "name": record['Name'],
60
+ "category": record.get('Category__c', '')
61
+ }
62
+ for record in result['records'] if 'Name' in record
63
+ ]
64
+ logger.info(f"Fetched {len(ingredients)} ingredients from Sector_Detail__c")
65
+ return jsonify({"ingredients": ingredients})
66
+ except Exception as e:
67
+ logger.error(f"Failed to fetch ingredients: {str(e)}")
68
+ return jsonify({"error": f"Failed to fetch ingredients from Salesforce: {str(e)}"}), 500
69
+
70
  @app.route('/get_menu_items', methods=['POST'])
71
  def get_menu_items():
72
  global sf
 
79
  data = request.json
80
  dietary_preference = data.get('dietary_preference', 'both').lower()
81
  search_term = data.get('search_term', '').strip()
82
+ source = data.get('source', 'Menu_Item__c')
83
+
84
  try:
85
  items = []
86
+ if source == 'Menu_Item__c':
87
+ 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"
88
+ if search_term:
89
+ soql_menu += f" WHERE Name LIKE '%{search_term}%'"
90
+ elif dietary_preference == 'vegetarian':
91
+ soql_menu += " WHERE Veg_NonVeg__c = 'Vegetarian'"
92
  elif dietary_preference == 'non-vegetarian':
93
+ soql_menu += " WHERE Veg_NonVeg__c = 'Non-Vegetarian'"
94
+ soql_menu += " LIMIT 200"
95
+ logger.info(f"Executing SOQL query for Menu_Item__c: {soql_menu}")
96
+ result_menu = sf.query(soql_menu)
97
+ menu_items = [
98
  {
99
  "name": record['Name'],
 
 
100
  "description": record.get('Description__c', 'No description available'),
101
+ "image_url": record.get('Image1__c', ''),
102
+ "ingredients": record.get('Ingredientsinfo__c', ''),
103
+ "nutritional_info": record.get('NutritionalInfo__c', ''),
104
+ "price": record.get('Price__c', 0.0),
105
+ "sector": record.get('Sector__c', ''),
106
+ "spice_levels": record.get('Spice_Levels__c', ''),
107
+ "veg_nonveg": record.get('Veg_NonVeg__c', ''),
108
+ "category": record.get('Category__c', ''),
109
+ "dynamic_dish": record.get('Dynamic_Dish__c', False),
110
+ "source": "Menu_Item__c"
111
  }
112
+ for record in result_menu['records'] if 'Name' in record
113
  ]
114
+ items.extend(menu_items)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
 
116
+ logger.info(f"Fetched {len(items)} items from {source} for {dietary_preference or search_term}")
117
  return jsonify({"menu_items": items})
118
  except Exception as e:
119
  logger.error(f"Failed to fetch items: {str(e)}")
120
  return jsonify({"error": f"Failed to fetch items from Salesforce: {str(e)}"}), 500
121
 
122
+ @app.route('/get_related_menu_items', methods=['POST'])
123
+ def get_related_menu_items():
124
  global sf
125
  if not sf:
126
  sf = get_salesforce_connection()
127
  if not sf:
128
  return jsonify({"error": "Unable to connect to Salesforce"}), 500
129
 
130
+ data = request.json
131
+ ingredient_name = data.get('ingredient_name', '').strip()
132
+ dietary_preference = data.get('dietary_preference', 'both').lower()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
+ if not ingredient_name:
135
+ return jsonify({"error": "Ingredient name is required"}), 400
 
136
 
137
  try:
138
+ soql = "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 Ingredientsinfo__c LIKE '%" + ingredient_name + "%'"
139
+ if dietary_preference == 'vegetarian':
140
+ soql += " AND Veg_NonVeg__c = 'Vegetarian'"
141
+ elif dietary_preference == 'non-vegetarian':
142
+ soql += " AND Veg_NonVeg__c = 'Non-Vegetarian'"
143
+ soql += " LIMIT 200"
144
+ logger.info(f"Executing SOQL query for related Menu_Item__c: {soql}")
145
  result = sf.query(soql)
146
+ menu_items = [
147
+ {
148
+ "name": record['Name'],
149
+ "description": record.get('Description__c', 'No description available'),
150
+ "image_url": record.get('Image1__c', ''),
151
+ "ingredients": record.get('Ingredientsinfo__c', ''),
152
+ "nutritional_info": record.get('NutritionalInfo__c', ''),
153
+ "price": record.get('Price__c', 0.0),
154
+ "sector": record.get('Sector__c', ''),
155
+ "spice_levels": record.get('Spice_Levels__c', ''),
156
+ "veg_nonveg": record.get('Veg_NonVeg__c', ''),
157
+ "category": record.get('Category__c', ''),
158
+ "dynamic_dish": record.get('Dynamic_Dish__c', False),
159
+ "source": "Menu_Item__c"
160
+ }
161
+ for record in result['records'] if 'Name' in record
162
  ]
163
+ logger.info(f"Fetched {len(menu_items)} related menu items for {ingredient_name}")
164
+ return jsonify({"menu_items": menu_items})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  except Exception as e:
166
+ logger.error(f"Failed to fetch related menu items: {str(e)}")
167
+ return jsonify({"error": f"Failed to fetch related menu items from Salesforce: {str(e)}"}), 500
168
 
169
+ @app.route('/submit_ingredients', methods=['POST'])
170
+ def submit_ingredients():
171
  global sf
172
  if not sf:
173
  sf = get_salesforce_connection()
 
176
 
177
  items = request.json.get('items', [])
178
  custom_order_name = request.json.get('custom_order_name', '')
179
+ ingredients_info = request.json.get('ingredients_info', '')
180
  if not items:
181
  return jsonify({"error": "No items to submit"}), 400
182
 
 
187
 
188
  for item in items:
189
  item_description = item['description']
190
+ if item.get('ingredientsInfo'):
191
+ item_description += f", additional info: {item['ingredientsInfo']}"
192
  sf.Ingredient_Object__c.create({
193
  'Ingredient_Name__c': ingredient_name,
194
  'Category__c': item.get('category', ''),
195
+ 'Description__c': item_description,
196
  'Image_URL__c': item.get('image_url', ''),
197
+ 'Quantity__c': item.get('quantity', 1),
198
+ 'Ingredientsinfo__c': ingredients_info or item.get('ingredientsInfo', '')
199
  })
200
 
201
  logger.info(f"Submitted {len(items)} items under {ingredient_name}")