Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/patches/october_2012/find_wrong_voucher.py b/patches/october_2012/find_wrong_voucher.py
deleted file mode 100644
index 637ed1d..0000000
--- a/patches/october_2012/find_wrong_voucher.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def execute():
-	import webnotes
-	from webnotes.utils import flt
-	vouchers = webnotes.conn.sql("""
-		select parent, parenttype, modified, sum(if(add_deduct_tax='Add', tax_amount, -tax_amount)) as tax from `tabPurchase Taxes and Charges`
-		where modified >= '2012-07-12'
-		and category in ('Total', 'Valuation and Total')
-		and parenttype != 'Purchase Taxes and Charges Master'
-		group by parenttype, parent
-	""")
-	
-	for d in vouchers:
-		total_tax = webnotes.conn.sql("""select total_tax from `tab%s` where name = %s""" %
-			(d[1], '%s'), d[0])
-		if total_tax and flt(total_tax[0][0]) != flt(d[3]):
-			print d
\ No newline at end of file
diff --git a/patches/october_2012/fix_wrong_vouchers.py b/patches/october_2012/fix_wrong_vouchers.py
new file mode 100644
index 0000000..6218861
--- /dev/null
+++ b/patches/october_2012/fix_wrong_vouchers.py
@@ -0,0 +1,65 @@
+def execute():
+	import webnotes
+	from webnotes.utils import flt
+	from webnotes.model.code import get_obj
+
+	vouchers = webnotes.conn.sql("""
+		select 
+			parent, parenttype, modified, docstatus, 
+			sum(if(category in ('Valuation and Total', 'Total') and add_deduct_tax='Add',
+ 				tax_amount, 0)) as tax_added, 
+			sum(if(category in ('Valuation and Total', 'Total') and add_deduct_tax='Deduct', 
+ 				tax_amount, 0)) as tax_ded			
+		from 
+			`tabPurchase Taxes and Charges`
+		where 
+			modified >= '2012-07-12'
+			and parenttype != 'Purchase Taxes and Charges Master'
+			and parent not like 'old_p%'
+			and docstatus != 2
+		group by parenttype, parent
+		order by modified
+	""", as_dict=1)
+
+	for d in vouchers:
+		current_total_tax = webnotes.conn.sql("""select total_tax from `tab%s` where name = %s""" %
+			(d['parenttype'], '%s'), d['parent'])
+		correct_total_tax = flt(d['tax_added']) - flt(d['tax_ded'])
+		
+		if flt(current_total_tax[0][0]) != correct_total_tax:
+			if d['parenttype'] == 'Purchase Invoice':
+				webnotes.conn.sql("""
+					update `tab%s` 
+					set 
+						total_tax = %s, 
+						other_charges_added = %s, 
+						other_charges_added_import = other_charges_added / conversion_rate, 
+						other_charges_deducted = %s, 
+						other_charges_deducted_import = other_charges_deducted / conversion_rate, 
+						grand_total = net_total + other_charges_added - other_charges_deducted,
+						grand_total_import = grand_total / conversion_rate, 
+						total_amount_to_pay = grand_total - total_tds_on_voucher,
+						outstanding_amount = total_amount_to_pay - total_advance
+					where 
+						name = %s
+				""" % (d['parenttype'], '%s', '%s', '%s', '%s'), 
+					(correct_total_tax, d['tax_added'], d['tax_ded'], d['parent']))
+					
+				# post gl entry
+				if d['docstatus'] == 1:
+					webnotes.conn.sql("""update `tabGL Entry` set is_cancelled = 'No' 
+						where voucher_type = %s and voucher_no = %s""", 
+						(d['parenttype'], d['parent']))
+					obj = get_obj(d['parenttype'], d['parent'], with_children=1)
+					obj.make_gl_entries()
+				
+			else:
+				webnotes.conn.sql("""
+					update `tab%s` 
+					set 
+						total_tax = %s, 
+						grand_total = net_total + total_tax, 
+						grand_total_import = grand_total / conversion_rate
+					where 
+						name = %s
+				""" % (d[1], '%s', '%s'), (correct_total_tax, d['parent']))
\ No newline at end of file