Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index 1ef7334..aa21d5d 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -120,6 +120,7 @@
 		}
 		
 		// TODO toggle display of fields
+		cur_frm.cscript.hide_fields(this.frm.doc);
 	},
 	
 	debit_to: function() {
@@ -162,7 +163,7 @@
 
 // Hide Fields
 // ------------
-cur_frm.cscript.hide_fields = function(doc, cdt, cdn) {
+cur_frm.cscript.hide_fields = function(doc) {
 	par_flds = ['project_name', 'due_date', 'is_opening', 'conversion_rate',
 	'source', 'total_advance', 'gross_profit',
 	'gross_profit_percent', 'get_advances_received',
@@ -176,18 +177,21 @@
 	if(cint(doc.is_pos) == 1) {
 		hide_field(par_flds);
 		unhide_field('payments_section');
-		for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], false);
+		cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal, false);
 	} else {
 		hide_field('payments_section');
 		unhide_field(par_flds);
-		for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], true);
+		cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal, true);
 	}
-	for(f in item_flds_pos) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos[f], (cint(doc.update_stock)==1?true:false));
+	
+	cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos, (cint(doc.update_stock)==1?true:false));
 
 	// India related fields
 	var cp = wn.control_panel;
 	if (cp.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']);
 	else hide_field(['c_form_applicable', 'c_form_no']);
+	
+	cur_frm.refresh_fields();
 }
 
 
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index 04263c3..148ba1c 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -90,7 +90,6 @@
 					freeze: true,
 					callback: function(r) {
 						if(!r.exc) {
-							me.frm.refresh_fields();
 							if(me.frm.doc.price_list_name !== price_list_name) me.price_list_name();
 						}
 					}
@@ -485,12 +484,12 @@
 		
 		// toggle columns
 		var item_grid = this.frm.fields_dict[this.fname].grid;
-		var show = this.frm.doc.currency != company_currency;
-		$.each(["purchase_rate", "purchase_ref_rate", "amount", "rate"], function(i, fname) {
-			if(wn.meta.get_docfield(item_grid.doctype, fname))
-				item_grid.set_column_disp(fname, show);
+		var fieldnames = $.map(["purchase_rate", "purchase_ref_rate", "amount", "rate"], function(fname) {
+			return wn.meta.get_docfield(item_grid.doctype, fname, me.frm.docname) ? fname : null;
 		});
 		
+		item_grid.set_column_disp(fieldnames, this.frm.doc.currency != company_currency);
+		
 		// set labels
 		var $wrapper = $(this.frm.wrapper);
 		$.each(field_label_map, function(fname, label) {
diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py
index 4e850ff..56ddfd1 100644
--- a/controllers/accounts_controller.py
+++ b/controllers/accounts_controller.py
@@ -33,6 +33,8 @@
 			self.validate_value("grand_total", ">=", 0)
 			self.set_total_in_words()
 			
+		self.validate_for_freezed_account()
+			
 	def set_missing_values(self, for_validate=False):
 		for fieldname in ["posting_date", "transaction_date"]:
 			if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
@@ -51,6 +53,18 @@
 			if date_field and self.doc.fields[date_field]:
 				validate_fiscal_year(self.doc.fields[date_field], self.doc.fiscal_year, 
 					label=self.meta.get_label(date_field))
+					
+	def validate_for_freezed_account(self):
+		for fld in ["customer", "supplier"]:
+			if self.meta.get_field(fld):
+				accounts = webnotes.conn.get_values("Account", {"master_type": fld.upper(), 
+					"master_name": self.doc.fields[fld], "company": self.doc.company}, 
+					"freeze_account", as_dict=1)
+				
+				if accounts:
+					if not filter(lambda x: cstr(x.freeze_account) in ["", "No"], accounts):
+						msgprint(_("Account for this ") + fld + _(" has been freezed. ") + 
+							self.doc.doctype + _(" can not be made."), raise_exception=1)
 			
 	def set_price_list_currency(self, buying_or_selling):
 		# TODO - change this, since price list now has only one currency allowed
diff --git a/public/js/feature_setup.js b/public/js/feature_setup.js
index abd3370..add4bfd 100644
--- a/public/js/feature_setup.js
+++ b/public/js/feature_setup.js
@@ -209,8 +209,7 @@
 					if(fort=='fields') {
 						hide_field(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort]);
 					} else if(cur_frm.fields_dict[fort]) {
-						for(grid_field in pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort])
-							cur_frm.fields_dict[fort].grid.set_column_disp(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort][grid_field], false);
+						cur_frm.fields_dict[fort].grid.set_column_disp(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort], false);						
 					} else {
 						msgprint('Grid "'+fort+'" does not exists');
 					}
diff --git a/selling/doctype/installation_note/installation_note.js b/selling/doctype/installation_note/installation_note.js
index dce0a31..5ad698a 100644
--- a/selling/doctype/installation_note/installation_note.js
+++ b/selling/doctype/installation_note/installation_note.js
@@ -81,9 +81,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});
 			
 			// TODO shift this to depends_on
@@ -105,9 +102,6 @@
 				},
 				method: "get_customer_address",
 				freeze: true,
-				callback: function(r) {
-					me.frm.refresh_fields();
-				}
 			});
 		}
 	},
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index 7c647c3..0ac22a1 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -89,9 +89,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});
 			
 			// TODO shift this to depends_on
@@ -208,7 +205,6 @@
 					return;
 				}
 				dialog.hide();
-				cur_frm.refresh();
 			},
 			btn: this
 		})
diff --git a/selling/doctype/sales_common/sales_common.js b/selling/doctype/sales_common/sales_common.js
index 9a13c4f..246d4a1 100644
--- a/selling/doctype/sales_common/sales_common.js
+++ b/selling/doctype/sales_common/sales_common.js
@@ -142,7 +142,6 @@
 					freeze: true,
 					callback: function(r) {
 						if(!r.exc) {
-							me.frm.refresh_fields();
 							(me.frm.doc.price_list_name !== price_list_name) ? 
 								me.price_list_name() :
 								me.price_list_currency();
diff --git a/setup/doctype/setup_control/setup_control.py b/setup/doctype/setup_control/setup_control.py
index b029da3..5a18404 100644
--- a/setup/doctype/setup_control/setup_control.py
+++ b/setup/doctype/setup_control/setup_control.py
@@ -256,7 +256,7 @@
 		if name and not webnotes.conn.exists("Territory", name):
 			webnotes.bean({
 				"doctype": "Territory",
-				"territory_name": name,
+				"territory_name": name.replace("'", ""),
 				"parent_territory": root_territory,
 				"is_group": "No"
 			}).insert()
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index 3dac29d..de6e9dc 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -46,8 +46,7 @@
 	
 		// unhide expense_account and cost_center is auto_inventory_accounting enabled
 		var aii_enabled = cint(sys_defaults.auto_inventory_accounting)
-		cur_frm.fields_dict[cur_frm.cscript.fname].grid.set_column_disp("expense_account", aii_enabled);
-		cur_frm.fields_dict[cur_frm.cscript.fname].grid.set_column_disp("cost_center", aii_enabled);
+		cur_frm.fields_dict[cur_frm.cscript.fname].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled);
 
 		if (this.frm.doc.docstatus===0) {
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
diff --git a/support/doctype/customer_issue/customer_issue.js b/support/doctype/customer_issue/customer_issue.js
index 96662b9..3620c7e 100644
--- a/support/doctype/customer_issue/customer_issue.js
+++ b/support/doctype/customer_issue/customer_issue.js
@@ -29,9 +29,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});
 			
 			// TODO shift this to depends_on
diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.js b/support/doctype/maintenance_schedule/maintenance_schedule.js
index d847269..f8652d7 100644
--- a/support/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/support/doctype/maintenance_schedule/maintenance_schedule.js
@@ -47,9 +47,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});
 		}		
 	}, 
diff --git a/support/doctype/maintenance_visit/maintenance_visit.js b/support/doctype/maintenance_visit/maintenance_visit.js
index f3faf3f..9f5fc5d 100644
--- a/support/doctype/maintenance_visit/maintenance_visit.js
+++ b/support/doctype/maintenance_visit/maintenance_visit.js
@@ -65,9 +65,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});
 			
 			// TODO shift this to depends_on
diff --git a/support/doctype/support_ticket/support_ticket.js b/support/doctype/support_ticket/support_ticket.js
index bd7e6cc..d8cc798 100644
--- a/support/doctype/support_ticket/support_ticket.js
+++ b/support/doctype/support_ticket/support_ticket.js
@@ -26,9 +26,6 @@
 			this.frm.call({
 				doc: this.frm.doc,
 				method: "set_customer_defaults",
-				callback: function(r) {
-					if(!r.exc) me.frm.refresh_fields();
-				}
 			});			
 		}
 	}