Currency filter in Pricing Rule (#11776)

* added currency filter

* modified files

* pull margin only if currency matches

* Renamed price to rate in pricing rule

* fetch rate only if currency matches

* rebase with develop

* rebase with develop

* patch to set currency in existing docs

* currency field mandatory in pricing rule

* modified test cases

* rebase with develop

* fixed test case
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
index 120329b..dcbf354 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
@@ -14,7 +14,7 @@
 						${__("Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.")}
 					</li>
 					<li>
-						${__("If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.")}
+						${__("If selected Pricing Rule is made for 'Rate', it will overwrite Price List. Pricing Rule rate is the final rate, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.")}
 					</li>
 					<li>
 						${__('Discount Percentage can be applied either against a Price List or for all Price List.')}
@@ -97,8 +97,8 @@
 	cur_frm.set_df_property('margin_rate_or_amount', 'description', doc.margin_type=='Percentage'?'In Percentage %':'In Amount')
 }
 
-frappe.ui.form.on('Pricing Rule', 'price_or_discount', function(frm){
-	if(frm.doc.price_or_discount == 'Price') {
+frappe.ui.form.on('Pricing Rule', 'rate_or_discount', function(frm){
+	if(frm.doc.rate_or_discount == 'Rate') {
 		frm.set_value('for_price_list', "")
 	}
 })
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.json b/erpnext/accounts/doctype/pricing_rule/pricing_rule.json
index 6fae8f7..1c30fa4 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.json
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.json
@@ -916,6 +916,38 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "", 
+   "fieldname": "currency", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Currency", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Currency", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "depends_on": "eval: doc.selling == 1", 
    "fieldname": "margin", 
    "fieldtype": "Section Break", 
@@ -1070,7 +1102,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "default": "Discount Percentage", 
-   "fieldname": "price_or_discount", 
+   "fieldname": "rate_or_discount", 
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1079,10 +1111,10 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Price or Discount", 
+   "label": "Rate or Discount", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "\nPrice\nDiscount Percentage", 
+   "options": "\nRate\nDiscount Percentage", 
    "permlevel": 0, 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
@@ -1128,8 +1160,8 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "depends_on": "eval:doc.price_or_discount==\"Price\"", 
-   "fieldname": "price", 
+   "depends_on": "eval:doc.rate_or_discount==\"Rate\"", 
+   "fieldname": "rate", 
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -1138,7 +1170,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Price", 
+   "label": "Rate", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -1158,7 +1190,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "depends_on": "eval:doc.price_or_discount==\"Discount Percentage\"", 
+   "depends_on": "eval:doc.rate_or_discount==\"Discount Percentage\"", 
    "fieldname": "discount_percentage", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -1188,7 +1220,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "depends_on": "eval:doc.price_or_discount==\"Discount Percentage\"", 
+   "depends_on": "eval:doc.rate_or_discount==\"Discount Percentage\"", 
    "fieldname": "for_price_list", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -1284,7 +1316,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-09-27 08:31:38.432574", 
+ "modified": "2018-02-12 17:21:22.559996", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Pricing Rule", 
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index 1087878..0479cd8 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -21,7 +21,7 @@
 		self.validate_applicable_for_selling_or_buying()
 		self.validate_min_max_qty()
 		self.cleanup_fields_value()
-		self.validate_price_or_discount()
+		self.validate_rate_or_discount()
 		self.validate_max_discount()
 
 		if not self.margin_type: self.margin_rate_or_amount = 0.0
@@ -50,7 +50,7 @@
 			throw(_("Min Qty can not be greater than Max Qty"))
 
 	def cleanup_fields_value(self):
-		for logic_field in ["apply_on", "applicable_for", "price_or_discount"]:
+		for logic_field in ["apply_on", "applicable_for", "rate_or_discount"]:
 			fieldname = frappe.scrub(self.get(logic_field) or "")
 
 			# reset all values except for the logic field
@@ -62,13 +62,13 @@
 				if f!=fieldname:
 					self.set(f, None)
 
-	def validate_price_or_discount(self):
-		for field in ["Price"]:
+	def validate_rate_or_discount(self):
+		for field in ["Rate"]:
 			if flt(self.get(frappe.scrub(field))) < 0:
 				throw(_("{0} can not be negative").format(field))
 
 	def validate_max_discount(self):
-		if self.price_or_discount == "Discount Percentage" and self.item_code:
+		if self.rate_or_discount == "Discount Percentage" and self.item_code:
 			max_discount = frappe.db.get_value("Item", self.item_code, "max_discount")
 			if max_discount and flt(self.discount_percentage) > flt(max_discount):
 				throw(_("Max discount allowed for item: {0} is {1}%").format(self.item_code, max_discount))
@@ -176,17 +176,34 @@
 
 	if pricing_rule:
 		item_details.pricing_rule = pricing_rule.name
-		item_details.pricing_rule_for = pricing_rule.price_or_discount
-		item_details.margin_type = pricing_rule.margin_type
-		item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
-		if pricing_rule.price_or_discount == "Price":
-			item_details.update({
-				"price_list_rate": (pricing_rule.price/flt(args.conversion_rate)) * args.conversion_factor or 1.0 \
-					if args.conversion_rate else 0.0,
-				"discount_percentage": 0.0
-			})
+		item_details.pricing_rule_for = pricing_rule.rate_or_discount
+
+		if pricing_rule.margin_type == 'Amount' and pricing_rule.currency == args.currency:
+			item_details.margin_type = pricing_rule.margin_type
+			item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
+
+		elif pricing_rule.margin_type == 'Percentage':
+			item_details.margin_type = pricing_rule.margin_type
+			item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
+		else:
+			item_details.margin_type = None
+			item_details.margin_rate_or_amount = 0.0
+
+		if pricing_rule.rate_or_discount == 'Rate':
+			if pricing_rule.currency == args.currency:
+				item_details.update({
+					"price_list_rate": pricing_rule.rate,
+					"discount_percentage": 0.0
+				})
+
+			else:
+				item_details.update({
+					"price_list_rate": 0.0,
+					"discount_percentage": 0.0
+				})
 		else:
 			item_details.discount_percentage = pricing_rule.discount_percentage or args.discount_percentage
+
 	elif args.get('pricing_rule'):
 		item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details)
 
@@ -194,8 +211,8 @@
 
 def remove_pricing_rule_for_item(pricing_rule, item_details):
 	pricing_rule = frappe.db.get_value('Pricing Rule', pricing_rule, 
-		['price_or_discount', 'margin_type'], as_dict=1)
-	if pricing_rule and pricing_rule.price_or_discount == 'Discount Percentage':
+		['rate_or_discount', 'margin_type'], as_dict=1)
+	if pricing_rule and pricing_rule.rate_or_discount == 'Discount Percentage':
 		item_details.discount_percentage = 0.0
 
 	if pricing_rule and pricing_rule.margin_type in ['Percentage', 'Amount']:
@@ -318,8 +335,8 @@
 					break
 
 	if len(pricing_rules) > 1:
-		price_or_discount = list(set([d.price_or_discount for d in pricing_rules]))
-		if len(price_or_discount) == 1 and price_or_discount[0] == "Discount Percentage":
+		rate_or_discount = list(set([d.rate_or_discount for d in pricing_rules]))
+		if len(rate_or_discount) == 1 and rate_or_discount[0] == "Discount Percentage":
 			pricing_rules = filter(lambda x: x.for_price_list==args.price_list, pricing_rules) \
 				or pricing_rules
 
diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
index 3fa34e2..5b4049b 100644
--- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
@@ -22,9 +22,10 @@
 			"title": "_Test Pricing Rule",
 			"apply_on": "Item Code",
 			"item_code": "_Test Item",
+			"currency": "USD",
 			"selling": 1,
-			"price_or_discount": "Discount Percentage",
-			"price": 0,
+			"rate_or_discount": "Discount Percentage",
+			"rate": 0,
 			"discount_percentage": 10,
 			"company": "_Test Company"
 		}
@@ -102,8 +103,9 @@
 			"apply_on": "Item Code",
 			"item_code": "_Test FG Item 2",
 			"selling": 1,
-			"price_or_discount": "Discount Percentage",
-			"price": 0,
+			"currency": "USD",
+			"rate_or_discount": "Discount Percentage",
+			"rate": 0,
 			"margin_type": "Percentage",
 			"margin_rate_or_amount": 10,
 			"company": "_Test Company"
@@ -167,10 +169,11 @@
 			"doctype": "Pricing Rule",
 			"title": "_Test Pricing Rule 1",
 			"apply_on": "Item Code",
+			"currency": "USD",
 			"item_code": "_Test Variant Item",
 			"selling": 1,
-			"price_or_discount": "Discount Percentage",
-			"price": 0,
+			"rate_or_discount": "Discount Percentage",
+			"rate": 0,
 			"discount_percentage": 7.5,
 			"company": "_Test Company"
 		}).insert()
@@ -198,9 +201,10 @@
 			"title": "_Test Pricing Rule 2",
 			"apply_on": "Item Code",
 			"item_code": "Test Variant PRT",
+			"currency": "USD",
 			"selling": 1,
-			"price_or_discount": "Discount Percentage",
-			"price": 0,
+			"rate_or_discount": "Discount Percentage",
+			"rate": 0,
 			"discount_percentage": 17.5,
 			"company": "_Test Company"
 		}).insert()
@@ -215,10 +219,11 @@
 			"doctype": "Pricing Rule",
 			"title": "_Test Pricing Rule",
 			"apply_on": "Item Code",
+			"currency": "USD",
 			"item_code": "_Test Item",
 			"selling": 1,
-			"price_or_discount": "Discount Percentage",
-			"price": 0,
+			"rate_or_discount": "Discount Percentage",
+			"rate": 0,
 			"min_qty": 5,
 			"max_qty": 7,
 			"discount_percentage": 17.5,
@@ -283,12 +288,13 @@
 		"item_code": args.item_code or "_Test Item",
 		"applicable_for": args.applicable_for,
 		"selling": args.selling or 0,
+		"currency": "USD",
 		"buying": args.buying or 0,
 		"min_qty": args.min_qty or 0.0,
 		"max_qty": args.max_qty or 0.0,
-		"price_or_discount": args.price_or_discount or "Discount Percentage",
+		"rate_or_discount": args.rate_or_discount or "Discount Percentage",
 		"discount_percentage": args.discount_percentage or 0.0,
-		"price": args.price or 0.0,
+		"rate": args.rate or 0.0,
 		"margin_type": args.margin_type,
 		"margin_rate_or_amount": args.margin_rate_or_amount or 0.0
 	}).insert(ignore_permissions=True)
diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule.js
similarity index 88%
rename from erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js
rename to erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule.js
index 4d34033..8155e7d 100644
--- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js
+++ b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule.js
@@ -1,4 +1,4 @@
-QUnit.module('Pricing Rule"');
+QUnit.module('Pricing Rule');
 
 QUnit.test("test pricing rule", function(assert) {
 	assert.expect(2);
@@ -11,6 +11,7 @@
 				{selling:1},
 				{applicable_for:'Customer'},
 				{customer:'Test Customer 3'},
+				{currency: frappe.defaults.get_default("currency")}
 				{min_qty:1},
 				{max_qty:20},
 				{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
diff --git a/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_different_currency.js b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_different_currency.js
new file mode 100644
index 0000000..4a29956
--- /dev/null
+++ b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_different_currency.js
@@ -0,0 +1,58 @@
+QUnit.module('Pricing Rule');
+
+QUnit.test("test pricing rule with different currency", function(assert) {
+	assert.expect(3);
+	let done = assert.async();
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make("Pricing Rule", [
+				{title: 'Test Pricing Rule 2'},
+				{apply_on: 'Item Code'},
+				{item_code:'Test Product 4'},
+				{selling:1},
+				{priority: 1},
+				{min_qty:1},
+				{max_qty:20},
+				{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
+				{margin_type: 'Amount'},
+				{margin_rate_or_amount: 20},
+				{rate_or_discount: 'Rate'},
+				{rate:200},
+				{currency:'USD'}
+
+			]);
+		},
+		() => cur_frm.save(),
+		() => frappe.timeout(0.3),
+		() => {
+			assert.ok(cur_frm.doc.item_code=='Test Product 4');
+		},
+
+		() => {
+			return frappe.tests.make('Sales Order', [
+				{customer: 'Test Customer 1'},
+				{currency: 'INR'},
+				{items: [
+					[
+						{'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
+						{'qty': 5},
+						{'item_code': "Test Product 4"}
+					]
+				]}
+			]);
+		},
+		() => cur_frm.save(),
+		() => frappe.timeout(0.3),
+		() => {
+			// get_item_details
+			assert.ok(cur_frm.doc.items[0].pricing_rule=='Test Pricing Rule 2', "Pricing rule correct");
+			// margin not applied because different currency in pricing rule
+			assert.ok(cur_frm.doc.items[0].margin_type==null, "Margin correct");
+		},
+		() => frappe.timeout(0.3),
+		() => frappe.tests.click_button('Submit'),
+		() => frappe.tests.click_button('Yes'),
+		() => frappe.timeout(0.3),
+		() => done()
+	]);
+});
diff --git a/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_same_currency.js b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_same_currency.js
new file mode 100644
index 0000000..601ff6b
--- /dev/null
+++ b/erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_same_currency.js
@@ -0,0 +1,56 @@
+QUnit.module('Pricing Rule');
+
+QUnit.test("test pricing rule with same currency", function(assert) {
+	assert.expect(4);
+	let done = assert.async();
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make("Pricing Rule", [
+				{title: 'Test Pricing Rule 1'},
+				{apply_on: 'Item Code'},
+				{item_code:'Test Product 4'},
+				{selling:1},
+				{min_qty:1},
+				{max_qty:20},
+				{valid_upto: frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
+				{rate_or_discount: 'Rate'},
+				{rate:200},
+				{currency:'USD'}
+
+			]);
+		},
+		() => cur_frm.save(),
+		() => frappe.timeout(0.3),
+		() => {
+			assert.ok(cur_frm.doc.item_code=='Test Product 4');
+		},
+
+		() => {
+			return frappe.tests.make('Sales Order', [
+				{customer: 'Test Customer 1'},
+				{currency: 'USD'},
+				{items: [
+					[
+						{'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)},
+						{'qty': 5},
+						{'item_code': "Test Product 4"}
+					]
+				]}
+			]);
+		},
+		() => cur_frm.save(),
+		() => frappe.timeout(0.3),
+		() => {
+			// get_item_details
+			assert.ok(cur_frm.doc.items[0].pricing_rule=='Test Pricing Rule 1', "Pricing rule correct");
+			assert.ok(cur_frm.doc.items[0].price_list_rate==200, "Item rate correct");
+			// get_total
+			assert.ok(cur_frm.doc.total== 1000, "Total correct");
+		},
+		() => frappe.timeout(0.3),
+		() => frappe.tests.click_button('Submit'),
+		() => frappe.tests.click_button('Yes'),
+		() => frappe.timeout(0.3),
+		() => done()
+	]);
+});
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 699e1c6..008ce6e 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -510,13 +510,22 @@
 				self.doc.precision("base_write_off_amount"))
 
 	def calculate_margin(self, item):
+
 		rate_with_margin = 0.0
 		base_rate_with_margin = 0.0
 		if item.price_list_rate:
 			if item.pricing_rule and not self.doc.ignore_pricing_rule:
 				pricing_rule = frappe.get_doc('Pricing Rule', item.pricing_rule)
-				item.margin_type = pricing_rule.margin_type
-				item.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
+
+				if pricing_rule.margin_type == 'Amount' and pricing_rule.currency == self.doc.currency:
+					item.margin_type = pricing_rule.margin_type
+					item.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
+				elif pricing_rule.margin_type == 'Percentage':
+					item.margin_type = pricing_rule.margin_type
+					item.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
+				else:
+					item.margin_type = None
+					item.margin_rate_or_amount = 0.0
 
 			if item.margin_type and item.margin_rate_or_amount:
 				margin_value = item.margin_rate_or_amount if item.margin_type == 'Amount' else flt(item.price_list_rate) * flt(item.margin_rate_or_amount) / 100
diff --git a/erpnext/docs/user/manual/en/accounts/pricing-rule.md b/erpnext/docs/user/manual/en/accounts/pricing-rule.md
index 6048fea..ad68b0f 100644
--- a/erpnext/docs/user/manual/en/accounts/pricing-rule.md
+++ b/erpnext/docs/user/manual/en/accounts/pricing-rule.md
@@ -21,7 +21,7 @@
 
 ### 1. Applicability Section:
 
-In this section, conditions are set for the application of Pricing Rule. When transaction meets condition as specified in this section, Price or Discount as specified in the Pricing Rule will be applied. You can set condition on following values.
+In this section, conditions are set for the application of Pricing Rule. When transaction meets condition as specified in this section, Rate or Discount as specified in the Pricing Rule will be applied. You can set condition on following values.
 
 ####1.1 Applicable On:
 
@@ -43,15 +43,16 @@
 
 ###2. Application:
 
-Using Price List Rule, you can ultimately define price or %discount to be applied on an item.
+Using Price List Rule, you can ultimately define rate or %discount to be applied on an item.
 
 <img alt="Applicable" class="screenshot" src="{{docs_base_url}}/assets/img/articles/pricing-rule-application.png">
 
-####2.1 Price
+####2.1 Rate
 
-Price or Discount specified in the Pricing Rule will be applied only if above applicability rules are matched with values in the transaction. Price mentioned in Pricing Rule will be given priority over item's Price List rate.
+Rate or Discount specified in the Pricing Rule will be applied only if above applicability rules are matched with values in the transaction. Rate mentioned in Pricing Rule will be given priority over item's Price List rate.
 
-<img alt="Applicable Price" class="screenshot" src="{{docs_base_url}}/assets/img/articles/pricing-rule-price.png">
+<img alt="Applicable Rate" class="screenshot" src="/docs/assets/img/articles/pricing-rule-price.png">
+>>>>>>> Renamed price to rate in pricing rule
 
 #### 2.2 Discount Percentage
 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 8f9a392..243158c 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -494,6 +494,8 @@
 erpnext.patches.v10_0.update_sales_order_link_to_purchase_order
 erpnext.patches.v10_0.added_extra_gst_custom_field_in_gstr2 #2018-02-13
 erpnext.patches.v10_0.item_barcode_childtable_migrate
+erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
+erpnext.patches.v10_0.set_currency_in_pricing_rule
 erpnext.patches.v10_0.workflow_expense_claim
 erpnext.patches.v10_0.set_b2c_limit
 erpnext.patches.v10_0.update_translatable_fields
diff --git a/erpnext/patches/v10_0/rename_price_to_rate_in_pricing_rule.py b/erpnext/patches/v10_0/rename_price_to_rate_in_pricing_rule.py
new file mode 100644
index 0000000..48fa222
--- /dev/null
+++ b/erpnext/patches/v10_0/rename_price_to_rate_in_pricing_rule.py
@@ -0,0 +1,14 @@
+from __future__ import unicode_literals
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+	frappe.reload_doc("accounts", "doctype", "pricing_rule")
+
+	try:
+		rename_field("Pricing Rule", "price_or_discount", "rate_or_discount")
+		rename_field("Pricing Rule", "price", "rate")
+
+	except Exception as e:
+		if e.args[0]!=1054:
+			raise
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_currency_in_pricing_rule.py b/erpnext/patches/v10_0/set_currency_in_pricing_rule.py
new file mode 100644
index 0000000..c01b2af
--- /dev/null
+++ b/erpnext/patches/v10_0/set_currency_in_pricing_rule.py
@@ -0,0 +1,12 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.reload_doctype("Pricing Rule")
+
+	currency = frappe.db.get_default("currency")
+	for doc in frappe.get_all('Pricing Rule', fields = ["company", "name"]):
+		if doc.company:
+			currency = frappe.db.get_value("Company", doc.company, "default_currency")
+
+		frappe.db.sql("""update `tabPricing Rule` set currency = %s where name = %s""",(currency, doc.name))
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index dfec178..37885f3 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -2,7 +2,7 @@
 erpnext/accounts/doctype/account/tests/test_account.js
 erpnext/accounts/doctype/account/tests/test_make_tax_account.js
 erpnext/accounts/doctype/account/tests/test_account_with_number.js
-erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js
+erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule.js
 erpnext/accounts/doctype/sales_taxes_and_charges_template/test_sales_taxes_and_charges_template.js
 erpnext/accounts/doctype/purchase_taxes_and_charges_template/test_purchase_taxes_and_charges_template.js
 erpnext/accounts/doctype/shipping_rule/test_shipping_rule.js
@@ -106,3 +106,5 @@
 erpnext/accounts/doctype/sales_invoice/tests/test_sales_invoice_with_margin.js
 erpnext/hr/doctype/payroll_entry/test_set_salary_components.js
 erpnext/hr/doctype/payroll_entry/test_payroll_entry.js
+erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_same_currency.js
+erpnext/accounts/doctype/pricing_rule/tests/test_pricing_rule_with_different_currency.js
\ No newline at end of file