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()