fix: duplicate custom fields for inventory dimension
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
index 9e8c10b..7b99b00 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
@@ -121,18 +121,24 @@
if self.apply_to_all_doctypes:
for doctype in get_inventory_documents():
- custom_fields.setdefault(doctype[0], dimension_fields)
- else:
+ if not field_exists(doctype[0], self.source_fieldname):
+ custom_fields.setdefault(doctype[0], dimension_fields)
+ elif not field_exists(self.document_type, self.source_fieldname):
custom_fields.setdefault(self.document_type, dimension_fields)
if not frappe.db.get_value(
"Custom Field", {"dt": "Stock Ledger Entry", "fieldname": self.target_fieldname}
- ):
+ ) and not field_exists("Stock Ledger Entry", self.target_fieldname):
dimension_field = dimension_fields[1]
dimension_field["fieldname"] = self.target_fieldname
custom_fields["Stock Ledger Entry"] = dimension_field
- create_custom_fields(custom_fields)
+ if custom_fields:
+ create_custom_fields(custom_fields)
+
+
+def field_exists(doctype, fieldname) -> str or None:
+ return frappe.db.get_value("DocField", {"parent": doctype, "fieldname": fieldname}, "name")
@frappe.whitelist()
diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
index 19ddc44..52b3deb 100644
--- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
@@ -191,6 +191,21 @@
self.assertEqual(sle_rack, "Rack 1")
+ def test_check_standard_dimensions(self):
+ create_inventory_dimension(
+ reference_document="Project",
+ type_of_transaction="Outward",
+ dimension_name="Project",
+ apply_to_all_doctypes=0,
+ document_type="Stock Ledger Entry",
+ )
+
+ self.assertFalse(
+ frappe.db.get_value(
+ "Custom Field", {"fieldname": "project", "dt": "Stock Ledger Entry"}, "name"
+ )
+ )
+
def prepare_test_data():
if not frappe.db.exists("DocType", "Shelf"):