diff --git a/accounts/doctype/account/account.js b/accounts/doctype/account/account.js
index 071bf57..51cacda 100644
--- a/accounts/doctype/account/account.js
+++ b/accounts/doctype/account/account.js
@@ -72,16 +72,6 @@
   else alert("Please select master type");
 }
 
-/*
-// Get customer/supplier address
-// -----------------------------------------
-cur_frm.cscript.master_name = function(doc,cdt,cdn){
-  if(doc.master_name){
-    get_server_fields('get_address','','',doc,cdt,cdn);
-  }
-}
-*/
-
 // parent account get query
 // -----------------------------------------
 cur_frm.fields_dict['parent_account'].get_query = function(doc){
diff --git a/accounts/doctype/account/account.txt b/accounts/doctype/account/account.txt
index b29c617..bf48a24 100644
--- a/accounts/doctype/account/account.txt
+++ b/accounts/doctype/account/account.txt
@@ -455,7 +455,8 @@
 		'description': "Don't delete this field at any cost",
 		'doctype': 'DocField',
 		'fieldname': 'old_parent',
-		'fieldtype': 'Data',
+		'fieldtype': 'Link',
+		'options': 'Account', 
 		'hidden': 1,
 		'idx': 24,
 		'label': 'Old Parent',
@@ -517,4 +518,4 @@
 		'oldfieldtype': 'Small Text',
 		'permlevel': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/accounts/doctype/bank_reconciliation/bank_reconciliation.py b/accounts/doctype/bank_reconciliation/bank_reconciliation.py
index 8434f62..3ba477b 100644
--- a/accounts/doctype/bank_reconciliation/bank_reconciliation.py
+++ b/accounts/doctype/bank_reconciliation/bank_reconciliation.py
@@ -18,32 +18,32 @@
 
 
 class DocType:
-  def __init__(self, d, dl):
-    self.doc, self.doclist = d, dl
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
 
-  def get_details(self):
-    if not (self.doc.bank_account and self.doc.from_date and self.doc.to_date):
-      msgprint("Bank Account, From Date and To Date are Mandatory")
-      return
-  
-    dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
-    
-    self.doc.clear_table(self.doclist, 'entries')
-    self.doc.total_amount = 0.0
+	def get_details(self):
+		if not (self.doc.bank_account and self.doc.from_date and self.doc.to_date):
+			msgprint("Bank Account, From Date and To Date are Mandatory")
+			return
+	
+		dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
+		
+		self.doc.clear_table(self.doclist, 'entries')
+		self.doc.total_amount = 0.0
 
-    for d in dl:
-      nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist)
-      nl.posting_date = str(d[5])
-      nl.voucher_id = str(d[0])
-      nl.cheque_number = str(d[1])
-      nl.cheque_date = str(d[2])
-      nl.debit = flt(d[3])
-      nl.credit = flt(d[4])
-      nl.against_account = d[6]
-      self.doc.total_amount += flt(flt(d[4]) - flt(d[3]))
+		for d in dl:
+			nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist)
+			nl.posting_date = str(d[5])
+			nl.voucher_id = str(d[0])
+			nl.cheque_number = str(d[1])
+			nl.cheque_date = str(d[2])
+			nl.debit = flt(d[3])
+			nl.credit = flt(d[4])
+			nl.against_account = d[6]
+			self.doc.total_amount += flt(flt(d[4]) - flt(d[3]))
 
-  def update_details(self):
-    for d in getlist(self.doclist, 'entries'):
-      if d.clearance_date:
-        sql("update `tabJournal Voucher` set clearance_date = %s where name=%s", (d.clearance_date, d.voucher_id))
-    msgprint("Updated")
\ No newline at end of file
+	def update_details(self):
+		for d in getlist(self.doclist, 'entries'):
+			if d.clearance_date:
+				sql("update `tabJournal Voucher` set clearance_date = %s, modified = %s where name=%s", (d.clearance_date, nowdate(), d.voucher_id))
+		msgprint("Updated")
diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py
index 060225d..521712b 100644
--- a/accounts/doctype/cost_center/cost_center.py
+++ b/accounts/doctype/cost_center/cost_center.py
@@ -31,7 +31,7 @@
     ret = {
       'company_abbr'  : abbr
     }
-    return cstr(ret)
+    return ret
 
   def validate(self): 
     # Cost Center name must be unique
diff --git a/accounts/doctype/form_16a/form_16a.py b/accounts/doctype/form_16a/form_16a.py
index 292c52a..0bcef6b 100644
--- a/accounts/doctype/form_16a/form_16a.py
+++ b/accounts/doctype/form_16a/form_16a.py
@@ -39,7 +39,7 @@
 				'company_address': cstr(comp_det[0][0]),
 				'registration_details': cstr(comp_det[0][1])
 			}	 
-		return cstr(ret)		
+		return ret
     
 	# Get party details
 	#------------------
diff --git a/accounts/doctype/journal_voucher/journal_voucher.js b/accounts/doctype/journal_voucher/journal_voucher.js
index dce570b..f65ee31 100644
--- a/accounts/doctype/journal_voucher/journal_voucher.js
+++ b/accounts/doctype/journal_voucher/journal_voucher.js
@@ -1,9 +1,5 @@
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
   var cp = locals['Control Panel']['Control Panel'];
-  if(doc.__islocal){
-    doc.clearance_date ='';
-    refresh_field('clearance_date');
-  }
   
   if (!doc.voucher_date) doc.voucher_date = dateutil.obj_to_str(new Date());
 
@@ -155,4 +151,4 @@
     report.dt.run();
   }
   loadreport('GL Entry','General Ledger', callback);
-}
\ No newline at end of file
+}
diff --git a/accounts/doctype/journal_voucher/journal_voucher.py b/accounts/doctype/journal_voucher/journal_voucher.py
index 4f5e67a..5942ca1 100644
--- a/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/accounts/doctype/journal_voucher/journal_voucher.py
@@ -38,9 +38,9 @@
     args = eval(args)
     o_s = sql("select outstanding_amount from `tab%s` where name = '%s'" % (args['doctype'],args['docname']))
     if args['doctype'] == 'Payable Voucher':
-      return cstr({'debit': o_s and flt(o_s[0][0]) or 0})
+      return {'debit': o_s and flt(o_s[0][0]) or 0}
     if args['doctype'] == 'Receivable Voucher':
-      return cstr({'credit': o_s and flt(o_s[0][0]) or 0})
+      return {'credit': o_s and flt(o_s[0][0]) or 0}
 
   #--------------------------------------------------------------------------------------------------------
   # Create remarks
diff --git a/accounts/doctype/payable_voucher/payable_voucher.py b/accounts/doctype/payable_voucher/payable_voucher.py
index 0e930e3..e88066a 100644
--- a/accounts/doctype/payable_voucher/payable_voucher.py
+++ b/accounts/doctype/payable_voucher/payable_voucher.py
@@ -48,14 +48,14 @@
 				ret['due_date'] = add_days(cstr(self.doc.posting_date), acc_head and cint(acc_head[0][1]) or 0)
 		elif not acc_head:
 			msgprint("%s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company))
-		return cstr(ret)
+		return ret
 		
 	def get_cust(self):
 		ret = {}
 		if self.doc.credit_to:			
 			ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name')
 			
-		return cstr(ret)	
+		return ret
 
 
 	# Get Default Cost Center and Expense Head from Item Master
@@ -70,7 +70,7 @@
 			if not args['cost_center'] or args['cost_center'] == 'undefined':
 				cost_center = sql("select cost_center from `tabItem` where name = '%s'" % args['item_code'])
 				ret['cost_center'] = cost_center and cost_center[0][0] or ''
-		return cstr(ret)
+		return ret
 		 
 	
 	# Get Items based on PO or PR
@@ -115,7 +115,7 @@
 			'cost_center' : item_det and item_det[0]['cost_center'] or '',
 			'item_tax_rate'			: str(t)
 		}
-		return cstr(ret)
+		return ret
 		
 	# Advance Allocation
 	# -------------------
@@ -139,7 +139,7 @@
 	def get_rate1(self,acc):
 		rate = sql("select tax_rate from `tabAccount` where name='%s'"%(acc))
 		ret={'add_tax_rate' :rate and flt(rate[0][0]) or 0 }
-		return cstr(ret)
+		return ret
 	
 
 # *************************** Server Utility Functions *****************************
diff --git a/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/accounts/doctype/period_closing_voucher/period_closing_voucher.py
index ed42459..c7e5db6 100644
--- a/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -129,7 +129,7 @@
 
     # save
     le.save(1)
-    le_obj.on_update(adv_adj = '')
+    le_obj.on_update(adv_adj = '', cancel = '')
     
 
   # Reposting Balances
diff --git a/accounts/doctype/receivable_voucher/receivable_voucher.py b/accounts/doctype/receivable_voucher/receivable_voucher.py
index cb62a65..185b0b1 100644
--- a/accounts/doctype/receivable_voucher/receivable_voucher.py
+++ b/accounts/doctype/receivable_voucher/receivable_voucher.py
@@ -90,7 +90,7 @@
 	def get_debit_to(self):
 		acc_head = self.get_customer_account()
 		if acc_head:
-			return cstr({ 'debit_to' : acc_head })
+			return { 'debit_to' : acc_head }
 
 
 	# Set Due Date = Posting Date + Credit Days
@@ -515,7 +515,7 @@
 		ret = {
 			 'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
 		}
-		return cstr(ret)
+		return ret
 
 	# Make GL Entries
 	# -------------------------
diff --git a/accounts/doctype/tds_payment/tds_payment.py b/accounts/doctype/tds_payment/tds_payment.py
index c91a269..5079d04 100644
--- a/accounts/doctype/tds_payment/tds_payment.py
+++ b/accounts/doctype/tds_payment/tds_payment.py
@@ -34,7 +34,7 @@
     else:
       ret = { 'registration_details': cstr(comp_det[0][0])}
    
-    return cstr(ret)
+    return ret
 
   # Get default bank and tds account
   #------------------------------------
diff --git a/accounts/search_criteria/budget_variance_report/budget_variance_report.py b/accounts/search_criteria/budget_variance_report/budget_variance_report.py
index 2efca28..182f9e5 100644
--- a/accounts/search_criteria/budget_variance_report/budget_variance_report.py
+++ b/accounts/search_criteria/budget_variance_report/budget_variance_report.py
@@ -51,7 +51,6 @@
   q1 = "select sum(t1.budget_allocated) from `tabBudget Detail` t1, `tab%s` t2, `tabAccount` t3 where "
   cond2 = " t3.is_pl_account = 'Yes' and t3.debit_or_credit = 'Debit' and t3.name = t1.account and t1.docstatus != 2 and "
   if ch:
-                                                                                                                                                                                                     
     qur = q1+cond2+cond1+" and t2.name = '%s'"
     ret_amt = sql(qur%(based_on,fiscal_year,based_on,r[0].strip()))
     
@@ -170,4 +169,4 @@
     r.append(actual)
     # ================ Variance ===================================================
     r.append(r[idx] - r[idx + 1])
-    count = count +1
\ No newline at end of file
+    count = count +1
diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index fe8c8e6..29658cb 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -84,7 +84,7 @@
 			# ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
 			contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where supplier = '%s' and is_supplier = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
 			ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
-			return cstr(ret)
+			return ret
 		else:
 			msgprint("Supplier : %s does not exists" % (name))
 			raise Exception
@@ -142,14 +142,14 @@
 			ret['purchase_rate'] = item and flt(item[0]['last_purchase_rate']) or 0
 			ret['import_rate'] = flt(item and flt(item[0]['last_purchase_rate']) or 0) / flt(obj.doc.fields.has_key('conversion_rate') and flt(obj.doc.conversion_rate) or 1)
 		
-		return cstr(ret)
+		return ret
 
 	# Get Available Qty at Warehouse
 	def get_bin_details( self, arg = ''):
 		arg = eval(arg)
 		bin = sql("select projected_qty from `tabBin` where item_code = %s and warehouse = %s", (arg['item_code'], arg['warehouse']), as_dict=1)
 		ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
-		return str(ret)
+		return ret
 
 	# Get UOM Details
 	def get_uom_details(self, arg = ''):
@@ -163,7 +163,7 @@
 				'purchase_rate'		 : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0
 			}
 		
-		return str(ret)
+		return ret
 
 	# get last purchase rate
 	def get_last_purchase_rate( self, obj):
@@ -522,7 +522,7 @@
 				'rate'	:	rate and (rate[0]['account_type'] == 'Tax' and not arg['charge_type'] == 'Actual') and flt(rate[0]['tax_rate']) or 0
 		}
 		#msgprint(ret)
-		return cstr(ret)
+		return ret
 
 
 				
diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py
index 7d9e1da..1a5d2d7 100644
--- a/buying/doctype/purchase_order/purchase_order.py
+++ b/buying/doctype/purchase_order/purchase_order.py
@@ -38,23 +38,17 @@
     get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'PO Date')
 
 
-  # Client Trigger Functions
-  #----------------------------------------------------------------------------------------------------
-  # Get Supplier Details 
-  #def get_supplier_details(self, name = ''):
-    #return cstr(get_obj(dt='Purchase Common').get_supplier_details(name))
-
   # Get Item Details
   def get_item_details(self, arg =''):
-    return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg))
+    return get_obj(dt='Purchase Common').get_item_details(self,arg)
 
   # Get UOM Details
   def get_uom_details(self, arg = ''):
-    return cstr(get_obj(dt='Purchase Common').get_uom_details(arg))
+    return get_obj(dt='Purchase Common').get_uom_details(arg)
 
   # get available qty at warehouse
   def get_bin_details(self, arg = ''):
-    return cstr(get_obj(dt='Purchase Common').get_bin_details(arg))
+    return get_obj(dt='Purchase Common').get_bin_details(arg)
 
   # Pull Indent
   def get_indent_details(self):
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py
index 0c659bc..ac59430 100755
--- a/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -18,7 +18,7 @@
       'supplier_name'   : cd and cd[0][4] or '',
       'supplier_address': cd and cd[0][5] or ''
     }
-    return cstr(ret)
+    return ret
 
   def get_rfq_details(self):
     self.doc.clear_table(self.doclist, 'supplier_quotation_details')
@@ -28,12 +28,12 @@
   def update_approval_status(self):
     if not self.doc.approval_status or self.doc.approval_status == 'Not Approved':
       set(self.doc, 'approval_status','Approved')
-      return cstr(self.doc.approval_status)
+      return self.doc.approval_status
     elif self.doc.approval_status == 'Approved':
       pc_obj = get_obj('Purchase Common')
       pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.doc.name, detail_doctype = 'PO Detail')
       set(self.doc, 'approval_status', 'Not Approved')
-      return cstr(self.doc.approval_status)
+      return self.doc.approval_status
   
   def validate_item_list(self):
     if not getlist(self.doclist, 'supplier_quotation_details'):
@@ -101,4 +101,4 @@
   # Get Supplier Details
   # --------------------
   def get_supplier_details(self, name = ''):
-    return cstr(get_obj('Purchase Common').get_supplier_details(name))
\ No newline at end of file
+    return get_obj('Purchase Common').get_supplier_details(name)
\ No newline at end of file
diff --git a/home/page/event_updates/event_updates.css b/home/page/event_updates/event_updates.css
index ed50351..a88fed4 100644
--- a/home/page/event_updates/event_updates.css
+++ b/home/page/event_updates/event_updates.css
@@ -14,4 +14,49 @@
 	font-size: 11px;
 	color: #FFF;
 	background-color: RED;
-}
\ No newline at end of file
+}
+
+div.setup-wizard {
+	display: none;
+	margin: 13px 0px;
+	background-color: #FED;
+	padding: 13px;
+}
+
+div.setup-wizard .header {
+	font-size: 12px;
+	font-weight: bold;
+	color: #322;
+	margin-bottom: 7px;
+}
+
+
+div.setup-wizard .percent-outer {
+	height: 17px;
+	background-color: #FFF;
+	border: 2px solid #322;
+}
+
+div.setup-wizard .percent-inner {
+	height: 17px;
+	background-color: GREEN;
+}
+
+div.setup-wizard .suggestion {
+	margin: 7px 0px;
+	color: #322;	
+}
+
+div.setup-wizard .prev-next {
+	height: 13px;
+}
+
+div.setup-wizard .prev-next span {
+	display: none;
+	float: right;
+	margin-left: 13px;
+	color: #877;
+	font-size: 11px;
+}
+
+
diff --git a/home/page/event_updates/event_updates.js b/home/page/event_updates/event_updates.js
index 7ecfbdc..1574f53 100644
--- a/home/page/event_updates/event_updates.js
+++ b/home/page/event_updates/event_updates.js
@@ -24,8 +24,8 @@
 	wrapper.head = $a(wrapper.body, 'div');
 	
 	wrapper.banner_area = $a(wrapper.head, 'div');
-	wrapper.toolbar_area = $a(wrapper.head, 'div');
 
+	wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard')
 
 	wrapper.system_message_area = $a(wrapper.body, 'div', '', 
 		{marginBottom:'16px', padding:'8px', backgroundColor:'#FFD', border:'1px dashed #AA6', display:'none'})
@@ -612,7 +612,6 @@
 	// get values
 	$c_page('home', 'event_updates', 'get_status_details', user,
 		function(r,rt) { 
-			
 			home_status_bar.render(r.message);
 			
 			// system_messages
@@ -622,6 +621,11 @@
 			// render online users
 			pscript.online_users_obj.render(r.message.online_users);
 			pscript.online_users = r.message.online_users;
+			
+			// setup wizard
+			if(r.message.setup_status) {
+				new SetupWizard(r.message.setup_status)
+			}
 		}
 	);	
 }
@@ -633,7 +637,7 @@
 	var txt = $a(wrapper.system_message_area, 'div', '', {lineHeight:'1.6em'});
 	txt.innerHTML = msg;
 	
-	var span = $ln($a(wrapper.system_message_area, 'div'), 'Dismiss', 
+	var span = $ln($a(wrapper.system_message_area, 'div', '', {textAlign:'right'}), 'Dismiss'.bold(), 
 		function(me) { 
 			me.set_working();
 			$c_obj('Home Control', 'dismiss_message', '', function(r,rt) { 
@@ -729,3 +733,53 @@
 	if(!flag)  alert(msg);
 	return flag;
 }
+
+SetupWizard = function(status) { 
+	var me = this;
+	$.extend(this, {
+		make: function(status) {
+			me.status = status;
+			me.wrapper = page_body.pages['Event Updates'].setup_wizard_area;
+			$ds(me.wrapper);
+			me.make_percent(status.percent);
+			me.make_suggestion(status.ret);
+		},
+		make_percent: function(percent) {
+			$a(me.wrapper, 'div', 'header', {}, 'Your setup is '+percent+'% complete');
+			var o = $a(me.wrapper, 'div', 'percent-outer');
+			$a(o, 'div', 'percent-inner', {width:percent + '%'});
+		},
+		make_suggestion: function(ret) {
+			me.suggest_area = $a(me.wrapper, 'div', 'suggestion');
+			if(me.status.ret.length>1) {
+				me.prev_next = $a(me.wrapper, 'div', 'prev-next');
+
+				// next
+				me.next = $a(me.prev_next, 'span', 'link_type', null, 'Next Suggestion',
+					function() { me.show_suggestion(me.cur_sugg+1) });
+
+				// prev
+				me.prev = $a(me.prev_next, 'span', 'link_type', null, 'Previous Suggestion',
+					function() { me.show_suggestion(me.cur_sugg-1) });
+
+			}
+			if(me.status.ret.length) {
+				me.show_suggestion(0);
+			} else {
+				me.suggest_area.innerHTML = 'Congratulations: '.bold() + 'You are now on your track... Good luck';
+			}
+		},
+		show_suggestion: function(idx) {
+			me.cur_sugg = idx;
+			me.suggest_area.innerHTML = 'What you can do next: '.bold() + me.status.ret[idx];
+
+			// show hide prev, next
+			if(me.status.ret.length>1) {
+				$dh(me.prev); $dh(me.next);
+				if(idx>0) $ds(me.prev);
+				if(idx<me.status.ret.length-1) $ds(me.next);			
+			}
+		}
+	})
+	this.make(status); 
+}
diff --git a/home/page/event_updates/event_updates.py b/home/page/event_updates/event_updates.py
index ce73cd1..6e811e7 100644
--- a/home/page/event_updates/event_updates.py
+++ b/home/page/event_updates/event_updates.py
@@ -35,11 +35,51 @@
 	if msg_id and msg_id != webnotes.conn.get_global('system_message_id', webnotes.session['user']):
 		msg = webnotes.conn.get_global('system_message')
 			
-	return {
+	ret = {
 		'user_count': len(online) or 0, 
 		'unread_messages': get_unread_messages(),
 		'online_users': online or [],
 		'system_message':msg,
 		'is_trial': webnotes.conn.get_global('is_trial'),
-		'days_to_expiry': (webnotes.conn.get_global('days_to_expiry') or '0')
+		'days_to_expiry': (webnotes.conn.get_global('days_to_expiry') or '0'),
+		'setup_status': get_setup_status()
 	}
+	return ret
+
+def get_setup_status():
+	"""
+		Returns the setup status of the current account
+	"""
+	if cint(webnotes.conn.get_global('setup_done')):
+		return ''
+		
+	percent = 20
+	ret = []
+	
+	if not webnotes.conn.get_value('Personalize', None, 'header_html'):
+		ret.append('<a href="#!Form/Personalize/Personalize">Upload your company banner</a>')
+	else:
+		percent += 20
+	
+	def check_type(doctype, ret, percent):	
+		if not webnotes.conn.sql("select count(*) from tab%s" % doctype)[0][0]:
+			ret.append('''
+				<a href="#!Form/%(dt)s/New">
+				Create a new %(dt)s
+				</a> or 
+				<a href="#!Import Data/%(dt)s">
+				Import from a spreadsheet</a>''' % {'dt':doctype})
+		else:
+			percent += 20
+		return ret, percent
+
+	ret, percent = check_type('Item', ret, percent)
+	ret, percent = check_type('Customer', ret, percent)
+	ret, percent = check_type('Supplier', ret, percent)
+	
+	if percent==100:
+		webnotes.conn.set_global('setup_done', '1')
+		return ''
+		
+	return {'ret': ret, 'percent': percent}
+		
\ No newline at end of file
diff --git a/hr/doctype/appraisal/appraisal.py b/hr/doctype/appraisal/appraisal.py
index 1731559..e13f9f3 100644
--- a/hr/doctype/appraisal/appraisal.py
+++ b/hr/doctype/appraisal/appraisal.py
@@ -26,7 +26,7 @@
     emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
     emp_nm= emp_nm and emp_nm[0][0] or ''
     self.doc.employee_name = emp_nm
-    return cstr(emp_nm)
+    return emp_nm
   
   def fetch_kra(self):
     if not self.doc.kra_template:
@@ -88,7 +88,7 @@
       if d.score:
         total = total + flt(d.score_earned)
     ret={'total_score':flt(total)}
-    return cstr(ret)
+    return ret
   
   def declare_completed(self):
     ret={}
diff --git a/hr/doctype/attendance/attendance.py b/hr/doctype/attendance/attendance.py
index d64a8e3..3c687ef 100644
--- a/hr/doctype/attendance/attendance.py
+++ b/hr/doctype/attendance/attendance.py
@@ -34,7 +34,7 @@
     set(self.doc, 'employee_name', emp_nm and emp_nm[0][0] or '')
 
     ret = { 'employee_name' : emp_nm and emp_nm[0][0] or ''}
-    return str(ret)
+    return ret
   
   #validation for duplicate record
   def validate_duplicate_record(self):   
diff --git a/hr/doctype/employee/employee.py b/hr/doctype/employee/employee.py
index 54142db..01ff32d 100644
--- a/hr/doctype/employee/employee.py
+++ b/hr/doctype/employee/employee.py
@@ -41,7 +41,7 @@
     if self.doc.date_of_birth:
       dt = getdate(self.doc.date_of_birth) + datetime.timedelta(21915)
       ret = {'date_of_retirement': dt.strftime('%Y-%m-%d')}
-    return str(ret)
+    return ret
 
   # check if salary structure exists
   #========================================================================================================
diff --git a/hr/doctype/leave_allocation/leave_allocation.py b/hr/doctype/leave_allocation/leave_allocation.py
index e11a335..46f7809 100755
--- a/hr/doctype/leave_allocation/leave_allocation.py
+++ b/hr/doctype/leave_allocation/leave_allocation.py
@@ -66,7 +66,7 @@
       'carry_forwarded_leaves'  :  prev_bal,
       'total_leaves_allocated'   :  flt(prev_bal) + flt(self.doc.new_leaves_allocated)
     }
-    return str(ret)
+    return ret
 
 
 # ********************************************** validate *****************************************************
diff --git a/hr/doctype/leave_application/leave_application.js b/hr/doctype/leave_application/leave_application.js
index ba00a31..1eda69f 100755
--- a/hr/doctype/leave_application/leave_application.js
+++ b/hr/doctype/leave_application/leave_application.js
@@ -52,12 +52,9 @@
 // to date
 // --------
 cur_frm.cscript.to_date = function(doc, dt, dn) {
-  if(cint(doc.half_day) == 1 && doc.from_date && doc.from_date != doc.to_date){
+  if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){
     msgprint("To Date should be same as From Date for Half Day leave");
-    return;
-  }
-  if(cint(doc.half_day) == 1){
-    set_multiple(dt,dn,{to_date:doc.from_date});
+    set_multiple(dt,dn,{to_date:doc.from_date});    
   }
   calculate_total_days(doc, dt, dn);
 }
diff --git a/hr/doctype/salary_slip/salary_slip.js b/hr/doctype/salary_slip/salary_slip.js
index 8c76b1e..8f953e6 100644
--- a/hr/doctype/salary_slip/salary_slip.js
+++ b/hr/doctype/salary_slip/salary_slip.js
@@ -29,7 +29,7 @@
 // Calculate total if lwp exists
 // ------------------------------------------------------------------------
 cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
-  doc.payment_days = cint(doc.total_days_in_month) - cint(doc.leave_without_pay);
+  doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
   refresh_field('payment_days');
   calculate_all(doc, dt, dn);
 }
diff --git a/hr/doctype/salary_slip/salary_slip.py b/hr/doctype/salary_slip/salary_slip.py
index 9c94885..af55956 100644
--- a/hr/doctype/salary_slip/salary_slip.py
+++ b/hr/doctype/salary_slip/salary_slip.py
@@ -18,210 +18,219 @@
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-  def __init__(self,doc,doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-    
-    
-  # autoname
-  #=======================================================
-  def autoname(self):
-    self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####') 
+	def __init__(self,doc,doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+		
+		
+	# autoname
+	#=======================================================
+	def autoname(self):
+		self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####') 
 
-  # Get employee details
-  #=======================================================
-  def get_emp_and_leave_details(self):
-    # Get payment days
-    if self.doc.fiscal_year and self.doc.month:
-      self.get_leave_details()
+	# Get employee details
+	#=======================================================
+	def get_emp_and_leave_details(self):
+		# Get payment days
+		if self.doc.fiscal_year and self.doc.month:
+			self.get_leave_details()
 
-    # check sal structure
-    if self.doc.employee:
-      struct = self.check_sal_struct()
-      if struct:
-        self.pull_sal_struct(struct)
+		# check sal structure
+		if self.doc.employee:
+			struct = self.check_sal_struct()
+			if struct:
+				self.pull_sal_struct(struct)
 
 
-  # Check sal structure
-  #=======================================================
-  def check_sal_struct(self):
-    struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee)
-    if not struct:
-      msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee)
-      self.doc.employee = ''
-    return struct and struct[0][0] or ''
+	# Check sal structure
+	#=======================================================
+	def check_sal_struct(self):
+		struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee)
+		if not struct:
+			msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee)
+			self.doc.employee = ''
+		return struct and struct[0][0] or ''
 
-  # Pull struct details
-  #=======================================================
-  def pull_sal_struct(self, struct):
-    self.doc.clear_table(self.doclist, 'earning_details')
-    self.doc.clear_table(self.doclist, 'deduction_details')
+	# Pull struct details
+	#=======================================================
+	def pull_sal_struct(self, struct):
+		self.doc.clear_table(self.doclist, 'earning_details')
+		self.doc.clear_table(self.doclist, 'deduction_details')
 
-    get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]")
+		get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]")
 
-    basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee)
-    self.doc.bank_name = basic_info[0][0]
-    self.doc.bank_account_no = basic_info[0][1]
-    self.doc.esic_no = basic_info[0][2]
-    self.doc.pf_no = basic_info[0][3]
+		basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee)
+		self.doc.bank_name = basic_info[0][0]
+		self.doc.bank_account_no = basic_info[0][1]
+		self.doc.esic_no = basic_info[0][2]
+		self.doc.pf_no = basic_info[0][3]
 
-  # Get leave details
-  #=======================================================
-  def get_leave_details(self):
-    m = self.get_month_details()    
-    lwp = self.calculate_lwp(m)
-    self.doc.total_days_in_month = m[3]
-    self.doc.leave_without_pay = lwp
-    self.doc.payment_days = flt(m[3]) - flt(lwp)
+	# Get leave details
+	#=======================================================
+	def get_leave_details(self):
+		m = self.get_month_details()		
+		lwp = self.calculate_lwp(m)
+		self.doc.total_days_in_month = m[3]
+		self.doc.leave_without_pay = lwp
+		self.doc.payment_days = flt(m[3]) - flt(lwp)
 
-  # Get month details
-  #=======================================================
-  def get_month_details(self):
-    ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0]
-    if ysd:
-      from dateutil.relativedelta import relativedelta
-      import calendar, datetime
-      mnt = int(self.doc.month)
-      diff_mnt = int(mnt)-int(ysd.month)
-      if diff_mnt<0:
-        diff_mnt = 12-int(ysd.month)+int(mnt)
-      msd = ysd + relativedelta(months=diff_mnt) # month start date
-      month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month
-      med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date
-      return msd.year, msd, med, month_days
+	# Get month details
+	#=======================================================
+	def get_month_details(self):
+		ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0]
+		if ysd:
+			from dateutil.relativedelta import relativedelta
+			import calendar, datetime
+			mnt = int(self.doc.month)
+			diff_mnt = int(mnt)-int(ysd.month)
+			if diff_mnt<0:
+				diff_mnt = 12-int(ysd.month)+int(mnt)
+			msd = ysd + relativedelta(months=diff_mnt) # month start date
+			month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month
+			med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date
+			return msd.year, msd, med, month_days
 
-  # Calculate LWP
-  #=======================================================
-  def calculate_lwp(self, m):
-    holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2]))
-    if not holidays:
-      holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year)
-    holidays = [cstr(i[0]) for i in holidays]
-    lwp = 0
-    for d in range(m[3]):
-      dt = add_days(cstr(m[1]), d)
-      if dt not in holidays:
-        if sql("select t1.name from `tabLeave Application` t1, `tabLeave Type` t2 where t2.name = t1.leave_type and ifnull(t2.is_lwp, 0) = 1 and t1.docstatus = 1 and t1.employee = '%s' and '%s' between from_date and to_date"%(self.doc.employee, dt)):
-          lwp += 1
-    return lwp
-        
-  # Check existing
-  #=======================================================
-  def check_existing(self):
-    ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name))
-    if ret_exist:
-      msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee)
-      self.doc.employee = ''
-      raise Exception
+	# Calculate LWP
+	#=======================================================
+	def calculate_lwp(self, m):
+		holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2]))
+		if not holidays:
+			holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year)
+		holidays = [cstr(i[0]) for i in holidays]
+		lwp = 0
+		for d in range(m[3]):
+			dt = add_days(cstr(m[1]), d)
+			if dt not in holidays:
+				leave = sql("""
+					select t1.name, t1.half_day
+					from `tabLeave Application` t1, `tabLeave Type` t2 
+					where t2.name = t1.leave_type 
+					and ifnull(t2.is_lwp, 0) = 1 
+					and t1.docstatus = 1 
+					and t1.employee = '%s' 
+					and '%s' between from_date and to_date
+				"""%(self.doc.employee, dt))
+				if leave:
+					lwp = cint(leave[0][1]) and lwp + 0.5 or lwp + 1
+		return lwp
+					
+	# Check existing
+	#=======================================================
+	def check_existing(self):
+		ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name))
+		if ret_exist:
+			msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee)
+			self.doc.employee = ''
+			raise Exception
 
-  # Validate
-  #=======================================================
-  def validate(self):
-    self.check_existing()
-    dcc = TransactionBase().get_company_currency(self.doc.company)
-    self.doc.total_in_words  = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
-    
-  # ON SUBMIT
-  #=======================================================
-  def on_submit(self):
-    if(self.doc.email_check == 1):      
-      self.send_mail_funct()
+	# Validate
+	#=======================================================
+	def validate(self):
+		self.check_existing()
+		dcc = TransactionBase().get_company_currency(self.doc.company)
+		self.doc.total_in_words	= get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
+		
+	# ON SUBMIT
+	#=======================================================
+	def on_submit(self):
+		if(self.doc.email_check == 1):			
+			self.send_mail_funct()
 
-  # Send mail
-  #=======================================================
-  def send_mail_funct(self):   
-    emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
-    if emailid_ret:
-      receiver = cstr(emailid_ret[0][0]) 
-      subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
-      earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
-      ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
-     
-      earn_table = ''
-      ded_table = ''
-      if earn_ret:
-      
-        earn_table += "<table cellspacing= '5' cellpadding='5' >"
-        
-        for e in earn_ret:
-          if not e[1]:
-            earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
-          else:
-            earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
-        earn_table += '</table>'
-      
-      if ded_ret:
-      
-        ded_table += "<table cellspacing= '5' cellpadding='5' >"
-        
-        for d in ded_ret:
-          if not d[1]:
-            ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
-          else:
-            ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
-        ded_table += '</table>'
-      
-      letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
-      
-      if not letter_head:
-        letter_head = ''
-      
-      msg = ''' %s <br>
-      <table cellspacing= "5" cellpadding="5" >
-      <tr>
-        <td colspan = 4><h4>Salary Slip</h4></td>
-      </tr>
-      <tr>
-        <td colspan = 2><b>Employee Code : %s</b></td>
-        <td colspan = 2><b>Employee Name : %s</b></td>
-      </tr>
-      <tr>
-        <td>Month : %s</td>
-        <td>Year : %s</td>
-        <td colspan = 2>Fiscal Year : %s</td>
-      </tr>
-      <tr>
-        <td>Department : %s</td>
-        <td>Branch : %s</td>
-        <td colspan = 2>Designation : %s</td>
-        
-      </tr>
-      <tr>
-        <td>Grade : %s</td>
-        <td>Bank Account No. : %s</td>
-        <td colspan = 2>Bank Name : %s</td>
-        
-      </tr>
-      <tr>
-        <td>PF No. : %s</td>
-        <td>ESIC No. : %s</td>
-        <td colspan = 2>Arrear Amount : <b>%s</b></td>
-      </tr>
-      <tr>
-        <td>Total days in month : %s</td>
-        <td>Leave Without Pay : %s</td>
-        <td colspan = 2>Payment days : %s</td>
-        
-      </tr>
-      <br><br>
-      <tr>
-        <td colspan = 2><b>Earning</b></td>
-        <td colspan = 2><b>Deduction</b></td>
-      </tr>
-      <tr>
-        <td colspan = 2>%s</td>
-        <td colspan = 2>%s</td>
-      </tr>
-      <br>
-      <tr>
-        <td colspan = 2><b>Gross Pay :</b> %s</td>
-        <td colspan = 2><b>Total Deduction :</b> %s</td>
-      </tr>
-      <tr>
-        <td><b>Net Pay : %s</b></td>
-        <td colspan = 3><b>Net Pay (in words) : %s</b></td>
-      </tr>
-      </table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
-      sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
-    else:
-      msgprint("Company Email ID not found.")
+	# Send mail
+	#=======================================================
+	def send_mail_funct(self):	 
+		emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
+		if emailid_ret:
+			receiver = cstr(emailid_ret[0][0]) 
+			subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
+			earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
+			ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
+		 
+			earn_table = ''
+			ded_table = ''
+			if earn_ret:
+			
+				earn_table += "<table cellspacing= '5' cellpadding='5' >"
+				
+				for e in earn_ret:
+					if not e[1]:
+						earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
+					else:
+						earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
+				earn_table += '</table>'
+			
+			if ded_ret:
+			
+				ded_table += "<table cellspacing= '5' cellpadding='5' >"
+				
+				for d in ded_ret:
+					if not d[1]:
+						ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
+					else:
+						ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
+				ded_table += '</table>'
+			
+			letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
+			
+			if not letter_head:
+				letter_head = ''
+			
+			msg = ''' %s <br>
+			<table cellspacing= "5" cellpadding="5" >
+			<tr>
+				<td colspan = 4><h4>Salary Slip</h4></td>
+			</tr>
+			<tr>
+				<td colspan = 2><b>Employee Code : %s</b></td>
+				<td colspan = 2><b>Employee Name : %s</b></td>
+			</tr>
+			<tr>
+				<td>Month : %s</td>
+				<td>Year : %s</td>
+				<td colspan = 2>Fiscal Year : %s</td>
+			</tr>
+			<tr>
+				<td>Department : %s</td>
+				<td>Branch : %s</td>
+				<td colspan = 2>Designation : %s</td>
+				
+			</tr>
+			<tr>
+				<td>Grade : %s</td>
+				<td>Bank Account No. : %s</td>
+				<td colspan = 2>Bank Name : %s</td>
+				
+			</tr>
+			<tr>
+				<td>PF No. : %s</td>
+				<td>ESIC No. : %s</td>
+				<td colspan = 2>Arrear Amount : <b>%s</b></td>
+			</tr>
+			<tr>
+				<td>Total days in month : %s</td>
+				<td>Leave Without Pay : %s</td>
+				<td colspan = 2>Payment days : %s</td>
+				
+			</tr>
+			<br><br>
+			<tr>
+				<td colspan = 2><b>Earning</b></td>
+				<td colspan = 2><b>Deduction</b></td>
+			</tr>
+			<tr>
+				<td colspan = 2>%s</td>
+				<td colspan = 2>%s</td>
+			</tr>
+			<br>
+			<tr>
+				<td colspan = 2><b>Gross Pay :</b> %s</td>
+				<td colspan = 2><b>Total Deduction :</b> %s</td>
+			</tr>
+			<tr>
+				<td><b>Net Pay : %s</b></td>
+				<td colspan = 3><b>Net Pay (in words) : %s</b></td>
+			</tr>
+			</table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
+			sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
+		else:
+			msgprint("Company Email ID not found.")
diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py
index fd295ea..36a1855 100644
--- a/hr/doctype/salary_structure/salary_structure.py
+++ b/hr/doctype/salary_structure/salary_structure.py
@@ -42,7 +42,7 @@
         'grade'          : cstr(det[0][4]),
         'backup_employee': cstr(self.doc.employee)
       }
-    return cstr(ret)
+    return ret
     
 
   # Set Salary structure field values
@@ -53,7 +53,7 @@
             'bank_ac_no'  : basic_info and basic_info[0][1] or '',
             'esic_no'     : basic_info and basic_info[0][2] or '',
             'pf_no'       : basic_info and basic_info[0][3] or ''}
-    return cstr(ret)
+    return ret
    
   # Make earning and deduction table    
   #---------------------------------------------------------
diff --git a/knowledge_base/page/question_view/question_view.js b/knowledge_base/page/question_view/question_view.js
index 895c6f7..ed11efc 100644
--- a/knowledge_base/page/question_view/question_view.js
+++ b/knowledge_base/page/question_view/question_view.js
@@ -174,4 +174,4 @@
 }
 
 
-$import(knowledge_base.kb_common);
\ No newline at end of file
+$import(knowledge_base/page/kb_common/kb_common.js);
\ No newline at end of file
diff --git a/knowledge_base/page/questions/questions.js b/knowledge_base/page/questions/questions.js
index 993a38e..f268d0b 100644
--- a/knowledge_base/page/questions/questions.js
+++ b/knowledge_base/page/questions/questions.js
@@ -203,4 +203,4 @@
 	this.make()
 }
 
-$import(knowledge_base.kb_common);
\ No newline at end of file
+$import(knowledge_base/page/kb_common/kb_common.js);
\ No newline at end of file
diff --git a/knowledge_base/page/questions/questions.txt b/knowledge_base/page/questions/questions.txt
index d71225a..b45c7dd 100644
--- a/knowledge_base/page/questions/questions.txt
+++ b/knowledge_base/page/questions/questions.txt
@@ -15,7 +15,7 @@
 		'doctype': 'Page',
 		'module': 'Knowledge Base',
 		'name': '__common__',
-		'page_name': 'Questions',
+		'page_name': 'questions',
 		'standard': 'Yes'
 	},
 
diff --git a/patches/old_patches/__init__.py b/patches/old_patches/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/patches/old_patches/__init__.py
diff --git a/patches/old_patches/customer_address.py b/patches/old_patches/customer_address.py
index 6a031c4..41c97b8 100644
--- a/patches/old_patches/customer_address.py
+++ b/patches/old_patches/customer_address.py
@@ -6,7 +6,7 @@
 
 def make_address():
 	from webnotes.modules.module_manager import reload_doc
-	reload_doc('tools','doctype','address')
+	reload_doc('utilities','doctype','address')
 	
 	from webnotes.model.db_schema import updatedb
 	updatedb('Address')
@@ -113,24 +113,24 @@
 
 def reload_doc_files():
 	from webnotes.modules.module_manager import reload_doc	
-	reload_doc('tools', 'doctype', 'contact')
-	reload_doc('crm', 'doctype', 'customer')
-	reload_doc('maintenance', 'doctype', 'customer_issue')
-	reload_doc('material_management', 'doctype', 'delivery_note')
-	reload_doc('crm', 'doctype', 'enquiry')
-	reload_doc('crm', 'doctype', 'installation_note')
-	reload_doc('crm', 'doctype', 'lead')
-	reload_doc('maintenance', 'doctype', 'maintenance_schedule')
-	reload_doc('maintenance', 'doctype', 'maintenance_visit')
-	reload_doc('srm', 'doctype', 'purchase_order')
-	reload_doc('material_management', 'doctype', 'purchase_receipt')
-	reload_doc('crm', 'doctype', 'quotation')
+	reload_doc('utilities', 'doctype', 'contact')
+	reload_doc('selling', 'doctype', 'customer')
+	reload_doc('support', 'doctype', 'customer_issue')
+	reload_doc('stock', 'doctype', 'delivery_note')
+	reload_doc('selling', 'doctype', 'enquiry')
+	reload_doc('selling', 'doctype', 'installation_note')
+	reload_doc('selling', 'doctype', 'lead')
+	reload_doc('support', 'doctype', 'maintenance_schedule')
+	reload_doc('support', 'doctype', 'maintenance_visit')
+	reload_doc('buying', 'doctype', 'purchase_order')
+	reload_doc('stock', 'doctype', 'purchase_receipt')
+	reload_doc('selling', 'doctype', 'quotation')
 	reload_doc('accounts', 'doctype', 'receivable_voucher')
 	reload_doc('accounts', 'doctype', 'payable_voucher')	
-	reload_doc('crm', 'doctype', 'sales_order')
+	reload_doc('selling', 'doctype', 'sales_order')
 	reload_doc('setup', 'doctype', 'sales_partner')
-	reload_doc('material_management', 'doctype', 'serial_no')
-	reload_doc('srm', 'doctype', 'supplier')
+	reload_doc('stock', 'doctype', 'serial_no')
+	reload_doc('buying', 'doctype', 'supplier')
 	
 def reload_mapper_files():
 	from webnotes.modules.module_manager import reload_doc	
diff --git a/patches/old_patches/feed_patch.py b/patches/old_patches/feed_patch.py
index d368aa0..9d8ab0b 100644
--- a/patches/old_patches/feed_patch.py
+++ b/patches/old_patches/feed_patch.py
@@ -98,6 +98,5 @@
 	
 	webnotes.model.delete_doc('DocType','Support Ticket')
 	reload_doc('setup','doctype','support_email_settings')
-	reload_doc('maintenance','doctype','support_ticket')
-	reload_doc('maintenance','doctype','support_ticket_response')
-	
+	reload_doc('support','doctype','support_ticket')
+	reload_doc('support','doctype','support_ticket_response')
diff --git a/patches/patch.py b/patches/patch.py
index 6db274d..4a57219 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -1,7 +1,7 @@
 # REMEMBER to update this
 # ========================
 
-last_patch = 333
+last_patch = 339
 
 #-------------------------------------------
 
@@ -56,8 +56,8 @@
 		pass
 
 	elif patch_no == 40:
-
 		import_from_files(record_list=[['material_management','doctype','item']])
+
 	elif patch_no == 42:
 		acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')")
 		for d in acc:
@@ -125,8 +125,8 @@
 	elif patch_no == 56:
 		sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'")
 	elif patch_no == 57:
+		import_from_files(record_list=[['selling','doctype','sales_order_detail']])
 
-		import_from_files(record_list=[['crm','doctype','sales_order_detail']])
 	elif patch_no == 58:
 		# module def patches
 		sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')")
@@ -160,8 +160,8 @@
 		sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)")
 	elif patch_no == 62:
 		# Import Supplier Quotation
-
 		import_from_files(record_list=[['srm','doctype','supplier_quotation']])
+
 		# Adding Status Filter
 		sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')")
 		# Import Other Charges
@@ -169,8 +169,8 @@
 		import_from_files(record_list=[['setup','doctype','other_charges']])
 	elif patch_no == 63:
 		sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'")
-
 		import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']])
+
 	elif patch_no == 64:
 		sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')")
 		sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')")
@@ -192,7 +192,7 @@
 		sql("delete from `tabModule Def Item` where (display_name = 'Sales Invoice' and parent = 'CRM') or (display_name = 'Purchase Invoice' and parent = 'SRM')")
 	elif patch_no == 68:
 		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['payroll','doctype','employee'],['roles','Role','Employee']])
+		import_from_files(record_list=[['hr','doctype','employee'],['roles','Role','Employee']])
 	elif patch_no == 69:
 		# delete flds from employee master
 		p = get_obj('Patch Util')
@@ -252,7 +252,7 @@
 
 		# import Contact, Employee
 		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['tools','doctype','contact']])
+		import_from_files(record_list=[['utilities','doctype','contact']])
 
 
 		# remove last_contact_date from Lead
@@ -294,7 +294,7 @@
 		#sal structure patch
 		# import
 		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['payroll','doctype','salary_structure'], ['payroll','doctype','earning_detail'],['payroll','doctype','deduction_detail']])
+		import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr','doctype','earning_detail'],['hr','doctype','deduction_detail']])
 	elif patch_no == 76:
 		# property
 		p = get_obj('Patch Util')
@@ -321,7 +321,7 @@
 		# sal slip patch
 		# import
 		from webnotes.modules.import_module import import_from_files
-		import_from_files(record_list=[['payroll','doctype','salary_slip'], ['payroll','doctype','ss_earning_detail'],['payroll','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']])
+		import_from_files(record_list=[['hr','doctype','salary_slip'], ['hr','doctype','ss_earning_detail'],['hr','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']])
 	elif patch_no == 78:
 		p = get_obj('Patch Util')
 		# delete
@@ -351,8 +351,7 @@
 		p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner')
 	elif patch_no == 79:
 		# Import Modules
-
-		import_from_files(record_list=[['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation'],['payroll','doctype','leave_control_panel'],['payroll','doctype','holiday_list'],['payroll','doctype','holiday_list_detail'],['payroll','Module Def','Payroll']])
+		import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']])
 	elif patch_no == 80:
 		# Holiday List
 		sql("update `tabHoliday List Detail` set description = holiday_name")
@@ -405,8 +404,7 @@
 
 	elif patch_no == 81:
 		# Import Modules
-
-		import_from_files(record_list=[['payroll','Module Def','Payroll']])
+		import_from_files(record_list=[['hr','Module Def','HR']])
 	elif patch_no == 82:
 		sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
 		sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
@@ -432,14 +430,13 @@
 		sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'")
 	elif patch_no == 86:
 		# Import Modules
-
-		import_from_files(record_list=[['payroll','doctype','leave_type']])
+		import_from_files(record_list=[['hr','doctype','leave_type']])
 	elif patch_no == 87:
 		sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'")
 	elif patch_no == 88:
 		# Import Modules
+		import_from_files(record_list=[['hr','doctype','leave_allocation']])
 
-		import_from_files(record_list=[['payroll','doctype','leave_allocation']])
 	elif patch_no == 89:
 		sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'")
 		sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'")
@@ -457,10 +454,8 @@
 		sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'")
 		sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'")
 	elif patch_no == 94:
-
-		import_from_files(record_list=[['crm','doctype','sms_center']])
+		import_from_files(record_list=[['selling','doctype','sms_center']])
 	elif patch_no == 95:
-
 		import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
 	elif patch_no == 96:
 		sql("delete from `tabModule Def Item` where doc_type = 'Reports' and display_name = 'Cenvat Credit - Input or Capital Goods' and parent = 'Accounts'")
@@ -490,8 +485,8 @@
 	elif patch_no == 103:
 		sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'")
 	elif patch_no == 104:
+		import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
 
-		import_from_files(record_list=[['payroll','search_criteria','stdsrch_00001'],['payroll','search_criteria','stdsrch_00002'],['payroll','search_criteria','stdsrch_00003'],['payroll','Module Def','Payroll'],['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation']])
 	elif patch_no == 105:
 		# Employee Leave Balance
 		sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')")
@@ -508,11 +503,11 @@
 	elif patch_no == 107:
 		sql("delete from `tabDocField` where fieldname = 'fiscal_year' and parent = 'Employee'")
 	elif patch_no == 108:
-		import_from_files(record_list=[['payroll','search_criteria','srch_std_00013']])
+		import_from_files(record_list=[['hr','search_criteria','srch_std_00013']])
 	elif patch_no == 109:
-		import_from_files(record_list=[['payroll','search_criteria','srch_std_00015']])
+		import_from_files(record_list=[['hr','search_criteria','srch_std_00015']])
 	elif patch_no == 110:
-		import_from_files(record_list=[['payroll','doctype','salary_structure'], ['payroll', 'doctype', 'salary_slip']])
+		import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr', 'doctype', 'salary_slip']])
 	elif patch_no == 111:
 		sql("update tabDocType set search_fields = 'transfer_date, from_warehouse, to_warehouse, purpose, remarks' where name = 'Stock Entry'")
 	elif patch_no == 112:
@@ -582,7 +577,7 @@
 		p.add_permission('Expense Voucher', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1)
 	elif patch_no == 128:
 		from webnotes.modules import import_module
-		import_module.import_from_files(record_list=[['crm','doctype','sales_order'], ['crm','doctype','sales_order_detail'],  ['material_management','doctype','delivery_note'], ['material_management','doctype','delivery_note_detail']])
+		import_module.import_from_files(record_list=[['selling','doctype','sales_order'], ['selling','doctype','sales_order_detail'],  ['stock','doctype','delivery_note'], ['stock','doctype','delivery_note_detail']])
 	elif patch_no == 129:
 		sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail' and to_table = 'RV Detail'")
 		sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Delivery Note-Receivable Voucher' and from_table = 'Delivery Note Detail' and to_table = 'RV Detail'")
@@ -680,11 +675,11 @@
 		sql("delete from tabDocField where label = 'Add / Manage Contacts' and fieldtype = 'Button' and parent = 'Customer'")
 		sql("delete from `tabField Mapper Detail` where parent = 'Sales Order-Delivery Note' and from_field = 'note' and to_field = 'note'")
 	elif patch_no == 152:
-		import_from_files(record_list=[['crm','doctype','sales_order'], ['material_management','doctype','delivery_note'], ['crm','doctype','customer'], ['crm','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']])
+		import_from_files(record_list=[['selling','doctype','sales_order'], ['stock','doctype','delivery_note'], ['selling','doctype','customer'], ['selling','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']])
 	elif patch_no == 153:
 		sql("delete from `tabDocField` where fieldname = 'sales_person' and parent = 'Customer'")
 	elif patch_no == 154:
-		import_from_files(record_list=[['material_management','doctype','serial_no'], ['maintenance','doctype','customer_issue']])
+		import_from_files(record_list=[['stock','doctype','serial_no'], ['support','doctype','customer_issue']])
 	elif patch_no == 155:
 		for d in sql("select name, item_code from `tabSerial No`"):
 			sql("COMMIT")
@@ -707,16 +702,16 @@
 		sql("update tabDocType set autoname = 'field:batch_id' where name = 'Batch'")
 		sql("update tabDocField set no_copy = 1 where parent = 'Batch' and fieldname = 'batch_id'")
 	elif patch_no == 162:
-		import_from_files(record_list=[['crm', 'search_criteria', 'sales_order_pending_items1']])
+		import_from_files(record_list=[['selling', 'search_criteria', 'sales_order_pending_items1']])
 	elif patch_no == 163:
 		sql("delete from `tabModule Def Item` where display_name = 'Sales Orderwise Pending Packing Item Summary' and parent = 'CRM'")
-		import_from_files(record_list=[['crm', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['crm', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['crm', 'search_criteria', 'delivered_items_to_be_install']])
+		import_from_files(record_list=[['selling', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['selling', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['selling', 'search_criteria', 'delivered_items_to_be_install']])
 	elif patch_no == 164:
-		import_from_files(record_list=[['srm', 'search_criteria', 'pending_po_items_to_receive'], ['srm', 'search_criteria', 'pending_po_items_to_bill']])
+		import_from_files(record_list=[['buying', 'search_criteria', 'pending_po_items_to_receive'], ['buying', 'search_criteria', 'pending_po_items_to_bill']])
 	elif patch_no == 165:
 		pass
 	elif patch_no == 166:
-		import_from_files(record_list=[['srm', 'doctype', 'purchase_order']])
+		import_from_files(record_list=[['buying', 'doctype', 'purchase_order']])
 	elif patch_no == 167:
 		if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['ax0000956', 'ax0001338']:
 			sql("delete from tabDocField where parent = 'Purchase Order' and fieldname in ('test_certificate_required', 'estimated_cost', 'transport', 'vendor_reference', 'transportation_required', 'mode_of_dispatch', 'octroi')")
@@ -727,7 +722,7 @@
 	elif patch_no == 170:
 		import_from_files(record_list=[['mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher']])
 	elif patch_no == 171:
-		import_from_files(record_list=[['srm', 'doctype', 'supplier']])
+		import_from_files(record_list=[['buying', 'doctype', 'supplier']])
 	elif patch_no == 172:
 		import webnotes
 		webnotes.conn.set_global("system_message", """<b>Welcome to the new financial year 2011-2012 !!! </b><br><br> So obvious question in your mind is how to start Entries in the New Fiscal Year in ERPNext? What are the changes you have to make in the system? <br>We have made some guidelines regarding the basic steps you should follow. Please click on link <a href='http://erpnext.blogspot.com/2011/03/how-to-start-entries-in-new-fiscal-year.html'>How to start Entries in the New Fiscal Year in ERPNext?</a>""")
@@ -749,7 +744,7 @@
 		sql("delete from `tabDocField` where label = 'Next Steps' and parent = 'Purchase Order'")
 		sql("update tabDocField set options = 'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order' where parent = 'Stock Entry' and fieldname = 'purpose'")
 	elif patch_no == 178:
-		import_from_files(record_list = [['payroll', 'doctype', 'salary_slip']])
+		import_from_files(record_list = [['hr', 'doctype', 'salary_slip']])
 	elif patch_no == 179:
 		from webnotes.utils import get_defaults
 		sl = sql("select name, net_pay from `tabSalary Slip`")
@@ -792,21 +787,21 @@
 	elif patch_no == 187:
 		sql("update tabDocType set autoname = '' where name = 'QA Inspection Report'")
 	elif patch_no == 188:
-		import_from_files(record_list = [['srm', 'doctype', 'qa_inspection_report']])
+		import_from_files(record_list = [['buying', 'doctype', 'qa_inspection_report']])
 	elif patch_no == 189:
 		sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('entries', 'other_charges') and parent = 'Receivable Voucher'")
 	elif patch_no == 190:
 		sql("update tabDocField set permlevel=0 where fieldname = 'fiscal_year' and parent = 'Stock Entry'")
 	elif patch_no == 191:
-		import_from_files(record_list = [['maintenance', 'doctype', 'customer_issue']])
+		import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
 	elif patch_no == 192:
 		sql("delete from `tabModule Def Item` where parent = 'Material Management' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
-		import_from_files(record_list = [['srm', 'Module Def', 'SRM']])
+		import_from_files(record_list = [['buying', 'Module Def', 'SRM']])
 	elif patch_no == 193:
 		sql("update tabDocField set fieldtype='Button', `trigger`='Client' where parent='Letter Head' and fieldname='set_from_image'")
 	elif patch_no == 194:
 		sql("delete from `tabModule Def Item` where parent = 'SRM' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'")
-		import_from_files(record_list = [['material_management', 'Module Def', 'Material Management']])
+		import_from_files(record_list = [['stock', 'Module Def', 'Material Management']])
 	elif patch_no == 195:
 		from webnotes.modules.module_manager import reload_doc
 		reload_doc('setup','doctype','manage_account')
@@ -814,7 +809,7 @@
 		sql("update `tabModule Def` set module_page = null where name = 'Material Management'")
 	elif patch_no == 197:
 		sql("update `tabDocField` set permlevel = 0, in_filter = 1 where fieldname = 'warranty_amc_status' and parent = 'Customer Issue'")
-		import_from_files(record_list = [['maintenance', 'doctype', 'customer_issue']])
+		import_from_files(record_list = [['support', 'doctype', 'customer_issue']])
 	elif patch_no == 198:
 		sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent in ('Quoattion', 'Sales Order', 'Delivery Note', 'Receivable Voucher')")
 		sql("delete from `tabDocField` where label in ('SMS', 'Send SMS') and parent = 'Purchase Order'")
@@ -842,7 +837,7 @@
 	elif patch_no == 205:
 		sql("update `tabDocField` set `default` = '' where fieldname = 'naming_series' and parent = 'Installation Note'")
 	elif patch_no == 206:
-		reload_doc('crm','doctype','installation_note')
+		reload_doc('selling','doctype','installation_note')
 	elif patch_no == 207:
 		import_from_files(record_list = [['setup', 'doctype', 'company']])
 	elif patch_no == 208:
@@ -857,17 +852,17 @@
 		# reload company because of disturbed UI
 		import_from_files(record_list = [['setup', 'doctype', 'company']])
 	elif patch_no == 213:
-		reload_doc('crm','doctype','lead')
+		reload_doc('selling','doctype','lead')
 		reload_doc('setup','doctype','company')
 	elif patch_no == 214:
-		reload_doc('crm','doctype','sales_order')
+		reload_doc('selling','doctype','sales_order')
 	elif patch_no == 215:
 		# patch for item and image in description
 		sql("update tabDocField set width = '300px' where fieldname='description'")
-		reload_doc('material_management', 'doctype', 'item')
+		reload_doc('stock', 'doctype', 'item')
 		sql("delete from __DocTypeCache")
 	elif patch_no == 216:
-		import_from_files(record_list = [['material_management', 'doctype', 'serial_no'], ['material_management', 'doctype', 'stock_ledger_entry']])
+		import_from_files(record_list = [['stock', 'doctype', 'serial_no'], ['stock', 'doctype', 'stock_ledger_entry']])
 	elif patch_no == 217:
 		sql("update tabDocField set options = '\nIn Store\nDelivered\nNot in Use' where fieldname = 'status' and parent = 'Serial No'")
 		sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Delivery Note Detail'")
@@ -901,13 +896,13 @@
 		sql("update tabDocField set hidden = 0 where fieldname in ('pay_to_recd_from', 'total_amount', 'total_amount_in_words') and parent = 'Journal Voucher'")
 		sql("update tabDocField set permlevel = 0 where fieldname = 'pay_to_recd_from' and parent = 'Journal Voucher'")
 	elif patch_no == 224:
-		import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']])
+		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']])
 	elif patch_no == 225:
-		import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail']])
+		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
 	elif patch_no == 226:
-		import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail']])
+		import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']])
 	elif patch_no == 227:
-		reload_doc('material_management', 'doctype', 'item')
+		reload_doc('stock', 'doctype', 'item')
 		if webnotes.conn.get_value('Control Panel', None, 'account_id') != 'axjanak2011':
 			sql("delete from tabDocField where parent = 'Item' and fieldname='alternate_description' limit 1")
 	elif patch_no == 228:
@@ -920,8 +915,8 @@
 	elif patch_no == 229:
 		reload_doc('knowledge_base', 'page', 'question_view')
 	elif patch_no == 230:
-		reload_doc('srm', 'doctype', 'indent')
-		reload_doc('srm', 'doctype', 'indent_detail')
+		reload_doc('buying', 'doctype', 'indent')
+		reload_doc('buying', 'doctype', 'indent_detail')
 		reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
 	elif patch_no == 231:
 		reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent')
@@ -951,12 +946,12 @@
 	elif patch_no == 239:
 		reload_doc('core', 'doctype', 'docfield')
 		reload_doc('core', 'doctype', 'doctype')
+		from patches.old_patches.feed_patch import set_subjects_and_tagfields
 
-		from patches.feed_patch import set_subjects_and_tagfields
 		set_subjects_and_tagfields()
 	elif patch_no == 240:
 		# again for sales order (status)
-		from patches.feed_patch import set_subjects_and_tagfields
+		from patches.old_patches.feed_patch import set_subjects_and_tagfields
 		set_subjects_and_tagfields()
 	elif patch_no == 241:
 		sql("update `tabDocField` set fieldtype = 'Text', options = '', in_filter = '' where fieldname = 'serial_no' and parent = 'Stock Ledger Entry'")
@@ -975,12 +970,12 @@
 		webnotes.conn.set_value('DocType', 'Custom Field', 'module', 'Core')
 		reload_doc('setup', 'doctype', 'company')
 	elif patch_no == 244:
-		reload_doc('material_management', 'search_criteria', 'shortage_to_indent')
+		reload_doc('stock', 'search_criteria', 'shortage_to_indent')
 	elif patch_no == 245:
-		from patches.doctype_permission_patch import set_doctype_permissions
+		from patches.old_patches.doctype_permission_patch import set_doctype_permissions
 		set_doctype_permissions()
 
-		from patches.feed_patch import set_subjects_and_tagfields
+		from patches.old_patches.feed_patch import set_subjects_and_tagfields
 		set_subjects_and_tagfields()
 	elif patch_no == 246:
 		webnotes.conn.set_value('DocType','Stock Entry','tag_fields','purpose')
@@ -992,16 +987,16 @@
 	elif patch_no == 249:
 		sql("update `tabDocPerm` t1, `tabDocType` t2 set t1.role = 'System Manager' where t1.role = 'Administrator' and t1.parent = t2.name and t2.module != 'Core'")
 	elif patch_no == 250:
-		from patches.feed_patch  import support_patch
+		from patches.old_patches.feed_patch  import support_patch
 		support_patch()
 	elif patch_no == 251:
 		from webnotes.model import db_schema
 		db_schema.remove_all_foreign_keys()
-		from patches.customer_address import run_patch
+		from patches.old_patches.customer_address import run_patch
 		run_patch()
 	elif patch_no == 252:
-		reload_doc('maintenance','doctype','support_ticket')
-		reload_doc('maintenance','doctype','support_ticket_response')
+		reload_doc('support','doctype','support_ticket')
+		reload_doc('support','doctype','support_ticket_response')
 	elif patch_no == 253:
 		reload_doc('accounts','doctype','ledger_balance_export')
 		reload_doc('accounts','doctype','ledger_detail')
@@ -1011,21 +1006,21 @@
 		updatedb('Ledger Balance Export')
 		updatedb('Ledger Detail')
 	elif patch_no == 254:
-		reload_doc('settings', 'doctype', 'sms_settings')
-		reload_doc('settings', 'doctype', 'static_parameter_detail')
+		reload_doc('setup', 'doctype', 'sms_settings')
+		reload_doc('setup', 'doctype', 'static_parameter_detail')
 
 		from webnotes.model.db_schema import updatedb
 		updatedb('SMS Settings')
 		updatedb('Static Parameter Detail')
 	elif patch_no == 255:
-		from patches.customer_address import run_old_data_sync_patch
+		from patches.old_patches.customer_address import run_old_data_sync_patch
 		run_old_data_sync_patch()
 	elif patch_no == 256:
 		sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170-test/', '')")
 		sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
 		sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')")
 	elif patch_no == 257:
-		from patches.customer_address import run_old_data_sync_patch
+		from patches.old_patches.customer_address import run_old_data_sync_patch
 		run_old_data_sync_patch()
 	elif patch_no == 258:
 		sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'")
@@ -1045,7 +1040,7 @@
 	elif patch_no == 261:
 		sql("update `tabPrint Format` set html = replace(html, 'customer_address', 'address_display')")
 	elif patch_no == 262:
-		from patches.customer_address import sync_lead_phone
+		from patches.old_patches.customer_address import sync_lead_phone
 		sync_lead_phone()
 	elif patch_no == 263:
 		ol = ['','Open','To Reply','Waiting for Customer','Hold','Closed']
@@ -1074,8 +1069,8 @@
 			except: pass
 	elif patch_no == 271:
 		# tags patch
-		reload_doc('crm','doctype','sales_order')
-		reload_doc('material_management','doctype','delivery_note')
+		reload_doc('selling','doctype','sales_order')
+		reload_doc('stock','doctype','delivery_note')
 		sql("delete from tabDocField where fieldname='per_amt_billed' and parent in ('Sales Order', 'Delivery Note')")
 
 		sql("""update `tabSales Order` set delivery_status = if(ifnull(per_delivered,0) < 0.001, 'Not Delivered',
@@ -1096,7 +1091,7 @@
 		sn = sql("select name from `tabSearch Criteria` where criteria_name = 'Sales Personwise Transaction Summary'")
 		for d in sn:
 			delete_doc('Search Criteria', d[0])
-		reload_doc('crm', 'search_criteria', 'sales_personwise_transaction_summary')
+		reload_doc('selling', 'search_criteria', 'sales_personwise_transaction_summary')
 	elif patch_no == 277:
 		webnotes.model.delete_doc('DocType','HomePage Settings')
 		webnotes.model.delete_doc('DocType','Badge Settings')
@@ -1140,7 +1135,7 @@
 		for d in rec:
 			sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1]))
 	elif patch_no == 284:
-		reload_doc('maintenance', 'doctype', 'support_ticket')
+		reload_doc('support', 'doctype', 'support_ticket')
 		sql("update `tabDocField` set in_filter = 1 where fieldname in ('raised_by', 'subject') and parent = 'Support Ticket'")
 	elif patch_no == 286:
 		reload_doc('accounts', 'search_criteria', 'itemwise_sales_register')
@@ -1161,7 +1156,7 @@
 			md.module_label = 'Home'
 			md.save(1)
 	elif patch_no == 291:
-		reload_doc('tools','doctype','rename_tool')
+		reload_doc('utilities','doctype','rename_tool')
 	elif patch_no == 292:
 		reload_doc('accounts', 'search_criteria', 'trial_balance')
 	elif patch_no == 293:
@@ -1178,14 +1173,14 @@
 		sql("update `tabDocField` set options = 'Billed\nNot Billed\nPartly Billed\nClosed' where parent = 'Sales Order' and fieldname = 'billing_status'")
 	elif patch_no == 296:
 		sql("delete from tabDocField where parent='Support Ticket' and fieldname='contact_no'")
-		reload_doc('maintenance', 'doctype', 'support_ticket')
+		reload_doc('support', 'doctype', 'support_ticket')
 	elif patch_no == 297:
-		reload_doc('payroll', 'doctype', 'employee')
-		reload_doc('payroll', 'doctype', 'attendance')
-		reload_doc('payroll', 'doctype', 'expense_voucher')
-		reload_doc('payroll', 'doctype', 'appraisal')
-		reload_doc('payroll', 'doctype', 'salary_structure')
-		reload_doc('payroll', 'doctype', 'salary_slip')
+		reload_doc('hr', 'doctype', 'employee')
+		reload_doc('hr', 'doctype', 'attendance')
+		reload_doc('hr', 'doctype', 'expense_voucher')
+		reload_doc('hr', 'doctype', 'appraisal')
+		reload_doc('hr', 'doctype', 'salary_structure')
+		reload_doc('hr', 'doctype', 'salary_slip')
 	elif patch_no == 298:
 		sql("update `tabDocField` set options = 'link:Company' where parent = 'Attendance' and fieldname = 'company'")
 		sql("update `tabDocField` set options = 'link:Company' where parent = 'Expense Voucher' and fieldname = 'company'")
@@ -1212,7 +1207,7 @@
 		sql("update `tabDocField` set options = 'link:Item' where parent = 'Raw Materials Supplied' and fieldname = 'po_item'")
 		sql("update `tabDocField` set options = 'Sales Order' where parent = 'Indent Detail' and fieldname = 'sales_order_no'")
 		sql("update `tabDocField` set options = 'link:Company', fieldtype = 'Select' where parent = 'Stock Ledger Entry' and fieldname = 'company'")
-		reload_doc('tools', 'doctype', 'rename_tool')
+		reload_doc('utilities', 'doctype', 'rename_tool')
 	elif patch_no == 307:
 		sql("delete from `tabDocField` where parent = 'company' and label = 'Trash Company' and fieldtype = 'Button'")
 		reload_doc('setup', 'doctype', 'company')
@@ -1335,7 +1330,7 @@
 		reload_doc('accounts', 'search_criteria', 'lease_agreement_list')
 		reload_doc('accounts', 'search_criteria', 'lease_monthly_future_installment_inflows')
 		reload_doc('accounts', 'search_criteria', 'lease_overdue_age_wise')
-		reload_doc('accounts', 'search_criteria', 'lease_overdue_list')
+		reload_doc('accounts', 'search_criteria', 'lease_over_due_list')
 		reload_doc('accounts', 'search_criteria', 'lease_receipts_client_wise')
 		reload_doc('accounts', 'search_criteria', 'lease_receipt_summary_year_to_date')
 		reload_doc('accounts', 'search_criteria', 'lease_yearly_future_installment_inflows')
@@ -1349,4 +1344,66 @@
 	elif patch_no == 332:
 		sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'")
 	elif patch_no == 333:
+		sql("update `tabDocPerm` set `create`  =1 where role = 'Accounts Manager' and parent = 'Lease Agreement'")
+
+		p = get_obj('Patch Util')
+		p.add_permission('DocType Mapper', 'System Manager', 0, read = 1, write=1, create=1)
+		p.add_permission('Role', 'System Manager', 0, read = 1, write=1, create=1)
+		p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1)
+	elif patch_no == 334:
+		reload_doc('knowledge_base', 'doctype', 'answer')
+	elif patch_no == 335:
+		for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']:
+			sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt))
+	elif patch_no == 336:
+		reload_doc('server_tools','page','billing')
+	elif patch_no == 337:
+		item_list = webnotes.conn.sql("""SELECT name, description_html
+									FROM tabItem""")
+		if item_list:
+			for item, html in item_list:
+				if html and "getfile" in html and "acx" in html:
+					ac_id = webnotes.conn.sql("""SELECT value FROM `tabSingles` WHERE doctype='Control Panel' AND field='account_id'""")
+					sp_acx = html.split("acx=")
+					l_acx = len(sp_acx)
+					if l_acx > 1:
+						for i in range(l_acx-1):
+							sp_quot = sp_acx[i+1].split('"')
+							if len(sp_quot) > 1: sp_quot[0] = str(ac_id[0][0])
+							sp_acx[i+1] = '"'.join(sp_quot)
+					html = "acx=".join(sp_acx)
+					webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item))
+	elif patch_no == 338:
+		# Patch for billing status based on amount
+		# reload so and dn
+		reload_doc('selling','doctype','sales_order')
+		reload_doc('stock','doctype','delivery_note')
+
+		# delete billed_qty field
+		sql("delete from `tabDocField` where fieldname = 'billed_qty' and parent in ('Sales Order Detail', 'Delivery Note Detail')")
+
+		# update billed amt in item table in so and dn
+		sql("""	update `tabSales Order Detail` so
+				set billed_amt = (select sum(amount) from `tabRV Detail` where `so_detail`= so.name and docstatus=1 and parent not like 'old%%'), modified = now()""")
+
+		sql(""" update `tabDelivery Note Detail` dn
+				set billed_amt = (select sum(amount) from `tabRV Detail` where `dn_detail`= dn.name and docstatus=1 and parent not like 'old%%'), modified = now()""")
+
+		# calculate % billed based on item table
+		sql("""	update `tabSales Order` so
+				set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabSales Order Detail` where parent = so.name), modified = now()""")
+
+		sql("""	update `tabDelivery Note` dn
+				set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabDelivery Note Detail` where parent = dn.name), modified = now()""")
+
+		# update billing status based on % billed
+		sql("""update `tabSales Order` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
+				if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
+		sql("""update `tabDelivery Note` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
+				if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
+
+		# update name of questions page
+		sql("update tabPage set name='questions' where name='Questions'")
+		sql("update tabPage set name='question-view' where name='Question View'")
+	elif patch_no == 339
 		reload_doc('production','doctype','bill_of_materials')
diff --git a/production/doctype/bill_of_materials/bill_of_materials.py b/production/doctype/bill_of_materials/bill_of_materials.py
index f8f8e30..cc686e5 100644
--- a/production/doctype/bill_of_materials/bill_of_materials.py
+++ b/production/doctype/bill_of_materials/bill_of_materials.py
@@ -36,7 +36,7 @@
     ret={
       'description'   : item and item[0]['description'] or ''
     }
-    return cstr(ret)
+    return ret
 
   def get_workstation_details(self,workstation):
     ws = sql("select hour_rate, capacity from `tabWorkstation` where name = %s",workstation , as_dict = 1)
@@ -44,7 +44,7 @@
       'hour_rate'            : ws and flt(ws[0]['hour_rate']) or '',
       'workstation_capacity' : ws and flt(ws[0]['capacity']) or ''
     }
-    return cstr(ret)
+    return ret
 
   def get_bom_material_detail(self, arg):
     arg = eval(arg)
@@ -106,7 +106,7 @@
             'standard_rate'      : 0
             }
           ret_item.update(ret_bom_rates)
-    return cstr(ret_item)
+    return ret_item
   
   def set_as_default_bom(self):
     # set Is Default as 1
diff --git a/production/doctype/production_planning_tool/production_planning_tool.py b/production/doctype/production_planning_tool/production_planning_tool.py
index c548173..d0ae05b 100644
--- a/production/doctype/production_planning_tool/production_planning_tool.py
+++ b/production/doctype/production_planning_tool/production_planning_tool.py
@@ -32,7 +32,7 @@
              'stock_uom'   : item and item[0]['stock_uom'],
              'bom_no'      : item and item[0]['default_bom']
       }
-      return cstr(ret)
+      return ret
     else:
       msgprint("Item %s does not exist in system." %(args['item_code']))
       raise Exception
diff --git a/production/doctype/workstation/workstation.py b/production/doctype/workstation/workstation.py
index aaa4908..45851de 100644
--- a/production/doctype/workstation/workstation.py
+++ b/production/doctype/workstation/workstation.py
@@ -25,7 +25,7 @@
   def update_bom_operation(self):
       bom_list = sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name)
       for bom_no in bom_list:
-        sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no, self.doc.name))
+        sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name))
   
   def on_update(self):
     set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))
diff --git a/projects/doctype/project/project.py b/projects/doctype/project/project.py
index e68771c..084df6c 100644
--- a/projects/doctype/project/project.py
+++ b/projects/doctype/project/project.py
@@ -38,7 +38,7 @@
       ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
       ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or ''
       ret['email_id'] = contact_det and contact_det[0]['email_id'] or ''    
-      return cstr(ret)
+      return ret
     else:
       msgprint("Customer : %s does not exist in system." % (self.doc.customer))
       raise Exception  
@@ -65,7 +65,7 @@
     #if pft > 0:
     per_pft = (flt(pft) / flt(self.doc.project_value)) * 100
     ret = {'gross_margin_value': pft, 'per_gross_margin': per_pft}
-    return cstr(ret)
+    return ret
     
   # validate
   #================================================
diff --git a/projects/doctype/ticket/ticket.py b/projects/doctype/ticket/ticket.py
index 8d716cc..0f18b21 100644
--- a/projects/doctype/ticket/ticket.py
+++ b/projects/doctype/ticket/ticket.py
@@ -22,18 +22,18 @@
     cust = sql("select customer, customer_name from `tabProject` where name = %s", self.doc.project)
     if cust:
       ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
-      return cstr(ret)
+      return ret
   
   def get_customer_details(self):
     cust = sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
     if cust:
       ret = {'customer_name': cust and cust[0][0] or ''}
-      return cstr(ret)
+      return ret
   
   def get_allocated_to_name(self):
     as_em = sql("select first_name, last_name from `tabProfile` where name=%s",self.doc.allocated_to)
     ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''}
-    return cstr(ret)
+    return ret
 
   # validate
   #--------------------------------------------   
diff --git a/projects/doctype/timesheet/timesheet.py b/projects/doctype/timesheet/timesheet.py
index ba921f4..f07975c 100644
--- a/projects/doctype/timesheet/timesheet.py
+++ b/projects/doctype/timesheet/timesheet.py
@@ -32,7 +32,7 @@
     tsk = sql("select name, project, customer, customer_name from `tabTicket` where subject = %s", task_sub)
     if tsk:
       ret = {'task_id': tsk and tsk[0][0] or '', 'project_name': tsk and tsk[0][1] or '', 'customer_name': tsk and tsk[0][3] or ''}
-      return cstr(ret)
+      return ret
   
   def validate(self):
     if getdate(self.doc.timesheet_date) > getdate(nowdate()):
diff --git a/selling/doctype/enquiry/enquiry.py b/selling/doctype/enquiry/enquiry.py
index 61bc4ec..1259702 100644
--- a/selling/doctype/enquiry/enquiry.py
+++ b/selling/doctype/enquiry/enquiry.py
@@ -50,7 +50,7 @@
       ret['contact_no']     = contact_det and contact_det[0]['contact_no'] or ''
       ret['email_id']       = contact_det and contact_det[0]['email_id'] or ''
     
-      return cstr(ret)
+      return ret
     else:
       msgprint("Customer : %s does not exist in system." % (name))
       raise Exception
@@ -64,7 +64,7 @@
       'contact_no' : contact and contact[0]['contact_no'] or '',
       'email_id' : contact and contact[0]['email_id'] or ''
     }
-    return str(ret)   
+    return ret
     
   # ====================================================================================================================
   def on_update(self):
@@ -184,7 +184,7 @@
     else:
       set(self.doc, 'status', 'Enquiry Lost')
       set(self.doc, 'order_lost_reason', arg)
-      return cstr('true')
+      return 'true'
     
   # ====================================================================================================================  
   def update_follow_up(self):
diff --git a/selling/doctype/installation_note/installation_note.py b/selling/doctype/installation_note/installation_note.py
index ce21363..e0af7ec 100644
--- a/selling/doctype/installation_note/installation_note.py
+++ b/selling/doctype/installation_note/installation_note.py
@@ -29,20 +29,7 @@
   # ---------
   def autoname(self):
     self.doc.name = make_autoname(self.doc.naming_series+'.#####')
-  
-  #fetch customer details
-  #=================================
-  #def get_customer_details(self):
-  #  det = sql("select t1.customer_name, t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = '%s' and t1.name=t2.customer and t2.is_primary_contact = 'Yes'"%self.doc.customer, as_dict=1)
-    
-  #  ret = {
-  #    'customer_name':  det and det[0]['customer_name'] or '',
-  #    'address'  :  det and det[0]['address'] or '',
-  #    'territory':  det and det[0]['territory'] or '',
-  #    'contact_person' : det and det[0]['contact_name'] or ''
-  #  }
-
-  #  return str(ret)
+ 
   
   #fetch delivery note details
   #====================================
diff --git a/selling/doctype/lead/lead.py b/selling/doctype/lead/lead.py
index 1bf8c8d..14d14e1 100644
--- a/selling/doctype/lead/lead.py
+++ b/selling/doctype/lead/lead.py
@@ -51,7 +51,7 @@
       'description': it and it[0][3] or '',
       'uom' : it and it[0][4] or ''
       }
-      return cstr(ret)
+      return ret
   
   def validate(self):
     import string
diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py
index aed868e..1175540 100644
--- a/selling/doctype/quotation/quotation.py
+++ b/selling/doctype/quotation/quotation.py
@@ -45,17 +45,12 @@
 
     self.get_adj_percent()
 
-    return cstr(self.doc.quotation_to)
-    
-  # Get Customer Details
-  # --------------------
-  #def get_customer_details(self):
-  #  return cstr(get_obj('Sales Common').get_customer_details(self))
+    return self.doc.quotation_to
 
   # Get contact person details based on customer selected
   # ------------------------------------------------------
   def get_contact_details(self):
-    return cstr(get_obj('Sales Common').get_contact_details(self,0))
+    return get_obj('Sales Common').get_contact_details(self,0)
   
   # Clear Quotation Details
   # -----------------------
@@ -111,7 +106,7 @@
       'contact_mobile' : details and details[0]['mobile_no'] or '-',
       'contact_email' : details and details[0]['email_id'] or '-'      
     }
-    return cstr(ret)
+    return ret
 
      
 # GET TERMS AND CONDITIONS
@@ -295,7 +290,7 @@
       set(self.doc, 'status', 'Order Lost')
       set(self.doc, 'order_lost_reason', arg)
       self.update_enquiry('order lost')
-      return cstr('true')
+      return 'true'
   
   #check if value entered in item table
   #--------------------------------------
diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py
index 25dd960..acdca50 100644
--- a/selling/doctype/sales_common/sales_common.py
+++ b/selling/doctype/sales_common/sales_common.py
@@ -118,21 +118,21 @@
 		t = {}
 		for x in tax: t[x[0]] = flt(x[1])
 		ret = {
-			'description'								 : item and item[0]['description_html'] or item[0]['description'],
-			'item_group'									: item and item[0]['item_group'] or '',
-			'item_name'									 : item and item[0]['item_name'] or '',
-			'brand'											 : item and item[0]['brand'] or '',
-			'stock_uom'									 : item and item[0]['stock_uom'] or '',
-			'reserved_warehouse'					: item and item[0]['default_warehouse'] or '',
-			'warehouse'									 : item and item[0]['default_warehouse'] or '',
-			'income_account'							: item and item[0]['default_income_account'] or '',
-			'cost_center'								 : item and item[0]['default_sales_cost_center'] or '',
-			'qty'												 : 1.00,	 # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1
-			'adj_rate'										: 0,
-			'amount'											: 0,
-			'export_amount'							 : 0,
-			'item_tax_rate'							 : str(t),
-			'batch_no'										: ''
+			'description'			: item and item[0]['description_html'] or item[0]['description'],
+			'item_group'			: item and item[0]['item_group'] or '',
+			'item_name'				: item and item[0]['item_name'] or '',
+			'brand'					: item and item[0]['brand'] or '',
+			'stock_uom'				: item and item[0]['stock_uom'] or '',
+			'reserved_warehouse'	: item and item[0]['default_warehouse'] or '',
+			'warehouse'				: item and item[0]['default_warehouse'] or '',
+			'income_account'		: item and item[0]['default_income_account'] or '',
+			'cost_center'			: item and item[0]['default_sales_cost_center'] or '',
+			'qty'					: 1.00,	 # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1
+			'adj_rate'				: 0,
+			'amount'				: 0,
+			'export_amount'			: 0,
+			'item_tax_rate'			: str(t),
+			'batch_no'				: ''
 		}
 		if(obj.doc.price_list_name and item):	#this is done to fetch the changed BASIC RATE and REF RATE based on PRICE LIST
 			ref_rate =	self.get_ref_rate(item_code, obj.doc.price_list_name, obj.doc.currency)
@@ -143,7 +143,8 @@
 			
 		if obj.doc.doctype == 'Receivable Voucher':
 			return ret
-		return str(ret)
+			
+		return ret
 	
 	# ***************** Get Ref rate as entered in Item Master ********************
 	def get_ref_rate(self, item_code, price_list_name, currency):
@@ -161,7 +162,6 @@
 			d.base_ref_rate = flt(ref_rate) * flt(obj.doc.conversion_rate)
 			d.export_rate = flt(ref_rate)
 
-
 	# Load Default Taxes
 	# ====================
 	def load_default_taxes(self, obj):
@@ -203,7 +203,7 @@
 		ret = {
 			'item_tax_rate'		:	tax and str(t) or ''
 		}
-		return str(ret)
+		return ret
 
 	# Get Serial No Details
 	# ==========================================================================
@@ -220,7 +220,7 @@
 			'description'			: item and item[0]['description'] or '',
 			'item_tax_rate'		: str(t)
 		}
-		return str(ret)
+		return ret
 		
 	# Get Commission rate
 	# =======================================================================
@@ -233,7 +233,7 @@
 				'commission_rate'		 :	comm_rate and flt(comm_rate[0]['commission_rate']) or 0,
 				'total_commission'		:	flt(total_comm)
 			}
-			return str(ret)
+			return ret
 		else:
 			msgprint("Business Associate : %s does not exist in the system." % (sales_partner))
 			raise Exception
@@ -287,7 +287,7 @@
 			ret = {
 				'rate'	:	rate and flt(rate[0]['tax_rate']) or 0
 			}
-		return cstr(ret)
+		return ret
 		
 
 	# Make Packing List from Sales BOM
@@ -324,11 +324,33 @@
 			
 			if self.has_sales_bom(d.item_code):
 				for i in self.get_sales_bom_items(d.item_code):
-					il.append([warehouse, i[0], flt(flt(i[1])* qty), reserved_qty, i[2], d.batch_no, d.serial_no])
+					il.append([warehouse, i[0], flt(flt(i[1])* qty), flt(flt(i[1])*reserved_qty), i[2], d.batch_no, d.serial_no])
 			else:
 				il.append([warehouse, d.item_code, qty, reserved_qty, d.stock_uom, d.batch_no, d.serial_no])
 		return il
 
+	# ---------------------------------------------------------------------------------------------
+	# get qty, amount already billed or delivered against curr line item for current doctype
+	# For Eg: SO-RV get total qty, amount from SO and also total qty, amount against that SO in RV
+	# ---------------------------------------------------------------------------------------------
+	def get_curr_and_ref_doc_details(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, curr_parent_name, curr_parent_doctype):
+		# Get total qty, amt of current doctype (eg RV) except for qty, amt of this transaction
+		if curr_parent_doctype == 'Installation Note':
+			curr_det = sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
+			qty, amt = curr_det and flt(curr_det[0][0]) or 0, 0
+		else:
+			curr_det = sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
+			qty, amt = curr_det and flt(curr_det[0][0]) or 0, curr_det and flt(curr_det[0][1]) or 0
+
+		# get total qty of ref doctype
+		ref_det = sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn))
+		max_qty, max_amt = ref_det and flt(ref_det[0][0]) or 0, ref_det and flt(ref_det[0][1]) or 0
+
+		return qty, max_qty, amt, max_amt
+
+
+
+
 
 	# -----------------------
 	# add packing list items
@@ -458,26 +480,6 @@
 	def update_prevdoc_detail(self, is_submit, obj):
 		StatusUpdater(obj, is_submit).update()
 
-	# ---------------------------------------------------------------------------------------------
-	# get qty, amount already billed or delivered against curr line item for current doctype
-	# For Eg: SO-RV get total qty, amount from SO and also total qty, amount against that SO in RV
-	# ---------------------------------------------------------------------------------------------
-	def get_curr_and_ref_doc_details(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, curr_parent_name, curr_parent_doctype):
-		# Get total qty, amt of current doctype (eg RV) except for qty, amt of this transaction
-		if curr_parent_doctype == 'Installation Note':
-			curr_det = sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
-			qty, amt = curr_det and flt(curr_det[0][0]) or 0, 0
-		else:
-			curr_det = sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
-			qty, amt = curr_det and flt(curr_det[0][0]) or 0, curr_det and flt(curr_det[0][1]) or 0
-
-		# get total qty of ref doctype
-		ref_det = sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn))
-		max_qty, max_amt = ref_det and flt(ref_det[0][0]) or 0, ref_det and flt(ref_det[0][1]) or 0
-
-		return qty, max_qty, amt, max_amt
-
-
 
 
 
@@ -496,7 +498,7 @@
 			- Validate over delivery
 			
 		From Receivable Voucher 
-			- Update Billed Qty
+			- Update Billed Amt
 			- Update Percent
 			- Validate over billing
 			
@@ -524,23 +526,33 @@
 			self.validate_qty({
 				'source_dt'		:'Delivery Note Detail',
 				'compare_field'	:'delivered_qty',
+				'compare_ref_field'	:'qty',
 				'target_dt'		:'Sales Order Detail',
 				'join_field'	:'prevdoc_detail_docname'
 			})
 		elif self.obj.doc.doctype=='Receivable Voucher':
 			self.validate_qty({
 				'source_dt'		:'RV Detail',
-				'compare_field'	:'billed_qty',
+				'compare_field'	:'billed_amt',
+				'compare_ref_field'	:'amount',
 				'target_dt'		:'Sales Order Detail',
 				'join_field'	:'so_detail'
 			})
+			self.validate_qty({
+				'source_dt'		:'RV Detail',
+				'compare_field'	:'billed_amt',
+				'compare_ref_field'	:'amount',
+				'target_dt'		:'Delivery Note Detail',
+				'join_field'	:'dn_detail'
+			}, no_tolerance =1)
 		elif self.obj.doc.doctype=='Installation Note':
 			self.validate_qty({
 				'source_dt'		:'Installation Item Details',
 				'compare_field'	:'installed_qty',
+				'compare_ref_field'	:'qty',
 				'target_dt'		:'Delivery Note Detail',
 				'join_field'	:'dn_detail'
-			}, no_tolerance =1);
+			}, no_tolerance =1)
 
 	
 	def get_tolerance_for(self, item_code):
@@ -567,22 +579,22 @@
 		
 		# check if overflow is within tolerance
 		tolerance = self.get_tolerance_for(item['item_code'])
-		overflow_percent = ((item[args['compare_field']] - item['qty']) / item['qty'] * 100)
+		overflow_percent = ((item[args['compare_field']] - item[args['compare_ref_field']]) / item[args['compare_ref_field']] * 100)
 	
 		if overflow_percent - tolerance > 0.0001:
-			item['max_allowed'] = flt(item['qty'] * (100+tolerance)/100)
+			item['max_allowed'] = flt(item[args['compare_ref_field']] * (100+tolerance)/100)
 			item['reduce_by'] = item[args['compare_field']] - item['max_allowed']
 		
 			msgprint("""
-				Row #%(idx)s: Max qty allowed for <b>Item %(item_code)s</b> against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>. 
+				Row #%(idx)s: Max %(compare_ref_field)s allowed for <b>Item %(item_code)s</b> against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>. 
 				
 				If you want to increase your overflow tolerance, please increase tolerance %% in Global Defaults or Item master. 
 				
-				Or, you must reduce the qty by %(reduce_by)s""" % item, raise_exception=1)
+				Or, you must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1)
 
 	def validate_qty(self, args, no_tolerance=None):
 		"""
-			Updates qty at row level
+			Validates qty at row level
 		"""
 		# get unique transactions to update
 		for d in self.obj.doclist:
@@ -591,22 +603,23 @@
 
 				# get all qty where qty > compare_field
 				item = sql("""
-					select item_code, qty, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` 
-					where qty < `%(compare_field)s` and name="%(name)s" and docstatus=1
+					select item_code, `%(compare_ref_field)s`, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` 
+					where `%(compare_ref_field)s` < `%(compare_field)s` and name="%(name)s" and docstatus=1
 					""" % args, as_dict=1)
 				
 				if item:
 					item = item[0]
 					item['idx'] = d.idx
-					
+					item['compare_ref_field'] = args['compare_ref_field']
 					if no_tolerance:
-						item['reduce_by'] = item[args['compare_field']] - item['qty']
+						item['reduce_by'] = item[args['compare_field']] - item[args['compare_ref_field']]
 						msgprint("""
-							Row #%(idx)s: Max qty allowed for <b>Item %(item_code)s</b> against 
-							<b>%(parenttype)s %(parent)s</b> is <b>%(qty)s</b>. 
+							Row #%(idx)s: Max %(compare_ref_field)s allowed for <b>Item %(item_code)s</b> against 
+							<b>%(parenttype)s %(parent)s</b> is <b>""" % item 
+							+ cstr(item[args['compare_ref_field']]) + """</b>. 
 							
-							You must reduce the qty by %(reduce_by)s""" % item, raise_exception=1)
-						
+							You must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1)
+					
 					else:
 						self.check_overflow_with_tolerance(item, args)
 						
@@ -621,6 +634,7 @@
 				'target_dt'				:'Sales Order Detail',
 				'target_parent_dt'		:'Sales Order',
 				'target_parent_field'	:'per_delivered',
+				'target_ref_field'		:'qty',
 				'source_dt'				:'Delivery Note Detail',
 				'source_field'			:'qty',
 				'join_field'			:'prevdoc_detail_docname',
@@ -631,12 +645,13 @@
 			
 		elif self.obj.doc.doctype=='Receivable Voucher':
 			self.update_qty({
-				'target_field'			:'billed_qty',
+				'target_field'			:'billed_amt',
 				'target_dt'				:'Sales Order Detail',
 				'target_parent_dt'		:'Sales Order',
 				'target_parent_field'	:'per_billed',
+				'target_ref_field'		:'amount',
 				'source_dt'				:'RV Detail',
-				'source_field'			:'qty',
+				'source_field'			:'amount',
 				'join_field'			:'so_detail',
 				'percent_join_field'	:'sales_order',
 				'status_field'			:'billing_status',
@@ -644,12 +659,13 @@
 			})
 
 			self.update_qty({
-				'target_field'			:'billed_qty',
+				'target_field'			:'billed_amt',
 				'target_dt'				:'Delivery Note Detail',
 				'target_parent_dt'		:'Delivery Note',
 				'target_parent_field'	:'per_billed',
+				'target_ref_field'		:'amount',
 				'source_dt'				:'RV Detail',
-				'source_field'			:'qty',
+				'source_field'			:'amount',
 				'join_field'			:'dn_detail',
 				'percent_join_field'	:'delivery_note',
 				'status_field'			:'billing_status',
@@ -662,6 +678,7 @@
 				'target_dt'				:'Delivery Note Detail',
 				'target_parent_dt'		:'Delivery Note',
 				'target_parent_field'	:'per_installed',
+				'target_ref_field'		:'qty',
 				'source_dt'				:'Installed Item Details',
 				'source_field'			:'qty',
 				'join_field'			:'prevdoc_detail_docname',
@@ -692,7 +709,7 @@
 						update 
 							`tab%(target_dt)s` 
 						set 
-							%(target_field)s = (select sum(qty) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s))
+							%(target_field)s = (select sum(%(source_field)s) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s))
 						where
 							name="%(detail_id)s"            
 					""" % args)			
@@ -708,10 +725,10 @@
 						`tab%(target_parent_dt)s` 
 					set 
 						%(target_parent_field)s = 
-							(select sum(if(qty > ifnull(%(target_field)s, 0), %(target_field)s, qty))/sum(qty)*100 from `tab%(target_dt)s` where parent="%(name)s"), 
+							(select sum(if(%(target_ref_field)s > ifnull(%(target_field)s, 0), %(target_field)s, %(target_ref_field)s))/sum(%(target_ref_field)s)*100 from `tab%(target_dt)s` where parent="%(name)s"), 
 						modified = now()
-						where
-							name="%(name)s"
+					where
+						name="%(name)s"
 					""" % args)
 
 				# update field
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index 11842fb..ca5af7a 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -19,470 +19,469 @@
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-  def __init__(self, doc, doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-    self.tname = 'Sales Order Detail'
-    self.fname = 'sales_order_details'
-    self.person_tname = 'Target Detail'
-    self.partner_tname = 'Partner Target Detail'
-    self.territory_tname = 'Territory Target Detail'
+	def __init__(self, doc, doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+		self.tname = 'Sales Order Detail'
+		self.fname = 'sales_order_details'
+		self.person_tname = 'Target Detail'
+		self.partner_tname = 'Partner Target Detail'
+		self.territory_tname = 'Territory Target Detail'
 
 # Autoname
 # ===============
-  def autoname(self):
-    self.doc.name = make_autoname(self.doc.naming_series+'.#####')
+	def autoname(self):
+		self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
-    
+		
 # DOCTYPE TRIGGER FUNCTIONS
 # =============================
-  # Pull Quotation Details
-  # -----------------------
-  def pull_quotation_details(self):
-    self.doc.clear_table(self.doclist, 'other_charges')
-    self.doc.clear_table(self.doclist, 'sales_order_details')
-    self.doc.clear_table(self.doclist, 'sales_team')
-    self.doc.clear_table(self.doclist, 'tc_details')
-    if self.doc.quotation_no:        
-      get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Detail', 'Sales Order Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]")      
-    else:
-      msgprint("Please select Quotation whose details need to pull")    
+	# Pull Quotation Details
+	# -----------------------
+	def pull_quotation_details(self):
+		self.doc.clear_table(self.doclist, 'other_charges')
+		self.doc.clear_table(self.doclist, 'sales_order_details')
+		self.doc.clear_table(self.doclist, 'sales_team')
+		self.doc.clear_table(self.doclist, 'tc_details')
+		if self.doc.quotation_no:				
+			get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Detail', 'Sales Order Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]")			
+		else:
+			msgprint("Please select Quotation whose details need to pull")		
 
-    return cstr(self.doc.quotation_no)
-  
-  #pull project customer
-  #-------------------------
-  def pull_project_customer(self):
-    res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
-    if res:
-      get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]")
-      
-  
-  # Get Customer Details
-  # ---------------------
-  #def get_customer_details(self):
-  #  sales_com_obj = get_obj('Sales Common')
-  #  sales_com_obj.get_customer_details(self)
-  #  sales_com_obj.get_shipping_details(self)
+		return cstr(self.doc.quotation_no)
+	
+	#pull project customer
+	#-------------------------
+	def pull_project_customer(self):
+		res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
+		if res:
+			get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]")
+			
+	
+	# Get Customer Details
+	# ---------------------
+	#def get_customer_details(self):
+	#	sales_com_obj = get_obj('Sales Common')
+	#	sales_com_obj.get_customer_details(self)
+	#	sales_com_obj.get_shipping_details(self)
 
-  # Get contact person details based on customer selected
-  # ------------------------------------------------------
-  def get_contact_details(self):
-    get_obj('Sales Common').get_contact_details(self,0)
+	# Get contact person details based on customer selected
+	# ------------------------------------------------------
+	def get_contact_details(self):
+		get_obj('Sales Common').get_contact_details(self,0)
 
-  # Get Commission rate of Sales Partner
-  # -------------------------------------
-  def get_comm_rate(self, sales_partner):
-    return get_obj('Sales Common').get_comm_rate(sales_partner, self)
+	# Get Commission rate of Sales Partner
+	# -------------------------------------
+	def get_comm_rate(self, sales_partner):
+		return get_obj('Sales Common').get_comm_rate(sales_partner, self)
 
-  # Clear Sales Order Details Table
-  # --------------------------------
-  def clear_sales_order_details(self):
-    self.doc.clear_table(self.doclist, 'sales_order_details')
-    
+	# Clear Sales Order Details Table
+	# --------------------------------
+	def clear_sales_order_details(self):
+		self.doc.clear_table(self.doclist, 'sales_order_details')
+		
 
 # SALES ORDER DETAILS TRIGGER FUNCTIONS
 # ================================================================================
-  # Get Item Details
-  # ----------------
-  def get_item_details(self, item_code):
-    return get_obj('Sales Common').get_item_details(item_code, self)
+	# Get Item Details
+	# ----------------
+	def get_item_details(self, item_code):
+		return get_obj('Sales Common').get_item_details(item_code, self)
 
-  # Re-calculates Basic Rate & amount based on Price List Selected
-  # --------------------------------------------------------------
-  def get_adj_percent(self, arg=''):
-    get_obj('Sales Common').get_adj_percent(self)
+	# Re-calculates Basic Rate & amount based on Price List Selected
+	# --------------------------------------------------------------
+	def get_adj_percent(self, arg=''):
+		get_obj('Sales Common').get_adj_percent(self)
 
-  # Get projected qty of item based on warehouse selected
-  # -----------------------------------------------------
-  def get_available_qty(self,args):
-    args = eval(args)
-    tot_avail_qty = sql("select projected_qty, actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1)
-    ret = {
-       'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0,
-       'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0
-    }
-    return cstr(ret)
-  
-  
+	# Get projected qty of item based on warehouse selected
+	# -----------------------------------------------------
+	def get_available_qty(self,args):
+		args = eval(args)
+		tot_avail_qty = sql("select projected_qty, actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1)
+		ret = {
+			 'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0,
+			 'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0
+		}
+		return ret
+	
 # OTHER CHARGES TRIGGER FUNCTIONS
 # ====================================================================================
-  
-  # Get Tax rate if account type is TAX
-  # ------------------------------------
-  def get_rate(self,arg):
-    return get_obj('Sales Common').get_rate(arg)
+	
+	# Get Tax rate if account type is TAX
+	# ------------------------------------
+	def get_rate(self,arg):
+		return get_obj('Sales Common').get_rate(arg)
 
-  # Load Default Charges
-  # ----------------------------------------------------------
-  def load_default_taxes(self):
-    return get_obj('Sales Common').load_default_taxes(self)
+	# Load Default Charges
+	# ----------------------------------------------------------
+	def load_default_taxes(self):
+		return get_obj('Sales Common').load_default_taxes(self)
 
-  # Pull details from other charges master (Get Other Charges)
-  # ----------------------------------------------------------
-  def get_other_charges(self):
-    return get_obj('Sales Common').get_other_charges(self)
+	# Pull details from other charges master (Get Other Charges)
+	# ----------------------------------------------------------
+	def get_other_charges(self):
+		return get_obj('Sales Common').get_other_charges(self)
  
  
 # GET TERMS & CONDITIONS
 # =====================================================================================
-  def get_tc_details(self):
-    return get_obj('Sales Common').get_tc_details(self)
+	def get_tc_details(self):
+		return get_obj('Sales Common').get_tc_details(self)
 
 #check if maintenance schedule already generated
 #============================================
-  def check_maintenance_schedule(self):
-    nm = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", self.doc.name)
-    nm = nm and nm[0][0] or ''
-    
-    if not nm:
-      return cstr('No')
+	def check_maintenance_schedule(self):
+		nm = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", self.doc.name)
+		nm = nm and nm[0][0] or ''
+		
+		if not nm:
+			return 'No'
 
 #check if maintenance visit already generated
 #============================================
-  def check_maintenance_visit(self):
-    nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name)
-    nm = nm and nm[0][0] or ''
-    
-    if not nm:
-      return cstr('No')
+	def check_maintenance_visit(self):
+		nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name)
+		nm = nm and nm[0][0] or ''
+		
+		if not nm:
+			return 'No'
 
 # VALIDATE
 # =====================================================================================
-  # Fiscal Year Validation
-  # ----------------------
-  def validate_fiscal_year(self):
-    get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date')
-  
-  # Validate values with reference document
-  #----------------------------------------
-  def validate_reference_value(self):
-    get_obj('DocType Mapper', 'Quotation-Sales Order', with_children = 1).validate_reference_value(self, self.doc.name)
+	# Fiscal Year Validation
+	# ----------------------
+	def validate_fiscal_year(self):
+		get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date')
+	
+	# Validate values with reference document
+	#----------------------------------------
+	def validate_reference_value(self):
+		get_obj('DocType Mapper', 'Quotation-Sales Order', with_children = 1).validate_reference_value(self, self.doc.name)
 
-  # Validate Mandatory
-  # -------------------
-  def validate_mandatory(self):
-    # validate transaction date v/s delivery date
-    if self.doc.delivery_date:
-      if getdate(self.doc.transaction_date) > getdate(self.doc.delivery_date):
-        msgprint("Expected Delivery Date cannot be before Sales Order Date")
-        raise Exception
+	# Validate Mandatory
+	# -------------------
+	def validate_mandatory(self):
+		# validate transaction date v/s delivery date
+		if self.doc.delivery_date:
+			if getdate(self.doc.transaction_date) > getdate(self.doc.delivery_date):
+				msgprint("Expected Delivery Date cannot be before Sales Order Date")
+				raise Exception
 
-  # Validate P.O Date
-  # ------------------
-  def validate_po_date(self):
-    # validate p.o date v/s delivery date
-    if self.doc.po_date and self.doc.delivery_date and getdate(self.doc.po_date) >= getdate(self.doc.delivery_date):
-      msgprint("Expected Delivery Date cannot be before Purchase Order Date")
-      raise Exception  
-    # amendment date is necessary if document is amended
-    if self.doc.amended_from and not self.doc.amendment_date:
-      msgprint("Please Enter Amendment Date")
-      raise Exception
-  
-  # Validations of Details Table
-  # -----------------------------
-  def validate_for_items(self):
-    check_list,flag = [],0
-    chk_dupl_itm = []
-    # Sales Order Details Validations
-    for d in getlist(self.doclist, 'sales_order_details'):
-      if 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):
-          msgprint("Sales Order Date cannot be before Quotation Date")
-          raise Exception
-        # validates whether quotation no in doctype and in table is same
-        if not cstr(d.prevdoc_docname) == cstr(self.doc.quotation_no):
-          msgprint("Items in table does not belong to the Quotation No mentioned.")
-          raise Exception
+	# Validate P.O Date
+	# ------------------
+	def validate_po_date(self):
+		# validate p.o date v/s delivery date
+		if self.doc.po_date and self.doc.delivery_date and getdate(self.doc.po_date) >= getdate(self.doc.delivery_date):
+			msgprint("Expected Delivery Date cannot be before Purchase Order Date")
+			raise Exception	
+		# amendment date is necessary if document is amended
+		if self.doc.amended_from and not self.doc.amendment_date:
+			msgprint("Please Enter Amendment Date")
+			raise Exception
+	
+	# Validations of Details Table
+	# -----------------------------
+	def validate_for_items(self):
+		check_list,flag = [],0
+		chk_dupl_itm = []
+		# Sales Order Details Validations
+		for d in getlist(self.doclist, 'sales_order_details'):
+			if 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):
+					msgprint("Sales Order Date cannot be before Quotation Date")
+					raise Exception
+				# validates whether quotation no in doctype and in table is same
+				if not cstr(d.prevdoc_docname) == cstr(self.doc.quotation_no):
+					msgprint("Items in table does not belong to the Quotation No mentioned.")
+					raise Exception
 
-      # validates whether item is not entered twice
-      e = [d.item_code, d.description, d.reserved_warehouse, d.prevdoc_docname or '']
-      f = [d.item_code, d.description]
+			# validates whether item is not entered twice
+			e = [d.item_code, d.description, d.reserved_warehouse, d.prevdoc_docname or '']
+			f = [d.item_code, d.description]
 
-      #check item is stock item
-      st_itm = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
+			#check item is stock item
+			st_itm = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
 
-      if st_itm and st_itm[0][0] == 'Yes':
-        if e in check_list:
-          msgprint("Item %s has been entered twice." % d.item_code)
-        else:
-          check_list.append(e)
-      elif st_itm and st_itm[0][0]== 'No':
-        if f in chk_dupl_itm:
-          msgprint("Item %s has been entered twice." % d.item_code)
-        else:
-          chk_dupl_itm.append(f)
+			if st_itm and st_itm[0][0] == 'Yes':
+				if e in check_list:
+					msgprint("Item %s has been entered twice." % d.item_code)
+				else:
+					check_list.append(e)
+			elif st_itm and st_itm[0][0]== 'No':
+				if f in chk_dupl_itm:
+					msgprint("Item %s has been entered twice." % d.item_code)
+				else:
+					chk_dupl_itm.append(f)
 
-      # used for production plan
-      d.transaction_date = self.doc.transaction_date
-      d.delivery_date = self.doc.delivery_date
+			# used for production plan
+			d.transaction_date = self.doc.transaction_date
+			d.delivery_date = self.doc.delivery_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))
-      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
+			# 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))
+			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
 
-  # validate sales/ service item against order type
-  #----------------------------------------------------
-  def validate_sales_mntc_item(self):
-    if self.doc.order_type == 'Maintenance':
-      item_field = 'is_service_item'
-      order_type = 'Maintenance Order'
-      item_type = 'service item'
-    else :
-      item_field = 'is_sales_item'
-      order_type = 'Sales Order'
-      item_type = 'sales item'
-    
-    for d in getlist(self.doclist, 'sales_order_details'):
-      res = sql("select %s from `tabItem` where name='%s'"% (item_field,d.item_code))
-      res = res and res[0][0] or 'No'
-      
-      if res == 'No':
-        msgprint("You can not select non "+item_type+" "+d.item_code+" in "+order_type)
-        raise Exception
-  
-  # validate sales/ maintenance quotation against order type
-  #------------------------------------------------------------------
-  def validate_sales_mntc_quotation(self):
-    for d in getlist(self.doclist, 'sales_order_details'):
-      if d.prevdoc_docname:
-        res = sql("select order_type from `tabQuotation` where name=%s", (d.prevdoc_docname))
-        res = res and res[0][0] or ''
-        
-        if self.doc.order_type== 'Maintenance' and res != 'Maintenance':
-          msgprint("You can not select non Maintenance Quotation against Maintenance Order")
-          raise Exception
-        elif self.doc.order_type != 'Maintenance' and res == 'Maintenance':
-          msgprint("You can not select non Sales Quotation against Sales Order")
-          raise Exception
+	# validate sales/ service item against order type
+	#----------------------------------------------------
+	def validate_sales_mntc_item(self):
+		if self.doc.order_type == 'Maintenance':
+			item_field = 'is_service_item'
+			order_type = 'Maintenance Order'
+			item_type = 'service item'
+		else :
+			item_field = 'is_sales_item'
+			order_type = 'Sales Order'
+			item_type = 'sales item'
+		
+		for d in getlist(self.doclist, 'sales_order_details'):
+			res = sql("select %s from `tabItem` where name='%s'"% (item_field,d.item_code))
+			res = res and res[0][0] or 'No'
+			
+			if res == 'No':
+				msgprint("You can not select non "+item_type+" "+d.item_code+" in "+order_type)
+				raise Exception
+	
+	# validate sales/ maintenance quotation against order type
+	#------------------------------------------------------------------
+	def validate_sales_mntc_quotation(self):
+		for d in getlist(self.doclist, 'sales_order_details'):
+			if d.prevdoc_docname:
+				res = sql("select order_type from `tabQuotation` where name=%s", (d.prevdoc_docname))
+				res = res and res[0][0] or ''
+				
+				if self.doc.order_type== 'Maintenance' and res != 'Maintenance':
+					msgprint("You can not select non Maintenance Quotation against Maintenance Order")
+					raise Exception
+				elif self.doc.order_type != 'Maintenance' and res == 'Maintenance':
+					msgprint("You can not select non Sales Quotation against Sales Order")
+					raise Exception
 
-  #do not allow sales item/quotation in maintenance order and service item/quotation in sales order
-  #-----------------------------------------------------------------------------------------------
-  def validate_order_type(self):
-    #validate delivery date
-    if self.doc.order_type != 'Maintenance' and not self.doc.delivery_date:
-      msgprint("Please enter 'Expected Delivery Date'")
-      raise Exception
-    
-    self.validate_sales_mntc_quotation()
-    self.validate_sales_mntc_item()
+	#do not allow sales item/quotation in maintenance order and service item/quotation in sales order
+	#-----------------------------------------------------------------------------------------------
+	def validate_order_type(self):
+		#validate delivery date
+		if self.doc.order_type != 'Maintenance' and not self.doc.delivery_date:
+			msgprint("Please enter 'Expected Delivery Date'")
+			raise Exception
+		
+		self.validate_sales_mntc_quotation()
+		self.validate_sales_mntc_item()
 
-  #check for does customer belong to same project as entered..
-  #-------------------------------------------------------------------------------------------------
-  def validate_proj_cust(self):
-    if self.doc.project_name and self.doc.customer_name:
-      res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
-      if not res:
-        msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
-        raise Exception
-       
+	#check for does customer belong to same project as entered..
+	#-------------------------------------------------------------------------------------------------
+	def validate_proj_cust(self):
+		if self.doc.project_name and self.doc.customer_name:
+			res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			if not res:
+				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
+				raise Exception
+			 
 
-  # Validate
-  # ---------
-  def validate(self):
-    self.validate_fiscal_year()
-    self.validate_order_type()
-    self.validate_mandatory()
-    self.validate_proj_cust()
-    self.validate_po_date()
-    #self.validate_reference_value()
-    self.validate_for_items()
-    sales_com_obj = get_obj(dt = 'Sales Common')
-    sales_com_obj.check_active_sales_items(self)
-    sales_com_obj.check_conversion_rate(self)
+	# Validate
+	# ---------
+	def validate(self):
+		self.validate_fiscal_year()
+		self.validate_order_type()
+		self.validate_mandatory()
+		self.validate_proj_cust()
+		self.validate_po_date()
+		#self.validate_reference_value()
+		self.validate_for_items()
+		sales_com_obj = get_obj(dt = 'Sales Common')
+		sales_com_obj.check_active_sales_items(self)
+		sales_com_obj.check_conversion_rate(self)
 
-        # verify whether rate is not greater than max_discount
-    sales_com_obj.validate_max_discount(self,'sales_order_details')
-        # this is to verify that the allocated % of sales persons is 100%
-    sales_com_obj.get_allocated_sum(self)
-    sales_com_obj.make_packing_list(self,'sales_order_details')
-    
-        # get total in words
-    dcc = TransactionBase().get_company_currency(self.doc.company)    
-    self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
-    self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
-    
-    # set SO status
-    self.doc.status='Draft'
-    if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
-    if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered'
-    
+				# verify whether rate is not greater than max_discount
+		sales_com_obj.validate_max_discount(self,'sales_order_details')
+				# this is to verify that the allocated % of sales persons is 100%
+		sales_com_obj.get_allocated_sum(self)
+		sales_com_obj.make_packing_list(self,'sales_order_details')
+		
+				# get total in words
+		dcc = TransactionBase().get_company_currency(self.doc.company)		
+		self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
+		self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
+		
+		# set SO status
+		self.doc.status='Draft'
+		if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
+		if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered'
+		
 
 # ON SUBMIT
 # ===============================================================================================
-  # Checks Quotation Status
-  # ------------------------
-  def check_prev_docstatus(self):
-    for d in getlist(self.doclist, 'sales_order_details'):
-      cancel_quo = sql("select name from `tabQuotation` where docstatus = 2 and name = '%s'" % d.prevdoc_docname)
-      if cancel_quo:
-        msgprint("Quotation :" + cstr(cancel_quo[0][0]) + " is already cancelled !")
-        raise Exception , "Validation Error. "
-  
-  def update_enquiry_status(self, prevdoc, flag):
-    enq = sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Detail` t2 where t2.parent = t1.name and t1.name=%s", prevdoc)
-    if enq:
-      sql("update `tabEnquiry` set status = %s where name=%s",(flag,enq[0][0]))
+	# Checks Quotation Status
+	# ------------------------
+	def check_prev_docstatus(self):
+		for d in getlist(self.doclist, 'sales_order_details'):
+			cancel_quo = sql("select name from `tabQuotation` where docstatus = 2 and name = '%s'" % d.prevdoc_docname)
+			if cancel_quo:
+				msgprint("Quotation :" + cstr(cancel_quo[0][0]) + " is already cancelled !")
+				raise Exception , "Validation Error. "
+	
+	def update_enquiry_status(self, prevdoc, flag):
+		enq = sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Detail` t2 where t2.parent = t1.name and t1.name=%s", prevdoc)
+		if enq:
+			sql("update `tabEnquiry` set status = %s where name=%s",(flag,enq[0][0]))
 
-  #update status of quotation, enquiry
-  #----------------------------------------
-  def update_prevdoc_status(self, flag):
-    for d in getlist(self.doclist, 'sales_order_details'):
-      if d.prevdoc_docname:
-        if flag=='submit':
-          sql("update `tabQuotation` set status = 'Order Confirmed' where name=%s",d.prevdoc_docname)
-          
-          #update enquiry
-          self.update_enquiry_status(d.prevdoc_docname, 'Order Confirmed')
-        elif flag == 'cancel':
-          chk = sql("select t1.name from `tabSales Order` t1, `tabSales Order Detail` t2 where t2.parent = t1.name and t2.prevdoc_docname=%s and t1.name!=%s and t1.docstatus=1", (d.prevdoc_docname,self.doc.name))
-          if not chk:
-            sql("update `tabQuotation` set status = 'Submitted' where name=%s",d.prevdoc_docname)
-            
-            #update enquiry
-            self.update_enquiry_status(d.prevdoc_docname, 'Quotation Sent')
-  
-  # Submit
-  # -------
-  def on_submit(self):
-    self.check_prev_docstatus()    
-    self.update_stock_ledger(update_stock = 1)
-    self.set_sms_msg(1)
-    # update customer's last sales order no.
-    update_customer = sql("update `tabCustomer` set last_sales_order = '%s', modified = '%s' where name = '%s'" %(self.doc.name, self.doc.modified, self.doc.customer))
-    get_obj('Sales Common').check_credit(self,self.doc.grand_total)
-    
-    # Check for Approving Authority
-    get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.grand_total, self)
-    
-    #update prevdoc status
-    self.update_prevdoc_status('submit')
-    # set SO status
-    set(self.doc, 'status', 'Submitted')
-  
-    # on submit notification    
-    if self.doc.email_id:
-      get_obj('Notification Control').notify_contact('Sales Order',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
-        
+	#update status of quotation, enquiry
+	#----------------------------------------
+	def update_prevdoc_status(self, flag):
+		for d in getlist(self.doclist, 'sales_order_details'):
+			if d.prevdoc_docname:
+				if flag=='submit':
+					sql("update `tabQuotation` set status = 'Order Confirmed' where name=%s",d.prevdoc_docname)
+					
+					#update enquiry
+					self.update_enquiry_status(d.prevdoc_docname, 'Order Confirmed')
+				elif flag == 'cancel':
+					chk = sql("select t1.name from `tabSales Order` t1, `tabSales Order Detail` t2 where t2.parent = t1.name and t2.prevdoc_docname=%s and t1.name!=%s and t1.docstatus=1", (d.prevdoc_docname,self.doc.name))
+					if not chk:
+						sql("update `tabQuotation` set status = 'Submitted' where name=%s",d.prevdoc_docname)
+						
+						#update enquiry
+						self.update_enquiry_status(d.prevdoc_docname, 'Quotation Sent')
+	
+	# Submit
+	# -------
+	def on_submit(self):
+		self.check_prev_docstatus()		
+		self.update_stock_ledger(update_stock = 1)
+		self.set_sms_msg(1)
+		# update customer's last sales order no.
+		update_customer = sql("update `tabCustomer` set last_sales_order = '%s', modified = '%s' where name = '%s'" %(self.doc.name, self.doc.modified, self.doc.customer))
+		get_obj('Sales Common').check_credit(self,self.doc.grand_total)
+		
+		# Check for Approving Authority
+		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.grand_total, self)
+		
+		#update prevdoc status
+		self.update_prevdoc_status('submit')
+		# set SO status
+		set(self.doc, 'status', 'Submitted')
+	
+		# on submit notification		
+		if self.doc.email_id:
+			get_obj('Notification Control').notify_contact('Sales Order',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
+				
  
 # ON CANCEL
 # ===============================================================================================
-  def on_cancel(self):
-    # Cannot cancel stopped SO
-    if self.doc.status == 'Stopped':
-      msgprint("Sales Order : '%s' cannot be cancelled as it is Stopped. Unstop it for any further transactions" %(self.doc.name))
-      raise Exception
-    self.check_nextdoc_docstatus()
-    self.update_stock_ledger(update_stock = -1)
-    self.set_sms_msg()
-    
-    #update prevdoc status
-    self.update_prevdoc_status('cancel')
-    
-    # ::::::::: SET SO STATUS ::::::::::
-    set(self.doc, 'status', 'Cancelled')
-    
-  # CHECK NEXT DOCSTATUS
-  # does not allow to cancel document if DN or RV made against it is SUBMITTED 
-  # ----------------------------------------------------------------------------
-  def check_nextdoc_docstatus(self):
-    # Checks Delivery Note
-    submit_dn = sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Detail` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
-    if submit_dn:
-      msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
-    # Checks Receivable Voucher
-    submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name))
-    if submit_rv:
-      msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
-    #check maintenance schedule
-    submit_ms = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
-    if submit_ms:
-      msgprint("Maintenance Schedule : " + cstr(submit_ms[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Schedule : "+ cstr(submit_ms[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
-    submit_mv = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
-    if submit_mv:
-      msgprint("Maintenance Visit : " + cstr(submit_mv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Visit : " + cstr(submit_mv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
+	def on_cancel(self):
+		# Cannot cancel stopped SO
+		if self.doc.status == 'Stopped':
+			msgprint("Sales Order : '%s' cannot be cancelled as it is Stopped. Unstop it for any further transactions" %(self.doc.name))
+			raise Exception
+		self.check_nextdoc_docstatus()
+		self.update_stock_ledger(update_stock = -1)
+		self.set_sms_msg()
+		
+		#update prevdoc status
+		self.update_prevdoc_status('cancel')
+		
+		# ::::::::: SET SO STATUS ::::::::::
+		set(self.doc, 'status', 'Cancelled')
+		
+	# CHECK NEXT DOCSTATUS
+	# does not allow to cancel document if DN or RV made against it is SUBMITTED 
+	# ----------------------------------------------------------------------------
+	def check_nextdoc_docstatus(self):
+		# Checks Delivery Note
+		submit_dn = sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Detail` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
+		if submit_dn:
+			msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
+		# Checks Receivable Voucher
+		submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name))
+		if submit_rv:
+			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
+		#check maintenance schedule
+		submit_ms = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
+		if submit_ms:
+			msgprint("Maintenance Schedule : " + cstr(submit_ms[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Schedule : "+ cstr(submit_ms[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
+		submit_mv = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
+		if submit_mv:
+			msgprint("Maintenance Visit : " + cstr(submit_mv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Visit : " + cstr(submit_mv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 
 
-  def check_modified_date(self):
-    mod_db = sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name)
-    date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
-    
-    if date_diff and date_diff[0][0]:
-      msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ")
-      raise Exception
+	def check_modified_date(self):
+		mod_db = sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name)
+		date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
+		
+		if date_diff and date_diff[0][0]:
+			msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ")
+			raise Exception
 
-  # STOP SALES ORDER
-  # ==============================================================================================      
-  # Stops Sales Order & no more transactions will be created against this Sales Order
-  def stop_sales_order(self):
-    self.check_modified_date()
-    self.update_stock_ledger(update_stock = -1,clear = 1)
-    # ::::::::: SET SO STATUS ::::::::::
-    set(self.doc, 'status', 'Stopped')
-    msgprint(self.doc.doctype + ": " + self.doc.name + " has been Stopped. To make transactions against this Sales Order you need to Unstop it.")
+	# STOP SALES ORDER
+	# ==============================================================================================			
+	# Stops Sales Order & no more transactions will be created against this Sales Order
+	def stop_sales_order(self):
+		self.check_modified_date()
+		self.update_stock_ledger(update_stock = -1,clear = 1)
+		# ::::::::: SET SO STATUS ::::::::::
+		set(self.doc, 'status', 'Stopped')
+		msgprint(self.doc.doctype + ": " + self.doc.name + " has been Stopped. To make transactions against this Sales Order you need to Unstop it.")
 
-  # UNSTOP SALES ORDER
-  # ==============================================================================================      
-  # Unstops Sales Order & now transactions can be continued against this Sales Order
-  def unstop_sales_order(self):
-    self.check_modified_date()
-    self.update_stock_ledger(update_stock = 1,clear = 1)
-    # ::::::::: SET SO STATUS ::::::::::
-    set(self.doc, 'status', 'Submitted')
-    msgprint(self.doc.doctype + ": " + self.doc.name + " has been Unstopped.")
+	# UNSTOP SALES ORDER
+	# ==============================================================================================			
+	# Unstops Sales Order & now transactions can be continued against this Sales Order
+	def unstop_sales_order(self):
+		self.check_modified_date()
+		self.update_stock_ledger(update_stock = 1,clear = 1)
+		# ::::::::: SET SO STATUS ::::::::::
+		set(self.doc, 'status', 'Submitted')
+		msgprint(self.doc.doctype + ": " + self.doc.name + " has been Unstopped.")
 
-  # UPDATE STOCK LEDGER
-  # ===============================================================================================
-  def update_stock_ledger(self, update_stock, clear = 0):
-    for d in self.get_item_list(clear):
-      stock_item = sql("SELECT is_stock_item FROM tabItem where name = '%s'"%(d[1]),as_dict = 1)       # stock ledger will be updated only if it is a stock item
-      if stock_item and stock_item[0]['is_stock_item'] == "Yes":
-        if not d[0]:
-          msgprint("Message: Please enter Reserved Warehouse for item %s as it is stock item."% d[1])
-          raise Exception
-        bin = get_obj('Warehouse', d[0]).update_bin( 0, flt(update_stock) * flt(d[2]), 0, 0, 0, d[1], self.doc.transaction_date)
+	# UPDATE STOCK LEDGER
+	# ===============================================================================================
+	def update_stock_ledger(self, update_stock, clear = 0):
+		for d in self.get_item_list(clear):
+			stock_item = sql("SELECT is_stock_item FROM tabItem where name = '%s'"%(d[1]),as_dict = 1)			 # stock ledger will be updated only if it is a stock item
+			if stock_item and stock_item[0]['is_stock_item'] == "Yes":
+				if not d[0]:
+					msgprint("Message: Please enter Reserved Warehouse for item %s as it is stock item."% d[1])
+					raise Exception
+				bin = get_obj('Warehouse', d[0]).update_bin( 0, flt(update_stock) * flt(d[2]), 0, 0, 0, d[1], self.doc.transaction_date)
+	
+	# Gets Items from packing list
+	#=================================
+	def get_item_list(self, clear):
+		return get_obj('Sales Common').get_item_list( self, clear)
+		
+	# SET MESSAGE FOR SMS
+	#======================
+	def set_sms_msg(self, is_submitted = 0):
+		if is_submitted:
+			if not self.doc.amended_from:
+				msg = 'Sales Order: '+self.doc.name+' has been made against PO no: '+cstr(self.doc.po_no)
+				set(self.doc, 'message', msg)
+			else:
+				msg = 'Sales Order has been amended. New SO no:'+self.doc.name
+				set(self.doc, 'message', msg)
+		else:
+			msg = 'Sales Order: '+self.doc.name+' has been cancelled.'
+			set(self.doc, 'message', msg)
+		
+	# SEND SMS
+	# =========
+	def send_sms(self):
+		if not self.doc.customer_mobile_no:
+			msgprint("Please enter customer mobile no")
+		elif not self.doc.message:
+			msgprint("Please enter the message you want to send")
+		else:
+			msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message))
 
-  # Gets Items from packing list
-  #=================================
-  def get_item_list(self, clear):
-    return get_obj('Sales Common').get_item_list( self, clear)
-    
-  # SET MESSAGE FOR SMS
-  #======================
-  def set_sms_msg(self, is_submitted = 0):
-    if is_submitted:
-      if not self.doc.amended_from:
-        msg = 'Sales Order: '+self.doc.name+' has been made against PO no: '+cstr(self.doc.po_no)
-        set(self.doc, 'message', msg)
-      else:
-        msg = 'Sales Order has been amended. New SO no:'+self.doc.name
-        set(self.doc, 'message', msg)
-    else:
-      msg = 'Sales Order: '+self.doc.name+' has been cancelled.'
-      set(self.doc, 'message', msg)
-    
-  # SEND SMS
-  # =========
-  def send_sms(self):
-    if not self.doc.customer_mobile_no:
-      msgprint("Please enter customer mobile no")
-    elif not self.doc.message:
-      msgprint("Please enter the message you want to send")
-    else:
-      msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message))
+	# on update
+	def on_update(self):
+		pass
 
-  # on update
-  def on_update(self):
-    pass
-
-  # Repair Sales Order
-  # ===========================================
-  def repair_sales_order(self):
-    get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
+	# Repair Sales Order
+	# ===========================================
+	def repair_sales_order(self):
+		get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
diff --git a/selling/doctype/sales_order/sales_order.txt b/selling/doctype/sales_order/sales_order.txt
index 69773dd..98833d1 100644
--- a/selling/doctype/sales_order/sales_order.txt
+++ b/selling/doctype/sales_order/sales_order.txt
@@ -5,15 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:21',
 		'docstatus': 0,
-		'modified': '2011-06-27 16:05:56',
+		'modified': '2011-08-09 17:06:09',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1309170956',
-		'client_script': "cur_frm.add_fetch('customer','sales_person','sales_person');",
+		'_last_update': '1311621379',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'document_type': 'Transaction',
@@ -28,7 +27,7 @@
 		'show_in_menu': 0,
 		'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed',
 		'tag_fields': 'delivery_status,billing_status',
-		'version': 593
+		'version': 597
 	},
 
 	# These values are common for all DocField
@@ -58,28 +57,23 @@
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 1,
-		'permlevel': 1,
-		'role': 'Sales Manager',
-		'submit': 0,
-		'write': 0
+		'permlevel': 0,
+		'role': 'Production Manager'
 	},
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 2,
-		'permlevel': 0,
+		'permlevel': 1,
 		'role': 'Sales Manager',
-		'submit': 1,
-		'write': 1
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
@@ -90,6 +84,19 @@
 		'doctype': 'DocPerm',
 		'idx': 3,
 		'permlevel': 0,
+		'role': 'Sales Manager',
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 4,
+		'permlevel': 0,
 		'role': 'Sales User',
 		'submit': 1,
 		'write': 1
@@ -101,7 +108,7 @@
 		'cancel': 0,
 		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 4,
+		'idx': 5,
 		'permlevel': 1,
 		'role': 'Sales User',
 		'submit': 0,
@@ -111,7 +118,7 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 5,
+		'idx': 6,
 		'match': 'customer_name',
 		'permlevel': 0,
 		'role': 'Customer'
@@ -120,7 +127,7 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 6,
+		'idx': 7,
 		'permlevel': 2,
 		'role': 'Accounts User',
 		'write': 1
@@ -132,7 +139,7 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 7,
+		'idx': 8,
 		'permlevel': 0,
 		'role': 'Maintenance Manager',
 		'submit': 1,
@@ -142,7 +149,7 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 8,
+		'idx': 9,
 		'permlevel': 1,
 		'role': 'Maintenance Manager'
 	},
@@ -153,7 +160,7 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 9,
+		'idx': 10,
 		'permlevel': 0,
 		'role': 'Maintenance User',
 		'submit': 1,
@@ -163,7 +170,7 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 10,
+		'idx': 11,
 		'permlevel': 1,
 		'role': 'Maintenance User'
 	},
@@ -204,7 +211,7 @@
 		'no_copy': 1,
 		'oldfieldname': 'naming_series',
 		'oldfieldtype': 'Select',
-		'options': 'SO\nSO/10-11/',
+		'options': 'PI/2011/\nSO\nSO/10-11/\nSO1112',
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1
@@ -504,7 +511,7 @@
 		'fieldtype': 'Currency',
 		'idx': 23,
 		'in_filter': 1,
-		'label': '% Qty Billed',
+		'label': '% Amount Billed',
 		'no_copy': 1,
 		'oldfieldname': 'per_billed',
 		'oldfieldtype': 'Currency',
@@ -607,12 +614,22 @@
 
 	# DocField
 	{
+		'doctype': 'DocField',
+		'fieldname': 'vehicle_detail',
+		'fieldtype': 'Small Text',
+		'idx': 30,
+		'label': 'Vehicle Detail',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'quotation_date',
 		'fieldtype': 'Date',
 		'hidden': 1,
-		'idx': 30,
+		'idx': 31,
 		'label': 'Quotation Date',
 		'no_copy': 0,
 		'oldfieldname': 'quotation_date',
@@ -627,7 +644,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 31,
+		'idx': 32,
 		'label': 'Pull Quotation Details',
 		'oldfieldtype': 'Button',
 		'options': 'pull_quotation_details',
@@ -642,7 +659,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'price_list_name',
 		'fieldtype': 'Select',
-		'idx': 32,
+		'idx': 33,
 		'label': 'Price List',
 		'oldfieldname': 'price_list_name',
 		'oldfieldtype': 'Select',
@@ -658,7 +675,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 33,
+		'idx': 34,
 		'permlevel': 0,
 		'width': '50%'
 	},
@@ -670,7 +687,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'currency',
 		'fieldtype': 'Select',
-		'idx': 34,
+		'idx': 35,
 		'label': 'Currency',
 		'oldfieldname': 'currency',
 		'oldfieldtype': 'Select',
@@ -689,7 +706,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'conversion_rate',
 		'fieldtype': 'Currency',
-		'idx': 35,
+		'idx': 36,
 		'label': 'Conversion Rate',
 		'oldfieldname': 'conversion_rate',
 		'oldfieldtype': 'Currency',
@@ -704,7 +721,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 36,
+		'idx': 37,
 		'permlevel': 0
 	},
 
@@ -715,7 +732,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'sales_order_details',
 		'fieldtype': 'Table',
-		'idx': 37,
+		'idx': 38,
 		'label': 'Sales Order Details',
 		'oldfieldname': 'sales_order_details',
 		'oldfieldtype': 'Table',
@@ -729,7 +746,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 38,
+		'idx': 39,
 		'label': 'Clear Table',
 		'oldfieldtype': 'Button',
 		'options': 'clear_sales_order_details',
@@ -741,7 +758,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 39,
+		'idx': 40,
 		'label': 'Re-Calculate Values',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -755,7 +772,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'net_total',
 		'fieldtype': 'Currency',
-		'idx': 40,
+		'idx': 41,
 		'label': 'Net Total*',
 		'oldfieldname': 'net_total',
 		'oldfieldtype': 'Currency',
@@ -770,7 +787,7 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 41,
+		'idx': 42,
 		'label': 'Note1',
 		'oldfieldtype': 'HTML',
 		'options': '<b>NOTE :</b> * In Base Currency',
@@ -783,7 +800,7 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 42,
+		'idx': 43,
 		'label': 'Taxes',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -795,7 +812,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'charge',
 		'fieldtype': 'Link',
-		'idx': 43,
+		'idx': 44,
 		'label': 'Select Charges Master',
 		'oldfieldname': 'charge',
 		'oldfieldtype': 'Link',
@@ -808,7 +825,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 44,
+		'idx': 45,
 		'label': 'Get Charges',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -820,7 +837,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'other_charges',
 		'fieldtype': 'Table',
-		'idx': 45,
+		'idx': 46,
 		'label': 'Other Charges',
 		'oldfieldname': 'other_charges',
 		'oldfieldtype': 'Table',
@@ -832,7 +849,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 46,
+		'idx': 47,
 		'label': 'Calculate Charges',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -845,7 +862,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'other_charges_total',
 		'fieldtype': 'Currency',
-		'idx': 47,
+		'idx': 48,
 		'label': 'Charges Total*',
 		'oldfieldname': 'other_charges_total',
 		'oldfieldtype': 'Currency',
@@ -859,7 +876,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'grand_total',
 		'fieldtype': 'Currency',
-		'idx': 48,
+		'idx': 49,
 		'label': 'Grand Total*',
 		'oldfieldname': 'grand_total',
 		'oldfieldtype': 'Currency',
@@ -873,7 +890,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 49,
+		'idx': 50,
 		'label': 'OT Notes',
 		'oldfieldtype': 'HTML',
 		'options': '<b>NOTE :</b> * In Base Currency',
@@ -885,7 +902,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 50,
+		'idx': 51,
 		'label': 'Other Charges Calculation',
 		'oldfieldtype': 'HTML',
 		'permlevel': 0,
@@ -897,7 +914,7 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 51,
+		'idx': 52,
 		'label': 'Totals',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -909,7 +926,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'rounded_total',
 		'fieldtype': 'Currency',
-		'idx': 52,
+		'idx': 53,
 		'label': 'Rounded Total',
 		'oldfieldname': 'rounded_total',
 		'oldfieldtype': 'Currency',
@@ -925,7 +942,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'in_words',
 		'fieldtype': 'Data',
-		'idx': 53,
+		'idx': 54,
 		'label': 'In Words',
 		'oldfieldname': 'in_words',
 		'oldfieldtype': 'Data',
@@ -938,7 +955,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 54,
+		'idx': 55,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'print_hide': 1,
@@ -950,7 +967,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'grand_total_export',
 		'fieldtype': 'Currency',
-		'idx': 55,
+		'idx': 56,
 		'label': 'Grand Total (Export)',
 		'oldfieldname': 'grand_total_export',
 		'oldfieldtype': 'Currency',
@@ -965,7 +982,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'rounded_total_export',
 		'fieldtype': 'Currency',
-		'idx': 56,
+		'idx': 57,
 		'label': 'Rounded Total (Export)',
 		'oldfieldname': 'rounded_total_export',
 		'oldfieldtype': 'Currency',
@@ -981,7 +998,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'in_words_export',
 		'fieldtype': 'Data',
-		'idx': 57,
+		'idx': 58,
 		'label': 'In Words (Export)',
 		'oldfieldname': 'in_words_export',
 		'oldfieldtype': 'Data',
@@ -995,7 +1012,7 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 58,
+		'idx': 59,
 		'label': 'Terms',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -1007,7 +1024,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'tc_name',
 		'fieldtype': 'Link',
-		'idx': 59,
+		'idx': 60,
 		'label': 'Select Terms',
 		'oldfieldname': 'tc_name',
 		'oldfieldtype': 'Link',
@@ -1021,7 +1038,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 60,
+		'idx': 61,
 		'label': 'Get Terms',
 		'oldfieldtype': 'Button',
 		'options': 'get_tc_details',
@@ -1033,7 +1050,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
-		'idx': 61,
+		'idx': 62,
 		'label': 'Terms HTML',
 		'oldfieldtype': 'HTML',
 		'options': 'You can add Terms and Notes that will be printed in the Transaction',
@@ -1046,7 +1063,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'terms',
 		'fieldtype': 'Text Editor',
-		'idx': 62,
+		'idx': 63,
 		'label': 'Term Details',
 		'oldfieldname': 'terms',
 		'oldfieldtype': 'Text Editor',
@@ -1060,7 +1077,7 @@
 		'description': 'Filling in additional information about the Sales Order will help you analyze your data better.',
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 63,
+		'idx': 64,
 		'label': 'More Info',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -1071,7 +1088,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 64,
+		'idx': 65,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'print_hide': 1,
@@ -1084,7 +1101,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'letter_head',
 		'fieldtype': 'Select',
-		'idx': 65,
+		'idx': 66,
 		'label': 'Letter Head',
 		'oldfieldname': 'letter_head',
 		'oldfieldtype': 'Select',
@@ -1100,7 +1117,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 66,
+		'idx': 67,
 		'in_filter': 1,
 		'label': 'Company',
 		'oldfieldname': 'company',
@@ -1119,7 +1136,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 67,
+		'idx': 68,
 		'in_filter': 1,
 		'label': 'Fiscal Year',
 		'oldfieldname': 'fiscal_year',
@@ -1139,7 +1156,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'select_print_heading',
 		'fieldtype': 'Link',
-		'idx': 68,
+		'idx': 69,
 		'label': 'Select Print Heading',
 		'no_copy': 1,
 		'oldfieldname': 'select_print_heading',
@@ -1154,7 +1171,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 69,
+		'idx': 70,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'print_hide': 1,
@@ -1167,7 +1184,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'source',
 		'fieldtype': 'Select',
-		'idx': 70,
+		'idx': 71,
 		'label': 'Source',
 		'oldfieldname': 'source',
 		'oldfieldtype': 'Select',
@@ -1183,7 +1200,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'campaign',
 		'fieldtype': 'Link',
-		'idx': 71,
+		'idx': 72,
 		'label': 'Campaign',
 		'oldfieldname': 'campaign',
 		'oldfieldtype': 'Link',
@@ -1198,7 +1215,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'note',
 		'fieldtype': 'Text',
-		'idx': 72,
+		'idx': 73,
 		'label': 'Note',
 		'oldfieldname': 'note',
 		'oldfieldtype': 'Text',
@@ -1213,7 +1230,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'cancel_reason',
 		'fieldtype': 'Data',
-		'idx': 73,
+		'idx': 74,
 		'label': 'Cancel Reason',
 		'no_column': 0,
 		'no_copy': 1,
@@ -1229,7 +1246,7 @@
 		'fieldname': 'delivery_status',
 		'fieldtype': 'Select',
 		'hidden': 1,
-		'idx': 74,
+		'idx': 75,
 		'label': 'Delivery Status',
 		'no_column': 0,
 		'no_copy': 1,
@@ -1244,7 +1261,7 @@
 		'fieldname': 'billing_status',
 		'fieldtype': 'Select',
 		'hidden': 1,
-		'idx': 75,
+		'idx': 76,
 		'label': 'Billing Status',
 		'no_column': 0,
 		'no_copy': 1,
@@ -1260,7 +1277,7 @@
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
 		'hidden': 0,
-		'idx': 76,
+		'idx': 77,
 		'label': 'Packing List',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -1273,7 +1290,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'packing_details',
 		'fieldtype': 'Table',
-		'idx': 77,
+		'idx': 78,
 		'label': 'Packing Details',
 		'oldfieldname': 'packing_details',
 		'oldfieldtype': 'Table',
@@ -1286,7 +1303,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 78,
+		'idx': 79,
 		'label': 'Sales Team',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0,
@@ -1300,7 +1317,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'sales_partner',
 		'fieldtype': 'Link',
-		'idx': 79,
+		'idx': 80,
 		'in_filter': 1,
 		'label': 'Sales Partner',
 		'oldfieldname': 'sales_partner',
@@ -1318,7 +1335,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'commission_rate',
 		'fieldtype': 'Currency',
-		'idx': 80,
+		'idx': 81,
 		'label': 'Commission Rate',
 		'oldfieldname': 'commission_rate',
 		'oldfieldtype': 'Currency',
@@ -1333,7 +1350,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'total_commission',
 		'fieldtype': 'Currency',
-		'idx': 81,
+		'idx': 82,
 		'label': 'Total Commission',
 		'oldfieldname': 'total_commission',
 		'oldfieldtype': 'Currency',
@@ -1347,7 +1364,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'sales_team',
 		'fieldtype': 'Table',
-		'idx': 82,
+		'idx': 83,
 		'label': 'Sales Team1',
 		'oldfieldname': 'sales_team',
 		'oldfieldtype': 'Table',
@@ -1361,7 +1378,7 @@
 		'allow_on_submit': 1,
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 83,
+		'idx': 84,
 		'label': 'Repair Sales Order',
 		'oldfieldtype': 'Button',
 		'options': 'repair_sales_order',
diff --git a/setup/doctype/email_settings/email_settings.py b/setup/doctype/email_settings/email_settings.py
index 37de7bc..ef0a763 100644
--- a/setup/doctype/email_settings/email_settings.py
+++ b/setup/doctype/email_settings/email_settings.py
@@ -13,7 +13,7 @@
 		for r in res:
 			ret[cstr(r[0])]=r[1] and cstr(r[1]) or ''
 				
-		return str(ret)
+		return ret
 
 	def set_cp_value(self, key):
 		"""
diff --git a/setup/doctype/personalize/personalize.py b/setup/doctype/personalize/personalize.py
index 6a15102..3264546 100644
--- a/setup/doctype/personalize/personalize.py
+++ b/setup/doctype/personalize/personalize.py
@@ -28,4 +28,4 @@
 	#
 	def set_html_from_image(self):
 		file_name = self.doc.file_list.split(',')[0]
-		self.doc.header_html = '<div><img src="cgi-bin/getfile.cgi?name=' + file_name + '"/></div>'
+		self.doc.header_html = '<div><img style="max-height: 120px; max-width: 600px" src="index.cgi?cmd=get_file&fname=' + file_name + '"/></div>'
diff --git a/setup/page/import_data/import_data.html b/setup/page/import_data/import_data.html
index a4b30f4..5b30dd2 100644
--- a/setup/page/import_data/import_data.html
+++ b/setup/page/import_data/import_data.html
@@ -32,7 +32,7 @@
 </tbody>
 </table>
 </form>
-<div style="background-color: #FFE; padding: 10px; margin: 10px;">
+<div style="background-color: #FFE; padding: 13px; margin: 17px;">
 <h3>Data Import Guide</h3>
 <ol>
 <li>Get the template of the DocType for which you want to import in CSV (Comma seperated values) format.</li>
diff --git a/setup/page/import_data/import_data.js b/setup/page/import_data/import_data.js
index aa0bdbd..f1601e7 100644
--- a/setup/page/import_data/import_data.js
+++ b/setup/page/import_data/import_data.js
@@ -1,45 +1,55 @@
 pscript['onload_Import Data'] = function() {
-  
-  //alert(profile.can_get_report);
+	
+	//alert(profile.can_get_report);
 
-  callback = function(r,rt) {
-    var h = new PageHeader('di_header','Import Data','Tool to download template and upload data');
-    var sel = $i('import_template');
-    if(r.message){
-      add_sel_options(sel, r.message);
-      sel.onchange=function(){
-        $i('child_tab_lst').innerHTML ='';
-        if(sel.value != 'Select Master...'){
-          $c_obj('Import Data Control','get_child_lst',sel.value,
-            function(r,rt){
-              var me = this;
-              $y($i('child_tab_lst'),{backgroundColor:'#EEEEEE'})
-              var desc = $a($i('child_tab_lst'), 'div', '', {padding:'8px'});
-              
-              desc.innerHTML = "<h4>Please click on following link(s) to download template.</h4>";
+	callback = function(r,rt) {
+		var h = new PageHeader('di_header','Import Data','Tool to download template and upload data');
+		var sel = $i('import_template');
+		if(r.message){
+			add_sel_options(sel, r.message);
+
+			// please collapse here when editing :)
+			sel.onchange=function(){
+				$i('child_tab_lst').innerHTML ='';
+				if(sel.value != 'Select Master...'){
+					$c_obj('Import Data Control','get_child_lst',sel.value,
+						function(r,rt){
+							var me = this;
+							$y($i('child_tab_lst'),{backgroundColor:'#EEEEEE', margin: '17px 17px', padding: '13px'})
+							var desc = $a($i('child_tab_lst'), 'div', '', {padding:'4px'});
+							
+							desc.innerHTML = "<b>Download template(s) for importing "+sel_val(sel)+"</b>";
  
-              
-              var parent = $a($i('child_tab_lst'), 'div');
-              var tab = make_table(parent,r.message.length,1,'100%',[],{padding:'8px',fontSize:'15px',borderCollapse: 'collapse'});
-              
-              for(var i=0;i<r.message.length;i++){
-                var dt= $a($td(tab,i,0), 'span', 'link_type');
-                dt.innerHTML = r.message[i];
-                dt.nm = r.message[i];
-                
-
-                dt.onclick = function(){ 
-					var ovr = $('input[name="overwrite"]:checked').length;
-                    window.location = outUrl + '?cmd=get_template&dt=' + this.nm + (ovr ? '&overwrite=1' : '');
-                }
-              }
-            }  
-          );
-        }
-      }
-    }
-  }
-  $c_obj('Import Data Control','get_master_lst','',callback);
-  
+							
+							var parent = $a($i('child_tab_lst'), 'div');
+							var tab = make_table(parent,r.message.length,1,'100%',[],{padding:'3px',borderCollapse: 'collapse'});
+							
+							for(var i=0;i<r.message.length;i++){
+								var dt= $a($td(tab,i,0), 'span', 'link_type');
+								dt.innerHTML = r.message[i];
+								dt.nm = r.message[i];
+								
+								dt.onclick = function(){ 
+									var ovr = $('input[name="overwrite"]:checked').length;
+										window.location = outUrl + '?cmd=get_template&dt=' + this.nm + (ovr ? '&overwrite=1' : '');
+								}
+							}
+						}	
+					);
+				}
+			}
+		}
+	
+		// set the default (if given in url)
+		if(window.location.hash) {
+			var to_set = window.location.hash.split('/').slice(-1)[0];
+			if(in_list(r.message, to_set)) {
+				sel.value = to_set;
+				sel.onchange();
+			}
+		}
+	}
+	$c_obj('Import Data Control','get_master_lst','',callback);
+	
 
 }
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 74e6f8a..3534dad 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -40,15 +40,10 @@
   def validate_fiscal_year(self):
     get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
 
-  # ******************* Get Customer Details ***********************
-  #def get_customer_details(self):
-  #  sales_com_obj = get_obj('Sales Common')
-  #  sales_com_obj.get_customer_details(self)
-  #  sales_com_obj.get_shipping_details(self)
 
   # ****** Get contact person details based on customer selected ****
   def get_contact_details(self):
-    return cstr(get_obj('Sales Common').get_contact_details(self,0))
+    return get_obj('Sales Common').get_contact_details(self,0)
 
   # *********** Get Commission rate of Sales Partner ****************
   def get_comm_rate(self, sales_partner):
@@ -122,7 +117,7 @@
     ret = {
        'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
     }
-    return cstr(ret)
+    return ret
 
     
 # OTHER CHARGES TRIGGER FUNCTIONS
diff --git a/stock/doctype/delivery_note/delivery_note.txt b/stock/doctype/delivery_note/delivery_note.txt
index 97280e9..b77a6a5 100644
--- a/stock/doctype/delivery_note/delivery_note.txt
+++ b/stock/doctype/delivery_note/delivery_note.txt
@@ -3,16 +3,16 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-08-08 17:08:57',
+		'creation': '2011-04-18 15:58:20',
 		'docstatus': 0,
-		'modified': '2011-06-27 16:42:01',
+		'modified': '2011-08-09 17:10:45',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1309173122',
+		'_last_update': '1311621379',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'document_type': 'Transaction',
@@ -27,7 +27,7 @@
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
 		'tag_fields': 'billing_status',
-		'version': 444
+		'version': 446
 	},
 
 	# These values are common for all DocField
@@ -70,15 +70,15 @@
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 2,
-		'permlevel': 1,
-		'role': 'Material User',
-		'submit': 0,
-		'write': 0
+		'permlevel': 0,
+		'role': 'Sales User',
+		'submit': 1,
+		'write': 1
 	},
 
 	# DocPerm
@@ -89,22 +89,22 @@
 		'doctype': 'DocPerm',
 		'idx': 3,
 		'permlevel': 0,
-		'role': 'Material Manager',
+		'role': 'Material Master Manager',
 		'submit': 1,
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 4,
-		'permlevel': 1,
+		'permlevel': 0,
 		'role': 'Material Manager',
-		'submit': 0,
-		'write': 0
+		'submit': 1,
+		'write': 1
 	},
 
 	# DocPerm
@@ -115,60 +115,25 @@
 		'doctype': 'DocPerm',
 		'idx': 5,
 		'permlevel': 0,
-		'role': 'Sales User',
+		'role': 'Sales Manager',
 		'submit': 1,
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 6,
 		'permlevel': 1,
-		'role': 'Sales User',
-		'submit': 0,
-		'write': 0
+		'role': 'All'
 	},
 
 	# DocPerm
 	{
-		'cancel': 0,
-		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 7,
-		'permlevel': 0,
-		'role': 'Accounts User',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 8,
-		'permlevel': 1,
-		'role': 'Accounts User'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 9,
-		'match': 'customer_name',
-		'permlevel': 0,
-		'role': 'Customer'
-	},
-
-	# DocPerm
-	{
-		'doctype': 'DocPerm',
-		'idx': 10,
 		'permlevel': 2,
-		'role': 'All',
-		'write': 1
+		'role': 'All'
 	},
 
 	# DocField
@@ -332,7 +297,7 @@
 		'permlevel': 0,
 		'print_hide': 0,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '100px'
 	},
 
@@ -352,7 +317,7 @@
 		'permlevel': 1,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -366,13 +331,13 @@
 		'fieldtype': 'Currency',
 		'idx': 15,
 		'in_filter': 1,
-		'label': '% Qty Billed',
+		'label': '% Amount Billed',
 		'no_copy': 1,
 		'oldfieldname': 'per_billed',
 		'oldfieldtype': 'Currency',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -391,7 +356,7 @@
 		'oldfieldtype': 'Currency',
 		'permlevel': 1,
 		'print_hide': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -439,7 +404,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -453,7 +418,7 @@
 		'options': 'Customer Group',
 		'permlevel': 0,
 		'print_hide': 1,
-		'search_index': 0
+		'search_index': 1
 	},
 
 	# DocField
@@ -1014,7 +979,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
@@ -1032,7 +997,7 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'reqd': 1,
-		'search_index': 0,
+		'search_index': 1,
 		'width': '150px'
 	},
 
diff --git a/stock/doctype/delivery_note/tests.py b/stock/doctype/delivery_note/tests.py
deleted file mode 100644
index df04c41..0000000
--- a/stock/doctype/delivery_note/tests.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import unittest
-import webnotes
-
-from webnotes.model.code import get_obj
-
-class SubmissionTest(unittest.TestCase):
-	def setUp(self):
-		self.dn = webnotes.testing.create('Delivery Note')
-		self.dn_items = []
-		
-		# get a line item for testing
-		for d in self.dn.doclist:
-			if d.doctype=='Delivery Note Detail':
-				self.dn_items.append(d)
-				
-		self.old_bin = get_obj('Warehouse', self.line_item[0].warehouse).get_bin(self.line_item[0].item_code)
-		self.dn.on_submit()
-
-	def test_bin_is_updated(self):
-		"tests if bin quantity is affected when on submission"
-		bin = get_obj('Warehouse', self.line_item.warehouse).get_bin(self.line_item[0].item_code)
-		self.assertTrue(bin.actual_qty == self.old_bin.actual_qty - self.line_item[0].qty)
-		
-	def test_sales_order_is_updated(self):
-		"tests if"
\ No newline at end of file
diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py
index ae67749..d51fb3a 100644
--- a/stock/doctype/item/item.py
+++ b/stock/doctype/item/item.py
@@ -27,7 +27,7 @@
 		ret = {
 			'tax_rate'	:	rate and flt(rate[0][0]) or 0
 		}
-		return str(ret)
+		return ret
 
 	def on_update(self):
 		bin = sql("select stock_uom from `tabBin` where item_code = '%s' " % self.doc.item_code)
@@ -178,3 +178,7 @@
 
 		sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name)
 		return sle and 'exists' or 'not exists'
+		
+	def on_rename(self,newdn,olddn):
+		sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))	
+		
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 0eda680..4329980 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -42,18 +42,15 @@
 #-----------------Validation For Fiscal Year------------------------
   def validate_fiscal_year(self):
     get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Transaction Date')
-    
-  # Get Supplier Details 
-  #def get_supplier_details(self, name = ''):
-  #  return cstr(get_obj(dt='Purchase Common').get_supplier_details(name))
+   
   
   # Get Item Details
   def get_item_details(self, arg = ''):
-    return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg))
+    return get_obj(dt='Purchase Common').get_item_details(self,arg)
   
   # Get UOM Details
   def get_uom_details(self, arg = ''):
-    return cstr(get_obj(dt='Purchase Common').get_uom_details(arg))
+    return get_obj(dt='Purchase Common').get_uom_details(arg)
   
   # GET TERMS & CONDITIONS
   # =====================================================================================
@@ -62,7 +59,7 @@
 
   # get available qty at warehouse
   def get_bin_details(self, arg = ''):
-    return cstr(get_obj(dt='Purchase Common').get_bin_details(arg))
+    return get_obj(dt='Purchase Common').get_bin_details(arg)f
 
   # Pull Purchase Order
   def get_po_details(self):
diff --git a/stock/doctype/sales_bom/sales_bom.py b/stock/doctype/sales_bom/sales_bom.py
index 3bd6fa5..ce4567e 100644
--- a/stock/doctype/sales_bom/sales_bom.py
+++ b/stock/doctype/sales_bom/sales_bom.py
@@ -38,7 +38,7 @@
   def get_item_details(self, name):
     det = sql("select description, stock_uom from `tabItem` where name = '%s' " % cstr(name))
     rate = sql("select ref_rate from `tabRef Rate Detail` where price_list_name = %s and parent = %s and ref_currency = %s", (self.doc.price_list, name, self.doc.currency))
-    return cstr({'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00})
+    return {'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00}
 
 
   def get_main_item(self):
diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py
index b380995..47f0394 100644
--- a/stock/doctype/stock_entry/stock_entry.py
+++ b/stock/doctype/stock_entry/stock_entry.py
@@ -54,7 +54,7 @@
 			'conversion_factor'		: 1,
      		'batch_no'          	: ''
 		}
-		return str(ret)
+		return ret
 
 
 	# Get UOM Details
@@ -70,7 +70,7 @@
 				'conversion_factor'		: flt(uom[0]['conversion_factor']),
 				'transfer_qty'			: flt(arg['qty']) * flt(uom[0]['conversion_factor']),
 			}
-		return str(ret)
+		return ret
 
 		
 	# get stock and incoming rate on posting date
@@ -396,7 +396,7 @@
 			'customer_name'		: res and res[0][1] or '',
 			'customer_address' : res and res[0][2] or ''}
 
-		return str(ret)
+		return ret
 
 
 	def get_cust_addr(self):
@@ -405,7 +405,7 @@
 			'customer_name'		: res and res[0][0] or '',
 			'customer_address' : res and res[0][1] or ''}
 
-		return str(ret)
+		return ret
 
 
 		
@@ -415,7 +415,7 @@
 			'supplier' : res and res[0][0] or '',
 			'supplier_name' :res and res[0][1] or '',
 			'supplier_address' : res and res[0][2] or ''}
-		return str(ret)
+		return ret
 		
 
 	def get_supp_addr(self):
@@ -423,4 +423,4 @@
 		ret = {
 			'supplier_name' : res and res[0][0] or '',
 			'supplier_address' : res and res[0][1] or ''}
-		return str(ret)
+		return ret
diff --git a/stock/doctype/stock_entry_detail/stock_entry_detail.txt b/stock/doctype/stock_entry_detail/stock_entry_detail.txt
index 1d2408b..50b7154 100644
--- a/stock/doctype/stock_entry_detail/stock_entry_detail.txt
+++ b/stock/doctype/stock_entry_detail/stock_entry_detail.txt
@@ -253,7 +253,8 @@
 		'no_copy': 1,
 		'oldfieldname': 'serial_no',
 		'oldfieldtype': 'Text',
-		'permlevel': 0
+		'permlevel': 0,
+		'reqd': 0
 	},
 
 	# DocField
@@ -280,4 +281,4 @@
 		'oldfieldtype': 'Currency',
 		'permlevel': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index e603d1f..f8ac737 100644
--- a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -22,7 +22,7 @@
     self.doc, self.doclist = d,dl
 
   def get_stock_uom(self, item_code):
-    return cstr({'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))})
+    return {'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))}
   
   def validate_mandatory(self):
     if not cstr(self.doc.item_code):
diff --git a/support/doctype/customer_issue/customer_issue.py b/support/doctype/customer_issue/customer_issue.py
index db63cc2..12a8ebd 100644
--- a/support/doctype/customer_issue/customer_issue.py
+++ b/support/doctype/customer_issue/customer_issue.py
@@ -27,37 +27,6 @@
   def autoname(self):
     #self.doc.name = make_autoname('CI/' + self.doc.fiscal_year + '/.######')
     self.doc.name = make_autoname(self.doc.naming_series + '.######')
-
-  #def get_customer_details(self):
-  #  details = sql("select address, territory, customer_group, customer_name from `tabCustomer` where name = '%s' and docstatus != 2" %(self.doc.customer), as_dict = 1)
-  #  if details:
-  #    ret = {
-  #      'customer_address'  :  details and details[0]['address'] or '',
-  #      'customer_name'  :  details and details[0]['customer_name'] or '',
-  #      'territory'       :  details and details[0]['territory'] or '',
-  #      'customer_group'    :  details and details[0]['customer_group'] or ''
-  #    }
-  #    # ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
-  #    contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where customer_name = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(self.doc.customer), as_dict = 1)
-  #    ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
-  #    ret['contact_no']     = contact_det and contact_det[0]['contact_no'] or ''
-  #    ret['email_id']       = contact_det and contact_det[0]['email_id'] or ''
-  #  
-  #    return cstr(ret)
-  #  else:
-  #    msgprint("Customer : %s does not exist in system." % (name))
-  #    raise Exception
-
-  # Get customer's contact person details
-  # ==============================================================
-  #def get_contact_details(self):
-  #  contact = sql("select contact_no, email_id from `tabContact` where contact_name = '%s' and customer_name = '%s' and docstatus != 2" %(self.doc.contact_person, self.doc.customer), as_dict = 1)
-  #  ret = {
-  #    'contact_no'       :    contact and contact[0]['contact_no'] or '',
-  #    'email_id'         :    contact and contact[0]['email_id'] or ''
-  #  }
-  #  return str(ret)
-    
     
 #check if maintenance schedule already generated
 #============================================
@@ -66,7 +35,7 @@
     nm = nm and nm[0][0] or ''
     
     if not nm:
-      return cstr('No')    
+      return 'No'
   
   def on_submit(self):
     if session['user'] != 'Guest':
diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.py b/support/doctype/maintenance_schedule/maintenance_schedule.py
index 0d6ef80..d5c90b5 100644
--- a/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -38,21 +38,8 @@
       'item_name': item and item[0]['item_name'] or '',
       'description' : item and item[0]['description'] or ''
     }
-    return str(ret)
-  
-  #pull customer details
-  #-------------------------
-  #def get_customer_details(self):
-  #  det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1)
-  #  
-  #  ret = {
-  #    'customer_name':  det and det[0]['customer_name'] or '',
-  #    'address'  :  det and det[0]['address'] or '',
-  #    'territory':  det and det[0]['territory'] or '',
-  #    'contact_person' : det and det[0]['contact_name'] or ''
-  #  }
-  #  return str(ret)
-  
+    return ret
+    
   # generate maintenance schedule
   #-------------------------------------
   def generate_schedule(self):
@@ -132,7 +119,7 @@
       count = period/365
     
     ret = {'no_of_visits':count}
-    return str(ret)
+    return ret
   
   def validate_maintenance_detail(self):
     if not getlist(self.doclist, 'item_maintenance_detail'):
diff --git a/support/doctype/maintenance_visit/maintenance_visit.py b/support/doctype/maintenance_visit/maintenance_visit.py
index 203793c..e4efe1c 100644
--- a/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/support/doctype/maintenance_visit/maintenance_visit.py
@@ -31,20 +31,7 @@
       'item_name' : item and item[0]['item_name'] or '',
       'description' : item and item[0]['description'] or ''
     }
-    return str(ret)
-  
-  #get customer details
-  #-----------------------
-  #def get_customer_details(self):
-  #  det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1)
-  #  
-  #  ret = {
-  #    'customer_name' :  det and det[0]['customer_name'] or '',
-  #    'address'  :  det and det[0]['address'] or '',
-  #    'territory':  det and det[0]['territory'] or '',
-  #    'contact_person' : det and det[0]['contact_name'] or ''
-  #  }
-  #  return str(ret)
+    return ret
   
   # fetch details of resp Sales order or customer issue
   #-----------------------------------------------------------
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index 936233d..9379280 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -85,14 +85,14 @@
 
 [This is an automatic response]
 
-		""" + signature)
+		""" + (signature or ''))
 
 		from webnotes.utils.email_lib import sendmail
 		
 		sendmail(\
 			recipients = [d.raised_by], \
 			sender = self.email_settings.support_email, \
-			subject = '['+d.name+'] ' + d.subject, \
+			subject = '['+d.name+'] ' + str(d.subject or ''), \
 			msg = response)
 		
 	def auto_close_tickets(self):
diff --git a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt
index 155d3da..16058e7 100644
--- a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt
+++ b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-07-07 17:47:52',
+		'creation': '2011-07-08 11:14:15',
 		'docstatus': 0,
-		'modified': '2011-07-27 13:19:22',
+		'modified': '2011-07-26 00:59:27',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -96,4 +96,4 @@
 		'label': 'Rename',
 		'options': 'do_rename'
 	}
-]
\ No newline at end of file
+]
diff --git a/utilities/doctype/patch_util/patch_util.py b/utilities/doctype/patch_util/patch_util.py
index f26d110..828c805 100644
--- a/utilities/doctype/patch_util/patch_util.py
+++ b/utilities/doctype/patch_util/patch_util.py
@@ -85,7 +85,8 @@
 			d.parent = doctype
 			d.parenttype = 'DocType'
 			d.parentfield = 'permissions'
-		
+			
+		d.permlevel = level
 		d.role = role
 		d.read = read
 		d.write = write
