From 9a290fdfc969b1b5652d8c68ae6c146d1b21a79a Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 17 Apr 2024 21:45:27 +0530 Subject: [PATCH] fix: validate uom is integer for PR item --- erpnext/controllers/subcontracting_controller.py | 3 --- .../stock/doctype/purchase_receipt/purchase_receipt.py | 7 +++++-- erpnext/utilities/transaction_base.py | 9 +++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index fb1ed792b5b..fc66345aeee 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -539,9 +539,6 @@ class SubcontractingController(StockController): 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/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 5ae0841fcc0..e507a20cc83 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -239,8 +239,7 @@ class PurchaseReceipt(BuyingController): 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 @@ class PurchaseReceipt(BuyingController): 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 d89095ef3d3..3b7812f96c2 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -30,8 +30,8 @@ class TransactionBase(StatusUpdater): 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 @@ def validate_uom_is_integer(doc, uom_field, qty_fields, child_dt=None): 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)),