pricing rule
diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
index d09902c..0f18eaf 100644
--- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
@@ -45,7 +45,16 @@
 		prule.insert()
 		details = get_item_details(args)
 		self.assertEquals(details.get("discount_percentage"), 20)
-
+		
+		prule = frappe.bean(copy=test_records[0])
+		prule.doc.applicable_for = "Campaign"
+		prule.doc.campaign = "_Test Campaign"
+		prule.doc.discount = 30
+		prule.insert()
+		args.campaign = "_Test Campaign"
+		details = get_item_details(args)
+		self.assertEquals(details.get("discount_percentage"), 30)
+		
 		args.item_code = "_Test Item 2"
 		details = get_item_details(args)
 		self.assertEquals(details.get("discount_percentage"), 15)
@@ -54,6 +63,8 @@
 		details = get_item_details(args)
 		self.assertEquals(details.get("discount_percentage"), 15)
 		
+		
+		
 
 test_records = [
 	[{
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 79613c3..411435e 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -265,9 +265,13 @@
 def apply_pricing_rule(out, args):
 	args_dict = frappe._dict().update(args)
 	args_dict.update(out)
-	
+	pricing_rules = get_pricing_rules(args_dict)
 	for rule_for in ["price", "discount"]:
-		pricing_rules = get_pricing_rules(args_dict, rule_for)
+		pricing_rules = filter(lambda x: x[rule_for] > 0, pricing_rules)
+		pricing_rules = filter_pricing_rules(args_dict, pricing_rules)
+		
+		if len(pricing_rules) > 1:
+			pricing_rules = sorted(pricing_rules, key=lambda x: x[rule_for])
 		if pricing_rules:
 			if rule_for == "discount":
 				out["discount_percentage"] = pricing_rules[-1]["discount"]
@@ -277,8 +281,8 @@
 					flt(args_dict.plc_conversion_rate) / flt(args_dict.conversion_rate)
 	
 	
-def get_pricing_rules(args_dict, price_or_discount):	
-	def _filter_pricing_rule(pricing_rules, field_set):
+def filter_pricing_rules(args_dict, pricing_rules):	
+	def _filter_pricing_rules(pricing_rules, field_set):
 		p_rules = []
 		for field in field_set:
 			if not p_rules:
@@ -289,13 +293,11 @@
 				break
 		
 		return p_rules or pricing_rules
-		
-	pricing_rules = get_all_pricing_rules(args_dict, price_or_discount)
 
 	for field_set in [["item_code", "item_group", "brand"], ["customer", "customer_group", 
 		"territory", "supplier", "supplier_type", "campaign", "sales_partner"]]:
 			if pricing_rules:
-				pricing_rules = _filter_pricing_rule(pricing_rules, field_set)
+				pricing_rules = _filter_pricing_rules(pricing_rules, field_set)
 
 	# filter for price list
 	if pricing_rules:
@@ -312,15 +314,11 @@
 		max_priority = min([cint(p.priority) for p in pricing_rules])
 		if max_priority:
 			pricing_rules = filter(lambda x: x.priority==max_priority, pricing_rules)
-			
-	if len(pricing_rules) > 1:
-		pricing_rules = sorted(pricing_rules, key=lambda x: x[price_or_discount])
 
 	return pricing_rules
 	
-def get_all_pricing_rules(args_dict, price_or_discount):	
-	conditions = " and ifnull(%s, 0) > 0" % price_or_discount
-	
+def get_pricing_rules(args_dict):	
+	conditions = ""
 	for field in ["customer", "customer_group", "territory", "supplier", "supplier_type", 
 		"campaign", "sales_partner"]:
 			if args_dict.get(field):