Merge pull request #41067 from rohitwaghchaure/fixed-validation-for-voucher-no-and-qty
fix: validation for zero qty in SABB
diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py
index fb1ed79..fc66345 100644
--- a/erpnext/controllers/subcontracting_controller.py
+++ b/erpnext/controllers/subcontracting_controller.py
@@ -539,9 +539,6 @@
return serial_nos
def __add_supplied_item(self, item_row, bom_item, qty):
- if bom_item.get("qty"):
- bom_item.pop("qty")
-
bom_item.conversion_factor = item_row.conversion_factor
rm_obj = self.append(self.raw_material_table, bom_item)
if rm_obj.get("qty"):
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index 0813961..b5c6cd9 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -948,6 +948,21 @@
if self.qty <= 0:
frappe.throw(_("Quantity to Manufacture must be greater than 0."))
+ if (
+ self.stock_uom
+ and frappe.get_cached_value("UOM", self.stock_uom, "must_be_whole_number")
+ and abs(cint(self.qty) - flt(self.qty, self.precision("qty"))) > 0.0000001
+ ):
+ frappe.throw(
+ _(
+ "Qty To Manufacture ({0}) cannot be a fraction for the UOM {2}. To allow this, disable '{1}' in the UOM {2}."
+ ).format(
+ flt(self.qty, self.precision("qty")),
+ frappe.bold(_("Must be Whole Number")),
+ frappe.bold(self.stock_uom),
+ ),
+ )
+
if self.production_plan and self.production_plan_item and not self.production_plan_sub_assembly_item:
qty_dict = frappe.db.get_value(
"Production Plan Item", self.production_plan_item, ["planned_qty", "ordered_qty"], as_dict=1
diff --git a/erpnext/setup/doctype/employee/employee.js b/erpnext/setup/doctype/employee/employee.js
index d165d42..7a1efa8 100755
--- a/erpnext/setup/doctype/employee/employee.js
+++ b/erpnext/setup/doctype/employee/employee.js
@@ -18,18 +18,6 @@
refresh() {
erpnext.toggle_naming_series();
}
-
- salutation() {
- if (this.frm.doc.salutation) {
- this.frm.set_value(
- "gender",
- {
- Mr: "Male",
- Ms: "Female",
- }[this.frm.doc.salutation]
- );
- }
- }
};
frappe.ui.form.on("Employee", {
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 5ae0841..e507a20 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -239,8 +239,7 @@
self.po_required()
self.validate_items_quality_inspection()
self.validate_with_previous_doc()
- self.validate_uom_is_integer("uom", ["qty", "received_qty"])
- self.validate_uom_is_integer("stock_uom", "stock_qty")
+ self.validate_uom_is_integer()
self.validate_cwip_accounts()
self.validate_provisional_expense_account()
@@ -254,6 +253,10 @@
self.reset_default_field_value("rejected_warehouse", "items", "rejected_warehouse")
self.reset_default_field_value("set_from_warehouse", "items", "from_warehouse")
+ def validate_uom_is_integer(self):
+ super().validate_uom_is_integer("uom", ["qty", "received_qty"], "Purchase Receipt Item")
+ super().validate_uom_is_integer("stock_uom", "stock_qty", "Purchase Receipt Item")
+
def validate_cwip_accounts(self):
for item in self.get("items"):
if item.is_fixed_asset and is_cwip_accounting_enabled(item.asset_category):
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index d89095e..3b7812f 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -30,8 +30,8 @@
except ValueError:
frappe.throw(_("Invalid Posting Time"))
- def validate_uom_is_integer(self, uom_field, qty_fields):
- validate_uom_is_integer(self, uom_field, qty_fields)
+ def validate_uom_is_integer(self, uom_field, qty_fields, child_dt=None):
+ validate_uom_is_integer(self, uom_field, qty_fields, child_dt)
def validate_with_previous_doc(self, ref):
self.exclude_fields = ["conversion_factor", "uom"] if self.get("is_return") else []
@@ -210,12 +210,13 @@
for f in qty_fields:
qty = d.get(f)
if qty:
- if abs(cint(qty) - flt(qty, d.precision(f))) > 0.0000001:
+ precision = d.precision(f)
+ if abs(cint(qty) - flt(qty, precision)) > 0.0000001:
frappe.throw(
_(
"Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}."
).format(
- flt(qty, d.precision(f)),
+ flt(qty, precision),
d.idx,
frappe.bold(_("Must be Whole Number")),
frappe.bold(d.get(uom_field)),