rename dt patch updated
diff --git a/erpnext/patches/jan_mar_2012/rename_dt.py b/erpnext/patches/jan_mar_2012/rename_dt.py
index b3bcc34..bd703a5 100644
--- a/erpnext/patches/jan_mar_2012/rename_dt.py
+++ b/erpnext/patches/jan_mar_2012/rename_dt.py
@@ -1,14 +1,74 @@
-def execute():
-	import webnotes
-	from webnotes.model import rename, delete_doc
-	from webnotes.model.code import get_obj
-	from wnf import replace_code
-	import os
-	 
+import webnotes
+from webnotes.model import rename, delete_doc
+from webnotes.model.code import get_obj
+from wnf import replace_code
+from termcolor import colored
+from webnotes.modules.module_manager import reload_doc
+from webnotes.utils import make_esc
+import os
 
-	# delete dt
-	#-------------
-	del_mapper = ['Production Forecast-Production Planning Tool', 'Production Forecast-Production Plan']
+
+
+def execute():
+	# delete dt, mapper
+	delete_dt_and_mapper()
+	
+	#---------------------------------------------------
+	# doctype renaming
+	rendt = get_dt_to_be_renamed()
+	# Rename dt	in db
+	rename_in_db(rendt, 'DocType', 1)
+	# Upadte dt in records
+	update_dt_in_records(rendt)
+
+	#---------------------------------------------------
+	# Dt Mapper renaming
+	ren_mapper = get_mapper_to_be_renamed()
+	# Rename mapper in db
+	rename_in_db(ren_mapper, 'DocType Mapper', 0)
+
+	#---------------------------------------------------
+	# GL Mapper renaming
+	gl_mapper = {'Receivable Voucher': 'Sales Invoice', 'Payable Voucher': 'Purchase Invoice'}
+	rename_in_db(gl_mapper, 'GL Mapper', 0)
+
+
+	#---------------------------------------------------
+	# remove dt label
+	webnotes.conn.sql("""delete from `tabDocType Label` where name in ('Ticket', 'Receivable Voucher', 
+		'QA Inspection Report', 'Payable Voucher', 'Manage Account', 'Indent', 'DocLayer')""")
+
+	#---------------------------------------------------
+	# Reload mapper from file
+	for d in ren_mapper:
+		mod = '_'.join(webnotes.conn.sql("select module from `tabDocType Mapper` where name = %s", ren_mapper[d])[0][0].lower().split())
+		reload_doc(mod, 'DocType Mapper', ren_mapper[d])
+
+	# reload custom search criteria
+	for d in  webnotes.conn.sql("""select name, module from `tabSearch Criteria` where ifnull(standard, 'Yes') = 'Yes' and ifnull(disabled, 0) = 0"""):
+		reload_doc(d[1], 'search_criteria', d[0])
+
+	# reload custom print format
+	for d in webnotes.conn.sql("select name, module from `tabPrint Format` where ifnull(standard, 'Yes') = 'Yes'"):
+		reload_doc(d[1], 'Print Format', d[0])
+
+	#  Reload GL Mapper
+	for d in webnotes.conn.sql("select name from `tabGL Mapper`"):
+		reload_doc('accounts', 'GL Mapper', d[0])
+		
+	#gl entry, stock ledger entry, 
+	webnotes.conn.sql("update `tabDocField` set options =replace(options, %s, %s) where fieldtype = 'Select' and ")
+	select parent, fieldname from tabDocField where options like '%Receivable Voucher%' and fieldtype = 'Select'
+
+
+
+	# T0-do-list
+	# gl mapper name
+
+
+
+def delete_dt_and_mapper():
+	del_mapper = ['Production Forecast-Production Planning Tool', 'Production Forecast-Production Plan', 'Sales Order-Production Plan']
 	for d in del_mapper:
 		delete_doc('DocType Mapper', d)
 
@@ -17,12 +77,78 @@
 	for d in del_dt:
 		delete_doc('DocType', d)
 
-	
-	# Rename dt	
-	#-------------
+
+def rename_in_db(ren_data, data_type, is_doctype):
+	for d in ren_data:
+		print colored('Renaming... ' + d + ' --> '+ ren_data[d], 'yellow')
+		#rename
+		try:
+			rename(data_type, d, ren_data[d], is_doctype)
+		except Exception, e:
+			print e
+			pass
+
+
+def update_dt_in_records(rendt):
+	for d in rendt:
+		# Feed, property setter, search criteria, gl mapper, form 16A, naming series options, doclayer - dodtype is not mentioed in options
+		dt_list = webnotes.conn.sql("select parent, fieldname from tabDocField where fieldname in ('dt', 'doctype', 'doc_type', 'dt_type') and ifnull(options, '') = ''")
+		for dt in record_dt:
+			webnotes.conn.sql("update `tab%s` set %s = replace(%s, '%s', '%s') where %s = '%s'" % (dt[0], dt[1], dt[1], d, rendt[d], dt[1], d))
+
+		# gl mapper, gl entry
+		webnotes.conn.sql("update `tabGL Mapper Detail` set against_voucher_type = replace(against_voucher_type, %s, %s) where against_voucher_type like '%%%s%%'" % (d, rendt[d], d))
+		webnotes.conn.sql("update `tabGL Entry` set against_voucher_type = replace(against_voucher_type, %s, %s) where against_voucher_type = '%s'" % (d, rendt[d], d))
+		webnotes.conn.sql("update `tabGL Entry` set voucher_type = replace(voucher_type, %s, %s) where voucher_type = '%s'" % (d, rendt[d], d))
+
+		# Stock ledger entry
+
+		# Custom fld: options
+		webnotes.conn.sql("update `tabCustom Field` set options = replace(options, %s, %s) where fieldtype in ('Link', 'Select')", (d, rendt[d]))
+		
+		#Property Setter: value (if property=options)
+		webnotes.conn.sql("update `tabProperty Setter` set value = replace(value, %s, %s) where property = 'Options'", (d, rendt[d]))
+
+		# custom script: script
+		webnotes.conn.sql("update `tabCustom Script` set script = replace(script, %s, %s)", (d, rendt[d]))
+
+		# print format: html
+		webnotes.conn.sql("update `tabPrint Format` set html = replace(html, %s, %s) where ifnull(standard, 'Yes') = 'No'", (d, rendt[d]))
+
+		# custom report: doc_type, filters, columns, parent_doc_type, add_cond, add_col, add_tab,
+		#					dis_filters, group_by, sort_by, report_script, server_script, custom_query
+		webnotes.conn.sql("""
+			update
+				`tabSearch Criteria` 
+			set 
+				doc_type		= replace(doc_type, %s, %s), 
+				filters			= replace(filters, %s, %s), 
+				columns			= replace(columns, %s, %s), 
+				parent_doc_type = replace(parent_doc_type, %s, %s), 
+				add_cond		= replace(add_cond, %s, %s), 
+				add_col			= replace(add_col, %s, %s), 
+				add_tab			= replace(add_tab, %s, %s), 
+				dis_filters		= replace(dis_filters, %s, %s), 
+				group_by		= replace(group_by, %s, %s), 
+				sort_by			= replace(sort_by, %s, %s), 
+				report_script	= replace(report_script, %s, %s), 
+				server_script	= replace(server_script, %s, %s), 
+				custom_query	= replace(custom_query, %s, %s)
+			where 
+				ifnull(standard, 'Yes') = 'No'
+		""", (d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], 
+				d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], d, rendt[d], ))
+
+
+
+
+def get_dt_to_be_renamed():
 	rendt = {
-		'KRA Sheet'					:	'Appraisal Template Goal'
-	}
+		'Receivable Voucher'		:	'Sales Invoice',
+		'RV Detail'					:	'Sales Invoice Item',
+		'RV Tax Detail'				:	'Sales Taxes and Charges',
+		'Advance Adjustment Detail' :	'Sales Invoice Advance',
+}
 
 	new = {
 		'Receivable Voucher'		:	'Sales Invoice',
@@ -100,36 +226,94 @@
 		'Professional Training Details'		: 'Employee Training',
 		'Previous Experience Detail'		: 'Employee External Work History',
 	}
-
-	for d in rendt:
-		print d + ' --------> '+ rendt[d]
-
-		#rename
-		rename('DocType', d, rendt[d], 1)
-
-		# update txt
-		obj = get_obj('DocType', rendt[d])
-		obj.doc.save()
+	return rendt
 
 
-		# RUN ONLY IN LOCAL
-		######################
+def get_mapper_to_be_renamed():
+	ren_mapper = {	
+		'Sales Order-Receivable Voucher'	:	'Sales Order-Sales Invoice',
+		'Receivable Voucher-Delivery Note' 	: 	'Sales Invoice-Delivery Note',
+		'Delivery Note-Receivable Voucher'	: 	'Delivery Note-Sales Invoice'
+	}
 
-
-		# replace dt in js/py file
-		for extn in ['js', 'py', 'txt']:
-			replace_code('/var/www/erpnext/', d, rendt[d], extn)
-
-		
+	ren_map = {
+		'Sales Order-Receivable Voucher'	:	'Sales Order-Sales Invoice',
+		'Sales Order-Indent'				: 	'Sales Order-Purchase Request',
+		'Receivable Voucher-Delivery Note' 	: 	'Sales Invoice-Delivery Note',
+		'Purchase Receipt-Payable Voucher'	: 	'Purchase Receipt-Purchase Invoice',
+		'Purchase Order-Payable Voucher'	: 	'Purchase Order-Purchase Invoice',
+		'Project-Receivable Voucher' 		: 	'Project-Sales Invoice',
+		'Lead-Enquiry'						: 	'Lead-Opportunity',
+		'KRA Template-Appraisal'			: 	'Appraisal Template-Appraisal',
+		'Indent-Purchase Order'				: 	'Purchase Request-Purchase Order',
+		'Enquiry-Quotation'					: 	'Opportunity-Quotation',
+		'Delivery Note-Receivable Voucher'	: 	'Delivery Note-Sales Invoice'
+	}
+	return ren_mapper
 
 
 
 
+#--------------------------------------------------------------------------------------------------------
 
+
+def update_local_file_system():
+	""" RUN ONLY IN LOCAL"""
+	
+	# doctype renaming
+	rendt = get_dt_to_be_renamed()
+
+	# replace dt in js/py file
+	update_file_content(rendt)
+	# git mv
+	rename_dt_files(rendt)
+
+
+	# Mapper renaming
+	ren_mapper = get_mapper_to_be_renamed()
+
+	rename_mapper_files(ren_mapper)
 	
 
-#------TO-DO--------
-# remove dir
-# git remove
-# dt mapper rename
-# change in gl mapper
+	# git rm production dt mapper
+	os.system('git rm -r erpnext/production/DocType\ Mapper/')
+
+
+
+def update_file_content(rendt):
+	for d in rendt:
+		for extn in ['js', 'py', 'txt']:
+			replace_code('/var/www/erpnext/', d, rendt[d], extn)
+		
+		
+def rename_dt_files(rendt):
+	for d in rendt:
+		mod = webnotes.conn.sql("select module from tabDocType where name = %s", rendt[d])[0][0]
+		path = 'erpnext/' + '_'.join(mod.lower().split()) + '/doctype/'
+		old = '_'.join(d.lower().split())
+		new = '_'.join(rendt[d].lower().split())
+
+		# rename old dir
+		os.system('git mv ' + path + old + ' ' + path + new)
+		print 'git mv ' + path + old + ' ' + path + new
+
+		# rename all files in that dir
+		for extn in ['js', 'py', 'txt']:
+			if os.path.exists(path + new + '/'+ old + '.' +extn):
+				os.system('git mv ' + path + new + '/'+ old + '.' +extn + ' ' + path + new + '/' + new + '.' +extn)
+				print 'git mv ' + path + new + '/'+ old + '.' +extn + ' ' + path + new + '/' + new + '.' +extn
+
+
+def rename_mapper_files(ren_mapper):
+	for d in ren_mapper:
+		# module
+		mod = '_'.join(webnotes.conn.sql("select module from `tabDocType Mapper` where name = %s", ren_mapper[d])[0][0].lower().split())
+		path = 'erpnext/' + mod + '/DocType Mapper/'
+
+		# rename old dir
+		esc = make_esc('$ ')
+		os.system('git mv ' + esc(path + d) + ' ' + esc(path + ren_mapper[d]))
+		print 'git mv ' + esc(path + d) + ' ' + esc(path + ren_mapper[d])
+		os.system('git mv ' + esc(path + ren_mapper[d] + '/'+ d + '.' +extn) + ' ' + esc(path + ren_mapper[d] + '/' + ren_mapper[d] + '.' +extn))
+		print 'git mv ' + esc(path + ren_mapper[d] + '/'+ d + '.txt') + ' ' + esc(path + ren_mapper[d] + '/' + ren_mapper[d] + '.txt')
+