mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 21:49:18 +00:00
fix: auto unlink warehouse from item on delete (#26073)
* fix: auto unlink warehouse from item on delete * fix: sider * refactor: use delete_doc * test: add test for unlinking warehouse from item * refactor: add msgprint to inform user of unlink * refactor: cleanup and reuse extant functions * fix: don't delete row, update table
This commit is contained in:
@@ -11,6 +11,7 @@ from frappe.test_runner import make_test_records
|
|||||||
import erpnext
|
import erpnext
|
||||||
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
|
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
|
||||||
from erpnext.accounts.doctype.account.test_account import get_inventory_account, create_account
|
from erpnext.accounts.doctype.account.test_account import get_inventory_account, create_account
|
||||||
|
from erpnext.stock.doctype.item.test_item import create_item
|
||||||
|
|
||||||
test_records = frappe.get_test_records('Warehouse')
|
test_records = frappe.get_test_records('Warehouse')
|
||||||
|
|
||||||
@@ -92,6 +93,39 @@ class TestWarehouse(unittest.TestCase):
|
|||||||
self.assertTrue(frappe.db.get_value("Warehouse",
|
self.assertTrue(frappe.db.get_value("Warehouse",
|
||||||
filters={"account": "Test Warehouse for Merging 2 - TCP1"}))
|
filters={"account": "Test Warehouse for Merging 2 - TCP1"}))
|
||||||
|
|
||||||
|
def test_unlinking_warehouse_from_item_defaults(self):
|
||||||
|
company = "_Test Company"
|
||||||
|
|
||||||
|
warehouse_names = [f'_Test Warehouse {i} for Unlinking' for i in range(2)]
|
||||||
|
warehouse_ids = []
|
||||||
|
for warehouse in warehouse_names:
|
||||||
|
warehouse_id = create_warehouse(warehouse, company=company)
|
||||||
|
warehouse_ids.append(warehouse_id)
|
||||||
|
|
||||||
|
item_names = [f'_Test Item {i} for Unlinking' for i in range(2)]
|
||||||
|
for item, warehouse in zip(item_names, warehouse_ids):
|
||||||
|
create_item(item, warehouse=warehouse, company=company)
|
||||||
|
|
||||||
|
# Delete warehouses
|
||||||
|
for warehouse in warehouse_ids:
|
||||||
|
frappe.delete_doc("Warehouse", warehouse)
|
||||||
|
|
||||||
|
# Check Item existance
|
||||||
|
for item in item_names:
|
||||||
|
self.assertTrue(
|
||||||
|
bool(frappe.db.exists("Item", item)),
|
||||||
|
f"{item} doesn't exist"
|
||||||
|
)
|
||||||
|
|
||||||
|
item_doc = frappe.get_doc("Item", item)
|
||||||
|
for item_default in item_doc.item_defaults:
|
||||||
|
self.assertNotIn(
|
||||||
|
item_default.default_warehouse,
|
||||||
|
warehouse_ids,
|
||||||
|
f"{item} linked to {item_default.default_warehouse} in {warehouse_ids}."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def create_warehouse(warehouse_name, properties=None, company=None):
|
def create_warehouse(warehouse_name, properties=None, company=None):
|
||||||
if not company:
|
if not company:
|
||||||
company = "_Test Company"
|
company = "_Test Company"
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class Warehouse(NestedSet):
|
|||||||
throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
|
throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
|
||||||
|
|
||||||
self.update_nsm_model()
|
self.update_nsm_model()
|
||||||
|
self.unlink_from_items()
|
||||||
|
|
||||||
def check_if_sle_exists(self):
|
def check_if_sle_exists(self):
|
||||||
return frappe.db.sql("""select name from `tabStock Ledger Entry`
|
return frappe.db.sql("""select name from `tabStock Ledger Entry`
|
||||||
@@ -138,6 +139,12 @@ class Warehouse(NestedSet):
|
|||||||
self.save()
|
self.save()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
def unlink_from_items(self):
|
||||||
|
frappe.db.sql("""
|
||||||
|
update `tabItem Default`
|
||||||
|
set default_warehouse=NULL
|
||||||
|
where default_warehouse=%s""", self.name)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_children(doctype, parent=None, company=None, is_root=False):
|
def get_children(doctype, parent=None, company=None, is_root=False):
|
||||||
if is_root:
|
if is_root:
|
||||||
|
|||||||
Reference in New Issue
Block a user