from flask import Blueprint, render_template, request, session, jsonify, redirect, url_for from salesforce import get_salesforce_connection sf = get_salesforce_connection() menu_blueprint = Blueprint('menu', __name__) @menu_blueprint.route("/menu", methods=["GET"]) def menu(): email = session.get('user_email') user_name = session.get('user_name') if not email or not user_name: return redirect(url_for("login")) category = request.args.get('category', 'All') veg_filter = request.args.get('veg', None) # Build query based on filters query_conditions = [] if veg_filter: category = 'Veg' query_conditions.append("Veg_NonVeg__c = 'Veg'") elif category == 'All': query_conditions.append("(Veg_NonVeg__c = 'Veg' OR Veg_NonVeg__c = 'Non veg')") elif category == 'Customized Dish': query_conditions.append(f"Section__c = 'Customized Dish' AND Customer_Email__c = '{email}'") else: query_conditions.append(f"Veg_NonVeg__c = '{category}'") query = f""" SELECT Name, Price__c, Image1__c, Image2__c, Video1__c, Section__c, Description__c, Ingredientsinfo__c, NutritionalInfo__c, Allergens__c, Veg_NonVeg__c FROM Menu_Item__c WHERE {' AND '.join(query_conditions)} """ try: result = sf.query(query) menu_items = result.get("records", []) # Organize menu items by section ordered_menu = {} for item in menu_items: section = item.get('Section__c', 'Other') if section not in ordered_menu: ordered_menu[section] = [] ordered_menu[section].append(item) # Fetch most common add-ons (simplified for this example) most_common_addons = ["Medium", "Raita"] return render_template( "menu.html", ordered_menu=ordered_menu, selected_category=category, user_name=user_name, first_letter=user_name[0].upper(), most_common_addons=most_common_addons ) except Exception as e: print(f"Error fetching menu items: {e}") return render_template( "menu.html", ordered_menu={}, selected_category=category, user_name=user_name, first_letter=user_name[0].upper(), most_common_addons=[] ) @menu_blueprint.route("/menu/save_custom_dish", methods=["POST"]) def save_custom_dish(): try: email = session.get('user_email') if not email: return jsonify({"success": False, "error": "User not logged in."}), 401 data = request.get_json() menu_item = data.get('menu_item') ingredients = data.get('ingredients', []) instructions = data.get('instructions', '') item_price = float(data.get('itemPrice', 10.00)) item_image = data.get('itemImage', 'https://via.placeholder.com/120') # Create a new Menu_Item__c record for the custom dish sf.Menu_Item__c.create({ "Name": menu_item['name'], "Price__c": item_price, "Image1__c": item_image, "Section__c": "Customized Dish", "Description__c": instructions, "Ingredientsinfo__c": ", ".join(i['name'] for i in ingredients), "Customer_Email__c": email, "Veg_NonVeg__c": "Custom" }) return jsonify({"success": True, "message": "Custom dish saved successfully"}) except Exception as e: print(f"Error saving custom dish: {e}") return jsonify({"success": False, "error": str(e)}), 500 @menu_blueprint.route("/get_ingredients", methods=["POST"]) def get_ingredients(): try: data = request.get_json() dietary_preference = data.get('dietary_preference', 'all') # Simplified ingredient fetching logic ingredients = [ {"name": "Tomato", "image_url": "https://via.placeholder.com/120", "category": "vegetarian"}, {"name": "Chicken", "image_url": "https://via.placeholder.com/120", "category": "non-vegetarian"}, {"name": "Onion", "image_url": "https://via.placeholder.com/120", "category": "vegetarian"}, {"name": "Beef", "image_url": "https://via.placeholder.com/120", "category": "non-vegetarian"} ] filtered_ingredients = [ ingredient for ingredient in ingredients if dietary_preference == 'all' or ingredient['category'] == dietary_preference.lower() or dietary_preference in ingredient['name'].lower() ] return jsonify({"success": True, "ingredients": filtered_ingredients}) except Exception as e: print(f"Error fetching ingredients: {e}") return jsonify({"success": False, "error": str(e)}), 500 @menu_blueprint.route("/get_menu_items", methods=["POST"]) def get_menu_items(): try: data = request.get_json() ingredient_names = data.get('ingredient_names', '') # Simplified menu item fetching logic menu_items = [ {"name": "Tomato Curry", "image_url": "https://via.placeholder.com/120"}, {"name": "Chicken Biryani", "image_url": "https://via.placeholder.com/120"} ] filtered_items = [ item for item in menu_items if not ingredient_names or any(ing in item['name'].lower() for ing in ingredient_names.split()) ] return jsonify({"success": True, "menu_items": filtered_items}) except Exception as e: print(f"Error fetching menu items: {e}") return jsonify({"success": False, "error": str(e)}), 500