[minor] [fix] apply float precision on over-billing validation
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 539cef5..141811d 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -71,7 +71,8 @@
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 8f33eb3..c27f999 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -93,7 +93,8 @@
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 822717b..8e531fb 100644
--- a/controllers/accounts_controller.py
+++ b/controllers/accounts_controller.py
@@ -382,18 +382,21 @@
"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)),