brotherton-erpnext/patches/october_2012/fix_wrong_vouchers.py

83 lines
3.1 KiB
Python
Raw Normal View History

def execute():
import webnotes
from webnotes.utils import flt
from webnotes.model.code import get_obj
from webnotes.utils import money_in_words
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']))
else:
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 + total_tax,
grand_total_import = grand_total / conversion_rate,
rounded_total = round(grand_total)
where
name = %s
""" % (d['parenttype'], '%s', '%s', '%s', '%s'),
(correct_total_tax, d['tax_added'], d['tax_ded'], d['parent']))
# set in words
obj = get_obj(d['parenttype'], d['parent'], with_children=1)
base_currency = webnotes.conn.get_value('Company', obj.doc.company, 'default_currency')\
or get_defaults('default_currency')
webnotes.conn.set_value(d['parenttype'], d['parent'], \
'in_words', money_in_words(obj.doc.grand_total, base_currency))
webnotes.conn.set_value(d['parenttype'], d['parent'], \
'in_words_import', money_in_words(obj.doc.grand_total_import, obj.doc.currency))
# fix gl entries
if d['parenttype'] == 'Purchase Invoice' and d['docstatus'] == 1:
webnotes.conn.sql("""update `tabGL Entry` set is_cancelled = 'Yes'
where voucher_type = %s and voucher_no = %s""",
(d['parenttype'], d['parent']))
obj.make_gl_entries()