fix outstanding and floating point issue in gl entry

This commit is contained in:
Nabin Hait 2013-02-13 15:50:39 +05:30
parent a9545794aa
commit 362455e749
7 changed files with 48 additions and 6 deletions

View File

@ -423,7 +423,7 @@ class DocType(BuyingController):
self.get_gl_dict({
"account": self.doc.credit_to,
"against": self.doc.against_expense_account,
"credit": self.doc.grand_total,
"credit": self.doc.total_amount_to_pay,
"remarks": self.doc.remarks,
"against_voucher": self.doc.name,
"against_voucher_type": self.doc.doctype,

View File

@ -76,8 +76,9 @@ cur_frm.cscript.add_deduct_tax = function(doc, cdt, cdn) {
alert("Please select Category first");
d.add_deduct_tax = '';
}
else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct'){
alert("You cannot Deduct when category is for valuation or for both(i.e total and valuation)");
else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
console.log([d.category, d.add_deduct_tax]);
msgprint("You cannot deduct when category is for 'Valuation' or 'Valuation and Total'");
d.add_deduct_tax = '';
}

View File

@ -70,6 +70,10 @@ def save_entries(gl_map, cancel, adv_adj, update_outstanding):
for entry in gl_map:
gle = Document('GL Entry', fielddata=entry)
# round off upto 2 decimal
gle.debit = flt(gle.debit, 2)
gle.credit = flt(gle.credit, 2)
# toggle debit, credit if negative entry
if flt(gle.debit) < 0 or flt(gle.credit) < 0:
_swap(gle)

View File

@ -778,10 +778,10 @@ cur_frm.cscript.calc_doc_values = function(doc, tname, fname, other_fname) {
var calculate_outstanding = function(doc) {
// total amount to pay
doc.total_amount_to_pay = flt(flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted));
doc.total_amount_to_pay = flt(doc.grand_total) - flt(doc.write_off_amount);
// outstanding amount
if(doc.docstatus==0) doc.outstanding_amount = flt(doc.net_total) + flt(doc.other_charges_added) - flt(doc.other_charges_deducted) - flt(doc.total_advance);
if(doc.docstatus==0) doc.outstanding_amount = doc.total_amount_to_pay - flt(doc.total_advance);
refresh_many(['total_amount_to_pay', 'outstanding_amount']);
}

View File

@ -0,0 +1,15 @@
def execute():
import webnotes
from webnotes.utils import flt
for dt in ["Sales Invoice", "Purchase Invoice"]:
records = webnotes.conn.sql("""select name, outstanding_amount from `tab%s`
where docstatus = 1""" % dt)
for r in records:
outstanding = webnotes.conn.sql("""
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) from `tabGL Entry`
where against_voucher = %s and against_voucher_type = %s
and ifnull(is_cancelled, 'No') = 'No'""", (r[0], dt))
if flt(r[1]) != abs(flt(outstanding[0][0])):
# print r, outstanding
webnotes.conn.sql("update `tab%s` set outstanding_amount = %s where name = %s" %
(dt, '%s', '%s'), (abs(flt(outstanding[0][0])), si[0]))

View File

@ -0,0 +1,22 @@
def execute():
import webnotes
from webnotes.utils import flt
records = webnotes.conn.sql("""select name, grand_total, debit_to from `tabSales Invoice`
where docstatus = 1""", as_dict=1)
for r in records:
gle = webnotes.conn.sql("""select name, debit from `tabGL Entry`
where account = %s and voucher_type = 'Sales Invoice' and voucher_no = %s
and ifnull(is_cancelled, 'No') = 'No' limit 1""", (r.debit_to, r.name), as_dict=1)
if gle:
diff = round((flt(r.grand_total) - flt(gle[0]['debit'])), 2)
if abs(diff) == 0.01:
# print r.name, r.grand_total, gle[0]['debit']
webnotes.conn.sql("""update `tabGL Entry` set debit = debit + %s
where name = %s""", (diff, gle[0]['name']))
webnotes.conn.sql("""update `tabGL Entry` set credit = credit - %s
where voucher_type = 'Sales Invoice' and voucher_no = %s
and credit > 0 limit 1""", (diff, r.name))

View File

@ -167,5 +167,5 @@ patch_list = [
"patches.february_2013.account_negative_balance",
"patches.february_2013.remove_account_utils_folder",
"patches.february_2013.update_company_in_leave_application",
"execute:webnotes.conn.sql_ddl('alter table tabSeries change `name` `name` varchar(100)')"
"execute:webnotes.conn.sql_ddl('alter table tabSeries change `name` `name` varchar(100)')",
]