Merge pull request #54403 from aerele/fix/support-#64052

fix(stock): ignore fetching warehouse account for asset items
This commit is contained in:
rohitwaghchaure
2026-05-15 13:15:11 +05:30
committed by GitHub
3 changed files with 149 additions and 7 deletions

View File

@@ -2062,7 +2062,7 @@ def create_asset_category(enable_cwip=1):
asset_category.insert()
def create_fixed_asset_item(item_code=None, auto_create_assets=1, is_grouped_asset=0):
def create_fixed_asset_item(item_code=None, auto_create_assets=1, is_grouped_asset=0, asset_category=None):
meta = frappe.get_meta("Asset")
naming_series = meta.get_field("naming_series").options.splitlines()[0] or "ACC-ASS-.YYYY.-"
try:
@@ -2072,7 +2072,7 @@ def create_fixed_asset_item(item_code=None, auto_create_assets=1, is_grouped_ass
"item_code": item_code or "Macbook Pro",
"item_name": "Macbook Pro",
"description": "Macbook Pro Retina Display",
"asset_category": "Computers",
"asset_category": asset_category or "Computers",
"item_group": "All Item Groups",
"stock_uom": "Nos",
"is_stock_item": 0,

View File

@@ -269,14 +269,15 @@ class StockController(AccountsController):
)
is_asset_pr = any(d.get("is_fixed_asset") for d in self.get("items"))
if (
need_inventory_map = (self.get_stock_items() or self.get("packed_items")) and (
cint(erpnext.is_perpetual_inventory_enabled(self.company))
or provisional_accounting_for_non_stock_items
or is_asset_pr
):
)
inventory_account_map = frappe._dict()
if need_inventory_map:
inventory_account_map = self.get_inventory_account_map()
if need_inventory_map or provisional_accounting_for_non_stock_items or is_asset_pr:
if self.docstatus == 1:
if not gl_entries:
gl_entries = (

View File

@@ -5483,6 +5483,147 @@ class TestPurchaseReceipt(ERPNextTestSuite):
"Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", original_value
)
def test_purchase_receipt_gl_entries_for_asset_item(self):
from erpnext.assets.doctype.asset.test_asset import create_fixed_asset_item
# Create a Company without Stock Accounts Linked.
company = frappe.get_doc(
{
"doctype": "Company",
"company_name": "Asset Company",
"country": "India",
"default_currency": "INR",
}
).insert()
stock_accounts = (
company.default_inventory_account,
company.stock_adjustment_account,
company.stock_received_but_not_billed,
)
company.update(
{"stock_in_hand_account": "", "stock_adjustment_account": "", "stock_received_but_not_billed": ""}
).save()
for account in stock_accounts:
frappe.db.delete("Account", account)
asset_category = create_asset_category_for_pr_test()
asset_item = create_fixed_asset_item(
item_code="Test Fixed Asset Item for PR GL Test", asset_category=asset_category.name
)
arnb_account = frappe.db.get_value("Company", company.name, "asset_received_but_not_billed")
# Purchase Receipt should be able to create even without any stock accounts linked to company
pr = make_purchase_receipt(
item_code=asset_item.name, warehouse="Stores - AC", qty=1, rate=10000, company=company.name
)
gl_entries = get_gl_entries("Purchase Receipt", pr.name)
self.assertTrue(gl_entries)
gl_accounts = [d.account for d in gl_entries]
# The fixed asset account set on the item row must be debited
asset_expense_account = pr.items[0].expense_account
self.assertIn(asset_expense_account, gl_accounts)
# Asset Received But Not Billed must be credited
self.assertIn(arnb_account, gl_accounts)
# No Stock-type account should appear — the inventory account map is not
# needed and must not be consulted for an asset-only receipt
for entry in gl_entries:
account_type = frappe.db.get_value("Account", entry.account, "account_type")
self.assertNotEqual(account_type, "Stock")
pr.cancel()
def test_purchase_receipt_gl_entries_with_mixed_asset_and_stock_items(self):
from erpnext.assets.doctype.asset.test_asset import create_fixed_asset_item
company = frappe.get_doc(
{
"doctype": "Company",
"company_name": "Asset Company",
"country": "India",
"default_currency": "INR",
}
).insert()
asset_category = create_asset_category_for_pr_test()
asset_item = create_fixed_asset_item(
item_code="Test Fixed Asset Item for PR GL Test", asset_category=asset_category.name
)
arnb_account = frappe.db.get_value("Company", company.name, "asset_received_but_not_billed")
pr = make_purchase_receipt(
item_code=asset_item.name,
qty=1,
rate=10000,
warehouse="Stores - AC",
do_not_save=True,
company=company.name,
)
pr.append(
"items",
{
"item_code": "_Test Item",
"warehouse": "Stores - AC",
"qty": 5,
"received_qty": 5,
"rejected_qty": 0,
"rate": 50,
"uom": "_Test UOM",
"stock_uom": "_Test UOM",
"conversion_factor": 1.0,
"cost_center": frappe.get_cached_value("Company", pr.company, "cost_center"),
},
)
pr.insert()
pr.submit()
gl_entries = get_gl_entries("Purchase Receipt", pr.name)
self.assertTrue(gl_entries)
gl_accounts = [d.account for d in gl_entries]
self.assertIn(arnb_account, gl_accounts)
# The fixed asset account set on the item row must be debited
asset_expense_account = pr.items[0].expense_account
self.assertIn(asset_expense_account, gl_accounts)
# Asset Received But Not Billed must be credited
self.assertIn(asset_category.accounts[0].fixed_asset_account, gl_accounts)
# Stock Accounts should be used for Stock Items
self.assertIn(company.stock_received_but_not_billed, gl_accounts)
self.assertIn(company.default_inventory_account, gl_accounts)
pr.cancel()
def create_asset_category_for_pr_test():
category_name = "Test Asset Category for PR"
asset_category = frappe.get_doc(
{
"doctype": "Asset Category",
"asset_category_name": category_name,
"enable_cwip_accounting": 0,
"depreciation_method": "Straight Line",
"total_number_of_depreciations": 12,
"frequency_of_depreciation": 1,
"accounts": [
{
"company_name": "Asset Company",
"fixed_asset_account": "Electronic Equipment - AC",
}
],
}
).insert()
return asset_category
def prepare_data_for_internal_transfer():
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier