fix: validate reorder group warehouse (#41478)
This commit is contained in:
@@ -5,7 +5,7 @@ import copy
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _, bold
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.query_builder import Interval
|
from frappe.query_builder import Interval
|
||||||
from frappe.query_builder.functions import Count, CurDate, UnixTimestamp
|
from frappe.query_builder.functions import Count, CurDate, UnixTimestamp
|
||||||
@@ -469,6 +469,13 @@ class Item(Document):
|
|||||||
def validate_warehouse_for_reorder(self):
|
def validate_warehouse_for_reorder(self):
|
||||||
"""Validate Reorder level table for duplicate and conditional mandatory"""
|
"""Validate Reorder level table for duplicate and conditional mandatory"""
|
||||||
warehouse_material_request_type: list[tuple[str, str]] = []
|
warehouse_material_request_type: list[tuple[str, str]] = []
|
||||||
|
|
||||||
|
_warehouse_before_save = frappe._dict()
|
||||||
|
if not self.is_new() and self._doc_before_save:
|
||||||
|
_warehouse_before_save = {
|
||||||
|
d.name: d.warehouse for d in self._doc_before_save.get("reorder_levels") or []
|
||||||
|
}
|
||||||
|
|
||||||
for d in self.get("reorder_levels"):
|
for d in self.get("reorder_levels"):
|
||||||
if not d.warehouse_group:
|
if not d.warehouse_group:
|
||||||
d.warehouse_group = d.warehouse
|
d.warehouse_group = d.warehouse
|
||||||
@@ -485,6 +492,19 @@ class Item(Document):
|
|||||||
if d.warehouse_reorder_level and not d.warehouse_reorder_qty:
|
if d.warehouse_reorder_level and not d.warehouse_reorder_qty:
|
||||||
frappe.throw(_("Row #{0}: Please set reorder quantity").format(d.idx))
|
frappe.throw(_("Row #{0}: Please set reorder quantity").format(d.idx))
|
||||||
|
|
||||||
|
if d.warehouse_group and d.warehouse:
|
||||||
|
if _warehouse_before_save.get(d.name) == d.warehouse:
|
||||||
|
continue
|
||||||
|
|
||||||
|
child_warehouses = get_child_warehouses(d.warehouse_group)
|
||||||
|
if d.warehouse not in child_warehouses:
|
||||||
|
frappe.throw(
|
||||||
|
_(
|
||||||
|
"Row #{0}: The warehouse {1} is not a child warehouse of a group warehouse {2}"
|
||||||
|
).format(d.idx, bold(d.warehouse), bold(d.warehouse_group)),
|
||||||
|
title=_("Incorrect Check in (group) Warehouse for Reorder"),
|
||||||
|
)
|
||||||
|
|
||||||
def stock_ledger_created(self):
|
def stock_ledger_created(self):
|
||||||
if not hasattr(self, "_stock_ledger_created"):
|
if not hasattr(self, "_stock_ledger_created"):
|
||||||
self._stock_ledger_created = len(
|
self._stock_ledger_created = len(
|
||||||
@@ -1360,3 +1380,10 @@ def get_asset_naming_series():
|
|||||||
from erpnext.assets.doctype.asset.asset import get_asset_naming_series
|
from erpnext.assets.doctype.asset.asset import get_asset_naming_series
|
||||||
|
|
||||||
return get_asset_naming_series()
|
return get_asset_naming_series()
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.request_cache
|
||||||
|
def get_child_warehouses(warehouse):
|
||||||
|
from erpnext.stock.doctype.warehouse.warehouse import get_child_warehouses
|
||||||
|
|
||||||
|
return get_child_warehouses(warehouse)
|
||||||
|
|||||||
@@ -889,6 +889,27 @@ class TestItem(FrappeTestCase):
|
|||||||
self.assertEqual(data[0].description, item.description)
|
self.assertEqual(data[0].description, item.description)
|
||||||
self.assertTrue("description" in data[0])
|
self.assertTrue("description" in data[0])
|
||||||
|
|
||||||
|
def test_group_warehouse_for_reorder_item(self):
|
||||||
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
|
|
||||||
|
item_doc = make_item("_Test Group Warehouse For Reorder Item", {"is_stock_item": 1})
|
||||||
|
warehouse = create_warehouse("_Test Warehouse - _TC")
|
||||||
|
warehouse_doc = frappe.get_doc("Warehouse", warehouse)
|
||||||
|
warehouse_doc.db_set("parent_warehouse", "")
|
||||||
|
|
||||||
|
item_doc.append(
|
||||||
|
"reorder_levels",
|
||||||
|
{
|
||||||
|
"warehouse": warehouse,
|
||||||
|
"warehouse_reorder_level": 10,
|
||||||
|
"warehouse_reorder_qty": 100,
|
||||||
|
"material_request_type": "Purchase",
|
||||||
|
"warehouse_group": "_Test Warehouse Group - _TC",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertRaises(frappe.ValidationError, item_doc.save)
|
||||||
|
|
||||||
|
|
||||||
def set_item_variant_settings(fields):
|
def set_item_variant_settings(fields):
|
||||||
doc = frappe.get_doc("Item Variant Settings")
|
doc = frappe.get_doc("Item Variant Settings")
|
||||||
|
|||||||
Reference in New Issue
Block a user