Pricing Rule
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index e12a30e..b336637 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -194,6 +194,7 @@
 			}
 
 			this.frm.script_manager.trigger("currency");
+			this.apply_pricing_rule()
 		}
 	},
 
@@ -225,7 +226,9 @@
 			this.frm.doc.plc_conversion_rate !== this.frm.doc.conversion_rate) {
 				this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
 		}
-		if(flt(this.frm.doc.conversion_rate)>0.0) this.calculate_taxes_and_totals();
+		if(flt(this.frm.doc.conversion_rate)>0.0) {
+			this.apply_pricing_rule();
+		}
 	},
 
 	get_price_list_currency: function(buying_or_selling) {
@@ -278,12 +281,12 @@
 		}
 		if(this.frm.doc.price_list_currency === this.frm.doc.currency) {
 			this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
-			this.calculate_taxes_and_totals();
+			this.apply_pricing_rule();
 		}
 	},
 
 	qty: function(doc, cdt, cdn) {
-		this.calculate_taxes_and_totals();
+		this.apply_pricing_rule(frappe.get_doc(cdt, cdn));
 	},
 
 	// tax rate
@@ -326,6 +329,52 @@
 		this.calculate_taxes_and_totals();
 	},
 
+	apply_pricing_rule: function(item) {
+		var me = this;
+
+		var _apply_pricing_rule = function(item) {
+			return me.frm.call({
+				method: "erpnext.stock.get_item_details.apply_pricing_rule",
+				child: item,
+				args: {
+					args: {
+						item_code: item.item_code,
+						item_group: item.item_group,
+						brand: item.brand,
+						qty: item.qty,
+						customer: me.frm.doc.customer,
+						customer_group: me.frm.doc.customer_group,
+						territory: me.frm.doc.territory,
+						supplier: me.frm.doc.supplier,
+						supplier_type: me.frm.doc.supplier_type,
+						currency: me.frm.doc.currency,
+						conversion_rate: me.frm.doc.conversion_rate,
+						price_list: me.frm.doc.selling_price_list ||
+							 me.frm.doc.buying_price_list,
+						plc_conversion_rate: me.frm.doc.plc_conversion_rate,
+						company: me.frm.doc.company,
+						transaction_date: me.frm.doc.transaction_date || me.frm.doc.posting_date,
+						campaign: me.frm.doc.campaign,
+						sales_partner: me.frm.doc.sales_partner
+					}
+				},
+				callback: function(r) {
+					if(!r.exc) {
+						me.frm.script_manager.trigger("price_list_rate", item.doctype, item.name);
+					}
+				}
+			});
+		}
+
+
+		if(item) _apply_pricing_rule(item);
+		else {
+			$.each(this.get_item_doclist(), function(n, item) {
+				_apply_pricing_rule(item);
+			});
+		}
+	},
+
 	included_in_print_rate: function(doc, cdt, cdn) {
 		var tax = frappe.get_doc(cdt, cdn);
 		try {
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 31abbb3..9da0353 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -2,7 +2,7 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.utils");
-erpnext.utils.get_party_details = function(frm, method, args) {
+erpnext.utils.get_party_details = function(frm, method, args, callback) {
 	if(!method) {
 		method = "erpnext.accounts.party.get_party_details";
 	}
@@ -33,6 +33,7 @@
 				frm.updating_party_details = true;
 				frm.set_value(r.message);
 				frm.updating_party_details = false;
+				if(callback) callback()
 			}
 		}
 	});