Merge branch 'shf_rename' of github.com:webnotes/erpnext into shf_rename
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 51c123c..445e93b 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -183,7 +183,6 @@
 		self.validate_reference_value()
 		self.validate_for_items()
 		sales_com_obj.make_packing_list(self,'delivery_note_details')
-		get_obj('Stock Ledger').validate_serial_no(self, 'packing_details')
 		sales_com_obj.validate_max_discount(self, 'delivery_note_details')						 #verify whether rate is not greater than max discount
 		sales_com_obj.get_allocated_sum(self)	# this is to verify that the allocated % of sales persons is 100%
 		sales_com_obj.check_conversion_rate(self)
@@ -325,6 +324,7 @@
 		# Check for Approving Authority
 		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
 		sl_obj = get_obj("Stock Ledger")
+		sl_obj.validate_serial_no(self, 'packing_details')
 		sl_obj.validate_serial_no_warehouse(self, 'packing_details')
 		sl_obj.update_serial_record(self, 'packing_details', is_submit = 1, is_incoming = 0)
 		get_obj("Sales Common").update_prevdoc_detail(1,self)
diff --git a/erpnext/stock/doctype/sales_bom/sales_bom.js b/erpnext/stock/doctype/sales_bom/sales_bom.js
index f7f6e4d..7d857a2 100644
--- a/erpnext/stock/doctype/sales_bom/sales_bom.js
+++ b/erpnext/stock/doctype/sales_bom/sales_bom.js
@@ -22,7 +22,9 @@
 }
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-   
+	if(!doc.__islocal) {
+		hide_field('new_item_code');
+	}
 }
 
 /* Get Item Code */
diff --git a/erpnext/stock/doctype/sales_bom/sales_bom.py b/erpnext/stock/doctype/sales_bom/sales_bom.py
index f292164..7dea692 100644
--- a/erpnext/stock/doctype/sales_bom/sales_bom.py
+++ b/erpnext/stock/doctype/sales_bom/sales_bom.py
@@ -38,8 +38,7 @@
 		self.doc, self.doclist = d,dl
 
 	def autoname(self):
-		self.doc.name = make_autoname(self.doc.new_item_code)
-
+		self.doc.name = self.doc.new_item_code
 	
 	# Get Ref Rates
 	# --------------
@@ -67,9 +66,9 @@
 				msgprint("Sales Bom Item " + d.item_code +" cannot be child item.")
 				raise Exception
 			# Check if is_main_item is modified once saved
-			if not self.doc.fields.get('__islocal') and d.is_main_item == "Yes" and cstr(d.item_code) != cstr(self.doc.new_item_code)[:-3] :
-				msgprint("Modifying the main item is not allowed.")
-				raise Exception
+			#if not self.doc.fields.get('__islocal') and d.is_main_item == "Yes" and cstr(d.item_code) != cstr(self.doc.new_item_code)[:-3] :
+			#	msgprint("Modifying the main item is not allowed.")
+			#	raise Exception
 		if len(is_main_item) > 1:
 			msgprint('Main item cannot be more than one.')
 			raise Exception , " Validation Error."
diff --git a/erpnext/stock/doctype/sales_bom/sales_bom.txt b/erpnext/stock/doctype/sales_bom/sales_bom.txt
index dfc2a65..29fcd31 100644
--- a/erpnext/stock/doctype/sales_bom/sales_bom.txt
+++ b/erpnext/stock/doctype/sales_bom/sales_bom.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-26 13:04:56',
+		'creation': '2012-04-30 12:08:49',
 		'docstatus': 0,
-		'modified': '2012-04-27 11:00:18',
+		'modified': '2012-05-04 09:53:08',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -15,6 +15,7 @@
 		'_last_update': u'1322549701',
 		'allow_trash': 1,
 		'colour': u'White:FFF',
+		'description': u'Aggregate item and accessories to form a Sales Item. There is no inventory of the new item but of the sub-components.',
 		'doctype': 'DocType',
 		'document_type': u'Master',
 		'is_submittable': 1,
@@ -143,6 +144,8 @@
 
 	# DocField
 	{
+		'colour': u'White:FFF',
+		'description': u'Item code of the new aggregate item.',
 		'doctype': u'DocField',
 		'fieldname': u'new_item_code',
 		'fieldtype': u'Data',
@@ -150,12 +153,12 @@
 		'no_copy': 1,
 		'oldfieldname': u'new_item_code',
 		'oldfieldtype': u'Data',
-		'permlevel': 1,
 		'reqd': 1
 	},
 
 	# DocField
 	{
+		'colour': u'White:FFF',
 		'doctype': u'DocField',
 		'fieldname': u'new_item_name',
 		'fieldtype': u'Data',
@@ -221,7 +224,8 @@
 		'oldfieldname': u'stock_uom',
 		'oldfieldtype': u'Link',
 		'options': u'UOM',
-		'permlevel': 0
+		'permlevel': 0,
+		'reqd': 1
 	},
 
 	# DocField
@@ -280,17 +284,7 @@
 	# DocField
 	{
 		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'find_sales_bom',
-		'fieldtype': u'Button',
-		'label': u'Find Sales BOM',
-		'oldfieldtype': u'Button',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
+		'description': u'List items that form a package. One of the items has to be a "main item".',
 		'doctype': u'DocField',
 		'fieldname': u'item_section',
 		'fieldtype': u'Section Break',
@@ -312,6 +306,19 @@
 
 	# DocField
 	{
+		'colour': u'White:FFF',
+		'description': u'Add a few items and find if there are any Sales BOM created with the same combination to help you identify duplication.',
+		'doctype': u'DocField',
+		'fieldname': u'find_sales_bom',
+		'fieldtype': u'Button',
+		'label': u'Find Sales BOM',
+		'oldfieldtype': u'Button',
+		'permlevel': 0,
+		'trigger': u'Client'
+	},
+
+	# DocField
+	{
 		'doctype': u'DocField',
 		'fieldname': u'trash_reason',
 		'fieldtype': u'Small Text',
diff --git a/js/all-app.js b/js/all-app.js
index a292e463..f2b9a15 100644
--- a/js/all-app.js
+++ b/js/all-app.js
@@ -1719,7 +1719,7 @@
 throw'doctype open conflict'}}else{if(wn.views.formview.DocType&&wn.views.formview.DocType.frm.opendocs[this.doctype]){msgprint("Cannot open instance when its DocType is open")
 throw'doctype open conflict'}}}
 _f.Frm.prototype.setup=function(){var me=this;this.fields=[];this.fields_dict={};this.wrapper=this.parent;this.setup_print_layout();this.saved_wrapper=$a(this.wrapper,'div');this.setup_std_layout();this.setup_client_script();this.setup_done=true;}
-_f.Frm.prototype.setup_print_layout=function(){this.print_wrapper=$a(this.wrapper,'div');this.print_head=$a(this.print_wrapper,'div');this.print_body=$a(this.print_wrapper,'div','layout_wrapper',{padding:'23px',minHeight:'800px'});var t=make_table(this.print_head,1,2,'100%',[],{padding:'6px'});this.view_btn_wrapper=$a($td(t,0,0),'span','green_buttons');this.view_btn=$btn(this.view_btn_wrapper,'View Details',function(){cur_frm.edit_doc()},{marginRight:'4px'},'green');this.print_btn=$btn($td(t,0,0),'Print',function(){cur_frm.print_doc()});$y($td(t,0,1),{textAlign:'right'});this.print_close_btn=$btn($td(t,0,1),'Close',function(){window.back();});}
+_f.Frm.prototype.setup_print_layout=function(){this.print_wrapper=$a(this.wrapper,'div');this.print_head=$a(this.print_wrapper,'div');this.print_body=$a(this.print_wrapper,'div','layout_wrapper',{padding:'23px',minHeight:'800px'});var t=make_table(this.print_head,1,2,'100%',[],{padding:'6px'});this.view_btn_wrapper=$a($td(t,0,0),'span','green_buttons');this.view_btn=$btn(this.view_btn_wrapper,'View Details',function(){cur_frm.edit_doc()},{marginRight:'4px'},'green');this.print_btn=$btn($td(t,0,0),'Print',function(){cur_frm.print_doc()});$y($td(t,0,1),{textAlign:'right'});this.print_close_btn=$btn($td(t,0,1),'Close',function(){window.history.back();});}
 _f.Frm.prototype.onhide=function(){if(_f.cur_grid_cell)_f.cur_grid_cell.grid.cell_deselect();}
 _f.Frm.prototype.setup_std_layout=function(){this.page_layout=new wn.PageLayout({parent:this.wrapper,main_width:this.meta.in_dialog?'100%':'75%',sidebar_width:this.meta.in_dialog?'0%':'25%'})
 this.meta.section_style='Simple';this.layout=new Layout(this.page_layout.body,'100%');if(this.meta.in_dialog){$(this.page_layout.wrapper).removeClass('layout-wrapper-background');$(this.page_layout.main).removeClass('layout-main-section');$(this.page_layout.sidebar_area).toggle(false);}else{this.setup_sidebar();}