Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index b728475..a146e93 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -174,16 +174,20 @@
 	def get_customer_account(self):
 		"""Get Account Head to which amount needs to be Debited based on Customer"""
 		if not self.doc.company:
-			msgprint("Please select company first and re-select the customer after doing so", raise_exception=1)
+			msgprint("Please select company first and re-select the customer after doing so",
+			 	raise_exception=1)
+		if self.doc.customer:
+			acc_head = webnotes.conn.sql("""select name from `tabAccount` 
+				where (name = %s or (master_name = %s and master_type = 'customer')) 
+				and docstatus != 2""", 
+				(cstr(self.doc.customer) + " - " + self.get_company_abbr(), self.doc.customer))
 			
-		acc_head = webnotes.conn.sql("""select name from `tabAccount` 
-			where (name = %s or (master_name = %s and master_type = 'customer')) and docstatus != 2""", 
-			(cstr(self.doc.customer) + " - " + self.get_company_abbr(),self.doc.customer))
-			
-		if acc_head and acc_head[0][0]:
-			return acc_head[0][0]
-		else:
-			msgprint("%s does not have an Account Head in %s. You must first create it from the Customer Master" % (self.doc.customer, self.doc.company))
+			if acc_head and acc_head[0][0]:
+				return acc_head[0][0]
+			else:
+				msgprint("%s does not have an Account Head in %s. \
+					You must first create it from the Customer Master" % 
+					(self.doc.customer, self.doc.company))
 
 	def get_debit_to(self):
 		acc_head = self.get_customer_account()
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index 7092483..cfc546c 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -207,6 +207,7 @@
 				if(r.message == 'true'){
 					$i('update_enquiry_dialog_response').innerHTML = 'Done';
 					e_lost_dialog.hide();
+					cur_frm.refresh();
 				}
 			}
 			if(arg) {
diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js
index 40e1518..1b0a774 100644
--- a/selling/doctype/quotation/quotation.js
+++ b/selling/doctype/quotation/quotation.js
@@ -250,6 +250,7 @@
 				if(r.message == 'true'){
 					$i('update_quotation_dialog_response').innerHTML = 'Done';
 					qtn_lost_dialog.hide();
+					cur_frm.refresh();
 				}
 			}
 			if(arg) $c_obj(make_doclist(cur_frm.doc.doctype, cur_frm.doc.name),'declare_order_lost',arg,call_back);
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index f232a37..17c8d09 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -147,7 +147,7 @@
 cur_frm.cscript.pull_quotation_details = function(doc,dt,dn) {
 	var callback = function(r,rt){
 		var doc = locals[cur_frm.doctype][cur_frm.docname];					
-		if(r.message){							
+		if(!r.exc){							
 			doc.quotation_no = r.message;			
 			if(doc.quotation_no) {					
 				unhide_field(['quotation_date', 'customer_address', 'contact_person', 'territory', 'customer_group']);
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index 0a73cac..9d23565 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -194,11 +194,11 @@
 	# Validations of Details Table
 	# -----------------------------
 	def validate_for_items(self):
-		check_list,flag = [],0
+		check_list, flag = [], 0
 		chk_dupl_itm = []
 		# Sales Order Items Validations
 		for d in getlist(self.doclist, 'sales_order_details'):
-			if cstr(self.doc.quotation_no) == cstr(d.prevdoc_docname):
+			if self.doc.quotation_no and cstr(self.doc.quotation_no) == cstr(d.prevdoc_docname):
 				flag = 1
 			if d.prevdoc_docname:
 				if self.doc.quotation_date and getdate(self.doc.quotation_date) > getdate(self.doc.transaction_date):
@@ -229,14 +229,13 @@
 
 			# used for production plan
 			d.transaction_date = self.doc.transaction_date
-
-			# gets total projected qty of item in warehouse selected (this case arises when warehouse is selected b4 item)
-			tot_avail_qty = sql("select projected_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.reserved_warehouse))
+			
+			tot_avail_qty = sql("select projected_qty from `tabBin` \
+				where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.reserved_warehouse))
 			d.projected_qty = tot_avail_qty and flt(tot_avail_qty[0][0]) or 0
 		
-		if flag == 0:
-			msgprint("There are no items of the quotation selected.")
-			raise Exception
+		if getlist(self.doclist, 'sales_order_details') and self.doc.quotation_no and flag == 0:
+			msgprint("There are no items of the quotation selected", raise_exception=1)
 
 	# validate sales/ maintenance quotation against order type
 	#------------------------------------------------------------------
diff --git a/setup/doctype/contact_control/contact_control.js b/setup/doctype/contact_control/contact_control.js
index fe3c041..fd08062 100755
--- a/setup/doctype/contact_control/contact_control.js
+++ b/setup/doctype/contact_control/contact_control.js
@@ -156,7 +156,7 @@
 	$wrapper.append(repl("\
 		<h4><a class='link_type'>%(fullname)s</a>%(primary)s</h4>\
 		<div class='description'>\
-			%(description)s\
+			<p>%(description)s</p>\
 			<p><a class='delete link_type'>delete this %(doctype)s</a></p>\
 		</div>", data));
 	
diff --git a/utilities/doctype/sms_control/sms_control.js b/utilities/doctype/sms_control/sms_control.js
index 9cc152f..4af96b3 100644
--- a/utilities/doctype/sms_control/sms_control.js
+++ b/utilities/doctype/sms_control/sms_control.js
@@ -31,7 +31,6 @@
 	this.show = function(contact, key, value, mobile_nos, message) {
 		this.message = message;
 		if (mobile_nos) {
-
 			me.number = mobile_nos;
 			me.show_dialog();
 		} else if (contact){
@@ -59,7 +58,6 @@
 				{fieldname:'send', fieldtype:'Button', label:'Send'}
 			]
 		})
-		d.make();
 		d.fields_dict.send.input.onclick = function() {
 			var btn = d.fields_dict.send.input;
 			var v = me.dialog.get_values();