From 651e4696fd7e513c1a8ff4f5772001dca64a5191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKhushi?= <“khushirawat.sophia@gamil.com”> Date: Tue, 16 Apr 2024 10:58:30 +0530 Subject: [PATCH] fix: expense account should be fetched from related asset category --- erpnext/assets/doctype/asset/test_asset.py | 4 +-- erpnext/controllers/accounts_controller.py | 3 +++ erpnext/controllers/buying_controller.py | 4 ++- erpnext/stock/doctype/item/test_item.py | 27 +++++++++++++++++++ .../purchase_receipt/purchase_receipt.py | 13 +-------- erpnext/stock/get_item_details.py | 25 ++++++++++++----- 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index 1b3951e86a6..fa29e542b5e 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -1738,12 +1738,12 @@ def create_asset(**args): return asset -def create_asset_category(): +def create_asset_category(enable_cwip=1): asset_category = frappe.new_doc("Asset Category") asset_category.asset_category_name = "Computers" asset_category.total_number_of_depreciations = 3 asset_category.frequency_of_depreciation = 3 - asset_category.enable_cwip_accounting = 1 + asset_category.enable_cwip_accounting = enable_cwip asset_category.append( "accounts", { diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index bd7d9264413..872452312ef 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -778,6 +778,9 @@ class AccountsController(TransactionBase): # reset pricing rule fields if pricing_rule_removed item.set(fieldname, value) + elif fieldname == "expense_account" and not item.get("expense_account"): + item.expense_account = value + if self.doctype in ["Purchase Invoice", "Sales Invoice"] and item.meta.get_field( "is_fixed_asset" ): diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 58bcc8c5fbe..8d0d6c7aa45 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -712,6 +712,7 @@ class BuyingController(SubcontractingController): def auto_make_assets(self, asset_items): items_data = get_asset_item_details(asset_items) messages = [] + alert = False for d in self.items: if d.is_fixed_asset: @@ -761,9 +762,10 @@ class BuyingController(SubcontractingController): frappe.bold(d.item_code) ) ) + alert = True for message in messages: - frappe.msgprint(message, title="Success", indicator="green") + frappe.msgprint(message, title="Success", indicator="green", alert=alert) def make_asset(self, row, is_grouped_asset=False): if not row.asset_location: diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 2b3d3b72a02..cea4caad59f 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -156,6 +156,33 @@ class TestItem(FrappeTestCase): for key, value in to_check.items(): self.assertEqual(value, details.get(key), key) + def test_get_asset_item_details(self): + from erpnext.assets.doctype.asset.test_asset import create_asset_category, create_fixed_asset_item + + create_asset_category(0) + create_fixed_asset_item() + + details = get_item_details( + { + "item_code": "Macbook Pro", + "company": "_Test Company", + "currency": "INR", + "doctype": "Purchase Receipt", + } + ) + self.assertEqual(details.get("expense_account"), "_Test Fixed Asset - _TC") + + frappe.db.set_value("Asset Category", "Computers", "enable_cwip_accounting", "1") + details = get_item_details( + { + "item_code": "Macbook Pro", + "company": "_Test Company", + "currency": "INR", + "doctype": "Purchase Receipt", + } + ) + self.assertEqual(details.get("expense_account"), "CWIP Account - _TC") + def test_item_tax_template(self): expected_item_tax_template = [ { diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index e507a20cc83..d838995e1f8 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -671,19 +671,8 @@ class PurchaseReceipt(BuyingController): else self.get_company_default("stock_received_but_not_billed") ) landed_cost_entries = get_item_account_wise_additional_cost(self.name) - if d.is_fixed_asset: - if is_cwip_accounting_enabled(d.asset_category): - stock_asset_account_name = get_asset_account( - "capital_work_in_progress_account", - asset_category=d.asset_category, - company=self.company, - ) - else: - stock_asset_account_name = get_asset_category_account( - "fixed_asset_account", asset_category=d.asset_category, company=self.company - ) - + stock_asset_account_name = d.expense_account stock_value_diff = ( flt(d.base_net_amount) + flt(d.item_tax_amount) + flt(d.landed_cost_voucher_amount) ) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 247ab1f7d47..4342359c374 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -74,7 +74,6 @@ def get_item_details(args, doc=None, for_validate=False, overwrite_warehouse=Tru args["bill_date"] = doc.get("bill_date") out = get_basic_details(args, item, overwrite_warehouse) - get_item_tax_template(args, item, out) out["item_tax_rate"] = get_item_tax_map( args.company, @@ -293,12 +292,26 @@ def get_basic_details(args, item, overwrite_warehouse=True): expense_account = None - if args.get("doctype") == "Purchase Invoice" and item.is_fixed_asset: - from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account + if item.is_fixed_asset: + from erpnext.assets.doctype.asset.asset import get_asset_account, is_cwip_accounting_enabled - expense_account = get_asset_category_account( - fieldname="fixed_asset_account", item=args.item_code, company=args.company - ) + if is_cwip_accounting_enabled(item.asset_category): + expense_account = get_asset_account( + "capital_work_in_progress_account", + asset_category=item.asset_category, + company=args.company, + ) + elif ( + args.get("doctype") == "Purchase Invoice" + or args.get("doctype") == "Purchase Receipt" + or args.get("doctype") == "Purchase Order" + or args.get("doctype") == "Material Request" + ): + from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account + + expense_account = get_asset_category_account( + fieldname="fixed_asset_account", item=args.item_code, company=args.company + ) # Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master if not args.get("uom"):