fix: Make conversion rate optional for non itemized items (#18540)
diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py
index 981ee5d..8c0a1e5 100644
--- a/erpnext/buying/utils.py
+++ b/erpnext/buying/utils.py
@@ -30,7 +30,9 @@
# for it to be considered for latest purchase rate
if flt(d.conversion_factor):
last_purchase_rate = flt(d.base_rate) / flt(d.conversion_factor)
- else:
+ # Check if item code is present
+ # Conversion factor should not be mandatory for non itemized items
+ elif d.item_code:
frappe.throw(_("UOM Conversion factor is required in row {0}").format(d.idx))
# update last purchsae rate
@@ -84,13 +86,13 @@
items = json.loads(items)
mr_list = []
for item in items:
- material_request = frappe.db.sql("""SELECT distinct mr.name AS mr_name,
- (mr_item.qty - mr_item.ordered_qty) AS qty,
+ material_request = frappe.db.sql("""SELECT distinct mr.name AS mr_name,
+ (mr_item.qty - mr_item.ordered_qty) AS qty,
mr_item.item_code AS item_code,
- mr_item.name AS mr_item
+ mr_item.name AS mr_item
FROM `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
WHERE mr.name = mr_item.parent
- AND mr_item.item_code = %(item)s
+ AND mr_item.item_code = %(item)s
AND mr.material_request_type = 'Purchase'
AND mr.per_ordered < 99.99
AND mr.docstatus = 1
@@ -98,6 +100,6 @@
ORDER BY mr_item.item_code ASC""",{"item": item}, as_dict=1)
if material_request:
mr_list.append(material_request)
-
+
return mr_list
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 0b4d38c..588f74d 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -395,7 +395,9 @@
def set_qty_as_per_stock_uom(self):
for d in self.get("items"):
if d.meta.get_field("stock_qty"):
- if not d.conversion_factor:
+ # Check if item code is present
+ # Conversion factor should not be mandatory for non itemized items
+ if not d.conversion_factor and d.item_code:
frappe.throw(_("Row {0}: Conversion Factor is mandatory").format(d.idx))
d.stock_qty = flt(d.qty) * flt(d.conversion_factor)