Skip to content

Commit c1cc1db

Browse files
mergify[bot]madelyngamble2khushi8112
authored
fix: unable to split asset from capitalization (backport #52020) (#52114)
fix: unable to split asset from capitalization (#52020) * fix: Allow split asset from capitalized composite asset (fixes #52016) * test: Add test case for splitting asset created via capitalization (fixes #52016) * docs: Add docstring to before_submit method * fix: Remove unused variable and fix UTF-8 encoding in asset files * fix: Remove UTF-8 BOM from asset.py to fix linting * fix: Fix test_split_asset_created_via_capitalization test parameters * fix: Remove unused import create_item * chore: remove unnecessary comments Removed validation comments for composite asset capitalization in before_submit method. --------- (cherry picked from commit 7e9647f) Co-authored-by: madelyngamble2 <madelyngamble2@gmail.com> Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
1 parent 1927adb commit c1cc1db

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

erpnext/assets/doctype/asset/asset.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ def on_update(self):
244244

245245
def before_submit(self):
246246
if self.is_composite_asset and not has_active_capitalization(self.name):
247+
if self.split_from and has_active_capitalization(self.split_from):
248+
return
247249
frappe.throw(_("Please capitalize this asset before submitting."))
248250

249251
def on_submit(self):

erpnext/assets/doctype/asset/test_asset.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,6 +1691,71 @@ def test_multi_currency_asset_pr_creation(self):
16911691
pr.submit()
16921692
self.assertTrue(get_gl_entries("Purchase Receipt", pr.name))
16931693

1694+
def test_split_asset_created_via_capitalization(self):
1695+
"""Test that assets created via Asset Capitalization can be split without capitalization error"""
1696+
from erpnext.assets.doctype.asset_capitalization.test_asset_capitalization import (
1697+
create_asset_capitalization,
1698+
create_asset_capitalization_data,
1699+
)
1700+
1701+
# Ensure test data exists
1702+
create_asset_capitalization_data()
1703+
1704+
company = "_Test Company with perpetual inventory"
1705+
set_depreciation_settings_in_company(company=company)
1706+
name = frappe.db.get_value(
1707+
"Asset Category Account",
1708+
filters={"parent": "Computers", "company_name": company},
1709+
fieldname=["name"],
1710+
)
1711+
frappe.db.set_value("Asset Category Account", name, "capital_work_in_progress_account", "")
1712+
1713+
stock_rate = 1000
1714+
stock_qty = 2
1715+
total_amount = 2000
1716+
1717+
# Create composite asset
1718+
wip_composite_asset = create_asset(
1719+
asset_name="Asset Capitalization WIP Composite Asset for Split",
1720+
is_composite_asset=1,
1721+
warehouse="Stores - TCP1",
1722+
company=company,
1723+
asset_quantity=2, # Set quantity > 1 to allow splitting
1724+
)
1725+
1726+
# Create and submit Asset Capitalization
1727+
asset_capitalization = create_asset_capitalization(
1728+
target_asset=wip_composite_asset.name,
1729+
stock_qty=stock_qty,
1730+
stock_rate=stock_rate,
1731+
company=company,
1732+
submit=1,
1733+
)
1734+
1735+
# Verify asset was capitalized
1736+
target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
1737+
self.assertEqual(target_asset.net_purchase_amount, total_amount)
1738+
self.assertEqual(target_asset.status, "Work In Progress")
1739+
1740+
# Submit the capitalized asset
1741+
target_asset.submit()
1742+
self.assertEqual(target_asset.status, "Submitted")
1743+
1744+
# Split the asset - this should work without capitalization error
1745+
split_qty = 1
1746+
splitted_asset = split_asset(target_asset.name, split_qty)
1747+
1748+
# Verify split asset was created and submitted successfully
1749+
self.assertIsNotNone(splitted_asset)
1750+
self.assertEqual(splitted_asset.asset_quantity, split_qty)
1751+
self.assertEqual(splitted_asset.split_from, target_asset.name)
1752+
self.assertEqual(splitted_asset.docstatus, 1) # Should be submitted
1753+
self.assertEqual(splitted_asset.status, "Submitted")
1754+
1755+
# Verify original asset was updated
1756+
target_asset.reload()
1757+
self.assertEqual(target_asset.asset_quantity, 1) # Remaining quantity
1758+
16941759

16951760
def get_gl_entries(doctype, docname):
16961761
gl_entry = frappe.qb.DocType("GL Entry")

0 commit comments

Comments
 (0)