Merge pull request #33896 from rohitwaghchaure/inventory-dimension-mandatory
feat: mandatory and mandatory depends on in inventory dimension
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
index ba1023a..0310682 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
@@ -37,7 +37,7 @@
if (frm.doc.__onload && frm.doc.__onload.has_stock_ledger
&& frm.doc.__onload.has_stock_ledger.length) {
let allow_to_edit_fields = ['disabled', 'fetch_from_parent',
- 'type_of_transaction', 'condition'];
+ 'type_of_transaction', 'condition', 'mandatory_depends_on'];
frm.fields.forEach((field) => {
if (!in_list(allow_to_edit_fields, field.df.fieldname)) {
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
index 4397e11..eb6102a 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
@@ -24,6 +24,9 @@
"istable",
"applicable_condition_example_section",
"condition",
+ "conditional_mandatory_section",
+ "reqd",
+ "mandatory_depends_on",
"conditional_rule_examples_section",
"html_19"
],
@@ -153,11 +156,28 @@
"fieldname": "conditional_rule_examples_section",
"fieldtype": "Section Break",
"label": "Conditional Rule Examples"
+ },
+ {
+ "description": "To apply condition on parent field use parent.field_name and to apply condition on child table use doc.field_name. Here field_name could be based on the actual column name of the respective field.",
+ "fieldname": "mandatory_depends_on",
+ "fieldtype": "Small Text",
+ "label": "Mandatory Depends On"
+ },
+ {
+ "fieldname": "conditional_mandatory_section",
+ "fieldtype": "Section Break",
+ "label": "Mandatory Section"
+ },
+ {
+ "default": "0",
+ "fieldname": "reqd",
+ "fieldtype": "Check",
+ "label": "Mandatory"
}
],
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2022-11-15 15:50:16.767105",
+ "modified": "2023-01-31 13:44:38.507698",
"modified_by": "Administrator",
"module": "Stock",
"name": "Inventory Dimension",
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
index 009548a..db2b5d0 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
@@ -126,6 +126,8 @@
insert_after="inventory_dimension",
options=self.reference_document,
label=self.dimension_name,
+ reqd=self.reqd,
+ mandatory_depends_on=self.mandatory_depends_on,
),
]
@@ -142,6 +144,8 @@
"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["mandatory_depends_on"] = ""
+ dimension_field["reqd"] = 0
dimension_field["fieldname"] = self.target_fieldname
custom_fields["Stock Ledger Entry"] = dimension_field
diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
index edff3fd..28b1ed9 100644
--- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
@@ -85,6 +85,9 @@
condition="parent.purpose == 'Material Issue'",
)
+ inv_dim1.reqd = 0
+ inv_dim1.save()
+
create_inventory_dimension(
reference_document="Shelf",
type_of_transaction="Inward",
@@ -205,6 +208,48 @@
)
)
+ def test_check_mandatory_dimensions(self):
+ doc = create_inventory_dimension(
+ reference_document="Pallet",
+ type_of_transaction="Outward",
+ dimension_name="Pallet",
+ apply_to_all_doctypes=0,
+ document_type="Stock Entry Detail",
+ )
+
+ doc.reqd = 1
+ doc.save()
+
+ self.assertTrue(
+ frappe.db.get_value(
+ "Custom Field", {"fieldname": "pallet", "dt": "Stock Entry Detail", "reqd": 1}, "name"
+ )
+ )
+
+ doc.load_from_db
+ doc.reqd = 0
+ doc.save()
+
+ def test_check_mandatory_depends_on_dimensions(self):
+ doc = create_inventory_dimension(
+ reference_document="Pallet",
+ type_of_transaction="Outward",
+ dimension_name="Pallet",
+ apply_to_all_doctypes=0,
+ document_type="Stock Entry Detail",
+ )
+
+ doc.mandatory_depends_on = "t_warehouse"
+ doc.save()
+
+ self.assertTrue(
+ frappe.db.get_value(
+ "Custom Field",
+ {"fieldname": "pallet", "dt": "Stock Entry Detail", "mandatory_depends_on": "t_warehouse"},
+ "name",
+ )
+ )
+
def prepare_test_data():
if not frappe.db.exists("DocType", "Shelf"):
@@ -251,6 +296,22 @@
create_warehouse("Rack Warehouse")
+ if not frappe.db.exists("DocType", "Pallet"):
+ frappe.get_doc(
+ {
+ "doctype": "DocType",
+ "name": "Pallet",
+ "module": "Stock",
+ "custom": 1,
+ "naming_rule": "By fieldname",
+ "autoname": "field:pallet_name",
+ "fields": [{"label": "Pallet Name", "fieldname": "pallet_name", "fieldtype": "Data"}],
+ "permissions": [
+ {"role": "System Manager", "permlevel": 0, "read": 1, "write": 1, "create": 1, "delete": 1}
+ ],
+ }
+ ).insert(ignore_permissions=True)
+
def create_inventory_dimension(**args):
args = frappe._dict(args)