Apply Pricing Rule in Shopping Cart
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index f298bc8..bd18b5c 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -277,7 +277,7 @@
pricing_rules = filter(lambda x: x.for_price_list==args.price_list, pricing_rules) \
or pricing_rules
- if len(pricing_rules) > 1:
+ if len(pricing_rules) > 1 and not args.for_shopping_cart:
frappe.throw(_("Multiple Price Rules exists with same criteria, please resolve conflict by assigning priority. Price Rules: {0}")
.format("\n".join([d.name for d in pricing_rules])), MultiplePricingRuleConflict)
elif pricing_rules:
diff --git a/erpnext/shopping_cart/product.py b/erpnext/shopping_cart/product.py
index 6a6cb69..24e4d42 100644
--- a/erpnext/shopping_cart/product.py
+++ b/erpnext/shopping_cart/product.py
@@ -4,9 +4,11 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import cint, fmt_money
+from frappe.utils import cint, fmt_money, flt
from erpnext.shopping_cart.cart import _get_cart_quotation
-from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import is_cart_enabled
+from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings \
+ import is_cart_enabled, get_shopping_cart_settings
+from erpnext.accounts.doctype.pricing_rule.pricing_rule import get_pricing_rule_for_item
@frappe.whitelist(allow_guest=True)
def get_product_info(item_code):
@@ -51,12 +53,14 @@
in_stock = in_stock[0][0] > 0 and 1 or 0
else:
- in_stock = -1
+ in_stock = 0
return in_stock
-def get_price(item_code, template_item_code, price_list):
+def get_price(item_code, template_item_code, price_list, qty=1):
if price_list:
+ cart_settings = get_shopping_cart_settings()
+
price = frappe.get_all("Item Price", fields=["price_list_rate", "currency"],
filters={"price_list": price_list, "item_code": item_code})
@@ -65,4 +69,22 @@
filters={"price_list": price_list, "item_code": template_item_code})
if price:
+ pricing_rule = get_pricing_rule_for_item(frappe._dict({
+ "item_code": item_code,
+ "qty": qty,
+ "transaction_type": "selling",
+ "price_list": price_list,
+ "customer_group": cart_settings.default_customer_group,
+ "company": cart_settings.company,
+ "conversion_rate": 1,
+ "for_shopping_cart": True
+ }))
+
+ if pricing_rule:
+ if pricing_rule.pricing_rule_for == "Discount Percentage":
+ price[0].price_list_rate = flt(price[0].price_list_rate * (1.0 - (pricing_rule.discount_percentage / 100.0)))
+
+ if pricing_rule.pricing_rule_for == "Price":
+ price[0].price_list_rate = pricing_rule.price_list_rate
+
return price[0]
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index f4d9027..2775222 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -12,13 +12,13 @@
item_code: get_item_code()
},
callback: function(r) {
- $(".item-cart").toggleClass("hide", !!!r.message.price);
+ $(".item-cart").toggleClass("hide", (!!!r.message.price || !!!r.message.stock));
if(r.message && r.message.price) {
$(".item-price")
.html(r.message.price.formatted_price + " per " + r.message.uom);
if(r.message.stock==0) {
- $(".item-stock").html("<div class='help'>Not in stock</div>");
+ $(".item-stock").html("<div style='color: red'>Not in stock</div>");
}
else if(r.message.stock==1) {
$(".item-stock").html("<div style='color: green'>\