mirror of
https://github.com/frappe/erpnext.git
synced 2026-10-29 22:57:42 +00:00
fix(assets): validate target asset when fetching WIP composite asset items
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user