[feature] Ability to set UOM as Integer-only and related validations.

This commit is contained in:
Rushabh Mehta
2013-07-25 17:45:59 +05:30
parent 966c9f6a8e
commit 4dca40195e
39 changed files with 153 additions and 78 deletions

View File

@@ -17,7 +17,7 @@
from __future__ import unicode_literals
import webnotes
from webnotes import msgprint, _
from webnotes.utils import load_json, cstr, flt, now_datetime
from webnotes.utils import load_json, cstr, flt, now_datetime, cint
from webnotes.model.doc import addchild
from controllers.status_updater import StatusUpdater
@@ -276,6 +276,9 @@ class TransactionBase(StatusUpdater):
webnotes.bean(event_doclist).insert()
def validate_uom_is_integer(self, uom_field, qty_fields):
validate_uom_is_integer(self.doclist, uom_field, qty_fields)
def validate_with_previous_doc(self, source_dt, ref):
for key, val in ref.items():
is_child = val.get("is_child_table")
@@ -482,3 +485,23 @@ def validate_currency(args, item, meta=None):
def delete_events(ref_type, ref_name):
webnotes.delete_doc("Event", webnotes.conn.sql_list("""select name from `tabEvent`
where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True)
def validate_uom_is_integer(doclist, uom_field, qty_fields):
if isinstance(qty_fields, basestring):
qty_fields = [qty_fields]
integer_uoms = filter(lambda uom: webnotes.conn.get_value("UOM", uom,
"must_be_whole_number") or None, doclist.get_distinct_values(uom_field))
if not integer_uoms:
return
for d in doclist:
if d.fields.get(uom_field) in integer_uoms:
for f in qty_fields:
if d.fields.get(f):
if cint(d.fields[f])!=d.fields[f]:
webnotes.msgprint(_("For UOM") + " '" + d.fields[uom_field] \
+ "': " + _("Quantity cannot be a fraction.") \
+ " " + _("In Row") + ": " + str(d.idx),
raise_exception=True)