From 19d945a4e75f75fd17e1053cb55dead1d789bce5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Jul 2013 18:35:39 +0530 Subject: [PATCH] [minor] [fix] apply float precision on over-billing validation --- .../doctype/purchase_invoice/purchase_invoice.py | 3 ++- accounts/doctype/sales_invoice/sales_invoice.py | 3 ++- controllers/accounts_controller.py | 15 +++++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py index 539cef5e46..141811d0f9 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -71,7 +71,8 @@ class DocType(BuyingController): self.validate_write_off_account() self.update_raw_material_cost() self.update_valuation_rate("entries") - self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount") + self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount", + "purchase_receipt_details") def get_credit_to(self): acc_head = sql("""select name, credit_days from `tabAccount` diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 8f33eb3ccd..c27f999fcf 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -93,7 +93,8 @@ class DocType(SellingController): self.validate_c_form() self.validate_time_logs_are_submitted() self.validate_recurring_invoice() - self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount") + self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount", + "delivery_note_details") def on_submit(self): if cint(self.doc.update_stock) == 1: diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py index 822717b372..8e531fbda8 100644 --- a/controllers/accounts_controller.py +++ b/controllers/accounts_controller.py @@ -382,18 +382,21 @@ class AccountsController(TransactionBase): "allocate_amount": 0 }) - def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on): + def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield): for item in self.doclist.get({"parentfield": "entries"}): if item.fields.get(item_ref_dn): already_billed = webnotes.conn.sql("""select sum(%s) from `tab%s` where %s=%s and docstatus=1""" % (based_on, self.tname, item_ref_dn, '%s'), item.fields[item_ref_dn])[0][0] - - max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", - item.fields[item_ref_dn], based_on)) - if max_allowed_amt and \ - flt(already_billed) + flt(item.fields[based_on]) > max_allowed_amt: + max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", + item.fields[item_ref_dn], based_on), self.precision(based_on, item)) + + total_billed_amt = flt(flt(already_billed) + flt(item.fields[based_on]), + self.precision(based_on, item)) + webnotes.errprint([max_allowed_amt, total_billed_amt]) + + if max_allowed_amt and total_billed_amt > max_allowed_amt: webnotes.msgprint(_("Row ")+ cstr(item.idx) + ": " + cstr(item.item_code) + _(" will be over-billed against mentioned ") + cstr(ref_dt) + _(". Max allowed " + cstr(based_on) + ": " + cstr(max_allowed_amt)),