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:
Alan 2021-06-17 18:13:23 +05:30 committed by GitHub
parent d3ccb024f8
commit f9390f596d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 0 deletions

View File

@ -11,6 +11,7 @@ from frappe.test_runner import make_test_records
import erpnext
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.stock.doctype.item.test_item import create_item
test_records = frappe.get_test_records('Warehouse')
@ -92,6 +93,39 @@ class TestWarehouse(unittest.TestCase):
self.assertTrue(frappe.db.get_value("Warehouse",
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):
if not company:
company = "_Test Company"

View File

@ -54,6 +54,7 @@ class Warehouse(NestedSet):
throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
self.update_nsm_model()
self.unlink_from_items()
def check_if_sle_exists(self):
return frappe.db.sql("""select name from `tabStock Ledger Entry`
@ -138,6 +139,12 @@ class Warehouse(NestedSet):
self.save()
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()
def get_children(doctype, parent=None, company=None, is_root=False):
if is_root: