Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 2908f6a..3ea0d2f 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1 +1 @@
-__version__ = '4.14.0'
+__version__ = '4.15.0'
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 0688b4c..2902ef8 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -4,7 +4,7 @@
 app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "4.14.0"
+app_version = "4.15.0"
 
 error_report_email = "support@erpnext.com"
 
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index 3a12485..ae4699e 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -402,20 +402,26 @@
 	},
 
 	_set_values_for_item_list: function(children) {
+		var me = this;
 		$.each(children, function(i, d) {
+			var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rule");
 			$.each(d, function(k, v) {
 				if (["doctype", "name"].indexOf(k)===-1) {
 					frappe.model.set_value(d.doctype, d.name, k, v);
 				}
 			});
+			// if pricing rule set as blank from an existing value, apply price_list
+			if(existing_pricing_rule && !d.pricing_rule) {
+				me.apply_price_list(frappe.get_doc(d.doctype, d.name));
+			}
 		});
 	},
 
-	apply_price_list: function() {
+	apply_price_list: function(item) {
 		var me = this;
 		return this.frm.call({
 			method: "erpnext.stock.get_item_details.apply_price_list",
-			args: {	args: this._get_args() },
+			args: {	args: this._get_args(item) },
 			callback: function(r) {
 				if (!r.exc) {
 					me.in_apply_price_list = true;
diff --git a/erpnext/selling/doctype/opportunity/opportunity.js b/erpnext/selling/doctype/opportunity/opportunity.js
index af31d39..59acc10 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.js
+++ b/erpnext/selling/doctype/opportunity/opportunity.js
@@ -35,8 +35,6 @@
 			});
 		}
 
-		if(this.frm.doc.customer && !this.frm.doc.customer_name) cur_frm.cscript.customer(this.frm.doc);
-
 		this.setup_queries();
 	},
 
diff --git a/erpnext/selling/doctype/opportunity/opportunity.json b/erpnext/selling/doctype/opportunity/opportunity.json
index 17291ad..92defc2 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.json
+++ b/erpnext/selling/doctype/opportunity/opportunity.json
@@ -47,6 +47,7 @@
    "in_filter": 1, 
    "in_list_view": 1, 
    "label": "Customer", 
+   "no_copy": 1, 
    "oldfieldname": "customer", 
    "oldfieldtype": "Link", 
    "options": "Customer", 
@@ -416,7 +417,7 @@
  "icon": "icon-info-sign", 
  "idx": 1, 
  "is_submittable": 1, 
- "modified": "2014-12-01 08:46:35.331148", 
+ "modified": "2014-12-19 10:49:20.695720", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Opportunity", 
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.js b/erpnext/setup/page/setup_wizard/setup_wizard.js
index 939eae6..3252e8a 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.js
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.js
@@ -61,14 +61,27 @@
 				fields: [
 					{
 						"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
-						options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
-							"italiano", "nederlands", "polski", "português brasileiro", "português", "српски", "தமிழ்",
-							"ไทย", "中国(简体)", "中國(繁體)"],
-						reqd:1, "default": "english"
+						reqd:1
 					},
 				],
 				help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
 				onload: function(slide) {
+					var me = this;
+
+					if (!this.language_list) {
+						frappe.call({
+							method: "erpnext.setup.page.setup_wizard.setup_wizard.load_languages",
+							callback: function(r) {
+								me.language_list = r.message;
+								slide.get_input("language")
+									.add_options(r.message)
+									.val("english");
+							}
+						})
+					} else {
+						slide.get_input("language").add_options(this.language_list);
+					}
+
 					slide.get_input("language").on("change", function() {
 						var lang = $(this).val() || "english";
 						frappe._messages = {};
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index c5e3f43..6e3c718 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -434,4 +434,6 @@
 	send_translations(m)
 	return lang
 
-
+@frappe.whitelist()
+def load_languages():
+	return sorted(get_lang_dict().keys())
diff --git a/setup.py b/setup.py
index 8c9712e..1a20cfd 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup, find_packages
 import os
 
-version = "4.14.0"
+version = "4.15.0"
 
 with open("requirements.txt", "r") as f:
 	install_requires = f.readlines()