fix(assets): validate target asset when fetching WIP composite asset items

This commit is contained in:
khushi8112
2026-10-26 15:40:48 +05:30
parent f45441986d
commit 3ffbf6301f
2 changed files with 48 additions and 2 deletions
@@ -7,7 +7,7 @@ import frappe
# import erpnext
from frappe import _
from frappe.utils import cint, flt, get_link_to_form
from frappe.utils import cint, cstr, flt, get_link_to_form
import erpnext
from erpnext.assets.doctype.asset.asset import _get_asset_value_after_depreciation
@@ -941,6 +941,9 @@ def get_items_tagged_to_wip_composite_asset(params):
if isinstance(params, str):
params = json.loads(params)
target_asset = cstr(params.get("target_asset"))
erpnext.require_permission("Asset", target_asset, "select")
fields = [
"item_code",
"item_name",
@@ -960,10 +963,13 @@ def get_items_tagged_to_wip_composite_asset(params):
pr_items = frappe.get_all(
"Purchase Receipt Item",
filters={"wip_composite_asset": params.get("target_asset"), "docstatus": 1},
filters={"wip_composite_asset": target_asset, "docstatus": 1},
fields=fields,
)
for purchase_receipt in {d.purchase_receipt for d in pr_items}:
erpnext.require_permission("Purchase Receipt", purchase_receipt)
stock_items = []
asset_items = []
@@ -21,6 +21,13 @@ from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_pu
from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle import (
make_serial_batch_bundle,
)
from erpnext.tests.permission_test_utils import (
as_user,
assert_refused_for_names,
assert_refused_without,
make_company_fenced_user,
make_fenced_user,
)
class TestAssetCapitalization(unittest.TestCase):
@@ -442,6 +449,39 @@ class TestAssetCapitalization(unittest.TestCase):
self.assertEqual(get_value_after_depreciation_on_disposal_date(asset.name, "2025-03-31"), 9399428)
def test_items_tagged_to_wip_composite_asset(self):
from erpnext.assets.doctype.asset_capitalization.asset_capitalization import (
get_items_tagged_to_wip_composite_asset,
)
target_asset = create_asset(is_composite_asset=1, warehouse="Stores - _TC")
pr = make_purchase_receipt(do_not_save=1)
pr.items[0].wip_composite_asset = target_asset.name
pr.insert()
pr.submit()
def build_kwargs(name):
return {"params": {"target_asset": name}}
roles = ["Manufacturing Manager", "Stock User"]
with as_user(
make_company_fenced_user("capitalization-other-company@example.com", roles, "_Test Company 1")
):
assert_refused_for_names(
self, get_items_tagged_to_wip_composite_asset, build_kwargs, [target_asset.name]
)
with as_user(make_fenced_user("capitalization-quality_manager@example.com", ["Quality Manager"])):
assert_refused_without(
self, [pr.name], get_items_tagged_to_wip_composite_asset, **build_kwargs(target_asset.name)
)
with as_user(make_fenced_user("capitalization-manufacturing_manager@example.com", roles)):
stock_items, _asset_items = get_items_tagged_to_wip_composite_asset(
**build_kwargs(target_asset.name)
)
self.assertEqual(stock_items[0].purchase_receipt, pr.name)
def create_asset_capitalization_data():
create_item("Capitalization Target Stock Item", is_stock_item=1, is_fixed_asset=0, is_purchase_item=0)