Spaces:
Runtime error
Runtime error
| from flask import Blueprint, render_template, request | |
| from salesforce import get_salesforce_connection | |
| menu_blueprint = Blueprint('menu', __name__) | |
| # Initialize Salesforce connection | |
| sf = get_salesforce_connection() | |
| def menu(): | |
| selected_category = request.args.get("category", "All") | |
| user_email = session.get('user_email') | |
| if not user_email: | |
| user_email = request.args.get("email") | |
| user_name = request.args.get("name") | |
| if user_email: | |
| session['user_email'] = user_email | |
| session['user_name'] = user_name # Store name in session | |
| else: | |
| return redirect(url_for("login")) | |
| else: | |
| user_name = session.get('user_name') # Get name from session if it's already stored | |
| # Get the first letter of the user's name (make it uppercase for consistency) | |
| first_letter = user_name[0].upper() if user_name else "A" | |
| try: | |
| # Fetch user referral and reward points | |
| user_query = f"SELECT Referral__c, Reward_Points__c FROM Customer_Login__c WHERE Email__c = '{user_email}'" | |
| user_result = sf.query(user_query) | |
| if not user_result['records']: | |
| return redirect(url_for('login')) | |
| referral_code = user_result['records'][0].get('Referral__c', 'N/A') | |
| reward_points = user_result['records'][0].get('Reward_Points__c', 0) | |
| # Query to fetch Menu_Item__c records including Total_Ordered__c for best sellers | |
| menu_query = """ | |
| SELECT Name, Price__c, Description__c, Image1__c, Image2__c, Veg_NonVeg__c, Section__c, Total_Ordered__c | |
| FROM Menu_Item__c | |
| """ | |
| result = sf.query(menu_query) | |
| food_items = result['records'] if 'records' in result else [] | |
| # Ensure Total_Ordered__c has a valid value | |
| for item in food_items: | |
| if 'Total_Ordered__c' not in item or item['Total_Ordered__c'] is None: | |
| item['Total_Ordered__c'] = 0 # Default value | |
| # Query to fetch Custom_Dish__c records created within the last 7 days with Total_Ordered__c > 10 | |
| custom_dish_query = """ | |
| SELECT Name, Price__c, Description__c, Image1__c, Image2__c, Veg_NonVeg__c, Section__c, Total_Ordered__c | |
| FROM Custom_Dish__c | |
| WHERE CreatedDate >= LAST_N_DAYS:7 | |
| """ | |
| custom_dish_result = sf.query(custom_dish_query) | |
| custom_dishes = custom_dish_result['records'] if 'records' in custom_dish_result else [] | |
| # Merge both Menu_Item__c and Custom_Dish__c records into the ordered menu | |
| all_items = food_items + custom_dishes | |
| # Define the order of sections, adding "Best Sellers" at the top | |
| section_order = ["Best Sellers", "Starters", "Biryanis", "Curries", "Breads", "Customized dish", "Apetizer", "Desserts", "Soft Drinks"] | |
| ordered_menu = {section: [] for section in section_order} | |
| # Sort items by Total_Ordered__c in descending order and pick top 4 as best sellers | |
| best_sellers = sorted(all_items, key=lambda x: x.get("Total_Ordered__c", 0), reverse=True) | |
| if selected_category == "Veg": | |
| best_sellers = [item for item in best_sellers if item.get("Veg_NonVeg__c") in ["Veg", "both"]] | |
| elif selected_category == "Non veg": | |
| best_sellers = [item for item in best_sellers if item.get("Veg_NonVeg__c") in ["Non veg", "both"]] | |
| # Take only the top 4 best sellers after filtering | |
| best_sellers = best_sellers[:4] | |
| # Ensure "Best Sellers" is added only if there are items after filtering | |
| if best_sellers: | |
| ordered_menu["Best Sellers"] = best_sellers | |
| # Create a set to track item names already added to prevent duplicates | |
| added_item_names = set() | |
| # Filter and organize menu items based on category and section (to avoid duplicates) | |
| for item in all_items: | |
| section = item.get("Section__c", "Others") # Default to "Others" if missing | |
| if section not in ordered_menu: | |
| ordered_menu[section] = [] | |
| # Skip item if it's already been added to avoid duplicates | |
| if item['Name'] in added_item_names: | |
| continue | |
| # Apply category filters | |
| if selected_category == "Veg" and item.get("Veg_NonVeg__c") not in ["Veg", "both"]: | |
| continue | |
| if selected_category == "Non veg" and item.get("Veg_NonVeg__c") not in ["Non veg", "both"]: | |
| continue | |
| ordered_menu[section].append(item) | |
| added_item_names.add(item['Name']) # Add item to the set of added items | |
| print(f"Added item to {section}: {item['Name']}") # Debugging | |
| # Remove empty sections | |
| ordered_menu = {section: items for section, items in ordered_menu.items() if items} | |
| print(f"Final ordered menu: {ordered_menu.keys()}") # Debugging | |
| categories = ["All", "Veg", "Non veg"] | |
| except Exception as e: | |
| print(f"Error fetching menu data: {str(e)}") | |
| ordered_menu = {} | |
| categories = ["All", "Veg", "Non veg"] | |
| referral_code = 'N/A' | |
| reward_points = 0 | |
| # Pass the user's first letter (first_letter) to the template | |
| return render_template( | |
| "menu.html", | |
| ordered_menu=ordered_menu, | |
| categories=categories, | |
| selected_category=selected_category, | |
| referral_code=referral_code, | |
| reward_points=reward_points, | |
| user_name=user_name, # Pass name to the template | |
| first_letter=first_letter # Pass first letter to the template | |
| ) | |