# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt import frappe from erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings import ( get_shopping_cart_settings, ) from erpnext.e_commerce.shopping_cart.cart import _set_price_list from erpnext.utilities.product import get_price def get_context(context): is_guest = frappe.session.user == "Guest" settings = get_shopping_cart_settings() items = get_wishlist_items() if not is_guest else [] selling_price_list = _set_price_list(settings) if not is_guest else None items = set_stock_price_details(items, settings, selling_price_list) context.body_class = "product-page" context.items = items context.settings = settings context.no_cache = 1 def get_stock_availability(item_code, warehouse): stock_qty = frappe.utils.flt( frappe.db.get_value("Bin", { "item_code": item_code, "warehouse": warehouse }, "actual_qty") ) return bool(stock_qty) def get_wishlist_items(): if not frappe.db.exists("Wishlist", frappe.session.user): return [] return frappe.db.get_all( "Wishlist Item", filters={ "parent": frappe.session.user }, fields=[ "web_item_name", "item_code", "item_name", "website_item", "warehouse", "image", "item_group", "route" ]) def set_stock_price_details(items, settings, selling_price_list): for item in items: if settings.show_stock_availability: item.available = get_stock_availability(item.item_code, item.get("warehouse")) price_details = get_price( item.item_code, selling_price_list, settings.default_customer_group, settings.company ) if price_details: item.formatted_price = price_details.get('formatted_price') item.formatted_mrp = price_details.get('formatted_mrp') if item.formatted_mrp: item.discount = price_details.get('formatted_discount_percent') or \ price_details.get('formatted_discount_rate') return items