diff --git a/accounts/doctype/fiscal_year/fiscal_year.py b/accounts/doctype/fiscal_year/fiscal_year.py
index 6dd4f2c..6b2dfde 100644
--- a/accounts/doctype/fiscal_year/fiscal_year.py
+++ b/accounts/doctype/fiscal_year/fiscal_year.py
@@ -21,31 +21,34 @@
 	def __init__(self, d, dl):
 		self.doc, self.doclist = d,dl
 		
-	def repost(self):
+	def repost(self, account = ''):
 		if not self.doc.company:
 			msgprint("Please select company", raise_exception=1)
 			
 		if not in_transaction:
 			sql("start transaction")
 				
-		self.clear_account_balances()
-		self.create_account_balances()
-		self.update_opening()
-		self.post_entries()
+		self.clear_account_balances(account)
+		self.create_account_balances(account)
+		self.update_opening(account)
+		self.post_entries(account)
 		sql("commit")
-		msgprint("Account balance reposted")
+		
+		msg_cond = account and " and account: " + account or ""
+		msgprint("Account balance reposted for fiscal year: " + self.doc.name + msg_cond)
 
-	def clear_account_balances(self):
+	def clear_account_balances(self, account = ''):
 		# balances clear - `tabAccount Balance` for fiscal year
-		sql("update `tabAccount Balance` set opening=0, balance=0, debit=0, credit=0 where fiscal_year=%s", self.doc.name)
+		cond = account and (" and account = '" + account + "'") or ''
+		sql("update `tabAccount Balance` set opening=0, balance=0, debit=0, credit=0 where fiscal_year=%s %s", (self.doc.name, cond))
 
-	def create_account_balances(self):
+	def create_account_balances(self, account = ''):
 		# get periods
 		period_list = self.get_period_list()
 		cnt = 0
 		
 		# get accounts
-		al = sql("select name from tabAccount")
+		al = account and [[account]] or sql("select name from tabAccount")
 		
 		for a in al:
 			# check
@@ -80,9 +83,14 @@
 		return periods
 
 	# ====================================================================================
-	def update_opening(self):
-		# set opening from last year closing
-		abl = sql("select t1.account, t1.balance from `tabAccount Balance` t1, tabAccount t2 where t1.period=%s and t2.company=%s and ifnull(t2.is_pl_account, 'No') = 'No' and t1.account = t2.name for update", (self.doc.past_year, self.doc.company))
+	def update_opening(self, account = ''):
+		"""
+			set opening from last year closing
+		
+		"""
+		cond = account and (" and t2.name = '" + account + "'") or ''
+		
+		abl = sql("select t1.account, t1.balance from `tabAccount Balance` t1, tabAccount t2 where t1.period= '%s' and t2.company= '%s' and ifnull(t2.is_pl_account, 'No') = 'No' and t1.account = t2.name %s for update" % (self.doc.past_year, self.doc.company, cond))
 		
 		cnt = 0
 		for ab in abl:
@@ -100,10 +108,11 @@
 		return sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", account)[0]
 
 	# ====================================================================================
-	def post_entries(self):
+	def post_entries(self, account = ''):
 		sql("LOCK TABLE `tabGL Entry` WRITE")
+		cond = account and (" and account = '" + account + "'") or ''
 		# post each gl entry (batch or complete)
-		gle = sql("select name, account, debit, credit, is_opening, posting_date from `tabGL Entry` where fiscal_year=%s and ifnull(is_cancelled,'No')='No' and company=%s", (self.doc.name, self.doc.company))
+		gle = sql("select name, account, debit, credit, is_opening, posting_date from `tabGL Entry` where fiscal_year=%s and ifnull(is_cancelled,'No')='No' and company=%s %s", (self.doc.name, self.doc.company, cond))
 		account_details = {}
 
 		cnt = 0
@@ -153,7 +162,6 @@
 		sql("UNLOCK TABLES")
 
 
-
 	# Clear PV/RV outstanding
 	# ====================================================================================
 	def clear_outstanding(self):
diff --git a/accounts/doctype/form_16a/form_16a.py b/accounts/doctype/form_16a/form_16a.py
index 7d569b7..292c52a 100644
--- a/accounts/doctype/form_16a/form_16a.py
+++ b/accounts/doctype/form_16a/form_16a.py
@@ -18,85 +18,92 @@
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d, dl
-  
-  def autoname(self):   
-    self.doc.name = make_autoname('Form 16A' + '/.#####') 
+	def __init__(self,d,dl):
+		self.doc, self.doclist = d, dl
+	
+	def autoname(self):
+		self.doc.name = make_autoname('Form 16A' + '/.#####') 
 
-  # Get pan no and tan no from company
-  #-------------------------------------
-  def get_registration_details(self):
-    comp_det=sql("Select address,registration_details from `tabCompany` where name = '%s'"%(self.doc.company))
-    if not comp_det:
-      msgprint("Registration Details is not mentioned in comapny")
-      ret = {
-      'company_address':'',
-      'registration_details':  ''
-    }
-    else:
-      ret = {
-        'company_address': cstr(comp_det[0][0]),
-        'registration_details': cstr(comp_det[0][1])
-      }   
-    return cstr(ret)
-
-  # Get party details
-  #------------------
-  def get_party_det(self):
-    party_det=sql("Select pan_number, address from `tabAccount` where name = '%s'" % self.doc.party_name)
-    ret = {
-      'pan_number': cstr(party_det[0][0]) ,
-      'party_address': cstr(party_det[0][1])
-    }    
-    return cstr(ret)
-
-  # Get TDS Return acknowledgement
-  #-------------------------------
-  def get_return_ack_details(self):
-    self.doc.clear_table(self.doclist, 'form_16A_ack_details')
-    if not (self.doc.from_date and self.doc.to_date):
-      msgprint("Please enter From Date, To Date")
-    else:
-      ack = sql("select quarter, acknowledgement_no from `tabTDS Return Acknowledgement` where date_of_receipt>='%s' and date_of_receipt<='%s' and tds_category = '%s' order by date_of_receipt ASC" % (self.doc.from_date, self.doc.to_date, self.doc.tds_category))
-      for d in ack:
-        ch = addchild(self.doc, 'form_16A_ack_details', 'Form 16A Ack Detail', 1, self.doclist)
-        ch.quarter = d[0]
-        ch.ack_no = d[1]
-
-  # Get tds payment details
-  #-------------------------------
-  def get_tds(self):
-    self.doc.clear_table(self.doclist,'form_16A_tax_details')
-    import datetime
-    if self.doc.from_date and self.doc.to_date and self.doc.tds_category:      
-      tot=0.0
-      party_tds_list=sql("select t2.amount_paid,t2.date_of_payment,t2.tds_amount,t2.cess_on_tds, t2.total_tax_amount, t1.cheque_no, t1.bsr_code, t1.date_of_receipt, t1.challan_id from `tabTDS Payment` t1, `tabTDS Payment Detail` t2 where t1.tds_category='%s' and t2.party_name='%s' and t1.from_date >= '%s' and t1.to_date <= '%s' and t2.total_tax_amount>0 and t2.parent=t1.name and t1.docstatus=1" % (self.doc.tds_category,self.doc.party_name,self.doc.from_date,self.doc.to_date))
-      for s in party_tds_list:
-        child = addchild(self.doc, 'form_16A_tax_details', 'Form 16A Tax Detail', 1, self.doclist)
-        child.amount_paid = s and flt(s[0]) or ''
-        child.date_of_payment =s and s[1].strftime('%Y-%m-%d') or ''
-        child.tds_main = s and flt(s[2]) or ''
-        child.surcharge = 0
-        child.cess_on_tds = s and flt(s[3]) or ''
-        child.total_tax_deposited = s and flt(s[4]) or ''
-        child.cheque_no = s and s[5] or ''
-        child.bsr_code = s and s[6] or ''
-        child.tax_deposited_date = s and s[7].strftime('%Y-%m-%d') or ''
-        child.challan_no = s and s[8] or ''
-        tot=flt(tot)+flt(s[4])
-      self.doc.total_amount = flt(tot)
-    else:
-      msgprint("Plaese enter from date, to date and TDS category")
+	# Get pan no and tan no from company
+	#-------------------------------------
+	def get_registration_details(self):
+		comp_det=sql("Select address,registration_details from `tabCompany` where name = '%s'"%(self.doc.company))
+		if not comp_det:
+			msgprint("Registration Details is not mentioned in comapny")
+			ret = {
+			'company_address':'',
+			'registration_details':	''
+		}
+		else:
+			ret = {
+				'company_address': cstr(comp_det[0][0]),
+				'registration_details': cstr(comp_det[0][1])
+			}	 
+		return cstr(ret)		
     
-  
-  # validate
-  #----------------
-  def validate(self):
-    tot=0.0
-    for d in getlist(self.doclist,'form_16A_tax_details'):
-      tot=flt(tot)+flt(d.total_tax_deposited)
-    
-    dcc = TransactionBase().get_company_currency(self.doc.company)
-    self.doc.total_amount = flt(tot)    
-    self.doc.in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.total_amount)
+	# Get party details
+	#------------------
+	def get_party_det(self):		
+		party_det=sql("select master_type, master_name from `tabAccount` where name='%s'" % self.doc.party_name)
+		if party_det and party_det[0][0]=='Supplier':			
+			try:
+				rec = sql("select name, address_line1, address_line2, city, country, pincode, state from `tabAddress` where supplier = '%s' and docstatus != 2 order by is_primary_address desc limit 1" %(party_det[0][1]), as_dict = 1)
+				address_display = cstr((rec[0]['address_line1'] and rec[0]['address_line1'] or '')) + cstr((rec[0]['address_line2'] and '\n' + rec[0]['address_line2'] or '')) + cstr((rec[0]['city'] and '\n'+rec[0]['city'] or '')) + cstr((rec[0]['pincode'] and '\n' + rec[0]['pincode'] or '')) + cstr((rec[0]['state'] and '\n'+rec[0]['state'] or '')) + cstr((rec[0]['country'] and '\n'+rec[0]['country'] or ''))
+			except:
+				address_display = ''
+				
+		ret = {
+			'party_address': cstr(address_display)
+		}
+          	
+		return cstr(ret)
+	
+	# Get TDS Return acknowledgement
+	#-------------------------------
+	def get_return_ack_details(self):
+		self.doc.clear_table(self.doclist, 'form_16A_ack_details')
+		if not (self.doc.from_date and self.doc.to_date):
+			msgprint("Please enter From Date, To Date")
+		else:
+			ack = sql("select quarter, acknowledgement_no from `tabTDS Return Acknowledgement` where date_of_receipt>='%s' and date_of_receipt<='%s' and tds_category = '%s' order by date_of_receipt ASC" % (self.doc.from_date, self.doc.to_date, self.doc.tds_category))
+			for d in ack:
+				ch = addchild(self.doc, 'form_16A_ack_details', 'Form 16A Ack Detail', 1, self.doclist)
+				ch.quarter = d[0]
+				ch.ack_no = d[1]
+
+	# Get tds payment details
+	#-------------------------------
+	def get_tds(self):
+		self.doc.clear_table(self.doclist,'form_16A_tax_details')
+		import datetime
+		if self.doc.from_date and self.doc.to_date and self.doc.tds_category:			
+			tot=0.0
+			party_tds_list=sql("select t2.amount_paid,t2.date_of_payment,t2.tds_amount,t2.cess_on_tds, t2.total_tax_amount, t1.cheque_no, t1.bsr_code, t1.date_of_receipt, t1.challan_id from `tabTDS Payment` t1, `tabTDS Payment Detail` t2 where t1.tds_category='%s' and t2.party_name='%s' and t1.from_date >= '%s' and t1.to_date <= '%s' and t2.total_tax_amount>0 and t2.parent=t1.name and t1.docstatus=1" % (self.doc.tds_category,self.doc.party_name,self.doc.from_date,self.doc.to_date))
+			for s in party_tds_list:
+				child = addchild(self.doc, 'form_16A_tax_details', 'Form 16A Tax Detail', 1, self.doclist)
+				child.amount_paid = s and flt(s[0]) or ''
+				child.date_of_payment =s and s[1].strftime('%Y-%m-%d') or ''
+				child.tds_main = s and flt(s[2]) or ''
+				child.surcharge = 0
+				child.cess_on_tds = s and flt(s[3]) or ''
+				child.total_tax_deposited = s and flt(s[4]) or ''
+				child.cheque_no = s and s[5] or ''
+				child.bsr_code = s and s[6] or ''
+				child.tax_deposited_date = s and s[7].strftime('%Y-%m-%d') or ''
+				child.challan_no = s and s[8] or ''
+				tot=flt(tot)+flt(s[4])
+			self.doc.total_amount = flt(tot)
+		else:
+			msgprint("Plaese enter from date, to date and TDS category")
+		
+	
+	# validate
+	#----------------
+	def validate(self):
+		tot=0.0
+		for d in getlist(self.doclist,'form_16A_tax_details'):
+			tot=flt(tot)+flt(d.total_tax_deposited)
+		
+		dcc = TransactionBase().get_company_currency(self.doc.company)
+		self.doc.total_amount = flt(tot)		
+		self.doc.in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.total_amount)
diff --git a/accounts/doctype/gl_control/gl_control.py b/accounts/doctype/gl_control/gl_control.py
index b7129e3..5ec8ecd 100644
--- a/accounts/doctype/gl_control/gl_control.py
+++ b/accounts/doctype/gl_control/gl_control.py
@@ -405,18 +405,23 @@
 			Find vouchers that are not cancelled correctly and repost them
 		"""
 		vl = sql("""
-		select voucher_type, voucher_no, sum(debit) as sum_debit, sum(credit) as sum_credit
-		from `tabGL Entry` 
-		where is_cancelled='Yes' and creation > %s
-		group by voucher_type, voucher_no
-		""", after_date, as_dict=1))
+			select voucher_type, voucher_no, account, sum(debit) as sum_debit, sum(credit) as sum_credit
+			from `tabGL Entry` 
+			where is_cancelled='Yes' and creation > %s
+			group by voucher_type, voucher_no, account
+			""", after_date, as_dict=1)
+		
 		ac_list = []
 		for v in vl:
-			if c['sum_debit'] != 0 or c['sum_credit'] != 0:
-				ac_list += [a[0] for a in sql("""
-					select distinct account from `tabGL Entry` 
-					where voucher_type=%s and voucher_no = %s
-					""", (c['voucher_type'], c['voucher_no']))]
+			if v['sum_debit'] != 0 or v['sum_credit'] != 0:
+				ac_list.append(v['account'])
+		
+		fy_list = sql("""select name from `tabFiscal Year` 
+		where (%s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)) 
+		or year_start_date > %s 
+		order by year_start_date ASC""", (after_date, after_date))
 
-		for a in set(ac_list):
-			get_obj('Account', a).respost()
\ No newline at end of file
+		for fy in fy_list:
+			fy_obj = get_obj('Fiscal Year', fy[0])
+			for a in set(ac_list):
+				fy_obj.repost(a)
diff --git a/accounts/doctype/payable_voucher/payable_voucher.py b/accounts/doctype/payable_voucher/payable_voucher.py
index 7e90d71..0e930e3 100644
--- a/accounts/doctype/payable_voucher/payable_voucher.py
+++ b/accounts/doctype/payable_voucher/payable_voucher.py
@@ -19,489 +19,489 @@
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d, dl 
-    self.tname = 'PV Detail'
-    self.fname = 'entries'
+	def __init__(self,d,dl):
+		self.doc, self.doclist = d, dl 
+		self.tname = 'PV Detail'
+		self.fname = 'entries'
 
-  # Autoname
-  # ---------
-  def autoname(self):
-    self.doc.name = make_autoname(self.doc.naming_series+'.####')
+	# Autoname
+	# ---------
+	def autoname(self):
+		self.doc.name = make_autoname(self.doc.naming_series+'.####')
 
 
 # ************************** Trigger Functions ****************************
 
-  # Credit To
-  # ----------
-  def get_credit_to(self):
-    acc_head = sql("select name, credit_days from `tabAccount` where (name = %s or (master_name = %s and master_type = 'supplier')) and docstatus != 2", (cstr(self.doc.supplier) + " - " + self.get_company_abbr(),self.doc.supplier))    
-    #supp_detail = sql("select supplier_name,address from `tabSupplier` where name = %s", self.doc.supplier, as_dict =1)
-    #ret = {
-    #  'supplier_name' : supp_detail and supp_detail[0]['supplier_name'] or '',
-    #  'supplier_address': supp_detail and supp_detail[0]['address'] or ''
-    #}
-    ret = {}
-    if acc_head and acc_head[0][0]:
-      ret['credit_to'] = acc_head[0][0]
-      if not self.doc.due_date:
-        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)
-    
-  def get_cust(self):
-    ret = {}
-    if self.doc.credit_to:      
-      ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name')
-      
-    return cstr(ret)  
+	# Credit To
+	# ----------
+	def get_credit_to(self):
+		acc_head = sql("select name, credit_days from `tabAccount` where (name = %s or (master_name = %s and master_type = 'supplier')) and docstatus != 2", (cstr(self.doc.supplier) + " - " + self.get_company_abbr(),self.doc.supplier))		
+		#supp_detail = sql("select supplier_name,address from `tabSupplier` where name = %s", self.doc.supplier, as_dict =1)
+		#ret = {
+		#	'supplier_name' : supp_detail and supp_detail[0]['supplier_name'] or '',
+		#	'supplier_address': supp_detail and supp_detail[0]['address'] or ''
+		#}
+		ret = {}
+		if acc_head and acc_head[0][0]:
+			ret['credit_to'] = acc_head[0][0]
+			if not self.doc.due_date:
+				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)
+		
+	def get_cust(self):
+		ret = {}
+		if self.doc.credit_to:			
+			ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name')
+			
+		return cstr(ret)	
 
 
-  # Get Default Cost Center and Expense Head from Item Master
-  # ----------------------------------------------------------
-  def get_default_values(self,args):
-    args = eval(args)
-    ret = {}
-    if sql("select name from `tabItem` where name = '%s'" % args['item_code']):
-      if not args['expense_head'] or args['expense_head'] == 'undefined':
-        expense_head = sql("select name from `tabAccount` where account_name in (select purchase_account from `tabItem` where name = '%s')" % args['item_code'])
-        ret['expense_head'] = expense_head and expense_head[0][0] or ''
-      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)
-     
-  
-  # Get Items based on PO or PR
-  # ----------------------------
-  def pull_details(self):
-    if self.doc.purchase_receipt_main:
-      self.validate_duplicate_docname('purchase_receipt')
-      self.doclist = get_obj('DocType Mapper', 'Purchase Receipt-Payable Voucher').dt_map('Purchase Receipt', 'Payable Voucher', self.doc.purchase_receipt_main, self.doc, self.doclist, "[['Purchase Receipt', 'Payable Voucher'],['Purchase Receipt Detail', 'PV Detail']]")
+	# Get Default Cost Center and Expense Head from Item Master
+	# ----------------------------------------------------------
+	def get_default_values(self,args):
+		args = eval(args)
+		ret = {}
+		if sql("select name from `tabItem` where name = '%s'" % args['item_code']):
+			if not args['expense_head'] or args['expense_head'] == 'undefined':
+				expense_head = sql("select name from `tabAccount` where account_name in (select purchase_account from `tabItem` where name = '%s')" % args['item_code'])
+				ret['expense_head'] = expense_head and expense_head[0][0] or ''
+			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)
+		 
+	
+	# Get Items based on PO or PR
+	# ----------------------------
+	def pull_details(self):
+		if self.doc.purchase_receipt_main:
+			self.validate_duplicate_docname('purchase_receipt')
+			self.doclist = get_obj('DocType Mapper', 'Purchase Receipt-Payable Voucher').dt_map('Purchase Receipt', 'Payable Voucher', self.doc.purchase_receipt_main, self.doc, self.doclist, "[['Purchase Receipt', 'Payable Voucher'],['Purchase Receipt Detail', 'PV Detail']]")
 
-    elif self.doc.purchase_order_main:
-      self.validate_duplicate_docname('purchase_order')
-      self.doclist = get_obj('DocType Mapper', 'Purchase Order-Payable Voucher').dt_map('Purchase Order', 'Payable Voucher', self.doc.purchase_order_main, self.doc, self.doclist, "[['Purchase Order', 'Payable Voucher'],['PO Detail', 'PV Detail']]")
-    
-    ret = eval(self.get_credit_to())
-    #self.doc.supplier_name = ret['supplier_name']
-    #self.doc.supplier_address = ret['supplier_address']
-    
-    #self.doc.cst_no =ret['cst_no']
-    #self.doc.bst_no = ret['bst_no']
-    #self.doc.vat_tin_no = ret['vat_tin_no']
+		elif self.doc.purchase_order_main:
+			self.validate_duplicate_docname('purchase_order')
+			self.doclist = get_obj('DocType Mapper', 'Purchase Order-Payable Voucher').dt_map('Purchase Order', 'Payable Voucher', self.doc.purchase_order_main, self.doc, self.doclist, "[['Purchase Order', 'Payable Voucher'],['PO Detail', 'PV Detail']]")
+		
+		ret = eval(self.get_credit_to())
+		#self.doc.supplier_name = ret['supplier_name']
+		#self.doc.supplier_address = ret['supplier_address']
+		
+		#self.doc.cst_no =ret['cst_no']
+		#self.doc.bst_no = ret['bst_no']
+		#self.doc.vat_tin_no = ret['vat_tin_no']
 
-    if ret.has_key('credit_to'):
-      self.doc.credit_to = ret['credit_to']
-      
+		if ret.has_key('credit_to'):
+			self.doc.credit_to = ret['credit_to']
+			
 
-  # Get Item Details
-  # -----------------    
-  def get_item_details(self,arg):
-    item_det = sql("select item_name, brand, description, item_group,purchase_account,cost_center from tabItem where name=%s",arg,as_dict=1)
-    tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , arg)
-    t = {}
-    for x in tax: t[x[0]] = flt(x[1])
-    ret = {
-      'item_name' : item_det and item_det[0]['item_name'] or '',
-      'brand' : item_det and item_det[0]['brand'] or '',
-      'description' : item_det and item_det[0]['description'] or '',
-      'item_group'  : item_det and item_det[0]['item_group'] or '',
-      'rate' : 0.00,
-      'qty' : 0.00,
-      'amount' : 0.00,
-      'expense_head' : item_det and item_det[0]['purchase_account'] or '',
-      'cost_center' : item_det and item_det[0]['cost_center'] or '',
-      'item_tax_rate'      : str(t)
-    }
-    return cstr(ret)
-    
-  # Advance Allocation
-  # -------------------
-  def get_advances(self):
-    get_obj('GL Control').get_advances( self, self.doc.credit_to, 'Advance Allocation Detail','advance_allocation_details','debit')
-    
-    
-  # ============= OTHER CHARGES ====================
-  
-  # Get Tax rate if account type is TAX
-  # ------------------------------------
-  def get_rate(self,arg):
-    return get_obj('Purchase Common').get_rate(arg,self)
+	# Get Item Details
+	# -----------------		
+	def get_item_details(self,arg):
+		item_det = sql("select item_name, brand, description, item_group,purchase_account,cost_center from tabItem where name=%s",arg,as_dict=1)
+		tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , arg)
+		t = {}
+		for x in tax: t[x[0]] = flt(x[1])
+		ret = {
+			'item_name' : item_det and item_det[0]['item_name'] or '',
+			'brand' : item_det and item_det[0]['brand'] or '',
+			'description' : item_det and item_det[0]['description'] or '',
+			'item_group'	: item_det and item_det[0]['item_group'] or '',
+			'rate' : 0.00,
+			'qty' : 0.00,
+			'amount' : 0.00,
+			'expense_head' : item_det and item_det[0]['purchase_account'] or '',
+			'cost_center' : item_det and item_det[0]['cost_center'] or '',
+			'item_tax_rate'			: str(t)
+		}
+		return cstr(ret)
+		
+	# Advance Allocation
+	# -------------------
+	def get_advances(self):
+		get_obj('GL Control').get_advances( self, self.doc.credit_to, 'Advance Allocation Detail','advance_allocation_details','debit')
+		
+		
+	# ============= OTHER CHARGES ====================
+	
+	# Get Tax rate if account type is TAX
+	# ------------------------------------
+	def get_rate(self,arg):
+		return get_obj('Purchase Common').get_rate(arg,self)
 
-  # Pull details from other charges master (Get Other Charges)
-  # -----------------------------------------------------------
-  def get_purchase_tax_details(self):
-    return get_obj('Purchase Common').get_purchase_tax_details(self)
+	# Pull details from other charges master (Get Other Charges)
+	# -----------------------------------------------------------
+	def get_purchase_tax_details(self):
+		return get_obj('Purchase Common').get_purchase_tax_details(self)
 
 
-  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)
-  
+	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)
+	
 
 # *************************** Server Utility Functions *****************************
-  # Get Company abbr
-  # -----------------
-  def get_company_abbr(self):
-    return sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
+	# Get Company abbr
+	# -----------------
+	def get_company_abbr(self):
+		return sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
 
-  # Check whether PO or PR is already fetched
-  # ------------------------------------------
-  def validate_duplicate_docname(self,doctype):
-    for d in getlist(self.doclist, 'entries'): 
-      if doctype == 'purchase_receipt' and cstr(self.doc.purchase_receipt_main) == cstr(d.purchase_receipt):
-        msgprint(cstr(self.doc.purchase_receipt_main) + " purchase receipt details have already been pulled.")
-        raise Exception , " Validation Error. "
+	# Check whether PO or PR is already fetched
+	# ------------------------------------------
+	def validate_duplicate_docname(self,doctype):
+		for d in getlist(self.doclist, 'entries'): 
+			if doctype == 'purchase_receipt' and cstr(self.doc.purchase_receipt_main) == cstr(d.purchase_receipt):
+				msgprint(cstr(self.doc.purchase_receipt_main) + " purchase receipt details have already been pulled.")
+				raise Exception , " Validation Error. "
 
-      if doctype == 'purchase_order' and cstr(self.doc.purchase_order_main) == cstr(d.purchase_order) and not d.purchase_receipt:
-        msgprint(cstr(self.doc.purchase_order_main) + " purchase order details have already been pulled.")
-        raise Exception , " Validation Error. "
+			if doctype == 'purchase_order' and cstr(self.doc.purchase_order_main) == cstr(d.purchase_order) and not d.purchase_receipt:
+				msgprint(cstr(self.doc.purchase_order_main) + " purchase order details have already been pulled.")
+				raise Exception , " Validation Error. "
 
-    
+		
 # **************************** VALIDATE ********************************
 
-  # Check for Item.is_Purchase_item = 'Yes' and Item is active
-  # ------------------------------------------------------------------
-  def check_active_purchase_items(self):
-    for d in getlist(self.doclist, 'entries'):
-      if d.item_code:    # extra condn coz item_code is not mandatory in PV
-        valid_item = sql("select docstatus,is_purchase_item from tabItem where name = %s",d.item_code)
-        if valid_item[0][0] == 2:
-          msgprint("Item : '%s' is Inactive, you can restore it from Trash" %(d.item_code))
-          raise Exception
-        if not valid_item[0][1] == 'Yes':
-          msgprint("Item : '%s' is not Purchase Item"%(d.item_code))
-          raise Exception
-          
-  # Check Conversion Rate
-  # ----------------------
-  def check_conversion_rate(self):
-    default_currency = get_obj('Manage Account').doc.default_currency
-    if not default_currency:
-      msgprint('Message: Please enter default currency in Manage Account')
-      raise Exception
-    if (self.doc.currency == default_currency and flt(self.doc.conversion_rate) != 1.00) or not self.doc.conversion_rate or (self.doc.currency != default_currency and flt(self.doc.conversion_rate) == 1.00):
-      msgprint("Message: Please Enter Appropriate Conversion Rate.")
-      raise Exception        
+	# Check for Item.is_Purchase_item = 'Yes' and Item is active
+	# ------------------------------------------------------------------
+	def check_active_purchase_items(self):
+		for d in getlist(self.doclist, 'entries'):
+			if d.item_code:		# extra condn coz item_code is not mandatory in PV
+				valid_item = sql("select docstatus,is_purchase_item from tabItem where name = %s",d.item_code)
+				if valid_item[0][0] == 2:
+					msgprint("Item : '%s' is Inactive, you can restore it from Trash" %(d.item_code))
+					raise Exception
+				if not valid_item[0][1] == 'Yes':
+					msgprint("Item : '%s' is not Purchase Item"%(d.item_code))
+					raise Exception
+						
+	# Check Conversion Rate
+	# ----------------------
+	def check_conversion_rate(self):
+		default_currency = TransactionBase().get_company_currency(self.doc.company)		
+		if not default_currency:
+			msgprint('Message: Please enter default currency in Company Master')
+			raise Exception
+		if (self.doc.currency == default_currency and flt(self.doc.conversion_rate) != 1.00) or not self.doc.conversion_rate or (self.doc.currency != default_currency and flt(self.doc.conversion_rate) == 1.00):
+			msgprint("Message: Please Enter Appropriate Conversion Rate.")
+			raise Exception				
 
-  # 1. Check whether bill is already booked against this bill no. or not
-  # 2. Add Remarks
-  # ---------------------------------------------------------------------
-  def validate_bill_no(self):
-    if self.doc.bill_no and self.doc.bill_no.lower().strip()  not in ['na', 'not applicable', 'none']:
-      b_no = sql("select bill_no, name, ifnull(is_opening,'') from `tabPayable Voucher` where bill_no = '%s' and credit_to = '%s' and docstatus = 1 and name != '%s' " % (self.doc.bill_no, self.doc.credit_to, self.doc.name))
-      if b_no and cstr(b_no[0][2]) == cstr(self.doc.is_opening):
-        msgprint("Please check you have already booked expense against Bill No. %s in Purchase Invoice %s" % (cstr(b_no[0][0]), cstr(b_no[0][1])))
-        raise Exception , "Validation Error"
-      if not self.doc.remarks:
-        self.doc.remarks = (self.doc.remarks or '') + "\n" + ("Against Bill %s dated %s" % (self.doc.bill_no, formatdate(self.doc.bill_date)))
-        if self.doc.ded_amount:
-          self.doc.remarks = (self.doc.remarks or '') + "\n" + ("Grand Total: %s, Tax Deduction Amount: %s" %(self.doc.grand_total, self.doc.ded_amount))
-    else:
-      if not self.doc.remarks:
-        self.doc.remarks = "No Remarks"
-          
-  # Validate Bill No Date
-  # ---------------------
-  def validate_bill_no_date(self):
-    if self.doc.bill_no and not self.doc.bill_date and self.doc.bill_no.lower().strip() not in ['na', 'not applicable', 'none']:
-      msgprint("Please enter Bill Date")
-      raise Exception          
+	# 1. Check whether bill is already booked against this bill no. or not
+	# 2. Add Remarks
+	# ---------------------------------------------------------------------
+	def validate_bill_no(self):
+		if self.doc.bill_no and self.doc.bill_no.lower().strip()	not in ['na', 'not applicable', 'none']:
+			b_no = sql("select bill_no, name, ifnull(is_opening,'') from `tabPayable Voucher` where bill_no = '%s' and credit_to = '%s' and docstatus = 1 and name != '%s' " % (self.doc.bill_no, self.doc.credit_to, self.doc.name))
+			if b_no and cstr(b_no[0][2]) == cstr(self.doc.is_opening):
+				msgprint("Please check you have already booked expense against Bill No. %s in Purchase Invoice %s" % (cstr(b_no[0][0]), cstr(b_no[0][1])))
+				raise Exception , "Validation Error"
+			if not self.doc.remarks:
+				self.doc.remarks = (self.doc.remarks or '') + "\n" + ("Against Bill %s dated %s" % (self.doc.bill_no, formatdate(self.doc.bill_date)))
+				if self.doc.ded_amount:
+					self.doc.remarks = (self.doc.remarks or '') + "\n" + ("Grand Total: %s, Tax Deduction Amount: %s" %(self.doc.grand_total, self.doc.ded_amount))
+		else:
+			if not self.doc.remarks:
+				self.doc.remarks = "No Remarks"
+					
+	# Validate Bill No Date
+	# ---------------------
+	def validate_bill_no_date(self):
+		if self.doc.bill_no and not self.doc.bill_date and self.doc.bill_no.lower().strip() not in ['na', 'not applicable', 'none']:
+			msgprint("Please enter Bill Date")
+			raise Exception					
 
 
  
-  # Clear Advances
-  # ---------------
-  def clear_advances(self):
-    get_obj('GL Control').clear_advances( self, 'Advance Allocation Detail','advance_allocation_details')
+	# Clear Advances
+	# ---------------
+	def clear_advances(self):
+		get_obj('GL Control').clear_advances( self, 'Advance Allocation Detail','advance_allocation_details')
 
 
-  # 1. Credit To Account Exists
-  # 2. Is a Credit Account
-  # 3. Is not a PL Account
-  # ----------------------------
-  def validate_credit_acc(self):
-    acc = sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s'" % self.doc.credit_to)
-    if not acc:
-      msgprint("Account: "+ self.doc.credit_to + "does not exist")
-      raise Exception
-    elif acc[0][0] and acc[0][0] != 'Credit':
-      msgprint("Account: "+ self.doc.credit_to + "is not a credit account")
-      raise Exception
-    elif acc[0][1] and acc[0][1] != 'No':
-      msgprint("Account: "+ self.doc.credit_to + "is a pl account")
-      raise Exception
-  
-  # Validate Acc Head of Supplier and Credit To Account entered
-  # ------------------------------------------------------------
-  def check_for_acc_head_of_supplier(self): 
-    acc_head = sql("select name from `tabAccount` where name = %s", (cstr(self.doc.supplier) + " - " + self.get_company_abbr()))
-    if self.doc.supplier:
-      if acc_head and acc_head[0][0]:
-        if not cstr(acc_head[0][0]) == cstr(self.doc.credit_to):
-          msgprint("Credit To: %s do not match with Supplier: %s for Company: %s i.e. %s" %(self.doc.credit_to,self.doc.supplier,self.doc.company,cstr(acc_head[0][0])))
-          raise Exception, "Validation Error "
-      if not acc_head:
-        msgprint("Supplier %s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company))
-        raise Exception, "Validation Error "
-        
-  # Check for Stopped PO
-  # ---------------------
-  def check_for_stopped_status(self):
-    check_list = []
-    for d in getlist(self.doclist,'entries'):
-      if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
-        check_list.append(d.purhcase_order)
-        stopped = sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
-        if stopped:
-          msgprint("One cannot do any transaction against 'Purchase Order' : %s, it's status is 'Stopped'" % (d.purhcase_order))
-          raise Exception
-          
-  # Validate Supplier
-  # -----------------
-  def validate_supplier(self, d):
-    supplier = ''
-    if d.purchase_order and not d.purchase_order in self.po_list:
-      supplier = sql("select supplier from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0]
-      doctype = 'purchase order'
-      doctype_no = cstr(d.purchase_order)
-      if supplier and not cstr(self.doc.supplier) == cstr(supplier):
-        msgprint("Supplier name %s do not match with supplier name  of %s %s." %(self.doc.supplier,doctype,doctype_no))
-        raise Exception , " Validation Error "
+	# 1. Credit To Account Exists
+	# 2. Is a Credit Account
+	# 3. Is not a PL Account
+	# ----------------------------
+	def validate_credit_acc(self):
+		acc = sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s'" % self.doc.credit_to)
+		if not acc:
+			msgprint("Account: "+ self.doc.credit_to + "does not exist")
+			raise Exception
+		elif acc[0][0] and acc[0][0] != 'Credit':
+			msgprint("Account: "+ self.doc.credit_to + "is not a credit account")
+			raise Exception
+		elif acc[0][1] and acc[0][1] != 'No':
+			msgprint("Account: "+ self.doc.credit_to + "is a pl account")
+			raise Exception
+	
+	# Validate Acc Head of Supplier and Credit To Account entered
+	# ------------------------------------------------------------
+	def check_for_acc_head_of_supplier(self): 
+		acc_head = sql("select name from `tabAccount` where name = %s", (cstr(self.doc.supplier) + " - " + self.get_company_abbr()))
+		if self.doc.supplier:
+			if acc_head and acc_head[0][0]:
+				if not cstr(acc_head[0][0]) == cstr(self.doc.credit_to):
+					msgprint("Credit To: %s do not match with Supplier: %s for Company: %s i.e. %s" %(self.doc.credit_to,self.doc.supplier,self.doc.company,cstr(acc_head[0][0])))
+					raise Exception, "Validation Error "
+			if not acc_head:
+				msgprint("Supplier %s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company))
+				raise Exception, "Validation Error "
+				
+	# Check for Stopped PO
+	# ---------------------
+	def check_for_stopped_status(self):
+		check_list = []
+		for d in getlist(self.doclist,'entries'):
+			if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
+				check_list.append(d.purhcase_order)
+				stopped = sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
+				if stopped:
+					msgprint("One cannot do any transaction against 'Purchase Order' : %s, it's status is 'Stopped'" % (d.purhcase_order))
+					raise Exception
+					
+	# Validate Supplier
+	# -----------------
+	def validate_supplier(self, d):
+		supplier = ''
+		if d.purchase_order and not d.purchase_order in self.po_list:
+			supplier = sql("select supplier from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0]
+			doctype = 'purchase order'
+			doctype_no = cstr(d.purchase_order)
+			if supplier and not cstr(self.doc.supplier) == cstr(supplier):
+				msgprint("Supplier name %s do not match with supplier name	of %s %s." %(self.doc.supplier,doctype,doctype_no))
+				raise Exception , " Validation Error "
 
-    if d.purchase_receipt and not d.purchase_receipt in self.pr_list:
-      supplier = sql("select supplier from `tabPurchase Receipt` where name = '%s'" % d.purchase_receipt)[0][0]
-      doctype = 'purchase receipt'
-      doctype_no = cstr(d.purchase_receipt)
-      if supplier and not cstr(self.doc.supplier) == cstr(supplier):
-        msgprint("Supplier name %s do not match with supplier name  of %s %s." %(self.doc.supplier,doctype,doctype_no))
-        raise Exception , " Validation Error "
+		if d.purchase_receipt and not d.purchase_receipt in self.pr_list:
+			supplier = sql("select supplier from `tabPurchase Receipt` where name = '%s'" % d.purchase_receipt)[0][0]
+			doctype = 'purchase receipt'
+			doctype_no = cstr(d.purchase_receipt)
+			if supplier and not cstr(self.doc.supplier) == cstr(supplier):
+				msgprint("Supplier name %s do not match with supplier name	of %s %s." %(self.doc.supplier,doctype,doctype_no))
+				raise Exception , " Validation Error "
 
-  # Validate values with reference document
-  #----------------------------------------
-  def validate_reference_value(self):
-    get_obj('DocType Mapper', 'Purchase Order-Payable Voucher', with_children = 1).validate_reference_value(self, self.doc.name)
+	# Validate values with reference document
+	#----------------------------------------
+	def validate_reference_value(self):
+		get_obj('DocType Mapper', 'Purchase Order-Payable Voucher', with_children = 1).validate_reference_value(self, self.doc.name)
 
-        
-  # Validate PO and PR
-  # -------------------
-  def validate_po_pr(self, d):
-    # check po / pr for qty and rates and currency and conversion rate
+				
+	# Validate PO and PR
+	# -------------------
+	def validate_po_pr(self, d):
+		# check po / pr for qty and rates and currency and conversion rate
 
-    # always import_rate must be equal to import_rate of purchase order
-    if d.purchase_order and not d.purchase_order in self.po_list:
-      # currency
-      currency = cstr(sql("select currency from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0])
-      if not cstr(currency) == cstr(self.doc.currency):
-        msgprint("Purchase Order: " + cstr(d.purchase_order) + " currency : " + cstr(currency) + " does not match with currency of current document.")
-        raise Exception
-      # import_rate
-      rate = flt(sql('select import_rate from `tabPO Detail` where item_code=%s and parent=%s and name = %s', (d.item_code, d.purchase_order, d.po_detail))[0][0])
-      if abs(rate - flt(d.import_rate)) > 1:
-        msgprint("Import Rate for %s in the Purchase Order is %s. Rate must be same as Purchase Order Rate" % (d.item_code,rate))
-        raise Exception
-                  
-    if d.purchase_receipt and not d.purchase_receipt in self.pr_list:
-      # currency , conversion_rate
-      data = sql("select currency, conversion_rate from `tabPurchase Receipt` where name = '%s'" % d.purchase_receipt, as_dict = 1)
-      if not cstr(data[0]['currency']) == cstr(self.doc.currency):
-        msgprint("Purchase Receipt: " + cstr(d.purchase_receipt) + " currency : " + cstr(data[0]['currency']) + " does not match with currency of current document.")
-        raise Exception
-      if not flt(data[0]['conversion_rate']) == flt(self.doc.conversion_rate):
-        msgprint("Purchase Receipt: " + cstr(d.purchase_receipt) + " conversion_rate : " + cstr(data[0]['conversion_rate']) + " does not match with conversion_rate of current document.")
-        raise Exception
-          
-  # Build tds table if applicable
-  #------------------------------
-  def get_tds(self):
-    if cstr(self.doc.is_opening) != 'Yes':
-      if not self.doc.credit_to:
-        msgprint("Please Enter Credit To account first")
-        raise Exception
-      else:
-        tds_applicable = sql("select tds_applicable from tabAccount where name = '%s'" % self.doc.credit_to)
-        if tds_applicable and cstr(tds_applicable[0][0]) == 'Yes':
-          if not self.doc.tds_applicable:
-            msgprint("Please enter whether TDS Applicable or not")
-            raise Exception
-          if self.doc.tds_applicable == 'Yes':
-            if not self.doc.tds_category:
-              msgprint("Please select TDS Category")
-              raise Exception
-            else:
-              get_obj('TDS Control').get_tds_amount(self)
-              self.doc.total_tds_on_voucher = self.doc.ded_amount
-              self.doc.total_amount_to_pay=flt(self.doc.grand_total)-flt(self.doc.ded_amount)-flt(self.doc.other_tax_deducted)
-          elif self.doc.tds_applicable == 'No':
-            self.doc.tds_category = ''
-            self.doc.tax_code = ''
-            self.doc.rate = 0
-            self.doc.ded_amount = 0
-            self.doc.total_tds_on_voucher = 0
+		# always import_rate must be equal to import_rate of purchase order
+		if d.purchase_order and not d.purchase_order in self.po_list:
+			# currency
+			currency = cstr(sql("select currency from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0])
+			if not cstr(currency) == cstr(self.doc.currency):
+				msgprint("Purchase Order: " + cstr(d.purchase_order) + " currency : " + cstr(currency) + " does not match with currency of current document.")
+				raise Exception
+			# import_rate
+			rate = flt(sql('select import_rate from `tabPO Detail` where item_code=%s and parent=%s and name = %s', (d.item_code, d.purchase_order, d.po_detail))[0][0])
+			if abs(rate - flt(d.import_rate)) > 1:
+				msgprint("Import Rate for %s in the Purchase Order is %s. Rate must be same as Purchase Order Rate" % (d.item_code,rate))
+				raise Exception
+									
+		if d.purchase_receipt and not d.purchase_receipt in self.pr_list:
+			# currency , conversion_rate
+			data = sql("select currency, conversion_rate from `tabPurchase Receipt` where name = '%s'" % d.purchase_receipt, as_dict = 1)
+			if not cstr(data[0]['currency']) == cstr(self.doc.currency):
+				msgprint("Purchase Receipt: " + cstr(d.purchase_receipt) + " currency : " + cstr(data[0]['currency']) + " does not match with currency of current document.")
+				raise Exception
+			if not flt(data[0]['conversion_rate']) == flt(self.doc.conversion_rate):
+				msgprint("Purchase Receipt: " + cstr(d.purchase_receipt) + " conversion_rate : " + cstr(data[0]['conversion_rate']) + " does not match with conversion_rate of current document.")
+				raise Exception
+					
+	# Build tds table if applicable
+	#------------------------------
+	def get_tds(self):
+		if cstr(self.doc.is_opening) != 'Yes':
+			if not self.doc.credit_to:
+				msgprint("Please Enter Credit To account first")
+				raise Exception
+			else:
+				tds_applicable = sql("select tds_applicable from tabAccount where name = '%s'" % self.doc.credit_to)
+				if tds_applicable and cstr(tds_applicable[0][0]) == 'Yes':
+					if not self.doc.tds_applicable:
+						msgprint("Please enter whether TDS Applicable or not")
+						raise Exception
+					if self.doc.tds_applicable == 'Yes':
+						if not self.doc.tds_category:
+							msgprint("Please select TDS Category")
+							raise Exception
+						else:
+							get_obj('TDS Control').get_tds_amount(self)
+							self.doc.total_tds_on_voucher = self.doc.ded_amount
+							self.doc.total_amount_to_pay=flt(self.doc.grand_total)-flt(self.doc.ded_amount)-flt(self.doc.other_tax_deducted)
+					elif self.doc.tds_applicable == 'No':
+						self.doc.tds_category = ''
+						self.doc.tax_code = ''
+						self.doc.rate = 0
+						self.doc.ded_amount = 0
+						self.doc.total_tds_on_voucher = 0
 
-  # get tds rate
-  # -------------
-  def get_tds_rate(self):
-    return str({'rate' : flt(get_value('Account', self.doc.tax_code, 'tax_rate'))})
+	# get tds rate
+	# -------------
+	def get_tds_rate(self):
+		return str({'rate' : flt(get_value('Account', self.doc.tax_code, 'tax_rate'))})
 
-  # set aging date
-  #-------------------
-  def set_aging_date(self):
-    if self.doc.is_opening != 'Yes':
-      self.doc.aging_date = self.doc.posting_date
-    elif not self.doc.aging_date:
-      msgprint("Aging Date is mandatory for opening entry")
-      raise Exception
-      
+	# set aging date
+	#-------------------
+	def set_aging_date(self):
+		if self.doc.is_opening != 'Yes':
+			self.doc.aging_date = self.doc.posting_date
+		elif not self.doc.aging_date:
+			msgprint("Aging Date is mandatory for opening entry")
+			raise Exception
+			
 
-  # Set against account for debit to account
-  #------------------------------------------
-  def set_against_expense_account(self):
-    against_acc = []
-    for d in getlist(self.doclist, 'entries'):
-      if d.expense_account not in against_acc:
-        against_acc.append(d.expense_account)
-    self.doc.against_expense_account = ','.join(against_acc)
+	# Set against account for debit to account
+	#------------------------------------------
+	def set_against_expense_account(self):
+		against_acc = []
+		for d in getlist(self.doclist, 'entries'):
+			if d.expense_account not in against_acc:
+				against_acc.append(d.expense_account)
+		self.doc.against_expense_account = ','.join(against_acc)
 
-  #check in manage account if purchase order required or not.
-  # ====================================================================================
-  def po_required(self):
-    res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'po_required'")
-    if res and res[0][0] == 'Yes':
-       for d in getlist(self.doclist,'entries'):
-         if not d.purchase_order:
-           msgprint("Purchse Order No. required against item %s"%d.item_code)
-           raise Exception
+	#check in manage account if purchase order required or not.
+	# ====================================================================================
+	def po_required(self):
+		res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'po_required'")
+		if res and res[0][0] == 'Yes':
+			 for d in getlist(self.doclist,'entries'):
+				 if not d.purchase_order:
+					 msgprint("Purchse Order No. required against item %s"%d.item_code)
+					 raise Exception
 
-  #check in manage account if purchase receipt required or not.
-  # ====================================================================================
-  def pr_required(self):
-    res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'pr_required'")
-    if res and res[0][0] == 'Yes':
-       for d in getlist(self.doclist,'entries'):
-         if not d.purchase_receipt:
-           msgprint("Purchase Receipt No. required against item %s"%d.item_code)
-           raise Exception
+	#check in manage account if purchase receipt required or not.
+	# ====================================================================================
+	def pr_required(self):
+		res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = 'pr_required'")
+		if res and res[0][0] == 'Yes':
+			 for d in getlist(self.doclist,'entries'):
+				 if not d.purchase_receipt:
+					 msgprint("Purchase Receipt No. required against item %s"%d.item_code)
+					 raise Exception
 
-  # VALIDATE
-  # ====================================================================================
-  def validate(self):
-    self.po_required()
-    self.pr_required()
-    self.check_active_purchase_items()
-    self.check_conversion_rate()
-    self.validate_bill_no_date()
-    self.validate_bill_no()
-    self.validate_reference_value()
-    self.clear_advances()
-    self.validate_credit_acc()
-    self.check_for_acc_head_of_supplier()
-    self.check_for_stopped_status()
+	# VALIDATE
+	# ====================================================================================
+	def validate(self):
+		self.po_required()
+		self.pr_required()
+		self.check_active_purchase_items()
+		self.check_conversion_rate()
+		self.validate_bill_no_date()
+		self.validate_bill_no()
+		self.validate_reference_value()
+		self.clear_advances()
+		self.validate_credit_acc()
+		self.check_for_acc_head_of_supplier()
+		self.check_for_stopped_status()
 
-    self.po_list, self.pr_list = [], []
-    for d in getlist(self.doclist, 'entries'):
-      self.validate_supplier(d)
-      self.validate_po_pr(d)
-      if not d.purchase_order in self.po_list:
-        self.po_list.append(d.purchase_order)
-      if not d.purhcase_receipt in self.pr_list:
-        self.pr_list.append(d.purchase_receipt)
-    # tds
-    get_obj('TDS Control').validate_first_entry(self)
-    if not flt(self.doc.ded_amount):
-      self.get_tds()
-      self.doc.save()
+		self.po_list, self.pr_list = [], []
+		for d in getlist(self.doclist, 'entries'):
+			self.validate_supplier(d)
+			self.validate_po_pr(d)
+			if not d.purchase_order in self.po_list:
+				self.po_list.append(d.purchase_order)
+			if not d.purhcase_receipt in self.pr_list:
+				self.pr_list.append(d.purchase_receipt)
+		# tds
+		get_obj('TDS Control').validate_first_entry(self)
+		if not flt(self.doc.ded_amount):
+			self.get_tds()
+			self.doc.save()
 
-    if not self.doc.is_opening:
-      self.doc.is_opening = 'No'
+		if not self.doc.is_opening:
+			self.doc.is_opening = 'No'
 
-    self.set_aging_date()
+		self.set_aging_date()
 
-    #set against account for credit to
-    self.set_against_expense_account()
+		#set against account for credit to
+		self.set_against_expense_account()
 
-    #FY validation
-    get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
-    
-    #get Purchase Common Obj
-    pc_obj = get_obj(dt='Purchase Common')
-    
-     # get total in words
-    self.doc.in_words = pc_obj.get_total_in_words('Rs', self.doc.grand_total)
-    self.doc.in_words_import = pc_obj.get_total_in_words(self.doc.currency, self.doc.grand_total_import)
+		#FY validation
+		get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
+		
+		#get Purchase Common Obj
+		pc_obj = get_obj(dt='Purchase Common')
+		
+		 # get total in words
+		self.doc.in_words = pc_obj.get_total_in_words('Rs', self.doc.grand_total)
+		self.doc.in_words_import = pc_obj.get_total_in_words(self.doc.currency, self.doc.grand_total_import)
 # ***************************** SUBMIT *****************************
-  # Check Ref Document docstatus
-  # -----------------------------
-  def check_prev_docstatus(self):
-    for d in getlist(self.doclist,'entries'):
-      if d.purchase_order:
-        submitted = sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
-        if not submitted:
-          msgprint("Purchase Order : "+ cstr(d.purchase_order) +" is not submitted")
-          raise Exception , "Validation Error."
-      if d.purchase_receipt:
-        submitted = sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
-        if not submitted:
-          msgprint("Purchase Receipt : "+ cstr(d.purchase_receipt) +" is not submitted")
-          raise Exception , "Validation Error."
+	# Check Ref Document docstatus
+	# -----------------------------
+	def check_prev_docstatus(self):
+		for d in getlist(self.doclist,'entries'):
+			if d.purchase_order:
+				submitted = sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
+				if not submitted:
+					msgprint("Purchase Order : "+ cstr(d.purchase_order) +" is not submitted")
+					raise Exception , "Validation Error."
+			if d.purchase_receipt:
+				submitted = sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
+				if not submitted:
+					msgprint("Purchase Receipt : "+ cstr(d.purchase_receipt) +" is not submitted")
+					raise Exception , "Validation Error."
 
-  def update_against_document_in_jv(self, against_document_no, against_document_doctype):
-    get_obj('GL Control').update_against_document_in_jv( self,'advance_allocation_details', against_document_no, against_document_doctype, self.doc.credit_to, 'debit',self.doc.doctype)
+	def update_against_document_in_jv(self, against_document_no, against_document_doctype):
+		get_obj('GL Control').update_against_document_in_jv( self,'advance_allocation_details', against_document_no, against_document_doctype, self.doc.credit_to, 'debit',self.doc.doctype)
 
-  # On Submit
-  # ----------
-  def on_submit(self):
-    self.check_prev_docstatus()
-    
-    # Check for Approving Authority
-    get_obj('Authorization Control').validate_approving_authority(self.doc.doctype,self.doc.company, self.doc.grand_total)
-    
-    
-    # this sequence because outstanding may get -negative
-    get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist)
-    self.update_against_document_in_jv(self.doc.name, self.doc.doctype)
-    get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 1)
+	# On Submit
+	# ----------
+	def on_submit(self):
+		self.check_prev_docstatus()
+		
+		# Check for Approving Authority
+		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype,self.doc.company, self.doc.grand_total)
+		
+		
+		# this sequence because outstanding may get -negative
+		get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist)
+		self.update_against_document_in_jv(self.doc.name, self.doc.doctype)
+		get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 1)
 
 
 
 # ********************************* CANCEL *********************************
-  # Check Next Document's docstatus
-  # --------------------------------
-  def check_next_docstatus(self):
-    submit_jv = sql("select t1.name from `tabJournal Voucher` t1,`tabJournal Voucher Detail` t2 where t1.name = t2.parent and t2.against_voucher = '%s' and t1.docstatus = 1" % (self.doc.name))
-    if submit_jv:
-      msgprint("Journal Voucher : " + cstr(submit_jv[0][0]) + " has been created against " + cstr(self.doc.doctype) + ". So " + cstr(self.doc.doctype) + " cannot be Cancelled.")
-      raise Exception, "Validation Error."
-    
-  # On Cancel
-  # ----------
-  def on_cancel(self):
-    self.check_next_docstatus()
+	# Check Next Document's docstatus
+	# --------------------------------
+	def check_next_docstatus(self):
+		submit_jv = sql("select t1.name from `tabJournal Voucher` t1,`tabJournal Voucher Detail` t2 where t1.name = t2.parent and t2.against_voucher = '%s' and t1.docstatus = 1" % (self.doc.name))
+		if submit_jv:
+			msgprint("Journal Voucher : " + cstr(submit_jv[0][0]) + " has been created against " + cstr(self.doc.doctype) + ". So " + cstr(self.doc.doctype) + " cannot be Cancelled.")
+			raise Exception, "Validation Error."
+		
+	# On Cancel
+	# ----------
+	def on_cancel(self):
+		self.check_next_docstatus()
 
-    # Check whether tds payment voucher has been created against this voucher
-    self.check_tds_payment_voucher()
-    
-    get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist, cancel=1)
-    get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 0)
+		# Check whether tds payment voucher has been created against this voucher
+		self.check_tds_payment_voucher()
+		
+		get_obj(dt='GL Control').make_gl_entries(self.doc, self.doclist, cancel=1)
+		get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 0)
 
 
-  # Check whether tds payment voucher has been created against this voucher
-  #---------------------------------------------------------------------------
-  def check_tds_payment_voucher(self):
-    tdsp =  sql("select parent from `tabTDS Payment Detail` where voucher_no = '%s' and docstatus = 1 and parent not like 'old%'")
-    if tdsp:
-      msgprint("TDS Payment voucher '%s' has been made against this voucher. Please cancel the payment voucher to proceed." % (tdsp and tdsp[0][0] or ''))
-      raise Exception
+	# Check whether tds payment voucher has been created against this voucher
+	#---------------------------------------------------------------------------
+	def check_tds_payment_voucher(self):
+		tdsp =	sql("select parent from `tabTDS Payment Detail` where voucher_no = '%s' and docstatus = 1 and parent not like 'old%'")
+		if tdsp:
+			msgprint("TDS Payment voucher '%s' has been made against this voucher. Please cancel the payment voucher to proceed." % (tdsp and tdsp[0][0] or ''))
+			raise Exception
 
-  # on update
-  def on_update(self):
-    pass
-    
+	# on update
+	def on_update(self):
+		pass
+		
 ########################################################################
 # Repair Outstanding
 #######################################################################
-  def repair_pv_outstanding(self):
-    get_obj(dt = 'GL Control').repair_voucher_outstanding(self)
+	def repair_pv_outstanding(self):
+		get_obj(dt = 'GL Control').repair_voucher_outstanding(self)
diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index 2350d7c..fe8c8e6 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -15,9 +15,9 @@
 convert_to_lists = webnotes.conn.convert_to_lists
 	
 # -----------------------------------------------------------------------------------------
+from utilities.transaction_base import TransactionBase
 
-
-class DocType:
+class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
@@ -268,14 +268,11 @@
 
 	# validate conversion rate
 	def validate_conversion_rate(self, obj):
-		default_currency = get_obj('Manage Account').doc.default_currency
+		default_currency = TransactionBase().get_company_currency(obj.doc.company)			
 		if not default_currency:
-			msgprint('Message: Please enter default currency in Global Defaults')
+			msgprint('Message: Please enter default currency in Company Master')
 			raise Exception
-
-		company_currency = sql("select default_currency from `tabCompany` where name = '%s'" % obj.doc.company)
-		curr = company_currency and cstr(company_currency[0][0]) or default_currency
-		if (obj.doc.currency == curr and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != curr and flt(obj.doc.conversion_rate) == 1.00):
+		if (obj.doc.currency == default_currency and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != default_currency and flt(obj.doc.conversion_rate) == 1.00):
 			msgprint("Message: Please Enter Appropriate Conversion Rate.")
 			raise Exception
 
diff --git a/home/__init__.py b/home/__init__.py
index c254c8e..9e807df 100644
--- a/home/__init__.py
+++ b/home/__init__.py
@@ -91,7 +91,7 @@
 		subject = subject % doc.fields
 		make_feed(doc, subject, color)
 		
-def update_feed(doc, method):   
+def update_feed(doc, method=None):   
 	"adds a new feed"
 	if method=='validate':
 		return
diff --git a/hr/doctype/leave_application/leave_application.txt b/hr/doctype/leave_application/leave_application.txt
index a95f4ce..11d01e6 100644
--- a/hr/doctype/leave_application/leave_application.txt
+++ b/hr/doctype/leave_application/leave_application.txt
@@ -3,16 +3,16 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-02-10 14:10:08',
+		'creation': '2011-02-17 13:25:56',
 		'docstatus': 0,
-		'modified': '2011-02-17 13:44:37',
+		'modified': '2011-07-08 13:28:15',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1305714022',
+		'_last_update': '1310019491',
 		'autoname': 'LAP/.#####',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
@@ -24,7 +24,7 @@
 		'show_in_menu': 0,
 		'subject': 'From %(employee_name)s, %(designation)s',
 		'tag_fields': 'leave_type',
-		'version': 18
+		'version': 17
 	},
 
 	# These values are common for all DocField
@@ -54,37 +54,24 @@
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
+		'amend': 0,
+		'cancel': 0,
 		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 1,
-		'match': 'owner',
 		'permlevel': 0,
-		'submit': 1,
+		'role': 'Employee',
+		'submit': 0,
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': 'DocPerm',
-		'idx': 2,
-		'match': 'owner',
-		'permlevel': 0,
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
 		'amend': 1,
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
+		'idx': 2,
 		'permlevel': 0,
 		'role': 'HR User',
 		'submit': 1,
@@ -97,7 +84,7 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
+		'idx': 3,
 		'permlevel': 0,
 		'role': 'HR Manager',
 		'submit': 1,
@@ -106,24 +93,33 @@
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 5,
+		'idx': 4,
 		'permlevel': 1,
-		'role': 'HR User'
+		'role': 'HR User',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
 		'doctype': 'DocPerm',
-		'idx': 6,
+		'idx': 5,
 		'permlevel': 1,
-		'role': 'HR Manager'
+		'role': 'HR Manager',
+		'submit': 0,
+		'write': 0
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'column_break1',
 		'fieldtype': 'Column Break',
 		'idx': 1,
 		'permlevel': 0,
@@ -211,7 +207,6 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'column_break8',
 		'fieldtype': 'Column Break',
 		'idx': 8,
 		'permlevel': 0,
@@ -278,9 +273,20 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'letter_head',
+		'fieldtype': 'Link',
+		'idx': 14,
+		'label': 'Letter Head',
+		'options': 'Letter Head',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'amended_from',
 		'fieldtype': 'Data',
-		'idx': 14,
+		'idx': 15,
 		'label': 'Amended From',
 		'permlevel': 1
 	},
@@ -290,7 +296,7 @@
 		'doctype': 'DocField',
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
-		'idx': 15,
+		'idx': 16,
 		'label': 'Amendment Date',
 		'permlevel': 1
 	}
diff --git a/patches/index_patch.py b/patches/index_patch.py
new file mode 100644
index 0000000..8f6c4f2
--- /dev/null
+++ b/patches/index_patch.py
@@ -0,0 +1,292 @@
+"""
+	This patch removes wrong indexs and add proper indexes in tables
+"""
+
+
+def create_proper_index():
+	from webnotes.modules.export_module import export_to_files
+
+	dt_index_fields={
+						'Purchase Receipt Detail': ['prevdoc_docname', 'item_code', 'warehouse', 'prevdoc_detail_docname'], 
+						'Period Closing Voucher': ['closing_account_head', 'fiscal_year'], 
+						'Lead': ['lead_name', 'status', 'transaction_date'], 
+						'Time Sheet Detail': ['app_name'], 
+						'Item Specification Detail': [], 
+						'Budget Detail': ['fiscal_year', 'account'], 
+						'Grade': [], 
+						'RV Tax Detail': ['parenttype', 'account_head'], 
+						'TDS Category Account': ['account_head'], 
+						'Role': [], 
+						'Leave Allocation': ['leave_type', 'employee', 'fiscal_year'], 
+						'Branch': [], 
+						'Department': [], 
+						'Contact Detail': [], 
+						'Territory': ['lft', 'rgt', 'parent_territory'], 
+						'Item Tax': ['tax_type'], 
+						'Bin': ['warehouse', 'item_code'], 
+						'PPW Detail': ['warehouse'], 
+						'Sales Partner': ['partner_name'], 
+						'Default Home Page': ['home_page', 'role'], 
+						'Custom Field': ['dt'], 
+						'DocFormat': ['format'], 
+						'DocType Mapper': ['from_doctype', 'to_doctype'], 
+						'Brand': [], 
+						'Order Lost Reason': [], 
+						'Journal Voucher': ['posting_date', 'voucher_type'], 
+						'TDS Return Acknowledgement': ['date_of_receipt', 'acknowledgement'], 
+						'BOM Report Detail': ['item_code'], 
+						'Quotation Detail': ['item_code'], 
+						'Update Delivery Date Detail': ['sales_order_no'], 
+						'Advance Adjustment Detail': ['journal_voucher'], 
+						'Authorization Rule': ['approving_user', 'system_user', 'system_role', 'approving_role'], 
+						'DocPerm': ['permlevel', 'role'], 
+						'Stock Entry Detail': ['item_code', 't_warehouse', 's_warehouse'], 
+						'Stock Entry': ['posting_date', 'delivery_note_no', 'purchase_receipt_no', 'production_order'], 
+						'Price List': [], 
+						'KRA Sheet': [], 
+						'Production Order': ['status', 'project_name', 'production_item'], 
+						'Account': ['lft', 'rgt', 'parent_account'], 
+						'Earn Deduction Detail': [], 
+						'Indent': ['status', 'transaction_date'], 
+						'Tag Detail': [], 
+						'SS Deduction Detail': ['d_type'], 
+						'Batch': ['item'], 
+						'Deduction Type': [], 
+						'Project': ['project_name', 'customer'], 
+						'UserRole': ['role'], 
+						'DocField': ['label', 'fieldtype', 'fieldname'], 
+						'Property Setter': ['doc_type', 'doc_name', 'property'], 
+						'Appraisal': ['status', 'employee'], 
+						'Letter Head': [], 
+						'Follow up': ['follow_up_by'], 
+						'Project Cost Breakup': [], 
+						'Table Mapper Detail': [], 
+						'Campaign': [], 
+						'Static Parameter Detail': [], 
+						'Leave Type': [], 
+						'Account Balance': ['period', 'start_date', 'end_date', 'account'], 
+						'Absent Days Detail': [], 
+						'Tag': [], 
+						'Raw Materials Supplied': ['raw_material'], 
+						'Project Activity Update': [], 
+						'PR Raw Material Detail': [], 
+						'Bank Reconciliation Detail': ['voucher_id'], 
+						'Sales Order': ['quotation_no', 'project_name', 'customer', 'posting_date'], 
+						'Chapter VI A Detail': [], 
+						'Experience In Company Detail': [], 
+						'Order Reconciliation Detail': ['sales_order_no'], 
+						'Attendance': ['employee', 'att_date'], 
+						'Previous Experience Detail': [], 
+						'Earning Detail': ['e_type'], 
+						'Sales Order Detail': ['item_code', 'prevdoc_docname', 'reserved_warehouse'], 
+						'KRA Template': [], 
+						'Budget Distribution': ['fiscal_year'], 
+						'Workstation': ['warehouse'], 
+						'Period': [], 
+						'Training Session Details': [], 
+						'Other Charges': [], 
+						'State': [], 
+						'Bulk Rename Tool': [], 
+						'Landed Cost Master Detail': [], 
+						'Employee': ['employee_name', 'designation', 'department'], 
+						'Terms And Conditions': [], 
+						'TC Detail': [], 
+						'UOM': [], 
+						'Supplier Type': [], 
+						'Project Milestone': [], 
+						'Landed Cost Master': [], 
+						'Budget Distribution Detail': [], 
+						'Form 16A Ack Detail': [], 
+						'Campaign Expense': [], 
+						'Time Sheet': ['employee_name', 'time_sheet_date'], 
+						'File Group': ['parent_group'], 
+						'Maintenance Visit Detail': ['item_code', 'service_person'], 
+						'Support Ticket Response': [], 
+						'PV Detail': ['item_code', 'purchase_order', 'po_detail', 'purchase_receipt', 'pr_detail', 'expense_head', 'cost_center'], 
+						'Timesheet Detail': ['project_name', 'task_id', 'customer_name'], 
+						'Holiday List Detail': [], 
+						'Workflow Rule Detail': [], 
+						'Module Def': ['module_seq', 'module_page'], 
+						'Term': [], 
+						'PF Detail': ['item_code'], 
+						'POS Setting': ['user', 'territory'], 
+						'QA Specification Detail': [], 
+						'Support Ticket': ['customer', 'allocated_to', 'status'], 
+						'Project Activity': ['project'], 
+						'Customer Group': ['lft', 'rgt', 'parent_customer_group'], 
+						'Return Detail': ['item_code'], 
+						'Series Detail': [], 
+						'Event Role': ['role'], 
+						'Contact': ['employee_id'], 
+						'BOM Material': ['item_code', 'bom_no'], 
+						'Invest 80 Declaration Detail': [], 
+						'PO Raw Material Detail': [], 
+						'Industry Type': [], 
+						'Declaration Detail': [], 
+						'Holiday List': ['fiscal_year'], 
+						'Sales Person': ['lft', 'rgt', 'parent_sales_person'], 
+						'RV Detail': ['item_code', 'sales_order', 'so_detail', 'delivery_note', 'dn_detail', 'cost_center', 'income_account'], 
+						'Module Def Item': [], 
+						'TDS Category': [], 
+						'DocTrigger': [], 
+						'Print Format': ['standard'], 
+						'Installed Item Details': ['prevdoc_docname', 'item_code'], 
+						'Form 16A Tax Detail': [], 
+						'Event': ['event_date', 'event_type'], 
+						'Currency': [], 
+						'Service Quotation Detail': ['item_code'], 
+						'Warehouse Type': ['warehouse_type'], 
+						'Sales BOM': ['item_group'], 
+						'IT Checklist': ['employee'], 
+						'Purchase Other Charges': [], 
+						'Company': [], 
+						'Call Log': [], 
+						'Professional Training Details': [], 
+						'Warehouse': ['warehouse_type'], 
+						'Competitor': [], 
+						'Mode of Payment': [], 
+						'Training Session': ['customer'], 
+						'Cost Center': ['lft', 'rgt', 'parent_cost_center'], 
+						'Timesheet': ['status', 'timesheet_date'], 
+						'Form 16A': ['party_no'], 
+						'Sales BOM Detail': ['item_code'], 
+						'Answer': ['question'], 
+						'Supplier': [], 
+						'Installation Note': ['delivery_note_no', 'customer', 'inst_date'], 
+						'Expense Voucher': ['approval_status', 'employee'], 
+						'Target Detail': ['from_date', 'to_date', 'fiscal_year'], 
+						'Page Role': ['role'], 
+						'Partner Target Detail': ['fiscal_year', 'item_group'], 
+						'Shipping Address': ['customer'], 
+						'Indent Detail': ['item_code', 'warehouse'], 
+						'TDS Payment Detail': [], 
+						'Market Segment': [], 
+						'Comment Widget Record': [], 
+						'Service Order Detail': ['item_code', 'prevdoc_docname'], 
+						'TDS Payment': ['from_date', 'to_date', 'tds_category'], 
+						'Lead Email CC Detail': [], 
+						'User Setting-Role User': [], 
+						'Salary Slip': ['month', 'year', 'employee'], 
+						'Maintenance Schedule Detail': ['item_code', 'scheduled_date'], 
+						'Employment Type': [], 
+						'Advance Allocation Detail': ['journal_voucher'], 
+						'Quotation': ['customer', 'transaction_date'], 
+						'Deduction Detail': ['d_type'], 
+						'Bill Of Materials': ['item', 'project_name'], 
+						'Earning Type': [], 
+						'Designation': [], 
+						'BOM Replace Utility Detail': ['parent_bom'], 
+						'Question': [], 
+						'Stock Ledger Entry': ['item_code', 'warehouse', 'posting_date', 'posting_time'], 
+						'Educational Qualifications Detail': [], 
+						'BOM Operation': [], 
+						'Item Group': ['lft', 'rgt', 'parent_item_group'], 
+						'Workflow Action Detail': [], 
+						'User Setting-Profile': [], 
+						'Customer Issue': ['item_code', 'customer', 'complaint_date'], 
+						'Feed': [], 
+						'Purchase Tax Detail': ['account_head'], 
+						'GL Mapper Detail': [], 
+						'TDS Detail': [], 
+						'PRO Detail': ['item_code', 'source_warehouse'], 
+						'DocType Label': [], 
+						'Receivable Voucher': ['posting_date', 'debit_to', 'project_name'], 
+						'GL Entry': ['posting_date', 'account', 'voucher_no'], 
+						'Serial No': ['status', 'warehouse'], 
+						'Delivery Note': ['posting_date', 'project_name', 'customer'], 
+						'UOM Conversion Detail': ['uom'], 
+						'Search Criteria': ['criteria_name'], 
+						'Salary Structure': [], 
+						'Educational Qualifications': ['qualification'], 
+						'TDS Rate Chart': ['applicable_from', 'applicable_to'], 
+						'GL Mapper': [], 
+						'Announcement': [], 
+						'Call Log Details': [], 
+						'Enquiry': ['lead', 'customer', 'transaction_date'], 
+						'Flat BOM Detail': ['item_code'], 
+						'Landed Cost Detail': ['account_head'], 
+						'Field Mapper Detail': ['from_field', 'to_field'], 
+						'File Data': [], 
+						'Question Tag': [], 
+						'QA Inspection Report': ['item_code', 'purchase_receipt_no', 'report_date'], 
+						'Appraisal Detail': [], 
+						'POS Settings': ['territory'], 
+						'Delivery Note Detail': ['item_code', 'prevdoc_docname', 'warehouse', 'prevdoc_detail_docname'], 
+						'Profile': [], 
+						'Other Income Detail': [], 
+						'Product': ['item_code', 'stock_warehouse'], 
+						'PO Detail': ['prevdoc_docname', 'item_code', 'prevdoc_detail_docname', 'warehouse'], 
+						'Module Def Role': ['role'], 
+						'Sales Team': ['sales_person'], 
+						'Enquiry Detail': ['item_code'], 
+						'DocType': [], 
+						'Compaint Note': ['nature_of_complaint', 'compliance_date'], 
+						'Maintenance Schedule': ['customer', 'sales_order_no'], 
+						'Event User': ['person'], 
+						'Stock Reconciliation': ['reconciliation_date'], 
+						'Purchase Receipt': ['posting_date', 'supplier', 'project_name'], 
+						'Complaint Detail': ['item_name'], 
+						'Address': ['customer', 'supplier'], 
+						'Ticket': ['request_date', 'allocated_to', 'category', 'customer', 'project'], 
+						'Territory Target Detail': ['month', 'fiscal_year'], 
+						'LC PR Detail': ['purchase_receipt_no'], 
+						'Customer': ['customer_name', 'customer_group'], 
+						'PP SO Detail': [], 
+						'PP Detail': ['document_date', 'item_code', 'parent_item'], 
+						'User Setting-Role Permission': [], 
+						'Custom Script': ['dt'], 
+						'Country': [], 
+						'DefaultValue': [], 
+						'Ledger Detail': [], 
+						'SS Earning Detail': ['e_type'], 
+						'SMS Log': [], 
+						'Expense Type': [], 
+						'Item': ['item_group'], 
+						'Fiscal Year': [], 
+						'ToDo Item': ['role'], 
+						'Payable Voucher': ['posting_date', 'credit_to', 'project_name', 'supplier'], 
+						'Journal Voucher Detail': ['account', 'against_voucher', 'against_invoice', 'against_jv'], 
+						'Online Contact': [], 
+						'Page': ['module'], 
+						'Leave Application': ['employee', 'leave_type', 'from_date', 'to_date'], 
+						'Expense Voucher Detail': ['expense_type'], 
+						'Maintenance Visit': ['customer', 'sales_order_no', 'customer_issue_no'], 
+						'Ref Rate Detail': ['price_list_name', 'ref_currency'], 
+						'Receiver Detail': [], 
+						'Naming Series Options': ['doc_type'], 
+						'Activity Type': [], 
+						'PRO PP Detail': [], 
+						'Delivery Note Packing Detail': ['item_code', 'parent_item', 'warehouse'], 
+						'Workflow Rule': ['select_form'], 
+						'File': ['file_group'], 
+						'Item Maintenance Detail': ['item_code', 'start_date', 'end_date', 'prevdoc_docname'], 
+						'Purchase Order': ['supplier', 'project_name', 'posting_date'], 
+						'Print Heading': [], 
+						'TDS Rate Detail': ['category']
+					}
+				
+	for dt in dt_index_fields.keys():
+		current_index = sql("show indexes from `tab%s`" % dt)
+	
+		proper_index = dt_index_fields[dt]
+	
+		for d in current_index:
+			if d[4] not in ['name', 'parent', 'parenttype']:
+				if d[4] not in proper_index:
+					sql("ALTER TABLE `tab%s` DROP INDEX %s" % (dt, d[4]))
+					sql("start transaction")
+					sql("UPDATE `tabDocField` SET search_index = 0 WHERE fieldname = '%s' AND parent = '%s'" % (d[4], dt))
+					sql("commit")
+				else:
+					proper_index.remove(d[4])
+	
+		for d in proper_index:
+			sql("ALTER TABLE `tab%s` ADD INDEX ( `%s` ) " % (dt, d))
+			sql("start transaction")
+			sql("UPDATE `tabDocField` SET search_index = 1 WHERE fieldname = '%s' AND parent = '%s'" % (d, dt))
+			sql("commit")
+
+		sql("start transaction")		
+		dt_module = sql("select module from `tabDocType` where name = '%s'" % dt)[0][0]
+		export_to_files(record_list = [['DocType', dt]], record_module = dt_module)
+		sql("commit")
diff --git a/patches/patch.py b/patches/patch.py
index 8c839e1..9783de5 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -1,7 +1,7 @@
 # REMEMBER to update this
 # ========================
 
-last_patch = 315
+last_patch = 323
 
 #-------------------------------------------
 
@@ -1271,3 +1271,21 @@
 		m.parenttype = 'Module Def'
 		m.parentfield = 'roles'
 		m.save(1)
+	elif patch_no == 316:
+		pass
+	elif patch_no == 317:
+		sql("update `tabPage` set name = 'profile-settings' where page_name = 'Profile Settings'")	
+	elif patch_no == 318:
+		reload_doc('utilities', 'doctype', 'bulk_rename_tool')
+	elif patch_no == 319:
+		sql("delete from tabFeed where doc_name like 'New %'")
+	elif patch_no == 320:
+		reload_doc('setup', 'doctype', 'series_detail')
+	elif patch_no == 321:
+		reload_doc('hr','doctype','leave_application')
+	elif patch_no == 322:
+		sql("delete from `tabDocField` where parent = 'Leave Application' and fieldname = 'latter_head'")
+	elif patch_no == 323:
+		reload_doc('stock', 'doctype', 'stock_entry')
+		sql("update `tabDocField` set options = 'get_stock_and_rate' where parent = 'Stock Entry' and label = 'Get Stock and Rate'")
+		sql("delete from `tabDocField` where label = 'Get Current Stock' and parent = 'Stock Entry'")
diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py
index 3f0735f..25dd960 100644
--- a/selling/doctype/sales_common/sales_common.py
+++ b/selling/doctype/sales_common/sales_common.py
@@ -15,8 +15,9 @@
 	
 # -----------------------------------------------------------------------------------------
 
+from utilities.transaction_base import TransactionBase
 
-class DocType:
+class DocType(TransactionBase):
 	def __init__(self,d,dl):
 		self.doc, self.doclist = d,dl
 
@@ -262,10 +263,11 @@
 	# Check Conversion Rate (i.e. it will not allow conversion rate to be 1 for Currency other than default currency set in Global Defaults)
 	# ===========================================================================
 	def check_conversion_rate(self, obj):
-		default_currency = get_obj('Manage Account').doc.default_currency
-		company_currency = sql("select default_currency from `tabCompany` where name = '%s'" % obj.doc.company)
-		curr = company_currency and cstr(company_currency[0][0]) or default_currency
-		if (obj.doc.currency == curr and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != curr and flt(obj.doc.conversion_rate) == 1.00):
+		default_currency = TransactionBase().get_company_currency(obj.doc.company)
+		if not default_currency:
+			msgprint('Message: Please enter default currency in Company Master')
+			raise Exception		
+		if (obj.doc.currency == default_currency and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != default_currency and flt(obj.doc.conversion_rate) == 1.00):
 			msgprint("Please Enter Appropriate Conversion Rate.")
 			raise Exception
 	
diff --git a/setup/doctype/series_detail/__init__.py b/setup/doctype/series_detail/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/setup/doctype/series_detail/__init__.py
diff --git a/setup/doctype/series_detail/series_detail.txt b/setup/doctype/series_detail/series_detail.txt
new file mode 100644
index 0000000..a6df55d
--- /dev/null
+++ b/setup/doctype/series_detail/series_detail.txt
@@ -0,0 +1,63 @@
+# DocType, Series Detail
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-07-08 13:20:10',
+		'docstatus': 0,
+		'modified': '2011-07-08 13:20:34',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'istable': 1,
+		'module': 'Setup',
+		'name': '__common__',
+		'section_style': 'Tray',
+		'show_in_menu': 0,
+		'version': 3
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Series Detail',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# DocType, Series Detail
+	{
+		'doctype': 'DocType',
+		'name': 'Series Detail'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'series',
+		'fieldtype': 'Read Only',
+		'idx': 1,
+		'label': 'Series',
+		'oldfieldname': 'series',
+		'oldfieldtype': 'Read Only'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'remove',
+		'fieldtype': 'Check',
+		'idx': 2,
+		'label': 'Remove',
+		'oldfieldname': 'remove',
+		'oldfieldtype': 'Check',
+		'trigger': 'Client'
+	}
+]
\ No newline at end of file
diff --git a/setup/doctype/setup_control/setup_control.py b/setup/doctype/setup_control/setup_control.py
index 7cbf4d3..e01e60a 100644
--- a/setup/doctype/setup_control/setup_control.py
+++ b/setup/doctype/setup_control/setup_control.py
@@ -14,7 +14,6 @@
 in_transaction = webnotes.conn.in_transaction
 convert_to_lists = webnotes.conn.convert_to_lists
 
-from server_tools.gateway_utils import update_client_control, get_total_users
 	
 # -----------------------------------------------------------------------------------------
 
@@ -58,7 +57,8 @@
 		
 		# Company
 		master_dict = {'Company':{'company_name':company_name,
-															'abbr':comp_abbr															
+								  'abbr':comp_abbr,
+								  'default_currency':currency
 															}}
 		self.create_records(master_dict)
 		
@@ -74,7 +74,9 @@
 								'pr_required':'No',
 								'emp_created_by':'Naming Series',
 								'cust_master_name':'Customer Name', 
-								'supp_master_name':'Supplier Name'}
+								'supp_master_name':'Supplier Name',
+								'default_currency_format': (currency=='INR') and 'Lacs' or 'Millions'
+					}
 
 		# Set 
 		self.set_defaults(def_args)
@@ -179,6 +181,8 @@
 		"""
 		Validates if setup has been performed after database allocation
 		"""
+
+		from server_tools.gateway_utils import update_client_control, get_total_users
 		
 		args = eval(args)
 		#webnotes.logger.error("args in set_account_details of setup_control: " + str(args))
@@ -195,7 +199,6 @@
 		
 		#webnotes.logger.error("setup_control.is_setup_okay: Passed Values:" + args['account_name'] + " " + args['user'] + " " + str(args['total_users']))
 		
-		
 		if (cp_defaults==args['account_name']) and user_profile and \
 		   (total_users==cint(args['total_users'])):
 		   return 'True'
diff --git a/stock/doctype/item/item.js b/stock/doctype/item/item.js
index 115ced5..3c02629 100644
--- a/stock/doctype/item/item.js
+++ b/stock/doctype/item/item.js
@@ -1,6 +1,18 @@
 cur_frm.cscript.refresh = function(doc) {
-  if(cint(doc.is_local) && doc.has_serial_no) set_field_permlevel('has_serial_no', 1);
-  if(cint(doc.is_local) && doc.is_stock_item) set_field_permlevel('is_stock_item', 1);
+	// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
+	// read only if any stock ledger entry exists
+	
+	if ((!doc.__islocal) && (doc.is_stock_item == 'Yes')) {
+		var callback = function(r, rt) {
+			if (r.message == 'exists') permlevel = 1;
+			else permlevel = 0;
+				
+			set_field_permlevel('has_serial_no', permlevel);
+			set_field_permlevel('is_stock_item', permlevel);
+			set_field_permlevel('valuation_method', permlevel);
+		}
+		$c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback); 
+	}
 }
 
 
diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py
index a2fbf01..ae67749 100644
--- a/stock/doctype/item/item.py
+++ b/stock/doctype/item/item.py
@@ -170,3 +170,11 @@
 			
 		}
 		return str(ret)
+		
+	def check_if_sle_exists(self):
+		"""
+			checks if any stock ledger entry exists for this item
+		"""
+
+		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'
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 44cd2c7..0eda680 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -140,7 +140,8 @@
     self.check_for_stopped_status(pc_obj)
 
     # get total in words
-    self.doc.in_words = pc_obj.get_total_in_words(get_defaults().get('currency') or 'INR', self.doc.grand_total)
+    dcc = TransactionBase().get_company_currency(self.doc.company)    
+    self.doc.in_words = pc_obj.get_total_in_words(dcc, self.doc.grand_total)
     self.doc.in_words_import = pc_obj.get_total_in_words(self.doc.currency, self.doc.grand_total_import)
     # update valuation rate
     self.update_valuation_rate()
diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py
index a07f769..b380995 100644
--- a/stock/doctype/stock_entry/stock_entry.py
+++ b/stock/doctype/stock_entry/stock_entry.py
@@ -250,9 +250,9 @@
 		if self.doc.production_order:
 			pro_obj = get_obj('Production Order', self.doc.production_order)
 		self.validate_for_production_order(pro_obj)
+		self.get_stock_and_rate(pro_obj and pro_obj.doc.bom_no or '')
 		self.validate_incoming_rate()
 		self.validate_warehouse(pro_obj)
-		self.get_stock_and_rate(pro_obj and pro_obj.doc.bom_no or '')
 		self.calc_amount()
 		get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
 				
diff --git a/stock/doctype/stock_entry/stock_entry.txt b/stock/doctype/stock_entry/stock_entry.txt
index 6959d4d..951986f 100644
--- a/stock/doctype/stock_entry/stock_entry.txt
+++ b/stock/doctype/stock_entry/stock_entry.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2010-08-08 17:09:25',
+		'creation': '2009-05-12 16:46:45',
 		'docstatus': 0,
-		'modified': '2011-06-14 12:50:12',
+		'modified': '2011-07-10 14:12:39',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -13,17 +13,33 @@
 	# These values are common for all DocType
 	{
 		'_last_update': '1308741898',
+		'allow_attach': 0,
+		'allow_copy': 0,
+		'allow_email': 0,
+		'allow_print': 0,
+		'allow_rename': 0,
+		'allow_trash': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
+		'hide_heading': 0,
+		'hide_toolbar': 0,
+		'in_create': 0,
+		'in_dialog': 0,
+		'is_transaction_doc': 0,
+		'issingle': 0,
+		'max_attachments': 0,
 		'module': 'Stock',
 		'name': '__common__',
 		'print_outline': 'No',
+		'read_only': 0,
+		'read_only_onload': 0,
 		'search_fields': 'transfer_date, from_warehouse, to_warehouse, purpose, remarks',
 		'section_style': 'Tabbed',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': '%(remarks)s',
 		'tag_fields': 'purpose',
+		'use_template': 0,
 		'version': 243
 	},
 
@@ -60,7 +76,7 @@
 		'doctype': 'DocPerm',
 		'idx': 1,
 		'permlevel': 0,
-		'role': 'Material Manager',
+		'role': 'Material User',
 		'submit': 1,
 		'write': 1
 	},
@@ -73,35 +89,28 @@
 		'doctype': 'DocPerm',
 		'idx': 2,
 		'permlevel': 1,
-		'role': 'Material Manager',
+		'role': 'Material User',
 		'submit': 0,
 		'write': 0
 	},
 
 	# DocPerm
 	{
-		'amend': 1,
-		'cancel': 1,
-		'create': 1,
+		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 3,
-		'permlevel': 0,
-		'role': 'Material User',
-		'submit': 1,
+		'permlevel': 2,
+		'role': 'Production User',
 		'write': 1
 	},
 
 	# DocPerm
 	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
 		'doctype': 'DocPerm',
 		'idx': 4,
-		'permlevel': 1,
-		'role': 'Material User',
-		'submit': 0,
-		'write': 0
+		'permlevel': 2,
+		'role': 'Production Manager',
+		'write': 1
 	},
 
 	# DocPerm
@@ -127,21 +136,11 @@
 
 	# DocPerm
 	{
-		'create': 0,
-		'doctype': 'DocPerm',
-		'idx': 7,
-		'permlevel': 2,
-		'role': 'Production User',
-		'write': 1
-	},
-
-	# DocPerm
-	{
 		'amend': 1,
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 8,
+		'idx': 7,
 		'permlevel': 0,
 		'role': 'Production Manager',
 		'submit': 1,
@@ -151,17 +150,34 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 9,
+		'idx': 8,
 		'permlevel': 1,
 		'role': 'Production Manager'
 	},
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': 'DocPerm',
+		'idx': 9,
+		'permlevel': 1,
+		'role': 'Material Manager',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 1,
+		'cancel': 1,
+		'create': 1,
 		'doctype': 'DocPerm',
 		'idx': 10,
-		'permlevel': 2,
-		'role': 'Production Manager',
+		'permlevel': 0,
+		'role': 'Material Manager',
+		'submit': 1,
 		'write': 1
 	},
 
@@ -187,85 +203,114 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'description': 'To manage multiple series please go to Setup > Manage Series',
 		'doctype': 'DocField',
 		'fieldname': 'naming_series',
 		'fieldtype': 'Select',
+		'hidden': 0,
 		'idx': 3,
+		'in_filter': 0,
 		'label': 'Series',
 		'no_copy': 1,
 		'oldfieldname': 'naming_series',
 		'oldfieldtype': 'Select',
-		'options': 'STE',
+		'options': '\nSTE',
 		'permlevel': 0,
 		'print_hide': 1,
-		'reqd': 1
+		'report_hide': 0,
+		'reqd': 1,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'description': 'The date at which current entry is corrected in the system.',
 		'doctype': 'DocField',
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
+		'hidden': 0,
 		'idx': 4,
+		'in_filter': 0,
 		'label': 'Amendment Date',
 		'no_copy': 1,
 		'oldfieldname': 'amendment_date',
 		'oldfieldtype': 'Date',
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'purpose',
 		'fieldtype': 'Select',
+		'hidden': 0,
 		'idx': 5,
 		'in_filter': 1,
 		'label': 'Purpose',
+		'no_copy': 0,
 		'oldfieldname': 'purpose',
 		'oldfieldtype': 'Select',
 		'options': 'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order',
 		'permlevel': 0,
+		'print_hide': 0,
+		'report_hide': 0,
 		'reqd': 1,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'delivery_note_no',
 		'fieldtype': 'Link',
 		'hidden': 1,
 		'idx': 6,
+		'in_filter': 0,
 		'label': 'Delivery Note No',
+		'no_copy': 0,
 		'oldfieldname': 'delivery_note_no',
 		'oldfieldtype': 'Link',
 		'options': 'Delivery Note',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'purchase_receipt_no',
 		'fieldtype': 'Link',
 		'hidden': 1,
 		'idx': 7,
+		'in_filter': 0,
 		'label': 'Purchase Receipt No',
+		'no_copy': 0,
 		'oldfieldname': 'purchase_receipt_no',
 		'oldfieldtype': 'Link',
 		'options': 'Purchase Receipt',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -284,93 +329,135 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'supplier',
 		'fieldtype': 'Link',
 		'hidden': 1,
 		'idx': 9,
+		'in_filter': 0,
 		'label': 'Supplier',
+		'no_copy': 0,
 		'oldfieldname': 'supplier',
 		'oldfieldtype': 'Link',
 		'options': 'Supplier',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'supplier_name',
 		'fieldtype': 'Data',
+		'hidden': 0,
 		'idx': 10,
+		'in_filter': 0,
 		'label': 'Supplier Name',
+		'no_copy': 0,
 		'oldfieldname': 'supplier_name',
 		'oldfieldtype': 'Data',
-		'permlevel': 1
+		'permlevel': 1,
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'supplier_address',
 		'fieldtype': 'Small Text',
 		'hidden': 1,
 		'idx': 11,
+		'in_filter': 0,
 		'label': 'Supplier Address',
+		'no_copy': 0,
 		'oldfieldname': 'supplier_address',
 		'oldfieldtype': 'Small Text',
 		'permlevel': 0,
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'customer',
 		'fieldtype': 'Link',
 		'hidden': 1,
 		'idx': 12,
+		'in_filter': 0,
 		'label': 'Customer',
+		'no_copy': 0,
 		'oldfieldname': 'customer',
 		'oldfieldtype': 'Link',
 		'options': 'Customer',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'customer_name',
 		'fieldtype': 'Data',
 		'hidden': 1,
 		'idx': 13,
+		'in_filter': 0,
 		'label': 'Customer Name',
+		'no_copy': 0,
 		'oldfieldname': 'customer_name',
 		'oldfieldtype': 'Data',
-		'permlevel': 1
+		'permlevel': 1,
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'customer_address',
 		'fieldtype': 'Small Text',
 		'hidden': 1,
 		'idx': 14,
+		'in_filter': 0,
 		'label': 'Customer Address',
+		'no_copy': 0,
 		'oldfieldname': 'customer_address',
 		'oldfieldtype': 'Small Text',
-		'permlevel': 0
+		'permlevel': 0,
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'process',
@@ -379,16 +466,21 @@
 		'idx': 15,
 		'in_filter': 1,
 		'label': 'Process',
+		'no_copy': 0,
 		'oldfieldname': 'process',
 		'oldfieldtype': 'Select',
 		'options': '\nMaterial Transfer\nBackflush',
 		'permlevel': 2,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'production_order',
@@ -397,25 +489,36 @@
 		'idx': 16,
 		'in_filter': 1,
 		'label': 'Production Order',
+		'no_copy': 0,
 		'oldfieldname': 'production_order',
 		'oldfieldtype': 'Link',
 		'options': 'Production Order',
 		'permlevel': 2,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'fg_completed_qty',
 		'fieldtype': 'Currency',
+		'hidden': 0,
 		'idx': 17,
+		'in_filter': 0,
 		'label': 'FG Completed Qty',
+		'no_copy': 0,
 		'oldfieldname': 'fg_completed_qty',
 		'oldfieldtype': 'Currency',
 		'permlevel': 2,
 		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -424,47 +527,59 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'HTML',
+		'hidden': 0,
 		'idx': 18,
 		'label': 'Warehouse HTML',
 		'no_copy': 0,
 		'oldfieldtype': 'HTML',
 		'options': "<div class='columnHeading'>Warehouse</div>",
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'reqd': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'from_warehouse',
 		'fieldtype': 'Link',
+		'hidden': 0,
 		'idx': 19,
+		'in_filter': 0,
 		'label': 'Source Warehouse',
+		'no_copy': 0,
 		'oldfieldname': 'from_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 0,
+		'search_index': 0,
 		'trigger': 'Client'
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'description': '<b>Notes:</b> Either Source or Target is Mandatory',
 		'doctype': 'DocField',
 		'fieldname': 'to_warehouse',
 		'fieldtype': 'Link',
+		'hidden': 0,
 		'idx': 20,
 		'in_filter': 0,
 		'label': 'Target Warehouse',
+		'no_copy': 0,
 		'oldfieldname': 'to_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 0,
 		'search_index': 1,
 		'trigger': 'Client'
@@ -473,8 +588,22 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Column Break',
+		'fieldname': 'project_name',
+		'fieldtype': 'Link',
 		'idx': 21,
+		'in_filter': 1,
+		'label': 'Project Name',
+		'oldfieldname': 'project_name',
+		'oldfieldtype': 'Link',
+		'options': 'Project',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break',
+		'idx': 22,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0,
 		'width': '50%'
@@ -482,11 +611,13 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'default': 'Today',
 		'doctype': 'DocField',
 		'fieldname': 'transfer_date',
 		'fieldtype': 'Date',
-		'idx': 22,
+		'hidden': 0,
+		'idx': 23,
 		'in_filter': 1,
 		'label': 'Transfer Date',
 		'no_copy': 1,
@@ -494,17 +625,20 @@
 		'oldfieldtype': 'Date',
 		'permlevel': 0,
 		'print_hide': 0,
+		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 1
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'description': 'The date at which current entry will get or has actually executed.',
 		'doctype': 'DocField',
 		'fieldname': 'posting_date',
 		'fieldtype': 'Date',
-		'idx': 23,
+		'hidden': 0,
+		'idx': 24,
 		'in_filter': 1,
 		'label': 'Posting Date',
 		'no_copy': 1,
@@ -512,16 +646,19 @@
 		'oldfieldtype': 'Date',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 1
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'posting_time',
 		'fieldtype': 'Time',
-		'idx': 24,
+		'hidden': 0,
+		'idx': 25,
 		'in_filter': 0,
 		'label': 'Posting Time',
 		'no_copy': 1,
@@ -529,103 +666,143 @@
 		'oldfieldtype': 'Time',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'amended_from',
 		'fieldtype': 'Link',
-		'idx': 25,
+		'hidden': 0,
+		'idx': 26,
+		'in_filter': 0,
 		'label': 'Amended From',
 		'no_copy': 1,
 		'oldfieldname': 'amended_from',
 		'oldfieldtype': 'Link',
 		'options': 'Stock Entry',
 		'permlevel': 1,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'transporter',
 		'fieldtype': 'Data',
-		'idx': 26,
+		'hidden': 0,
+		'idx': 27,
+		'in_filter': 0,
 		'label': 'Transporter',
+		'no_copy': 0,
 		'oldfieldname': 'transporter',
 		'oldfieldtype': 'Data',
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'is_excisable_goods',
 		'fieldtype': 'Select',
-		'idx': 27,
+		'hidden': 0,
+		'idx': 28,
+		'in_filter': 0,
 		'label': 'Is Excisable Goods',
+		'no_copy': 0,
 		'oldfieldname': 'is_excisable_goods',
 		'oldfieldtype': 'Select',
 		'options': '\nYes\nNo',
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'excisable_goods',
 		'fieldtype': 'Select',
-		'idx': 28,
+		'hidden': 0,
+		'idx': 29,
+		'in_filter': 0,
 		'label': 'Excisable Goods',
+		'no_copy': 0,
 		'oldfieldname': 'excisable_goods',
 		'oldfieldtype': 'Select',
 		'options': '\nReturnable\nNon-Returnable',
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'under_rule',
 		'fieldtype': 'Select',
 		'hidden': 1,
-		'idx': 29,
+		'idx': 30,
+		'in_filter': 0,
 		'label': 'Under Rule',
+		'no_copy': 0,
 		'oldfieldname': 'under_rule',
 		'oldfieldtype': 'Select',
 		'options': '\nOrdinary\n57 AC (5) a\n57 F (2) Non-Exc.',
 		'permlevel': 0,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'remarks',
 		'fieldtype': 'Text',
-		'idx': 30,
+		'hidden': 0,
+		'idx': 31,
+		'in_filter': 0,
 		'label': 'Remarks',
 		'no_copy': 1,
 		'oldfieldname': 'remarks',
 		'oldfieldtype': 'Text',
 		'permlevel': 0,
 		'print_hide': 1,
-		'reqd': 1
+		'report_hide': 0,
+		'reqd': 1,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'cancel_reason',
 		'fieldtype': 'Data',
 		'hidden': 1,
-		'idx': 31,
+		'idx': 32,
 		'in_filter': 0,
 		'label': 'Cancel Reason',
 		'no_copy': 1,
@@ -633,6 +810,7 @@
 		'oldfieldtype': 'Data',
 		'permlevel': 1,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 0,
 		'search_index': 0
 	},
@@ -641,7 +819,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 32,
+		'idx': 33,
 		'label': 'Items',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -651,7 +829,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 33,
+		'idx': 34,
 		'label': 'Get Stock and Rate',
 		'oldfieldtype': 'Button',
 		'options': 'get_stock_and_rate',
@@ -661,32 +839,57 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'hidden': 0,
+		'idx': 35,
+		'in_filter': 0,
+		'label': 'Get Current Stock',
+		'no_copy': 0,
+		'oldfieldtype': 'Button',
+		'options': 'get_stock_and_rate',
+		'permlevel': 0,
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
+	},
+
+	# DocField
+	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 34,
+		'idx': 36,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
 		'hidden': 0,
-		'idx': 35,
+		'idx': 37,
+		'in_filter': 0,
 		'label': 'Get Items',
+		'no_copy': 0,
 		'oldfieldtype': 'Button',
 		'options': 'get_items',
 		'permlevel': 2,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 36,
+		'idx': 38,
 		'oldfieldtype': 'Section Break',
 		'options': 'Simple',
 		'permlevel': 0
@@ -694,37 +897,51 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'mtn_details',
 		'fieldtype': 'Table',
-		'idx': 37,
+		'hidden': 0,
+		'idx': 39,
+		'in_filter': 0,
 		'label': 'MTN Details',
+		'no_copy': 0,
 		'oldfieldname': 'mtn_details',
 		'oldfieldtype': 'Table',
 		'options': 'Stock Entry Detail',
 		'permlevel': 0,
-		'print_hide': 0
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'total_amount',
 		'fieldtype': 'Currency',
-		'idx': 38,
+		'hidden': 0,
+		'idx': 40,
+		'in_filter': 0,
 		'label': 'Total Amount',
+		'no_copy': 0,
 		'oldfieldname': 'total_amount',
 		'oldfieldtype': 'Currency',
 		'permlevel': 1,
-		'print_hide': 1
+		'print_hide': 1,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	},
 
 	# DocField
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 39,
+		'idx': 41,
 		'label': 'Other Details',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -732,48 +949,64 @@
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 40,
+		'hidden': 0,
+		'idx': 42,
 		'in_filter': 1,
 		'label': 'Company',
+		'no_copy': 0,
 		'oldfieldname': 'company',
 		'oldfieldtype': 'Link',
 		'options': 'Company',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 1
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 41,
+		'hidden': 0,
+		'idx': 43,
 		'in_filter': 0,
 		'label': 'Fiscal Year',
+		'no_copy': 0,
 		'oldfieldname': 'fiscal_year',
 		'oldfieldtype': 'Select',
 		'options': 'link:Fiscal Year',
 		'permlevel': 0,
 		'print_hide': 1,
+		'report_hide': 0,
 		'reqd': 1,
 		'search_index': 1
 	},
 
 	# DocField
 	{
+		'allow_on_submit': 0,
 		'doctype': 'DocField',
 		'fieldname': 'select_print_heading',
 		'fieldtype': 'Link',
-		'idx': 42,
+		'hidden': 0,
+		'idx': 44,
+		'in_filter': 0,
 		'label': 'Select Print Heading',
+		'no_copy': 0,
 		'oldfieldname': 'select_print_heading',
 		'oldfieldtype': 'Link',
 		'options': 'Print Heading',
-		'permlevel': 0
+		'permlevel': 0,
+		'print_hide': 0,
+		'report_hide': 0,
+		'reqd': 0,
+		'search_index': 0
 	}
 ]
\ No newline at end of file
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index 959a751..0ca33ec 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -35,7 +35,7 @@
 			
 			st = get_obj('Support Ticket', thread_id)
 			st.make_response_record(content, mail.mail['From'], content_type)
-			webnotes.conn.set(st.doc, 'status', 'To Reply')
+			webnotes.conn.set(st.doc, 'status', 'Open')
 			update_feed(st.doc)
 			return
 				
@@ -54,7 +54,7 @@
 			d.save(1)
 
 		# update feed
-		update_feed(d)	
+		update_feed(d)
 		
 
 def get_support_mails():
@@ -62,3 +62,9 @@
 		Gets new emails from support inbox and updates / creates Support Ticket records
 	"""
 	SupportMailbox().get_messages()
+
+def auto_close_tickets():
+	"""
+		Auto Closes Waiting for Customer Support Ticket after 15 days
+	"""
+	webnotes.conn.sql("update `tabSupport Ticket` set status = 'Closed' where status = 'Waiting for Customer' and date_sub(curdate(),interval 15 Day) > modified")
diff --git a/utilities/doctype/bulk_rename_tool/__init__.py b/utilities/doctype/bulk_rename_tool/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/utilities/doctype/bulk_rename_tool/__init__.py
diff --git a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.py b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.py
new file mode 100644
index 0000000..62d4d83
--- /dev/null
+++ b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.py
@@ -0,0 +1,82 @@
+# Please edit this list and import only required elements
+import webnotes
+
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.model import db_exists
+from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
+from webnotes.model.doclist import getlist, copy_doclist
+from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
+from webnotes import session, form, is_testing, msgprint, errprint
+
+set = webnotes.conn.set
+sql = webnotes.conn.sql
+get_value = webnotes.conn.get_value
+in_transaction = webnotes.conn.in_transaction
+convert_to_lists = webnotes.conn.convert_to_lists
+	
+# -----------------------------------------------------------------------------------------
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+	
+	# bulk rename
+	def do_rename(self):
+		import csv 
+		data = csv.reader(self.get_csv_data().splitlines())
+		
+		updated = 0
+				
+		msgprint(self.doc.rename_doctype)
+		
+		if self.doc.rename_doctype == 'Account':
+			for line in data:
+				if len(line)==2:
+					rec = sql("select tc.abbr, ta.name from `tabAccount` ta, `tabCompany` tc where ta.company = tc.name and ta.account_name = %s", line[0], as_dict=1)
+					if rec:										
+						new_name = line[1] + ' - ' + rec[0]['abbr']						
+						
+						webnotes.conn.begin()
+						webnotes.model.rename(self.doc.rename_doctype, rec[0]['name'], new_name)						
+						sql("update `tabAccount` set account_name = '%s' where name = '%s'" %(line[1],new_name))						
+						webnotes.conn.commit()												
+						
+						updated += 1			
+				else:
+					msgprint("[Ignored] Incorrect format: %s" % str(line))		
+		else:		
+			for line in data:
+				if len(line)==2:
+				
+					webnotes.conn.begin()				
+
+					obj = get_obj(self.doc.rename_doctype, line[0])
+					if hasattr(obj, 'on_rename'):
+						obj.on_rename(line[1],line[0])			
+
+					webnotes.model.rename(self.doc.rename_doctype, line[0], line[1])
+					
+					webnotes.conn.commit()
+						
+					updated += 1
+				else:
+					msgprint("[Ignored] Incorrect format: %s" % str(line))
+		
+		
+		msgprint("<b>%s</b> items updated" % updated)		
+
+	# Update CSV data
+	def get_csv_data(self):
+		if not self.doc.file_list:
+		  msgprint("File not attached!")
+		  raise Exception
+
+		fid = self.doc.file_list.split(',')[1]
+		  
+		from webnotes.utils import file_manager
+		fn, content = file_manager.get_file(fid)
+		
+		if not type(content) == str:
+		  content = content.tostring()
+
+		return content
diff --git a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt
new file mode 100644
index 0000000..f15d3a9
--- /dev/null
+++ b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt
@@ -0,0 +1,99 @@
+# DocType, Bulk Rename Tool
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-07-08 13:30:05',
+		'docstatus': 0,
+		'modified': '2011-07-08 13:30:05',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1310035501',
+		'allow_attach': 1,
+		'autoname': 'field:rename_doctype',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'Utilities',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'version': 6
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Bulk Rename Tool',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Bulk Rename Tool',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'read': 1,
+		'role': 'System Manager'
+	},
+
+	# DocType, Bulk Rename Tool
+	{
+		'doctype': 'DocType',
+		'name': 'Bulk Rename Tool'
+	},
+
+	# DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'idx': 1,
+		'permlevel': 0,
+		'submit': 1,
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'idx': 2,
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'rename_doctype',
+		'fieldtype': 'Data',
+		'idx': 1,
+		'label': 'Rename DocType',
+		'options': 'Suggest',
+		'reqd': 1
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'file_list',
+		'fieldtype': 'Text',
+		'idx': 2,
+		'label': 'File List'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Button',
+		'idx': 3,
+		'label': 'Rename',
+		'options': 'do_rename'
+	}
+]
\ No newline at end of file
diff --git a/utilities/doctype/reposting_tool/reposting_tool.py b/utilities/doctype/reposting_tool/reposting_tool.py
index bda9afd..c4f021b 100644
--- a/utilities/doctype/reposting_tool/reposting_tool.py
+++ b/utilities/doctype/reposting_tool/reposting_tool.py
@@ -44,7 +44,7 @@
 	# =============================================================================
 	def get_bin_qty(self, wh, item):
 		# get actual_qty
-		act_qty = sql("select ifnull(actual_qty, 0) from `tabBin` where warehouse = '%s' and item_code = '%s'" % (wh, item))
+		act_qty = sql("select sum(actual_qty) from `tabStock Ledger Entry` where warehouse = '%s' and item_code = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (wh, item))
 		act_qty = act_qty and flt(act_qty[0][0]) or 0
 	
 		# get indented_qty 
@@ -120,6 +120,17 @@
 			self.repair_bin(bin[0])
 
 	# =============================================================================
+	def repair_bins_for_illegal_cancelled(self, after_date = '2011-01-01'):
+		bins = sql("select name from tabBin where modified >= %s", after_date)
+		cnt = 0
+		for bin in bins:
+			if cnt % 20 == 0: 
+				sql("commit")
+				sql("start transaction")
+			cnt += 1
+	
+			self.repair_bin(bin[0])
+	# =============================================================================
 	def repair_opening_bal(self, d, acc_obj, past_yr, fiscal_yr):
 		# check opening balance
 		opbal = sql("select balance from `tabAccount Balance` where account=%s and period = %s", (acc_obj.doc.name, past_yr))
